diff --git a/docs/html/about/about_toc.cs b/docs/html/about/about_toc.cs
new file mode 100644
index 0000000..04cc5a3
--- /dev/null
+++ b/docs/html/about/about_toc.cs
@@ -0,0 +1,44 @@
+<ul id="nav">
+  
+<li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot?>about/index.html">Welcome</a></div>
+    <ul>    
+     <!-- <li><a href="<?cs var:toroot ?>about/marketplace.html">Open Marketplace</a></li>
+    
+       <li><a href="<?cs var:toroot ?>about/flexible.html">Flexible Framework</a></li>
+    -->
+      <li><a href="<?cs var:toroot?>about/start.html">Get Started</a></li>
+    </ul>
+  </li> 
+
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/android-4.0-highlights.html">
+      <span class="en">Ice Cream Sandwich</span></a></div>
+      <ul>
+        <li><a href="<?cs var:toroot ?>about/versions/android-4.0.3.html">Android 4.0.3 APIs</a></li>
+        <li><a href="<?cs var:toroot ?>about/versions/android-4.0.html">Android 4.0 APIs</a> </li>
+      </ul>
+  </li>
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/android-3.0-highlights.html">
+      <span class="en">Honeycomb</span></a></div>
+      <ul>
+        <li><a href="<?cs var:toroot ?>about/versions/android-3.2.html">Android 3.2 APIs</a></li>
+        <li><a href="<?cs var:toroot ?>about/versions/android-3.1.html">Android 3.1 APIs</a></li>
+        <li><a href="<?cs var:toroot ?>about/versions/android-3.0.html">Android 3.0 APIs</a> </li>
+      </ul>
+  </li>
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/android-2.3-highlights.html">
+      <span class="en">Gingerbread</span></a></div>
+      <ul>
+        <li><a href="<?cs var:toroot ?>about/versions/android-2.3.4.html">Android 2.3.4 APIs</a></li>
+        <li><a href="<?cs var:toroot ?>about/versions/android-2.3.3.html">Android 2.3.3 APIs</a></li>
+      </ul>
+  </li>
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs
+var:toroot?>about/dashboards/index.html">Dashboards</a></div>
+  </li>
+
+</ul>
\ No newline at end of file
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
new file mode 100644
index 0000000..c18d398
--- /dev/null
+++ b/docs/html/about/dashboards/index.jd
@@ -0,0 +1,235 @@
+page.title=Dashboards
+header.hide=1
+@jd:body
+
+
+
+<h2 id="Platform">Platform Versions</h2>
+
+<p>This page provides data about the relative number of active devices
+running a given version of the Android platform. This can help you
+understand the landscape of device distribution and decide how to prioritize
+the development of your application features for the devices currently in
+the hands of users. For information about how to target your application to devices based on
+platform version, read about <a 
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API levels</a>.</p>
+
+
+<h3 id="PlatformCurrent">Current Distribution</h3>
+
+<p>The following pie chart and table is based on the number of Android devices that have accessed
+Google Play within a 14-day period ending on the data collection date noted below.</p>
+
+<div class="col-6" style="margin-left:0">
+
+
+<table>
+<tr>
+  <th>Version</th>
+  <th>Codename</th>
+  <th>API Level</th>
+  <th>Distribution</th>
+</tr>
+<tr><td><a href="/about/versions/android-1.5.html">1.5</a></td><td>Cupcake</td>  <td>3</td><td>0.3%</td></tr>
+<tr><td><a href="/about/versions/android-1.6.html">1.6</a></td><td>Donut</td>    <td>4</td><td>0.6%</td></tr>
+<tr><td><a href="/about/versions/android-2.1.html">2.1</a></td><td>Eclair</td>   <td>7</td><td>5.2%</td></tr>
+<tr><td><a href="/about/versions/android-2.2.html">2.2</a></td><td>Froyo</td>    <td>8</td><td>19.1%</td></tr>
+<tr><td><a href="/about/versions/android-2.3.html">2.3 - 2.3.2</a>
+                                   </td><td rowspan="2">Gingerbread</td>    <td>9</td><td>0.4%</td></tr>
+<tr><td><a href="/about/versions/android-2.3.3.html">2.3.3 - 2.3.7
+        </a></td><!-- Gingerbread -->                                       <td>10</td><td>64.6%</td></tr>
+<tr><td><a href="/about/versions/android-3.1.html">3.1</a></td>
+                                                   <td rowspan="2">Honeycomb</td>      <td>12</td><td>0.7%</td></tr>
+<tr><td><a href="/about/versions/android-3.2.html">3.2</a></td><!-- Honeycomb --><td>13</td><td>2%</td></tr> 
+<tr><td><a href="/about/versions/android-4.0.html">4.0 - 4.0.2</a></td>
+                                                <td rowspan="2">Ice Cream Sandwich</td><td>14</td><td>0.4%</td></tr> 
+<tr><td><a href="/about/versions/android-4.0.3.html">4.0.3 - 4.0.4</a>     </td><!-- ICS     -->  <td>15</td><td>6.7%</td></tr> 
+</table>
+
+
+</div>
+
+<div class="col-7" style="margin-right:0">
+<img alt=""
+src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:0.3,0.6,5.2,19.1,0.4,64.6,0.7,2.0,0.4,6.7&chl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0|Android%204.0.3&chco=c4df9b,6fad0c&chf=bg,s,00000000" />
+
+</div><!-- end dashboard-panel -->
+
+<p style="clear:both"><em>Data collected during a 14-day period ending on June 1, 2012</em></p>
+<!--
+<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
+-->
+
+<h3 id="PlatformHistorical">Historical Distribution</h3>
+
+<p>The following stacked line graph provides a history of the relative number of
+active Android devices running different versions of the Android platform. It also provides a
+valuable perspective of how many devices your application is compatible with, based on the
+platform version.</p>
+
+<p>Notice that the platform versions are stacked on top of each other with the oldest active
+version at the top. This format indicates the total percent of active devices that are compatible
+with a given version of Android. For example, if you develop your application for
+the version that is at the very top of the chart, then your application is
+compatible with 100% of active devices (and all future versions), because all Android APIs are
+forward compatible. Or, if you develop your application for a version lower on the chart,
+then it is currently compatible with the percentage of devices indicated on the y-axis, where the
+line for that version meets the y-axis on the right.</p>
+
+<p>Each dataset in the timeline is based on the number of Android devices that accessed
+Google Play within a 14-day period ending on the date indicated on the x-axis.</p>
+
+<img alt="" height="250" width="660"
+src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C12/01%7C12/15%7C01/01%7C01/15%7C02/01%7C02/15%7C03/01%7C03/15%7C04/01%7C04/15%7C05/01%7C05/15%7C06/01%7C1%3A%7C2011%7C%7C2012%7C%7C%7C%7C%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:98.6,98.5,98.3,98.2,98.6,98.4,98.4,98.6,98.5,98.6,98.8,98.7,98.9|97.3,97.3,97.2,97.2,97.6,97.5,97.6,97.8,97.8,97.9,98.1,98.1,98.3|87.7,88.1,88.7,89.2,89.9,90.3,90.8,91.4,91.8,92.1,92.5,92.7,93.1|52.4,55.2,58.2,60.1,62.0,63.7,65.2,66.8,68.6,69.9,71.5,72.6,74.0|2.3,2.6,3.5,3.6,4.0,4.1,4.3,4.6,5.5,6.5,7.6,8.2,9.4|1.2,1.3,2.0,2.2,2.6,3.0,3.2,3.5,4.5,5.5,6.6,7.4,8.7|0.0,0.0,0.3,0.4,0.7,0.8,1.1,1.3,2.3,3.3,4.4,5.3,6.7&chm=b,c3df9b,0,1,0|b,b6dc7d,1,2,0|tAndroid%202.2,5b831d,2,0,15,,t::-5|b,aadb5e,2,3,0|tAndroid%202.3.3,496c13,3,0,15,,t::-5|b,9ddb3d,3,4,0|b,91da1e,4,5,0|b,80c414,5,6,0|B,6fad0c,6,7,0&chg=7,25&chdl=Android%201.6|Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3&chco=add274,a0d155,94d134,84c323,73ad18,62960f,507d08&chf=bg,s,00000000" />
+
+<p><em>Last historical dataset collected during a 14-day period ending on June 1, 2012</em></p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="Screens">Screen Sizes and Densities</h2>
+
+<p>This section provides data about the relative number of active devices that have a particular
+screen configuration, defined by a combination of screen size and density. To simplify the way that
+you design your user interfaces for different screen configurations, Android divides the range of
+actual screen sizes and densities into:</p> 
+ 
+<ul> 
+<li>A set of four generalized <strong>sizes</strong>: <em>small</em>, <em>normal</em>,
+<em>large</em>, and <em>xlarge</em></em></li>
+<li>A set of four generalized <strong>densities</strong>: <em>ldpi</em> (low), <em>mdpi</em>
+(medium), <em>hdpi</em> (high), and <em>xhdpi</em> (extra high)</li>
+</ul> 
+
+<p>For information about how you can support multiple screen configurations in your
+application, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
+
+<p class="note"><strong>Note:</strong> This data is based on the number
+of Android devices that have accessed Google Play within a 7-day period
+ending on the data collection date noted below.</p>
+
+
+<div class="col-6" style="margin-left:0">
+
+
+<table>
+<tr>
+<th></th>
+<th scope="col">ldpi</th>
+<th scope="col">mdpi</th>
+<th scope="col">hdpi</th>
+<th scope="col">xhdpi</th>
+</tr>
+<tr><th scope="row">small</th> 
+<td>2.3%</td>     <!-- small/ldpi -->
+<td></td>     <!-- small/mdpi -->
+<td>2.4%</td> <!-- small/hdpi -->
+<td></td>     <!-- small/xhdpi -->
+</tr> 
+<tr><th scope="row">normal</th> 
+<td>0.7%</td>  <!-- normal/ldpi -->
+<td>26.2%</td> <!-- normal/mdpi -->
+<td>57.8%</td> <!-- normal/hdpi -->
+<td>0.9%</td>      <!-- normal/xhdpi -->
+</tr> 
+<tr><th scope="row">large</th> 
+<td>0.3%</td>     <!-- large/ldpi -->
+<td>2%</td> <!-- large/mdpi -->
+<td></td>     <!-- large/hdpi -->
+<td></td>     <!-- large/xhdpi -->
+</tr> 
+<tr><th scope="row">xlarge</th> 
+<td></td>     <!-- xlarge/ldpi -->
+<td>7.4%</td> <!-- xlarge/mdpi -->
+<td></td>     <!-- xlarge/hdpi -->
+<td></td>     <!-- xlarge/xhdpi -->
+</tr> 
+</table>
+
+
+</div>
+
+<div class="col-7" style="margin-right:0">
+<img alt=""
+src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=Xlarge%20/%20mdpi|Large%20/%20ldpi|Large%20/%20mdpi|Normal%20/%20hdpi|Normal%20/%20ldpi|Normal%20/%20mdpi|Normal%20/%20xhdpi|Small%20/%20hdpi|Small%20/%20ldpi&chd=t%3A7.4,0.3,2.0,57.8,0.7,26.2,0.9,2.4,2.3&chf=bg,s,00000000" />
+
+</div>
+
+<p style="clear:both"><em>Data collected during a 7-day period ending on May 1, 2012</em></p>
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="OpenGL">Open GL Version</h2>
+
+<p>This section provides data about the relative number of active devices that support a particular
+version of OpenGL ES. Note that support for one particular version of OpenGL ES also implies
+support for any lower version (for example, support for version 2.0 also implies support for
+1.1).</p>
+
+<p>To declare which version of OpenGL ES your application requires, you should use the {@code
+android:glEsVersion} attribute of the <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
+element. You can also use the <a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a> element to declare the GL compression formats that your application
+uses.</p>
+
+<p class="note"><strong>Note:</strong> This data is based on the number
+of Android devices that have accessed Google Play within a 7-day period
+ending on the data collection date noted below.</p>
+
+
+<div class="col-6" style="margin-left:0">
+<table>
+<tr>
+<th scope="col">OpenGL ES Version</th>
+<th scope="col">Distribution</th>
+</tr>
+<tr>
+<td>1.1 only</th>
+<td>9.9%</td>
+</tr>
+<tr>
+<td>2.0 &amp; 1.1</th>
+<td>90.1%</td>
+</tr>
+</table>
+</div>
+
+<div class="col-7" style="margin-right:0">
+<img alt=""
+src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL% 202.0%20%26%201.1&chd=t%3A9.9,90.1&chf=bg,s,00000000" />
+
+</div>
+
+
+<p style="clear:both"><em>Data collected during a 7-day period ending on June 4, 2012</em></p>
diff --git a/docs/html/about/flexible.jd b/docs/html/about/flexible.jd
new file mode 100644
index 0000000..ec3a44c
--- /dev/null
+++ b/docs/html/about/flexible.jd
@@ -0,0 +1,34 @@
+page.title=Flexible Framework
+walkthru=1
+
+@jd:body
+
+<style>
+blockquote {
+  color:#9933CC;
+}
+</style>
+
+<blockquote>Android's flexible framework means it runs on more devices and reaches more
+users</blockquote>
+
+<p>Android powers millions of devices around the world and in a variety of form-factors. The Android
+framework is specially built to run apps on more than just one screen size and hardware
+configuration. As an app developer, Android's scale and variety offers you the potential to quickly
+reach millions of users.</p>
+
+<p>Android apps are flexible and easily adapt to the device on which they are running. Although the
+system scales your assets when necessary, you can provide alternative app resources that are
+optimized for specific device categories, such as the screen size and density. Android applies the
+appropriate resources when running your app, based on the current device’s configuration.</p>
+
+<blockquote>You're in control of which devices can install your app</blockquote>
+
+<p>Some devices provide a different user experience when using apps, but you’re always in control of
+how your app behaves on each device. If you publish your app on Google Play, you also have
+control over which kinds of devices are allowed to install your app and you can closely control how
+your app is distributed.</p>
+
+<p>Every device that includes Google Play has been certified compatible. This means that
+the device has passed a rigorous test suite to ensure that the device uses a version of Android that
+supports all the platform APIs and will successfully run your app.</p>
\ No newline at end of file
diff --git a/docs/html/about/index.jd b/docs/html/about/index.jd
new file mode 100644
index 0000000..c2d6426
--- /dev/null
+++ b/docs/html/about/index.jd
@@ -0,0 +1,157 @@
+page.title=Android, the world's most popular mobile platform
+walkthru=0
+header.hide=0
+
+@jd:body
+
+<div style="position:absolute;width:440px;">
+<p>Android powers hundreds of millions of mobile devices in more than 190
+countries around the world. It's the largest installed base of any mobile platform
+and growing fast&mdash;every day another 900,000 users power up their
+Android devices for the first time and start looking for apps, games,
+and other digital content. </p>
+
+<div style="width:330px">
+<p>Android gives you a world-class platform for creating apps and games for
+Android users everywhere, as well as an open marketplace for distributing
+to them instantly.</p>
+</div>
+</div>
+
+<img src="{@docRoot}images/about/growth-chart.png" alt="" height="400" width="681"
+style="margin:20px 0 10px 30px;" />
+<div style="position:relative;left: 450px;width: 250px;top: -20px;color: #777;">
+  <em>Android growth in device activations</em></div>
+
+
+<h3>Global partnerships and large installed base</h3>
+
+<p>Building on the contributions of the open-source Linux community and more
+than 300 hardware, software, and carrier partners, Android has rapidly become
+the fastest-growing mobile OS.</p>
+
+<blockquote>Every day more than 900,000 new Android devices are activated worldwide.</blockquote>
+
+<p>Android’s openness has made it a favorite for consumers and developers alike,
+driving strong growth in app consumption. Android users download more than 
+1 billion apps and games from Google Play each month. </p>
+
+<p>With it's partners, Android is continuously pushing the boundaries of hardware and software
+forward to bring new capabilities to users and developers. For developers, 
+Android innovation lets you build powerful, differentiated applications
+that use the latest mobile technologies.</p>
+
+<!-- <h3>Rapid innovation</h3>
+
+<p>Android is continuously pushing the boundaries of hardware and software
+forward, to bring new capabilities to users and developers. For developers, the
+rapid evolution of Android technology lets you stay in front with powerful,
+differentiated applications.</p>
+
+<p>Android gives you access to the latest technologies and innovations across a
+multitude of device form-factors, chipset architectures, and price points. From
+multicore processing and high-performance graphics to state-of-the-art sensors,
+vibrant touchscreens, and emerging mobile technologies such as Near Field
+Communication (NFC), Wi-Fi Direct, and face tracking.</p> -->
+
+<h3>Powerful development framework</h3>
+
+<blockquote>Easily optimize a single binary for phones, tablets, and other devices.</blockquote>
+
+<p>Android gives you everything you need to build best-in-class app experiences.
+It gives you a single application model that lets you deploy
+your apps broadly to hundreds of millions of users across a wide range of
+devices&mdash;from phones to tablets and beyond.</p>
+
+<p>Android also gives you tools for creating apps that look great and take
+advantage of the hardware capabilities available on each device. It
+automatically adapts your UI to look it's best on each device, while giving you
+as much control as you want over your UI on different device
+types. </p> 
+
+<p>For example, you can create a single app binary that's optimized for
+both phone and tablet form factors. You declare your UI in lightweight sets of XML
+resources, one set for parts of the UI that are common to all form factors and
+other sets for optimzations specific to phones or tablets.
+At runtime, Android applies the correct resource sets based on its screen size,
+density, locale,
+and so on.</p>
+
+
+<p>To help you develop efficiently, the <a href="{@docRoot}tools/index.html">Android 
+    Developer Tools</a>
+offers a full Java IDE with advanced features for developing, debugging, and
+packaging Android apps. Using the IDE, you can develop on any available Android
+device or create virtual devices that emulate any hardware configuration.</p>
+
+<blockquote>A billion downloads a month and growing. Get your apps in front
+of millions of users at Google's scale.</blockquote>
+
+<h3>Open marketplace for distributing your apps</h3>
+
+<p>Google Play is the premier marketplace for selling and distributing Android apps.
+When you publish an app on Google Play, you reach the huge installed base of
+Android.</p>
+
+<div style="float:left;margin-right:24px;margin-top:12px;">
+<img src="{@docRoot}images/gp-device.png">
+</div>
+
+<p>As an open marketplace, Google Play puts you in control of how you sell your
+products. You can publish whenever you want, as often as you want, and to the
+customers you want. You can distribute broadly to all markets and
+devices or focus on specific segments, devices, or ranges of hardware
+capabilities.</p>
+
+<p>You can monetize in the way that works best for your business&mdash;priced or
+free, with in-app products or subscriptions&mdash;for highest engagement and
+revenues. You also have complete control of the pricing for your apps
+and in-app products and can set or change prices in any supported currency at
+any time.<p>
+
+<p>Beyond growing your customer base, Google Play helps you build visibility and
+engagement across your apps and brand. As your apps rise in popularity, Google
+Play gives them higher placement in weekly "top" charts and rankings, and for
+the best apps promotional slots in curated collections.
+</p>
+
+<p>Preinstalled on hundreds of millions of Android devices around the world,
+Google Play can be a growth engine for your business.</p>
+
+<p><a class="landing-page-link" href="{@docRoot}about/start.html">GET STARTED</a></p>
+
+<div style="background: #F0F0F0;
+            border-top: 1px solid #DDD;
+            padding: 20px 0 24px 0;
+            overflow: auto;
+            clear:both;
+            margin-bottom:-10px;
+            margin-top:60px;"">
+   <div style="padding:0 0 0 29px;">
+        <h4>Developer Story: Robot Invader</h4>
+          <img alt="" class="screenshot thumbnail" style="-webkit-border-radius: 5px;
+            -moz-border-radius: 5px;
+            border-radius: 5px height:78px;
+            width: 78px;
+            float: left;
+            margin: 17px 20px 9px 0;" src=
+            "//g0.gstatic.com/android/market/com.robotinvader.knightmare/hi-256-0-9e08d83bc8d01649e167131d197ada1cd1783fb0">
+          <div style="width:700px;">
+          <p style="margin-top:26px;margin-bottom:12px;">Robot Invader chose 
+              Android as the launch platform for their first game, 
+              <a data-g-event="Developers Page" data-g-label="Case Study Link" href=
+              "//play.google.com/store/apps/details?id=com.robotinvader.knightmare"><em>Wind-up
+              Knight</em></a>.
+           </p>
+           <p>
+              Hear from the developers themselves how Android helped them reach more
+              than 100 devices with a single app binary, then iterate rapidly to ensure
+              a great experience for users.
+           </p>
+           </div>
+           <iframe style="float:left;
+             margin-right:24px;
+             margin-top:14px;" width="700" height="394" src=
+             "http://www.youtube.com/embed/hTtlLiUTowY" frameborder="0" allowfullscreen></iframe>
+   </div> 
+</div>
\ No newline at end of file
diff --git a/docs/html/about/marketplace.jd b/docs/html/about/marketplace.jd
new file mode 100644
index 0000000..34f57a5
--- /dev/null
+++ b/docs/html/about/marketplace.jd
@@ -0,0 +1,62 @@
+page.title=Open Marketplace
+walkthru=1
+
+@jd:body
+
+<style>
+blockquote {
+  color:#9933CC;
+}
+</style>
+
+<p>Android offers an open distribution model, not a walled garden. Once you’ve developed an
+app for Android and want to distribute it, you have choice.</p>
+
+<p>Your final application is contained in an APK file that you can make available to users any
+way you want. For example, you can upload it to your own web site to allow visitors to
+install it onto their devices. More often, you’ll want to use a trusted
+marketplace where users can discover and search for your apps.</p>
+
+<p>How you choose to distribute your app affects precisely how many users your app will reach. Which
+distribution provider you choose also affects the kinds of services available to you as a publisher,
+such as licensing and in-app billing APIs, user bug reports, installation analytics, marketing
+services, and more.</p>
+
+<p>Among your choices is Google Play, the premier marketplace for selling and distributing apps
+to Android users around the world. When you publish an app on Google Play, you reach hundreds of
+millions of customers in over 130 countries.</p>
+
+
+<h3>Your business, your customers</h3>
+
+<blockquote>Google Play makes your apps available to your customers
+immediately</blockquote>
+
+<p>As an open marketplace, Google Play puts you in control of your business and makes it easy for
+you to manage how you sell your products. You can publish whenever you want, as often as you want,
+and to the exact set of customers you want.</p>
+
+
+<h3>Visibility for your apps</h3>
+
+<p>Beyond growing your customer base, Google Play helps you build visibility and engagement across
+your apps and brand. As your apps rise in popularity, Google Play gives you higher placement in
+weekly "top" lists and offers promotional slots in curated collections. You can engage customers
+using rich, colorful product pages that feature app screenshots, videos, and user reviews, as well
+as cross-marketing links to your other products.</p>
+
+<h3>Flexible monetizing and distribution</h3>
+
+<blockquote class="right">You can distribute
+your apps free or priced and you can sell in-app products for additional revenue</blockquote>
+
+<p>Google Play offers a choice of monetizing options to meet your business needs. You control the
+pricing of your apps and in-app products&mdash;you can set and change prices at any time, even
+individually in local currencies around the world. On purchase, Google Play handles transactions in
+the buyer’s currency and makes payouts in your own currency.</p>
+
+
+<p>After publishing, you can manage the distribution of your app. You can distribute broadly to all
+markets and devices or focus on specific segments, devices, or ranges of hardware capabilities.
+Google Play provides the tools for controlling distribution and ensures that your app is available
+only to the users who you are targeting.</p>
diff --git a/docs/html/about/start.jd b/docs/html/about/start.jd
new file mode 100644
index 0000000..af8344d
--- /dev/null
+++ b/docs/html/about/start.jd
@@ -0,0 +1,63 @@
+page.title=Get Started
+walkthru=0
+
+@jd:body
+
+<p>Everything you need to start developing apps for Android is available here on
+developer.android.com. You'll find everything from the developer SDK, API documentation, and design
+guidelines, to information about the current device landscape and how you can distribute and
+monetize your app.</p>
+
+<p>No two apps are built in the same way, but we've structured the information you need to build an
+app into the following three sections that represent the general order for app development. 
+
+
+<style>
+h2.blue{color:#33B5E5}
+h2.blue+hr{background:#33B5E5}
+
+h2.orange{color:#FF8800}
+h2.orange+hr{background:#FF8800}
+
+h2.green{color:#99CC00}
+h2.green+hr{background:#99CC00}
+</style>
+
+<div class="col-4" style="margin-left:0">
+<h2 class="blue">1. Design</h2>
+
+<p>Before you write a single line of code, you need to design the user interface and make it fit
+the Android user experience. Although you may know what a user will <em>do</em> with your app, you
+should pause to focus on how a user will <em>interact</em> with it. Your design should be sleek,
+simple, powereful, and tailored to the Android experience.</p>
+
+<p>So whether your a one-man shop or a large team, you should study the <a
+href="{@docRoot}design/index.html">Design</a> guidelines first.</p>
+</div>
+
+<div class="col-5">
+<h2 class="orange">2. Develop</h2>
+<p>Once your design is finalized, all you need are the tools to turn your app ideas into reality.
+Android's framework provides you the APIs to build apps that take full advantage of
+device hardware, connected accessory devices, the Internet, software features, and more.
+With the power of Android, there's no limit to the power of your apps.</p>
+
+<p>Everything you need to learn about the app framework and developer tools is in the <a
+href="{@docRoot}develop/index.html">Develop</a> documentation.</p>
+
+</div>
+
+
+<div class="col-4" style="margin-right:0">
+<h2 class="green">3. Distribute</h2>
+<p>Now your app is complete. You've built it to support a variety of screen sizes and
+densities, and tested it on the Android emulator and on real devices. You're ready to ship your app.</p>
+
+<p>How you proceed depends on a variety of factors, such as your monetization strategy and which
+types of devices your app supports. Everything you need to get started with this process is
+available in the <a href="{@docRoot}distribute/index.html">Distribute</a> section.</p>
+</div>
+
+
+<p style="clear:both">Now that you know what's available, get started by installing the <a
+href="{@docRoot}sdk/index.html">Android SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/android-1.1.jd b/docs/html/about/versions/android-1.1.jd
similarity index 100%
rename from docs/html/sdk/android-1.1.jd
rename to docs/html/about/versions/android-1.1.jd
diff --git a/docs/html/sdk/android-1.5-highlights.jd b/docs/html/about/versions/android-1.5-highlights.jd
similarity index 100%
rename from docs/html/sdk/android-1.5-highlights.jd
rename to docs/html/about/versions/android-1.5-highlights.jd
diff --git a/docs/html/about/versions/android-1.5.jd b/docs/html/about/versions/android-1.5.jd
new file mode 100644
index 0000000..78dcbd7
--- /dev/null
+++ b/docs/html/about/versions/android-1.5.jd
@@ -0,0 +1,375 @@
+page.title=Android 1.5 Platform
+sdk.platform.version=1.5
+sdk.platform.apiLevel=3
+sdk.platform.majorMinor=major
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#features">Platform Highlights</a></li>
+  <li><a href="#relnotes">Revisions</a></li>
+  <li><a href="#api-level">API Level</a></li>
+  <li><a href="#api">Framework API Changes</a>
+  <li><a href="#apps">Built-in Applications</a></li>
+  <li><a href="#locs">Locales</a></li>
+  <li><a href="#skins">Emulator Skins</a></li>
+
+    </ol>
+  </li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
+deployable to Android-powered handsets starting in May 2009.
+The release includes new features for users and developers, as well as changes
+in the Android framework API. </p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes a
+fully compliant Android library and system image, as well as a set of emulator
+skins, sample applications, and more. The downloadable platform is fully
+compliant and includes no external libraries. </p>
+
+<p>To get started developing or testing against the Android
+{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
+download the platform into your Android 1.6 or later SDK. For more information,
+see <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a>.</p>
+
+
+<h2 id="features">Platform Highlights</h2>
+
+<p>For a list of new user features and platform highlights, see the <a
+href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android 
+{@sdkPlatformVersion} Platform Highlights</a> document.</p>
+
+<h2 id="relnotes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+  padding: .25em 1em 0em 1em;
+  margin-bottom: 0;
+}
+.toggleme {
+  padding: 1em 1em 0 2em;
+  line-height:1em;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0;
+}
+</style>
+
+<div class="toggleable opened">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.5, Revision 4</a> <em>(May 2010)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r6 or higher.</p>
+</dd>
+
+<dt>Tools:</dt>
+<dd>
+<ul> 
+<li>Adds support for library projects in the Ant build system.</li>
+<li>Fixes test project build in the Ant build system.</li>
+</ul> 
+</dd>
+
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.5, Revision 3</a> <em>(July 2009)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r3 or higher.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.5, Revision 2</a> <em>(May 2009)</em></a>
+  <div class="toggleme">
+<p>Not available as an SDK component &mdash; please use Android 1.5, r3 instead. </p>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.5, Revision 1</a> <em>(April 2009)</em></a>
+  <div class="toggleme">
+<p>Not available as an SDK component &mdash; please use Android 1.5, r3 instead. </p>
+ </div>
+</div>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
+application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
+<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
+element in your application's manifest. </p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
+
+
+<h2 id="api">Framework API Changes</h2>
+
+<p>The sections below provide information about the application framework API provided by the Android {@sdkPlatformVersion} platform. </p>
+
+<h3>UI framework</h3>
+  <ul>
+    <li>Framework for easier background/UI thread interaction</li>
+    <li>New {@link android.widget.SlidingDrawer SlidingDrawer} widget</li>
+    <li>New {@link android.widget.HorizontalScrollView HorizontalScrollview} widget</li>
+  </ul>
+
+<h3>AppWidget framework</h3>
+  <ul>
+    <li>APIs for creating secure home screen {@link android.appwidget
+AppWidgets}. For information about how to use AppWidgets, see the Developer's
+Guide <a href="{@docRoot}guide/topics/appwidgets/index.html">AppWidgets</a>
+documentation. Also see <a
+href="http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html">
+Introducing home screen widgets and the AppWidget
+framework</a> on the Android Developer's Blog.</li>
+    <li>APIs for populating {@link android.provider.LiveFolders Live Folders}
+        with custom content.</li>
+  </ul>
+
+<h3>Media framework</h3>
+  <ul>
+    <li>Raw audio recording and playback APIs</li>
+    <li>Interactive MIDI playback engine</li>
+    <li>Video recording APIs for developers (3GP format)</li>
+    <li>Video and photo sharing Intents</li>
+    <li>Media search Intent</li>
+  </ul>
+
+<h3>Input Method framework </h3>
+   <ul>
+    <li>{@link android.inputmethodservice.InputMethodService Input Method
+        Service} framework</li>
+    <li>Text-prediction engine</li>
+    <li>Ability to provide downloadable IMEs to users</li>
+  </ul>
+
+<h3>Application-defined hardware requirements</h3>
+
+<p>Applications can now use a new element in their manifest files, <a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>
+ to indicate to the Android system what hardware features
+they require in order to function properly. For example, an application might
+use the element to specify that it requires a physical keyboard or a particular
+navigation device, such as a trackball. Prior to installing the application, the
+Android system checks the attributes defined for the
+<code>&lt;uses-configuration&gt;</code> element and allows the installation to
+continue only if the required hardware is present.</p>
+
+<h3>Speech recognition framework</h3>
+    <ul>
+    <li>Support for using speech recognition libraries via Intent. See {@link
+android.speech.RecognizerIntent RecognizerIntent}.</li>
+  </ul>
+
+<h3>Miscellaneous API additions</h3>
+  <ul>
+    <li>LocationManager - Applications can get location change updates via
+        Intent</li>
+    <li>WebView - Touch start/end/move/cancel DOM event support</li>
+    <li>Redesigned {@link android.hardware.SensorManager Sensor Manager
+        APIs}</li>
+    <li>GLSurfaceView - convenience framework for creating OpenGL
+        applications</li>
+    <li>Broadcast Intent for app update install succeeded - for smoother app
+        upgrade experience</li>
+  </ul>
+
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
+the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API 
+Differences Report</a>.</p>
+
+
+<h2 id="apps">Built-in Applications</h2>
+
+<p>The system image included in the downloadable platform provides these
+built-in applications:</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+	<ul>
+	<li>Alarm Clock</li>
+	<li>Browser</li>
+	<li>Calculator</li>
+	<li>Camcorder</li>
+	<li>Camera</li>
+	<li>Contacts</li>
+	<li>Custom Locale (developer app)</li>
+	<li>Dev Tools (developer app)</li>
+	</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+	<ul>
+	<li>Dialer</li>
+	<li>Email</li>
+	<li>Gallery</li>
+	<li>IME for Japanese text input</li>
+	<li>Messaging</li>
+	<li>Music</li>
+	<li>Settings</li>
+	<li>Spare Parts (developer app)</li>
+	</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="locs" style="margin-top:.75em;">Locales</h2>
+
+<p>The system image included in the downloadable platform provides a variety of
+built-in locales. In some cases, region-specific strings are available for the
+locales. In other cases, a default version of the language is used. The
+languages that are available in the Android {@sdkPlatformVersion} system 
+image are listed below (with <em>language</em>_<em>country/region</em> 
+locale descriptor).</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>Chinese, PRC (zh_CN)</li>
+<li>Chinese, Taiwan (zh_TW)</li>
+<li>Czech (cs_CZ)</li>
+<li>Dutch, Netherlands (nl_NL)</li>
+<li>Dutch, Belgium (nl_BE)</li>
+<li>English, US (en_US)</li>
+<li>English, Britain (en_GB)</li>
+<li>English, Canada (en_CA)</li>
+<li>English, Australia (en_AU)</li>
+<li>English, New Zealand (en_NZ)</li>
+<li>English, Singapore(en_SG)</li>
+<li>French, France (fr_FR)</li>
+<li>French, Belgium (fr_BE)</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<li>French, Canada (fr_CA)</li>
+<li>French, Switzerland (fr_CH)</li>
+<li>German, Germany (de_DE)</li>
+<li>German, Austria (de_AT)</li>
+<li>German, Switzerland (de_CH)</li>
+<li>German, Liechtenstein (de_LI)</li>
+<li>Italian, Italy (it_IT)</li>
+<li>Italian, Switzerland (it_CH)</li>
+<li>Japanese (ja_JP)</li>
+<li>Korean (ko_KR)</li>
+<li>Polish (pl_PL)</li>
+<li>Russian (ru_RU)</li>
+<li>Spanish (es_ES)</li>
+</td>
+</tr>
+</table>
+
+<p>Localized UI strings match the locales that are accessible 
+through Settings.</p>
+
+<h2 id="skins">Emulator Skins</h2>
+
+<p>The downloadable platform includes a set of emulator skins that you can use for modeling your application in different screen sizes and resolutions. The emulator skins are: </p>
+
+<ul>
+  <li>
+    QVGA-P (240x320, low density, small screen)
+  </li>
+  <li>
+    QVGA-L (320x480, low density, small screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    HVGA-P (320x480, medium density, normal screen)
+  </li>
+  <li>
+    HVGA-L (320x480, medium density, normal screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
diff --git a/docs/html/about/versions/android-1.6-highlights.jd b/docs/html/about/versions/android-1.6-highlights.jd
new file mode 100644
index 0000000..2ee1d80
--- /dev/null
+++ b/docs/html/about/versions/android-1.6-highlights.jd
@@ -0,0 +1,213 @@
+page.title=Android 1.6 Platform Highlights
+sdk.date=September 2009
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content div.screenshot,
+#jd-content div.video {
+  float:right;
+  clear:right;
+  padding:15px 70px;
+  font-size:.9em;
+  font-weight:bold;
+  line-height:1.7em;
+}
+#jd-content div.video {
+  padding-top:0;
+  margin-top:-15px;
+}
+#jd-content div.screenshot img {
+  margin:0;
+}
+</style>
+
+<div class="video">
+<object width="278" height="180">
+<param name="movie" value="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&"></param>
+<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
+<embed src="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&" type="application/x-shockwave-flash" 
+allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
+</object>
+</div>
+
+
+<p>The Android 1.6 platform introduces new features for users and developers. 
+This page provides an overview of some new features and technologies.</p>
+
+<ul>
+  <li><a href="#UserFeatures">New User Features</a></li>
+  <li><a href="#GooglePlayUpdates">Google Play Updates</a></li>
+  <li><a href="#PlatformTechnologies">New Platform Technologies</a></li>
+</ul>
+
+
+    
+<h2 id="UserFeatures" style="clear:right">New User Features</h2>
+
+<!-- screenshots float right -->
+
+<div class="screenshot">
+<img src="images/search.png" class="screenshot" alt="" /><br/>
+Quick Search Box
+</div>
+ 
+<div class="screenshot">
+<img src="images/camera.png" class="screenshot" alt="" /><br/>
+New Camera/Camcorder UI
+</div>
+
+<div class="screenshot">
+<img src="images/battery.png" class="screenshot" alt="" /><br/>
+Battery Usage Indicator
+</div>
+
+
+<h3 id="QuickSearchBox">Quick Search Box for Android</h3>
+
+<p>Android 1.6  includes a redesigned search framework that provides a quick, 
+effective, and consistent way for users to search across multiple sources&mdash;such as 
+browser bookmarks &amp; history, contacts, and the web&mdash;directly from 
+the home screen.</p>
+
+<p>The system constantly learns which search results are more relevant based on what is 
+clicked. So popular contacts or apps that have previously been picked will bubble up to 
+the top when a user types the first few letters of a relevant query.</p>
+
+<p>The search framework also provides developers a way to easily expose relevant 
+content from their applications in Quick Search Box.</p>
+
+<h3 id="Camera">Camera, Camcorder, and Gallery</h3>
+
+<p>An updated user interface provides an integrated camera, camcorder, and gallery experience. 
+Users can quickly toggle between still and video capture modes. Additionally, the gallery 
+enables users to select multiple photos for deletion.</p>
+
+<p>Android 1.6 also provides a much faster camera experience.
+Compared to the previous release, launching the camera is now 39% faster, 
+and there is a 28% improvement in the time from completing one shot to the next.</p>
+
+
+<h3 id="VPN">VPN, 802.1x</h3>
+
+<p>A new Virtual Private Network (VPN) control panel in Settings allows users 
+to configure and connect to the following types of VPNs:</p>
+
+<ul>
+  <li>L2TP/IPSEC pre-shared key based VPN</li>
+  <li>L2TP/IPsec certificate based VPN</li>
+  <li>L2TP only VPN</li>
+  <li>PPTP only VPN</li>
+</ul>
+
+
+<h3 id="Battery">Battery usage indicator</h3>
+
+<p>A new battery usage screen lets users see which apps and services are consuming 
+battery power. If the user determines that a particular service or application is 
+using too much power, they can take action to save the battery by
+adjusting settings, stopping the application, or uninstalling the application.</p>
+
+
+<h3 id="A11y">Accessibility</h3>
+
+<p>Users will be able to download new accessibility services built
+on the new accessibility framework and enable them in Settings.</p>
+
+
+
+
+<h2 id="GooglePlayUpdates" style="clear:right">Google Play Updates</h2>
+
+<div class="screenshot" style="margin-top:-35px">
+<img src="images/market.png" class="screenshot" alt="" /><br/>
+New Google Play UI
+</div>
+
+<p>For devices with Google Play, the latest version improves the overall user experience and makes
+it easier for users to discover great apps and games from developers.</p>
+
+<ul>
+  <li>At the homescreen, users can choose among <em>Apps</em>, <em>Games</em>, and <em>Downloads</em>.</li>
+  <li>Inside a category, users can explore titles that are <em>Top paid</em>, <em>Top free</em>, and <em>Just in</em>.</li>
+  <li>For each title, users can now see screenshots submitted by developers in addition to 
+  reviews from other users.</li>
+</ul>
+    
+    
+
+
+<h2 id="PlatformTechnologies" style="clear:right">New Platform Technologies</h2>
+
+<h3 id="SearchFramework">Expanded Search Framework</h3>
+
+<p>The Android search framework has been redesigned and expanded to provide
+third-party applications the opportunity to surface
+content from their applications in Quick Search Box, the global search tool. 
+To do this, developers will need to make their app "searchable" and provide 
+suggestions in response to user queries.
+To enable application search suggestions, users simply select each application from which 
+they'd like to receive suggestions, under Searchable items in the Search settings.</p>
+
+
+<h3 id="TTS">Text-to-speech engine</h3>
+
+<p>Android 1.6 features a multi-lingual speech synthesis engine called Pico. 
+It allows any Android application to "speak" a string of text with an accent that matches the language. 
+The engine supports the following languages: English (American and British accents), French, 
+Italian, German and Spanish. If you're using a T-Mobile G1 or Dream device, you'll need to download the 
+SpeechSynthesis Data Installer from Google Play, which includes the "voices" needed by the 
+text-to-speech engine.</p>
+
+
+<h3 id="Gestures">Gestures</h3>
+
+<p>A new gestures framework provides application developers with a framework for creating, storing, 
+loading, and recognizing gestures and associating them with specific actions.</p>
+
+<p>Developers can use the new GestureBuilder tool included in the Android 1.6 SDK to generate libraries 
+of gestures to include with their application.</p>
+
+
+<h3 id="A11y">Accessibility</h3>
+
+<p>Android 1.6 provides a new accessibility framework. 
+With this framework, developers can create accessibility plugins that respond to user input, 
+such as making a sound when a new window is shown, vibrating when navigating to the top of 
+a list, and providing spoken feedback.</p>
+
+
+<h3 id="Screens">Expanded support for screen densities and resolutions</h3>
+
+<p>Android 1.6 adds screen support that enables applications to be rendered properly on different 
+display resolutions and densities. Developers can also specify the types of screens supported by their 
+application.</p>
+
+
+<h3 id="CDMA">Telephony support for CDMA</h3>
+
+<p>Android 1.6 includes support for CDMA in the telephony stack.</p>
+
+
+<h3 id="OpenCore">New version of OpenCore</h3>
+
+<p>Android 1.6 includes the updated OpenCore 2 media engine, which has:</p>
+
+<ul>
+  <li>Support for OpenMAX encoders</li>
+  <li>Support for additional audio codecs in AuthorEngine</li>
+  <li>Improved buffering model supports shared buffers allocated in the decoder</li>
+</ul>
+
+<h3 id="LinuxKernel">2.6.29 Linux kernel</h3>
+
+<p>Android 1.6 upgrades the Linux kernel from 2.6.27 to 2.6.29.</p>
+
+
+<h3 id="DeveloperAPIs">New Framework APIs</h3>
+
+<p>For a detailed overview of new APIs, see the 
+<a href="{@docRoot}about/versions/android-1.6.html#api-changes">Version Notes</a>. 
+For a complete report of all API changes, see the 
+<a href="{@docRoot}sdk/api_diff/4/changes.html">API Differences Report</a>.
diff --git a/docs/html/about/versions/android-1.6.jd b/docs/html/about/versions/android-1.6.jd
new file mode 100644
index 0000000..2a66cd3
--- /dev/null
+++ b/docs/html/about/versions/android-1.6.jd
@@ -0,0 +1,505 @@
+page.title=Android 1.6 Platform
+sdk.platform.version=1.6
+sdk.platform.apiLevel=4
+sdk.platform.majorMinor=minor
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#features">Platform Highlights</a></li>
+  <li><a href="#relnotes">Revisions</a></li>
+  <li><a href="#api-level">API Level</a></li>
+  <li><a href="#api">Framework API Changes</a>
+  <li><a href="#apps">Built-in Applications</a></li>
+  <li><a href="#locs">Locales</a></li>
+  <li><a href="#skins">Emulator Skins</a></li>
+
+    </ol>
+  </li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
+deployable to Android-powered handsets since October 2009.
+The platform includes new features for users and developers, as well as changes
+in the Android framework API. </p>
+
+<p>For developers, a new release of the Android {@sdkPlatformVersion} platform
+is available as a downloadable component for the Android SDK. The platform
+&mdash; Android 1.6 r2 &mdash; includes a fully compliant Android library and
+system image, as well as a set of emulator skins, sample applications, and minor
+development updates. The downloadable platform is fully compliant (API Level 4)
+and includes no external libraries.</p>
+
+<p>To get started developing or testing against the Android
+{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
+download the latest Android 1.6 platform into your Android 1.6 or later SDK. For
+more information, see <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a>.</p>
+
+
+<h2 id="features">Platform Highlights</h2>
+
+<p>For a list of new user features and platform highlights, see the <a
+href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android 
+{@sdkPlatformVersion} Platform Highlights</a> document.</p>
+
+
+<h2 id="relnotes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+  padding: .25em 1em 0em 1em;
+  margin-bottom: 0;
+}
+.toggleme {
+  padding: 1em 1em 0 2em;
+  line-height:1em;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0;
+}
+</style>
+
+<div class="toggleable opened">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.6, Revision 3</a> <em>(May 2010)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r6 or higher.</p>
+</dd>
+<dt>Tools:</dt> 
+<dd>
+<ul> 
+<li>Adds support for library projects in the Ant build system.</li>
+</ul> 
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.6, Revision 2</a> <em>(December 2009)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r4 or higher.</p>
+</dd>
+
+<dt>API related:</dt> 
+<dd>
+<ul> 
+<li>Properly exposes CDMA-related constants in <code><a href="{@docRoot}reference/android/telephony/TelephonyManager.html">android.telephony.TelephonyManager</a></code>: <code>DATA_ACTIVITY_DORMANT</code>,
+<code>PHONE_TYPE_CDMA</code>, <code>NETWORK_TYPE_CDMA</code>,
+<code>NETWORK_TYPE_EVDO_0</code>, <code>NETWORK_TYPE_EVDO_A</code>, and
+<code>NETWORK_TYPE_1xRTT</code>.</li> 
+</ul> 
+</dd>
+<dt>System image:</dt> 
+<dd>
+<ul> 
+<li>Fixes bug so that Bitmap's density is now propagated through Parcelable.</li> 
+<li>Fixes NinePatchDrawable to properly scale its reported padding for compatibility mode.</li> 
+<li>Fixes TextView to properly compute styled font metrics based on the screen density.</li> 
+<li>Updates kernel to 2.6.29, to match kernel on commercially
+available Android-powered devices.</li> 
+</ul> 
+</dd>
+<dt>Tools:</dt> 
+<dd>
+<ul> 
+<li>Adds new Ant build system with support for Emma instrumentation projects
+(code coverage).</li> 
+<li>Fixes emulator skins to properly emulate d-pad in landscape mode.</li> 
+<li>Fixes density rendering in the layout editor in ADT.</li> 
+</ul> 
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+        Android 1.6, Revision 1</a> <em>(September 2009)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies</dt>
+<dd>
+<p>Requires SDK Tools r3 or higher.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
+application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
+<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
+element in your application's manifest. </p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
+
+
+<h2 id="api">Framework API Changes</h2>
+
+<p>The sections below provide information about the application framework API provided by the Android {@sdkPlatformVersion} platform. </p>
+
+<h3 id="UIFramework">UI framework</h3>
+    <ul>
+      <li>New classes in {@link android.view.animation}
+      to control the behavior of animations:
+        <ul>
+          <li><code>AnticipateInterpolator</code></li>
+          <li><code>AnticipateOvershootInterpolator</code></li>
+          <li><code>BounceInterpolator</code></li>
+          <li><code>OvershootInterpolator</code></li>
+        </ul>
+      </li>
+      <li>New XML attribute <code>android:onClick</code> to specify a View's 
+<a href="/reference/android/view/View.OnClickListener.html">View.OnClickListener</a> 
+from a layout file.
+      </li>
+      <li>New support for dealing with varying screen densities. Density
+information is associated with Bitmap and Canvas for performing the
+correct scaling. The framework will automatically scale bitmaps and
+nine-patches based on the density the resource was found under and the
+density of the screen, etc.
+      </li><p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to 
+set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&lt;uses-sdk&gt;</code> 
+element in your application's manifest. </p>
+    </ul>
+
+<h3>Search framework</h3>
+  <ul>
+    <li>Applications can now expose relevant content to users as search
+suggestions in the Quick Search Box, a new device-wide search capability that is
+accessible from the home screen. To support this, the search framework adds new
+attributes to the searchable metadata file. For complete information, see the
+{@link android.app.SearchManager SearchManager} documentation.
+    </li>
+  </ul>
+
+<h3>Accessibility framework</h3>
+  <ul>
+    <li>New {@link android.view.accessibility android.accessibility} package
+that includes classes for capturing accessibility events and forwarding them to
+an {@link android.accessibilityservice AccessibilityService} handler. </li>
+    <li>New {@link android.accessibilityservice AccessibilityService} package
+that lets your application track user events and provide visual, audible, or
+haptic feedback to the user. </li>
+  </ul>
+
+<h3>Gesture input</h3>
+  <ul>
+    <li>New {@link android.gesture gesture} API for creating, recognizing,
+loading, and saving gestures.</li>
+  </ul>
+
+<h3>Text-to-speech</h3>
+  <ul>
+    <li>New {@link android.speech.tts android.speech.tts} package provides
+classes for synthesizing speech from text, for immediate playback or to create a
+sound file.</li>
+  </ul>
+
+<h3>Graphics</h3>
+  <ul>
+    <li>Classes in {@link android.graphics android.graphics} now support scaling
+for different screen densities.</li>
+  </ul>
+
+<h3>Telephony</h3>
+  <ul>
+    <li>New {@link android.telephony.SmsManager SmsManager} and other classes
+for sending and receiving SMS messages.</li>
+  </ul>
+
+<h3>Utilities</h3>
+  <ul>
+    <li>New {@link android.util.DisplayMetrics DisplayMetrics} fields for
+determining the density of the current device screen.</li>
+  </ul>
+
+<h3 id="AndroidManifest">Android Manifest elements</h3>
+
+    <ul>
+      <li>New <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code 
+      &lt;supports-screens>}</a> element lets you specify the device screen sizes that your 
+      application is designed and tested to support, where "size" is a combination
+      of resolution and density. If your application is run on a device whose screen 
+      size is not specified in the <code>&lt;supports-screen&gt;</code> element, the system 
+      displays the application in <em>compatibility mode</em>, which performs best-effort scaling
+      of the application UI to match the resolution and density of the screen. 
+
+    <p>The attributes available for defining an application's screen support are:
+
+        <ul>
+
+          <li><code>smallScreen</code>: Boolean value that indicates whether the
+            application is designed to run on devices with small screens. 
+            Examples: QVGA low density; VGA high density.
+          </li>
+          <li><code>normalScreens</code>: Boolean value that indicates whether 
+            the application is designed to run on devices with normal screens. 
+            Examples: WQVGA low density; HVGA medium density; WVGA high density.
+          </li>
+          <li><code>largeScreens</code>: Boolean value that indicates whether 
+            the application is designed to run on devices with significantly 
+            larger screens, such that special care may be required on
+            the application's part to make proper use of the screen area. 
+            Examples: VGA medium density; WVGA medium density.
+          </li>
+          <li><code>anyDensity</code>: Boolean value that indicates whether 
+            the application can accommodate any screen density.
+          </li>
+          <li><code>resizable</code>: Boolean value that indicates whether
+            the application can expand its layout to fit slightly larger screens.
+          </li>
+        </ul>
+    </p>
+    </li>
+
+      <li>New <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature>}</a>
+        element lets an application specify hardware (or other)
+        features that it requires to function normally. When an application
+        specifies such features, the system allows the application to be installed only
+        on devices that offer the required features. The element supports these
+        attributes:
+        <ul>
+          <li><code>name</code>: The name of the feature required by the application. Currently accepts 
+          "android.hardware.camera" and "android.hardware.camera.autofocus" values, which specify that a 
+          camera and camera autofocus are required, respectively.</li>
+          <li><code>glEsVersion</code>: Indicates the minimum version of OpenGL ES required.</li>
+        </ul>
+      </li>
+      <li>New attributes for the 
+      <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk>}</a> element:
+        <ul>
+          <li><code>targetSdkVersion</code>: Indicates the API Level that the application is targeting. 
+          It is able to run on older versions (down to minSdkVersion), but was explicitly tested to 
+          work with the version specified here. Specifying this version allows the platform to 
+          disable compatibility code that is not required or enable newer features that are not 
+          available to older applications. </li>
+          <li><code>maxSdkVersion</code>: Indicates the maximum API Level on which an application is 
+          designed to run. <strong>Important:</strong> Please read the <a
+          href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+          documentation before using this attribute. </li>
+        </ul>
+      </li>
+
+      </li>
+    </ul>
+
+<h3>New permissions</h3>
+
+    <ul>
+      <li>{@link android.Manifest.permission#CHANGE_WIFI_MULTICAST_STATE
+          CHANGE_WIFI_MULTICAST_STATE}: Allows applications to enter Wi-Fi 
+          Multicast mode.
+      </li>
+      <li>{@link android.Manifest.permission#GLOBAL_SEARCH}: Allows the 
+          global search system to access the data of a specified content provider.
+      </li> 
+      <li>{@link android.Manifest.permission#INSTALL_LOCATION_PROVIDER INSTALL_LOCATION_PROVIDER}: 
+          Allows an application to install a location provider into the Location Manager.
+      </li>
+      <li>{@link android.Manifest.permission#READ_HISTORY_BOOKMARKS READ_HISTORY_BOOKMARKS}: 
+          Allows an application to read (but not write) the user's browsing history 
+          and bookmarks.
+      </li>
+      <li>{@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS WRITE_HISTORY_BOOKMARKS}: 
+          Allows an application to write (but not read) the user's browsing history 
+          and bookmarks.
+      </li>
+      <li>{@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE}: 
+          Allows an application to write to external storage. Applications using API Level 3
+          and lower will be implicitly granted this permission (and this will be visible to 
+          the user); Applications using API Level 4 or higher must explicitly request this 
+          permission.
+      </li>
+    </ul>
+
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
+the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API 
+Differences Report</a>.</p>
+
+<h2 id="apps">Built-in Applications</h2>
+
+<p>The system image included in the downloadable platform provides these
+built-in applications:</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+	<ul>
+	<li>Alarm Clock</li>
+	<li>Browser</li>
+	<li>Calculator</li>
+	<li>Camcorder</li>
+	<li>Camera</li>
+	<li>Contacts</li>
+	<li>Custom Locale (developer app)</li>
+	<li>Dev Tools (developer app)</li>
+	<li>Dialer</li>
+	</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+	<ul>
+	<li>Email</li>
+	<li>Gallery</li>
+	<li>Gestures Builder</li>
+	<li>IME for Japanese text input</li>
+	<li>Messaging</li>
+	<li>Music</li>
+	<li>Settings</li>
+	<li>Spare Parts (developer app)</li>
+	</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="locs" style="margin-top:.75em;">Locales</h2>
+
+<p>The system image included in the downloadable platform provides a variety of
+built-in locales. In some cases, region-specific strings are available for the
+locales. In other cases, a default version of the language is used. The
+languages that are available in the Android {@sdkPlatformVersion} system 
+image are listed below (with <em>language</em>_<em>country/region</em> 
+locale descriptor).</p>
+
+<table style="border:0;margin-bottom:0;padding-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>Chinese, PRC (zh_CN)</li>
+<li>Chinese, Taiwan (zh_TW)</li>
+<li>Czech (cs_CZ)</li>
+<li>Dutch, Netherlands (nl_NL)</li>
+<li>Dutch, Belgium (nl_BE)</li>
+<li>English, US (en_US)</li>
+<li>English, Britain (en_GB)</li>
+<li>English, Canada (en_CA)</li>
+<li>English, Australia (en_AU)</li>
+<li>English, New Zealand (en_NZ)</li>
+<li>English, Singapore(en_SG)</li>
+<li>French, France (fr_FR)</li>
+<li>French, Belgium (fr_BE)</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<li>French, Canada (fr_CA)</li>
+<li>French, Switzerland (fr_CH)</li>
+<li>German, Germany (de_DE)</li>
+<li>German, Austria (de_AT)</li>
+<li>German, Switzerland (de_CH)</li>
+<li>German, Liechtenstein (de_LI)</li>
+<li>Italian, Italy (it_IT)</li>
+<li>Italian, Switzerland (it_CH)</li>
+<li>Japanese (ja_JP)</li>
+<li>Korean (ko_KR)</li>
+<li>Polish (pl_PL)</li>
+<li>Russian (ru_RU)</li>
+<li>Spanish (es_ES)</li>
+</td>
+</tr>
+</table>
+
+<p>Localized UI strings match the locales that are accessible 
+through Settings.</p>
+
+<h2 id="skins">Emulator Skins</h2>
+
+<p>The downloadable platform includes a set of emulator skins that you can 
+use for modeling your application in different screen sizes and resolutions. 
+The emulator skins are: </p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
diff --git a/docs/html/about/versions/android-2.0-highlights.jd b/docs/html/about/versions/android-2.0-highlights.jd
new file mode 100644
index 0000000..2ba9ac7
--- /dev/null
+++ b/docs/html/about/versions/android-2.0-highlights.jd
@@ -0,0 +1,201 @@
+page.title=Android 2.0 Platform Highlights
+sdk.date=October 2009
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content div.screenshot,
+#jd-content div.video {
+  float:right;
+  clear:right;
+  padding:15px 60px;
+  font-size:.9em;
+  font-weight:bold;
+  line-height:1.7em;
+}
+#jd-content div.video {
+  padding-top:0;
+  margin-top:-15px;
+}
+#jd-content div.screenshot.second {
+  clear:none;
+  padding:15px 0 15px 60px;
+}
+#jd-content div.screenshot img {
+  margin:0;
+  border:1px solid #ccc;
+}
+</style>
+
+<div class="video">
+<object width="278 height="180">
+<param name="movie" value="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&"></param>
+<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
+<embed src="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&" type="application/x-shockwave-flash" 
+allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
+</object>
+</div>
+
+
+<p>The Android 2.0 platform introduces many new and exciting features for
+users and developers. This document provides a glimpse at some of the new features
+and technologies in Android 2.0.</p>
+
+<ul>
+  <li><a href="#UserFeatures">New User Features</a></li>
+  <li><a href="#PlatformTechnologies">New Platform Technologies</a></li>
+</ul>
+
+
+    
+<h2 id="UserFeatures" style="clear:right">New User Features</h2>
+
+<!-- screenshots float right -->
+
+<div class="screenshot">
+  <img src="images/2.0/quick-connect.png" class="screenshot" alt="" /><br/>
+  Quick Contact for Android
+</div>
+
+<div class="screenshot second">
+  <img src="images/2.0/multiple-accounts.png" class="screenshot" alt="" /><br/>
+  Multiple Accounts
+</div>
+
+<div class="screenshot">
+  <img src="images/2.0/mms-search.png" class="screenshot" alt="" /><br/>
+  Messaging Search
+</div>
+
+<div class="screenshot second">
+  <img src="images/2.0/email-inbox.png" class="screenshot" alt="" /><br/>
+  Email Combined Inbox
+</div>
+
+<div class="screenshot">
+  <img src="images/2.0/camera-modes.png" class="screenshot" alt="" /><br/>
+  Camera Modes
+</div>
+
+
+
+<h3 id="Contacts">Contacts and accounts</h3>
+
+<ul>
+  <li>Multiple accounts can be added to a device for email and contact
+synchronization, including Exchange accounts. (Handset manufacturers can
+choose whether to include Exchange support in their devices.)</li>
+  <li>Developers can create sync adapters that provide synchronization with
+additional data sources.</li>
+  <li>Quick Contact for Android provides instant access to
+a contact's information and communication modes. For example, a user can tap a
+contact photo and select to call, SMS, or email the person. Other applications
+such as Email, Messaging, and Calendar can also reveal the Quick Contact widget
+when you touch a contact photo or status icon.</li>
+</ul>
+
+
+<!--
+<ul>
+  <li>Sync support for contacts from multiple data sources including Exchange. 
+  Handset manufacturers can choose whether or not to include Exchange support 
+  in their devices.</li>
+  <li>New way to hover on a person to see more info and select communication 
+  mode (for example, phone, SMS, email).</li>
+</ul>
+-->
+
+<h3 id="Email">Email</h3>
+
+<ul>
+  <li>Exchange support.</li>
+  <li>Combined inbox to browse email from multiple accounts in one page.</li>
+</ul>
+
+
+<h3 id="Messaging">Messaging</h3>
+
+<ul>
+  <li>Search functionality for all saved SMS and MMS messages.</li>
+  <li>Auto delete the oldest messages
+  in a conversation when a defined limit is reached.</li>
+</ul>
+
+
+<h3 id="Camera">Camera</h3>
+
+<ul>
+  <li>Built-in flash support</li>
+  <li>Digital zoom</li>
+  <li>Scene mode</li>
+  <li>White balance</li>
+  <li>Color effect</li>
+  <li>Macro focus</li>
+</ul>
+
+<h3 id="Keyboard">Android virtual keyboard</h3>
+
+<ul>
+  <li>An improved keyboard layout to makes it easier to hit the correct characters
+  and improve typing speed.</li>
+  <li>The framework's multi-touch support ensures that key presses aren't missed
+  while typing rapidly with two fingers.</li>
+  <li>A smarter dictionary learns from word usage and automatically includes
+  contact names as suggestions.</li>
+</ul>
+
+
+<h3 id="Browser">Browser</h3>
+
+<ul>
+  <li>Refreshed UI with actionable browser URL bar enables users to directly 
+  tap the address bar for instant searches and navigation.</li>
+  <li>Bookmarks with web page thumbnails.</li>
+  <li>Support for double-tap zoom.</li>
+  <li>Support for HTML5:</p>
+    <ul>
+      <li>Database API support, for client-side databases using SQL.</li>
+      <li>Application cache support, for offline applications.</li>
+      <li>Geolocation API support, to provide location information about the device.</li>
+      <li>{@code &lt;video>} tag support in fullscreen mode.</li>
+    </ul>
+  </li>
+</ul>
+
+
+<h3 id="Calendar">Calendar</h3>
+<ul>
+  <li>Agenda view provides infinite scrolling.</li>
+  <li>Events indicate the attending status for each invitee.</li>
+  <li>Invite new guests to events.</li>
+</ul>
+
+
+<h2 id="PlatformTechnologies" style="clear:right">New Platform Technologies</h2>
+
+<h3 id="MediaFramework">Media Framework</h3>
+
+<p>Revamped graphics architecture for improved performance that enables better
+hardware acceleration.</p>
+
+
+<h3 id="Bluetooth">Bluetooth</h3>
+
+<ul>
+  <li>Bluetooth 2.1</li>
+  <li>New BT profiles: Object Push Profile (OPP) and Phone Book Access Profile (PBAP)</li>
+</ul>
+
+
+<h3 id="DeveloperAPIs">New Framework APIs</h3>
+
+<p>Android 2.0 includes several new developer APIs.
+For an overview of new APIs, see the 
+<a href="{@docRoot}about/versions/android-2.0.html#api">Android 2.0 version notes</a>.</p>
+
+<p>For a complete report of all API changes, see the 
+<a href="{@docRoot}sdk/api_diff/5/changes.html">API Differences Report</a>.</p>
+
+
+
diff --git a/docs/html/about/versions/android-2.0.1.jd b/docs/html/about/versions/android-2.0.1.jd
new file mode 100644
index 0000000..bcba717
--- /dev/null
+++ b/docs/html/about/versions/android-2.0.1.jd
@@ -0,0 +1,361 @@
+page.title=Android 2.0.1, Release 1
+sdk.platform.version=2.0.1
+sdk.platform.apiLevel=6
+sdk.platform.majorMinor=minor
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>In this document</h2>
+  <ol>
+	<li><a href="#features">Platform Highlights</a></li>
+	<li><a href="#relnotes">Revisions</a></li>
+	<li><a href="#apps">Built-in Applications</a></li>
+	<li><a href="#locs">Locales</a></li>
+	<li><a href="#skins">Emulator Skins</a></li>
+	<li><a href="#dev-features">Developer Features</a></li>
+	<li><a href="#api">Framework API</a>
+    <ol>
+      <li><a href="#api-level">API level</a></li>
+      <li><a href="#api-changes">API changes summary</a></li>
+      <li><a href="#behavior-changes">Behavior changes</a></li>
+      <li><a href="#bug-fixes">Bug fixes</a></li>
+      <li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+differences report &raquo;</a> </li>
+    </ol>
+  </li>
+  </ol>
+
+  <h2>See Also</h2>
+  <ol>
+    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+  </ol>
+
+</div>
+</div>
+
+<p>
+
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
+deployable to Android-powered handsets starting in December 2009.
+This release includes minor API
+changes, bug fixes and framework behavioral changes. For information on changes
+and fixes, see the <a href="#api">Framework API</a> section.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes a
+fully compliant Android library and system image, as well as a set of emulator
+skins, sample applications, and more. The downloadable platform
+includes no external libraries. </p>
+
+<p>To get started developing or testing against the Android
+{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
+download the platform into your Android 1.6 or later SDK. For more information,
+see <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a>.</p>
+
+
+<h2 id="features">Platform Highlights</h2>
+
+<p>For a list of new user features and platform highlights, see the <a
+href="http://developer.android.com/about/versions/android-2.0-highlights.html">Android
+2.0 Platform Highlights</a> document.</p>
+
+<h2 id="relnotes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+padding: .25em 1em;
+}
+.toggleme {
+  padding: 1em 1em 0 2em;
+  line-height:1em;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0;
+}
+</style>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+        Android 2.0.1, Revision 1</a> <em>(December 2009)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r4 or higher.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+<h2 id="apps">Built-in Applications</h2>
+
+<p>The system image included in the downloadable platform provides these
+built-in applications:</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+	<ul>
+	<li>Alarm Clock</li>
+	<li>Browser</li>
+	<li>Calculator</li>
+	<li>Camcorder</li>
+	<li>Camera</li>
+	<li>Contacts</li>
+	<li>Custom Locale (developer app)</li>
+	<li>Dev Tools (developer app)</li>
+	<li>Dialer</li>
+	</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+	<ul>
+	<li>Email</li>
+	<li>Gallery</li>
+	<li>Gestures Builder</li>
+	<li>IME for Japanese text input</li>
+	<li>Messaging</li>
+	<li>Music</li>
+	<li>Settings</li>
+	<li>Spare Parts (developer app)</li>
+	</ul>
+</td>
+</tr>
+</table>
+
+<p><span class="new">New with 2.0.1</span> The Dev Tools app now
+includes a "Sync Tester" application to provide quick and easy testing of
+third-party sync adapters.</p>
+
+<h2 id="locs" style="margin-top:.75em;">Locales</h2>
+
+<p>The system image included in the downloadable platform provides a variety of
+built-in locales. In some cases, region-specific strings are available for the
+locales. In other cases, a default version of the language is used. The
+languages that are available in the Android {@sdkPlatformVersion} system 
+image are listed below (with <em>language</em>_<em>country/region</em> locale 
+descriptor).</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>Chinese, PRC (zh_CN)</li>
+<li>Chinese, Taiwan (zh_TW)</li>
+<li>Czech (cs_CZ)</li>
+<li>Dutch, Netherlands (nl_NL)</li>
+<li>Dutch, Belgium (nl_BE)</li>
+<li>English, US (en_US)</li>
+<li>English, Britain (en_GB)</li>
+<li>English, Canada (en_CA)</li>
+<li>English, Australia (en_AU)</li>
+<li>English, New Zealand (en_NZ)</li>
+<li>English, Singapore(en_SG)</li>
+<li>French, France (fr_FR)</li>
+<li>French, Belgium (fr_BE)</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<li>French, Canada (fr_CA)</li>
+<li>French, Switzerland (fr_CH)</li>
+<li>German, Germany (de_DE)</li>
+<li>German, Austria (de_AT)</li>
+<li>German, Switzerland (de_CH)</li>
+<li>German, Liechtenstein (de_LI)</li>
+<li>Italian, Italy (it_IT)</li>
+<li>Italian, Switzerland (it_CH)</li>
+<li>Japanese (ja_JP)</li>
+<li>Korean (ko_KR)</li>
+<li>Polish (pl_PL)</li>
+<li>Russian (ru_RU)</li>
+<li>Spanish (es_ES)</li>
+</td>
+</tr>
+</table>
+
+<p>Localized UI strings match the locales that are accessible 
+through Settings.</p>
+
+<h2 id="skins">Emulator Skins</h2>
+
+<p>The downloadable platform includes a set of emulator skins that you can use for modeling your application in different screen sizes and resolutions. The emulator skins are: </p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA (240x400, low density, normal screen)
+  </li>
+  <li>
+    FWQVGA (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
+
+<h2 id="dev-features">Developer Features</h2>
+
+<p>The sections below provide information about new developer features offered by the downloadable Android 2.0 platform component.</p>
+
+<h3 id="ant">Ant Support</h3>
+
+<ul>
+<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}tools/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
+
+<li>Adds new Ant build system with support for Emma instrumentation projects (code coverage).</li>
+</ul>
+
+<h2 id="api">Framework API</h2>
+
+<p>The sections below provide information about changes made to the application
+framework API provided by the Android {@sdkPlatformVersion} platform. Note,
+however, that Android 2.0.1 is a minor release to Android 2.0, so for more
+information about the changes made to in Android 2.0, please refer to the
+<a href="{@docRoot}about/versions/android-2.0.html#api">Android 2.0 version notes</a>.</p>
+
+
+<h3 id="api-level">API level</h3>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework
+API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash; <strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to 
+set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&lt;uses-sdk&gt;</code> 
+element in your application's manifest. </p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
+
+
+<h3 id="api-changes">API changes summary</h3>
+
+<p>The following is a summary of changes to the framework APIs.</p>
+
+<ul>
+<li>New {@code quickContactBadgeStyle*} attributes that let
+applications apply necessary styles to the {@link
+android.widget.QuickContactBadge} widget.</li>
+
+<li>Remove support for the {@link
+android.content.Intent#ACTION_CONFIGURATION_CHANGED} broadcast when declared as
+a filter in the manifest. To receive this broadcast, an application must
+do so from the application at run-time, with {@link
+android.content.Context#registerReceiver(BroadcastReceiver, IntentFilter)}.</li>
+</ul>
+
+<h3 id="behavior-changes">Behavior changes</h3>
+
+<p>The following is a summary of changes that affect the behavior of some
+framework APIs but do not add or remove API functionality.</p>
+
+<h4>Bluetooth</h4>
+
+<p>Changes to the values returned by {@link
+android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} and
+{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE}:</p>
+
+<ul>
+<li>{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} now
+returns {@link android.app.Activity#RESULT_OK} if Bluetooth was successfully
+enabled and {@link android.app.Activity#RESULT_CANCELED} if the user rejected
+the request to enable Bluetooth, rather than 0 and -1 (or -2),
+respectively.</li>
+
+<li>{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE}
+now returns {@link android.app.Activity#RESULT_CANCELED} if the user rejected
+the request to enable discoverability or if Bluetooth is not enabled, rather
+than -1 and -2, respectively.</li>
+</ul>
+
+<h4>Contacts</h4>
+
+<p>The {@link android.content.Intent#ACTION_INSERT} Intent now returns {@link
+android.app.Activity#RESULT_CANCELED} in cases where the contact was not
+persisted (for example, if the save was trimmed to a no-op).</p>
+
+
+<h3 id="bug-fixes">Bug fixes</h3>
+
+<p>The following is a summary of bug fixes that affect some framework APIs.</p>
+
+<h4>Resources</h4>
+
+<p>The framework now correctly selects application resources in project
+folders that use the API Level qualifier. For example, {@code drawable-v4/} is a
+folder of drawable resources for API Level 4 (or higher) devices. This version
+matching did not work properly and has been fixed.</p>
+
+<h4>Contacts</h4>
+
+<p>The {@link android.content.Intent#ACTION_INSERT} Intent now returns the
+appropriate kind of URI when the request is made using the (now
+deprecated) {@link android.provider.Contacts} APIs.</p>
+
+<h4>Other Framework fixes</h4>
+
+<ul>
+<li>{@link android.app.Activity#getCallingPackage()} now properly reports the
+package name, rather than the process name.</li>
+</ul>
+
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
+API Level 5, see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>. There are very few API changes in API Level 6, 
+so you might also be interested in reviewing the <a
+href="{@docRoot}sdk/api_diff/5/changes.html">API
+differences between 4 and 5</a>.</p>
+
diff --git a/docs/html/about/versions/android-2.0.jd b/docs/html/about/versions/android-2.0.jd
new file mode 100644
index 0000000..7a12e48
--- /dev/null
+++ b/docs/html/about/versions/android-2.0.jd
@@ -0,0 +1,384 @@
+page.title=Android 2.0, Release 1
+sdk.platform.version=2.0
+sdk.platform.apiLevel=5
+sdk.platform.majorMinor=major
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>In this document</h2>
+  <ol>
+	<li><a href="#features">Platform Highlights</a></li>
+	<li><a href="#relnotes">Revisions</a></li>
+	<li><a href="#apps">Built-in Applications</a></li>
+	<li><a href="#locs">Locales</a></li>
+	<li><a href="#skins">Emulator Skins</a></li>
+	<li><a href="#dev-features">Developer Features</a></li>
+	<li><a href="#api">Framework API</a>
+        <ol>
+	<li><a href="#api-level">API level</a></li>
+	<li><a href="#api-changes">API changes summary</a></li>
+	<li><a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API differences report &raquo;</a> </li>
+        </ol></li>
+  </ol>
+
+  <h2>See Also</h2>
+  <ol>
+    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+  </ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
+deployable to Android-powered handsets starting in November 2009.
+The release includes new features for users and developers, as well as changes
+in the Android framework API. </p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes a
+fully compliant Android library and system image, as well as a set of emulator
+skins, sample applications, and more. The downloadable platform is fully
+compliant and includes no external libraries. </p>
+
+<p>To get started developing or testing against the Android
+{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
+download the platform into your SDK. For more information,
+see <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a>.</p>
+
+
+<h2 id="features">Platform Highlights</h2>
+
+<p>For a list of new user features and platform highlights, see the <a
+href="http://developer.android.com/about/versions/android-{@sdkPlatformVersion}-highlights.html">Android 
+{@sdkPlatformVersion} Platform Highlights</a> document.</p>
+
+<h2 id="relnotes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+padding: .25em 1em;
+}
+.toggleme {
+  padding: 1em 1em 0 2em;
+  line-height:1em;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0;
+}
+</style>
+
+<div class="toggleable opened">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
+        Android 2.0, Revision 1</a> <em>(October 2009)</em></a>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r3 or higher.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+<h2 id="apps">Built-in Applications</h2>
+
+<p>The system image included in the downloadable platform provides these
+built-in applications:</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+	<ul>
+	<li>Alarm Clock</li>
+	<li>Browser</li>
+	<li>Calculator</li>
+	<li>Camcorder</li>
+	<li>Camera</li>
+	<li>Contacts</li>
+	<li>Custom Locale (developer app)</li>
+	<li>Dev Tools (developer app)</li>
+	<li>Dialer</li>
+	</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+	<ul>
+	<li>Email</li>
+	<li>Gallery</li>
+	<li>Gestures Builder</li>
+	<li>IME for Japanese text input</li>
+	<li>Messaging</li>
+	<li>Music</li>
+	<li>Settings</li>
+	<li>Spare Parts (developer app)</li>
+	</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="locs" style="margin-top:.75em;">Locales</h2>
+
+<p>The system image included in the downloadable platform provides a variety of
+built-in locales. In some cases, region-specific strings are available for the
+locales. In other cases, a default version of the language is used. The
+languages that are available in the Android {@sdkPlatformVersion} system 
+image are listed below (with <em>language</em>_<em>country/region</em> locale 
+descriptor).</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>Chinese, PRC (zh_CN)</li>
+<li>Chinese, Taiwan (zh_TW)</li>
+<li>Czech (cs_CZ)</li>
+<li>Dutch, Netherlands (nl_NL)</li>
+<li>Dutch, Belgium (nl_BE)</li>
+<li>English, US (en_US)</li>
+<li>English, Britain (en_GB)</li>
+<li>English, Canada (en_CA)</li>
+<li>English, Australia (en_AU)</li>
+<li>English, New Zealand (en_NZ)</li>
+<li>English, Singapore(en_SG)</li>
+<li>French, France (fr_FR)</li>
+<li>French, Belgium (fr_BE)</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<li>French, Canada (fr_CA)</li>
+<li>French, Switzerland (fr_CH)</li>
+<li>German, Germany (de_DE)</li>
+<li>German, Austria (de_AT)</li>
+<li>German, Switzerland (de_CH)</li>
+<li>German, Liechtenstein (de_LI)</li>
+<li>Italian, Italy (it_IT)</li>
+<li>Italian, Switzerland (it_CH)</li>
+<li>Japanese (ja_JP)</li>
+<li>Korean (ko_KR)</li>
+<li>Polish (pl_PL)</li>
+<li>Russian (ru_RU)</li>
+<li>Spanish (es_ES)</li>
+</td>
+</tr>
+</table>
+
+<p>Localized UI strings match the locales that are accessible 
+through Settings.</p>
+
+<h2 id="skins">Emulator Skins</h2>
+
+<p>The downloadable platform includes a set of emulator skins that you can use for modeling your application in different screen sizes and resolutions. The emulator skins are: </p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA (240x400, low density, normal screen)
+  </li>
+  <li>
+    FWQVGA (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
+
+<h2 id="dev-features">Developer Features</h2>
+
+<p>The sections below provide information about new developer features offered by the downloadable Android 2.0 platform component.</p>
+
+<h3 id="ant">Ant Support</h3>
+
+<ul>
+<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}tools/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
+
+<li>Adds new Ant build system with support for Emma instrumentation projects (code coverage).</li>
+</ul>
+
+<h2 id="api">Framework API</h2>
+
+<p>The sections below provide information about the application framework API provided by the Android {@sdkPlatformVersion} platform. </p>
+
+
+<h3 id="api-level">API level</h3>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework
+API. As with previous versions, the Android {@sdkPlatformVersion} API 
+is assigned an integer identifier &mdash; <strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to 
+set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&lt;uses-sdk&gt;</code> 
+element in your application's manifest. </p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
+
+
+<h3 id="api-changes">API changes summary</h3>
+
+<h4>Bluetooth</h4>
+<ul>
+<li>Turn on/off Bluetooth</li>
+<li>Device and service discovery</li>
+<li>Connect to a remote device using RFCOMM and send/receive data</li>
+<li>Advertise RFCOMM services and listen for incoming RFCOMM connection</li>
+</ul>
+
+<h4>Sync adapters </h4>
+<ul>
+<li>New APIs for sync adapters to connect to any backend</li>
+</ul>
+
+<h4>Account Manager</h4>
+<ul>
+<li>Centralized account manager API to securely store and access auth tokens/passwords </li>
+</ul>
+
+<h4>Contacts</h4>
+<ul>
+<li>New contacts APIs that allow for data from multiple accounts</li>
+<li>New Quick Contact framework APIs enable developers to create contact badges in their app. Clicking on the badge opens a window with a list of ways to contact the person with one click.</li>
+</ul>
+
+<h4>WebView</h4>
+<ul>
+<li>Deprecated classes: UrlInterceptHandler, Plugin, PluginData, PluginList, UrlInterceptRegistry.</li>
+</ul>
+
+<h4>Camera</h4>
+<ul>
+<li>New parameters for color effect, scene mode, flash mode, focus mode, white balance, rotation, and other settings.</li>
+<li>New ZoomCallback interface to perform actions when the zoom level has changed.</li>
+</ul>
+
+<h4>Media</h4>
+<ul>
+<li>MediaScanner now generates thumbnails for all images when they are inserted into MediaStore.</li>
+<li>New Thumbnail API for retrieving image and video thumbnails on demand.</li>
+</ul>
+
+<h4>Other Framework</h4>
+<ul>
+<li>New system themes in android.R.style to easily display activities on top of the current system wallpaper or keep the previous activity visible in the background. </li>
+<li>New WallpaperManager API replaces and extends the wallpaper APIs that were previously in Context, to allow applications to request and set the system wallpaper.</li>
+<li>New Service APIs to help applications correctly handle Service life-cycle, in particular low memory situations where a Service may be killed while it is running.
+  <ul>
+  <li>Service.setForeground() has been deprecated and now effectively performs no operation. This is replaced with a new API, startForeground(), that helps (and requires) associating an ongoing notification with the foreground state.</li>
+  </ul>
+</li>
+<li>MotionEvent can now report simultaneous-touch information for devices that support it. Up to three pointers can be tracked simultaneously. </li>
+<li>KeyEvent has new key dispatching APIs, to help implement action-on-up and long press behavior, as well a new mechanism to cancel key presses (for virtual keys).</li>
+<li>WindowManager.LayoutParams has new constants that allow a window to wake up the screen when it is displayed and show the window even if the screen is locked. This allows applications to more cleanly implement things like alarm clocks that should wake the device.</li>
+<li>New Intent APIs that broadcast the docking state of the device and allow applications to launch special activities when the device is placed in a desktop or car dock.</li>
+</ul>
+
+<h4>Key events executed on key-up</h4>
+
+<p>Android 2.0 is designed to run on devices that use virtual keys for HOME,
+MENU, BACK, and SEARCH, rather than physical keys. To support the best user
+experience on those devices, the Android platform now executes these buttons at
+key-up, for a key-down/key-up pair, rather than key-down. This helps prevent 
+accidental button events and lets the user press the button area and then drag 
+out of it without generating an event. </p>
+
+<p>This change in behavior should only affect your application if it is
+intercepting button events and taking an action on key-down, rather than on
+key-up. Especially if your application is intercepting the BACK key, you should
+make sure that your application is handling the key events properly. </p>
+
+<p>In general, intercepting the BACK key in an application is not recommended,
+however, if your application is doing so and it invokes some action on
+key-down, rather than key-up, you should modify your code. </p>
+
+<p>If your application will use APIs introduced in Android 2.0 (API Level 5), 
+you can take advantage of new APIs for managing key-event pairs:</p>
+
+<ul>
+<li>If you are intercepting the BACK key in an activity or dialog, just
+implement the new {@link android.app.Activity#onBackPressed()} method. </li>
+<li>If you are intercepting the BACK key in a view, you should track the key
+event on key-down (through the new {@link android.view.KeyEvent#startTracking}
+method), then invoke the action at key up. Here's a pattern you can use:</li>
+
+<pre>    public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK
+                && event.getRepeatCount() == 0) {
+            event.startTracking();
+            return true;
+        }
+        return super.onKeyDown(keyCode, event);
+    }
+
+    public boolean onKeyUp(int keyCode, KeyEvent event) {
+        if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
+                && !event.isCanceled()) {
+            // *** DO ACTION HERE ***
+            return true;
+        }
+        return super.onKeyUp(keyCode, event);
+    }</pre>
+
+</ul>
+
+<p>If you want to update a legacy application so that its handling of the BACK
+key works properly for both Android 2.0 and older platform versions, you 
+can use an approach similar to that shown above. Your code can catch the
+target button event on key-down, set a flag to track the key event, and 
+then also catch the event on key-up, executing the desired action if the tracking 
+flag is set. You'll also want to watch for focus changes and clear the tracking 
+flag when gaining/losing focus.</p>
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
+the previous version, see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
+
diff --git a/docs/html/about/versions/android-2.1.jd b/docs/html/about/versions/android-2.1.jd
new file mode 100644
index 0000000..3cb0708
--- /dev/null
+++ b/docs/html/about/versions/android-2.1.jd
@@ -0,0 +1,373 @@
+page.title=Android 2.1 Platform
+sdk.platform.version=2.1
+sdk.platform.apiLevel=7
+sdk.platform.majorMinor=minor
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#features">Platform Highlights</a></li>
+  <li><a href="#relnotes">Revisions</a></li>
+  <li><a href="#api-level">API Level</a></li>
+  <li><a href="#api">Framework API Changes</a>
+  <li><a href="#apps">Built-in Applications</a></li>
+  <li><a href="#locs">Locales</a></li>
+  <li><a href="#skins">Emulator Skins</a></li>
+
+    </ol>
+  </li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
+deployable to Android-powered handsets starting in January 2010.
+This release includes new API
+changes and bug fixes. For information on changes, see the <a href="#api">Framework API</a>
+section.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes a
+fully compliant Android library and system image, as well as a set of emulator
+skins, sample applications, and more. The downloadable platform
+includes no external libraries. </p>
+
+<p>To get started developing or testing against the Android
+{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
+download the platform into your SDK. For more information,
+see <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a>.</p>
+
+
+<h2 id="features">Platform Highlights</h2>
+
+<p>Android {@sdkPlatformVersion} does not add significant user features, see the <a
+href="http://developer.android.com/about/versions/android-2.0-highlights.html">Android
+2.0 Platform Highlights</a> document for the latest user features.</p>
+
+<h2 id="relnotes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+
+<div class="toggle-content opened" style="padding-left:1em;">
+
+<p><a href="#" onclick="return toggleContent(this)">
+  <img src="{@docRoot}assets/images/triangle-opened.png"
+class="toggle-content-img" alt="" />
+  Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a> or
+higher.</p>
+</dd>
+<dt>Notes:</dt>
+<dd>
+<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
+Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
+bugs in the previous rendering library. It also unlocks several editor features that were added in
+ADT 12.</p>
+</dd>
+</dl>
+
+</div>
+</div>
+
+<div class="toggle-content closed" style="padding-left:1em;">
+
+<p><a href="#" onclick="return toggleContent(this)">
+  <img src="{@docRoot}assets/images/triangle-closed.png"
+class="toggle-content-img" alt="" />
+  Android {@sdkPlatformVersion}, Revision 2</a> <em>(May 2010)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r6 or higher.</p>
+</dd>
+
+<dt>Tools:</dt>
+<dd>
+<ul> 
+<li>Adds support for library projects in the Ant build system.</li>
+<li>Adds improved layout rendering in ADT’s visual layout editor.</li>
+</ul> 
+</dd>
+
+</dl>
+ </div>
+</div>
+
+<div class="toggle-content closed" style="padding-left:1em;">
+
+<p><a href="#" onclick="return toggleContent(this)">
+  <img src="{@docRoot}assets/images/triangle-closed.png"
+class="toggle-content-img" alt="" />
+  Android {@sdkPlatformVersion}, Revision 1</a> <em>(January 2010)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r4 or higher.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
+application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
+<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
+element in your application's manifest. </p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
+
+
+<h2 id="api">Framework API Changes</h2>
+
+<p>The sections below provide information about changes made to the application
+framework API provided by the Android {@sdkPlatformVersion} platform.</p>
+
+<h3>Live Wallpapers</h3>
+
+<p>The following additions provide APIs for you to develop animated wallpapers:</p>
+<ul>
+<li>New {@link android.service.wallpaper} package.</li>
+<li>New {@link android.app.WallpaperInfo} class.</li>
+<li>Updated {@link android.app.WallpaperManager}.</li>
+</ul>
+
+<p>Additionally, if your application uses or provides Live Wallpapers, you must
+remember to add a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature></code></a>
+ element to the application's manifest, declaring the attribute
+<code>android:name="android.software.live_wallpaper"</code>. For example:</p>
+
+<pre class="no-pretty-print">
+&lt;uses-feature android:name="android.software.live_wallpaper" />
+</pre>
+
+<p>When you've published your application, Google Play checks for the
+presence of this element and uses it as a filter, ensuring that your application
+is not made available to users whose devices do not support Live Wallpapers.
+</p>
+
+<h3>Telephony</h3>
+
+<ul>
+<li>New {@link android.telephony.SignalStrength} class provides information
+about the device's current network signal. This can be acquired from the
+new {@link
+android.telephony.PhoneStateListener#onSignalStrengthsChanged(SignalStrength)}
+callback.</li>
+
+<li>New {@link
+android.telephony.PhoneStateListener#onDataConnectionStateChanged(int,int)}
+callback.</li>
+</ul>
+
+<h3>Views</h3>
+
+<ul>
+<li>New {@link android.view.View} methods {@link android.view.View#isOpaque()}
+and {@link android.view.View#onDrawScrollBars(Canvas)}.</li>
+
+<li>New {@link android.widget.RemoteViews} methods {@link
+android.widget.RemoteViews#addView(int,RemoteViews)} and {@link
+android.widget.RemoteViews#removeAllViews(int)}.</li>
+
+<li>New {@link android.view.ViewGroup} methods {@link
+android.view.ViewGroup#isChildrenDrawingOrderEnabled()} and {@link
+android.view.ViewGroup#setChildrenDrawingOrderEnabled(boolean)}.</li>
+</ul>
+
+<h3>WebKit</h3>
+
+<ul>
+<li>New {@link android.webkit.WebStorage} methods to manipulate web
+storage databases.</li>
+
+<li>New {@link android.webkit.GeolocationPermissions} methods to
+get Geolocation permissions from, and set them on the WebView.</li>
+
+<li>New {@link android.webkit.WebSettings} methods to manage settings for
+app cache, web storage, and zooming based on screen density.</li>
+
+<li>New {@link android.webkit.WebChromeClient} methods for handling video,
+browsing history, custom Views, app cache limits, and more.</li>
+</ul>
+
+</ul>
+
+<!--
+<h3 id="behavior-changes">Behavior changes</h3>
+
+<h3 id="bug-fixes">Bug fixes</h3>
+-->
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
+Level {@sdkPlatformApiLevel}), as compared to API Level 6, see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>.</p>
+
+<h2 id="apps">Built-in Applications</h2>
+
+<p>The system image included in the downloadable platform provides these
+built-in applications:</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+	<ul>
+	<li>Alarm Clock</li>
+	<li>Browser</li>
+	<li>Calculator</li>
+	<li>Camera</li>
+	<li>Contacts</li>
+	<li>Custom Locale (developer app)</li>
+	<li>Dev Tools (developer app)</li>
+    <li>Email</li>
+	</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+	<ul>
+
+	<li>Gallery</li>
+	<li>IMEs for Japanese, Chinese, and Latin text input</li>
+	<li>Messaging</li>
+	<li>Music</li>
+	<li>Phone</li>
+	<li>Settings</li>
+	<li>Spare Parts (developer app)</li>
+	</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="locs" style="margin-top:.75em;">Locales</h2>
+
+<p>The system image included in the downloadable platform provides a variety of
+built-in locales. In some cases, region-specific strings are available for the
+locales. In other cases, a default version of the language is used. The
+languages that are available in the Android {@sdkPlatformVersion} system
+image are listed below (with <em>language</em>_<em>country/region</em> locale
+descriptor).</p>
+
+<table style="border:0;padding-bottom:0;margin-bottom:0;">
+<tr>
+<td style="border:0;padding-bottom:0;margin-bottom:0;">
+<ul>
+<li>Chinese, PRC (zh_CN)</li>
+<li>Chinese, Taiwan (zh_TW)</li>
+<li>Czech (cs_CZ)</li>
+<li>Dutch, Netherlands (nl_NL)</li>
+<li>Dutch, Belgium (nl_BE)</li>
+<li>English, US (en_US)</li>
+<li>English, Britain (en_GB)</li>
+<li>English, Canada (en_CA)</li>
+<li>English, Australia (en_AU)</li>
+<li>English, New Zealand (en_NZ)</li>
+<li>English, Singapore(en_SG)</li>
+<li>French, France (fr_FR)</li>
+<li>French, Belgium (fr_BE)</li>
+</ul>
+</td>
+<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
+<li>French, Canada (fr_CA)</li>
+<li>French, Switzerland (fr_CH)</li>
+<li>German, Germany (de_DE)</li>
+<li>German, Austria (de_AT)</li>
+<li>German, Switzerland (de_CH)</li>
+<li>German, Liechtenstein (de_LI)</li>
+<li>Italian, Italy (it_IT)</li>
+<li>Italian, Switzerland (it_CH)</li>
+<li>Japanese (ja_JP)</li>
+<li>Korean (ko_KR)</li>
+<li>Polish (pl_PL)</li>
+<li>Russian (ru_RU)</li>
+<li>Spanish (es_ES)</li>
+</td>
+</tr>
+</table>
+
+<p>Localized UI strings match the locales that are accessible
+through Settings.</p>
+
+<h2 id="skins">Emulator Skins</h2>
+
+<p>The downloadable platform includes a set of emulator skins that you can use
+for modeling your application in different screen sizes and resolutions. The
+emulator skins are:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA (240x400, low density, normal screen)
+  </li>
+  <li>
+    FWQVGA (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays
+and functions properly on all Android-powered devices, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
diff --git a/docs/html/sdk/android-2.2-highlights.jd b/docs/html/about/versions/android-2.2-highlights.jd
similarity index 100%
rename from docs/html/sdk/android-2.2-highlights.jd
rename to docs/html/about/versions/android-2.2-highlights.jd
diff --git a/docs/html/about/versions/android-2.2.jd b/docs/html/about/versions/android-2.2.jd
new file mode 100644
index 0000000..361e8b6
--- /dev/null
+++ b/docs/html/about/versions/android-2.2.jd
@@ -0,0 +1,252 @@
+page.title=Android 2.2 Platform
+sdk.platform.version=2.2
+sdk.platform.apiLevel=8
+sdk.platform.majorMinor=minor
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#features">Platform Highlights</a></li>
+  <li><a href="#api-level">API Level</a></li>
+  <li><a href="#api">Framework API Changes</a>
+
+    </ol>
+  </li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+<h2>See Also</h2>
+<ol>
+  <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release including user
+features, developer features, API changes, and bug
+fixes. For  information on developer features and API changes, see the
+<a href="#api">Framework API</a> section.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+<h2 id="features">Platform Highlights</h2>
+
+<p>For a list of new user features and platform highlights, see the <a
+href="http://developer.android.com/about/versions/android-2.2-highlights.html">Android
+2.2 Platform Highlights</a> document.</p>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
+application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
+<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
+element in your application's manifest. </p>
+
+<p>For more information about how to use API Level, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document. </p>
+
+
+<h2 id="api">Framework API Changes</h2>
+
+<p>The sections below provide information about changes made to the application
+framework API provided by the Android {@sdkPlatformVersion} platform.</p>
+
+<h3 id="install-loc">App installation on external storage media</h3>
+
+<p>The Android platform now allows applications to request installation onto the
+device's external storage media (such as the SD card), as an alternative to
+installation onto the device's internal memory. </p>
+
+<p>Application developers can express the preferred installation location for
+their applications by means of a new attribute of <code>&lt;manifest&gt;</code>
+in the manifest file, <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#install"><code>
+android:installLocation</code></a>. The attribute supports three values:
+<code>"internalOnly"</code>, <code>"preferExternal"</code>, and
+<code>"auto"</code>. At install time, the system checks the value of
+<code>android:installLocation</code> and installs the application
+<code>.apk</code> according to the preferred location, if possible. If the
+application has requested external installation, the system installs it into a
+private, encrypted partition in the external media. Once an application .apk is
+installed externally, the system lets the user change the storage location of
+the .apk and move it onto the device's internal memory if needed (and vice
+versa), through Manage Applications in the user settings.</p>
+
+<p>By default, the system installs all applications onto the device's internal
+memory, except for those that explicitly request external installation. This
+means that the system will always install legacy applications onto internal
+memory, since they do not have access to the
+<code>android:installLocation</code> attribute. However, it is possible to
+configure and compile a legacy application such that it is installed internally
+on older versions of the platform and externally on Android 2.2 and later
+platforms, if necessary. </p>
+
+<p>Note that requesting installation onto the device's external media is not
+suitable for all applications, particularly because the external media may be
+removable and unmounting/remounting may disrupt the user experience and system
+settings.</p>
+
+<p>For more information about setting a preferred install location for your
+application, including a discussion of what types of applications should and
+should not request external installation, please read the <a
+href="{@docRoot}guide/appendix/install-location.html">App Install Location</a>
+document. </p>
+
+<h3 id="backup-manager">Data backup</h3>
+
+<p>The platform now provides a generalized backup service that
+applications can use to backup and restore user data, to ensure that users can
+maintain their data when switching devices or reinstalling the application. The
+Backup Manager handles the work of transporting the application data to and from
+the backup storage area in the cloud. The Backup Manager can store any type of
+data, from arbitrary data to files, and manages backup and restore operations
+in an atomic manner. For more information, see <a
+href="{@docRoot}guide/topics/data/backup.html">Data Backup</a>.</p>
+
+<h3>Graphics</h3>
+
+<ul>
+<li>New OpenGL ES 2.0 APIs in {@link android.opengl.GLES20 android.opengl.GLES20}.</li>
+<li>New {@link android.opengl.ETC1}, {@link android.opengl.ETC1Util}, and {@link android.opengl.ETC1Util.ETC1Texture} classes and utility methods for using ETC1 for texture compression.</li>
+<li>New {@link android.graphics.ImageFormat} class.</li>
+<li>New {@link android.graphics.YuvImage YUV image format API} to enable compression from YUV to JPEG and manipulation of YUV data.</li>
+</ul>
+
+<h3>Media</h3>
+
+<ul>
+<li>New APIs in {@link android.media.AudioManager android.media.AudioManager} for managing audio focus, transport control, transient loss of audio focus, ducking.</li>
+<li>New broadcast intent for routing audio to SCO &mdash; {@link android.media.AudioManager#ACTION_SCO_AUDIO_STATE_CHANGED} with extras indicating new state.</li>
+<li>New APIs in {@link android.media.SoundPool} to detect completion of sound-loading.</li>
+<li>New APIs in {@link android.media.SoundPool} for auto pause and resume.</li>
+<li>New APIs in {@link android.media.MediaRecorder} for specifying audio settings for number of channels, encoding and sampling rates, sampling rate.</li>
+<li>New APIs for adding files to the media database, so that they are automatically scanned. See {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[], OnScanCompletedListener) MediaScannerConnection.scanFile} and {@link android.media.MediaScannerConnection.OnScanCompletedListener MediaScannerConnection.OnScanCompletedListener}.</li>
+</ul>
+
+<h3>Speech recognition and third-party recognition engines</h3>
+
+<ul>
+<li>The platform provides new speech-recognition APIs that allow applications to have a richer interaction with the available voice recognizer. For example, the APIs are sufficient to integrate voice recognition deeply into an IME.</li>
+<li>The platform also provides a {@link android.speech.RecognitionService} base class that lets third-party developers create plug-in recognition engines. </li>
+<li>New {@link android.speech.RecognitionListener} interface to receive callbacks.</li>
+<li>New {@link android.speech.RecognizerIntent} extras that let a requester app specify details as preferred language, minimum length in milliseconds, and so on.</li>
+</ul>
+
+<h3>Camera and camcorder</h3>
+
+<ul>
+<li>Changes to camera preview API to improve efficieny of preview pipeline. </li>
+<li>New display orientation for camera (it can now work in portrait orientation).</li>
+<li>New APIs in {@link android.hardware.Camera android.hardware.Camera} for managing zoom level.</li>
+<li>New APIs {@link android.hardware.Camera.Parameters android.hardware.Camera.Parameters} for querying and setting device camera settings such as focal length, exposure, zoom level, view angle, and others.</li>
+<li>New {@link android.media.ThumbnailUtils thumbnail} utility for video and image thumbnails.</li>
+<li>New {@link android.media.CamcorderProfile} and {@link android.media.CamcorderProfile} classes enable apps to determine device hardware camera capablities.</li>
+<li>New support in {@link android.media.ExifInterface android.media.ExifInterface} for retrieving GPS and focal length.</li>
+</ul>
+
+<h3>Device policy manager</h3>
+
+<p>New device policy management APIs allow developers to write "device
+administrator" applications that can control security features of the device,
+such as the minimum password strength, data wipe, and so on. Users can select
+the administrators that are enabled on their devices. For more information, see
+the {@link android.app.admin android.app.admin} classees or the example
+application code in <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html">DeviceAdminSample.java</a>.</p>
+
+<h3>UI Framework</h3>
+
+<ul>
+<li>New UI modes "car mode" and "night mode" and {@link android.app.UiModeManager} let applications adjust their application UI for specific user modes. </li>
+<li>New {@link android.view.ScaleGestureDetector} that lets Views detect and handle transformation gestures that involve more than one pointer (multitouch) using the supplied MotionEvents. </li>
+<li>Improvements in the way that multitouch events are reported in {@link android.view.MotionEvent} objects.</li>
+<li>The layout attribute <code>fill_parent</code> is renamed to <code>match_parent</code>. This affects both XML and Java code (see {@link android.view.ViewGroup.LayoutParams}). Note that the platform will continue to honor uses of <code>fill_parent</code> in legacy applications. </li>
+<li>New layout attributes {@link android.R.attr#tabStripEnabled}, {@link android.R.attr#tabStripRight}, and {@link android.R.attr#tabStripLeft} let developers customize the bottom strip of TabWidgets.</li>
+<li>Better support for managed dialogs in Activity.</li>
+</ul>
+
+<h3>Accounts and sync</h3>
+
+<ul>
+<li>New method {@link android.content.ContentResolver#addPeriodicSync(Account, String, Bundle, long) AddPeriodicSync()} lets you schedule a periodic sync with a specific account, authority, and extras at the given frequency.</li>
+</ul>
+
+<h3>New manifest elements and attributes</h3>
+
+<ul>
+<li>For specifying the application's preferred install location (see <a href="#install-loc">App Installation on External Storage Media</a>, above):
+
+<ul>
+  <li>New <code>android:installLocation</code> attribute of the <code>&lt;manifest&gt;</code> element. Specifies the default install location defined by an application.</li>
+</ul>
+</li>
+
+<li>For managing user data backup (see <a href="#backup-manager">Backup manager</a>, above, for more information):
+
+<ul>
+  <li> New <code>android:backupAgent</code> attribute of the
+<code>&lt;application&gt;</code> element. Specifies the component name of the
+BackupAgent subclass provided by the application to handle backup/restore
+operations, if any.</li>
+  <li> New <code>android:restoreAnyVersion</code> attribute of the
+<code>&lt;application&gt;</code> element. Boolean value that indicates whether
+the application is prepared to attempt a restore of any backed-up dataset, even
+if the backup is apparently from a newer version of the application than is
+currently installed on the device.</li>
+</ul>
+</li>
+
+<li>For managing the platform's JIT compiler:
+
+<ul>
+<li>New <code>android:vmSafeMode</code> attribute of the <code>&lt;application&gt;</code> element. Boolean value that specifies whether to disable JIT compiler optimizations when running the application.</li>
+</ul>
+</li>
+</ul>
+
+<h3>Permissions</h3>
+
+<ul>
+<li><code>android.permission.BIND_DEVICE_ADMIN</code> &mdash; Any device administration broadcast receiver must require this permission, to ensure that only the system can interact with it.</li>
+<li><code>android.permission.KILL_BACKGROUND_PROCESSES</code> &mdash; Allows an application to call {@link android.app.ActivityManager#killBackgroundProcesses(String)}.
+<li><code>android.permission.BIND_WALLPAPER</code> &mdash; Any {@link android.service.wallpaper.WallpaperService} must require this permission, to ensure that only the system can interact with it.</li>
+<li><code>android.permission.SET_TIME</code> &mdash; Allows an application to set the system time.</li>
+</ul>
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
+Level {@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>.</p>
+
+
+
diff --git a/docs/html/about/versions/android-2.3-highlights.jd b/docs/html/about/versions/android-2.3-highlights.jd
new file mode 100644
index 0000000..582bce9
--- /dev/null
+++ b/docs/html/about/versions/android-2.3-highlights.jd
@@ -0,0 +1,444 @@
+page.title=Gingerbread
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content {
+  max-width:1200px;
+}
+#jd-content div.screenshot {
+  float:left;
+  clear:left;
+  padding:15px 30px 15px 0;
+}
+#jd-content div.video {
+  float:right;
+  padding:0 0 0 40px;
+}
+#jd-content table.columns {
+  margin:0 0 1em 0;
+}
+#jd-content table.columns td {
+  padding:0;
+}
+#jd-content table.columns td+td {
+  padding:0 2em;
+}
+#jd-content table.columns td img {
+  margin:0;
+}
+#jd-content table.columns td+td>*:first-child {
+  margin-top:-2em;
+}
+.green {
+  color:#8db529;
+  font-weight:bold;
+}
+</style>
+
+<p>The Android 2.3 platform introduces many new and exciting features for
+users and developers. This document provides a glimpse at some of the new features
+and technologies in Android 2.3. For detailed information about the new developer APIs, see the <a
+href="android-2.3.html">Android 2.3 version notes</a>.</p>
+
+<ul>
+  <li><a href="#UserFeatures">New User Features</a></li>
+  <li><a href="#DeveloperApis">New Developer Features</a></li>
+  <li><a href="#PlatformTechnologies">New Platform Technologies</a></li>
+</ul>
+
+
+<h2 id="UserFeatures" style="clear:right">New User Features</h2>
+
+<div>
+<img style="float:right;margin-left:20px;padding-bottom:2em;"
+src="{@docRoot}sdk/images/2.3/home-menu.png" alt="" height="280" />
+<img style="float:right;margin-left:20px;padding-bottom:2em;"
+src="{@docRoot}sdk/images/2.3/home-plain.png" alt="" height="280" />
+
+<h3>UI refinements for simplicity and speed</h3>
+
+<p>The user interface is refined in many ways across the system, making it
+easier to learn, faster to use, and more power-efficient. A simplified
+visual theme of colors against black brings vividness and contrast to the
+notification bar, menus, and other parts of the UI.  Changes in menus and
+settings make it easier for the user to navigate and control the features
+of the system and device. </p>
+
+<h3>Faster, more intuitive text input</h3>
+
+<p>The Android soft keyboard is redesigned and optimized for faster text input
+and editing. The keys themselves are reshaped and repositioned for improved
+targeting, making them easier to see and press accurately, even at high speeds.
+The keyboard also displays the current character and dictionary suggestions in a
+larger, more vivid style that is easier to read.</p>
+
+<p>The keyboard adds the capability to correct entered words from suggestions in
+the dictionary. As the user selects a word already entered, the keyboard
+displays suggestions that the user can choose from, to replace the selection.
+The user can also switch to voice input mode to replace the selection. Smart
+suggestions let the user accept a suggestion and then return to correct it
+later, if needed, from the original set of suggestions.</p>
+
+<p>New multitouch key-chording lets the user quickly enter numbers and symbols
+by pressing Shift+&lt;<em>letter</em>&gt; and ?123+&lt;<em>symbol</em>&gt;,
+without needing to manually switch input modes. From certain keys, users can
+also access a popup menu of accented characters, numbers, and symbols by holding
+the key and sliding to select a character.</p>
+</div>
+
+<div  style="padding-top:1em;">
+<div style="margin-right:1em;float:left;"><img src="{@docRoot}sdk/images/2.3/onetouch.png" alt=""
+height="260" /></div>
+<div style="padding-right:2em;float:left;"><img src="{@docRoot}sdk/images/2.3/selection.png" alt=""
+height="160" /></div>
+
+
+<h3>One-touch word selection and copy/paste</h3>
+
+<p>When entering text or viewing a web page, the user can quickly select a word
+by press-hold, then copy to the clipboard and paste. Pressing on a word enters a
+free-selection mode &mdash; the user can adjust the selection area as needed by
+dragging a set of bounding arrows to new positions, then copy the bounded area
+by pressing anywhere in the selection area. For text entry, the user can
+slide-press to enter a cursor mode, then reposition the cursor easily and
+accurately by dragging the cursor arrow. With both the selection and cursor
+modes, no use of a trackball is needed.</p>
+
+</div>
+
+<div style="clear:left">
+<div style="padding-right:2em;float:right;margin-left:20px;"><img
+src="{@docRoot}sdk/images/2.3/running.png" alt="" height="280" /></div>
+<div style="padding-left:1em;float:right;margin-left:20px;"><img
+src="{@docRoot}sdk/images/2.3/power.png" alt="" height="280" /></div>
+
+<h3>Improved power management </h3>
+
+<p>The Android system takes a more active role in managing apps that are keeping
+the device awake for too long or that are consuming CPU while running in the
+background. By managing such apps &mdash; closing them if appropriate &mdash;
+the system helps ensure best possible performance and maximum battery life.</p>
+
+<p>The system also gives the user more visibility over the power being consumed
+by system components and running apps. The Application settings provides an
+accurate overview of how the battery  is being used, with details of the usage
+and relative power consumed  by each component or application.</p>
+
+<h3>Control over applications</h3>
+
+<p>A shortcut to the Manage Applications control now appears in the Options Menu
+in the Home screen and Launcher, making it much easier to check and manage
+application activity. Once the user enters Manage Applications, a new Running
+tab displays a list of active applications and the storage and memory being used
+by each. The user can read further details about each application and if
+necessary stop an application or report feedback to its developer. </p>
+</div>
+
+<h3>New ways of communicating, organizing</h3>
+
+<p>An updated set of standard applications lets the user take new approaches to
+managing information and relationships. </p>
+
+<div  style="padding-top:1em;">
+<div style="padding-right:1.5em;float:left;"><img src="{@docRoot}sdk/images/2.3/sipcall.png" alt=""
+height="190" align="left"/><br>
+<img src="{@docRoot}sdk/images/2.3/ffc.png" alt="" height="190" align="left"
+style="margin-bottom:1.5em;margin-top:.75em;"/><div></div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Internet calling</strong></p>
+
+<p>The user can make voice calls over the internet to other users who have SIP
+accounts. The user can add an internet calling number (a SIP address) to any
+Contact and can initiate a call from Quick Contact or Dialer. To use internet
+calling, the user must create an account at the SIP provider of their choice
+&mdash; SIP accounts are not provided as part of the internet calling feature.
+Additionally, support for the platform's SIP and internet calling features on
+specific devices is determined by their manufacturers and associated carriers.
+</p>
+
+<div style="padding-right:1.5em;float:right;margin-left:20px;;"><img
+src="{@docRoot}sdk/images/2.3/nfc.png" alt="" height="190" /> </div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Near-field communications</strong></p>
+
+<p>An NFC Reader application lets the user read and interact with near-field
+communication (NFC)  tags. For example, the user can “touch” or “swipe” an NFC
+tag that might be embedded in a poster, sticker, or advertisement, then act on
+the data read from the tag. A typical use would be to read a tag at a
+restaurant, store, or event and then rate or register by jumping to a web site
+whose URL is included in the tag data. NFC communication relies on wireless
+technology in the device hardware, so support for the platform's NFC features on
+specific devices is determined by their manufacturers.
+</p>
+</div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Downloads management</strong></p>
+
+<p>The Downloads application gives the user easy access to any file downloaded from
+the browser, email, or another application. Downloads is built on an completely new
+download manager facility in the system that any other applications can use, to
+more easily manage and store their downloads.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Camera</strong></p>
+
+<p>The application now lets the user access multiple cameras on the device,
+including a front-facing camera, if available. </p>
+
+
+<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
+
+<p>Android 2.3 delivers a variety of features and APIs that
+let developers bring new types of applications to the Android
+platform.</p>
+
+ <ul>
+<li><a href="#gaming">Enhancements for gaming</a></li>
+<li><a href="#communication">New forms of communication</a></li>
+<li><a href="#multimedia">Rich multimedia</a></li>
+</ul>
+
+<h3 id="gaming">Enhancements for gaming</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Performance</strong></p>
+
+<p>Android 2.3 includes a variety of improvements across the system that make
+common operations faster and more efficient for all applications. Of particular
+interest to game developers are:</p>
+
+<ul>
+<li>Concurrent garbage collector &mdash; The Dalivik VM introduces a new,
+concurrent garbage collector that minimizes application pauses, helping to
+ensure smoother animation and increased responsiveness in games and similar
+applications. </li>
+<li>Faster event distribution &mdash; The plaform now handles touch and keyboard
+events faster and more efficiently, minimizing CPU utilization during event
+distribution. The changes improve responsiveness for all applications, but
+especially benefit games that use touch events in combination with 3D graphics
+or other CPU-intensive operations. </li>
+<li>Updated video drivers &mdash; The platform uses updated third-party video
+drivers that improve the efficiency of OpenGL ES operations, for faster overall
+3D graphics performance. </li>
+</ul>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native input and
+sensor events</strong></p>
+
+<p>Applications that use native code can now receive and process input and
+sensor events directly in their native code, which dramatically improves
+efficiency and responsiveness. </p>
+
+<p>Native libraries exposed by the platform let applications handle the same
+types of input events as those available through the framework. Applications
+can receive events from all supported sensor types and can enable/disable
+specific sensors and manage event delivery rate and queueing. </p>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Gyroscope and other
+new sensors, for improved 3D motion processing</strong></p>
+
+<p>Android 2.3 adds API support for several new sensor types, including
+gyroscope, rotation vector, linear acceleration, gravity, and barometer sensors.
+Applications can use the new sensors in combination with any other sensors
+available on the device, to track three-dimensional device motion and
+orientation change with high precision and accuracy. For example, a game
+application could use readings from a gyroscope and accelerometer on the device
+to recognize complex user gestures and motions, such as tilt, spin, thrust, and
+slice.  </p>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Open API for native
+audio</strong></p>
+
+<p>The platform provides a software implementation of <a
+href="http://www.khronos.org/opensles/">Khronos OpenSL ES</a>, a standard API
+that gives applications access to powerful audio controls and effects from
+native code. Applications can use the API to manage audio devices and control
+audio input, output, and processing directly from native code.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native graphics
+management</strong></p>
+
+<p>The platform provides an interface to its <a
+href="http://www.khronos.org/egl/">Khronos EGL</a> library, which lets
+applications manage graphics contexts and create and manage OpenGL ES textures
+and surfaces from native code.</p>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native access to
+Activity lifecycle, window management</strong></p>
+
+<p>Native applications can declare a new type of Activity class,
+<code>NativeActivity</code> whose lifecycle callbacks are implemented directly
+in native code. The <code>NativeActivity</code> and its underlying native code
+run in the system just as do other Activities &mdash; they run in the
+application's system process and execute on the application's main UI thread,
+and they receive the same lifecycle callbacks as do other Activities. </p>
+
+<p>The platform also exposes native APIs for managing windows, including the
+ability to lock/unlock the pixel buffer to draw directly into it. Through the
+API, applications can obtain a native window object associated with a framework
+Surface object and interact with it directly in native code.</p>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native access to
+assets, storage</strong></p>
+
+<p>Applications can now access a native Asset Manager API to retrieve
+application assets directly from native code without needing to go through JNI.
+If the assets are compressed, the platform does streaming decompression as the
+application reads the asset data. There is no longer a limit on the size of
+compressed <code>.apk</code> assets that can be read.</p>
+
+<p>Additionally, applications can access a native Storage Manager API to work
+directly with OBB files downloaded and managed by the system. Note that although
+platform support for OBB is available in Android 2.3, development tools for
+creating and managing OBB files will not be available until early 2011.</p>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Robust native
+development environment</strong></p>
+
+<p>The Android NDK (r5 or higher) provides a complete set of tools, toolchains,
+and libraries for developing applications that use the rich native environment
+offered by the Android 2.3 platform. For more information or to download the
+NDK, please see the <a
+href="http://developer.android.com/sdk/ndk/index.html">Android&nbsp;NDK</a>
+page. </p>
+
+
+<h3 id="communication">New forms of communication</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Internet
+telephony</strong></p>
+
+<p>Developers can now add SIP-based internet telephony features to their
+applications. Android 2.3 includes a full SIP protocol stack and integrated call
+management services that let applications easily set up outgoing and incoming
+voice calls, without having to manage sessions, transport-level communication,
+or audio record or playback directly. </p>
+
+<p>Support for the platform's SIP and internet calling features on specific
+devices is determined by their manufacturers and associated carriers.</p>
+
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Near Field
+Communications (NFC)</strong></p>
+
+<p>The platform's support for Near Field Communications (NFC) lets developers
+get started creating a whole new class of applications for Android. Developers
+can create new applications that offer proximity-based information and services
+to users, organizations, merchants, and advertisers. </p>
+
+<p>Using the NFC API,
+applications can read and respond to NFC tags “discovered” as the user “touches” an
+NFC-enabled device to elements embedded in stickers, smart posters, and even
+other devices. When a tag of interest is collected, applications can respond to
+the tag, read messages from it, and then store the messages, prompting
+the user as needed. </p>
+
+<p>Starting from Android 2.3.3, applications can also write to tags and
+set up peer-to-peer connections with other NFC devices.</p>
+
+<p>NFC communication relies on wireless technology in the device hardware, so
+support for the platform's NFC features on specific devices is determined by
+their manufacturers.</p>
+
+
+<h3 id="multimedia">Rich multimedia</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Mixable audio
+effects</strong></p>
+
+<p>A new audio effects API lets developers easily create rich audio environments
+by adding equalization, bass boost, headphone virtualization (widened
+soundstage), and reverb to audio tracks and sounds. Developers can mix multiple
+audio effects in a local track or apply effects globally, across multiple
+tracks.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Support for new media
+formats</strong></p>
+
+<p>The platform now offers built-in support for the VP8 open video compression
+format and the WebM open container format. The platform also adds support for
+AAC encoding and AMR wideband encoding (in software), so that applications can
+capture higher quality audio than narrowband. </p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Access to multiple
+cameras</strong></p>
+
+<p>The Camera API now lets developers access any cameras that are available on a
+device, including a front-facing camera. Applications can query the platform for
+the number of cameras on the device and their types and characteristics, then
+open the camera needed. For example, a video chat application might want to access a
+front-facing camera that offers lower-resolution, while a photo application
+might prefer a back-facing camera that offers higher-resolution.</p>
+
+
+<h2 id="PlatformTechnologies">New Platform Technologies</h2>
+
+<h3>Media Framework</h3>
+
+<ul>
+<li>New media framework fully replaces OpenCore, maintaining all previous
+codec/container support for encoding and decoding.</li>
+<li>Integrated support for the VP8 open video compression format and the WebM
+open container format</li>
+<li>Adds AAC encoding and AMR wideband encoding</li>
+</ul>
+
+<h3>Linux Kernel </h3>
+<ul>
+<li>Upgraded to 2.6.35</li>
+</ul>
+
+<h3>Networking</h3>
+<ul>
+<li>SIP stack, configurable by device manufacturer
+<li>Support for Near Field Communications (NFC), configurable by device manufacturer</li>
+<li>Updated BlueZ stack</li>
+</ul>
+
+<h3>Dalvik runtime</h3>
+
+<ul>
+<li>Dalvik VM:
+<ul>
+<li>Concurrent garbage collector (target sub-3ms pauses)</li>
+<li>Adds further JIT (code-generation) optimizations</li>
+<li>Improved code verification</li>
+<li>StrictMode debugging, for identifying performance and memory issues</li>
+</ul>
+</li>
+
+
+<li>Core libraries:
+<ul>
+  <li>Expanded I18N support (full worldwide encodings, more locales)
+  <li>Faster Formatter and number formatting. For example, float formatting is 2.5x faster.</li>
+  <li>HTTP responses are gzipped by default. XML and JSON API response sizes may be reduced by 60% or more.</li>
+  <li>New collections and utilities APIs</li>
+  <li>Improved network APIs</li>
+  <li>Improved file read and write controls</li>
+  <li>Updated JDBC</li>
+</ul>
+</li>
+
+<li>Updates from upstream projects:
+  <ul>
+  <li>OpenSSL 1.0.0a</li>
+  <li>BouncyCastle 1.45</li>
+  <li>ICU 4.4</li>
+  <li>zlib 1.2.5</li>
+  </ul>
+</li>
+
+
+</ul>
+
+<p>For more information about the new developer APIs, see the <a
+href="android-2.3.html">Android 2.3 version notes</a> and the <a
+href="{@docRoot}sdk/api_diff/9/changes.html">API Differences Report</a>.</p>
diff --git a/docs/html/about/versions/android-2.3.3.jd b/docs/html/about/versions/android-2.3.3.jd
new file mode 100644
index 0000000..55ff346
--- /dev/null
+++ b/docs/html/about/versions/android-2.3.3.jd
@@ -0,0 +1,192 @@
+page.title=Android 2.3.3 Platform
+sdk.platform.version=2.3.3
+sdk.platform.apiLevel=10
+
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android 2.3.3 is a small feature release that adds several improvements
+and APIs to the Android 2.3 platform.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+
+<h2 id="api">API Overview</h2>
+
+<p>The sections below provide a technical overview of what's new for developers
+in {@sdkPlatformVersion}, including new features and changes in the framework
+API since the previous version.</p>
+
+<h3 id="nfc">Near Field Communications (NFC)</h3>
+
+<p>Android 2.3.3 provides improved and extended support for NFC, to allow
+applications to interact with more types of tags in new ways.</p>
+
+<p>A new, comprehensive set of APIs give applications read and write access
+to a wider range of standard tag technologies, including:</p>
+
+<ul>
+<li>NFC-A (ISO 14443-3A)</li>
+<li>NFC-B (ISO 14443-3B)</li>
+<li>NFC-F (JIS 6319-4)</li>
+<li>NFC-V (ISO 15693)</li>
+<li>ISO-DEP (ISO 14443-4)</li>
+<li>MIFARE Classic</li>
+<li>MIFARE Ultralight</li>
+<li>NFC Forum NDEF tags</li>
+</ul>
+
+<p>The platform also provides a limited peer-to-peer communication protocol
+and API. Foreground Activities can use the API to register an NDEF
+message that will get pushed to other NFC devices when they connect.</p>
+
+<p>Advanced tag dispatching now gives applications more control over how and
+when they are launched, when an NFC tag is discovered. Previously, the platform
+used a single-step intent dispatch to notify interested applications that a tag
+was discovered. The platform now uses a four-step process that enables the
+foreground application to take control of a tag event before it is passed to any
+other applications (<code>android.nfc.NfcAdapter.enableForegroundDispatch()</code>).
+
+The new dispatch process also lets apps listen for specific tag content and
+tag technologies, based on two new intent actions &mdash;
+<code>android.nfc.action.NDEF_DISCOVERED</code> and
+<code>android.nfc.action.TECH_DISCOVERED</code>.</p>
+
+<p>The NFC API is available in the {@link android.nfc} and 
+{@link android.nfc.tech} packages. The key classes are: </p>
+
+<ul>
+<li>{@link android.nfc.NfcAdapter}, which represents the NFC hardware on the device.</li>
+<li>{@link android.nfc.NdefMessage}, which represents an NDEF data message,
+the standard format in which "records" carrying data are transmitted between
+devices and tags. An NDEF message certain many NDEF records of different types.
+Applications can receive these messages from 
+{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED NDEF_DISCOVERED},
+{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED TECH_DISCOVERED}, or
+{@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED TAG_DISCOVERED} Intents.</li>
+<li>{@link android.nfc.NdefRecord}, delivered in an
+{@link android.nfc.NdefMessage}, which describes the type of data being shared
+and carries the data itself.</li>
+<li>{@link android.nfc.Tag}, which represents a tag scanned by the device.
+Multiple types of tags are supported, based on the underlying tag
+technology.</li>
+<li>{@link android.nfc.tech.TagTechnology}, an interface that gives applications
+access to tag properties and I/O operations based on the technologies present
+in the tag. For a full list of tag technologies supported in Android 2.3.3, see
+{@link android.nfc.tech}.</li>
+</ul>
+
+<p>NFC communication relies on wireless technology in the device hardware, and
+is not present in all Android devices. Android devices that do not support
+NFC will return a null object when
+{@link android.nfc.NfcAdapter#getDefaultAdapter(android.content.Context)
+getDefaultAdapter(Context)} is called, and
+<code>context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)</code>
+will return <code>false</code>. The NFC API is always present, however, regardless of
+underlying hardware support.</p>
+
+<p>To use the NFC API, applications must request permission from the user by
+declaring <code>&lt;uses-permission
+android:name="android.permission.NFC"&gt;</code> in their manifest files.</p>
+
+<p>Additionally, developers can request filtering on Google Play, such that
+their applications are not discoverable to users whose devices do not support
+NFC. To request filtering, add
+<code>&lt;uses-feature android:name="android.hardware.nfc"
+android:required="true"&gt;</code> to the application's manifest.</p>
+
+<p class="note">To look at sample code for NFC, see
+<a href="{@docRoot}resources/samples/NFCDemo/index.html">NFCDemo app</a>, <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/TechFilter.html">filtering by tag technology</a></li>, <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">using foreground dispatch</a>, and <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.html">foreground NDEF push (P2P)</a>.</p>
+
+<h3 id="bluetooth">Bluetooth</h3>
+
+<p>Android 2.3.3 adds platform and API support for Bluetooth nonsecure socket
+connections. This lets applications communicate with simple devices that may not
+offer a UI for authentication. See 
+{@link android.bluetooth.BluetoothDevice#createInsecureRfcommSocketToServiceRecord(java.util.UUID)} and 
+{@link android.bluetooth.BluetoothAdapter#listenUsingInsecureRfcommWithServiceRecord(java.lang.String, java.util.UUID)}
+for more information. </p>
+
+<h3 id="graphics">Graphics</h3>
+
+<ul>
+<li>A new {@link android.graphics.BitmapRegionDecoder} class lets applications
+decode a rectangle region from an image. The API is particularly useful when an
+original image is large and and the application only need parts of the image.
+</li>
+<li>A new {@link
+android.graphics.BitmapFactory.Options#inPreferQualityOverSpeed} field in {@link
+android.graphics.BitmapFactory.Options} allows applications to use a more accurate
+but slightly slower IDCT method in JPEG decode. This in turn improves the
+quality of the reconstructed image.</li>
+</ul>
+
+
+<h3 id="media">Media framework</h3>
+
+<ul>
+<li>A new {@link android.media.MediaMetadataRetriever} class provides a unified
+interface for retrieving frame and metadata from an input media file.</li>
+<li>{@link android.media.MediaRecorder.AudioEncoder} and {@link
+android.media.MediaRecorder.OutputFormat} include new fields for specifying AMR
+Wideband and AAC formats. </li>
+</ul>
+
+
+<h3 id="speech">Speech recognition</h3>
+
+<p>The speech-recognition API includes new constants to let you manage voice
+search results in new ways. Although the new constants are not needed for normal
+use of speech recognition, you could use them to offer a different view of voice
+search results in your application. For information, see {@link
+android.speech.RecognizerResultsIntent}.</p>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
+you need compile the application against the Android library that is provided in
+the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
+manifest. If your application is designed to run only on Android 2.3 and higher,
+declaring the attribute prevents the application from being installed on earlier
+versions of the platform.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
\ No newline at end of file
diff --git a/docs/html/about/versions/android-2.3.4.jd b/docs/html/about/versions/android-2.3.4.jd
new file mode 100644
index 0000000..bb4feec
--- /dev/null
+++ b/docs/html/about/versions/android-2.3.4.jd
@@ -0,0 +1,148 @@
+page.title=Android 2.3.4 Platform
+sdk.platform.version=2.3.4
+sdk.platform.apiLevel=10
+
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#openaccessory">Open Accessory Library</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android 2.3.4 is a maintenance release that adds several bug fixes and patches
+to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, 
+Android 2.3.4 brings support for the Open Accessory API to mobile devices,
+through the optional <a href="#usb">Open Accessory Library</a>. </p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+
+<h2 id="api">API Overview</h2>
+
+<p>Android 2.3.4 provides the same framework API to applications as Android 2.3.3
+(API level 10). For a summary of the API, see the
+<a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.3 version notes</a>.</p>
+
+
+<h2 id="openaccessory">Open Accessory Library</h2>
+
+<p><em>Open Accessory</em> is a new capability for integrating
+connected peripherals with applications running on the platform. The capability
+is based on a USB (Universal Serial Bus) stack built into the platform and an
+API exposed to applications. Peripherals that attach to Android-powered devices
+as accessories connect as USB hosts. </p>
+
+<p>Open Accessory is introduced in <a
+href="{@docRoot}about/versions/android-3.1.html#usb">Android 3.1</a> (API level 12), but is
+made available to devices running Android 2.3.4 by means of an optional external
+library, the Open Accessory Library. The library exposes a framework API that
+lets applications discover, communicate with, and manage a variety of device
+types connected over USB. It also provides the implementation of the API against
+parts of the Android platform that are not directly exposed to applications in
+Android 2.3.4.</p>
+
+<p>The Open Accessory Library is optional on any given device. Device
+manufacturers may choose whether to include the Open Accessory Library in their
+products or exclude it. The library is forward-compatible with Android 3.1, so
+applications developed against Android 2.3.4 will run properly on devices
+running Android 3.1, if those devices support USB accessories. </p>
+
+<p>The API provided by the Open Accessory Library is based on the Open Accessory
+API provided in Android 3.1. In most areas, you can use the same techniques and
+APIs. However, developing for the Open Accessory Library on Android 2.3.4 differs
+from the standard USB API in these ways:
+
+<ul>
+<li>Obtaining a {@link android.hardware.usb.UsbManager} object &mdash; To obtain
+a {@link android.hardware.usb.UsbManager} object when using the add-on library,
+use the helper method <code>getInstance()</code> rather than {@link
+android.content.Context#getSystemService(java.lang.String) getSystemService()}
+For example:
+
+<pre>UsbManager manager = UsbManager.getInstance(this);</pre></li>
+
+<li>Obtaining a {@link android.hardware.usb.UsbAccessory} from a filtered intent
+&mdash; When you filter for a connected device or accessory with an intent
+filter, the {@link android.hardware.usb.UsbAccessory} object is contained
+inside the intent that is passed to your application. If you are using the
+add-on library, you can get the {@link android.hardware.usb.UsbAccessory} object
+in the following manner:
+
+<pre>UsbAccessory accessory = UsbManager.getAccessory(intent)</pre></li>
+
+<li>No USB host support &mdash; Android 2.3.4 and the Open Accessory Library do
+not support USB host mode (for example, through {@link
+android.hardware.usb.UsbDevice}), although USB host mode is supported in Android
+3.1. An Android-powered device running Android 2.3.4 can not function as a USB
+host. The library enables the Android-powered device to function as
+a peripheral only, with the connected accessory functioning as USB host
+(through {@link android.hardware.usb.UsbAccessory}).</li>
+</ul>
+
+<p>To develop apps using the Open Accessory Library, you need:</p>
+
+<ul>
+<li>The latest version of the Android SDK tools</li>
+<li>The latest version of the Google APIs add-on, which includes the library
+itself (for linking)</li>
+<li>An actual hardware device running Android 2.3.4 (or Android 3.1) with USB
+accessories support, for runtime testing against connected devices</li>
+</ul>
+
+<p>For a full discussion of how to develop applications that interact with USB
+accessories, please see the related <a
+href="{@docRoot}guide/topics/connectivity/usb/index.html">developer documentation</a>.</p>
+
+<p>Additionally, developers can request filtering on Google Play, such that
+their applications are not available to users whose devices do not provide the
+appropriate accessory support. To request filtering, add the element below
+to the application manifest:</p>
+
+<pre>&lt;uses-feature
+  android:name="android.hardware.usb.accessory"
+  android:required="true"&gt;</pre>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android 2.3.4 platform does <em>not</em> increment the API level &mdash;
+it uses the same API level as Android 2.3.3, API level 10.
+
+<p>To use APIs introduced in API level 10 in your application,
+you need compile the application against the Android library that is provided in
+the latest version of the Google APIs Add-On, which also includes the Open
+Accessory Library.</p>
+
+<p>Depending on your needs, you might
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
+manifest. If your application is designed to run only on Android 2.3.3 and higher,
+declaring the attribute prevents the application from being installed on earlier
+versions of the platform.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
diff --git a/docs/html/about/versions/android-2.3.jd b/docs/html/about/versions/android-2.3.jd
new file mode 100644
index 0000000..2afa564
--- /dev/null
+++ b/docs/html/about/versions/android-2.3.jd
@@ -0,0 +1,710 @@
+page.title=Android 2.3 Platform
+sdk.platform.version=2.3
+sdk.platform.apiLevel=9
+
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+<p>
+<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+
+
+<h2 id="api">API Overview</h2>
+
+<p>The sections below provide a technical overview of what's new for developers
+in {@sdkPlatformVersion}, including new features and changes in the framework
+API since the previous version.</p>
+
+
+<h3 id="sip">SIP-based VoIP</h3>
+
+<p>The platform now includes a SIP protocol stack and framework API that lets
+developers build internet telephony applications. Using the API, applications can offer
+voice calling features without having to manage sessions, transport-level
+communication, or audio &mdash; these are handled
+transparently by the platform's SIP API and services.</p>
+
+<p>The SIP API is available in the {@link android.net.sip android.net.sip}
+package. The key class is {@link android.net.sip.SipManager}, which applications
+use to set up and manage SIP profiles, then initiate audio calls and receive
+audio calls. Once an audio call is established, applications can mute calls,
+turn on speaker mode, send DTMF tones, and more. Applications can also use the
+{@link android.net.sip.SipManager} to create generic SIP connections.</p>
+
+<p>The platform’s underlying SIP stack and services are available on devices at
+the discretion of the manufacturer and associated carrier. For this reason,
+applications should use the  {@link android.net.sip.SipManager#isApiSupported
+isApiSupported()} method to check whether SIP support is available, before
+exposing calling functionality to users. </p>
+
+<p>To use the SIP API, applications must request permission from the user by
+declaring <code>&lt;uses-permission
+android:name="android.permission.INTERNET"&gt;</code> and <code>&lt;uses-permission
+android:name="android.permission.USE_SIP"&gt;</code> in their manifest files.</p>
+
+<p>Additionally, developers can request filtering on Google Play, such that
+their applications are not discoverable to users whose devices do not include
+the platform’s SIP stack and services. To request filtering, add <code>&lt;uses-feature
+android:name="android.software.sip"
+android:required="true"&gt;</code> and <code>&lt;uses-feature
+android:name="android.software.sip.voip"&gt;</code> to the application manifest.</p>
+
+<p class="note">To look at a sample application that uses the SIP API, see <a
+href="{@docRoot}resources/samples/SipDemo/index.html">SIP Demo</a>.</p>
+
+<h3 id="nfc">Near Field Communications (NFC)</h3>
+
+<p>Android 2.3 includes an NFC stack and framework API that lets developers
+read NDEF tags that are discovered as a user touches an NFC-enabled device
+to tag elements embedded in stickers, smart posters, and even other devices.</p>
+
+<p>The platform provides the underlying NFC services that work with the device
+hardware to discover tags when they come into range. On discovering a tag, the
+platform notifies applications by broadcasting an Intent, appending the tag's
+NDEF messages to the Intent as extras. Applications can create Intent filters to
+recognize and handle targeted tags and messages. For example, after receiving a
+tag by Intent, applications extract the NDEF messages, store them, alert the
+user, or handle them in other ways. </p>
+
+<p>The NFC API is available in the {@link android.nfc} package. The key classes are: </p>
+
+<ul><li>{@link android.nfc.NfcAdapter}, which represents the NFC hardware on the device.</li>
+<li>{@link android.nfc.NdefMessage}, which represents an NDEF data message,
+the standard format in which "records" carrying data are transmitted between
+devices and tags. Applications can receive these messages from {@link
+android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}</code> Intents.</li>
+<li>{@link android.nfc.NdefRecord}, delivered in an
+{@link android.nfc.NdefMessage}, which describes the type of data being shared and
+carries the data itself.</li>
+</ul>
+
+<p>NFC communication relies on wireless technology in the device hardware, so
+support for the platform's NFC features on specific devices is determined by
+their manufacturers. To determine the NFC support on the current device,
+applications can call {@link android.nfc.NfcAdapter#isEnabled isEnabled()} to
+query the {@link android.nfc.NfcAdapter}. The NFC API is always present,
+however, regardless of underlying hardware support.</p>
+
+<p>To use the NFC API, applications must request permission from the user by
+declaring <code>&lt;uses-permission
+android:name="android.permission.NFC"&gt;</code> in their manifest files.</p>
+
+<p>Additionally, developers can request filtering on Google Play, such that
+their applications are not discoverable to users whose devices do not support
+NFC. To request filtering, add
+<code>&lt;uses-feature android:name="android.hardware.nfc"
+android:required="true"&gt;</code> to the application's manifest.</p>
+
+<p class="note">To look at a sample application that uses the NFC API, see
+<a href="{@docRoot}resources/samples/NFCDemo/index.html">NFCDemo</a>.</p>
+
+<h3 id="sensors">Gyroscope and other sensors</h3>
+
+<p>Android 2.3 adds platform and API support for several new sensor reading
+types &mdash; gyroscope, rotation vector, linear acceleration, gravity, and barometer.
+Developers can use the new sensor readings to create applications that respond
+quickly and smoothly to precise changes in device position and motion. The
+Sensor API reports gyroscope and other sensor changes to interested
+applications, whether they are running on the application framework or in native
+code. </p>
+
+<p>Note that the specific set of hardware sensors available on any given device
+varies at the discretion of the device manufacturer. </p>
+
+<p>Developers can request filtering on Google Play, such that their
+applications are not discoverable to users whose devices do not offer a
+gyroscope sensor. To do so, add <code>&lt;uses-feature
+android:name="android.hardware.sensor.gyroscope"
+android:required="true"&gt;</code> to the application manifest.</p>
+
+<p>For API details, see {@link android.hardware.Sensor}.</p>
+
+
+<h3 id="cameras">Multiple cameras support</h3>
+
+<p>Applications can now make use of any cameras that are available on a device,
+for either photo or video capture. The {@link android.hardware.Camera} lets
+applications query for the number of cameras available and the unique
+characteristics of each. </p>
+
+<ul>
+<li>New {@link android.hardware.Camera.CameraInfo} class stores a camera's
+positional characteristics (orientation, front-facing or back-facing).</li>
+<li>New {@link android.hardware.Camera#getNumberOfCameras()} and {@link
+android.hardware.Camera#getCameraInfo(int,CameraInfo) getCameraInfo()} methods in the {@link
+android.hardware.Camera} class let applications query for the cameras available
+and open the camera that they need.</li>
+<li>New {@link android.media.CamcorderProfile#get get()} method lets
+applications retrieve a {@link android.media.CamcorderProfile} for a specific camera. </li>
+<li>New {@link android.media.CameraProfile#getJpegEncodingQualityParameter(int, int)
+getJpegEncodingQualityParameter()} lets applications obtain the still-image
+capture quality level for a specific camera.</li>
+</ul>
+
+<p class="note">To look at sample code for accessing a front-facing camera, see <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html">CameraPreview.java</a>
+in the ApiDemos sample application.</p>
+
+<p>The Camera API also adds: </p>
+<ul>
+<li>New parameters for cameras, including focus distance, focus mode, and
+preview fps maximum/minimum. New {@link
+android.hardware.Camera.Parameters#getFocusDistances(float[])
+getFocusDistances()}, {@link
+android.hardware.Camera.Parameters#getPreviewFpsRange(int[])
+getPreviewFpsRange()}, and {@link
+android.hardware.Camera.Parameters#getSupportedPreviewFpsRange()
+getSupportedPreviewFpsRange()} for getting camera parameters, as well as {@link
+android.hardware.Camera.Parameters#setPreviewFpsRange(int, int)
+setPreviewFpsRange()} for setting preview framerate. </li>
+</ul>
+
+<h3 id="media">Mixable audio effects</h3>
+
+<p>The platform's media framework adds support for new per-track or global audio effects,
+including bass boost, headphone virtualization, equalization, and reverb.</p>
+<ul>
+<li>New {@link android.media.audiofx android.media.audiofx} package provides the
+API to access audio effects.</li>
+<li>New {@link android.media.audiofx.AudioEffect AudioEffect} is the  base class
+for controlling audio effects provided by the Android audio framework.
+<li>New audio session ID that lets an application associate a set of audio
+effects with an instance of {@link android.media.AudioTrack} or {@link
+android.media.MediaPlayer}.</li>
+<li>New {@link android.media.AudioTrack#AudioTrack(int, int, int, int, int, int,
+int) AudioTrack} class constructor that lets you create an {@link
+android.media.AudioTrack} with a specific session ID. New {@link
+android.media.AudioTrack#attachAuxEffect(int) attachAuxEffect()}, {@link
+android.media.AudioTrack#getAudioSessionId() getAudioSessionId()}, and {@link
+android.media.AudioTrack#setAuxEffectSendLevel(float) setAuxEffectSendLevel()}
+methods.</li>
+<li>New {@link android.media.MediaPlayer#attachAuxEffect(int)
+attachAuxEffect()}, {@link android.media.MediaPlayer#getAudioSessionId()
+getAudioSessionId()}, {@link android.media.MediaPlayer#setAudioSessionId(int)
+setAudioSessionId(int)}, and {@link
+android.media.MediaPlayer#setAuxEffectSendLevel(float) setAuxEffectSendLevel()}
+methods and supporting types.</li>
+</ul>
+
+<p class="note">To look at sample code for audio effects, see
+<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.html">AudioFxDemo.java</a>
+in the ApiDemos sample application.</p>
+
+<p>The media framework also adds:</p>
+<ul>
+<li>New support for altitude tag in EXIF metadata for JPEG files. New method
+{@link android.media.ExifInterface#getAltitude(double) getAltitude()} method to
+retrieve the value of the EXIF altitude tag.</li>
+<li>New {@link android.media.MediaRecorder#setOrientationHint(int)
+setOrientationHint()} method lets an application tell {@link
+android.media.MediaRecorder} of the orientation during video capture.</li>
+</ul>
+
+<h3 id="download">Download manager</h3>
+
+<p>The platform includes a new {@link android.app.DownloadManager} system service
+that handles long-running HTTP downloads. Applications can request that a URI be
+downloaded to a particular destination file. The <code>DownloadManager</code>
+will conduct the download in the background, taking care of HTTP interactions
+and retrying downloads after failures or across connectivity changes and system
+reboots. </p>
+<ul>
+<li>Applications can obtain an instance of the {@link android.app.DownloadManager}
+class by calling {@link
+android.content.Context#getSystemService(String)} and passing
+{@link android.content.Context#DOWNLOAD_SERVICE}. Applications that request 
+downloads through this API should register a broadcast receiver for {@link
+android.app.DownloadManager#ACTION_NOTIFICATION_CLICKED}, to appropriately
+handle when the user clicks on a running download in a notification or from the
+Downloads UI.</li>
+<li>The {@link android.app.DownloadManager.Request} class lets an
+application provide all the information necessary to request a new download,
+such as request URI and download destination. A request URI is the only required
+parameter. Note that the default download destination is a shared volume where
+the system can delete your file if it needs to reclaim space for system use. For
+persistent storage of a download, specify a download destination on external
+storage (see {@link
+android.app.DownloadManager.Request#setDestinationUri(Uri)}).</li>
+<li>The {@link android.app.DownloadManager.Query} class provides methods that let
+an application query for and filter active downloads.</li>
+</ul>
+
+<h3 id="strictmode">StrictMode</h3>
+
+<p>To help developers monitor and improve the performance of their applications,
+the platform offers a new system facility called {@link android.os.StrictMode}.
+When implemented in an application, StrictMode catches and notifies the
+developer of accidental disk or network activity that could degrade application
+performance, such as activity taking place on the application's main thread
+(where UI operations are received and animations are also taking place).
+Developers can evaluate the network and disk usages issues raised in StrictMode
+and correct them if needed, keeping the main thread more responsive and
+preventing ANR dialogs from being shown to users.
+
+<ul>
+<li>{@link android.os.StrictMode} is the core class and is the main integration
+point with the system and VM. The class provides convenience methods for
+managing the thread and VM policies that apply to the instance.</li>
+<li>{@link android.os.StrictMode.ThreadPolicy} and {@link
+android.os.StrictMode.VmPolicy} hold the policies that you define and apply to
+thread and VM instances.</li>
+</ul>
+
+<p>For more information about how to use StrictMode to optimize your
+application, see the class documentation and sample code at {@link
+android.os.StrictMode android.os.StrictMode}.</p>
+
+<h3 id="ui">UI Framework</h3>
+
+<ul>
+<li>Support for overscroll
+<ul>
+<li>New support for overscroll in Views and Widgets. In Views, applications can
+enable/disable overscroll for a given view, set the overscoll mode, control the
+overscroll distance, and handle the results of overscrolling. </li>
+<li>In Widgets, applications can control overscroll characteristics such as
+animation, springback, and overscroll distance. For more information, see {@link
+android.view.View android.view.View} and {@link android.widget.OverScroller
+android.widget.OverScroller}. </li>
+<li>{@link android.view.ViewConfiguration} also provides methods {@link
+android.view.ViewConfiguration#getScaledOverflingDistance()} and {@link
+android.view.ViewConfiguration#getScaledOverscrollDistance()}.</li>
+<li>New <code>overScrollMode</code>, <code>overScrollFooter</code>, and
+<code>overScrollHeader</code> attributes for <code>&lt;ListView&gt;</code> elements,
+for controlling overscroll behavior.</li>
+</ul>
+</li>
+
+<li>Support for touch filtering
+<ul>
+<li>New support for touch filtering, which lets an application improve the
+security of Views that provide access to sensitive functionality. For example,
+touch filtering is appropriate to ensure the security of user actions such as
+granting a permission request, making a purchase, or clicking on an
+advertisement. For details, see the <a
+href="{@docRoot}reference/android/view/View.html#Security">View class
+documentation</a>.</li>
+<li>New <code>filterTouchesWhenObscured</code> attribute for view elements,
+which declares whether to filter touches when the view's window is obscured by
+another visible window. When set to <code>"true"</code>, the view will not
+receive touches whenever a toast, dialog or other window appears above the
+view's window. Refer to <a
+href="{@docRoot}reference/android/view/View.html#Security">View security
+documentation</a> for details.</li>
+</ul>
+
+<p class="note">To look at sample code for touch filtering, see
+<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SecureView.html">SecureView.java</a>
+in the ApiDemos sample application.</p>
+</li>
+
+<li>Improved event management
+<ul>
+<li>New base class for input events, {@link android.view.InputEvent}. The class
+provides methods that let applications determine the meaning of the event, such
+as by querying for the InputDevice from which the event orginated. The {@link
+android.view.KeyEvent} and {@link android.view.MotionEvent} are subclasses of
+{@link android.view.InputEvent}.</li>
+<li>New base class for input devices, {@link android.view.InputDevice}. The
+class stores information about the capabilities of a particular input device and
+provides methods that let applications determine how to interpret events from an
+input device.</li>
+</ul>
+</li>
+
+<li>Improved motion events
+<ul>
+<li>The {@link android.view.MotionEvent} API is extended to include "pointer ID"
+information, which lets applications to keep track of individual fingers as they
+move up and down. The class adds a variety of methods that let an application
+work efficiently with motion events.</li>
+<li>The input system now has logic to generate motion events with the new
+pointer ID information, synthesizing identifiers as new pointers are down. The
+system tracks multiple pointer IDs separately during a motion event, and
+ensures proper continuity of pointers by evaluating at the distance
+between the last and next set of pointers.</li>
+</ul>
+</li>
+
+<li>Text selection controls
+<ul>
+<li>A new <code>setComposingRegion</code> method lets an application mark a
+region of text as composing text, maintaining the current styling. A
+<code>getSelectedText</code> method returns the selected text to the
+application. The methods are available in {@link
+android.view.inputmethod.BaseInputConnection}, {@link
+android.view.inputmethod.InputConnection}, and {@link
+android.view.inputmethod.InputConnectionWrapper}.</li>
+<li>New <code>textSelectHandle</code>, <code>textSelectHandleLeft</code>,
+<code>textSelectHandleRight</code>, and <code>textSelectHandleWindowStyle</code>
+attributes for <code>&lt;TextView&gt;</code>, for referencing drawables that will be
+used to display text-selection anchors and the style for the containing
+window.</li>
+</ul>
+</li>
+
+<li>Activity controls
+<ul>
+<li>{@link android.content.pm.ActivityInfo} adds new constants for managing
+Activity orientation:
+{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_SENSOR},
+{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_LANDSCAPE},
+{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_PORTRAIT},
+{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_LANDSCAPE},
+and
+{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_PORTRAIT}.
+</li>
+<li>New constant {@link
+android.app.ActivityManager.RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE} for
+the {@link android.app.ActivityManager.RunningAppProcessInfo#importance} field
+in {@link android.app.ActivityManager.RunningAppProcessInfo}. The value
+indicates that a specific process is running something that is considered to be
+actively perceptible to the user. An example would be an application performing
+background music playback.</li>
+<li>The Activity.setPersistent(boolean) method to mark an
+Activity as persistent is now deprecated and the implementation is a no-op.</li>
+</ul>
+</li>
+
+<li>Notification text and icon styles
+<ul>
+<li>New {@link android.R.style#TextAppearance_StatusBar_EventContent
+TextAppearance.StatusBar.EventContent},
+{@link android.R.style#TextAppearance_StatusBar_EventContent_Title
+TextAppearance.StatusBar.EventContent.Title},
+{@link android.R.style#TextAppearance_StatusBar_Icon
+TextAppearance.StatusBar.Icon}, and
+{@link android.R.style#TextAppearance_StatusBar_Title
+TextAppearance.StatusBar.Title} for managing
+notification style.</li>
+</ul>
+</li>
+
+<li>WebView
+<ul>
+<li>New {@link
+android.webkit.WebSettings#setUseWebViewBackgroundForOverscrollBackground(
+boolean) setUseWebViewBackgroundForOverscrollBackground()} method lets a {@link
+android.webkit.WebView} specify whether to use its own background for the
+overscroll background. </li>
+</ul>
+</li>
+</ul>
+
+<h3 id="extralargescreens">Extra Large Screens</h3>
+
+<p>The platform now supports extra large screen sizes, such as those that might
+be found on tablet devices. Developers can indicate that their applications are
+designed to support extra large screen sizes by adding a <code>&lt;supports
+screens ... android:xlargeScreens="true"&gt;</code> element to their manifest
+files. Applications can use a new resource qualifier, <code>xlarge</code>, to
+tag resources that are specific to extra large screens. For
+details on how to support extra large and other screen sizes, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
+
+<h3 id="graphics">Graphics</h3>
+
+<ul>
+<li>Adds remaining OpenGL ES 2.0 methods {@link
+android.opengl.GLES20#glDrawElements(int, int, int, int) glDrawElements()} and
+{@link android.opengl.GLES20#glVertexAttribPointer(int, int, int, boolean, int,
+int) glVertexAttribPointer()} in the {@link android.opengl.GLES20
+android.opengl.GLES20} class.</li>
+<li>Adds support for {@link android.graphics.ImageFormat#YV12} pixel format, a
+planar 4:2:0 YCrCb format.</li>
+</ul>
+
+<h3 id="providers">Content Providers</h3>
+
+<ul>
+<li>New {@link android.provider.AlarmClock} provider class for setting an alarm
+or handling an alarm. The provider contains a <code>ACTION_SET_ALARM</code> Intent
+action and extras that can be used to start an Activity to set a new alarm in an
+alarm clock application. Applications that wish to receive the
+<code>SET_ALARM</code> Intent should create an activity that requires the
+the SET_ALARM permission. Applications that wish to create a new
+alarm should use {@link
+android.content.Context#startActivity(android.content.Intent)
+Context.startActivity()}, so that the user has the option of choosing
+which alarm clock application to use.</li>
+
+<li>{@link android.provider.MediaStore} supports a new Intent action, {@link
+android.provider.MediaStore#INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
+PLAY_FROM_SEARCH}, that lets an application search for music media and
+automatically play content from the result when possible. For example, an
+application could fire this Intent as the result of a voice recognition command
+to listen to music.</li>
+<li>{@link android.provider.MediaStore} also adds a new {@link
+android.provider.MediaStore#MEDIA_IGNORE_FILENAME} flag that tells the media
+scanner to ignore media in the containing directory and its subdirectories.
+Developers can use this to avoid having graphics appear in the Gallery and
+likewise prevent application sounds and music from showing up in the Music
+app.</li>
+
+<li>The {@link android.provider.Settings} provider adds the new Activity actions
+{@link android.provider.Settings#ACTION_APPLICATION_DETAILS_SETTINGS
+APPLICATION_DETAILS_SETTINGS} and {@link
+android.provider.Settings#ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS
+MANAGE_ALL_APPLICATIONS_SETTINGS}, which let an application show the details
+screen for a specific application or show the Manage Applications screen. </li>
+
+<li>The {@link android.provider.ContactsContract} provider adds the {@link
+android.provider.ContactsContract.CommonDataKinds.SipAddress} data kind, for
+storing a contact's SIP (Internet telephony) address. </li>
+</ul>
+
+<h3 id="location">Location</h3>
+
+<ul>
+<li>The {@link android.location.LocationManager} now tracks application
+requests that result in wake locks or wifi locks according to
+{@link android.os.WorkSource}, a system-managed class that identifies the
+application.
+<p>The <code>LocationManager</code> keeps track
+of all clients requesting periodic updates, and tells its providers
+about them as a <code>WorkSource</code> parameter, when setting their minimum
+update times.
+The network location provider uses <code>WorkSource</code> to track the
+wake and wifi locks initiated by an application and adds it to the application's
+battery usage reported in Manage Applications. </p></li>
+<li>The {@link android.location.LocationManager} adds several new methods that
+let an Activity register to receive periodic or one-time location updates based
+on specified criteria (see below).</li>
+<li>A new  {@link android.location.Criteria} class lets an application specify a
+set of criteria for selecting a location provider. For example, providers may be
+ordered according to accuracy, power usage, ability to report altitude, speed,
+and bearing, and monetary cost. </li>
+</ul>
+
+<h3 id="storage">Storage</h3>
+
+<ul>
+<li>Android 2.3 adds a new {@link android.os.storage.StorageManager} that
+supports OBB (Opaque Binary Blob) files. Although platform support for OBB is
+available in Android 2.3, development tools for creating and managing OBB files
+will not be availble until early 2011.</li>
+<li>The Android 2.3 platform adds official support for devices that do not
+include SD cards (although it provides virtual SD Card partition, when no
+physical SD card is available). A convenience method, {@link
+android.os.Environment#isExternalStorageRemovable()}, lets applications
+determine whether a physical SD card is present.</li>
+</ul>
+
+<h3 id="packagemanager">Package Manager</h3>
+
+<ul>
+<li>New constants for declaring hardware and software features. See the list in
+the <a href="#feature_constants">New Feature Constants</a> section, below.</li>
+<li>{@link android.content.pm.PackageInfo} adds new {@link
+android.content.pm.PackageInfo#firstInstallTime} and {@link
+android.content.pm.PackageInfo#lastUpdateTime} fields that store the time of the
+package installation and last update. </li>
+<li>New {@link
+android.content.pm.PackageManager#getProviderInfo(android.content.ComponentName,
+int) getProviderInfo()} method for retrieving all of the information known about
+a particular content provider class.</li>
+</ul>
+
+<h3 id="telephony">Telephony</h3>
+
+<ul>
+<li>The {@link android.telephony.TelephonyManager} adds the constant {@link
+android.telephony.TelephonyManager#NETWORK_TYPE_EVDO_B} for specifying the CDMA
+EVDO Rev B network type.</li>
+<li>New {@link android.telephony.gsm.GsmCellLocation#getPsc()} method returns
+the primary scrambling code of the serving cell on a UMTS network.</li>
+</ul>
+
+<h3 id="native">Native access to Activity lifecycle, windows</h3>
+
+<p>Android 2.3 exposes a broad set of APIs to applications that use native
+code. Framework classes of interest to such applications include: </p>
+
+<ul>
+<li>{@link android.app.NativeActivity} is a new type of Activity class, whose
+lifecycle callbacks are implemented directly in native code. A
+<code>NativeActivity</code> and its underlying native code run in the system
+just as do other Activities &mdash; specifically they run in the Android
+application's system process and execute on the application's main UI thread,
+and they receive the same lifecycle callbacks as do other Activities. </li>
+<li>New {@link android.view.InputQueue} class and callback interface lets native
+code manage event queueing. </li>
+<li>New {@link android.view.SurfaceHolder.Callback2} interface lets native code
+manage a {@link android.view.SurfaceHolder}. </li>
+<li>New {@link
+android.view.Window#takeInputQueue(android.view.InputQueue.Callback)
+takeInputQueue} and {@link
+android.view.Window#takeSurface(android.view.SurfaceHolder.Callback2)
+takeSurface()} methods in {@link android.view.Window} let native code manage
+events and surfaces.</li>
+</ul>
+
+<p>For full information on working with native code or to download the NDK,
+see the <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a> page.</p>
+
+
+<h3 id="dalvik">Dalvik Runtime</h3>
+
+<ul>
+<li>{@link dalvik.system dalvik.system}
+removes several classes that were previously deprecated.</li>
+<li>Dalvik core libraries:
+<ul>
+  <li>New collections: {@link java.util.ArrayDeque}, {@link java.util.NavigableMap},
+  {@link java.util.concurrent.ConcurrentSkipListMap},
+  {@link java.util.concurrent.LinkedBlockingDeque}</li>
+  <li>New {@link java.util.Arrays} utilities: <code>binarySearch()</code>,
+  <code>copyOf()</code>, <code>copyOfRange()</code>, and others.</li>
+  <li>{@link java.net.CookieManager} for {@link java.net.HttpURLConnection}.</li>
+  <li>More complete network APIs: {@link java.net.InterfaceAddress},
+  {@link java.net.NetworkInterface} and {@link java.net.IDN}</li>
+  <li>{@link java.io.File} read and write controls</li>
+  <li>{@link java.lang.String#isEmpty() String.isEmpty()}</li>
+  <li>{@link java.text.Normalizer} and {@link java.text.Normalizer.Form}</li>
+  <li>Improved {@link javax.net.ssl} server sockets.</li>
+</ul>
+</li>
+</ul>
+
+<h3 id="manifest">New manifest elements and attributes</h3>
+
+<ul>
+<li>New <code>xlargeScreens</code> attribute for <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a>
+element, to indicate whether the application supports
+extra large screen form-factors. For details, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</li>
+<li>New values for <code>android:screenOrientation</code> attribute of
+<code>&lt;activity&gt;</code> element:
+<ul>
+<li><code>"reverseLandscape"</code> &mdash; The Activity would like to have the
+screen in landscape orientation, turned in the opposite direction from normal
+landscape.</li>
+<li><code>"reversePortrait"</code> &mdash; The Activity would like to have the
+screen in portrait orientation, turned in the opposite direction from normal
+portrait.</li>
+<li><code>"sensorLandscape"</code> &mdash; The Activity would like to have the
+screen in landscape orientation, but can use the sensor to change which
+direction the screen is facing.</li>
+<li><code>"sensorPortrait"</code> &mdash; The Activity would like to have the
+screen in portrait orientation, but can use the sensor to change which direction
+the screen is facing.</li>
+<li><code>"fullSensor"</code> &mdash; Orientation is determined by a physical
+orientation sensor: the display will rotate based on how the user moves the
+device. This allows any of the 4 possible rotations, regardless of what the
+device will normally do (for example some devices won't normally use 180 degree
+rotation).</li>
+</ul>
+</li>
+</ul>
+
+<h3 id="permissions">New Permissions</h3>
+
+<ul>
+<li><code>com.android.permission.SET_ALARM</code> &mdash; Allows an application
+to broadcast an Intent to set an alarm for the user. An Activity that handles
+the {@link android.provider.AlarmClock#ACTION_SET_ALARM SET_ALARM} Intent action
+should require this permission.</li>
+<li><code>android.permission.USE_SIP</code> &mdash; Allows an application to use
+the {@link android.net.sip SIP API} to make or receive internet calls.
+<li><code>android.permission.NFC</code> &mdash; Allows an application to use the
+{@link android.nfc NFC API} to read NFC tags.</li>
+</ul>
+
+<h3 id="feature_constants">New Feature Constants</h3>
+
+<p>The platform adds several new hardware features that developers can declare
+in their application manifests as being required by their applications. This
+lets developers control how their application is filtered, when published on
+Google Play. </p>
+
+<ul>
+<li>{@link android.content.pm.PackageManager#FEATURE_AUDIO_LOW_LATENCY
+android.hardware.audio.low_latency} &mdash; The application uses a low-latency
+audio pipeline on the device and is sensitive to delays or lag in sound input or
+output.</li>
+<li>{@link android.content.pm.PackageManager#FEATURE_CAMERA_FRONT
+android.hardware.camera.front} &mdash; The application uses a front-facing
+camera on the device.</li>
+<li>{@link android.content.pm.PackageManager#FEATURE_NFC android.hardware.nfc}
+&mdash; The application uses NFC radio features in the device.</li>
+<li>{@link android.content.pm.PackageManager#FEATURE_SENSOR_BAROMETER
+android.hardware.sensor.barometer} &mdash; The application uses the device's
+barometer.</li>
+<li>{@link android.content.pm.PackageManager#FEATURE_SENSOR_GYROSCOPE
+android.hardware.sensor.gyroscope} &mdash; The application uses the device's
+gyroscope sensor.</li>
+<li>{@link android.content.pm.PackageManager#FEATURE_SIP android.software.sip}
+&mdash; The application uses the SIP API on the device.</li>
+<li>{@link android.content.pm.PackageManager#FEATURE_SIP_VOIP
+android.software.sip.voip} &mdash; The application uses a SIP-based VoIP
+service on the device.</li>
+<li>{@link
+android.content.pm.PackageManager#FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND
+android.hardware.touchscreen.multitouch.jazzhand} &mdash; The application uses
+advanced multipoint multitouch capabilities on the device screen, for tracking
+five or more points fully independently.</li>
+</ul>
+
+<p>For full information about how to declare features and use them for
+filtering, see the documentation for <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p>
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
+Level {@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>.</p>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
+you need compile the application against the Android library that is provided in
+the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
+manifest. If your application is designed to run only on Android 2.3 and higher,
+declaring the attribute prevents the application from being installed on earlier
+versions of the platform.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
\ No newline at end of file
diff --git a/docs/html/about/versions/android-3.0-highlights.jd b/docs/html/about/versions/android-3.0-highlights.jd
new file mode 100644
index 0000000..21dbda6
--- /dev/null
+++ b/docs/html/about/versions/android-3.0-highlights.jd
@@ -0,0 +1,261 @@
+page.title=Honeycomb
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content {
+  max-width:1200px;
+}
+#jd-content div.screenshot {
+  float:left;
+  clear:left;
+  padding:15px 30px 15px 0;
+}
+#jd-content div.video {
+  float:right;
+  padding:0 60px 40px;
+}
+#jd-content table.columns {
+  margin:0 0 1em 0;
+}
+#jd-content table.columns td {
+  padding:0;
+}
+#jd-content table.columns td+td {
+  padding:0 2em;
+}
+#jd-content table.columns td img {
+  margin:0;
+}
+#jd-content table.columns td+td>*:first-child {
+  margin-top:-2em;
+}
+.green {
+  color:#8db529;
+  font-weight:bold;
+}
+</style>
+
+
+<p>Welcome to Android 3.0!</p>
+
+<p>The Android 3.0 platform introduces many new and exciting features for users and developers. 
+This document provides a glimpse of some of the new features and technologies, as delivered in
+Android 3.0. For a more detailed look at new developer APIs, see the <a
+href="{@docRoot}about/versions/android-3.0.html">Android 3.0 Platform</a> document.</p>
+
+<ul>
+  <li><a href="#UserFeatures">New User Features</a></li>
+  <li><a href="#DeveloperApis">New Developer Features</a></li>
+</ul>
+
+<h2 id="UserFeatures" style="clear:right">New User Features</h2>
+
+<div  style="padding-top:0em;">
+<div style="float:right;margin-left:20px;"><a
+href="{@docRoot}sdk/images/3.0/home_hero1_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/home_hero1.png" alt="" height="280" /></a></div>
+
+<h3>New UI designed from the ground up for tablets</h3>
+
+<p>Android 3.0 is a new version of the Android platform that is specifically optimized for devices with larger screen sizes, particularly tablets. It introduces a brand new, truly virtual and “holographic” UI design, as well as an elegant, content-focused interaction model.</p>
+
+<p>Android 3.0 builds on the things people love most about Android &mdash; refined multitasking, rich notifications, Home screen customization, widgets, and more &mdash; and transforms them with a vibrant, 3D experience and deeper interactivity, making them familiar but even better than before.</p> 
+
+<p>The new UI brings fresh paradigms for interaction, navigation, and customization and makes them available to all applications &mdash; even those built for earlier versions of the platform. Applications written for Android 3.0 are able to use an extended set of UI objects, powerful graphics, and media capabilities to engage users in new ways.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>System Bar, for global status and notifications</strong></p>
+
+<p>Across the system and in all applications, users have quick access to notifications, system status, and soft navigation buttons in a System Bar, available at the bottom of the screen. The System Bar is always present and is a key touchpoint for users, but in a new "lights out mode" can also be dimmed for full-screen viewing, such as for videos.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Action Bar, for application control</strong></p>
+
+<p>In every application, users have access to contextual options, navigation, widgets, or other types of content in an Action Bar, displayed at the top of the screen. The Action Bar is always present when an application is in use, although its content, theme, and other properties are managed by the application rather than the system. The Action Bar is another key touchpoint for users, especially with action items and an overflow dropdown menu, which users frequently access in a similar manner in most applications. </p>
+
+</div>
+
+<div  style="padding-top:0em;">
+<div style="float:right;margin-left:20px;"><a
+href="{@docRoot}sdk/images/3.0/homescreen_cust_port_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/homescreen_cust_port.png" alt="" height="280" /></a></div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Customizable Home screens</strong></p>
+
+<p>Five customizable Home screens give users instant access to all parts of the system from any context. Each screen offers a large grid that maintains spatial arrangement in all orientations. Users can select and manipulate Home screen widgets, app shortcuts, and wallpapers using a dedicated visual layout mode. Visual cues and drop shadows improve visibility when adjusting the layout of shortcuts and widgets. Each Home screen also offers a familiar launcher for access to all installed applications, as well as a Search box for universal search of apps, contacts, media files, web content, and more.</p>
+
+</div>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1.5em;float:left;"><a href="{@docRoot}sdk/images/3.0/tasks_full.png"
+target="_android"><img src="{@docRoot}sdk/images/3.0/tasks.png" alt="" height="280" /></a>
+
+<!--<p style="font-size:90%">Figure</p> --></div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Recent Apps, for easy visual multitasking</strong></p>
+
+<p>Multitasking is a key strength of Android and it is central to the Android 3.0 experience. As users launch applications to handle various tasks, they can use the Recent Apps list in the System Bar to see the tasks underway and quickly jump from one application context to another. To help users rapidly identify the task associated with each app, the list shows a snapshot of its actual state when the user last viewed it.</p>
+
+</div>
+
+
+<h3>Redesigned keyboard</h3>
+
+<p>The Android soft keyboard is redesigned to make entering text fast and accurate on larger screen sizes. The keys are reshaped and repositioned for improved targeting, and new keys have been added, such as a Tab key, to provide richer and more efficient text input. Users can touch-hold keys to access menus of special characters and switch text/voice input modes from a button in the System Bar.</p>
+
+<div  style="padding-top:1em;">
+<div style="margin-left:20px;float:right;"><a href="{@docRoot}sdk/images/3.0/copy_full.png"
+target="_android"><img src="{@docRoot}sdk/images/3.0/copy.png" alt="" height="180" /></a></div>
+
+
+<h3>Improved text selection, copy and paste</h3>
+
+<p>When entering or viewing text, a new UI lets users quickly select a word by press-hold and then adjust the selection area as needed by dragging a set of bounding arrows to new positions. Users can then select an action from the Action Bar, such as copy to the clipboard, share, paste, web search, or find. </p>
+
+
+<h3>New connectivity options</h3>
+
+<p>Android 3.0 includes new connectivity features that add versatility and convenience for users. Built-in support for Media/Picture Transfer Protocol lets users instantly sync media files with a USB-connected camera or desktop computer, without needing to mount a USB mass-storage device. Users can also connect full keyboards over either USB or Bluetooth, for a familiar text-input environment. For improved wi-fi connectivity, a new combo scan reduces scan times across bands and filters. New support for Bluetooth tethering means that more types of devices can share the network connection of an Android-powered device.</p>
+
+
+<h3>Updated set of standard apps</h3>
+
+<div  style="padding-top:0em;">
+<div style="margin-left:20px;float:right;;padding-top:0em;"><a
+href="{@docRoot}sdk/images/3.0/browser_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/browser.png" alt="" height="200" /></a><br>
+<a href="{@docRoot}sdk/images/3.0/camera_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/camera.png" alt="" height="200" /></a></div>
+
+<p>The Android 3.0 platform includes an updated set of standard applications that are designed for use on larger screen devices. The sections below highlight some of the new features. </p>
+
+<strong>Browser</strong></p>
+
+<p>The browser includes new features that let users navigate and organize more efficiently. Multiple tabs replace browser windows and a new “incognito” mode allows anonymous browsing. Bookmarks and history are presented and managed in a single unified view. Users can now choose to automatically sign into Google sites on the browser with a supplied account and sync bookmarks with Google Chrome. New multitouch support is now available to JavaScript and plugins. Users can enjoy a better browsing experience at non-mobile sites through an improved zoom and viewport model, overflow scrolling, support for fixed positioning, and more.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Camera and Gallery</strong></p>
+
+<p>The Camera application has been redesigned to take advantage of a larger screen for quick access to exposure, focus, flash, zoom, front-facing camera, and more. To let users capture scenes in new ways, it adds built-in support for time-lapse video recording. The Gallery application lets users view albums and other collections in full-screen mode, with easy access to thumbnails for other photos in the collection. </p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Contacts</strong></p>
+
+<p>The Contacts app uses a new two-pane UI and Fast Scroll to let users easily organize and locate contacts. The application offers improved formatting of international phone numbers as user types, based on home country and an international  number parsing library. Contact information is presented in a card-like UI, making it easier for users to read and edit contacts.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Email</strong></p>
+
+<p>The Email application uses a new two-pane UI to make viewing and organizing messages more efficient. The app lets users select one or more messages, then select an action from the Action Bar, such as moving them to a folder. Users can sync attachments for later viewing and keep track of email using a home screen Widget.</p>
+
+</div>
+
+
+<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
+
+<p>The Android 3.0 platform is designed specially to meet the unique needs of applications on devices with larger screen sizes. It offers all of the tools developers need to create incredible visual and interaction experiences on these devices.</p>
+
+ <ul>
+<li><a href="#ui">New UI framework for creating great tablet apps</a></li>
+<li><a href="#graphics">High-performance 2D and 3D graphics</a></li>
+<li><a href="#multicore">Support for multicore processor architectures</a></li>
+<li><a href="#multimedia">Rich multimedia and connectivity</a></li>
+<li><a href="#enterprise">Enhancements for enterprise</a></li>
+<li><a href="#compatibility">Compatibility with existing apps</a></li>
+</ul>
+
+<h3 id="ui">New UI Framework for creating great tablet apps</h3>
+
+<div  style="padding-top:0em;">
+<div style="float:right;margin-left:20px;"><a
+href="{@docRoot}sdk/images/3.0/contacts_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/contacts.png" alt="" height="200" /></a></div>
+
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Activity fragments, for greater control of content and design flexibility</strong></p>
+
+<p>Starting with Android 3.0, developers can break the Activities of their applications into subcomponents called Fragments, then combine them in a variety of ways to create a richer, more interactive experience. For example, an application can use a set of Fragments to create a true multipane UI, with the user being able to interact with each pane independently. Fragments can be added, removed, replaced, and animated inside an Activity dynamically, and they are modular and reusable across multiple Activities. Because they are modular, Fragments also offer an efficient way for developers to write applications that can run properly on both larger screen as well as smaller screen devices.</p>
+
+</div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Redesigned UI widgets</strong></p>
+
+<p>Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types of content to their applications. The new UI widgets are redesigned for use on larger screens such as tablets and incorporate the new holographic UI theme. Several new widget types are available, including a 3D stack, search box, a date/time picker, number picker, calendar, popup menu, and others. Most of the redesigned UI widgets can now be used as remote views in application widgets displayed on the home screen. Applications written for earlier versions can inherit the new Widget designs and themes.</p>
+
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1.5em;float:left;margin-left:0em;"><a
+href="{@docRoot}sdk/images/3.0/widgets.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/widgets.png" alt="" height="200"  target="_android" /></a></div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Expanded Home screen widgets</strong></p>
+
+<p>Home screen widgets are popular with users because they offer fast access to application-specific data directly from the home screen. Android 3.0 lets developers take home screen widgets to the next level, offering more types of content and new modes of interaction with users. Developers can now use more standard UI widget types  home screen widgets, including widgets that let users flip through collections of content as 3D stacks, grids, or lists. Users can interact with the home screen widgets in new ways, such as by using touch gestures to scroll and flip the content displayed in a widget.  </p>
+
+</div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Persistent Action Bar</strong></p>
+
+<p>The platform provides each application with its own instance of the Action Bar at the top of the screen, which the application can use to give the user quick access to contextual options, widgets, status, navigation, and more. The application can also customize the display theme of its Action Bar instance. The Action Bar lets developers expose more features of their applications to users in a familiar location, while also unifying the experience of using an application that spans multiple Activities or states.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Richer notifications</strong></p>
+
+<p>Notifications are a key part of the Android user experience because they let applications show key updates and status information to users in real time. Android 3.0 extends this capability, letting developers include richer content and control more properties. A new builder class lets developers quickly create notifications that include large and small icons, a title, a priority flag, and any properties already available in previous versions. Notifications can offer more types of content by building on the expanded set of UI Widgets that are now available as remote Views.</p>
+
+<div  style="padding-top:0em;">
+<div style="float:right;margin-left:20px;"><a
+href="{@docRoot}sdk/images/3.0/mail_drag_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.0/mail_drag.png" alt="" height="200"
+style="padding-top:1em;"/></a></div>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Multiselect, clipboard, and drag-and-drop</strong></p>
+
+<p>The platform offers convenient new interaction modes that developers can use. For managing collections of items in lists or grids, developers can offer a new multiselect mode that lets users choose multiple items for an action. Developers can also use a new system-wide Clipboard to let users easily copy any type of data into and out of their applications. To make it easier for users to manage and organize files, developers can now add drag-and-drop interaction through a DragEvent framework.</p>
+
+</div>
+
+
+<h3 id="graphics">High-performance 2D and 3D graphics</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>New animation framework</strong></p>
+
+<p>The platform includes a flexible new animation framework that lets developers easily animate the properties of UI elements such as Views, Widgets, Fragments, Drawables, or any arbitrary object. Animations can create fades or movement between states, loop an animated image or an existing animation, change colors, and much more. Adding animation to UI elements can add visual interest to an application and refine the user experience, to keep users engaged.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Hardware-accelerated 2D graphics</strong></p>
+
+<p>Android 3.0 offers a new hardware-accelerated OpenGL renderer that gives a performance boost to many common graphics operations for applications running in the Android framework. When the renderer is enabled, most operations in Canvas, Paint, Xfermode, ColorFilter, Shader, and Camera are accelerated. Developers can control how hardware-acceleration is applied at every level, from enabling it globally in an application to enabling it in specific Activities and Views inside the application.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Renderscript 3D graphics engine</strong></p>
+
+<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well as a special, platform-independent shader language for maximum performance. Using Renderscript, you can accelerate graphics operations and data processing. Renderscript is an ideal way to create high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
+
+
+<h3 id="multicore">Support for multicore processor architectures</h3>
+
+<p>Android 3.0 is the first version of the platform designed to run on either single or multicore processor architectures. A variety of changes in the Dalvik VM, Bionic library, and elsewhere add support for symmetric multiprocessing in multicore environments. These optimizations can benefit all applications, even those that are single-threaded. For example, with two active cores, a single-threaded application might still see a performance boost if the Dalvik garbage collector runs on the second core. The system will arrange for this automatically.</p>
+
+
+<h3 id="multimedia">Rich multimedia and connectivity</h3>
+
+<p style="margin-top:.75em;margin-bottom:.75em;"><strong>HTTP Live streaming</strong></p>
+
+<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live streaming session. The media framework supports most of the HTTP Live streaming specification, including adaptive bit rate.</p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Pluggable DRM framework</strong></p>
+
+<p>Android 3.0 includes an extensible DRM framework that lets applications manage protected content according to a variety of DRM mechanisms that may be available on the device. For application developers, the framework API offers an consistent, unified API that simplifies the management of protected content, regardless of the underlying DRM engines. </p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Digital media file transfer</strong></p>
+
+<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB, which lets users easily transfer any type of media files between devices and to a host computer. Developers can build on this support, creating applications that let users create or manage media files that they may want to transfer or share across devices. </p>
+
+<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>More types of connectivity</strong></p>
+
+<p>The platform offers new connectivity that developers can build on. API support for Bluetooth A2DP and HSP profiles lets applications query Bluetooth profiles for connected devices, audio state, and more, then notify the user. For example, a music application can check connectivity and status and let the user know that music is playing through a stereo headset. Applications can also register to receive system broadcasts of pre-defined vendor-specific AT commands, such as Platronics Xevent. For example, an application could receive broadcasts that indicate a connected device's battery level and could notify the user or take other action as needed. Applications can also take advantage of the platform's new support for full keyboards connected by USB or Bluetooth. </p>
+
+
+<h3 id="enterprise">Enhancements for enterprise</h3>
+
+<p>In Android 3.0, developers of device administration applications can support new types of policies, including policies for encrypted storage, password expiration, password history, and password complex characters required. </p>
+
+<h3 id="compatibility">Compatibility with existing apps</h3>
+
+<p>Android 3.0 brings a new UI designed for tablets and other larger screen devices, but it also is fully compatible with applications developed for earlier versions of the platform, or for smaller screen sizes. Existing applications can seamlessly participate in the new holographic UI theme without code changes, by adding a single attribute in their manifest files. The platform emulates the Menu key, which is replaced by the overflow menu in the Action Bar in the new UI. Developers wanting to take fuller advantage of larger screen sizes can also create dedicated layouts and assets for larger screens and add them to their existing applications.</p>
+
diff --git a/docs/html/about/versions/android-3.0.jd b/docs/html/about/versions/android-3.0.jd
new file mode 100644
index 0000000..76e0795
--- /dev/null
+++ b/docs/html/about/versions/android-3.0.jd
@@ -0,0 +1,976 @@
+page.title=Android 3.0 Platform
+sdk.platform.version=3.0
+sdk.platform.apiLevel=11
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/11/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+
+<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a downloadable
+component for the Android SDK. The downloadable platform includes an Android library and system
+image, as well as a set of emulator skins and more. The downloadable platform includes no external
+libraries.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+
+
+
+
+<h2 id="#api">API Overview</h2>
+
+<p>The sections below provide a technical overview of what's new for developers in Android 3.0,
+including new features and changes in the framework API since the previous version.</p>
+
+
+
+
+
+<h3>Fragments</h3>
+
+<p>A fragment is a new framework component that allows you to separate distinct elements of an
+activity into self-contained modules that define their own UI and lifecycle. To create a
+fragment, you must extend the {@link android.app.Fragment} class and implement several lifecycle
+callback methods, similar to an {@link android.app.Activity}. You can then combine multiple
+fragments in a single activity to build a multi-pane UI in which each
+pane manages its own lifecycle and user inputs.</p>
+
+<p>You can also use a fragment without providing a UI and instead use the fragment as a worker
+for the activity, such as to manage the progress of a download that occurs only while the
+activity is running.</p>
+
+<p>Additionally:</p>
+
+<ul>
+  <li>Fragments are self-contained and you can reuse them in multiple activities</li>
+  <li>You can add, remove, replace and animate fragments inside the activity</li>
+  <li>You can add fragments to a back stack managed by the activity, preserving the state of
+fragments as they are changed and allowing the user to navigate backward through the different
+states</li>
+  <li>By <a
+href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">providing
+alternative layouts</a>, you can mix and match fragments, based
+on the screen size and orientation</li>
+  <li>Fragments have direct access to their container activity and can contribute items to the
+activity's Action Bar (discussed next)</li>
+</ul>
+
+<p>To manage the fragments in your activity, you must use the {@link
+android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
+as finding fragments in the activity and popping fragments off the back stack to restore their
+previous state.</p>
+
+<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
+android.app.FragmentTransaction}. You can then call methods such as {@link
+android.app.FragmentTransaction#add add()} {@link android.app.FragmentTransaction#remove
+remove()}, or {@link android.app.FragmentTransaction#replace replace()}. Once you've applied all
+the changes you want to perform for the transaction, you must call {@link
+android.app.FragmentTransaction#commit commit()} and the system applies the fragment transaction to
+the activity.</p>
+
+<p>For more information about using fragments, read the <a
+href="{@docRoot}guide/components/fragments.html">Fragments</a> documentation. Several
+samples are also available in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
+API Demos</a> application.</p>
+
+
+
+
+<h3>Action Bar</h3>
+
+<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
+It includes the application logo in the left corner and provides a new interface for items in the
+<a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>. Additionally, the
+Action Bar allows you to:</p>
+
+<ul>
+  <li>Add menu items directly in the Action Bar&mdash;as "action items."
+    <p>In your XML declaration for the menu item, include the {@code
+android:showAsAction} attribute with a value of {@code "ifRoom"}. When there's enough room, the menu
+item appears directly in the Action Bar. Otherwise, the item is placed in the
+overflow menu, revealed by the menu icon on the right side of the Action Bar.</p></li>
+
+  <li>Replace an action item with a widget (such as a search box)&mdash;creating an
+"action view."
+    <p>In the XML declaration for the menu item, add the {@code android:actionViewLayout} attribute
+with a layout resource or the {@code android:actionViewClass} attribute with the class name of a
+widget. (You must also declare the {@code android:showAsAction} attribute so that the item appears
+in the Action Bar.) If there's not enough room in the Action Bar and the item appears in the
+overflow menu, it behaves like a regular menu item and does not show the widget.</p></li>
+
+  <li>Add an action to the application logo and replace it with a custom logo
+    <p>The application logo is automatically assigned the {@code android.R.id.home} ID,
+which the system delivers to your activity's {@link android.app.Activity#onOptionsItemSelected
+onOptionsItemSelected()} callback when touched. Simply respond to this ID in your callback
+method to perform an action such as go to your application's "home" activity.</p>
+    <p>To replace the icon with a logo, specify your application logo in the manifest file with the
+<a href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code android:logo}</a>
+attribute, then call {@link android.app.ActionBar#setDisplayUseLogoEnabled
+setDisplayUseLogoEnabled(true)} in your activity.</p></li>
+
+  <li>Add breadcrumbs to navigate backward through the back stack of fragments</li>
+  <li>Add tabs or a drop-down list to navigate through fragments</li>
+  <li>Customize the Action Bar with themes and backgrounds</li>
+</ul>
+
+<p>The Action Bar is standard for all applications that use the new holographic theme, which is
+also standard when you set either the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> to {@code "11"}.</p>
+
+<p>For more information about the Action Bar, read the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> documentation. Several
+samples are also available in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#ActionBar">
+API Demos</a> application.</p>
+
+
+
+
+<h3>System clipboard</h3>
+
+<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
+clipboard. Clipped data can be plain text, a URI, or an intent.</p>
+
+<p>By providing the system access to the data you want the user to copy, through a content provider,
+the user can copy complex content (such as an image or data structure) from your application and
+paste it into another application that supports that type of content.</p>
+
+<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
+by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
+
+<p>To copy an item to the clipboard, you need to create a new {@link
+android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
+objects, each describing a single entity. To create a {@link android.content.ClipData} object
+containing just one {@link android.content.ClipData.Item}, you can use one of the helper methods,
+such as {@link android.content.ClipData#newPlainText newPlainText()}, {@link
+android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
+newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
+{@link android.content.ClipData.Item} you provide.</p>
+
+<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
+android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
+android.content.ClipboardManager}.</p>
+
+<p>You can then read a file from the clipboard (in order to paste it) by calling {@link
+android.content.ClipboardManager#getPrimaryClip()} on the {@link
+android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
+be complicated and you need to be sure you can actually handle the data type in the clipboard
+before attempting to paste it.</p>
+
+<p>The clipboard holds only one piece of clipped data (a {@link android.content.ClipData}
+object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
+android.content.ClipData.Item}s.</p>
+
+<p>For more information, read the <a href="{@docRoot}guide/topics/text/copy-paste.html">Copy
+and Paste</a> documentation. You can also see a simple implementation of copy and paste in the API Demos
+sample and a more complete implementation in the Note Pad sample.</p>
+
+
+
+
+<h3>Drag and drop</h3>
+
+<p>New APIs simplify drag and drop operations in your application's user interface. A drag
+operation is the transfer of some kind of data&mdash;carried in a {@link android.content.ClipData}
+object&mdash;from one place to another. The start and end point for the drag operation is a {@link
+android.view.View}, so the APIs that directly handle the drag and drop operations are
+in the {@link android.view.View} class.</p>
+
+<p>A drag and drop operation has a lifecycle that's defined by several drag actions&mdash;each
+defined by a {@link android.view.DragEvent} object&mdash;such as {@link
+android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
+{@link android.view.DragEvent#ACTION_DROP}. Each view that wants to participate in a drag
+operation can listen for these actions.</p>
+
+<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
+on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
+the data to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
+that users see under their fingers while dragging, and an {@link java.lang.Object} that can share
+information about the drag object with views that may receive the object.</p>
+
+<p>To accept a drag object in a {@link android.view.View} (receive the "drop"), register the view
+with an {@link android.view.View.OnDragListener OnDragListener} by calling {@link
+android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on the view, the
+system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the  {@link
+android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
+describing the type of drag action has occurred (such as {@link
+android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
+{@link android.view.DragEvent#ACTION_DROP}). During a drag, the system repeatedly calls {@link
+android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to deliver a
+stream of drag events. The receiving view can inquire the event type delivered to {@link
+android.view.View#onDragEvent onDragEvent()} by calling {@link android.view.DragEvent#getAction
+getAction()} on the {@link android.view.DragEvent}.</p>
+
+<p class="note"><strong>Note:</strong> Although a drag event may carry a {@link
+android.content.ClipData} object, this is not related to the system clipboard. A drag and drop
+operation should never put the dragged data in the system clipboard.</p>
+
+<p>For more information, read the <a href="{@docRoot}guide/topics/ui/drag-drop.html">Dragging and
+Dropping</a> documentation. You can also see an implementation of drag and drop in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
+API Demos</a> application and the <a
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>
+application.</p>
+
+
+
+<h3>App widgets</h3>
+
+<p>Android 3.0 supports several new widget classes for more interactive app widgets on the users
+Home screen, including: {@link android.widget.GridView}, {@link android.widget.ListView}, {@link
+android.widget.StackView}, {@link android.widget.ViewFlipper}, and {@link
+android.widget.AdapterViewFlipper}.</p>
+
+<p>More importantly, you can use the new {@link android.widget.RemoteViewsService} to create app
+widgets with collections, using widgets such as {@link android.widget.GridView}, {@link
+android.widget.ListView}, and {@link android.widget.StackView} that are backed by remote data,
+such as from a content provider.</p>
+
+<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined in XML with an {@code
+&lt;appwidget-provider&gt;} element) also supports two new fields: {@link
+android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
+android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
+android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
+app widget subview that should be auto-advanced by the app widget’s host. The
+{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
+app widget looks like and is shown to the user from the widget picker. If this field is not
+supplied, the app widget's icon is used for the preview.</p>
+
+<p>To help create a preview image for your app widget (to specify in the {@link
+android.appwidget.AppWidgetProviderInfo#previewImage} field), the Android emulator includes an
+application called "Widget Preview." To create a preview image, launch this application, select the
+app widget for your application and set it up how you'd like your preview image to appear, then save
+it and place it in your application's drawable resources.</p>
+
+<p>You can see an implementation of the new app widget features in the <a
+href="{@docRoot}resources/samples/StackWidget/index.html">StackView App Widget</a> and <a
+href="{@docRoot}resources/samples/WeatherListWidget/index.html">Weather List Widget</a>
+applications.</p>
+
+
+
+<h3>Status bar notifications</h3>
+
+<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
+bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
+create {@link android.app.Notification} objects.</p>
+<p>New features include:</p>
+<ul>
+  <li>Support for a large icon in the notification, using {@link
+android.app.Notification.Builder#setLargeIcon setLargeIcon()}. This is usually for
+social applications to show the contact photo of the person who is the source of the
+notification or for media apps to show an album thumbnail.</li>
+  <li>Support for custom layouts in the status bar ticker, using {@link
+android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
+  <li>Support for custom notification layouts to include buttons with {@link
+android.app.PendingIntent}s, for more interactive notification widgets. For example, a
+notification can control music playback without starting an activity.</li>
+</ul>
+
+
+
+<h3>Content loaders</h3>
+
+<p>New framework APIs facilitate asynchronous loading of data using the {@link
+android.content.Loader} class. You can use it in combination with UI components such as views and
+fragments to dynamically load data from worker threads. The {@link
+android.content.CursorLoader} subclass is specially designed to help you do so for data backed by
+a {@link android.content.ContentProvider}.</p>
+
+<p>All you need to do is implement the {@link android.app.LoaderManager.LoaderCallbacks
+LoaderCallbacks} interface to receive callbacks when a new loader is requested or the data has
+changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to initialize the
+loader for your activity or fragment.</p>
+
+<p>For more information, read the <a
+href="{@docRoot}guide/components/loaders.html">Loaders</a> documentation. You can also see
+example code using loaders in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">LoaderCursor</a>
+and <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
+LoaderThrottle</a> samples.</p>
+
+
+
+<h3>Bluetooth A2DP and headset APIs</h3>
+
+<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
+headset profile devices. For example, applications can identify when a Bluetooth headset is
+connected for listening to music and notify the user as appropriate. Applications can also receive
+broadcasts for vendor specific AT commands and notify the user about the state of the connected
+device, such as when the connected device's battery is low.</p>
+
+<p>You can initialize the respective {@link android.bluetooth.BluetoothProfile} by calling {@link
+android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
+android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
+profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
+callbacks when the Bluetooth client is connected or disconnected.</p>
+
+
+
+
+<h3 id="animation">Animation framework</h3>
+
+<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
+(View, Drawable, Fragment, Object, or anything else). It allows you to define several aspects of an
+animation, such as:</p>
+<ul>
+  <li>Duration</li>
+  <li>Repeat amount and behavior</li>
+  <li>Type of time interpolation</li>
+  <li>Animator sets to play animations together, sequentially, or after specified delays</li>
+  <li>Frame refresh delay</li>
+</ul>
+
+ <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
+color values, by default. That is, when an object has a property field for one of these types, you
+can change its value over time to affect an animation. To animate any other type of value, you tell
+the system how to calculate the values for that given type, by implementing the {@link
+android.animation.TypeEvaluator} interface.</p>
+
+<p>There are two animators you can use to animate the values of a property: {@link
+android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
+android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
+object or property that is animated as a result. It simply performs the calculations, and you must
+listen for the updates and process the data with your own logic. The {@link
+android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
+allows you to set the object and property to animate, and it handles all animation work.
+That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
+property of the object to change over time, and a set of values to apply to the property over
+time, then start the animation.</p>
+
+<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
+animations for changes you make to your activity layout. To enable transitions for part of the
+layout, create a {@link android.animation.LayoutTransition} object and set it on
+any {@link android.view.ViewGroup} by calling {@link
+android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
+animations to run whenever items are added to or removed from the group. To specify custom
+animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
+android.animation.LayoutTransition} and provide a custom {@link android.animation.Animator},
+such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
+discussed above.</p>
+
+<p>For more information, see the <a
+href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a> documentation. You can
+also see several samples using the animation APIs in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
+Demos</a> application.</p>
+
+
+
+
+<h3>Extended UI framework</h3>
+
+<ul>
+  
+  <li><b>Multiple-choice selection for ListView and GridView</b>
+
+<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
+android.widget.AbsListView#setChoiceMode setChoiceMode()} allows users to select multiple items
+from a {@link android.widget.ListView} or {@link android.widget.GridView}. When used in
+conjunction with the Action Bar, users can select multiple items and then select the action to
+perform from a list of options in the Action Bar (which has transformed into a Multi-choice
+Action Mode).</p>
+
+<p>To enable multiple-choice selection, call {@link
+android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
+{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
+android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
+
+<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
+Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
+MultiChoiceModeListener} when items are selected by calling {@link
+android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
+onItemCheckedStateChanged()}.</p>
+
+<p>For an example of multiple-choice selection, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
+java</a>
+class in the API Demos sample application.</p>
+  </li>
+
+  
+  <li><b>New APIs to transform views</b>
+  
+    <p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity
+layout. New transformations are made possible with a set of object properties that define the view's
+layout position, orientation, transparency and more.</p>
+    <p>New methods to set the view properties include: {@link android.view.View#setAlpha
+setAlpha()}, {@link
+android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
+android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
+android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
+android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
+setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
+setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
+
+    <p>Some methods also have a corresponding XML attribute that you can specify in your layout
+file, to apply a default transformation. Available attributes include: {@code translationX}, {@code
+translationY}, {@code rotation},
+{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
+{@code transformPivotY}, and {@code alpha}.</p>
+
+    <p>Using some of these new view properties in combination with the new <a
+href="#animation">animation framework</a> (discussed
+above), you can easily apply some fancy animations to your views. For example, to rotate a
+view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
+android.view.View}, the "rotationY" property, and the start and end values:</p>
+<pre>
+ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
+animator.setDuration(2000);
+animator.start();
+</pre>
+  </li>
+
+  
+  <li><b>New holographic themes</b>
+
+    <p>The standard system widgets and overall look have been redesigned and incorporate a new
+"holographic" user interface theme. The system applies the new theme
+using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.</p>
+
+<p>Any application that targets the Android 3.0 platform&mdash;by setting either the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
+or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> value to {@code "11"}&mdash;inherits the holographic theme by default.
+However, if your application also applies its own theme, then your theme will override the
+holographic theme, unless you update your styles to inherit the holographic theme.</p>
+
+<p>To apply the holographic theme to individual activities or to inherit them in your own theme
+definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
+themes. If your application is compatible with version of Android lower than 3.0 and applies
+custom themes, then you should <a
+href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
+version</a>.</p>
+
+  </li>
+  
+  
+  <li><b>New widgets</b>
+
+    <ul>
+    <li>{@link android.widget.AdapterViewAnimator}
+    <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
+    between its views.</p></li>
+    
+    <li>{@link android.widget.AdapterViewFlipper}
+    <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
+    been added to it. Only one child is shown at a time. If requested, it can automatically flip
+  between
+    each child at a regular interval.</p></li>
+    
+    <li>{@link android.widget.CalendarView}
+    <p>Allows users to select dates from a calendar by touching the date and can scroll or fling the
+calendar to a desired date. You can configure the range of dates available in the widget.</p></li>
+    
+    <li>{@link android.widget.ListPopupWindow}
+    <p>Anchors itself to a host view and displays a list of choices, such as for a list of
+    suggestions when typing into an {@link android.widget.EditText} view.</p></li>
+    
+    <li>{@link android.widget.NumberPicker}
+    <p>Enables the user to select a number from a predefined range. The widget presents an input
+field and up and down buttons for selecting a number. Touching the input field allows the user to
+scroll through values or touch again to directly edit the current value. It also allows you to map
+positions to strings, so that the corresponding string is displayed instead of the index
+position.</p></li>
+    
+    <li>{@link android.widget.PopupMenu}
+    <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
+popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft
+keyboard) is visible, the popup does not overlap the IME it until the user touches the
+menu.</p></li>
+    
+    <li>{@link android.widget.SearchView}
+    <p>Provides a search box that you can configure to deliver search queries to a specified
+activity and display search suggestions (in the same manner as the traditional search dialog). This
+widget is particularly useful for offering a search widget in the Action Bar. For more information,
+see <a href="{@docRoot}guide/topics/search/search-dialog.html">Creating a Search Interface.</p></li>
+    
+    <li>{@link android.widget.StackView}
+    <p>A view that displays its children in a 3D stack and allows users to swipe through
+  views like a rolodex.</p></li>
+    
+    </ul>
+  </li>
+  
+</ul>
+
+
+
+<h3>Graphics</h3>
+
+<ul>
+  <li><b>Hardware accelerated 2D graphics</b>
+
+<p>You can now enable the OpenGL renderer for your application by setting {@code
+android:hardwareAccelerated="true"} in your manifest element's <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
+element or for individual <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
+elements.</p>
+
+<p>This flag helps applications by making them draw faster. This results in smoother animations,
+smoother scrolling, and overall better performance and response to user interaction.</p></li>
+
+
+  <li><b>View support for hardware and software layers</b>
+  
+    <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
+view be backed by either a hardware or software layer, specified by values {@link
+android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
+{@link android.view.View#setLayerType setLayerType()} or the <a
+href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
+attribute.</p>
+    <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
+FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
+pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
+acceleration is turned off, hardware layers behave exactly as software layers.</p>
+    <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
+software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
+avoided when the affected view tree updates often. Every update will require to re-render the
+software layer, which can potentially be slow.</p>
+    <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
+android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
+  </li>
+  
+
+  <li><b>Renderscript 3D graphics engine</b>
+
+<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
+as a special, platform-independent shader language for maximum performance. Using Renderscript, you
+can accelerate graphics operations and data processing. Renderscript is an ideal way to create
+high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
+<p>For more information, see the <a
+href="{@docRoot}guide/topics/graphics/renderscript.html">3D Rendering and Computation with
+Renderscript</a> documentation.</p></li>
+</ul>
+
+
+
+
+<h3>Media</h3>
+
+
+<ul>
+
+  <li><b>Time lapse video</b>
+
+<p>Camcorder APIs now support the ability to record time lapse video. The {@link
+android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
+should be captured.</p></li>
+
+  <li><b>Texture support for image streams</b>
+    
+<p>New {@link android.graphics.SurfaceTexture} allows you to capture an image stream as an OpenGL ES
+texture. By calling {@link android.hardware.Camera#setPreviewTexture setPreviewTexture()} for your
+{@link android.hardware.Camera} instance, you can specify the {@link
+android.graphics.SurfaceTexture} upon which to draw video playback or preview frames from the
+camera.</p></li>
+
+  <li><b>HTTP Live streaming</b>
+    
+<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
+streaming session. The media framework supports most of the HTTP Live streaming specification,
+including adaptive bit rate. See the <a
+href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> document for
+more information.</p></li>
+
+  <li><b>EXIF data</b>
+    
+<p>The {@link android.media.ExifInterface} includes new fields for photo aperture, ISO, and exposure
+time.</p></li>
+
+  <li><b>Camcorder profiles</b>
+
+<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
+quality profiles (such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
+android.media.CamcorderProfile#QUALITY_720P}, {@link
+android.media.CamcorderProfile#QUALITY_CIF}, and others) allow you to determine camcorder
+quality options.</p></li>
+
+  <li><b>Digital media file transfer</b>
+
+<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
+which lets users easily transfer any type of media files between devices and to a host computer.
+Developers can build on this support, creating applications that let users create or manage rich
+media files that they may want to transfer or share across devices. </p></li>
+
+  <li><b>Digital rights management (DRM)</b>
+
+<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
+rights. It's implemented in two architectural layers:</p>
+<ul>
+  <li>A DRM framework API, which is exposed to applications and runs through the Dalvik VM for
+standard applications.</li>
+  <li>A native code DRM manager that implements the framework API and exposes an interface for DRM
+plug-ins to handle rights management and decryption for various DRM schemes.</li>
+</ul>
+
+<p>For application developers, the framework offers an abstract, unified API that simplifies the
+management of protected content. The API hides the complexity of DRM operations and allows a
+consistent operation mode for both protected and unprotected content, and across a variety of DRM
+schemes.</p>
+
+<p>For device manufacturers, content owners, and Internet digital media providers the DRM
+framework?s plugin API provides a means of adding support for a DRM scheme of choice into the
+Android system, for secure enforcement of content protection.</p>
+
+<p>The preview release does not provide any native DRM plug-ins for checking and enforcing digital
+rights. However, device manufacturers may ship DRM plug-ins with their devices.</p>
+
+<p>You can find all of the DRM APIs in the {@link android.drm} package.</p></li>
+
+</ul>
+
+
+
+<h3>Keyboard support</h3>
+
+<ul>
+<li>Support for Control, Meta, Caps Lock, Num Lock and Scroll Lock modifiers. For more information,
+see {@link android.view.KeyEvent#META_CTRL_ON} and related fields.</li>
+
+<li>Support for full desktop-style keyboards, including support for keys such as Escape, Home, End,
+Delete and others. You can determine whether key events are coming from a full keyboard by
+querying {@link android.view.KeyCharacterMap#getKeyboardType()} and checking for {@link
+android.view.KeyCharacterMap#FULL KeyCharacterMap.FULL}</li>
+
+<li>{@link android.widget.TextView} now supports keyboard-based cut, copy, paste, and select-all,
+using the key combinations Ctrl+X, Ctrl+C, Ctrl+V, and Ctrl+A.  It also supports PageUp/PageDown,
+Home/End, and keyboard-based text selection.</li>
+
+<li>{@link android.view.KeyEvent} adds several new methods to make it easier to check the key
+modifier state correctly and consistently. See {@link android.view.KeyEvent#hasModifiers(int)},
+{@link android.view.KeyEvent#hasNoModifiers()},
+{@link android.view.KeyEvent#metaStateHasModifiers(int,int) metaStateHasModifiers()},
+{@link android.view.KeyEvent#metaStateHasNoModifiers(int) metaStateHasNoModifiers()}.</li>
+
+<li>Applications can implement custom keyboard shortcuts by subclassing {@link
+android.app.Activity}, {@link android.app.Dialog}, or {@link android.view.View} and implementing
+{@link android.app.Activity#onKeyShortcut onKeyShortcut()}.  The framework calls this method
+whenever a key is combined with Ctrl key.  When creating an <a
+href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
+shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
+android:numericShortcut} attribute for each <a
+href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code &lt;item&gt;}</a>
+element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>
+
+<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
+android.view.KeyCharacterMap#VIRTUAL_KEYBOARD KeyCharacterMap.VIRTUAL_KEYBOARD}. The virtual
+keyboard has a desktop-style US key map which is useful for synthesizing key events for testing
+input.</li>
+
+</ul>
+
+
+
+
+<h3>Split touch events</h3>
+
+<p>Previously, only a single view could accept touch events at one time. Android 3.0
+adds support for splitting touch events across views and even windows, so different views can accept
+simultaneous touch events.</p>
+
+<p>Split touch events is enabled by default when an application targets
+Android 3.0. That is, when the application has set either the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
+or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> attribute's value to {@code "11"}.</p>
+
+<p>However, the following properties allow you to disable split touch events across views inside
+specific view groups and across windows.</p>
+
+<ul>
+<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
+allows you to disable split touch events that occur between child views in a layout. For example:
+<pre>
+&lt;LinearLayout android:splitMotionEvents="false" ... >
+    ...
+&lt;/LinearLayout>
+</pre>
+<p>This way, child views in the linear layout cannot split touch events&mdash;only one view can
+receive touch events at a time.</p>
+</li>
+
+<li>The {@link android.R.attr#windowEnableSplitTouch android:windowEnableSplitTouch} style property
+allows you to disable split touch events across windows, by applying it to a theme for the activity
+or entire application. For example:
+<pre>
+&lt;style name="NoSplitMotionEvents" parent="android:Theme.Holo">
+    &lt;item name="android:windowEnableSplitTouch">false&lt;/item>
+    ...
+&lt;/style>
+</pre>
+<p>When this theme is applied to an <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> or <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>,
+only touch events within the current activity window are accepted. For example, by disabling split
+touch events across windows, the system bar cannot receive touch events at the same time as the
+activity. This does <em>not</em> affect whether views inside the activity can split touch
+events&mdash;by default, the activity can still split touch events across views.</p>
+
+<p>For more information about creating a theme, read <a
+href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
+</li>
+</ul>
+
+
+
+<h3>WebKit</h3>
+
+<ul>
+  <li>New {@link android.webkit.WebViewFragment} class to create a fragment composed of a
+{@link android.webkit.WebView}.</li>
+  <li>New {@link android.webkit.WebSettings} methods:
+    <ul>
+      <li>{@link
+android.webkit.WebSettings#setDisplayZoomControls setDisplayZoomControls()} allows you to hide
+the on-screen zoom controls while still allowing the user to zoom with finger gestures ({@link
+android.webkit.WebSettings#setBuiltInZoomControls setBuiltInZoomControls()} must be set
+{@code true}).</li>
+      <li>New {@link android.webkit.WebSettings} method, {@link
+android.webkit.WebSettings#setEnableSmoothTransition setEnableSmoothTransition()}, allows you
+to enable smooth transitions when panning and zooming. When enabled, WebView will choose a solution
+to maximize the performance (for example, the WebView's content may not update during the
+transition).</li>
+    </ul>
+  <li>New {@link android.webkit.WebView} methods:
+    <ul>
+      <li>{@link android.webkit.WebView#onPause onPause()} callback, to pause any processing
+associated with the WebView when it becomes hidden. This is useful to reduce unnecessary CPU or
+network traffic when the WebView is not in the foreground.</li>
+      <li>{@link android.webkit.WebView#onResume onResume()} callback, to resume processing
+associated with the WebView, which was paused during {@link android.webkit.WebView#onPause
+onPause()}.</li>
+      <li>{@link android.webkit.WebView#saveWebArchive saveWebArchive()} allows you to save the
+current view as a web archive on the device.</li>
+      <li>{@link android.webkit.WebView#showFindDialog showFindDialog()} initiates a text search in
+the current view.</li>
+    </ul>
+  </li>
+</ul>
+
+
+
+<h3>Browser</h3>
+
+<p>The Browser application adds the following features to support web applications:</p>
+
+<ul>
+  <li><b>Media capture</b>
+    <p>As defined by the <a href="http://dev.w3.org/2009/dap/camera/">HTML Media Capture</a>
+specification, the Browser allows web applications to access audio, image and video capture
+capabilities of the device. For example, the following HTML provides an input for the user to
+capture a photo to upload:</p>
+<pre>
+&lt;input type="file" accept="image/*;capture=camera" />
+</pre>
+<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
+new image with the camera or select one from the device (such as from the Gallery application).</p>
+  </li>
+
+  <li><b>Device Orientation</b>
+    <p>As defined by the <a
+href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device Orientation Event</a>
+specification, the Browser allows web applications to listen to DOM events that provide information
+about the physical orientation and motion of the device.</p>
+    <p>The device orientation is expressed with the x, y, and z axes, in degrees and motion is
+expressed with acceleration and rotation rate data. A web page can register for orientation
+events by calling {@code window.addEventListener} with event type {@code "deviceorientation"}
+and register for motion events by registering the {@code "devicemotion"} event type.</p>
+  </li>
+  
+  <li><b>CSS 3D Transforms</b>
+    <p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform
+Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three
+dimensions.</p>
+  </li>
+</ul>
+
+
+
+<h3>JSON utilities</h3>
+
+<p>New classes, {@link android.util.JsonReader} and {@link android.util.JsonWriter}, help you
+read and write JSON streams. The new APIs complement the {@link org.json} classes, which manipulate
+a document in memory.</p>
+
+<p>You can create an instance of {@link android.util.JsonReader} by calling
+its constructor method and passing the {@link java.io.InputStreamReader} that feeds the JSON string.
+Then begin reading an object by calling {@link android.util.JsonReader#beginObject()}, read a
+key name with {@link android.util.JsonReader#nextName()}, read the value using methods
+respective to the type, such as {@link android.util.JsonReader#nextString()} and {@link
+android.util.JsonReader#nextInt()}, and continue doing so while {@link
+android.util.JsonReader#hasNext()} is true.</p>
+
+<p>You can create an instance of {@link android.util.JsonWriter} by calling its constructor and
+passing the appropriate {@link java.io.OutputStreamWriter}. Then write the JSON data in a manner
+similar to the reader, using {@link android.util.JsonWriter#name name()} to add a property name
+and an appropriate {@link android.util.JsonWriter#value value()} method to add the respective
+value.</p>
+
+<p>These classes are strict by default. The {@link android.util.JsonReader#setLenient setLenient()}
+method in each class configures them to be more liberal in what they accept. This lenient
+parse mode is also compatible with the {@link org.json}'s default parser.</p>
+
+
+
+
+<h3>New feature constants</h3>
+
+<p>The <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> 
+manfest element should be used to inform external entities (such as Google Play) of the set of
+hardware and software features on which your application depends. In this release, Android adds the
+following new constants that applications can declare with this element:</p>
+
+<ul>
+  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}
+    <p>When declared, this indicates that the application is compatible with a device that offers an
+emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
+system that can emulate a subset of touchscreen
+capabilities. An example of such an input system is a mouse or remote control that drives an
+on-screen cursor. Such input systems support basic touch events like click down, click up, and drag.
+However, more complicated input types (such as gestures, flings, etc.) may be more difficult or
+impossible on faketouch devices (and multitouch gestures are definitely not possible).</p>
+    <p>If your application does <em>not</em> require complicated gestures and you do
+<em>not</em> want your application filtered from devices with an emulated touchscreen, you
+should declare {@link
+android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
+element. This way, your application will be available to the greatest number of device types,
+including those that provide only an emulated touchscreen input.</p>
+    <p>All devices that include a touchscreen also support {@link
+android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
+touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
+a touchscreen, you should add a <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
+element for faketouch.</p>
+  </li>
+</ul>
+
+
+
+
+<h3>New permissions</h3>
+
+<ul>
+  <li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
+"android.permission.BIND_REMOTEVIEWS"}
+  <p>This must be declared as a required permission in the <a
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> manifest
+element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
+creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
+collection view, the manifest entry may look like this:</p>
+<pre>
+&lt;service android:name=".widget.WidgetService"
+    android:exported="false"
+    android:permission="android.permission.BIND_REMOTEVIEWS" />
+</pre>
+</ul>
+
+
+
+<h3>New platform technologies</h3>
+
+<ul>
+<li><strong>Storage</strong>
+  <ul>
+  <li>ext4 file system support to enable onboard eMMC storage.</li>
+  <li>FUSE file system to support MTP devices.</li>
+  <li>USB host mode support to support keyboards and USB hubs.</li>
+  <li>Support for MTP/PTP </li>
+  </ul>
+</li>
+
+<li><strong>Linux Kernel</strong>
+  <ul>
+  <li>Upgraded to 2.6.36</li>
+  </ul>
+</li>
+
+<li><strong>Dalvik VM</strong>
+  <ul>
+  <li>New code to support and optimize for SMP</li>
+  <li>Various improvements to the JIT infrastructure</li>
+  <li>Garbage collector improvements:
+    <ul>
+    <li>Tuned for SMP</li>
+    <li>Support for larger heap sizes</li>
+    <li>Unified handling for bitmaps and byte buffers</li>
+    </ul>
+  </li>
+  </ul>
+</li>
+
+<li><strong>Dalvik Core Libraries</strong>
+  <ul>
+  <li>New, much faster implementation of NIO (modern I/O library)</li>
+  <li>Improved exception messages</li>
+  <li>Correctness and performance fixes throughout</li>
+  </ul>
+</li>
+</ul>
+
+
+
+<h3 id="api-diff">API differences report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
+
+
+
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
+you need compile the application against the Android library that is provided in
+the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
+manifest. If your application is designed to run only on Android 2.3 and higher,
+declaring the attribute prevents the application from being installed on earlier
+versions of the platform.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
diff --git a/docs/html/about/versions/android-3.1-highlights.jd b/docs/html/about/versions/android-3.1-highlights.jd
new file mode 100644
index 0000000..5283c2a
--- /dev/null
+++ b/docs/html/about/versions/android-3.1-highlights.jd
@@ -0,0 +1,381 @@
+page.title=Honeycomb MR1
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content {
+  max-width:1200px;
+}
+#jd-content div.screenshot {
+  float:left;
+  clear:left;
+  padding:15px 30px 15px 0;
+}
+#jd-content div.video {
+  float:right;
+  padding:0 60px 40px;
+}
+#jd-content table.columns {
+  margin:0 0 1em 0;
+}
+#jd-content table.columns td {
+  padding:0;
+}
+#jd-content table.columns td+td {
+  padding:0 2em;
+}
+#jd-content table.columns td img {
+  margin:0;
+}
+#jd-content table.columns td+td>*:first-child {
+  margin-top:-2em;
+}
+.green {
+  color:#8db529;
+  font-weight:bold;
+}
+</style>
+
+<p>Welcome to Android 3.1!</p>
+
+<p>Android 3.1 is an incremental platform release that refines many of the
+features introduced in Android 3.0. It builds on the same tablet-optimized UI
+and features offered in Android 3.0 and adds several new capabilities for
+users and developers. This document provides an overview of the new features and
+technologies introduced in Android 3.1. For a more detailed look at new
+developer APIs, see the <a href="{@docRoot}about/versions/android-3.1.html">API
+Overview</a> document.</p>
+
+<p>For a high-level introduction to Android 3.0, please see the <a
+href="{@docRoot}about/versions/android-3.0-highlights.html">Android 3.0 Platform
+Highlights</a>.</p>
+
+<ul>
+  <li><a href="#UserFeatures">New User Features</a></li>
+  <li><a href="#DeveloperApis">New Developer Features</a></li>
+</ul>
+
+<h2 id="UserFeatures" style="clear:right">New User Features</h2>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a
+href="{@docRoot}sdk/images/3.1/home_full.png" target="_android"><img
+src="{@docRoot}sdk/images/3.1/home.png" alt="" height="280" /></a>
+<div style="padding-left:1.25em;padding-bottom:1.25em;width:450px;font-size:.9em"><strong>Figure 1.</strong> An Android 3.1 Home screen.</div>
+</div>
+
+<h3>UI refinements</h3>
+
+<p>The Android 3.1 platform adds a variety of refinements to make the user
+interface more intuitive and more efficient to use.</p>
+
+<p>UI transitions are improved throughout the system and across the standard
+apps. The Launcher animation is optimized for faster, smoother transition to and
+from the Apps list. Adjustments in color, positioning, and text make UI elements
+easier to see, understand, and use. Accessibility is improved with consistent
+audible feedback throughout the UI and a new setting to let users customize the
+touch-hold interval to meet their needs.</p>
+
+<p>Navigation to and from the five home screens is now easier &mdash; touching
+the Home button in the system bar now takes you to the home screen most recently
+used. Settings offers an improved view of internal storage,
+showing the storage used by a larger set of file types. </p>
+
+<h3 id="accessories">Connectivity for USB accessories</h3>
+
+<p>Android 3.1 adds broad platform support for a variety of USB-connected
+peripherals and accessories. Users can attach many types of input devices
+(keyboards, mice, game controllers) and digital cameras. Applications can build
+on the platform’s USB support to extend connectivity to almost any type of USB
+device.</p>
+
+<p>The platform also adds new support for USB accessories &mdash; external
+hardware devices designed to attach to Android-powered devices as USB hosts. When an
+accessory is attached, the framework will look for a corresponding application
+and offer to launch it for the user.  The accessory can also present a URL 
+to the user, for downloading an appropriate application if one is not already
+installed.  Users can interact with the application to control powered accessories such
+as robotics controllers; docking stations; diagnostic and musical equipment;
+kiosks; card readers; and much more.</p>
+
+<p>The platform’s USB capabilities rely on components in device hardware, so
+support for USB on specific devices may vary and is determined by device
+manufacturers.</p>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:.8em;float:left;width:200px;"><img src="{@docRoot}sdk/images/3.1/tasks.png" alt="" />
+<div style="padding-left:1em;padding-bottom:1em;xwidth:auto;font-size:.9em"><strong>Figure 2.</strong> The Recent Apps menu is now expandable and scrollable.</div>
+</div>
+
+<h3 id="recentapps">Expanded Recent Apps list</h3>
+
+<p>For improved multitasking and instant visual access to a much larger number
+of apps, the Recent Apps list is now expandable. Users can now scroll the list
+of recent apps vertically to see thumbnail images all of the tasks in progress
+and recently used apps, then touch a thumbnail to jump back into that task.</p>
+
+<h3 id="resizewidgets">Resizeable Home screen widgets</h3>
+
+<p>For more flexible Home screen customization, users can now resize their Home
+screen widgets using drag bars provided by the system. Users can expand widgets
+both horizontally and/or vertically to include more content, where supported by
+each widget.</p>
+
+
+<h3 id="keyboards">Support for external keyboards
+and pointing devices</h3>
+
+<p>Users can now attach almost any type of external keyboard or mouse to their
+Android-powered devices, to create a familiar environment and work more
+efficiently. One or more input devices can be attached to the system simultaneously
+over USB and/or Bluetooth HID, in any combination. No special configuration or
+driver is needed, in most cases. When multiple devices are connected, users can
+conveniently manage the active keyboard and IME using the keyboard settings that
+are available from the System bar.</p>
+
+<p>For pointing devices, the platform supports most types of mouse with a single
+button and optionally a scroll wheel, as well as similar devices such as
+trackballs. When these are connected, users can interact with the UI using
+point, select, drag, scroll, hover, and other standard actions.</p>
+
+<h3 id="joysticks">Support for joysticks and gamepads</h3>
+
+<p>To make the platform even better for gaming, Android 3.1 adds support for
+most PC joysticks and gamepads that are connected over USB or Bluetooth HID.</p>
+
+<p>For example, users can connect PlayStation<sup>&reg;</sup>3 and Xbox 360<sup>&reg;</sup>
+game controllers over USB (but not Bluetooth), Logitech Dual Action&trade; gamepads and
+flight sticks, or a car racing controller. Game controllers that use proprietary
+networking or pairing are not supported by default, but in general, the platform
+supports most PC-connectible joysticks and gamepads.</p>
+
+<h3 id="wifi">Robust Wi-Fi networking</h3>
+
+<p>Android 3.1 adds robust Wi-Fi features, to make sure that users and their
+apps can take full advantage of higher-speed Wi-Fi access at home, at work, and
+while away.</p>
+
+<p>A new high-performance Wi-Fi lock lets applications maintain
+high-performance Wi-Fi connections even when the device screen is off. Users can
+take advantage of this to play continuous streamed music, video, and voice
+services for long periods, even when the device is otherwise idle and the screen
+is off. </p>
+
+<p>Users can now configure an HTTP proxy for each individual Wi-Fi access
+point, by touch-hold of the access point in Settings. The browser uses the HTTP
+proxy when communicating with the network over the access point and other apps
+may also choose to do so. The platform also provides backup and restore of the
+user-defined IP and proxy settings.</p>
+<p>The platform adds support for Preferred Network Offload (PNO), a background
+scanning capability that conserves battery power savings in cases where Wi-Fi
+needs to be available continuously for long periods of time.</p>
+
+<h3 id="apps">Updated set of standard apps</h3>
+
+<p>The Android 3.1 platform includes an updated set of standard applications
+that are optimized for use on larger screen devices. The sections below
+highlight some of the new features.</p>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;float:right;margin-left:1em;margin-top:1.5em;margin-bottom:0;padding-bottom:0;"><img src="{@docRoot}sdk/images/3.1/controls.png" alt="" height="280px" />
+<div style="padding-left:1.25em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><strong>Figure 3.</strong> Quick Controls menu in the Browser.</div>
+</div>
+</div>
+
+<p><strong>Browser</strong></p>
+
+<p>The Browser app includes a variety of new features and UI improvements that
+make viewing web content simpler, faster, and more convenient.</p>
+
+<p>The Quick Controls UI, accessible from Browser Settings, is extended and
+redesigned. Users can now use the controls to view thumbnails of open tabs and
+close the active tab, as well as access the overflow menu for instant access to
+Settings and other controls.</p>
+
+<p>To ensure a consistent viewing experience, the Browser extends it's support
+for popular web standards such as CSS 3D, animations, and CSS fixed
+positioning to all sites, mobile or desktop. It also adds support for embedded
+playback of HTML5 video content. To make it easier to manage favorite
+content, users can now save a web page locally for offline viewing, including
+all styling and images. For convenience when visiting Google sites, an improved
+auto-login UI lets users sign in quickly and manage access when multiple users
+are sharing a device.</p>
+
+<p>For best performance, the Browser adds support for plugins that use hardware
+accelerated rendering. Page zoom performance is also dramatically improved,
+making it faster to navigate and view web pages.</p>
+
+<p><strong>Gallery</strong></p>
+
+<p>The Gallery app now supports Picture Transfer Protocol (PTP), so that users
+can connect their cameras over USB and import their pictures to Gallery with a
+single touch. The app also copies the pictures to local storage and provides an
+indicator to let users see how much space is available.</p>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:1em;float:left;margin-left:0em;"><img src="{@docRoot}sdk/images/3.1/resizeable.png" alt="" width="170"  target="_android" style="margin-bottom:0;" />
+<div style="padding-left:1.4em;padding-bottom:1em;width:180px;font-size:.9em"><strong>Figure 
+4.</strong> Home screen widgets can now be resized.</div></div>
+
+<p><strong>Calendar</strong></p>
+
+<p>Calendar grids are larger, for better readability and more accurate
+touch-targeting. Additionally, users can create a larger viewing area for grids
+by hiding the calendar list controls. Controls in the date picker are
+redesigned, making them easier to see and use.</li>
+</ul>
+
+<p><strong>Contacts</strong></p>
+
+<p>The Contacts app now lets you locate contacts more easily using full text
+search. Search returns matching results from all fields that are stored for a
+contact.
+</p>
+
+<p><strong>Email</strong></p>
+
+<p>When replying or forwarding an HTML message, The Email app now sends both
+plain text and HTML bodies as a multi-part mime message. This ensures that the
+message will be formatted properly for all recipients. Folder prefixes for IMAP
+accounts are now easier to define and manage. To conserve battery power and
+minimize cell data usage, the application now prefetches email from the server
+only when the device is connected to a Wi-Fi access point. </p>
+
+<p>An updated Home screen widget give users quick access to more email. Users
+can touch Email icon at the top of the widget to cycle through labels such as
+Inbox, Unread, and Starred. The widget itself is now resizable, both
+horizontally and vertically.</p>
+
+<h3 id="enterprise">Enterprise support</h3>
+
+<p>Users can now configure an HTTP proxy for each connected Wi-Fi access point.
+This lets administrators work with users to set a proxy hostname, port, and any
+bypass subdomains. This proxy configuration is automatically used by the Browser
+when the Wi-Fi access point is connected, and may optionally be used by other
+apps. The proxy and IP configuration is now backed up and restored across system
+updates and resets.</p>
+
+<p>To meet the needs of tablet users, the platform now allows a "encrypted
+storage card" device policy to be accepted on devices with emulated storage
+cards and encrypted primary storage.</p>
+
+
+<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
+
+<p>The Android 3.1 platform adds refinements and new capabilities that
+developers can build on, to create powerful and engaging application experiences
+on tablets and other large-screen devices. </p>
+
+<h3 id="accessory">Open Accessory API for rich interaction with
+peripherals</h3>
+
+<p>Android 3.1 introduces a new API for integrating hardware accessories with
+applications running on the platform. The API provides a way to interact across
+a wide range of peripherals, from robotics controllers to musical equipment,
+exercise bicycles, and more.</p>
+
+<p>The API is based on a new USB (Universal Serial Bus) stack and services
+that are built into the platform. The platform provides services for discovering
+and identifying connected hardware, as well as for notifying interested
+applications that the hardware is available.</p>
+
+<p>When a user plugs in a USB accessory, the platform receives
+identifying information such as product name, accessory type, manufacturer, and
+version. The platform sets up communication with the accessory and uses its
+information to notify and launch a targeted app, if one is available. Optionally,
+an accessory can provide a URL that lets users find and download an
+app that works with the accessory. These discovery features make
+first-time setup easier for the user and ensure that an appropriate application
+is available for interacting with the connected hardware. </p>
+
+<p>For application developers and accessory manufacturers, accessory mode offers
+many new ways to engage users and build powerful interaction experiences with
+connected hardware.</p>
+
+<p>To learn more about how to develop applications that interact with
+accessories, see the <a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">USB
+Accessory</a> documentation.</p>
+
+<h3 id="host">USB host API</h3>
+
+<p>Android 3.1 provides built-in platform support for USB host mode and exposes
+an API that lets applications manage connected peripherals. On devices that
+support host mode, applications can use the API to identify and communicate with
+connected devices such as audio devices. input devices, communications devices,
+hubs, cameras, and more.</p>
+
+<p>To learn more about how to develop applications that interact with
+USB devices, see the <a href="{@docRoot}guide/topics/connectivity/usb/host.html">USB
+Host</a> documentation.</p>
+
+<h3 id="inputdevices">Input from mice, joysticks, and gamepads</h3>
+
+<p>Android 3.1 extends the input event system to support a variety of new input
+sources and motion events, across all views and windows. Developers can build on
+these capabilities to let users interact with their applications using mice,
+trackballs, joysticks, gamepads, and other devices, in addition to keyboards and
+touchscreens.</p>
+
+<p>For mouse and trackball input, the platform supports two new motion event
+actions: scroll (horizontal or vertical) such as from a scrollwheel; and hover,
+which reports the location of the mouse when no buttons are pressed.
+Applications can handle these events in any way needed.</p>
+
+<p>For joysticks and gamepads, the platform provides a large number of motion
+axes that applications can use from a given input source, such as X, Y, Hat X,
+Hat Y, rotation, throttle, pressure, size, touch, tool, orientation, and others.
+Developers can also define custom axes if needed, to capture motion in
+additional ways. The platform provides motion events to applications as a batch,
+and applications can query the details of the movements included in the batch,
+for more efficient and precise handling of events.</p>
+
+<p>Applications can query for the list of connected input devices and the motion
+ranges (axes) supported by each device. Applications can also handle multiple
+input and motion events from a single input device. For example, an application
+can use mouse and joystick and mouse event sources from a single input
+device.</p>
+
+<h3 id="resizewidgetsapp">Resizable Home screen widgets</h3>
+
+<p>Developers can now create Home screen widgets that users can resize
+horizontally, vertically, or both. By simply adding an attribute to the
+declaration of a widget, the widget becomes resizable horizontally, vertically,
+or both. This lets users customize the display of the widget content and display
+more of it on their Home screens.</p>
+
+<h3 id="mtp">MTP API for integrating with external cameras</h3>
+
+<p>In Android 3.1, a new MTP (Media Transfer Protocol) API lets developers write
+apps that interact directly with connected cameras and other PTP devices. The
+new API makes it easy for applications to receive notifications when devices are
+attached and removed, manage files and storage on those devices, and transfer
+files and metadata to and from them. The MTP API implements the PTP (Picture
+Transfer Protocol) subset of the MTP specification.</p>
+
+<h3 id="rtp">RTP API, for control over audio streaming sessions</h3>
+
+<p>Android 3.1 exposes an API to its built-in RTP (Real-time Transport Protocol)
+stack, which applications can use to directly manage on-demand or interactive
+data streaming. In particular, apps that provide VOIP, push-to-talk,
+conferencing, and audio streaming can use the API to initiate sessions and
+transmit or receive data streams over any available network.</p>
+
+<h3 id="performance">Performance optimizations</h3>
+
+<p>Android 3.1 includes a variety of performance optimizations that help make
+applications faster and more responsive. Some of the optimizations include:</p>
+
+<ul>
+<li>A new LRU cache class lets applications benefit from efficient caching.
+Applications can use the class to reduce the time spent computing or downloading
+data from the network, while maintaining a sensible memory footprint for the
+cached data.</li>
+<li>The UI framework now supports partial invalidates in hardware-accelerated
+Views, which makes drawing operations in those Views more efficient.</li>
+<li>A new graphics method, {@link android.graphics.Bitmap#setHasAlpha(boolean)
+setHasAlpha()}, allows apps to hint that a given bitmap is opaque. This provides
+an extra performance boost for some types of blits and is especially useful for
+applications that use ARGB_8888 bitmaps.</li>
+</ul>
+
diff --git a/docs/html/about/versions/android-3.1.jd b/docs/html/about/versions/android-3.1.jd
new file mode 100644
index 0000000..2a845f0
--- /dev/null
+++ b/docs/html/about/versions/android-3.1.jd
@@ -0,0 +1,863 @@
+page.title=Android 3.1 Platform
+sdk.platform.version=3.1
+sdk.platform.apiLevel=12
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/12/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+
+<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. The downloadable platform includes no external libraries.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+
+<h2 id="#api" style="margin-top:1.5em;">API Overview</h2>
+
+<p>The sections below provide a technical overview of what's new for developers
+in Android 3.1, including new features and changes in the framework API since
+the previous version.</p>
+
+<h3 id="usb">USB APIs</h3>
+
+<p>Android 3.1 introduces powerful new APIs for
+integrating connected peripherals with applications running on the platform.
+The APIs are based on a USB (Universal Serial Bus) stack and services that are
+built into the platform, including support for both USB host and device
+interactions. Using the APIs, developers can create applications that are able to
+discover, communicate with, and manage a variety of device types connected over
+USB. </p>
+
+<p>The stack and APIs distinguish two basic types of USB hardware, based on
+whether the Android-powered device is acting as host or the external hardware
+is acting as host: </p>
+
+<ul>
+<li>A <em>USB device</em> is a piece of connected hardware that depends on the
+Android-powered device to serve as host. For example, most input devices, mice,
+and joysticks are USB devices, as are many cameras, hubs, and so on.</li>
+<li>A <em>USB accessory</em> is a piece of connected hardware that has a USB
+host controller, provides power, and is designed to communicate with
+Android-powered devices over USB, A variety of peripherals can connect as
+accessories, from robotics controllers to musical equipment, exercise bicycles,
+and more.</li>
+</ul>
+
+<p>For both types &mdash; USB devices and USB accessories &mdash; the
+platform's USB APIs support discovery by intent broadcast when attached or
+detached, as well as standard interfaces, endpoints, and transfer modes
+(control, bulk, and interrupt).</p>
+
+<p>The USB APIs are available in the package {@link android.hardware.usb}. The
+central class is {@link android.hardware.usb.UsbManager}, which provides
+helper methods for identifying and communicating with
+both USB devices and USB accessories. Applications can acquire an instance of
+{@link android.hardware.usb.UsbManager} and then query for the list of attached
+devices or accessories and then communicate with or manage them.
+{@link android.hardware.usb.UsbManager} also declares intent actions that the
+system broadcasts, to announce when a USB device or accessory is attached or
+detached.</p>
+
+<p>Other classes include:</p>
+
+<ul>
+<li>{@link android.hardware.usb.UsbDevice}, a class representing external
+hardware connected as a USB device (with the Android-powered device acting as
+host).</li>
+<li>{@link android.hardware.usb.UsbAccessory}, representing external hardware
+connected as the USB host (with the Android-powered device acting as a USB
+device).</li>
+<li>{@link android.hardware.usb.UsbInterface} and {@link
+android.hardware.usb.UsbEndpoint}, which provide access to standard USB
+interfaces and endpoints for a device.</li>
+<li>{@link android.hardware.usb.UsbDeviceConnection} and {@link
+android.hardware.usb.UsbRequest}, for sending and receiving data and control
+messages to or from a USB device, sychronously and asynchronously.
+<li>{@link android.hardware.usb.UsbConstants}, which provides constants for
+declaring endpoint types, device classes, and so on.</li>
+</ul>
+
+<p>Note that although the USB stack is built into the platform, actual support
+for USB host and open accessory modes on specific devices is determined by
+their manufacturers. In particular, host mode relies on appropriate USB
+controller hardware in the Android-powered device. </p>
+
+<p>Additionally, developers can request filtering on Google Play, such that
+their applications are not availabe to users whose devices do not provide the
+appropriate USB support. To request filtering, add one or both of the elements
+below to the application manifest, as appropriate: </p>
+
+<ul>
+<li>If the application should only be visible to devices that support USB
+host mode (connection of USB devices), declare this element:
+  <p style="margin-left:1.5em;"><code>&lt;uses-feature
+  android:name="android.hardware.usb.host"
+  android:required="true"&gt;</code></p>
+</li>
+<li>If the application should only be visible to devices that support USB
+accessories (connection of USB hosts), declare this element:
+  <p style="margin-left:1.5em;"><code>&lt;uses-feature
+  android:name="android.hardware.usb.accessory"
+  android:required="true"&gt;</code></p>
+</li>
+</ul>
+
+<p>For complete information about how to develop applications that interact with
+USB accessories, please see the
+<a href="{@docRoot}guide/topics/connectivity/usb/index.html">developer documentation</a>.</p>
+
+<p class="note">To look at sample applications that use the USB host API, see <a
+href="{@docRoot}resources/samples/USB/AdbTest/index.html">ADB Test</a> and <a
+href="{@docRoot}resources/samples/USB/MissileLauncher/index.html">Missile
+Launcher</a></p>
+
+<h3>MTP/PTP API</h3>
+
+<p>Android 3.1 exposes a new MTP API that lets applications interact directly
+with connected cameras and other PTP devices. The new API makes it easy for an
+application to receive notifications when devices are attached and removed,
+manage files and storage on those devices, and transfer files and metadata to
+and from them. The MTP API implements the PTP (Picture Transfer Protocol) subset
+of the MTP (Media Transfer Protocol) specification.</p>
+
+<p>The MTP API is available in the {@link android.mtp} package and provides
+these classes: </p>
+
+<ul>
+  <li>The {@link android.mtp.MtpDevice} encapsulates an MTP device that is
+connected over the USB host bus. An application can instantiate an object of
+this type and then use its methods to get information about the device and
+objects stored on it, as well as opening the connection and transferring data.
+Some of the methods include:
+    <ul>
+      <li>{@link android.mtp.MtpDevice#getObjectHandles(int, int, int)
+getObjectHandles()} returns a list of handles for all objects on the device that
+match a specified format and parent. To get information about an object, an
+application can pass a handle to {@link android.mtp.MtpDevice#getObjectInfo(int)
+getObjectInfo()}.</li>
+      <li>{@link android.mtp.MtpDevice#importFile(int, java.lang.String)
+importFile()} lets an application copy data for an object to a file in external
+storage. This call may block for an arbitrary amount of time depending on the
+size of the data and speed of the devices, so should be made from a spearate
+thread.</li>
+      <li>{@link
+android.mtp.MtpDevice#open(android.hardware.usb.UsbDeviceConnection) open()}
+lets an application open a connected MTP/PTP device. </li>
+      <li>{@link android.mtp.MtpDevice#getThumbnail(int) getThumbnail()} returns
+the thumbnail of the object as a byte array. </li>
+    </ul>
+  </li>
+  <li>{@link android.mtp.MtpStorageInfo} holds information about about a storage
+unit on an MTP device, corresponding to the StorageInfo Dataset described in
+section 5.2.2 of the MTP  specification. Methods in the class let an application
+get a storage unit’s description string, free space, maximum storage capacity,
+storage ID, and volume identifier.</li>
+  <li>{@link android.mtp.MtpDeviceInfo}  holds information about an MTP device
+corresponding to the DeviceInfo Dataset described in section 5.1.1 of the MTP
+specification. Methods in the class let applications get a device’s
+manufacturer, model, serial number, and version.</li>
+  <li>{@link android.mtp.MtpObjectInfo} holds information about an object stored
+on an MTP device, corresponding to the ObjectInfo Dataset described in section
+5.3.1 of the MTP specification. Methods in the class let applications get an
+object’s size, data format, association type, creation date, and thumbnail
+information.</li>
+  <li>{@link android.mtp.MtpConstants} provides constants for declaring MTP file
+format codes, association type, and protection status.</li>
+</ul>
+
+<h3 id="motionevents">Support for new input devices and motion events</h3>
+
+<p>Android 3.1 extends the input subsystem to support new input devices and new
+types of motion events, across all views and windows. Developers can build on
+these capabilities to let users interact with their applications using mice,
+trackballs, joysticks, gamepads, and other devices, in addition to keyboards and
+touchscreens. </p>
+
+<p>For handling mouse, scrollwheel, and trackball input, the platform supports
+two new motion event actions:</p>
+<ul>
+<li>{@link android.view.MotionEvent#ACTION_SCROLL}, which describes the pointer
+location at which a non-touch scroll motion, such as from a mouse scroll wheel,
+took place. In the MotionEvent, the value of the {@link
+android.view.MotionEvent#AXIS_HSCROLL} and {@link
+android.view.MotionEvent#AXIS_VSCROLL} axes specify the relative scroll
+movement. </li>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_MOVE}, reports the current
+position of the mouse when no buttons are pressed, as well as any intermediate
+points since the last <code>HOVER_MOVE</code> event. Hover enter and exit
+notifications are not yet supported.</li>
+</ul>
+
+<p>To support joysticks and gamepads, the {@link android.view.InputDevice} class
+includes these new input device sources:</p>
+<ul>
+<li>{@link android.view.InputDevice#SOURCE_CLASS_JOYSTICK} &mdash; the source
+device has joystick axes.</li>
+<li>{@link android.view.InputDevice#SOURCE_CLASS_BUTTON} &mdash; the source
+device has buttons or keys.</li>
+<li>{@link android.view.InputDevice#SOURCE_GAMEPAD}  &mdash;  the source device
+has gamepad buttons such as {@link android.view.KeyEvent#KEYCODE_BUTTON_A}
+or {@link android.view.KeyEvent#KEYCODE_BUTTON_B}. Implies
+{@link android.view.InputDevice#SOURCE_CLASS_BUTTON}</li>
+<li>{@link android.view.InputDevice#SOURCE_JOYSTICK} &mdash; the source device
+has joystick axes.  Implies SOURCE_CLASS_JOYSTICK.</li>
+</ul>
+
+<p>To describe motion events from these new sources, as well as those from mice
+and trackballs, the platform now defines axis codes on {@link
+android.view.MotionEvent}, similar to how it defines key codes on {@link
+android.view.KeyEvent}. New axis codes for joysticks
+and game controllers include
+{@link android.view.MotionEvent#AXIS_HAT_X}, {@link
+android.view.MotionEvent#AXIS_HAT_Y}, {@link
+android.view.MotionEvent#AXIS_RTRIGGER}, {@link
+android.view.MotionEvent#AXIS_ORIENTATION}, {@link
+android.view.MotionEvent#AXIS_THROTTLE}, and many others. 
+Existing {@link android.view.MotionEvent} axes are represented by {@link
+android.view.MotionEvent#AXIS_X}, {@link android.view.MotionEvent#AXIS_Y},
+{@link android.view.MotionEvent#AXIS_PRESSURE}, {@link
+android.view.MotionEvent#AXIS_SIZE}, {@link
+android.view.MotionEvent#AXIS_TOUCH_MAJOR}, {@link
+android.view.MotionEvent#AXIS_TOUCH_MINOR}, {@link
+android.view.MotionEvent#AXIS_TOOL_MAJOR}, {@link
+android.view.MotionEvent#AXIS_TOOL_MINOR}, and {@link
+android.view.MotionEvent#AXIS_ORIENTATION}.</p>
+
+<p>Additionally, {@link android.view.MotionEvent} defines a number of generic
+axis codes that are used when the framework does not know how to map a
+particular axis. Specific devices can use the generic axis codes to pass custom
+motion data to applications. For a full list of axes and their intended
+interpretations, see the {@link android.view.MotionEvent} class documentation.
+</p>
+
+<p>The platform provides motion events to applications in batches, so a single
+event may contain a current position and multiple so-called historical movements.
+Applications should use {@link android.view.MotionEvent#getHistorySize()} to get
+the number of historical samples, then retrieve and process all historical
+samples in order using {@link
+android.view.MotionEvent#getHistoricalAxisValue(int, int, int)
+getHistoricalAxisValue()}.  After that, applications should process the current
+sample using {@link android.view.MotionEvent#getAxisValue(int) getAxisValue()}.
+</p>
+
+<p>Some axes can be retrieved using special accessor methods.  For example,
+instead of calling {@link android.view.MotionEvent#getAxisValue(int)
+getAxisValue()}, applications can call {@link android.view.MotionEvent#getX(int)
+getX()}.  Axes that have built-in accessors include {@link
+android.view.MotionEvent#AXIS_X}, {@link android.view.MotionEvent#AXIS_Y},
+{@link android.view.MotionEvent#AXIS_PRESSURE}, {@link
+android.view.MotionEvent#AXIS_SIZE}, {@link
+android.view.MotionEvent#AXIS_TOUCH_MAJOR}, {@link
+android.view.MotionEvent#AXIS_TOUCH_MINOR}, {@link
+android.view.MotionEvent#AXIS_TOOL_MAJOR}, {@link
+android.view.MotionEvent#AXIS_TOOL_MINOR}, and {@link
+android.view.MotionEvent#AXIS_ORIENTATION}.</p>
+
+<p>Each input device has a unique, system-assigned ID and may also provide
+multiple sources. When a device provides multiple sources, more than one source
+can provide axis data using the same axis. For example, a touch event coming
+from the touch source uses the X axis for screen position data, while a joystick
+event coming from the joystick source will use the X axis for the stick position
+instead. For this reason, it's important for applications to interpret axis
+values according to the source from which they originate. When handling a motion
+event, applications should use methods on the {@link android.view.InputDevice}
+class to determine the axes supported by a device or source. Specifically,
+applications can use {@link android.view.InputDevice#getMotionRanges()
+getMotionRanges()} to query for all axes of a device or all axes of a given
+source of the device. In both cases, the range information for axes returned in
+the {@link android.view.InputDevice.MotionRange} object specifies the source for
+each axis value.</p>
+
+<p>Finally, since the motion events from joysticks, gamepads, mice, and
+trackballs are not touch events, the platform adds a new callback method for
+passing them to a {@link android.view.View} as "generic" motion events.
+Specifically, it reports the non-touch motion events to 
+{@link android.view.View}s through a call to {@link
+android.view.View#onGenericMotionEvent(android.view.MotionEvent)
+onGenericMotionEvent()}, rather than to {@link
+android.view.View#onTouchEvent(android.view.MotionEvent)
+onTouchEvent()}.</p>
+
+<p>The platform dispatches generic motion events differently, depending on the
+event source class. {@link android.view.InputDevice#SOURCE_CLASS_POINTER} events
+go to the {@link android.view.View} under the pointer, similar to how touch
+events work.  All others go to the currently focused {@link android.view.View}.
+For example, this means a {@link android.view.View} must take focus in order to
+receive joystick events. If needed, applications can handle these events at the
+level of Activity or Dialog by implementing {@link
+android.view.View#onGenericMotionEvent(android.view.MotionEvent)
+onGenericMotionEvent()} there instead.</p>
+
+<p class="note">To look at a sample application that uses joystick motion
+events, see <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html">GameControllerInput</a> 
+and <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html">GameView</a>.</p>
+
+<h3>RTP API</h3>
+
+<p>Android 3.1 exposes an API to its built-in RTP (Real-time Transport Protocol)
+stack, which applications can use to manage on-demand or interactive data
+streaming. In particular, apps that provide VOIP, push-to-talk, conferencing,
+and audio streaming can use the API to initiate sessions and transmit or receive
+data streams over any available network.</p>
+
+<p>The RTP API is available in the {@link android.net.rtp} package. Classes
+include: </p>
+<ul>
+<li>{@link android.net.rtp.RtpStream}, the base class of streams that send and
+receive network packets with media payloads over RTP.</li>
+<li>{@link android.net.rtp.AudioStream}, a subclass of {@link
+android.net.rtp.RtpStream} that carries audio payloads over RTP.</li>
+<li>{@link android.net.rtp.AudioGroup}, a local audio hub for managing and
+mixing the device speaker, microphone, and {@link android.net.rtp.AudioStream}.</li>
+<li>{@link android.net.rtp.AudioCodec}, which holds a collection of codecs that
+you define for an {@link android.net.rtp.AudioStream}.</li>
+</ul>
+
+<p>To support audio conferencing and similar usages, an application instantiates
+two classes as endpoints for the stream:</p>
+
+<ul>
+<li>{@link android.net.rtp.AudioStream} specifies a remote endpoint and consists
+of network mapping and a configured {@link android.net.rtp.AudioCodec}.</li>
+<li>{@link android.net.rtp.AudioGroup} represents the local endpoint for one
+or more {@link android.net.rtp.AudioStream}s. The {@link android.net.rtp.AudioGroup} mixes
+all the {@link android.net.rtp.AudioStream}s and optionally interacts with the device
+speaker and the microphone at the same time.</li>
+</ul>
+
+<p>The simplest usage involves a single remote endpoint and local endpoint.
+For more complex usages, please refer to the limitations described for
+{@link android.net.rtp.AudioGroup}.</p>
+
+<p>To use the RTP API, applications must request permission from the user by
+declaring <code>&lt;uses-permission
+android:name="android.permission.INTERNET"&gt;</code>
+in their manifest files. To acquire the device microphone, the <code>&lt;uses-permission
+android:name="android.permission.RECORD_AUDIO"&gt;</code> permission is also required.</p>
+
+<h3 id="resizewidgets">Resizable app widgets</h3>
+
+<p>Starting in Android 3.1, developers can make their homescreen widgets
+resizeable &mdash; horizontally, vertically, or on both axes. Users touch-hold a
+widget to show its resize handles, then drag the horizontal and/or vertical
+handles to change the size on the layout grid. </p>
+
+<p>Developers can make any Home screen widget resizeable by defining a
+<code>resizeMode</code> attribute in the widget's {@link
+android.appwidget.AppWidgetProviderInfo} metadata. Values for the
+<code>resizeMode</code> attribute include "horizontal", "vertical", and "none".
+To declare a widget as resizeable horizontally and vertically, supply the value
+"horizontal|vertical".
+
+<p>Here's an example: </p>
+
+<pre>&lt;appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
+    android:minWidth="294dp"
+    android:minHeight="72dp"
+    android:updatePeriodMillis="86400000"
+    android:previewImage="@drawable/preview"
+    android:initialLayout="@layout/example_appwidget"
+    android:configure="com.example.android.ExampleAppWidgetConfigure"
+    android:resizeMode="horizontal|vertical" >
+&lt;/appwidget-provider></pre>
+
+<p>For more information about Home screen widgets, see the <a
+href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>
+documentation.</p>
+
+<h3 id="animation" style="margin-top:1.25em;">Animation framework</h3>
+
+<ul>
+<li>New ViewPropertyAnimator class
+  <ul>
+    <li>A new {@link android.view.ViewPropertyAnimator} class provides a
+convenient
+way for developers to animate select properties on {@link android.view.View} objects. The class
+automaties and optimizes the animation of the properties and makes it easier to
+manage multiple simulataneous animations on a {@link android.view.View} object.
+<p>Using the {@link android.view.ViewPropertyAnimator} is straightforward. To animate properties for
+a {@link android.view.View}, call {@link android.view.View#animate()} to
+construct a {@link android.view.ViewPropertyAnimator} object for that {@link android.view.View}. Use the
+methods on the {@link android.view.ViewPropertyAnimator} to specify what property to
+animate and how to animate it. For example, to fade the {@link android.view.View} to transparent,
+call <code>alpha(0);</code>. The {@link android.view.ViewPropertyAnimator} object
+handles the details of configuring the underlying {@link
+android.animation.Animator} class and starting it, then rendering the
+animation.</p></li>
+  </ul>
+</li>
+<li>Animation background color
+  <ul>
+    <li>New {@link android.view.animation.Animation#getBackgroundColor()} and
+    {@link android.view.animation.Animation#setBackgroundColor(int)} methods let
+    you get/set the background color behind animations, for window animations
+only. Currently the background must be black, with any desired alpha level.</li>
+  </ul>
+</li>
+<li>Getting animated fraction from <code>ViewAnimator</code>
+  <ul>
+    <li>A new {@link android.animation.ValueAnimator#getAnimatedFraction()}
+method
+lets you get the current animation fraction &mdash; the elapsed/interpolated
+fraction used in the most recent frame update &mdash; from a {@link
+android.animation.ValueAnimator}.</li>
+  </ul>
+</li>
+</ul>
+
+<h3 "ui">UI framework</h3>
+<ul>
+<li>Forced rendering of a layer
+  <ul>
+    <li>A new {@link android.view.View#buildLayer()} method lets an application
+force a View's layer to be created and the View rendered into it immediately.
+For example, an application could use this method to render a View into its
+layer before starting an animation. If the View is complex, rendering it into
+the layer before starting the animation will avoid skipping frames.</li>
+  </ul>
+</li>
+<li>Camera distance
+  <ul>
+    <li>Applications can use a new method
+{@link android.view.View#setCameraDistance(float)} to set the distance from the
+camera
+to a View. This gives applications improved control over 3D transformations of
+the View, such as rotations. </li>
+  </ul>
+</li>
+<li>Getting a calendar view from a DatePicker
+  <ul>
+    <li>A new {@link android.widget.DatePicker#getCalendarView()} method
+    lets you get a {@link android.widget.CalendarView} from a {@link
+android.widget.DatePicker}
+    instance.</li>
+  </ul>
+</li>
+<li>Getting callbacks when views are detached
+  <ul>
+    <li>A new {@link android.view.View.OnAttachStateChangeListener} lets you
+receive
+callbacks when a View is attached or detached from its window. Use {@link
+android.view.View#addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener) addOnAttachStateChangeListener()}
+to add a listener and {@link
+android.view.View#removeOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener) addOnAttachStateChangeListener()} to remove it.</li>
+  </ul>
+</li>
+<li>Fragment breadcrumb listener, new onInflate() signature
+  <ul>
+    <li>A new method, {@link
+android.app.FragmentBreadCrumbs#setOnBreadCrumbClickListener(android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener) setOnBreadCrumbClickListener()},
+provides a hook to let
+applications intercept fragment-breadcrumb clicks and take any action needed
+before going to the backstack entry or fragment that was clicked. </li>
+    <li>In the {@link android.app.Fragment} class, {@link
+android.app.Fragment#onInflate(android.util.AttributeSet, android.os.Bundle)
+onInflate(attrs, savedInstanceState)} is deprecated. Please use {@link
+android.app.Fragment#onInflate(android.app.Activity, android.util.AttributeSet,
+android.os.Bundle) onInflate(activity, attrs, savedInstanceState)} instead.</li>
+  </ul>
+</li>
+<li>Display search result in new tab
+  <ul>
+    <li>An {@link android.app.SearchManager#EXTRA_NEW_SEARCH} data key for {@link
+android.content.Intent#ACTION_WEB_SEARCH} intents lets you open a search in a
+new browser tab, rather than in an existing one.</li>
+  </ul>
+</li>
+
+<li>Drawable text cursor
+  <ul>
+<li>You can now specify a drawable to use as the text cursor using the new
+resource attribute {@link android.R.attr#textCursorDrawable}.</li>
+  </ul>
+</li>
+<li>Setting displayed child in remote views
+  <ul>
+    <li>A new convenience method, {@link
+android.widget.RemoteViews#setDisplayedChild(int, int) setDisplayedChild(viewId,
+childIndex)}, is available in {@link android.widget.RemoteViews} subclasses, to
+let you set the child displayed in {@link android.widget.ViewAnimator} and
+{@link android.widget.AdapterViewAnimator} subclasses such as {@link
+android.widget.AdapterViewFlipper}, {@link android.widget.StackView}, {@link
+android.widget.ViewFlipper}, and {@link android.widget.ViewSwitcher}.</li>
+  </ul>
+</li>
+<li>Generic keys for gamepads and other input devices
+  <ul>
+    <li>{@link android.view.KeyEvent} adds a range of generic keycodes to
+    accommodate gamepad buttons. The class also adds
+    {@link android.view.KeyEvent#isGamepadButton(int)} and several other
+    helper methods for working with keycodes.</li>
+  </ul>
+</li>
+</ul>
+
+<h3 id="graphics" style="margin-top:1.3em;">Graphics</h3>
+
+<ul>
+<li>Helpers for managing bitmaps
+  <ul>
+  <li>{@link android.graphics.Bitmap#setHasAlpha(boolean)} lets an app indicate that
+all of the pixels in a Bitmap are known to be opaque (false) or that some of the
+pixels may contain non-opaque alpha values (true). Note, for some configs (such
+as RGB_565) this call is ignored, since it does not support per-pixel alpha
+values. This is meant as a drawing hint, as in some cases a bitmap that is known
+to be opaque can take a faster drawing case than one that may have non-opaque
+per-pixel alpha values. </li>
+  <li>{@link android.graphics.Bitmap#getByteCount()} gets a Bitmap's size in
+bytes.</li>
+  <li>{@link android.graphics.Bitmap#getGenerationId()} lets an application find
+out whether a Bitmap has been modified, such as for caching.</li>
+  <li>{@link android.graphics.Bitmap#sameAs(android.graphics.Bitmap)} determines
+whether a given Bitmap differs from the current Bitmap, in dimension,
+configuration, or pixel data. </li>
+  </ul>
+</li>
+<li>Setting camera location and rotation
+  <ul>
+  <li>{@link android.graphics.Camera} adds two new methods {@link
+android.graphics.Camera#rotate(float, float, float) rotate()} and {@link
+android.graphics.Camera#setLocation(float, float, float) setLocation()} for
+control of the
+camera's location, for 3D transformations.</li>
+</ul>
+</li>
+</ul>
+
+<h3 id="network" style="margin-top:1.25em;">Network</h3>
+
+<ul>
+<li>High-performance Wi-Fi lock
+  <ul>
+    <li>A new high-performance Wi-Fi lock lets applications maintain
+high-performance Wi-Fi connections even when the device screen is off.
+Applications that stream music, video, or voice for long periods can acquire the
+high-performance Wi-Fi lock to ensure streaming performance even when the screen
+is off. Because it uses more power, applications should acquire the
+high-performance Wi-Fi when there is a need for a long-running active
+connection.
+<p>To create a high-performance lock, pass {@link
+android.net.wifi.WifiManager#WIFI_MODE_FULL_HIGH_PERF} as the lock mode in a
+call to {@link android.net.wifi.WifiManager#createWifiLock(int,
+java.lang.String) createWifiLock()}.</p></li>
+  </ul>
+</li>
+<li>More traffic stats
+  <ul>
+    <li>Applications can now access statistics about more types of network usage
+using new methods in {@link android.net.TrafficStats}. Applications can use the
+methods to get UDP stats, packet count, TCP transmit/receive payload bytes and
+segments for a given UID.</li>
+  </ul>
+</li>
+<li>SIP auth username
+  <ul>
+    <li>Applications can now get and set the SIP auth username for a profile
+using
+the new methods {@link android.net.sip.SipProfile#getAuthUserName()
+getAuthUserName()} and {@link
+android.net.sip.SipProfile.Builder#setAuthUserName(java.lang.String)
+setAuthUserName()}.</li>
+  </ul>
+</li>
+</ul>
+
+
+<h3 id="download" style="margin-top:1.25em;">Download Manager</h3>
+<ul>
+<li>Handling of completed downloads
+  <ul>
+    <li>Applications can now initiate downloads that notify users only on
+completion. To initiate this type of download, applications pass {@link
+android.app.DownloadManager.Request#VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION}
+in the {@link
+android.app.DownloadManager.Request#setNotificationVisibility(int)
+setNotificationVisibility()} method of
+the a request object.</li>
+    <li>A new method, {@link
+android.app.DownloadManager#addCompletedDownload(java.lang.String,
+java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean)
+addCompletedDownload()}, lets an application add a file to the
+downloads database, so that it can be managed by the Downloads application.</li>
+  </ul>
+</li>
+<li>Show downloads sorted by size
+  <ul>
+    <li>Applications can start the Downloads application in sort-by-size mode by
+adding the new extra {@link
+android.app.DownloadManager#INTENT_EXTRAS_SORT_BY_SIZE} to an {@link
+android.app.DownloadManager#ACTION_VIEW_DOWNLOADS} intent.</li>
+    </ul>
+</li>
+</ul>
+
+<h3 id="ime" style="margin-top:1.25em;">IME framework</h3>
+
+<ul>
+<li>Getting an input method's extra value key
+  <ul><li>The {@link android.view.inputmethod.InputMethodSubtype} adds the
+method
+{@link
+android.view.inputmethod.InputMethodSubtype#containsExtraValueKey(java.lang.String) containsExtraValueKey()} to check whether an ExtraValue string is stored
+for the subtype and
+the method {@link
+android.view.inputmethod.InputMethodSubtype#getExtraValueOf(java.lang.String)
+getExtraValueOf()} to extract a specific key value from the ExtraValue hashmap.
+</li>
+  </ul>
+</li>
+</ul>
+
+<h3 id="media" style="margin-top:1.25em;">Media</h3>
+
+<ul>
+<li>New streaming audio formats
+  <ul>
+    <li>The media framework adds built-in support for raw ADTS AAC content, for
+improved streaming audio, as well as support for FLAC audio, for highest quality
+(lossless) compressed audio content. See the <a
+href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a>
+document for more information.</p></li>
+  </ul>
+</li>
+</ul>
+
+<h3 id="launchcontrols" style="margin-top:1.25em;">Launch controls on stopped
+applications</h3>
+
+<p>Starting from Android 3.1, the system's package manager keeps track of
+applications that are in a stopped state and provides a means of controlling
+their launch from background processes and other applications.</p>
+
+<p>Note that an application's stopped state is not the same as an Activity's
+stopped state. The system manages those two stopped states separately.</p>
+
+<p>The platform defines two new intent flags that let a sender specify
+whether the Intent should be allowed to activate components in stopped
+application.</p>
+
+<ul>
+<li>{@link android.content.Intent#FLAG_INCLUDE_STOPPED_PACKAGES} &mdash;
+Include intent filters of stopped applications in the list of potential targets
+to resolve against. </li>
+<li>{@link android.content.Intent#FLAG_EXCLUDE_STOPPED_PACKAGES} &mdash;
+Exclude intent filters of stopped applications from the list of potential
+targets.</li>
+</ul>
+
+<p>When neither or both of these flags is defined in an intent, the default
+behavior is to include filters of stopped applications in the list of
+potential targets.</p>
+
+<p>Note that the system adds {@link
+android.content.Intent#FLAG_EXCLUDE_STOPPED_PACKAGES} <em>to all broadcast
+intents</em>. It does this to prevent broadcasts from background services from
+inadvertently or unnecessarily launching components of stoppped applications.
+A background service or application can override this behavior by adding the
+{@link android.content.Intent#FLAG_INCLUDE_STOPPED_PACKAGES} flag to broadcast
+intents that should be allowed to activate stopped applications.</p>
+
+<p>Applications are in a stopped state when they are first installed but are not
+yet launched and when they are manually stopped by the user (in Manage
+Applications).</p>
+
+<h3 id="installnotification">Notification of application first launch and upgrade</h3>
+
+<p>The platform adds improved notification of application first launch and
+upgrades through two new intent actions:</p>
+
+<ul>
+<li>{@link android.content.Intent#ACTION_PACKAGE_FIRST_LAUNCH} &mdash; Sent to
+the installer package of an application when that application is first launched
+(that is, the first time it is moved out of a stopped state). The data
+contains the name of the package. </li>
+
+<li>{@link android.content.Intent#ACTION_MY_PACKAGE_REPLACED} &mdash; Notifies
+an application that it was updated, with a new version was installed over
+an existing version.  This is only sent to the application that was replaced. It
+does not contain any additional data. To receive it, declare an intent filter
+for this action. You can use the intent to trigger code that helps get your
+application back in proper running shape after an upgrade.
+
+<p>This intent is sent directly to the application, but only if the application
+was upgraded while it was in started state (not in a stopped state).</p></li>
+
+</ul>
+
+<h3 id="other">Core utilities</h3>
+
+<ul>
+<li>LRU cache
+  <ul>
+    <li>A new {@link android.util.LruCache} class lets your applications benefit
+from efficient caching. Applications can use the class to reduce the time spent
+computing or downloading data from the network, while maintaining a sensible
+memory footprint for the cached data.{@link android.util.LruCache} is a cache
+that holds strong references to a limited number of values. Each time a value is
+accessed, it is moved to the head of a queue. When a value is added to a full
+cache, the value at the end of that queue is evicted and may become eligible for
+garbage collection.</li>
+  </ul>
+</li>
+<li>File descriptor as <code>int</code>
+  <ul>
+    <li>You can now get the native file descriptor int for a {@link
+android.os.ParcelFileDescriptor} using either of the new methods {@link
+android.os.ParcelFileDescriptor#getFd()} or {@link
+android.os.ParcelFileDescriptor#detachFd()}. </li>
+  </ul>
+</li>
+</ul>
+
+
+
+
+
+
+<h3 id="webkit" style="margin-top:1.25em;">WebKit</h3>
+
+<ul>
+
+<li>File scheme cookies
+  <ul>
+    <li>The {@link android.webkit.CookieManager} now supports cookies that use
+the
+<code>file:</code> URI scheme. You can use {@link
+android.webkit.CookieManager#setAcceptFileSchemeCookies(boolean)
+setAcceptFileSchemeCookies()} to
+enable/disable support for file scheme cookies, before constructing an instance
+of <code>WebView</code> or <code>CookieManager</code>. In a
+<code>CookieManager</code> instance, you can check whether file scheme cookies
+is enabled by calling {@link
+android.webkit.CookieManager#allowFileSchemeCookies()}.</li>
+  </ul>
+</li>
+<li>Notification of login request
+  <ul>
+  <li>To support the browser autologin features introduced in Android 3.0, the
+new
+method {@link
+android.webkit.WebViewClient#onReceivedLoginRequest(android.webkit.WebView,java.lang.String, java.lang.String, java.lang.String) onReceivedLoginRequest()}
+notifies the host
+application that an autologin request for the user was processed. </li>
+  </ul>
+</li>
+<li>Removed classes and interfaces
+  <ul>
+    <li>Several classes and interfaces were removed from the public API, after
+previously being in deprecated state. See the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a> for more information.</p></li>
+  </ul>
+  </li>
+</ul>
+
+
+
+<h3 id="browser" style="margin-top:1.25em;">Browser</h3>
+
+<p>The Browser application adds the following features to support web
+applications:</p>
+
+<ul>
+<li>Support for inline playback of video embedded in HTML5
+<code>&lt;video&gt;</code> tag. Playback is hardware-accelerated where possible.
+</li>
+<li>Layer support for fixed position elements for all sites (mobile and
+desktop).</li>
+</ul>
+
+
+
+
+
+<h3 id="features">New feature constants</h3>
+
+<p>The platform adds new hardware feature constants that developers can declare
+in their application manifests, to inform external entities such as Google
+Play of the application's requirement for new hardware capabilities supported
+in this version of the platform. Developers declare these and other feature
+constants in <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
+&lt;uses-feature&gt;}</a> manifest elements.
+
+<ul>
+  <li>{@link android.content.pm.PackageManager#FEATURE_USB_ACCESSORY
+android.hardware.usb.accessory} &mdash; The application uses the <a href="#usb">USB
+API</a> to communicate with external hardware devices connected over USB and
+function as hosts.</li>
+  <li>{@link android.content.pm.PackageManager#FEATURE_USB_HOST
+android.hardware.usb.host} &mdash; The application uses the <a href="#usb">USB API</a>
+to communicate with external hardware devices connected over USB and function as
+devices.</li>
+</ul>
+
+<p>Google Play filters applications based on features declared in <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
+&lt;uses-feature&gt;}</a> manifest elements. For more information about
+declaring features in an application manifest, read <a
+href="{@docRoot}guide/google/play/filters.html">Google Play
+Filters</a>.</p>
+
+
+
+<h3 id="api-diff">API Differences Report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
+Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>.</p>
+
+
+
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
+you need compile the application against the Android library that is provided in
+the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you
+might
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
+manifest.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
diff --git a/docs/html/about/versions/android-3.2.jd b/docs/html/about/versions/android-3.2.jd
new file mode 100644
index 0000000..02111a0
--- /dev/null
+++ b/docs/html/about/versions/android-3.2.jd
@@ -0,0 +1,556 @@
+page.title=Android 3.2 Platform
+sdk.platform.version=3.2
+sdk.platform.apiLevel=13
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#highlights">Highlights</a></li>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/13/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+
+<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android 3.2 is an incremental platform release that adds new
+capabilities for users and developers. The sections below provide an overview
+of the new features and developer APIs.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+
+<h2 id="highlights" style="margin-top:1.5em;">Platform Highlights</h2>
+
+<h3>New user features</h3>
+
+<ul>
+<li><strong>Optimizations for a wider range of tablets</strong>
+
+<p>Android 3.2 includes a variety of optimizations across the system
+to ensure a great user experience on a wider range of tablet devices.</p></li>
+
+<li><strong>Compatibility zoom for fixed-sized apps</strong>
+
+<p>Android 3.2 introduces a new <em>compatibility zoom</em> mode that gives
+users a new way to view fixed-sized apps on larger devices. The new mode provides a
+pixel-scaled alternative to the standard UI stretching for apps that are not
+designed to run on larger screen sizes, such as on tablets. The new mode is
+accessible to users from a menu icon in the system bar, for apps that need
+compatibility support.</p></li>
+
+<li><strong>Media sync from SD card</strong>
+<p>On devices that support an SD card, users can now load media files directly
+from the SD card to apps that use them. A system facility makes the files
+accessible to apps from the system media store.</p></li>
+</ul>
+
+
+<h3>New developer features</h3>
+
+<ul>
+<li><strong>Extended API for managing screens support</strong>
+
+<p>Android 3.2 introduces extensions to the platform's screen support API to
+give developers additional ways to manage application UI across the range of
+Android-powered devices. The API includes new resource qualifiers and new
+manifest attributes that give you more precise control over how your
+apps are displayed on different sizes, rather than relying on generalized
+size categories.</p>
+
+<p>To ensure the best possible display for fixed-sized apps and apps with limited
+support for various screen sizes, the platform also provides a new zoom
+compatibility mode that renders the UI on a smaller screen area, then scales it
+up to fill the space available on the display. For more information about the
+screen support API and the controls it provides, see the sections below. </p></li>
+</ul>
+
+
+<h2 id="api">API Overview</h2>
+
+<h3 id="usb">Screens Support APIs</h3>
+
+<p>Android 3.2 introduces new screens support APIs that give you more
+control over how their applications are displayed across different screen sizes.
+The API builds on the existing screens-support API, including the platform's
+generalized screen density model, but extends it with the ability to precisely
+target specific screen ranges by their dimensions, measured in
+density-independent pixel units (such as 600dp or 720dp wide), rather than
+by their generalized screen sizes (such as large or xlarge)</p>
+
+<p>When designing an application's UI, you can still rely on the platform to
+provide density abstraction, which means that applications do not need to
+compensate for the differences in actual pixel density across devices. You
+can design the application UI according to the amount of horizontal or vertical
+space available. The platform expresses the amount of space available using three new
+characteristics: <em>smallestWidth</em>, <em>width</em>, and
+<em>height</em>.</p>
+
+<ul>
+<li>A screen's <em>smallestWidth</em> is its fundamental minimum size,
+measured in density-independent pixel ("dp") units. Of the screen's height or
+width, it is the shorter of the two. For a screen in portrait orientation, the
+smallestWidth is normally based on its width, while in landscape orientation it is based
+on its height. In all cases, the smallestWidth is derived from a fixed characteristic of the
+screen and the value does not change, regardless of orientation. The smallestWidth
+is important for applications because it represents the shortest possible width
+in which the application UI will need to be drawn, not including screen areas
+reserved by the system.
+</li>
+
+<li>In contrast, a screen's <em>width</em> and <em>height</em> represent the
+current horizontal or vertical space available for application layout, measured
+in "dp" units, not including screen areas reserved by the system. The width and
+height of a screen change when the user switches orientation between landscape
+and portrait. </li>
+
+</ul>
+
+<p>The new screens support API is designed to let you manage application UI
+according to the smallestWidth of the current screen. You can also manage the
+UI according to current width or height, as needed. For those purposes, the API
+provides these tools:</p>
+
+<ul>
+<li>New resource qualifiers for targeting layouts and other resources to a
+minimum smallestWidth, width, or height, and</li> 
+<li>New manifest attributes, for specifying the app's maximum
+screen compatibility range</li>
+</ul>
+
+<p>Additionally, applications can still query the system and manage UI and
+resource loading at runtime, as in the previous versions of the platform.</p>
+
+<p>Since the new API lets you target screens more directly through smallestWidth,
+width, and height, it's helpful to understand the typical
+characteristics of the different screen types. The table below provides some
+examples, measured in "dp" units. </p>
+
+<p class="caption"><strong>Table 1.</strong> Typical devices, with density
+and size in dp.</p>
+
+<table>
+<tr>
+<th>Type</th>
+<th>Density (generalized)</th>
+<th>Dimensions (dp)</th>
+<th>smallestWidth (dp)</th>
+</tr>
+<tr>
+<td>Baseline phone</td>
+<td>mdpi</td>
+<td>320x480</td>
+<td>320</td>
+</td>
+<tr>
+<td>Small tablet/large phone</td>
+<td>mdpi</td>
+<td>480x800</td>
+<td>480</td>
+</tr>
+<tr>
+<td>7-inch tablet</td>
+<td>mdpi</td>
+<td>600x1024</td>
+<td>600</td>
+</tr>
+<tr>
+<td>10-inch tablet</td>
+<td>mdpi</td>
+<td>800x1280</td>
+<td>800</td>
+</tr>
+</table>
+
+<p>The sections below provide more information about the new screen qualifiers
+and manifest attributes. For complete information about how to use the screen
+support API, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
+
+<h4>New resource qualifiers for screens support</h4>
+
+<p>The new resource qualifiers in Android 3.2 let you better target your layouts
+for ranges of screen sizes. Using the qualifiers, you can create resource
+configurations designed for a specific minimum smallestWidth, current width, or
+current height, measured in density-independent pixels.</p>
+
+<p>The new qualifiers are:</p>
+<ul>
+<li><code>swNNNdp</code> &mdash; Specifies the minimum smallestWidth on which
+the resource should be used, measured in "dp" units. As mentioned above, a
+screen's smallestWidth is constant, regardless of orientation. Examples:
+<code>sw320dp</code>, <code>sw720dp</code>, <code>sw720dp</code>.</li>
+
+<li><code>wNNNdp</code> and <code>hNNNdp</code> &mdash; Specifies the minimum 
+width or height on which the resource should be used, measured in "dp" units. As
+mentioned above, a screen's width and height are relative to the orientation of
+the screen and change whenever the orientation changes. Examples:
+<code>w320dp</code>, <code>w720dp</code>, <code>h1024dp</code>.</p></li>
+</ul>
+
+<p>You can also create multiple overlapping resource configurations if needed.
+For example, you could tag some resources for use on any screen wider than 480
+dp, others for wider than 600  dp, and others for wider than 720 dp. When
+multiple resource configurations are qualified for a given screen, the system
+selects the configuration that is the closest match. For precise control over
+which resources are loaded on a given screen, you can tag resources with one
+qualifier or combine several new or existing qualifiers. 
+
+<p>Based on the typical dimensions listed earlier, here are some examples of how
+you could use the new qualifiers:</p>
+
+<pre class="classic prettyprint">res/layout/main_activity.xml   # For phones
+res/layout-sw600dp/main_activity.xml   # For 7” tablets
+res/layout-sw720dp/main_activity.xml   # For 10” tablets
+res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
+res/layout-sw600dp-w720dp/main_activity.xml   # For large width</pre>
+
+<p>Older versions of the platform will ignore the new qualifiers, so you can
+mix them as needed to ensure that your app looks great on any device. Here
+are some examples:</p>
+
+<pre class="classic prettyprint">res/layout/main_activity.xml   # For phones
+res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
+res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets</pre>
+
+<p>For complete information about how to use the new qualifiers, see <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">Using new
+size qualifiers</a>.</p>
+
+<h4>New manifest attributes for screen-size compatibility</h4>
+
+<p>The framework offers a new set of <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a> manifest attributes that let
+you manage your app's support for different screen sizess.
+Specifically, you can specify the largest and smallest screens on which your app
+is designed to run, as well as the largest screen on which it is designed run
+without needing the system's new <a href="{@docRoot}guide/practices/screen-compat-mode.html">screen
+compatibility mode</a>. Like the resource qualifiers described above, the new
+manifest attributes specify the range of screens that the application supports,
+as specified by the smallestWidth. </p>
+
+<p>The new manifest attributes for screen support are: </p>
+
+<ul>
+<li><code>android:compatibleWidthLimitDp="<em>numDp"</em></code> &mdash; This
+attribute lets you specify the maximum smallestWidth on which the application
+can run without needing compatibility mode. If the current screen is larger than
+the value specified, the system displays the application in normal mode but
+allows the user to optionally switch to compatibility mode through a setting in
+the system bar.</li>
+
+<li><code>android:largestWidthLimitDp="<em>numDp</em>"</code> &mdash; This
+attribute lets you specify the maximum smallestWidth on which the application
+is designed to run.  If the current screen is larger than the value specified,
+the system forces the application into screen compatibility mode, to ensure best
+display on the current screen.</li>
+
+<li><code>android:requiresSmallestWidthDp="<em>numDp"</em></code> &mdash; This
+attribute lets you specify the minimum smallestWidth on which the application
+can run. If the current screen is smaller than the value specified, the system
+considers the application incompatible with the device, but does not prevent it
+from being installed and run.</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Google Play does not currently filter
+apps based on any of the attributes above. Support for filtering will be
+added in a later platform release. Applications that require
+filtering based on screen size can use the existing <code>&lt;supports-screens&gt;</code>
+attributes.</p>
+
+<p>For complete information about how to use the new attributes, see <a href="{@docRoot}guide/practices/screens_support.html#DeclaringScreenSizeSupport">Declaring
+screen size support</a>.</p>
+
+<h4>Screen compatibility mode</h4>
+
+<p>Android 3.2 provides a new screen compatibility mode for applications
+explicitly declaring that they do not support screens as large as the one on
+which they are running. This new "zoom" mode is a pixel-scaled &mdash; it
+renders the application in a smaller screen area and then scales the pixels to
+fill the current screen.</p>
+
+<p>By default, the system offers screen compatibility mode as an user option, for apps
+that require it. Users can turn the zoom mode on and off using a control available
+in the system bar. </p>
+
+<p>Because the new screen compatibility mode may not be appropriate for all
+applications, the platform allows the application to disable it using manifest
+attributes. When disabled by the app, the system does not offer "zoom" compatibility
+mode as an option for users when the app is running.</p>
+
+<p class="note"><strong>Note:</strong> For important information about how
+to control compatibility mode in your applications, please review the <a
+href="http://android-developers.blogspot.com/2011/07/new-mode-for-apps-on-large-
+screens.html">New Mode for Apps on Large Screens</a> article on the Android
+Developers Blog. </p>
+
+<h4>New screen density for 720p televisions and similar devices</h4>
+
+<p>To meet the needs of applications running on 720p televisions or similar with
+moderate density screens, Android 3.2 introduces a new generalized density,
+<code>tvdpi</code>, with an approximate dpi of 213. Applications can query for
+the new density in {@link android.util.DisplayMetrics#densityDpi} and can use
+the new <code>tvdpi</code> qualifier to tag resources for televisions and
+similar devices. For example:</p>
+
+<pre class="classic prettyprint">res/drawable-tvdpi/my_icon.png   # Bitmap for tv density</pre>
+
+<p>In general, applications should not need to work with this density. For situations
+where output is needed for a 720p screen, the UI elements can be scaled
+automatically by the platform.</p>
+
+
+<h3 id="ui" style="margin-top:1.25em;">UI framework</h3>
+<ul>
+<li>Fragments
+  <ul>
+    <li>New {@link android.app.Fragment.SavedState} class holds the state
+    information retrieved from a fragment instance through
+    {@link android.app.FragmentManager#saveFragmentInstanceState(android.app.Fragment) saveFragmentInstanceState()}.</li>
+    <li>New method {@link android.app.FragmentManager#saveFragmentInstanceState(android.app.Fragment) saveFragmentInstanceState()}
+    saves the current instance state of
+    the given Fragment. The state can be used later when creating a new instance
+    of the Fragment that matches the current state.</li>
+    <li>New method {@link android.app.Fragment#setInitialSavedState(SavedState) setInitialSavedState()}
+    sets the initial saved state for a Fragment when first constructed.</li>
+    <li>New {@link android.app.Fragment#onViewCreated(android.view.View, android.os.Bundle)
+    onViewCreated()} callback method notifies the Fragment that
+    {@link android.app.Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle) onCreateView()}
+    has returned, but before any saved state has been restored in to the View.</li>
+    <li>{@link android.app.Fragment#isDetached()} method determines whether
+    the Fragment has been explicitly detached from the UI.</li>
+    <li>New {@link android.app.FragmentTransaction#attach(android.app.Fragment) attach()}
+    and {@link android.app.FragmentTransaction#detach(android.app.Fragment) detach()}
+    methods let an application re-attach or detach fragments in the UI.</li>
+    <li>A new {@link android.app.FragmentTransaction#setCustomAnimations(int, int, int, int)
+    setCustomAnimations()} overload method lets you set specific animation
+    resources to run for enter/exit operations and specifically when
+    popping the back stack. The existing implementation does not account
+    for the different behavior of fragments when popping the back stack.</li>
+  </ul>
+</li>
+<li>Screen size information in ActivityInfo and ApplicationInfo
+  <ul>
+    <li>{@link android.content.pm.ActivityInfo} adds {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_SIZE}
+    and {@link android.content.pm.ActivityInfo#CONFIG_SMALLEST_SCREEN_SIZE} as bit masks
+    in {@link android.R.attr#configChanges}. The bits indicate whether an Activity can
+    itself handle the screen size and smallest screen size.</li>
+    <li>{@link android.content.pm.ApplicationInfo} adds
+    {@link android.content.pm.ApplicationInfo#largestWidthLimitDp}, {@link android.content.pm.ApplicationInfo#compatibleWidthLimitDp},
+    and {@link android.content.pm.ApplicationInfo#requiresSmallestWidthDp} fields,
+    derived from the corresponding <code>&lt;supports-screens&gt;</code> attributes
+    in the application manifest file.</li>
+  </ul>
+</li>
+<li>Helpers for getting display size from WindowManager
+  <ul>
+    <li>New methods {@link android.view.Display#getSize(android.graphics.Point)
+    getSize()} and {@link android.view.Display#getRectSize(android.graphics.Rect)
+    getRectSize()} let applications get the raw size of the display.</li>
+  </ul>
+</li>
+<li>New public "holographic" styles
+  <ul>
+    <li>The platform now exposes a variety of public "holographic" styles
+    for text, actionbar widgets and tabs, and more. See
+    {@link android.R.style} for a full list.</li>
+  </ul>
+</li>
+<li>{@link android.app.LocalActivityManager}, {@link android.app.ActivityGroup}, and
+    {@link android.app.LocalActivityManager} are now deprecated
+  <ul>
+    <li>New applications should use Fragments instead of these classes. To
+    continue to run on older versions of the platform, you can use the v4 Support
+    Library (compatibility library), available in the Android SDK. The v4 Support
+    Library provides a version of the Fragment API that is compatible down to
+    Android 1.6 (API level 4).
+    <li>For apps developing against Android 3.0 (API level
+    11) or higher, tabs are typically presented in the UI using the new
+    {@link android.app.ActionBar#newTab() ActionBar.newTab()} and related APIs
+    for placing tabs within their action bar area.</p></li>
+  </ul>
+</li>
+</ul>
+
+<h3 id="media" style="margin-top:1em;">Media framework</h3>
+<ul>
+    <li>Applications that use the platform's media provider ({@link
+    android.provider.MediaStore}) can now read media data directly from the
+    removeable SD card, where supported by the device. Applications can also
+    interact with the SD card files directly, using the MTP API. </li>
+
+</ul>
+<h3 id="graphics" style="margin-top:1.25em;">Graphics</h3>
+<ul>
+<li>Parcelable utilities in Point and PointF
+  <ul>
+    <li>{@link android.graphics.Point} and {@link android.graphics.PointF}
+    classes now include the {@link android.os.Parcelable} interface and utility methods {@link
+    android.graphics.Point#describeContents()}, {@link
+    android.graphics.Point#readFromParcel(android.os.Parcel) readFromParcel()}, and {@link
+    android.graphics.Point#writeToParcel(android.os.Parcel, int) writeToParcel()}.</li>
+  </ul>
+</li>
+</ul>
+
+
+<h3 id="ime" style="margin-top:1.25em;">IME framework</h3>
+<ul>
+    <li>New {@link android.view.KeyEvent#getModifiers()} method for
+    retrieving the current state of the modifier keys.</li>
+</ul>
+
+
+<h3 id="usb" style="margin-top:1.25em;">USB framework</h3>
+<ul>
+    <li>New {@link
+    android.hardware.usb.UsbDeviceConnection#getRawDescriptors()} method for
+    retrieving the raw USB descriptors for the device. You can use the
+    method to access descriptors not supported directly via the higher
+    level APIs.</li>
+</ul>
+
+
+<h3 id="network" style="margin-top:1.25em;">Network</h3>
+<ul>
+<li>Network type constants
+   <ul>
+     <li>{@link android.net.ConnectivityManager} adds the constants {@link
+     android.net.ConnectivityManager#TYPE_ETHERNET} and {@link
+     android.net.ConnectivityManager#TYPE_BLUETOOTH}.</li>
+  </ul>
+</li>
+</ul>
+
+
+<h3 id="telephony" style="margin-top:1.25em;">Telephony</h3>
+<ul>
+    <li>New {@link android.telephony.TelephonyManager#NETWORK_TYPE_HSPAP} network type constant.</li>
+</ul>
+
+<h3 id="other" style="margin-top:1.25em;">Core utilities</h3>
+<ul>
+<li>Parcelable utilities
+  <ul>
+    <li>New interface {@link android.os.Parcelable.ClassLoaderCreator} allows
+    the application to receive the ClassLoader in which the object is being created.</li>
+    <li>New {@link android.os.ParcelFileDescriptor#adoptFd(int) adoptFd}, {@link
+    android.os.ParcelFileDescriptor#dup(java.io.FileDescriptor) dup()}, and {@link
+    android.os.ParcelFileDescriptor#fromFd(int) fromFd()} for managing
+    {@link android.os.ParcelFileDescriptor} objects.</li>
+  </ul>
+</li>
+<li>Binder and IBinder
+  <ul>
+    <li>New method {@link android.os.Binder#dumpAsync(java.io.FileDescriptor, java.lang.String[]) dumpAsync()}
+    in {@link android.os.Binder} and {@link android.os.IBinder} let applications
+    dump to a specified file, ensuring that the target executes asynchronously.</li>
+    <li>New {@link android.os.IBinder} protocol transaction code {@link
+    android.os.IBinder#TWEET_TRANSACTION} lets applications send a tweet
+    to the target object.</li>
+  </ul>
+</li>
+</ul>
+
+
+
+
+<h3 id="features">New feature constants</h3>
+
+<p>The platform adds new hardware feature constants that you can declare
+in their application manifests, to inform external entities such as Google
+Play of required hardware and software capabilities. You declare these
+and other feature constants in <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
+&lt;uses-feature&gt;}</a> manifest elements.
+
+<p>Google Play filters applications based on their <code>&lt;uses-feature&gt;</code> attributes, to ensure that they are available only to devices on which their requirements are met. </p>
+
+<ul>
+<li>Feature constants for landscape or portrait requirements
+
+<p>Android 3.2 introduces new feature constants that let applications specify whether they require display in landscape orientation, portrait orientation, or both. Declaring these constants indicates that the application must not be installed on a device that doesn't offer the associated orientation. Conversely, if one or both of the constants are not declared, it indicates that the application does not have a preference for the undeclared orientations and may be installed on a device that doesn't offer them. </p>
+
+<ul>
+  <li>{@link android.content.pm.PackageManager#FEATURE_SCREEN_LANDSCAPE
+android.hardware.screen.landscape} &mdash; The application requires display in
+landscape orientation.</li>
+  <li>{@link android.content.pm.PackageManager#FEATURE_SCREEN_PORTRAIT
+android.hardware.screen.portrait} &mdash; The application requires display in
+portrait orientation.</li>
+</ul>
+
+<p>A typical application that functions properly in both landscape and portrait orientations would not normally need to declare an orientation requirement. Rather, an application designed primarily for one orientation, such as an app designed for a television, could declare one of the constants to ensure that it isn't available to devices that don't provide that orientation.</p>
+
+<p>If any of activities declared in the manifest request that they run in a specific orientation,
+using the <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
+android:screenOrientation}</a> attribute, then this also declares that the application
+requires that orientation.</p>
+
+</li>
+<li>Other feature constants
+
+<ul>
+  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT
+android.hardware.faketouch.multitouch.distinct} &mdash; The application requires support for emulated mulitouch input with distinct tracking of two or more points.</li>
+
+  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND
+android.hardware.faketouch.multitouch.jazzhand} &mdash; The application requires support for emulated mulitouch input with distinct tracking of five or more points.</li>
+</ul>
+
+</li>
+</ul>
+
+
+<h3 id="api-diff">API Differences Report</h3>
+
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
+Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
+Differences Report</a>.</p>
+
+
+
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
+the framework API. The Android {@sdkPlatformVersion} API
+is assigned an integer identifier &mdash;
+<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
+stored in the system itself. This identifier, called the "API Level", allows the
+system to correctly determine whether an application is compatible with
+the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
+you need compile the application against the Android library that is provided in
+the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you
+might
+also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
+attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
+manifest.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
+
+
diff --git a/docs/html/about/versions/android-4.0-highlights.jd b/docs/html/about/versions/android-4.0-highlights.jd
new file mode 100644
index 0000000..9fdb02c
--- /dev/null
+++ b/docs/html/about/versions/android-4.0-highlights.jd
@@ -0,0 +1,1066 @@
+page.title=Ice Cream Sandwich
+
+@jd:body
+
+
+<style type="text/css">
+#jd-content {
+  max-width:1024px;
+}
+#jd-content div.screenshot {
+  float:left;
+  clear:left;
+  padding:15px 30px 15px 0;
+}
+#jd-content div.video {
+  float:right;
+  padding:0 0 40px 60px;
+}
+#jd-content table.columns {
+  margin:0 0 1em 0;
+}
+#jd-content table.columns td {
+  padding:0;
+}
+#jd-content table.columns td+td {
+  padding:0 2em;
+}
+#jd-content table.columns td img {
+  margin:0;
+}
+#jd-content table.columns td+td>*:first-child {
+  margin-top:-2em;
+}
+.green {
+  color:#8db529;
+  font-weight:bold;
+}
+</style>
+
+<p>Welcome to Android 4.0!</p>
+
+<p>Android 4.0 delivers a refined, unified UI for phones and tablets and
+introduces innovative features for users and developers. This document provides
+a glimpse of the many new features and technologies that make Android 4.0
+simple, beautiful, and beyond smart. <!--For technical details about
+new developer APIs described below, see the <a
+href="{@docRoot}about/versions/android-4.0.html">Android 4.0 API Overview</a>
+document.--></p>
+
+<ul>
+  <li><a href="#UserFeatures">Android 4.0 for Users</a></li>
+  <li><a href="#DeveloperApis">Android 4.0 for Developers</a></li>
+</ul>
+
+<h2 id="UserFeatures" style="clear:right">Android 4.0 for Users</h2>
+
+<div style="padding-bottom:0em;">
+<a href="{@docRoot}sdk/images/4.0/home-lg.png" target="_android"><img
+style="margin-left:10px;float:right;xborder:1px solid #ddd;border-radius: 5px;"
+src="{@docRoot}sdk/images/4.0/home.png" alt="" height="300" width="180" /></a>
+<a href="{@docRoot}sdk/images/4.0/lock-lg.png" target="_android"><img
+style="margin-left:20px;float:right;border:1px solid #ddd;border-radius: 5px;"
+src="{@docRoot}sdk/images/4.0/lock.png" alt="" height="300" width="180" /></a>
+</div>
+
+
+<h3 id="simple" style="color:#258AAF">Simple, beautiful, beyond smart</h3>
+
+<p>Android 4.0 builds on the things people love most about Android &mdash; easy
+multitasking, rich notifications, customizable home screens, resizable widgets,
+and deep interactivity &mdash; and adds powerful new ways of communicating and
+sharing.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Refined, evolved UI</strong></p>
+
+<p>Focused on bringing the power of Android to the surface, Android 4.0 makes
+<strong>common actions more visible</strong> and lets users navigate with
+simple, intuitive gestures. Refined <strong>animations</strong> and feedback
+throughout the system make interactions engaging and interesting. An entirely
+<strong>new typeface</strong> optimized for high-resolution screens improves
+readability and brings a polished, modern feel to the user interface.</p>
+
+<p>Virtual buttons in the System Bar let users navigate instantly to Back, Home,
+and Recent Apps. The <strong>System Bar</strong> and virtual buttons are present
+across all apps, but can be dimmed by applications for full-screen viewing.
+Users can access each application's contextual options in the <strong>Action
+Bar</strong>, displayed at the top (and sometimes also at the bottom) of the
+screen.</p>
+
+<p><strong>Multitasking</strong> is a key strength of Android and it's made even
+easier and more visual on Android 4.0. The Recent Apps button lets users jump
+instantly from one task to another using the list in the System Bar. The list
+pops up to show thumbnail images of apps used recently &mdash; tapping a
+thumbnail switches to the app.</p>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:.5em;float:left;width:182px;padding-top:.5em;">
+<a href="{@docRoot}sdk/images/4.0/tasks-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/tasks.png" alt="" height="240" width="144" style="border:1px
+solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1em;font-size:.9em;padding-right:1em;">The Recent Apps list makes
+multitasking simple.</div>
+<a href="{@docRoot}sdk/images/4.0/lock-camera-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/lock-camera.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1em;font-size:.9em;padding-right:1.75em;">Jump to the camera or see
+notifications without unlocking.</div>
+<a href="{@docRoot}sdk/images/4.0/contact-call-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
+<!--<a href="{@docRoot}sdk/images/4.0/quick-response-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/quick-responses-new.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>-->
+<div style="padding-bottom:.5em;font-size:.9em;padding-right:1.75em;">For incoming calls, you can
+respond instantly by&nbsp;text.</div>
+</div>
+</div>
+
+<p>Rich and interactive <strong>notifications</strong> let users keep in
+constant touch with incoming messages, play music tracks, see real-time updates
+from apps, and much more. On smaller-screen devices, notifications appear at the
+top of the screen, while on larger-screen devices they appear in the System
+Bar.</p>
+
+<div  style="padding-top:0em;">
+<div
+style="float:right;margin-left:20px;margin-top:.5em;margin-bottom:0;padding-bottom:
+0 ; width:326px">
+<a href="{@docRoot}sdk/images/4.0/allapps-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/allapps.png" alt="" height="240" width="144" style="border:1px
+solid #ddd;border-radius: 6px;" /></a>
+<a href="{@docRoot}sdk/images/4.0/calendar-widget-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/calendar-widget.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
+3.</strong>-->The All Apps launcher (left) and resizable widgets (right) give you apps and rich
+content from the home screen.</div>
+</div>
+</div>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Home screen folders and
+favorites tray</strong></p>
+
+<p>New home screen <strong>folders</strong> offer a new way for users to group
+their apps and shortcuts logically, just by dragging one onto another. Also, 
+in All Apps launcher, users can now simply <strong>drag an app</strong> to get
+information about it or immediately uninstall it, or disable a pre-installed app.</p>
+
+<p>On smaller-screen devices, the home screen now includes a customizable
+<strong>favorites tray</strong> visible from all home screens. Users can drag
+apps, shortcuts, folders, and other priority items in or out of the favorites
+tray for instant access from any home screen.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Resizable
+widgets</strong></p>
+
+<p>Home screens in Android 4.0 are designed to be content-rich and customizable.
+Users can do much more than add shortcuts &mdash; they can embed live
+application content directly through interactive <strong>widgets</strong>.
+Widgets let users check email, flip through a calendar, play music, check social
+streams, and more &mdash; right from the home screen, without having to launch
+apps. Widgets are resizable, so users can expand them to show more content or
+shrink them to save space.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>New lock screen
+actions</strong></p>
+
+<p>The lock screens now let users do more without unlocking. From the slide lock
+screen, users can <strong>jump directly to the camera</strong> for a picture or
+<strong>pull down the notifications window</strong> to check for messages. When
+listening to music, users can even manage music tracks and see album art. </p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Quick responses for
+incoming calls</strong></p>
+
+<p>When an incoming call arrives, users can now quickly <strong>respond by text
+message</strong>, without needing to pick up the call or unlock the device. On
+the incoming call screen, users simply slide a control to see a list of text
+responses and then tap to send and end the call. Users can add their own
+responses and manage the list from the Settings app.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Swipe to dismiss
+notifications, tasks, and browser tabs</strong></p>
+
+<p>Android 4.0 makes managing notifications, recent apps, and browser tabs even
+easier. Users can now dismiss individual notifications, apps from the Recent
+Apps list, and browser tabs with a simple swipe of a finger. </p>
+
+<div  style="padding-top:0em;">
+<div
+style="float:right;margin-left:20px;margin-top:1.5em;margin-bottom:0;padding-bottom
+: 0 ; width:200px">
+<a href="{@docRoot}sdk/images/4.0/text-replace-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/text-replace.png" alt="" width="190" style="border:1px solid
+#ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
+3.</strong>-->A spell-checker lets you find errors and fix them faster. </div>
+<a href="{@docRoot}sdk/images/4.0/tts-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/tts.png" alt="" width="190" style="border:1px solid
+#ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A powerful voice input
+engine lets you dictate continously.</div>
+</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Improved text input and
+spell-checking</strong></p>
+  
+<p>The soft keyboard in Android 4.0 makes text input even faster and more
+accurate. Error correction and word suggestion are improved through a new set of
+default dictionaries and more accurate heuristics for handling cases such as
+double-typed characters, skipped letters, and omitted spaces. Word suggestion
+is also improved and the suggestion strip is simplified to show only three
+words at a time.</p>
+
+<p>To fix misspelled words more easily, Android 4.0 adds a
+<strong>spell-checker</strong> that locates and underlines errors and suggests
+replacement words. With one tap, users can choose from multiple spelling
+suggestions, delete a word, or add it to the dictionary. Users can even tap to
+see replacement suggestions for words that are spelled correctly. For
+specialized features or additional languages, users can now download and install
+third-party dictionaries, spell-checkers, and other text services.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Powerful voice input
+engine</strong></p>
+
+<p>Android 4.0 introduces a powerful new voice input engine that offers a
+continuous "open microphone" experience and streaming voice recognition. The new
+voice input engine lets users dictate the text they want, for as long as they
+want, using the language they want. Users can <strong>speak continously</strong> for a prolonged
+time, even pausing for intervals if needed, and dictate punctuation to create
+correct sentences. As the voice input engine enters text, it underlines possible
+dictation errors in gray. After dictating, users can tap the underlined words to
+quickly replace them from a list of suggestions.</p>
+
+<div  style="padding-top:0em;">
+<div style="margsin-right:.8em;float:left;width:350px;padding-top:1em;">
+<a href="{@docRoot}sdk/images/4.0/usage-all-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/usage-all.png" alt="" height="240" width="144" style="border:1px
+solid #ddd;border-radius: 6px;" /></a>
+<a href="{@docRoot}sdk/images/4.0/usage-maps-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/usage-maps.png" alt="" height="240" width="144" style="border:1px
+solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1em;font-size:.9em;padding-right:1.75em;"><!--<strong>Figure
+3.</strong>--> Data usage controls let you monitor total usage by network type and application and
+then set limits if needed.</div>
+</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Control over network
+data</strong></p>
+
+<p>Mobile devices can make extensive use of network data for streaming content,
+synchronizing data, downloading apps, and more. To meet the needs of users with
+<strong>tiered or metered data plans</strong>, Android 4.0 adds new controls for
+managing network data usage.</p>
+
+<p>In the Settings app, colorful charts show the total data usage on each
+network type (mobile or Wi-Fi), as well as amount of data used by each running
+application. Based on their data plans, users can optionally set warning levels
+or hard limits on data usage or disable mobile data altogether. Users can also
+manage the background data used by individual applications as needed.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Designed for
+accessibility</strong></p>
+
+<p>A variety of new features greatly enhance the accessibility of Android 4.0
+for blind or visually impaired users. Most important is a new
+<strong>explore-by-touch mode</strong> that lets users navigate without having
+to see the screen. Touching the screen once triggers audible feedback that
+identifies the UI component below; a second touch in the same component
+activates it with a full touch event. The new mode is especially important to
+support users on new devices that use virtual buttons in the System Bar, rather
+than dedicated hardware buttons or trackballs. Also, standard apps are updated
+to offer an improved accessibility experience. The <strong>Browser</strong>
+supports a script-based screen reader for reading favorite web content and
+navigating sites. For improved readability, users can also increase the default
+font size used across&nbsp;the&nbsp;system.</p>
+
+<p>The accessibility experience begins at first setup &mdash; a simple
+<strong>touch gesture</strong> during setup (clockwise square from upper left)
+activates all accessibility features and loads a setup tutorial. Once
+accessibility features are active, everything visible on the screen can be
+spoken aloud by the standard screen reader.</p>
+
+
+<h3 id="comms" style="color:#258AAF">Communication and sharing</h3>
+
+<div  style="padding-top:0em;">
+<div
+style="float:right;margin-left:20px;margin-top:1.5em;margin-bottom:0;padding-bottom
+: 0 ; width:490px">
+<!--<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;" />-->
+<a href="{@docRoot}sdk/images/4.0/contact-faves-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/contact-faves.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
+<a href="{@docRoot}sdk/images/4.0/contact-connect-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/contact-connect.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
+<a href="{@docRoot}sdk/images/4.0/contact-email-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/contact-email.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
+
+<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
+3.</strong>-->Contacts and profiles are integrated across apps and social networks, for a
+consistent, personal experience everywhere &mdash; from incoming calls to emails.</div>
+</div>
+</div>
+
+<p>Designed for the way people live, Android 4.0 integrates rich social
+communication and sharing touchpoints across the system, making it easy to talk,
+email, text, and share.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>People and
+profiles</strong></p>
+
+<p>Throughout the system, a user’s social groups, profiles, and contacts are
+linked together and integrated for easy accessibility. At the center is a new
+<strong>People app</strong> that offers richer profile information, including a
+large profile picture, phone numbers, addresses and accounts, status updates,
+events, stream items, and a new button for connecting on integrated social networks. </p>
+
+<p>The user's own contact information is stored in a new <strong>"Me"
+profile</strong>, allowing easier sharing with apps and people. All of the
+user's integrated contacts are displayed in an easy to manage list, including
+controls over which contacts are shown from any integrated account or social
+network. Wherever the user navigates across the system, tapping a profile photo
+displays Quick Contacts, with large profile pictures, shortcuts to phone numbers,
+text messaging, and more. </p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Unified calendar, visual
+voicemail</strong></p>
+
+<p>To help organize appointments and events, an updated <strong>Calendar
+app</strong> brings together personal, work, school, and social agendas. With
+user permission, other applications can contribute events to the calendar and
+manage reminders, for an integrated view across multiple calendar providers. The
+app is redesigned to let users manage events more easily. Calendars are
+color-coded and users can <strong>swipe left or right</strong> to change dates
+and pinch to zoom in or out agendas. </p>
+
+<p>In the phone app, a new <strong>visual voicemail</strong> features integrates
+incoming messages, voice transcriptions, and audio files from one or more
+providers. Third-party applications can integrate with the Phone app to add
+their own voice messages, transcriptions, and more to the visual voicemail
+inbox. </p>
+
+<div  style="padding-top:0em;">
+<div style="margin-right:0em;float:left;width:282px;padding-top:1em;">
+<a href="{@docRoot}sdk/images/4.0/camera-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/camera.png" alt="" width="240" height="144" style="border:1px
+solid #ddd;border-radius: 6px;" /></a>
+<a href="{@docRoot}sdk/images/4.0/gallery-edit-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/gallery-edit.png" alt="" width="240" height="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<a href="{@docRoot}sdk/images/4.0/gallery-share-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/gallery-share.png" alt="" width="240" height="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1em;font-size:.9em;padding-right:2.75em;">Capture the picture you want,
+edit, and share instantly. </div>
+</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Rich and versatile camera
+capabilities</strong></p>
+
+<p>The Camera app includes many new features that let users capture special moments
+with great photos and videos. After capturing images, they can edit and share
+them easily with friends. </p>
+
+<p>When taking pictures, <strong>continuous focus</strong>, <strong>zero shutter
+lag exposure</strong>, and decreased shot-to-shot speed help capture clear,
+precise images. <strong>Stabilized image zoom</strong> lets users compose photos
+and video in the way they want, including while video is recording. For new
+flexibility and convenience while shooting video, users can now take
+<strong>snapshots at full video resolution</strong> just by tapping the screen
+as video continues to record.</p>
+
+<p>To make it easier to take great pictures of people, built-in <strong>face
+detection</strong> locates faces in the frame and automatically sets focus. For
+more control, users can <strong>tap to focus</strong> anywhere in the preview
+image. </p>
+
+<p>For capturing larger scenes, the Camera introduces a <strong>single-motion
+panorama</strong> mode. In this mode, the user starts an exposure and then
+slowly turns the Camera to encompass as wide a perspective as needed. The Camera
+assembles the full range of continuous imagery into a single panoramic
+photo.</p>
+
+<p>After taking a picture or video, users can quickly share it by email, text
+message, bluetooth, social networks, and more, just by tapping the thumbnail in
+the camera controls. </p>
+
+
+<div  style="padding-top:0em;">
+<div
+style="float:right;margin-left:20px;padding-top:1em;margin-bottom:1em;padding-
+bottom : 0 ;width:160px">
+<img src="{@docRoot}sdk/images/4.0/gallery-widget.png" alt="" width="144" style="border:1px solid
+#ddd;border-radius: 6px;" />
+<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A Photo Gallery widget
+on the home screen.</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Redesigned Gallery app
+with photo editor</strong></p>
+
+<p>The Gallery app now makes it easier to manage, show, and share photos and
+videos. For managing collections, a <strong>redesigned album layout</strong>
+shows many more albums and offers larger thumbnails. There are many ways to sort
+albums, including by time, location, people, and tags. To help pictures look
+their best, the Gallery now includes a powerful <strong>photo editor</strong>.
+Users can crop and rotate pictures, set levels, remove red eyes, add effects,
+and much more. After retouching, users can select one or multiple pictures or
+videos to share instantly over email, text messaging, bluetooth, social
+networks, or other apps.</p>
+
+<p>An improved <strong>Picture Gallery widget</strong> lets users look at
+pictures directly on their home screen. The widget can display pictures from a
+selected album, shuffle pictures from all albums, or show a single image. After
+adding the widget to the home screen, users can flick through the photo stacks
+to locate the image they want, then tap to load it in Gallery. </p>
+
+<div  style="padding-top:0em;clear:right;">
+<div
+style="float:right;margin-left:20px;padding-top:1em;margin-bottom:1em;padding-
+bottom : 0 ;width:320px">
+<img src="{@docRoot}sdk/images/4.0/live-effects.png" alt="" width="297" style="border:1px solid
+#ddd;border-radius: 6px;" />
+<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Live Effects let you
+change backgrounds and use Silly Faces during video.</div>
+</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Live Effects for transforming
+video</strong></p>
+
+<p>Live Effects is a collection of graphical transformations that add interest
+and fun to videos captured in the Camera app. For example, users can
+<strong>change the background</strong> behind them to any stock or custom image,
+for just the right setting when shooting videeo. Also available for video is
+Silly Faces, a set of morphing effects that use state-of-the-art face
+recognition and GPU filters to transform facial features. For example, you can
+use effects such as small eyes, big mouth, big nose, face squeeze, and more.
+Outside of the Camera app, Live Effects is available during video chat in the
+Google Talk app.</p>
+
+<div  style="padding-top:0em;">
+<div style="margsin-right:.8em;float:left;width:186px;padding-top:1em;">
+<a href="{@docRoot}sdk/images/4.0/screenshot-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/screenshot.png" alt="" height="240"  width="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"> Snapping a
+screenshot.</div>
+</div>
+</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Sharing with screenshots</strong></p>
+
+<p>Users can now share what's on their screens more easily by taking
+screenshots. Hardware buttons let them snap a <strong>screenshot</strong> and
+store it locally. Afterward, they can view, edit, and share the screen shot in
+Gallery or a similar app.</p>
+
+
+<h3 id="cloud" style="color:#258AAF">Cloud-connected experience</h3>
+
+<div  style="padding-top:0em;">
+<div
+style="float:right;margin-left:20px;padding-top:1em;margin-bottom:0;padding-bottom:
+0 ; width:326px">
+<a href="{@docRoot}sdk/images/4.0/browser-tabs-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/browser-tabs.png" alt="" height="240" width="144"
+style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<a href="{@docRoot}sdk/images/4.0/browser-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/browser.png" alt="" height="240" width="144" style="border:1px
+solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure
+3.</strong>-->The Browser tabs menu <em>(left)</em> lets you quickly switch browser tabs. The
+options menu <em>(right)</em> gives you new ways to manage your browsing experience.</div>
+<img src="{@docRoot}sdk/images/4.0/bbench.png" alt="" width="310" />
+<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Benchmark comparisons of
+Android Browser.</div>
+</div>
+</div>
+
+<p>Android has always been cloud-connected, letting users browse the web and
+sync photos, apps, games, email, and contacts &mdash; wherever they are and
+across all of their devices. Android 4.0 adds new browsing and email
+capabilities to let users take even more with them and keep communication
+organized.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Powerful web
+browsing</strong></p>
+
+<p>The Android Browser offers an experience that’s as rich and convenient as a
+desktop browser. It lets users instantly sync and manage <strong>Google Chrome
+bookmarks</strong> from all of their accounts, jump to their favorite content
+faster, and even save it for reading later in case there's no network
+available.</p>
+
+<p>To get the most out of web content, users can now request full
+<strong>desktop versions</strong> of web sites, rather than their mobile
+versions. Users can set their preference for web sites separately for each
+<strong>browser tab</strong>. For longer content, users can save a copy for
+<strong>offline reading</strong>. To find and open saved pages, users can browse
+a visual list that’s included with browser bookmarks and history.  For better
+readability and accessibility, users can increase the browser’s <strong>zoom
+levels</strong> and override the system default <strong>text sizes</strong>.</p>
+
+<p>Across all types of content, the Android Browser offers dramatically improved
+<strong>page rendering performance</strong> through updated versions of the
+WebKit core and the V8 Crankshaft compilation engine for JavaScript. In
+benchmarks run on a Nexus S device, the Android 4.0 browser showed an
+improvement of nearly 220% over the Android 2.3 browser in the V8 Benchmark
+Suite and more than 35% in the SunSpider 9.1 JavaScript Benchmark. When run on a
+Galaxy Nexus device, the Android 4.0 browser showed improvement of nearly 550%
+in the V8 benchmark and nearly 70% in the SunSpider benchmark.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Improved
+email</strong></p>
+
+<p>In Android 4.0, email is easier to send, read, and manage. For composing
+email, <strong>improved auto-completion</strong> of recipients helps with
+finding and adding frequent contacts more quickly. For easier input of frequent
+text, users can now create <strong>quick responses</strong> and store them in
+the app, then enter them from a convenient menu when composing. When replying to
+a message, users can now toggle the message to Reply All and Forward without
+changing screens.</p>
+
+<p>For easier browsing across accounts and labels, the app adds an
+<strong>integrated menu</strong> of accounts and recent labels. To help users
+locate and organize IMAP and Exchange email, the Email app now supports
+<strong>nested mail subfolders</strong>, each with synchronization rules. Users
+can also search across folders on the server, for faster results. </p>
+
+<p>For <strong>enterprises</strong>, the Email app supports EAS v14. It supports
+EAS certificate authentication, provides ABQ strings for device type and mode,
+and allows automatic sync to be disabled while roaming. Administrators can also
+limit attachment size or disable attachments.</p>
+
+<p>For keeping track of incoming email more easily, a <strong>resizable Email
+widget</strong> lets users flick through recent email right from the home
+screen, then jump into the Email app to compose or reply.</p>
+
+
+<div  style="padding-top:0em;">
+<div style="margsin-right:.8em;float:left;width:186px;padding-top:1em;">
+<a href="{@docRoot}sdk/images/4.0/beam-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/beam.png" alt="" height="240" width="144" style="border:1px solid
+#ddd;border-radius: 6px;" /></a>
+<div
+style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em;padding-right:1.5em;">Android
+Beam lets users share what they are using with a single tap.</div>
+</div>
+</div>
+
+<h3 id="innovation" style="color:#258AAF">Innovation</h3>
+
+<p>Android is continously driving innovation forward, pushing the boundaries of
+communication and sharing with new capabilities and interactions.</p>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Android Beam for
+NFC-based sharing</strong></p>
+
+<p>Android Beam is an innovative, convenient feature for sharing across two
+NFC-enabled devices, It lets people instantly exchange favorite apps, contacts,
+music, videos &mdash; almost anything. It’s incredibly simple and convenient to
+use &mdash; there’s no menu to open, application to launch, or pairing needed.
+Just touch one Android-powered phone to another, then tap to send.</p>
+
+<p>For sharing apps, Android Beam pushes a link to the app's details page in
+Google Play. On the other device, the Google Play client app launches and loads the
+details page, for easy downloading of the app. Individual apps can build on
+Android Beam to add other types of interactions, such as passing game scores,
+initiating a multiplayer game or chat, and more.</p>
+
+<div  style="padding-top:0em;">
+<div
+style="float:right;margin-left:20px;margin-top:.5em;margin-bottom:0;padding-bottom:
+0 ; width:160px">
+<a href="{@docRoot}sdk/images/4.0/face-unlock-lg.png" target="_android">
+<img src="{@docRoot}sdk/images/4.0/face-unlock.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
+<div style="padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Face recognition lets you
+unlock your phone with your face.</div>
+</div>
+</div>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Face Unlock</strong></p>
+
+<p>Android 4.0 introduces a completely new approach to securing a device, making
+each person's device even more personal &mdash; Face Unlock is a new screen-lock
+option that lets users unlock their devices with their faces. It takes advantage
+of the device front-facing camera and state-of-the-art facial recognition
+technology to register a face during setup and then to recognize it again when
+unlocking the device. Users just hold their devices in front of their faces to
+unlock, or use a backup PIN or pattern. </p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Wi-Fi Direct and Bluetooth HDP</strong></p>
+
+<p>Support for <strong>Wi-Fi Direct</strong> lets users connect directly to
+nearby peer devices over Wi-Fi, for more reliable, higher-speed communication.
+No internet connection or tethering is needed. Through third-party apps, users
+can connect to compatible devices to take advantage of new features such as
+instant sharing of files, photos, or other media; streaming video or audio from
+another device; or connecting to compatible printers or other devices.</p>
+
+<p>Android 4.0 also introduces built-in support for connecting to <strong>Bluetooth Health Device Profile (HDP)</strong> devices. With support from third-party apps, users can connect to wireless medical devices and sensors in hospitals, fitness centers, homes, and elsewhere.</p>
+
+
+<h2 id="DeveloperApis" style="clear:right">New Developer Features</h2>
+
+<!-- <ul>
+<li><a href="#ui-dev">Unified UI framework for phones, tablets, and more</a></li>
+<li><a href="#communication-dev">Communication and sharing</a></li>
+<li><a href="#media-dev">New media capabilities</a></li>
+<li><a href="#connectivity-dev">New types of connectivity</a></li>
+<li><a href="#uicomp-dev">New UI components and capabilities</a></li>
+<li><a href="input-dev">New input types and text services</a></li>
+<li><a href="#accessibility-dev">Enhanced accessibility APIs</a></li>
+<li><a href="#data-dev">Efficient network usage</a></li>
+<li><a href="#security-dev">Security for apps and content</a></li>
+<li><a href="#enterprise-dev">Enhancements for Enterprise</a></li>
+</ul>-->
+
+<h3 id="ui-dev">Unified UI framework for phones, tablets, and more</h3>
+
+<p>Android 4.0 brings a unified UI framework that lets developers create
+elegant, innovative apps for phones, tablets, and more. It includes all of the
+familiar Android 3.x interface elements and APIs &mdash; fragments, content
+loaders, Action Bar, rich notifications, resizable home screen widgets, and more
+&mdash; as well as new elements and APIs.</p>
+
+<p>For developers, the unified UI framework in Android 4.0 means new UI tools,
+consistent design practices, simplified code and resources, and streamlined
+development across the range of Android-powered devices.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h3>Key Honeycomb developer features, <br>now for phones too</h3>
+
+<p>Core UI</p>
+<ul>
+<li>Fragments and content loaders</li>
+<li>Resizeable home screen widgets</li>
+<li>Rich notifications</li>
+<li>Multi-selection, drag-drop, clipboard</li>
+<li>Improved screen-support API</li>
+<li>Hardware-accelerated 2D graphics</li>
+</ul>
+
+<p>Graphics and animation</p>
+<ul>
+<li>Property-based animation</li>
+<li>Renderscript 3D graphics</li>
+</ul>
+
+<p>Media and connectivity</p>
+<ul>
+<li>HTTP Live streaming</li>
+<li>Bluetooth A2DP and HSP devices</li>
+<li>Support for RTP</li>
+<li>MTP/PTP file transfer</li>
+<li>DRM framework</li>
+<li>Input from keyboard, mouse, gamepad, joystick</li>
+</ul>
+
+<p>Enterprise</p>
+<ul>
+<li>Full device encryption</li>
+<li>DPM policies for encrypted storage and passwords</li>
+</ul>
+</div>
+</div>
+
+<h3 id="communication-dev">Communication and sharing</h3>
+
+<p>Android 4.0 extends social and sharing features to any application on the
+device. Applications can integrate contacts, profile data, stream items, 
+and calendar events from any of the user’s activities or social networks.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Social API</strong></p>
+
+<p>A shared social provider and API provide a new unified store for contacts,
+profile data, stream items, and photos. Any app or social network with user
+permission can contribute raw contacts and make them accessible to other apps
+and networks. Applications with user permission can also read profile data from
+the provider and display it in their applications.</p>
+
+<p>The social API lets applications store standard contact data as well as new
+types of content for any given contact, including large profile photos, stream
+items, and recent activity feedback. Recent activity feedback is a standard way for
+applications to “tag” a contact with common activity, such as when the user
+calls the contact or sends an email or SMS message. The social provider uses the
+recent activity feedback as a new signal in ranking, such as for name
+auto-complete, to keep the most relevant contacts ranked closest to the top.</p>
+
+<p>Applications can also let users set up a social connection to a contact from
+the People app. When the user touches Add Connection in a contact, the app
+sends a public intent that other apps can handle, displaying any UI needed
+to create the social connection.</p>
+
+<p>Building on the social API, developers can add powerful new interactions that
+span multiple social networks and contacts sources.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Calendar API</strong></p>
+
+<p>A shared calendar content provider and framework API make it easier for
+developers to add calendar services to their apps.</p>
+
+<p>With user permission, any application can add events to the shared database
+and manage dates, attendees, alerts, and reminders. Applications can also read
+entries from the database, including events contributed by other applications,
+and handle the display of event alerts and reminders. Using the calendar
+provider, applications can take advantage of event data sourced from a variety
+of apps and protocols, to offer innovative ways of viewing and managing a user’s
+events. Apps can also use calendar data to improve the relevance of their
+other content.</p>
+
+<p>For lighter-weight access to calendar services, the Calendar app defines a
+set of public Intents for creating, viewing, and editing events. Rather than
+needing to implement a calendar UI and integrate directly with the calendar
+provider, applications can simply broadcast calendar Intents. When the Calendar
+app receives the Intents, it launches the appropriate UI and stores any event
+data entered. Using calendar Intents, for example, apps can let users add events
+directly from lists, dialogs, or home screen widgets, such as for making
+restaurant reservations or booking time with friends.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Visual voicemail
+API</strong></p>
+
+<p>A shared Voicemail provider and API allow developers to build applications
+that contribute to a unified voicemail store.  Voicemails are displayed and
+played in the call log tab of the platform’s Phone app.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Android Beam</strong></p>
+
+<p>Android Beam is an NFC-based feature that lets users instantly share
+information about the apps they are using, just by touching two NFC-enabled
+phones together. When the devices are in range &mdash; within a few centimeters
+&mdash; the system sets up an NFC connection and displays a sharing UI. To share
+whatever they are viewing with the other device, users just touch the screen.
+</p>
+
+<p>For developers, Android Beam is a new way of triggering almost any type of
+proximity-based interaction. For example, it can let users instantly exchange
+contacts, set up multiplayer gaming, join a chat or video call, share a photo or
+video, and more. The system provides the low-level NFC support and the sharing
+UI, while the foreground app provides lightweight data to transfer to the other
+device. Developers have complete control over the data that is shared and how it
+is handled, so almost any interaction is possible. For larger payloads,
+developers can even use Android Beam to initiate a connection and transfer the
+data over Bluetooth, without the need for user-visible pairing.</p>
+
+<p>Even if developers do not add custom interactions based on Android Beam they
+can still benefit from it being deeply integrated into Android. By default the
+system shares the app’s Google Play URL, so it’s easy for the user to
+download or purchase the app right away.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Modular sharing
+widget</strong></p>
+
+<p>The UI framework includes a new widget, ShareActionProvider, that lets
+developers quickly embed standard share functionality and UI in the Action Bar
+of their applications. Developers simply add ShareActionProvider to the menu and
+set an intent that describes the desired sharing action. The system handles the
+rest, building up the list of applications that can handle the share intent and
+dispatching the intent when the user chooses from the menu.</p>
+
+
+<h3 id="media-dev">New media capabilities</h3>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Low-level streaming
+multimedia</strong></p>
+
+<p>Android 4.0 provides a direct, efficient path for low-level streaming
+multimedia. The new path is ideal for applications that need to maintain
+complete control over media data before passing it to the platform for
+presentation. For example, media applications can now retrieve data from any
+source, apply proprietary encryption/decryption, and then send the data to the
+platform for display.</p>
+
+<p>Applications can now send processed data to the platform as a multiplexed
+stream of audio/video content in MPEG-2 transport stream format. The platform
+de-muxes, decodes, and renders the content. The audio track is rendered to the
+active audio device, while the video track is rendered to either a Surface or a
+SurfaceTexture. When rendering to a SurfaceTexture, the application can apply
+subsequent graphics effects to each frame using OpenGL.</p>
+
+<p>To support this low-level streaming, the platform introduces a new native API
+based on <a href="http://www.khronos.org/openmax/al/" target="_top">Khronos
+OpenMAX AL 1.0.1</a>. The  API is implemented on the same underlying services as
+the platform’s existing OpenSL ES API, so developers can make use of both APIs
+together if needed. Tools support for low-level streaming multimedia will be
+available in an upcoming release of the Android NDK.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>New camera
+capabilities</strong></p>
+
+<p>Developers can take advantage of a variety of new camera features in Android
+4.0. ZSL exposure, continuous focus, and image zoom let apps capture better
+still and video images, including during video capture. Apps can even capture
+full-resolution snapshots while shooting video. Apps can now set custom metering
+regions in a camera preview, then manage white balance and exposure dynamically
+for those regions. For easier focusing and image processing, a face-detection
+service identifies and tracks faces in a preview and returns their screen
+coordinates.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Media effects for
+transforming images and video</strong></p>
+
+<p>A set of high-performance transformation filters let developers apply rich
+effects to any image passed as an OpenGL ES 2.0 texture. Developers can adjust
+color levels and brightness, change backgrounds, sharpen, crop, rotate, add lens
+distortion, and apply other effects. The transformations are processed by the
+GPU, so they are fast enough for processing image frames loaded from disk,
+camera, or video stream.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Audio remote
+controls</strong></p>
+
+<p>Android 4.0 adds a new audio remote control API that lets media applications
+integrate with playback controls that are displayed in a remote view. Media
+applications can integrate with a remote music playback control that’s built
+into in the platform’s lock screen, allowing users to control song selection and
+playback without having to unlock and navigate to the music app.</p>
+
+<p>Using the audio remote control API, any music or media app can register to
+receive media button events from the remote control and then manage play state
+accordingly. The application can also supply metadata to the remote control,
+such as album art or image, play state, track number and description, duration,
+genre, and more.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>New media codecs and
+containers</strong></p>
+
+<p>Android 4.0 adds support for additional media types and containers to give
+developers access to the formats they need. For high-quality compressed images,
+the media framework adds support for WebP content. For video, the framework now
+supports streaming VP8 content. For streaming multimedia, the framework supports
+HTTP Live streaming protocol version 3 and encoding of ADTS-contained AAC
+content. Additionally, developers can now use Matroska containers for Vorbis and
+VP8 content.</p>
+
+
+<h3 id="connectivity-dev">New types of connectivity</h3>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Wi-Fi Direct</strong></p>
+
+<p>Developers can use a framework API to discover and connect directly to nearby
+devices over a high-performance, secure Wi-Fi Direct connection. No internet
+connection or hotspot is needed.</p>
+
+<p>Wi-Fi Direct opens new opportunities for developers to add innovative
+features to their applications. Applications can use Wi-Fi Direct to share
+files, photos, or other media between devices or between a desktop computer and
+an Android-powered device. Applications could also use Wi-Fi Direct to stream
+media content from a peer device such as a digital television or audio player,
+connect a group of users for gaming, print files, and more.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Bluetooth Health Device
+Profile (HDP)</strong></p>
+
+<p>Developers can now build powerful medical applications that use Bluetooth to
+communicate with wireless devices and sensors in hospitals, fitness centers,
+homes, and elsewhere. Applications can collect and manage data from HDP source
+devices and transmit it to backend medical applications such as records systems,
+data analysis services, and others.</p>
+
+<p>Using a framework API, applications can use Bluetooth to discover nearby
+devices, establish reliable or streaming data channels, and manage data
+transmission. Applications can supply any IEEE 11073 Manager to retrieve and
+interpret health data from Continua-certified devices such as heart-rate
+monitors, blood meters, thermometers, and scales. </p>
+
+
+<h3 id="uicomp-dev">New UI components and capabilities</h3>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Layout
+enhancements</strong></p>
+
+<p>A new layout, GridLayout, improves the performance of Android applications by
+supporting flatter view hierarchies that are faster to layout and render.
+Because hierarchies are flatter, developers can also manage alignments between
+components that are visually related to each other even when they are not
+logically related, for precise control over application UI. GridLayout is also
+specifically designed to be configured by drag-and-drop design tools such as the
+ADT Plug-in for Eclipse.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>OpenGL ES texture
+views</strong></p>
+
+<p>A new TextureView object lets developers directly integrate OpenGL ES
+textures as rendering targets in a UI hierarchy. The object lets developers
+display and manipulate OpenGL ES rendering just as they would a normal view
+object in the hierarchy, including moving, transforming, and animating the view
+as needed. The TextureView object makes it easy for developers to embed camera
+preview, decoded video, OpenGL game scenes, and more. TextureView can be viewed
+as a more powerful version of the existing SurfaceView object, since it offers
+the same benefits of access to a GL rendering surface, with the added advantage
+of having that surface participate fully in the normal view hierarchy.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Hardware-accelerated 2D
+drawing</strong></p>
+
+<p>All Android-powered devices running Android 4.0 are required to support
+hardware-accelerated 2D drawing. Developers can take advantage of this to add
+great UI effects while maintaining optimal performance on high-resolution
+screens, even on phones. For example, developers can rely on accelerated
+scaling, rotation, and other 2D operations, as well as accelerated UI components
+such as TextureView and compositing modes such as filtering, blending, and
+opacity.</p>
+
+
+<h3 id="input-dev">New input types and text services</h3>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Stylus input, button
+support, hover events</strong></p>
+
+<p>Android 4.0 includes full support for stylus input events, including tilt and
+distance axes, pressure, and related motion event properties. To help
+applications distinguish motion events from different sources, the platform adds
+distinct tool types for stylus, finger, mouse, and eraser. For improved input
+from multi-button pointing devices, the platform now provides distinct primary,
+secondary, and tertiary buttons, as well as back and forward buttons.
+Hover-enter and hover-exit events are also added, for improved navigation and
+accessibility. Developers can build on these new input features to add powerful
+interactions to their apps, such as precise drawing and gesturing, handwriting
+and shape recognition, improved mouse input, and others.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Text services API for
+integrating spelling checkers</strong></p>
+
+<p>Android 4.0 lets applications query available text services such as
+dictionaries and spell checkers for word suggestions, corrections, and similar
+data. The text services are external to the active IME, so developers can create
+and distribute dictionaries and suggestion engines that plug into the platform.
+When an application receives results from a text service &mdash; for example,
+word suggestions &mdash; it can display them in a dedicated suggestion popup
+window directly inside the text view, rather than relying on the IME to display
+them. </p>
+
+
+<h3 id="accessibility-dev">Enhanced accessibility APIs</h3>
+
+<p>Android 4.0 adds new accessibility features and an enhanced API to let
+developers improve the user experience in their apps, especially on devices that
+don’t have hardware buttons. For accessibility services such as screen readers
+in particular, the platform offers new APIs to query window content, for easier
+navigation, better feedback, and richer user interfaces.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Accessibility
+API</strong></p>
+
+<p>To let applications manage interactions more effectively when accessibility
+features are enabled, the platform adds accessibility events for
+explore-by-touch mode, scrolling, and text selection. For these and other
+events, the platform can attach a new object called an accessibility record that
+provides extra information about the event context.</p>
+
+<p>Using the accessibility record and related APIs, applications can now access
+the view hierarchy associated with an event. Applications can query for key
+properties such as parent and child nodes, available states, supported actions,
+screen position, and more. Applications can also request changes to certain
+properties to help manage focus and selected state. For example, an
+accessibility service could use these new capabilities to add convenient
+features such as screen-search by text. </p> 
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Text-to-speech
+API</strong></p>
+
+<p>A new framework API lets developers write text-to-speech engines and make
+them available to any app requesting TTS capabilities.</p>
+
+
+<h3 id="data-dev">Efficient network usage</h3>
+
+<p>In Android 4.0, users can see how much network data their running apps are
+using. They can also set limits on data usage by network type and disable
+background data usage for specific applications. In this context, developers
+need to design their apps to run efficiently and follow best practices for
+checking the network connection. Android 4.0 provides network APIs to let
+applications meet those goals.</p>
+
+<p>As users move between networks or set limits on network data, the platform
+lets applications query for connection type and availability. Developers can use
+this information to dynamically manage network requests to ensure the best
+experience for users. Developers can also build custom network and data-usage
+options into their apps, then expose them to users directly from Settings by
+means of a new system Intent.</p>
+
+
+<h3 id="security-dev">Security for apps and content</h3>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Secure management of
+credentials</strong></p>
+
+<p>Android 4.0 makes it easier for applications to manage authentication and
+secure sessions. A new keychain API and underlying encrypted storage let
+applications store and retrieve private keys and their corresponding certificate
+chains. Any application can use the keychain API to install and store user
+certificates and CAs securely.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Address Space Layout
+Randomization</strong></p>
+
+<p>Android 4.0 now provides address space layout randomization (ASLR) to help
+protect system and third party applications from exploitation due to
+memory-management issues.</p>
+
+
+<h3 id="enterprise-dev">Enhancements for Enterprise</h3>
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>VPN client
+API</strong></p>
+
+<p>Developers can now build or extend their own VPN solutions on the platform
+using a new VPN API and underlying secure credential storage. With user
+permission, applications can configure addresses and routing rules, process
+outgoing and incoming packets, and establish secure tunnels to a remote server.
+Enterprises can also take advantage of a standard VPN client built into the
+platform that provides access to L2TP and IPSec protocols.</p>
+
+
+<p style="margin-top:1em;margin-bottom:.75em;"><strong>Device policy management
+for camera</strong></p>
+
+<p>The platform adds a new policy control for administrators who manage devices
+using an installed Device Policy Manager. Administrators can now remotely
+disable the camera on a managed device for users working in sensitive
+environments.</p>
+
+
+
+
+
diff --git a/docs/html/about/versions/android-4.0.3.jd b/docs/html/about/versions/android-4.0.3.jd
new file mode 100644
index 0000000..b7d4db3
--- /dev/null
+++ b/docs/html/about/versions/android-4.0.3.jd
@@ -0,0 +1,304 @@
+page.title=Android 4.0.3 Platform
+sdk.platform.version=4.0.3
+sdk.platform.apiLevel=15
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#Honeycomb">Previous APIs</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/15/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android {@sdkPlatformVersion} is an incremental release of the Android 4.x
+(Ice Cream Sandwich) platform family. This release includes new features for
+users and developers, API changes, and various bug fixes.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+
+<h2 id="api">API Overview</h2>
+
+<p>The sections below provide a technical overview of new APIs in Android 4.0.3.</p>
+
+<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="" />
+    <strong>Table of Contents</strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+    <ol class="toc" style="margin-left:-1em">
+      <li><a href="#contacts">Social stream API in Contacts Provider</a></li>
+      <li><a href="#calendar">Calendar Provider</a></li>
+      <li><a href="#widgets">Home screen widgets</a></li>
+      <li><a href="#textservices">Spell-checking</a></li>
+      <li><a href="#bluetooth">Bluetooth</a></li>
+      <li><a href="#ui">UI toolkit</a></li>
+      <li><a href="#accessibility">Accessibility</a></li>
+      <li><a href="#tts">Text-to-speech</a></li>
+      <li><a href="#database">Database</a></li>
+      <li><a href="#intents">Intents</a></li>
+      <li><a href="#camera">Camera</a></li>
+      <li><a href="#permissions">Permissions</a></li>
+    </ol>
+  </div>
+</div>
+
+
+
+
+
+<h3 id="contacts">Social stream API in Contacts Provider</h3>
+
+<p>Applications that use social stream data such as status updates and check-ins
+can now sync that data with each of the user’s contacts, providing items in a
+stream along with photos for each.</p>
+
+<p>The database table that contains an individual contact’s social stream is
+defined by {@link android.provider.ContactsContract.StreamItems}, the Uri for
+which is nested within the {@link android.provider.ContactsContract.RawContacts}
+directory to which the stream items belong. Each social stream table includes
+several columns for metadata about each stream item, such as an icon
+representing the source (an avatar), a label for the item, the primary text
+content, comments about the item (such as responses from other people), and
+more. Photos associated with a stream are stored in another table, defined by
+{@link android.provider.ContactsContract.StreamItemPhotos}, which is available
+as a sub-directory of the {@link android.provider.ContactsContract.StreamItems}
+Uri.</p>
+
+<p>See {@link android.provider.ContactsContract.StreamItems} and
+{@link android.provider.ContactsContract.StreamItemPhotos} for more information.</p>
+
+<p>To read or write social stream items for a contact, an application must
+request permission from the user by declaring <code>&lt;uses-permission
+android:name="android.permission.READ_SOCIAL_STREAM"&gt;</code> and/or <code>&lt;uses-permission
+android:name="android.permission.WRITE_SOCIAL_STREAM"&gt;</code> in their manifest files.</p>
+
+<h3 id="calendar">Calendar Provider</h4>
+<ul>
+<li>Adds the class {@link android.provider.CalendarContract.Colors} to represent
+a color table in the <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Calendar
+Provider</a>. The class provides fields for accessing
+colors available for a given account. Colors are referenced by 
+{@link android.provider.CalendarContract.ColorsColumns#COLOR_KEY COLOR_KEY}
+which must be unique for a given account name/type. These values can only be
+updated by the sync adapter.</li>
+<li>Adds {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_AVAILABILITY ALLOWED_AVAILABILITY}
+and 
+{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_ATTENDEE_TYPES ALLOWED_ATTENDEE_TYPES}
+for exchange/sync support.</li>
+<li>Adds {@link android.provider.CalendarContract.AttendeesColumns#TYPE_RESOURCE}
+(such as conference rooms) for attendees and 
+{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY_TENTATIVE},
+as well as {@link android.provider.CalendarContract.EventsColumns#EVENT_COLOR_KEY}
+for events.</li>
+</ul>
+
+<h3 id="widgets">Home screen widgets</h3>
+
+<p>Starting from Android 4.0, home screen widgets should no longer include their
+own padding. Instead, the system now automatically adds padding for each widget,
+based the characteristics of the current screen. This leads to a more uniform,
+consistent presentation of widgets in a grid. To assist applications that host
+home screen widgets, the platform provides a new method 
+{@link android.appwidget.AppWidgetHostView#getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect)
+getDefaultPaddingForWidget()}. Applications can call this method to get the
+system-defined padding and account for it when computing the number of cells to
+allocate to the widget.</p>
+
+<h3 id="textservices">Spell-checking</h3>
+
+<ul>
+<li>For apps that accessing spell-checker services, a new {@link
+android.view.textservice.SpellCheckerSession#cancel() cancel()} method cancels
+any pending and running spell-checker tasks in a session.</li>
+
+<li>For spell-checker services, a new suggestions flag, 
+{@link android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS},
+lets the services distinguish higher-confidence suggestions from
+lower-confidence ones. For example, a spell-checker could set the flag if an
+input word is not in the user dictionary but has likely suggestions, or not set
+the flag if an input word is not in the dictionary and has suggestions that are
+likely to be less useful.
+
+<p>Apps connected to the spell-checker can use the {@link
+android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS}
+flag in combination with other suggestion attributes, as well as the {@link
+android.view.textservice.SuggestionsInfo#getSuggestionsAttributes()} and {@link
+android.view.textservice.SuggestionsInfo#getSuggestionsCount()} methods, to
+determine whether to mark input words as typos and offer suggestions.</p></li>
+
+<li>A new {@link android.text.style.SuggestionSpan#FLAG_AUTO_CORRECTION} style
+for text spans indicates that auto correction is about to be applied to a
+word/text that the user is typing/composing. This type of suggestion is rendered
+differently, to indicate the auto correction is happening.</li>
+</ul>
+
+<h3 id="bluetooth">Bluetooth</h3>
+<p>New public methods {@link
+android.bluetooth.BluetoothDevice#fetchUuidsWithSdp()} and {@link
+android.bluetooth.BluetoothDevice#getUuids()} let apps determine the features
+(UUIDs) supported by a remote device. In the case of {@link
+android.bluetooth.BluetoothDevice#fetchUuidsWithSdp()}, the system performs a
+service discovery on the remote device to get the UUIDs supported, then
+broadcasts the result in an {@link
+android.bluetooth.BluetoothDevice#ACTION_UUID} intent.</p>
+
+<h3 id="ui">UI toolkit</h3>
+
+<p>New methods {@link android.app.Fragment#setUserVisibleHint(boolean) setUserVisibleHint()} and
+{@link android.app.Fragment#getUserVisibleHint() getUserVisibleHint()} allow a
+fragment to set a hint of whether or not it is currently user-visible. The
+system defers the start of fragments that are not user-visible until the loaders
+for visible fragments have run. The visibility hint is "true" by default.</li>
+</p>
+
+<h3 id="graphics">Graphics</h3>
+
+<ul>
+<li>New method {@link android.graphics.SurfaceTexture#setDefaultBufferSize(int
+width, int height)} in {@link android.graphics.SurfaceTexture} sets the default size of the image
+buffers. This method may be used to set the image size when producing images
+with {@link android.graphics.Canvas} (via {@link
+android.view.Surface#lockCanvas}), or OpenGL ES (via an EGLSurface).</li>
+<li>Adds definitions for the enums of the GL_OES_EGL_image_external OpenGL ES extension &mdash;
+{@link android.opengl.GLES11Ext#GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES},
+{@link android.opengl.GLES11Ext#GL_SAMPLER_EXTERNAL_OES},
+{@link android.opengl.GLES11Ext#GL_TEXTURE_BINDING_EXTERNAL_OES}, and
+{@link android.opengl.GLES11Ext#GL_TEXTURE_EXTERNAL_OES}.</li>
+</ul>
+
+<h3 id="accessibility">Accessibility</h3>
+
+<ul>
+<li>Clients of {@link android.widget.RemoteViews} can now use the method {@link
+android.widget.RemoteViews#setContentDescription(int, java.lang.CharSequence)
+setContentDescription()} to set and get the content description of any View in
+the inflated layout.</li>
+
+<li>The methods {@link android.view.accessibility.AccessibilityRecord#getMaxScrollX()},
+{@link android.view.accessibility.AccessibilityRecord#getMaxScrollY()},
+{@link android.view.accessibility.AccessibilityRecord#setMaxScrollX(int) setMaxScrollX()}, and
+{@link android.view.accessibility.AccessibilityRecord#setMaxScrollY(int) setMaxScrollY()}
+allow apps to get and set the maximum scroll offset for an
+{@link android.view.accessibility.AccessibilityRecord} object.</li>
+
+<li>When touch-exploration mode is enabled, a new secure setting 
+{@link android.provider.Settings.Secure#ACCESSIBILITY_SPEAK_PASSWORD} 
+indicates whether the user requests the IME to speak text entered in password fields, even when
+a headset is not in use. By default, no password text is spoken unless a headset
+is in use.</li>
+</ul>
+
+<h3 id="tts">Text-to-speech</h3>
+
+<ul>
+<li>Adds the new method {@link
+android.speech.tts.TextToSpeech.Engine#getFeatures(java.util.Locale)
+getFeatures()}for querying and enabling network TTS support.
+<li>Adds a new listener class, {@link
+android.speech.tts.UtteranceProgressListener}, that engines can register to
+receive notification of speech-synthesis errors.</li>
+</ul>
+
+<h3 id="database">Database</h3>
+
+<ul>
+<li>A new {@link android.database.CrossProcessCursorWrapper} class lets content
+providers return results for a cross-process query more efficiently. The new
+class is a useful building block for wrapping cursors that will be sent to
+processes remotely. It can also transform normal {@link android.database.Cursor}
+objects into {@link android.database.CrossProcessCursor} objects
+transparently.
+
+<p>The {@link android.database.CrossProcessCursorWrapper} class fixes common
+performance issues and bugs that applications have encountered when
+implementing content providers.</p></li>
+
+<li>The {@link android.database.CursorWindow#CursorWindow(java.lang.String)}
+constructor now takes a name string as input. The system no longer distinguishes
+between local and remote cursor windows, so {@link
+android.database.CursorWindow#CursorWindow(boolean)} is now deprecated.</li>
+</ul>
+
+<h3 id="intents">Intents</h3>
+
+<p>Adds new categories for targeting common types of applications on the
+device, such as {@link android.content.Intent#CATEGORY_APP_BROWSER}, {@link
+android.content.Intent#CATEGORY_APP_CALENDAR}, {@link
+android.content.Intent#CATEGORY_APP_MAPS}, and more.</li>
+
+<h3 id="camera">Camera</h3>
+
+<ul>
+<li>{@link android.media.MediaMetadataRetriever} adds the new constant
+{@link android.media.MediaMetadataRetriever#METADATA_KEY_LOCATION} to let apps
+access retrieve location information for an image or video. </li>
+
+<li>{@link android.media.CamcorderProfile} adds the QVGA (320x240) resolution
+profiles. Quality level is represented by the
+{@link android.media.CamcorderProfile#QUALITY_QVGA}.and
+{@link android.media.CamcorderProfile#QUALITY_TIME_LAPSE_QVGA} constants.</li>
+
+<li>New methods {@link android.hardware.Camera.Parameters#setVideoStabilization(boolean) setVideoStabilization()},
+{@link android.hardware.Camera.Parameters#getVideoStabilization() setVideoStabilization()}, and {@link android.hardware.Camera.Parameters#isVideoStabilizationSupported() isVideoStabilizationSupported()}
+let you check and manage video stabilization for a {@link android.hardware.Camera}.</li>
+</ul>
+
+<h3 id="Permissions">Permissions</h3>
+
+<p>The following are new permissions:</p>
+<ul>
+<li>{@link android.Manifest.permission#READ_SOCIAL_STREAM} and 
+{@link android.Manifest.permission#WRITE_SOCIAL_STREAM}: Allow a sync
+adapter to read and write social stream data to a contact in the shared
+Contacts Provider.</li>
+</ul>
+
+
+<div class="special" style="margin-top:2em">
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
+</div>
+
+
+<h2 id="api-level">API Level</h2>
+
+<p>The Android {@sdkPlatformVersion} API is assigned an integer
+identifier&mdash;<strong>{@sdkPlatformApiLevel}</strong>&mdash;that is stored in the system itself.
+This identifier, called the "API level", allows the system to correctly determine whether an
+application is compatible with the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
+application against an Android platform that supports API level {@sdkPlatformApiLevel} or
+higher. Depending on your needs, you might also need to add an
+<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
+element.</p>
+
+<p>For more information, see the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a>
+document. </p>
+
diff --git a/docs/html/about/versions/android-4.0.jd b/docs/html/about/versions/android-4.0.jd
new file mode 100644
index 0000000..bea0725
--- /dev/null
+++ b/docs/html/about/versions/android-4.0.jd
@@ -0,0 +1,1829 @@
+page.title=Android 4.0 Platform
+sdk.platform.version=4.0
+sdk.platform.apiLevel=14
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#api">API Overview</a></li>
+  <li><a href="#Honeycomb">Previous APIs</a></li>
+  <li><a href="#api-level">API Level</a></li>
+</ol>
+
+<h2>Reference</h2>
+<ol>
+<li><a
+href="{@docRoot}sdk/api_diff/14/changes.html">API
+Differences Report &raquo;</a> </li>
+</ol>
+
+</div>
+</div>
+
+
+<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
+
+<p>Android 4.0 is a major platform release that adds a variety of new features for users and app
+developers. Besides all the new features and APIs discussed below, Android 4.0 is an important
+platform release because it brings the extensive set of APIs and Holographic themes from Android 3.x
+to smaller screens. As an app developer, you now have a single platform and unified API framework
+that enables you to develop and publish your application with a single APK that provides an
+optimized user experience for handsets, tablets, and more, when running the same version of
+Android&mdash;Android 4.0 (API level 14) or greater.</p>
+
+<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
+downloadable component for the Android SDK. The downloadable platform includes
+an Android library and system image, as well as a set of emulator skins and
+more. To get started developing or testing against Android {@sdkPlatformVersion},
+use the Android SDK Manager to download the platform into your SDK.</p>
+
+<h2 id="api">API Overview</h2>
+
+<p>The sections below provide a technical overview of new APIs in Android 4.0.</p>
+
+<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="" />
+    <strong>Table of Contents</strong>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+    <ol class="toc" style="margin-left:-1em">
+      <li><a href="#Contacts">Social APIs in Contacts Provider</a></li>
+      <li><a href="#Calendar">Calendar Provider</a></li>
+      <li><a href="#Voicemail">Voicemail Provider</a></li>
+      <li><a href="#Multimedia">Multimedia</a></li>
+      <li><a href="#Camera">Camera</a></li>
+      <li><a href="#AndroidBeam">Android Beam (NDEF Push with NFC)</a></li>
+      <li><a href="#WiFiDirect">Wi-Fi Direct</a></li>
+      <li><a href="#Bluetooth">Bluetooth Health Devices</a></li>
+      <li><a href="#A11y">Accessibility</a></li>
+      <li><a href="#SpellChecker">Spell Checker Services</a></li>
+      <li><a href="#TTS">Text-to-speech Engines</a></li>
+      <li><a href="#NetworkUsage">Network Usage</a></li>
+      <li><a href="#RenderScript">RenderScript</a></li>
+      <li><a href="#Enterprise">Enterprise</a></li>
+      <li><a href="#Sensors">Device Sensors</a></li>
+      <li><a href="#ActionBar">Action Bar</a></li>
+      <li><a href="#UI">User Interface and Views</a></li>
+      <li><a href="#Input">Input Framework</a></li>
+      <li><a href="#Properties">Properties</a></li>
+      <li><a href="#HwAccel">Hardware Acceleration</a></li>
+      <li><a href="#Jni">JNI Changes</a></li>
+      <li><a href="#WebKit">WebKit</a></li>
+      <li><a href="#Permissions">Permissions</a></li>
+      <li><a href="#DeviceFeatures">Device Features</a></li>
+    </ol>
+  </div>
+</div>
+
+
+
+
+
+<h3 id="Contacts">Social APIs in Contacts Provider</h3>
+
+<p>The contact APIs defined by the {@link android.provider.ContactsContract} provider have been
+extended to support new social-oriented features such as a personal profile for the device owner and
+the ability for users to invite individual contacts to social networks that are installed on the
+device.</p>
+
+
+<h4>User Profile</h4>
+
+<p>Android now includes a personal profile that represents the device owner, as defined by the
+{@link android.provider.ContactsContract.Profile} table.  Social apps that maintain a user identity 
+can contribute to the user's profile data by creating a new {@link
+android.provider.ContactsContract.RawContacts} entry within the {@link
+android.provider.ContactsContract.Profile}. That is, raw contacts that represent the device user do
+not belong in the traditional raw contacts table defined by the {@link
+android.provider.ContactsContract.RawContacts} Uri; instead, you must add a profile raw contact in
+the table at {@link android.provider.ContactsContract.Profile#CONTENT_RAW_CONTACTS_URI}. Raw
+contacts in this table are then aggregated into the single user-visible profile labeled "Me".</p>
+
+<p>Adding a new raw contact for the profile requires the {@link
+android.Manifest.permission#WRITE_PROFILE} permission. Likewise, in order to read from the profile
+table, you must request the {@link android.Manifest.permission#READ_PROFILE} permission. However,
+most apps should not need to read the user profile, even when contributing data to the
+profile. Reading the user profile is a sensitive permission and you should expect users to be
+skeptical of apps that request it.</p>
+
+
+<h4>Invite Intent</h4>
+
+<p>The {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent action allows an app
+to invoke an action that indicates the user wants to add a contact to a social network. The app
+receiving the app uses it to invite the specified contact to that
+social network. Most apps will be on the receiving-end of this operation. For example, the
+built-in People app invokes the invite intent when the user selects "Add connection" for a specific
+social app that's listed in a person's contact details.</p> 
+
+<p>To make your app visible as in the "Add connection" list, your app must provide a sync adapter to
+sync contact information from your social network. You must then indicate to the system that your
+app responds to the {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent by
+adding the {@code inviteContactActivity} attribute to your app’s sync configuration file, with a
+fully-qualified name of the activity that the system should start when sending the invite intent.
+The activity that starts can then retrieve the URI for the contact in question from the intent’s
+data and perform the necessary work to invite that contact to the network or add the person to the
+user’s connections.</p>
+
+<p>See the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Sample Sync
+Adapter</a> app for an example (specifically, see the <a
+href="{@docRoot}resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html">contacts.xml</a>
+file).</p>
+
+
+<h4>Large photos</h4>
+
+<p>Android now supports high resolution photos for contacts. Now, when you push a photo into a
+contact record, the system processes it into both a 96x96 thumbnail (as it has previously) and a
+256x256 "display photo" that's stored in a new file-based photo store (the exact dimensions that the
+system chooses may vary in the future). You can add a large photo to a contact by putting a large
+photo in the usual {@link android.provider.ContactsContract.CommonDataKinds.Photo#PHOTO} column of a
+data row, which the system will then process into the appropriate thumbnail and display photo
+records.</p>
+
+
+<h4>Contact Usage Feedback</h4>
+
+<p>The new {@link android.provider.ContactsContract.DataUsageFeedback} APIs allow you to  help track
+how often the user uses particular methods of contacting people, such as how often the user uses
+each phone number or e-mail address. This information helps improve the ranking for each contact
+method associated with each person and provide better suggestions for contacting each person.</p>
+
+
+
+
+
+<h3 id="Calendar">Calendar Provider</h3>
+
+<p>The new calendar APIs allow you to read, add, modify and delete calendars, events, attendees,
+reminders and alerts, which are stored in the Calendar Provider.</p>
+
+<p>A variety of apps and widgets can use these APIs to read and modify calendar events. However,
+some of the most compelling use cases are sync adapters that synchronize the user's calendar from
+other calendar services with the Calendar Provider, in order to offer a unified location for all the
+user's events. Google Calendar events, for example, are synchronized with the Calendar Provider by
+the Google Calendar Sync Adapter, allowing these events to be viewed with Android's built-in
+Calendar app.</p>
+
+<p>The data model for calendars and event-related information in the Calendar Provider is
+defined by {@link android.provider.CalendarContract}. All the user’s calendar data is stored in a
+number of tables defined by various subclasses of {@link android.provider.CalendarContract}:</p>
+
+<ul>
+<li>The {@link android.provider.CalendarContract.Calendars} table holds the calendar-specific
+information. Each row in this table contains the details for a single calendar, such as the name,
+color, sync information, and so on.</li>
+
+<li>The {@link android.provider.CalendarContract.Events} table holds event-specific information.
+Each row in this table contains the information for a single event, such as the
+event title, location, start time, end time, and so on. The event can occur one time or recur
+multiple times. Attendees, reminders, and extended properties are stored in separate tables and
+use the event’s {@code _ID} to link them with the event.</li>
+
+<li>The {@link android.provider.CalendarContract.Instances} table holds the start and end time for
+occurrences of an event. Each row in this table represents a single occurrence. For one-time events
+there is a one-to-one mapping of instances to events. For recurring events, multiple rows are
+automatically generated to correspond to the multiple occurrences of that event.</li>
+
+<li>The {@link android.provider.CalendarContract.Attendees} table holds the event attendee or guest
+information. Each row represents a single guest of an event. It specifies the type of guest the
+person is and the person’s response for the event.</li>
+
+<li>The {@link android.provider.CalendarContract.Reminders} table holds the alert/notification data.
+Each row represents a single alert for an event. An event can have multiple reminders. The number of
+reminders per event is specified in {@code MAX_REMINDERS}, which is set by the sync adapter that
+owns the given calendar. Reminders are specified in number-of-minutes before the event is
+scheduled and specify an alarm method such as to use an alert, email, or SMS to remind
+the user.</li>
+
+<li>The {@link android.provider.CalendarContract.ExtendedProperties} table hold opaque data fields
+used by the sync adapter. The provider takes no action with items in this table except to delete
+them when their related events are deleted.</li>
+</ul>
+
+<p>To access a user’s calendar data with the Calendar Provider, your application must request 
+the {@link android.Manifest.permission#READ_CALENDAR} permission (for read access) and
+{@link android.Manifest.permission#WRITE_CALENDAR} (for write access).</p>
+
+
+<h4>Event intent</h4>
+
+<p>If all you want to do is add an event to the user’s calendar, you can use an {@link
+android.content.Intent#ACTION_INSERT} intent with the data defined by {@link
+android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} in order to start an
+activity in the Calendar app that creates new events. Using the intent does not require any
+permission and you can specify event details with the following extras:</p>
+
+<ul>
+  <li>{@link android.provider.CalendarContract.EventsColumns#TITLE Events.TITLE}: Name for the
+event</li>
+  <li>{@link
+android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}:
+Event begin time in milliseconds from the
+epoch</li>
+  <li>{@link
+android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}: Event
+end time in milliseconds from the epoch</li>
+  <li>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}:
+Location of the event</li>
+  <li>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}: Event
+description</li>
+  <li>{@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}: Email addresses of those to
+invite</li>
+  <li>{@link android.provider.CalendarContract.EventsColumns#RRULE Events.RRULE}: The recurrence
+rule for the event</li>
+  <li>{@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}:
+Whether the event is private or public</li>
+  <li>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}:
+Whether the time period of this event allows for other events to be scheduled at the same time</li>
+</ul>
+
+
+
+
+<h3 id="Voicemail">Voicemail Provider</h3>
+
+<p>The new Voicemail Provider allows applications to add voicemails to the
+device, in order to present all the user's voicemails in a single visual presentation. For instance,
+it’s possible that a user has multiple voicemail sources, such as
+one from the phone’s service provider and others from VoIP or other alternative voice
+services. These apps can use the Voicemail Provider APIs to add their voicemails to the device. The
+built-in Phone application then presents all voicemails to the user in a unified presentation.
+Although the system’s Phone application is the only application that can read all the voicemails,
+each application that provides voicemails can read those that it has added to the system (but cannot
+read voicemails from other services).</p>
+
+<p>Because the APIs currently do not allow third-party apps to read all the voicemails from the
+system, the only third-party apps that should use the voicemail APIs are those that have voicemail
+to deliver to the user.</p>
+
+<p>The {@link android.provider.VoicemailContract} class defines the content provider for the
+Voicemail Provder. The subclasses {@link android.provider.VoicemailContract.Voicemails} and {@link
+android.provider.VoicemailContract.Status} provide tables in which apps can
+insert voicemail data for storage on the device. For an example of a voicemail provider app, see the
+<a href="{@docRoot}resources/samples/VoicemailProviderDemo/index.html">Voicemail Provider
+Demo</a>.</p>
+
+
+
+
+
+<h3 id="Multimedia">Multimedia</h3>
+
+<p>Android 4.0 adds several new APIs for applications that interact with media such as photos,
+videos, and music.</p>
+
+
+<h4>Media Effects</h4>
+
+<p>A new media effects framework allows you to apply a variety of visual effects to images and
+videos. For example, image effects allow you to easily fix red-eye, convert an image to grayscale,
+adjust brightness, adjust saturation, rotate an image, apply a fisheye effect, and much more. The
+system performs all effects processing on the GPU to obtain maximum performance.</p>
+
+<p>For maximum performance, effects are applied directly to OpenGL textures, so your application
+must have a valid OpenGL context before it can use the effects APIs. The textures to which you apply
+effects may be from bitmaps, videos or even the camera. However, there are certain restrictions that
+textures must meet:</p>
+<ol>
+<li>They must be bound to a {@link android.opengl.GLES20#GL_TEXTURE_2D} texture image</li>
+<li>They must contain at least one mipmap level</li>
+</ol>
+
+<p>An {@link android.media.effect.Effect} object defines a single media effect that you can apply to
+an image frame. The basic workflow to create an {@link android.media.effect.Effect} is:</p>
+
+<ol>
+<li>Call {@link android.media.effect.EffectContext#createWithCurrentGlContext
+EffectContext.createWithCurrentGlContext()} from your OpenGL ES 2.0 context.</li>
+<li>Use the returned {@link android.media.effect.EffectContext} to call {@link
+android.media.effect.EffectContext#getFactory EffectContext.getFactory()}, which returns an instance
+of {@link android.media.effect.EffectFactory}.</li>
+<li>Call {@link android.media.effect.EffectFactory#createEffect createEffect()}, passing it an
+effect name from @link android.media.effect.EffectFactory}, such as {@link
+android.media.effect.EffectFactory#EFFECT_FISHEYE} or {@link
+android.media.effect.EffectFactory#EFFECT_VIGNETTE}.</li>
+</ol>
+
+<p>You can adjust an effect’s parameters by calling {@link android.media.effect.Effect#setParameter
+setParameter()} and passing a parameter name and parameter value. Each type of effect accepts
+different parameters, which are documented with the effect name. For example, {@link
+android.media.effect.EffectFactory#EFFECT_FISHEYE} has one parameter for the {@code scale} of the
+distortion.</p>
+
+<p>To apply an effect on a texture, call {@link android.media.effect.Effect#apply apply()} on the
+{@link
+android.media.effect.Effect} and pass in the input texture, it’s width and height, and the output
+texture. The input texture  must be bound to a {@link android.opengl.GLES20#GL_TEXTURE_2D} texture
+image (usually done by calling the {@link android.opengl.GLES20#glTexImage2D glTexImage2D()}
+function). You may provide multiple mipmap levels. If the output texture has not been bound to a
+texture image, it will be automatically bound by the effect as a {@link
+android.opengl.GLES20#GL_TEXTURE_2D} and with one mipmap level (0), which will have the same
+size as the input.</p> 
+
+<p>All effects listed in {@link android.media.effect.EffectFactory} are guaranteed to be supported.
+However, some additional effects available from external libraries are not supported by all devices,
+so you must first check if the desired effect from the external library is supported by calling
+{@link android.media.effect.EffectFactory#isEffectSupported isEffectSupported()}.</p>
+
+
+<h4>Remote control client</h4>
+
+<p>The new {@link android.media.RemoteControlClient} allows media players to enable playback
+controls from remote control clients such as the device lock screen. Media players can also expose
+information about the media currently playing for display on the remote control, such as track
+information and album art.</p>
+
+<p>To enable remote control clients for your media player, instantiate a {@link
+android.media.RemoteControlClient} with its constructor, passing it a {@link
+android.app.PendingIntent} that broadcasts {@link
+android.content.Intent#ACTION_MEDIA_BUTTON}. The intent must also declare the explicit {@link
+android.content.BroadcastReceiver} component in your app that handles the {@link
+android.content.Intent#ACTION_MEDIA_BUTTON} event.</p>
+
+<p>To declare which media control inputs your player can handle, you must call {@link
+android.media.RemoteControlClient#setTransportControlFlags setTransportControlFlags()} on your
+{@link android.media.RemoteControlClient}, passing a set of {@code FLAG_KEY_MEDIA_*} flags, such as
+{@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PREVIOUS} and {@link
+android.media.RemoteControlClient#FLAG_KEY_MEDIA_NEXT}.</p>
+
+<p>You must then register your {@link android.media.RemoteControlClient} by passing it to {@link
+android.media.AudioManager#registerRemoteControlClient MediaManager.registerRemoteControlClient()}.
+Once registered, the broadcast receiver you declared when you instantiated the {@link
+android.media.RemoteControlClient} will receive {@link android.content.Intent#ACTION_MEDIA_BUTTON}
+events when a button is pressed from a remote control. The intent you receive includes the {@link
+android.view.KeyEvent} for the media key pressed, which you can retrieve from the intent with {@link
+android.content.Intent#getParcelableExtra getParcelableExtra(Intent.EXTRA_KEY_EVENT)}.</p>
+
+<p>To display information on the remote control about the media playing, call {@link
+android.media.RemoteControlClient#editMetadata editMetaData()} and add metadata to the returned
+{@link android.media.RemoteControlClient.MetadataEditor}. You can supply a bitmap for media artwork,
+numerical information such as elapsed time, and text information such as the track title. For
+information on available keys see the {@code METADATA_KEY_*} flags in {@link
+android.media.MediaMetadataRetriever}.</p>
+
+<p>For a sample implementation, see the <a
+href="{@docRoot}resources/samples/RandomMusicPlayer/index.html">Random Music Player</a>, which
+provides compatibility logic such that it enables the remote control client on Android 4.0
+devices while continuing to support devices back to Android 2.1.</p>
+
+
+<h4>Media player</h4>
+
+<ul>
+<li>Streaming online media from {@link android.media.MediaPlayer} now requires the {@link
+android.Manifest.permission#INTERNET} permission. If you use {@link android.media.MediaPlayer} to
+play content from the Internet, be sure to add the {@link android.Manifest.permission#INTERNET}
+permission to your manifest or else your media playback will not work beginning with Android
+4.0.</li>
+
+<li>{@link android.media.MediaPlayer#setSurface(Surface) setSurface()} allows you define a {@link
+android.view.Surface} to behave as the video sink.</li>
+
+<li>{@link android.media.MediaPlayer#setDataSource(Context,Uri,Map) setDataSource()} allows you to
+send additional HTTP headers with your request, which can be useful for HTTP(S) live streaming</li>
+
+<li>HTTP(S) live streaming now respects HTTP cookies across requests</li>
+</ul>
+
+
+<h4>Media types</h4>
+
+<p>Android 4.0 adds support for:</p>
+<ul>
+<li>HTTP/HTTPS live streaming protocol version 3 </li>
+<li>ADTS raw AAC audio encoding</li>
+<li>WEBP images</li>
+<li>Matroska video</li>
+</ul>
+<p>For more info, see <a href="{@docRoot}guide/appendix/media-formats.html">Supported Media
+Formats</a>.</p>
+
+
+
+
+
+<h3 id="Camera">Camera</h3>
+
+<p>The {@link android.hardware.Camera} class now includes APIs for detecting faces and controlling
+focus and metering areas.</p>
+
+
+<h4>Face detection</h4>
+
+<p>Camera apps can now enhance their abilities with Android’s face detection APIs, which not
+only detect the face of a subject, but also specific facial features, such as the eyes and mouth.
+</p>
+
+<p>To detect faces in your camera application, you must register a {@link
+android.hardware.Camera.FaceDetectionListener} by calling {@link
+android.hardware.Camera#setFaceDetectionListener setFaceDetectionListener()}. You can then start
+your camera surface and start  detecting faces by calling {@link
+android.hardware.Camera#startFaceDetection}.</p>
+
+<p>When the system detects one or more faces in the camera scene, it calls the {@link
+android.hardware.Camera.FaceDetectionListener#onFaceDetection onFaceDetection()} callback in your
+implementation of {@link android.hardware.Camera.FaceDetectionListener}, including an array of
+{@link android.hardware.Camera.Face} objects.</p>
+
+<p>An instance of the {@link android.hardware.Camera.Face} class provides various information about
+the face detected, including:</p>
+<ul>
+<li>A {@link android.graphics.Rect} that specifies the bounds of the face, relative to the camera's
+current field of view</li>
+<li>An integer betwen 1 and 100 that indicates how confident the system is that the object is a
+human face</li>
+<li>A unique ID so you can track multiple faces</li>
+<li>Several {@link android.graphics.Point} objects that indicate where the eyes and mouth are
+located</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Face detection may not be supported on some
+devices, so you should check by calling {@link
+android.hardware.Camera.Parameters#getMaxNumDetectedFaces()} and ensure the return
+value is greater than zero. Also, some devices may not support identification of eyes and mouth,
+in which case, those fields in the {@link android.hardware.Camera.Face} object will be null.</p>
+
+  
+<h4>Focus and metering areas</h4>
+
+<p>Camera apps can now control the areas that the camera uses for focus and for metering white
+balance
+and auto-exposure. Both features use the new {@link android.hardware.Camera.Area} class to specify
+the region of the camera’s current view that should be focused or metered. An instance of the {@link
+android.hardware.Camera.Area} class defines the bounds of the area with a {@link
+android.graphics.Rect} and the area's weight&mdash;representing the level of importance of that
+area, relative to other areas in consideration&mdash;with an integer.</p>
+
+<p>Before setting either a focus area or metering area, you should first call {@link
+android.hardware.Camera.Parameters#getMaxNumFocusAreas} or {@link
+android.hardware.Camera.Parameters#getMaxNumMeteringAreas}, respectively. If these return zero, then
+the device does not support the corresponding feature.</p>
+
+<p>To specify the focus or metering areas to use, simply call {@link
+android.hardware.Camera.Parameters#setFocusAreas setFocusAreas()} or {@link
+android.hardware.Camera.Parameters#setMeteringAreas setMeteringAreas()}. Each take a {@link
+java.util.List} of {@link android.hardware.Camera.Area} objects that indicate the areas to consider
+for focus or metering. For example, you might implement a feature that allows the user to set the
+focus area by touching an area of the preview, which you then translate to an {@link
+android.hardware.Camera.Area} object and request that the camera focus on that area of the scene.
+The focus or exposure in that area will continually update as the scene in the area changes.</p>
+
+
+<h4>Continuous auto focus for photos</h4>
+
+<p>You can now enable continuous auto focusing (CAF) when taking photos. To enable CAF in your
+camera app, pass {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}
+to {@link android.hardware.Camera.Parameters#setFocusMode setFocusMode()}. When ready to capture
+a photo, call {@link android.hardware.Camera#autoFocus autoFocus()}. Your {@link
+android.hardware.Camera.AutoFocusCallback} immediately receives a callback to indicate whether
+focus was achieved. To resume CAF after receiving the callback, you must call {@link
+android.hardware.Camera#cancelAutoFocus()}.</p>
+
+<p class="note"><strong>Note:</strong> Continuous auto focus is also supported when capturing
+video, using {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}, which was
+added in API level 9.</p>
+
+
+<h4>Other camera features</h4>
+
+<ul>  
+<li>While recording video, you can now call {@link android.hardware.Camera#takePicture
+takePicture()} to save a photo without interrupting the video session. Before doing so, you should
+call {@link android.hardware.Camera.Parameters#isVideoSnapshotSupported} to be sure the hardware
+supports it.</li>
+
+<li>You can now lock auto exposure and white balance with {@link
+android.hardware.Camera.Parameters#setAutoExposureLock setAutoExposureLock()} and {@link
+android.hardware.Camera.Parameters#setAutoWhiteBalanceLock setAutoWhiteBalanceLock()} to prevent
+these properties from changing.</li>
+
+<li>You can now call {@link android.hardware.Camera#setDisplayOrientation
+setDisplayOrientation()} while the camera preview is running. Previously, you could call this
+only before beginning the preview, but you can now change the orientation at any time.</li>
+</ul>
+
+
+<h4>Camera broadcast intents</h4>
+
+<ul>
+<li>{@link android.hardware.Camera#ACTION_NEW_PICTURE Camera.ACTION_NEW_PICTURE}:
+This indicates that the user has captured a new photo. The built-in Camera app invokes this
+broadcast after a photo is captured and third-party camera apps should also broadcast this intent
+after capturing a photo.</li>
+<li>{@link android.hardware.Camera#ACTION_NEW_VIDEO Camera.ACTION_NEW_VIDEO}:
+This indicates that the user has captured a new video. The built-in Camera app invokes this
+broadcast after a video is recorded and third-party camera apps should also broadcast this intent
+after capturing a video.</li>
+</ul>
+
+
+
+
+
+<h3 id="AndroidBeam">Android Beam (NDEF Push with NFC)</h3>
+
+<p>Android Beam is a new NFC feature that allows you to send NDEF messages from one device to
+another (a process also known as “NDEF Push"). The data transfer is initiated when two
+Android-powered devices that support Android Beam are in close proximity (about 4 cm), usually with
+their backs touching. The data inside the NDEF message can contain any data that you wish to share
+between devices. For example, the People app shares contacts, YouTube shares videos, and Browser
+shares URLs using Android Beam.</p>
+
+<p>To transmit data between devices using Android Beam, you need to create an {@link
+android.nfc.NdefMessage} that contains the information you want to share while your activity is in
+the foreground. You must then pass the {@link android.nfc.NdefMessage} to the system in one of two
+ways:</p>
+
+<ul>
+<li>Define a single {@link android.nfc.NdefMessage} to push while in the activity:
+<p>Call {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} at any time to set
+the message you want to send. For instance, you might call this method and pass it your {@link
+android.nfc.NdefMessage} during your activity’s {@link android.app.Activity#onCreate onCreate()}
+method. Then, whenever Android Beam is activated with another device while the activity is in the
+foreground, the system sends the {@link android.nfc.NdefMessage} to the other device.</p></li>
+
+<li>Define the {@link android.nfc.NdefMessage} to push at the time that Android Beam is initiated:
+<p>Implement {@link android.nfc.NfcAdapter.CreateNdefMessageCallback}, in which your
+implementation of the {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
+method returns the {@link android.nfc.NdefMessage} you want to send. Then pass the {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback} implementation to {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}.</p>
+<p>In this case, when Android Beam is activated with another device while your activity is in the
+foreground, the system calls {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()} to retrieve
+the {@link android.nfc.NdefMessage} you want to send. This allows you to define the {@link
+android.nfc.NdefMessage} to deliver only once Android Beam is initiated, in case the contents
+of the message might vary throughout the life of the activity.</p></li>
+</ul>
+
+<p>In case you want to run some specific code once the system has successfully delivered your NDEF
+message to the other device, you can implement {@link
+android.nfc.NfcAdapter.OnNdefPushCompleteCallback} and set it with {@link
+android.nfc.NfcAdapter#setOnNdefPushCompleteCallback setNdefPushCompleteCallback()}. The system will
+then call {@link android.nfc.NfcAdapter.OnNdefPushCompleteCallback#onNdefPushComplete
+onNdefPushComplete()} when the message is delivered.</p>
+
+<p>On the receiving device, the system dispatches NDEF Push messages in a similar way to regular NFC
+tags. The system invokes an intent with the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+action to start an activity, with either a URL or a MIME type set according to the first {@link
+android.nfc.NdefRecord} in the {@link android.nfc.NdefMessage}. For the activity you want to
+respond, you can declare intent filters for the URLs or MIME types your app cares about. For more
+information about Tag Dispatch see the <a
+href="{@docRoot}guide/topics/connectivity/nfc/index.html#dispatch">NFC</a> developer guide.</p>
+
+<p>If you want your {@link android.nfc.NdefMessage} to carry a URI, you can now use the convenience
+method {@link android.nfc.NdefRecord#createUri createUri} to construct a new {@link
+android.nfc.NdefRecord} based on either a string or a {@link android.net.Uri} object. If the URI is
+a special format that you want your application to also receive during an Android Beam event, you
+should create an intent filter for your activity using the same URI scheme in order to receive the
+incoming NDEF message.</p>
+
+<p>You should also pass an “Android application record" with your {@link android.nfc.NdefMessage} in
+order to guarantee that your application handles the incoming NDEF message, even if other
+applications filter for the same intent action. You can create an Android application record by
+calling {@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}, passing it
+your application’s package name. When the other device receives the NDEF message with the
+application record and multiple applications contain activities that handle the specified intent,
+the system always delivers the message to the activity in your application (based on the matching
+application record). If the target device does not currently have your application installed, the
+system uses the Android application record to launch Google Play and take the user to the
+application in order to install it.</p>
+
+<p>If your application doesn’t use NFC APIs to perform NDEF Push messaging, then Android provides a
+default behavior: When your application is in the foreground on one device and Android Beam is
+invoked with another Android-powered device, then the other device receives an NDEF message with an
+Android application record that identifies your application. If the receiving device has the
+application installed, the system launches it; if it’s not installed, Google Play opens and takes
+the user to your application in order to install it.</p>
+
+<p>You can read more about Android Beam and other NFC features in the <a
+href="{@docRoot}guide/topics/connectivity/nfc/nfc.html">NFC Basics</a> developer guide. For some example code
+using Android Beam, see the <a
+href="{@docRoot}resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html">Android
+Beam Demo</a>.</p>
+
+
+
+
+
+<h3 id="WiFiDirect">Wi-Fi Direct</h3>
+
+<p>Android now supports Wi-Fi Direct for peer-to-peer (P2P) connections between Android-powered
+devices and other device types without a hotspot or Internet connection. The Android framework
+provides a set of Wi-Fi P2P APIs that allow you to discover and connect to other devices when each
+device supports Wi-Fi Direct, then communicate over a speedy connection across distances much longer
+than a Bluetooth connection.</p>
+
+<p>A new package, {@link android.net.wifi.p2p}, contains all the APIs for performing peer-to-peer
+connections with Wi-Fi. The primary class you need to work with is {@link
+android.net.wifi.p2p.WifiP2pManager}, which you can acquire by calling {@link
+android.app.Activity#getSystemService getSystemService(WIFI_P2P_SERVICE)}. The {@link
+android.net.wifi.p2p.WifiP2pManager} includes APIs that allow you to:</p>
+<ul>
+<li>Initialize your application for P2P connections by calling {@link
+android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</li>
+
+<li>Discover nearby devices by calling {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers
+discoverPeers()}</li>
+
+<li>Start a P2P connection by calling {@link android.net.wifi.p2p.WifiP2pManager#connect
+connect()}</li>
+<li>And more</li>
+</ul>
+
+<p>Several other interfaces and classes are necessary as well, such as:</p>
+<ul>
+<li>The {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} interface allows you to receive
+callbacks when an operation such as discovering peers or connecting to them succeeds or fails.</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface allows you to receive
+information about discovered peers. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pDeviceList}, from which you can retrieve a {@link
+android.net.wifi.p2p.WifiP2pDevice} object for each device within range and get information such as
+the device name, address, device type, the WPS configurations the device supports, and more.</li>
+
+<li>The {@link android.net.wifi.p2p.WifiP2pManager.GroupInfoListener} interface allows you to
+receive information about a P2P group. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pGroup} object, which provides group information such as the owner, the
+network name, and passphrase.</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener} interface allows you to
+receive information about the current connection. The callback provides a {@link
+android.net.wifi.p2p.WifiP2pInfo} object, which has information such as whether a group has been
+formed and who is the group owner.</li>
+</ul>
+
+<p>In order to use the Wi-Fi P2P APIs, your app must request the following user permissions:</p>
+<ul>
+<li>{@link android.Manifest.permission#ACCESS_WIFI_STATE}</li>
+<li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li>
+<li>{@link android.Manifest.permission#INTERNET} (although your app doesn’t technically connect
+to the Internet, communicating to Wi-Fi Direct peers with standard java sockets requires Internet
+permission).</li>
+</ul>
+
+<p>The Android system also broadcasts several different actions during certain Wi-Fi P2P events:</p>
+<ul>
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_CONNECTION_CHANGED_ACTION}: The P2P
+connection state has changed. This carries {@link
+android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_P2P_INFO} with a {@link
+android.net.wifi.p2p.WifiP2pInfo} object and {@link
+android.net.wifi.p2p.WifiP2pManager#EXTRA_NETWORK_INFO} with a {@link android.net.NetworkInfo}
+object.</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_CHANGED_ACTION}: The P2P state has
+changed between enabled and disabled. It carries {@link
+android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_STATE} with either {@link
+android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_DISABLED} or {@link
+android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_ENABLED}</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION}: The list of peer
+devices has changed.</li>
+
+<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_THIS_DEVICE_CHANGED_ACTION}: The details for
+this device have changed.</li>
+</ul>
+
+<p>See the  {@link android.net.wifi.p2p.WifiP2pManager} documentation for more information. Also
+look at the <a href="{@docRoot}resources/samples/WiFiDirectDemo/index.html">Wi-Fi Direct Demo</a>
+sample application.</p>
+
+
+
+
+
+<h3 id="Bluetooth">Bluetooth Health Devices</h3>
+
+<p>Android now supports Bluetooth Health Profile devices, so you can create applications that use
+Bluetooth to communicate with health devices that support Bluetooth, such as heart-rate monitors,
+blood meters, thermometers, and scales.</p>
+
+<p>Similar to regular headset and A2DP profile devices, you must call {@link
+android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with a {@link
+android.bluetooth.BluetoothProfile.ServiceListener} and the {@link
+android.bluetooth.BluetoothProfile#HEALTH} profile type to establish a connection with the profile
+proxy object.</p>
+
+<p>Once you’ve acquired the Health Profile proxy (the {@link android.bluetooth.BluetoothHealth}
+object), connecting to and communicating with paired health devices involves the following new
+Bluetooth classes:</p>
+<ul>
+<li>{@link android.bluetooth.BluetoothHealthCallback}: You must extend this class and implement the
+callback methods to receive updates about changes in the application’s registration state and
+Bluetooth channel state.</li>
+<li>{@link android.bluetooth.BluetoothHealthAppConfiguration}: During callbacks to your {@link
+android.bluetooth.BluetoothHealthCallback}, you’ll receive an instance of this object, which
+provides configuration information about the available Bluetooth health device, which you must use
+to perform various operations such as initiate and terminate connections with the {@link
+android.bluetooth.BluetoothHealth} APIs.</li>
+</ul>
+
+<p>For more information about using the Bluetooth Health Profile, see the documentation for {@link
+android.bluetooth.BluetoothHealth}.</p>
+
+
+
+
+
+<h3 id="A11y">Accessibility</h3>
+
+<p>Android 4.0 improves accessibility for sight-impaired users with new explore-by-touch mode
+and extended APIs that allow you to provide more information about view content or
+develop advanced accessibility services.</p>
+
+
+<h4>Explore-by-touch mode</h4>
+
+<p>Users with vision loss can now explore the screen by touching and dragging a finger across the
+screen to hear voice descriptions of the content. Because the explore-by-touch mode works like a
+virtual cursor, it allows screen readers to identify the descriptive text the same way that screen
+readers can when the user navigates with a d-pad or trackball&mdash;by reading information provided
+by {@link android.R.attr#contentDescription android:contentDescription} and {@link
+android.view.View#setContentDescription setContentDescription()} upon a simulated "hover" event. So,
+consider this is a reminder that you should provide descriptive text for the views in your
+application, especially for {@link android.widget.ImageButton}, {@link android.widget.EditText},
+{@link android.widget.ImageView} and other widgets that might not naturally contain descriptive
+text.</p>
+
+
+<h4>Accessibility for views</h4>
+
+<p>To enhance the information available to accessibility services such as screen readers, you can
+implement new callback methods for accessibility events in your custom {@link
+android.view.View} components.</p>
+
+<p>It's important to first note that the behavior of the {@link
+android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} method has changed in Android
+4.0. As with previous version of Android, when the user enables accessibility services on the device
+and an input event such as a click or hover occurs, the respective view is notified with a call to
+{@link android.view.View#sendAccessibilityEvent sendAccessibilityEvent()}. Previously, the
+implementation of {@link android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} would
+initialize an {@link android.view.accessibility.AccessibilityEvent} and send it to {@link
+android.view.accessibility.AccessibilityManager}. The new behavior involves some additional callback
+methods that allow the view and its parents to add more contextual information to the event:
+<ol>
+  <li>When invoked, the {@link
+android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} and {@link
+android.view.View#sendAccessibilityEventUnchecked sendAccessibilityEventUnchecked()} methods defer
+to {@link android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()}. 
+  <p>Custom implementations of {@link android.view.View} might want to implement {@link
+android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()} to
+attach additional accessibility information to the {@link
+android.view.accessibility.AccessibilityEvent}, but should also call the super implementation to
+provide default information such as the standard content description, item index, and more.
+However, you should not add additional text content in this callback&mdash;that happens
+next.</p></li>
+  <li>Once initialized, if the event is one of several types that should be populated with text
+information, the view then receives a call to {@link
+android.view.View#dispatchPopulateAccessibilityEvent dispatchPopulateAccessibilityEvent()}, which
+defers to the {@link android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}
+callback.
+  <p>Custom implementations of {@link android.view.View} should usually implement {@link
+android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()} to add additional
+text content to the {@link android.view.accessibility.AccessibilityEvent} if the {@link
+android.R.attr#contentDescription android:contentDescription} text is missing or
+insufficient. To add more text description to the
+{@link android.view.accessibility.AccessibilityEvent}, call {@link
+android.view.accessibility.AccessibilityEvent#getText()}.{@link java.util.List#add add()}.</p>
+</li>
+  <li>At this point, the {@link android.view.View} passes the event up the view hierarchy by calling
+{@link android.view.ViewGroup#requestSendAccessibilityEvent requestSendAccessibilityEvent()} on the
+parent view. Each parent view then has the chance to augment the accessibility information by
+adding an {@link android.view.accessibility.AccessibilityRecord}, until it
+ultimately reaches the root view, which sends the event to the {@link
+android.view.accessibility.AccessibilityManager} with {@link
+android.view.accessibility.AccessibilityManager#sendAccessibilityEvent
+sendAccessibilityEvent()}.</li>
+</ol>
+
+<p>In addition to the new methods above, which are useful when extending the {@link
+android.view.View} class, you can also intercept these event callbacks on any {@link
+android.view.View} by extending {@link
+android.view.View.AccessibilityDelegate AccessibilityDelegate} and setting it on the view with
+{@link android.view.View#setAccessibilityDelegate setAccessibilityDelegate()}.
+When you do, each accessibility method in the view defers the call to the corresponding method in
+the delegate. For example, when the view receives a call to {@link
+android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}, it passes it to the
+same method in the {@link android.view.View.AccessibilityDelegate}. Any methods not handled by
+the delegate are given right back to the view for default behavior. This allows you to override only
+the methods necessary for any given view without extending the {@link android.view.View} class.</p>
+
+
+<p>If you want to maintain compatibility with Android versions prior to 4.0, while also supporting
+the new the accessibility APIs, you can do so with the latest version of the <em>v4 support
+library</em> (in <a href="{@docRoot}tools/extras/support-library.html">Compatibility Package, r4</a>)
+using a set of utility classes that provide the new accessibility APIs in a backward-compatible
+design.</p>
+
+
+
+
+<h4>Accessibility services</h4>
+
+<p>If you're developing an accessibility service, the information about various accessibility events
+has been significantly expanded to enable more advanced accessibility feedback for users. In
+particular, events are generated based on view composition, providing better context information and
+allowing accessibility services to traverse view hierarchies to get additional view information and
+deal with special cases.</p>
+
+<p>If you're developing an accessibility service (such as a screen reader), you can access
+additional content information and traverse view hierarchies with the following procedure:</p>
+<ol>
+<li>Upon receiving an {@link android.view.accessibility.AccessibilityEvent} from an application,
+call the {@link android.view.accessibility.AccessibilityEvent#getRecord(int)
+AccessibilityEvent.getRecord()} to retrieve a specific {@link
+android.view.accessibility.AccessibilityRecord} (there may be several records attached to the
+event).</li>
+
+<li>From either {@link android.view.accessibility.AccessibilityEvent} or an individual {@link
+android.view.accessibility.AccessibilityRecord}, you can call {@link 
+android.view.accessibility.AccessibilityRecord#getSource() getSource()} to retrieve a {@link
+android.view.accessibility.AccessibilityNodeInfo} object.
+  <p>An {@link android.view.accessibility.AccessibilityNodeInfo} represents a single node
+of the window content in a format that allows you to query accessibility information about that
+node. The {@link android.view.accessibility.AccessibilityNodeInfo} object returned from {@link
+android.view.accessibility.AccessibilityEvent} describes the event source, whereas the source from
+an {@link android.view.accessibility.AccessibilityRecord} describes the predecessor of the event
+source.</p></li>
+
+<li>With the {@link android.view.accessibility.AccessibilityNodeInfo}, you can query information
+about it, call {@link
+android.view.accessibility.AccessibilityNodeInfo#getParent getParent()} or {@link
+android.view.accessibility.AccessibilityNodeInfo#getChild getChild()} to traverse the view
+hierarchy, and even add child views to the node.</li>
+</ol>
+
+<p>In order for your application to publish itself to the system as an accessibility service, it
+must declare an XML configuration file that corresponds to {@link
+android.accessibilityservice.AccessibilityServiceInfo}. For more information about creating an
+accessibility service, see {@link
+android.accessibilityservice.AccessibilityService} and {@link
+android.accessibilityservice.AccessibilityService#SERVICE_META_DATA
+SERVICE_META_DATA} for information about the XML configuration.</p>
+
+
+<h4>Other accessibility APIs</h4>
+
+<p>If you're interested in the device's accessibility state, the {@link
+android.view.accessibility.AccessibilityManager} has some new APIs such as:</p>
+<ul>
+  <li>{@link android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener}
+is an interface that allows you to receive a callback whenever accessibility is enabled or
+disabled.</li>
+  <li>{@link android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList
+    getEnabledAccessibilityServiceList()} provides information about which accessibility services
+    are currently enabled.</li>
+  <li>{@link android.view.accessibility.AccessibilityManager#isTouchExplorationEnabled()} tells
+  you whether the explore-by-touch mode is enabled.</li>
+</ul>
+
+
+
+
+
+
+<h3 id="SpellChecker">Spell Checker Services</h3>
+
+<p>A new spell checker framework allows apps to create spell checkers in a manner similar to the
+input method framework (for IMEs). To create a new spell checker, you must implement a service that
+extends
+{@link android.service.textservice.SpellCheckerService} and extend the {@link
+android.service.textservice.SpellCheckerService.Session} class to provide spelling suggestions based
+on text provided by the interface's callback methods. In the {@link
+android.service.textservice.SpellCheckerService.Session} callback methods, you must return the
+spelling suggestions as {@link android.view.textservice.SuggestionsInfo} objects. </p>
+
+<p>Applications with a spell checker service must declare the {@link
+android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service.
+The service must also declare an intent filter with {@code &lt;action
+android:name="android.service.textservice.SpellCheckerService" />} as the intent’s action and should
+include a {@code &lt;meta-data&gt;} element that declares configuration information for the spell
+checker. </p>
+
+<p>See the sample <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
+Spell Checker Service</a> app and
+sample <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
+Spell Checker Client</a> app for example code.</p>
+
+
+
+
+<h3 id="TTS">Text-to-speech Engines</h3>
+
+<p>Android’s text-to-speech (TTS) APIs have been significantly extended to allow applications to
+more easily implement custom TTS engines, while applications that want to use a TTS engine have a
+couple new APIs for selecting an engine.</p>
+
+
+<h4>Using text-to-speech engines</h4>
+
+<p>In previous versions of Android, you could use the {@link android.speech.tts.TextToSpeech} class
+to perform text-to-speech (TTS) operations using the TTS engine provided by the system or set a
+custom engine using {@link android.speech.tts.TextToSpeech#setEngineByPackageName
+setEngineByPackageName()}. In Android 4.0, the {@link
+android.speech.tts.TextToSpeech#setEngineByPackageName setEngineByPackageName()} method has been
+deprecated and you can now specify the engine to use with a new {@link
+android.speech.tts.TextToSpeech} constructor that accepts the package name of a TTS engine.</p>
+
+<p>You can also query the available TTS engines with {@link
+android.speech.tts.TextToSpeech#getEngines()}. This method returns a list of {@link
+android.speech.tts.TextToSpeech.EngineInfo} objects, which include meta data such as the engine’s
+icon, label, and package name.</p>
+
+
+<h4>Building text-to-speech engines</h4>
+
+<p>Previously, custom engines required that the engine be built using an undocumented native header
+file. In Android 4.0, there is a complete set of framework APIs for building TTS engines. </p>
+
+<p>The basic setup requires an implementation of {@link android.speech.tts.TextToSpeechService} that
+responds to the {@link android.speech.tts.TextToSpeech.Engine#INTENT_ACTION_TTS_SERVICE} intent. The
+primary work for a TTS engine happens during the {@link
+android.speech.tts.TextToSpeechService#onSynthesizeText onSynthesizeText()} callback in a service
+that extends {@link android.speech.tts.TextToSpeechService}. The system delivers this method two
+objects:</p>
+<ul>
+<li>{@link android.speech.tts.SynthesisRequest}: This contains various data including the text to
+synthesize, the locale, the speech rate, and voice pitch.</li>
+<li>{@link android.speech.tts.SynthesisCallback}: This is the interface by which your TTS engine
+delivers the resulting speech data as streaming audio. First the engine must call {@link
+android.speech.tts.SynthesisCallback#start start()} to indicate that the engine is ready to deliver
+the audio, then call {@link android.speech.tts.SynthesisCallback#audioAvailable audioAvailable()},
+passing it the audio data in a byte buffer. Once your engine has passed all audio through the
+buffer, call {@link android.speech.tts.SynthesisCallback#done()}.</li>
+</ul>
+
+<p>Now that the framework supports a true API for creating TTS engines, support for the native code
+implementation has been removed. Look for a blog post about a compatibility layer
+that you can use to convert your old TTS engines to the new framework.</p>
+
+<p>For an example TTS engine using the new APIs, see the <a
+href="{@docRoot}resources/samples/TtsEngine/index.html">Text To Speech Engine</a> sample app.</p>
+
+
+
+
+
+
+<h3 id="NetworkUsage">Network Usage</h3>
+
+<p>Android 4.0 gives users precise visibility of how much network data their applications are using.
+The Settings app provides controls that allow users to manage set limits for network data usage and
+even disable the use of background data for individual apps. In order to avoid users disabling your
+app’s access to data from the background, you should develop strategies to use the data
+connection efficiently and adjust your usage depending on the type of connection available.</p>
+
+<p>If your application performs a lot of network transactions, you should provide user settings that
+allow users to control your app’s data habits, such as how often your app syncs data, whether to
+perform uploads/downloads only when on Wi-Fi, whether to use data while roaming, etc. With these
+controls available to them, users are much less likely to disable your app’s access to data when
+they approach their limits, because they can instead precisely control how much data your app uses.
+If you provide a preference activity with these settings, you should include in its manifest
+declaration an intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}
+action. For example:</p>
+
+<pre>
+&lt;activity android:name="DataPreferences" android:label="@string/title_preferences">
+    &lt;intent-filter>
+       &lt;action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
+       &lt;category android:name="android.intent.category.DEFAULT" />
+    &lt;/intent-filter>
+&lt;/activity>
+</pre>
+
+<p>This intent filter indicates to the system that this is the activity that controls your
+application’s data usage. Thus, when the user inspects how much data your app is using from the
+Settings app, a “View application settings" button is available that launches your
+preference activity so the user can refine how much data your app uses.</p>
+
+<p>Also beware that {@link android.net.ConnectivityManager#getBackgroundDataSetting()} is now
+deprecated and always returns true&mdash;use  {@link
+android.net.ConnectivityManager#getActiveNetworkInfo()} instead. Before you attempt any network
+transactions, you should always call {@link android.net.ConnectivityManager#getActiveNetworkInfo()}
+to get the {@link android.net.NetworkInfo} that represents the current network and query {@link
+android.net.NetworkInfo#isConnected()} to check whether the device has a
+connection. You can then check other connection properties, such as whether the device is
+roaming or connected to Wi-Fi.</p>
+
+
+
+
+
+
+
+
+<h3 id="RenderScript">RenderScript</h3>
+
+<p>Three major features have been added to RenderScript:</p>
+
+<ul>
+  <li>Off-screen rendering to a framebuffer object</li>
+  <li>Rendering inside a view</li>
+  <li>RS for each from the framework APIs</li>
+</ul>
+
+<p>The {@link android.renderscript.Allocation} class now supports a {@link
+android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} memory space, which allows you to
+render things directly into the {@link android.renderscript.Allocation} and use it as a framebuffer
+object.</p>
+
+<p>{@link android.renderscript.RSTextureView} provides a means to display RenderScript graphics
+inside of a {@link android.view.View},  unlike {@link android.renderscript.RSSurfaceView}, which
+creates a separate window. This key difference allows you to do things such as move, transform, or
+animate an {@link android.renderscript.RSTextureView} as well as draw RenderScript graphics inside
+a view that lies within an activity layout.</p>
+
+<p>The {@link android.renderscript.Script#forEach Script.forEach()} method allows you to call
+RenderScript compute scripts from the VM level and have them automatically delegated to available
+cores on the device. You do not use this method directly, but any compute RenderScript that you
+write will have a {@link android.renderscript.Script#forEach forEach()}  method that you can call in
+the reflected RenderScript class. You can call the reflected {@link
+android.renderscript.Script#forEach forEach()} method by passing in an input {@link
+android.renderscript.Allocation} to process, an output {@link android.renderscript.Allocation} to
+write the result to, and a {@link android.renderscript.FieldPacker} data structure in case the
+RenderScript needs more information. Only one of the {@link android.renderscript.Allocation}s is
+necessary and the data structure is optional.</p>
+
+
+
+
+
+
+
+
+
+<h3 id="Enterprise">Enterprise</h3>
+
+<p>Android 4.0 expands the capabilities for enterprise application with the following features.</p>
+
+<h4>VPN services</h4>
+
+<p>The new {@link android.net.VpnService} allows applications to build their own VPN (Virtual
+Private Network), running as a {@link android.app.Service}. A VPN service creates an interface for a
+virtual network with its own address and routing rules and performs all reading and writing with a
+file descriptor.</p>
+
+<p>To create a VPN service, use {@link android.net.VpnService.Builder}, which allows you to specify
+the network address, DNS server, network route, and more. When complete, you can establish the
+interface by calling {@link android.net.VpnService.Builder#establish()}, which returns a {@link
+android.os.ParcelFileDescriptor}. </p>
+
+<p>Because  a VPN service can intercept packets, there are security implications.  As such, if you
+implement {@link android.net.VpnService}, then your service must require the {@link
+android.Manifest.permission#BIND_VPN_SERVICE} to ensure that only the system can bind to it (only
+the system is granted this permission&mdash;apps cannot request it). To then use your VPN service,
+users must manually enable it in the system settings.</p>
+
+
+<h4>Device policies</h4>
+
+<p>Applications that manage the device restrictions can now disable the camera using {@link
+android.app.admin.DevicePolicyManager#setCameraDisabled setCameraDisabled()} and the {@link
+android.app.admin.DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA} property (applied with a {@code
+&lt;disable-camera /&gt;} element in the policy configuration file).</p>
+
+
+<h4>Certificate management</h4>
+
+<p>The new {@link android.security.KeyChain} class provides APIs that allow you to import and access
+certificates in the system key store. Certificates streamline the installation of both client
+certificates (to validate the identity of the user) and certificate authority certificates (to
+verify server identity). Applications such as web browsers or email clients can access the installed
+certificates to authenticate users to servers. See the {@link android.security.KeyChain}
+documentation for more information.</p>
+
+
+
+
+
+
+
+<h3 id="Sensors">Device Sensors</h3>
+
+<p>Two new sensor types have been added in Android 4.0:</p>
+
+<ul>
+  <li>{@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE}: A temperature sensor that provides
+the ambient (room) temperature in degrees Celsius.</li>
+  <li>{@link android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}: A humidity sensor that provides the
+relative ambient (room) humidity as a percentage.</li>
+</ul>
+
+<p>If a device has both {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and  {@link
+android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} sensors, you can use them to calculate the dew point
+and the absolute humidity.</p>
+
+<p>The previous temperature sensor, {@link android.hardware.Sensor#TYPE_TEMPERATURE}, has been
+deprecated. You should use the {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} sensor
+instead.</p>
+
+<p>Additionally, Android’s three synthetic sensors have been greatly improved so they now have lower
+latency and smoother output. These sensors include the gravity sensor ({@link
+android.hardware.Sensor#TYPE_GRAVITY}), rotation vector sensor ({@link
+android.hardware.Sensor#TYPE_ROTATION_VECTOR}), and linear acceleration sensor ({@link
+android.hardware.Sensor#TYPE_LINEAR_ACCELERATION}). The improved sensors rely on the gyroscope
+sensor to improve their output, so the sensors appear only on devices that have a gyroscope.</p>
+
+
+
+
+
+<h3 id="ActionBar">Action Bar</h3>
+
+<p>The {@link android.app.ActionBar} has been updated to support several new behaviors. Most
+importantly, the system gracefully manages the action bar’s size and configuration when running on
+smaller screens in order to provide an optimal user experience on all screen sizes. For example,
+when the screen is narrow (such as when a handset is in portrait orientation), the action bar’s
+navigation tabs appear in a “stacked bar," which appears directly below the main action bar. You can
+also opt-in to a “split action bar," which places all action items in a separate bar at the bottom
+of the screen when the screen is narrow.</p>
+
+
+<h4>Split action bar</h4>
+
+<p>If your action bar includes several action items, not all of them will fit into the action bar on
+a narrow screen, so the system will place more of them into the overflow menu. However, Android 4.0
+allows you to enable “split action bar" so that more action items can appear on the screen in a
+separate bar at the bottom of the screen. To enable split action bar, add {@link
+android.R.attr#uiOptions android:uiOptions} with {@code "splitActionBarWhenNarrow"} to either your
+<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
+tag or
+individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a> tags
+in your manifest file. When enabled, the system will add an additional bar at the bottom of the
+screen for all action items when the screen is narrow (no action items will appear in the primary
+action bar).</p>
+
+<p>If you want to use the navigation tabs provided by the {@link android.app.ActionBar.Tab} APIs,
+but don’t need the main action bar on top (you want only the tabs to appear at the top), then enable
+the split action bar as described above and also call {@link
+android.app.ActionBar#setDisplayShowHomeEnabled setDisplayShowHomeEnabled(false)} to disable the
+application icon in the action bar. With nothing left in the main action bar, it
+disappears&mdash;all that’s left are the navigation tabs at the top and the action items at the
+bottom of the screen.</p>
+
+
+<h4>Action bar styles</h4>
+
+<p>If you want to apply custom styling to the action bar, you can use new style properties {@link
+android.R.attr#backgroundStacked} and {@link android.R.attr#backgroundSplit} to apply a background
+drawable or color to the stacked bar and split bar, respectively. You can also set these styles at
+runtime with {@link android.app.ActionBar#setStackedBackgroundDrawable
+setStackedBackgroundDrawable()} and {@link android.app.ActionBar#setSplitBackgroundDrawable
+setSplitBackgroundDrawable()}.</p>
+
+
+<h4>Action provider</h4>
+
+<p>The new {@link android.view.ActionProvider} class allows you to create a specialized handler for
+action items. An action provider can define an action view, a default action behavior, and a submenu
+for each action item to which it is associated. When you want to create an action item that has
+dynamic behaviors (such as a variable action view, default action, or submenu), extending {@link
+android.view.ActionProvider} is a good solution in order to create a reusable component, rather than
+handling the various action item transformations in your fragment or activity.</p>
+
+<p>For example, the {@link android.widget.ShareActionProvider} is an extension of {@link
+android.view.ActionProvider} that facilitates a “share" action from the action bar. Instead of using
+traditional action item that invokes the {@link android.content.Intent#ACTION_SEND} intent, you can
+use this action provider to present an action view with a drop-down list of applications that handle
+the {@link android.content.Intent#ACTION_SEND} intent. When the user selects an application to use
+for the action, {@link android.widget.ShareActionProvider} remembers that selection and provides it
+in the action view for faster access to sharing with that app.</p>
+
+<p>To declare an action provider for an action item, include the {@code android:actionProviderClass}
+attribute in the <a href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
+&lt;item&gt;}</a> element for your activity’s options menu, with the class name of the action
+provider as the value. For example:</p>
+
+<pre>
+&lt;item android:id="@+id/menu_share"
+      android:title="Share"
+      android:showAsAction="ifRoom"
+      android:actionProviderClass="android.widget.ShareActionProvider" /&gt;
+</pre>
+
+<p>In your activity’s {@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()}
+callback method, retrieve an instance of the action provider from the menu item and set the
+intent:</p>
+
+<pre>
+public boolean onCreateOptionsMenu(Menu menu) {
+    getMenuInflater().inflate(R.menu.options, menu);
+    ShareActionProvider shareActionProvider =
+          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
+    // Set the share intent of the share action provider.
+    shareActionProvider.setShareIntent(createShareIntent());
+    ...
+    return super.onCreateOptionsMenu(menu);
+}
+</pre>
+
+<p>For an example using the {@link android.widget.ShareActionProvider}, see <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html"
+>ActionBarShareActionProviderActivity</a> in ApiDemos.</p>
+
+
+<h4>Collapsible action views</h4>
+
+<p>Action items that provide an action view can now toggle between their action view state and
+traditional action item state. Previously only the {@link android.widget.SearchView} supported
+collapsing when used as an action view, but now you can add an action view for any action item and
+switch between the expanded state (action view is visible) and collapsed state (action item is
+visible).</p>
+
+<p>To declare that an action item that contains an action view be collapsible, include the {@code
+“collapseActionView"} flag in the {@code android:showAsAction} attribute for the <a
+href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
+&lt;item&gt;}</a> element in the menu’s XML file.</p>
+
+<p>To receive callbacks when an action view switches between expanded and collapsed, register an
+instance of {@link android.view.MenuItem.OnActionExpandListener} with the respective {@link
+android.view.MenuItem} by calling {@link android.view.MenuItem#setOnActionExpandListener
+setOnActionExpandListener()}. Typically, you should do so during the {@link
+android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()} callback.</p>
+
+<p>To control a collapsible action view, you can call {@link
+android.view.MenuItem#collapseActionView()} and {@link android.view.MenuItem#expandActionView()} on
+the respective {@link android.view.MenuItem}.</p>
+
+<p>When creating a custom action view, you can also implement the new {@link
+android.view.CollapsibleActionView} interface to receive callbacks when the view is expanded and
+collapsed.</p>
+
+
+<h4>Other APIs for action bar</h4>
+<ul>
+<li>{@link android.app.ActionBar#setHomeButtonEnabled setHomeButtonEnabled()} allows you to specify
+whether the icon/logo behaves as a button to navigate home or “up" (pass “true" to make it behave as
+a button).</li>
+
+<li>{@link android.app.ActionBar#setIcon setIcon()} and {@link android.app.ActionBar#setLogo
+setLogo()} allow you to define the action bar icon or logo at runtime.</li>
+
+<li>{@link android.app.Fragment#setMenuVisibility Fragment.setMenuVisibility()} allows you to enable
+or disable the visibility of the options menu items declared by the fragment. This is useful if the
+fragment has been added to the activity, but is not visible, so the menu items should be
+hidden.</li>
+
+<li>{@link android.app.FragmentManager#invalidateOptionsMenu
+FragmentManager.invalidateOptionsMenu()}
+allows you to invalidate the activity options menu during various states of the fragment lifecycle
+in which using the equivalent method from {@link android.app.Activity} might not be available.</li>
+</ul>
+
+
+
+
+
+
+
+
+<h3 id="UI">User Interface and Views</h3>
+
+<p>Android 4.0 introduces a variety of new views and other UI components.</p>
+
+
+<h4>GridLayout</h4>
+
+<p>{@link android.widget.GridLayout} is a new view group that places child views in a rectangular
+grid. Unlike {@link android.widget.TableLayout}, {@link android.widget.GridLayout} relies on a flat
+hierarchy and does not make use of intermediate views such as table rows for providing structure.
+Instead, children specify which row(s) and column(s) they should occupy (cells can span multiple
+rows and/or columns), and by default are laid out sequentially across the grid’s rows and columns.
+The {@link android.widget.GridLayout} orientation determines whether sequential children are by
+default laid out horizontally or vertically. Space between children may be specified either by using
+instances of the new {@link android.widget.Space} view or by setting the relevant margin parameters
+on children.</p>
+
+<p>See <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/index.html">ApiDemos</a
+>
+for samples using {@link android.widget.GridLayout}.</p>
+
+
+
+<h4>TextureView</h4>
+
+<p>{@link android.view.TextureView} is a new view that allows you to display a content stream, such
+as a video or an OpenGL scene. Although similar to {@link android.view.SurfaceView}, {@link
+android.view.TextureView} is unique in that it behaves like a regular view, rather than creating a
+separate window, so you can treat it like any other {@link android.view.View} object. For example,
+you can apply transforms, animate it using {@link android.view.ViewPropertyAnimator}, or
+adjust its opacity with {@link android.view.View#setAlpha setAlpha()}.</p>
+
+<p>Beware that {@link android.view.TextureView} works only within a hardware accelerated window.</p>
+
+<p>For more information, see the {@link android.view.TextureView} documentation.</p>
+
+
+<h4>Switch widget</h4>
+
+<p>The new {@link android.widget.Switch} widget is a two-state toggle that users can drag to one
+side or the other (or simply tap) to toggle an option between two states.</p>
+
+<p>You can use the {@code android:textOn} and {@code android:textOff} attributes to specify the text
+to appear on the switch when in the on and off setting. The {@code android:text} attribute also
+allows you to place a label alongside the switch.</p>
+
+<p>For a sample using switches, see the <a
+href="{@docRoot}resources/samples/ApiDemos/res/layout/switches.html">switches.xml</a> layout file
+and respective <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html">Switches
+</a> activity.</p>
+
+
+<h4>Popup menus</h4>
+
+<p>Android 3.0 introduced {@link android.widget.PopupMenu} to create short contextual menus that pop
+up at an anchor point you specify (usually at the point of the item selected). Android 4.0 extends
+the {@link android.widget.PopupMenu} with a couple useful features:</p>
+<ul>
+<li>You can now easily inflate the contents of a popup menu from an XML <a
+href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a> with {@link
+android.widget.PopupMenu#inflate inflate()}, passing it the menu resource ID.</li>
+<li>You can also now create a {@link android.widget.PopupMenu.OnDismissListener} that receives a
+callback when the menu is dismissed.</li>
+</ul>
+
+
+<h4>Preferences</h4>
+
+<p>A new {@link android.preference.TwoStatePreference} abstract class serves as the basis for
+preferences that provide a two-state selection option. The new {@link
+android.preference.SwitchPreference} is an extension of {@link
+android.preference.TwoStatePreference} that provides a {@link android.widget.Switch} widget in the
+preference view to allow users to toggle a setting on or off without the need to open an additional
+preference screen or dialog. For example, the Settings application uses a {@link
+android.preference.SwitchPreference} for the Wi-Fi and Bluetooth settings.</p>
+
+
+
+<h4>System themes</h4>
+
+<p>The default theme for all applications that target Android 4.0 (by setting either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
+{@code “14"} or higher) is now the
+"device default" theme: {@link android.R.style#Theme_DeviceDefault Theme.DeviceDefault}. This may be
+the dark Holo theme or a different dark theme defined by the specific device.</p>
+
+<p>The {@link android.R.style#Theme_Holo Theme.Holo} family of themes are guaranteed to not change
+from one device to another when running the same version of Android. If you explicitly
+apply any of the {@link android.R.style#Theme_Holo Theme.Holo} themes to your activities, you can
+rest assured that these themes will not change character on different devices within the same
+platform version.</p>
+
+<p>If you wish for your app to blend in with the overall device theme (such as when different OEMs
+provide different default themes for the system), you should explicitly apply themes from the {@link
+android.R.style#Theme_DeviceDefault Theme.DeviceDefault} family.</p>
+
+
+<h4>Options menu button</h4>
+
+<p>Beginning with Android 4.0, you'll notice that handsets no longer require a Menu hardware button.
+However, there's no need for you to worry about this if your existing application provides an <a
+href="{@docRoot}guide/topics/ui/menus.html#options-menu">options menu</a> and expects there to be a
+Menu button. To ensure that existing apps continue to work as they expect, the system provides an
+on-screen Menu button for apps that were designed for older versions of Android.</p>
+
+<p>For the best user experience, new and updated apps should instead use the {@link
+android.app.ActionBar} to provide access to menu items and set <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "14"} to take advantage of the latest framework default behaviors.</p>
+
+
+
+<h4>Controls for system UI visibility</h4>
+
+<p>Since the early days of Android, the system has managed a UI component known as the <em>status
+bar</em>, which resides at the top of handset devices to deliver information such as the carrier
+signal, time, notifications, and so on. Android 3.0 added the <em>system bar</em> for tablet
+devices, which resides at the bottom of the screen to provide system navigation controls (Home,
+Back, and so forth) and also an interface for elements traditionally provided by the status bar.  In
+Android 4.0, the system provides a new type of system UI called the <em>navigation bar</em>. You
+might consider the navigation bar a re-tuned version of the system bar designed for
+handsets&mdash;it provides navigation controls
+for devices that don’t have hardware counterparts for navigating the system, but it leaves out the
+system bar's notification UI and setting controls. As such, a device that provides the navigation
+bar also has the status bar at the top.</p>
+
+<p>To this day, you can hide the status bar on handsets using the {@link
+android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN} flag. In Android 4.0, the APIs that control
+the system bar’s visibility have been updated to better reflect the behavior of both the system bar
+and navigation bar:</p>
+<ul>
+<li>The {@link android.view.View#SYSTEM_UI_FLAG_LOW_PROFILE} flag replaces the {@code
+STATUS_BAR_HIDDEN} flag. When set, this flag enables “low profile" mode for the system bar or
+navigation bar. Navigation buttons dim and other elements in the system bar also hide. Enabling
+this is useful for creating more immersive games without distraction for the system navigation
+buttons.</li>
+
+<li>The {@link android.view.View#SYSTEM_UI_FLAG_VISIBLE} flag replaces the {@code
+STATUS_BAR_VISIBLE} flag to request the system bar or navigation bar be visible.</li>
+
+<li>The {@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION} is a new flag that requests
+the navigation bar hide completely. Be aware that this works only for the <em>navigation bar</em>
+used by some handsets (it does <strong>not</strong> hide the system bar on tablets). The navigation
+bar returns to view as soon as the system receives user input. As such, this mode is useful
+primarily for video playback or other cases in which the whole screen is needed but user input is
+not required.</li>
+</ul>
+
+<p>You can set each of these flags for the system bar and navigation bar by calling {@link
+android.view.View#setSystemUiVisibility setSystemUiVisibility()} on any view in your activity. The
+window manager combines (OR-together) all flags from all views in your window and
+apply them to the system UI as long as your window has input focus. When your window loses input
+focus (the user navigates away from your app, or a dialog appears), your flags cease to have effect.
+Similarly, if you remove those views from the view hierarchy their flags no longer apply.</p>
+
+<p>To synchronize other events in your activity with visibility changes to the system UI (for
+example, hide the action bar or other UI controls when the system UI hides), you should register a
+{@link android.view.View.OnSystemUiVisibilityChangeListener} to be notified when the visibility
+of the system bar or navigation bar changes.</p>
+
+<p>See the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html">
+OverscanActivity</a> class for a demonstration of different system UI options.</p>
+
+
+
+
+
+<h3 id="Input">Input Framework</h3>
+
+<p>Android 4.0 adds support for cursor hover events and new stylus and mouse button events.</p>
+
+<h4>Hover events</h4>
+
+<p>The {@link android.view.View} class now supports “hover" events to enable richer interactions
+through the use of pointer devices (such as a mouse or other devices that drive an on-screen
+cursor).</p>
+
+<p>To receive hover events on a view, implement the {@link android.view.View.OnHoverListener} and
+register it with {@link android.view.View#setOnHoverListener setOnHoverListener()}. When a hover
+event occurs on the view, your listener receives a call to {@link
+android.view.View.OnHoverListener#onHover onHover()}, providing the {@link android.view.View} that
+received the event and a {@link android.view.MotionEvent} that describes the type of hover event
+that occurred. The hover event can be one of the following:</p>
+<ul>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_ENTER}</li>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_EXIT}</li>
+<li>{@link android.view.MotionEvent#ACTION_HOVER_MOVE}</li>
+</ul>
+
+<p>Your {@link android.view.View.OnHoverListener} should return true from {@link
+android.view.View.OnHoverListener#onHover onHover()} if it handles the hover event.  If your
+listener returns false, then the hover event will be dispatched to the parent view as usual.</p>
+
+<p>If your application uses buttons or other widgets that change their appearance based on the
+current state, you can now use the {@code android:state_hovered} attribute in a <a
+href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state list drawable</a> to
+provide a different background drawable when a cursor hovers over the view.</p>
+
+<p>For a demonstration of the new hover events, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Hover.html">Hover</a> class in
+ApiDemos.</p>
+
+
+<h4>Stylus and mouse button events</h4>
+
+<p>Android now provides APIs for receiving input from a stylus input device such as a digitizer
+tablet peripheral or a stylus-enabled touch screen.</p>
+
+<p>Stylus input operates in a similar manner to touch or mouse input.  When the stylus is in contact
+with the digitizer, applications receive touch events just like they would when a finger is used to
+touch the display.  When the stylus is hovering above the digitizer, applications receive hover
+events just like they would when a mouse pointer was being moved across the display when no buttons
+are pressed.</p>
+
+<p>Your application can distinguish between finger, mouse, stylus and eraser input by querying the
+“tool type" associated with each pointer in a {@link android.view.MotionEvent} using {@link
+android.view.MotionEvent#getToolType getToolType()}.  The currently defined tool types are: {@link
+android.view.MotionEvent#TOOL_TYPE_UNKNOWN}, {@link android.view.MotionEvent#TOOL_TYPE_FINGER},
+{@link android.view.MotionEvent#TOOL_TYPE_MOUSE}, {@link android.view.MotionEvent#TOOL_TYPE_STYLUS},
+and {@link android.view.MotionEvent#TOOL_TYPE_ERASER}.  By querying the tool type, your application
+can choose to handle stylus input in different ways from finger or mouse input.</p>
+
+<p>Your application can also query which mouse or stylus buttons are pressed by querying the “button
+state" of a {@link android.view.MotionEvent} using {@link android.view.MotionEvent#getButtonState
+getButtonState()}.  The currently defined button states are: {@link
+android.view.MotionEvent#BUTTON_PRIMARY}, {@link android.view.MotionEvent#BUTTON_SECONDARY}, {@link
+android.view.MotionEvent#BUTTON_TERTIARY}, {@link android.view.MotionEvent#BUTTON_BACK}, and {@link
+android.view.MotionEvent#BUTTON_FORWARD}. For convenience, the back and forward mouse buttons are
+automatically mapped to the {@link android.view.KeyEvent#KEYCODE_BACK} and {@link
+android.view.KeyEvent#KEYCODE_FORWARD} keys.  Your application can handle these keys to support
+mouse button based back and forward navigation.</p>
+
+<p>In addition to precisely measuring the position and pressure of a contact, some stylus input
+devices also report the distance between the stylus tip and the digitizer, the stylus tilt angle,
+and the stylus orientation angle.  Your application can query this information using {@link
+android.view.MotionEvent#getAxisValue getAxisValue()} with the axis codes {@link
+android.view.MotionEvent#AXIS_DISTANCE}, {@link android.view.MotionEvent#AXIS_TILT}, and {@link
+android.view.MotionEvent#AXIS_ORIENTATION}.</p>
+
+<p>For a demonstration of tool types, button states and the new axis codes, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html">TouchPaint
+</a> class in ApiDemos.</p>
+
+
+
+
+
+
+<h3 id="Properties">Properties</h3>
+
+<p>The new {@link android.util.Property} class provides a fast, efficient, and easy way to specify a
+property on any object that allows callers to generically set/get values on target objects. It also
+allows the functionality of passing around field/method references and allows code to set/get values
+of the property without knowing the details of what the fields/methods are.</p>
+
+<p>For example, if you want to set the value of field {@code bar} on object {@code foo}, you would
+previously do this:</p>
+<pre>
+foo.bar = value;
+</pre>
+
+<p>If you want to call the setter for an underlying private field {@code bar}, you would previously
+do this:</p>
+<pre>
+foo.setBar(value);
+</pre>
+
+<p>However, if you want to pass around the {@code foo} instance and have some other code set the
+{@code bar} value, there is really no way to do it prior to Android 4.0.</p>
+
+<p>Using the {@link android.util.Property} class, you can declare a {@link android.util.Property}
+object {@code BAR} on class {@code Foo} so that you can set the field on instance {@code foo} of
+class {@code Foo} like this:</p>
+<pre>
+BAR.set(foo, value);
+</pre>
+
+<p>The {@link android.view.View} class now leverages the {@link android.util.Property} class to
+allow you to set various fields, such as transform properties that were added in Android 3.0 ({@link
+android.view.View#ROTATION}, {@link android.view.View#ROTATION_X}, {@link
+android.view.View#TRANSLATION_X}, etc.).</p>
+
+<p>The {@link android.animation.ObjectAnimator} class also uses the {@link android.util.Property}
+class, so you can create an {@link android.animation.ObjectAnimator} with a {@link
+android.util.Property}, which is faster, more efficient, and more type-safe than the string-based
+approach.</p>
+
+
+
+
+
+
+<h3 id="HwAccel">Hardware Acceleration</h3>
+
+<p>Beginning with Android 4.0, hardware acceleration for all windows is enabled by default if your
+application has set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
+{@code “14"} or higher. Hardware acceleration generally results in smoother animations, smoother
+scrolling, and overall better performance and response to user interaction.</p>
+
+<p>If necessary, you can manually disable hardware acceleration with the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#hwaccel">{@code hardwareAccelerated}</a>
+attribute for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a> elements or the <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
+element. You can alternatively disable hardware acceleration for individual views by calling {@link
+android.view.View#setLayerType setLayerType(LAYER_TYPE_SOFTWARE)}.</p>
+
+<p>For more information about hardware acceleration, including a list of unsupported drawing
+operations, see the <a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware
+Acceleration</a> document.</p>
+
+
+
+<h3 id="Jni">JNI Changes</h3>
+
+<p>In previous versions of Android, JNI local references weren’t indirect handles; Android used
+direct pointers. This wasn't a problem as long as the garbage collector didn't move objects, but it
+seemed to work because it made it possible to write buggy code. In Android 4.0, the system now uses
+indirect references in order to detect these bugs.</p>
+
+<p>The ins and outs of JNI local references are described in “Local and Global References" in <a
+href="{@docRoot}guide/practices/jni.html">JNI Tips</a>. In Android 4.0, <a
+href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">
+CheckJNI</a> has been enhanced to detect these errors. Watch the <a
+href="http://android-developers.blogspot.com/">Android Developers Blog</a> for an upcoming post
+about common errors with JNI references and how you can fix them.</p>
+
+<p>This change in the JNI implementation only affects apps that target Android 4.0 by setting either
+the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+targetSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+minSdkVersion}</a> to {@code “14"} or higher. If you’ve set these attributes to any lower value,
+then JNI local references behave the same as in previous versions.</p>
+
+
+
+
+
+<h3 id="WebKit">WebKit</h3>
+<ul>
+<li>WebKit updated to version 534.30</li>
+<li>Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex character support
+needed for combining glyphs) in {@link android.webkit.WebView} and the built-in Browser</li>
+<li>Support for Ethiopic, Georgian, and Armenian fonts in {@link android.webkit.WebView} and the
+built-in Browser</li>
+<li>Support for <a
+href="http://google-opensource.blogspot.com/2009/05/introducing-webdriver.html">WebDriver</a> makes
+it easier for you to test apps that use {@link android.webkit.WebView}</li>
+</ul>
+
+
+<h4>Android Browser</h4>
+
+<p>The Browser application adds the following features to support web applications:</p>
+<ul>
+<li>Updated V8 JavaScript compiler for faster performance</li>
+<li>Plus other notable enhancements carried over from <a
+href="{@docRoot}about/versions/android-3.0.html">Android
+3.0</a> are now available for handsets:
+<ul>
+<li>Support for fixed position elements on all pages</li>
+<li><a href="http://dev.w3.org/2009/dap/camera/">HTML media capture</a></li>
+<li><a href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device orientation
+events</a></li>
+<li><a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D transformations</a></li>
+</ul>
+</li>
+</ul>
+
+
+
+<h3 id="Permissions">Permissions</h3>
+
+<p>The following are new permissions:</p>
+<ul>
+<li>{@link android.Manifest.permission#ADD_VOICEMAIL}: Allows a voicemail service to add voicemail
+messages to the device.</li>
+<li>{@link android.Manifest.permission#BIND_TEXT_SERVICE}: A service that implements {@link
+android.service.textservice.SpellCheckerService} must require this permission for itself.</li>
+<li>{@link android.Manifest.permission#BIND_VPN_SERVICE}: A service that implements {@link
+android.net.VpnService} must require this permission for itself.</li>
+<li>{@link android.Manifest.permission#READ_PROFILE}: Provides read access to the {@link
+android.provider.ContactsContract.Profile} provider.</li>
+<li>{@link android.Manifest.permission#WRITE_PROFILE}: Provides write access to the {@link
+android.provider.ContactsContract.Profile} provider.</li>
+</ul>
+
+
+
+<h3 id="DeviceFeatures">Device Features</h3>
+
+<p>The following are new device features:</p>
+<ul>
+<li>{@link android.content.pm.PackageManager#FEATURE_WIFI_DIRECT}: Declares that the application
+uses
+Wi-Fi for peer-to-peer communications.</li>
+</ul>
+
+
+<div class="special" style="margin-top:3em">
+<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
+{@sdkPlatformApiLevel}), see the <a
+href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
+</div>
+
+
+<h2 id="Honeycomb">Previous APIs</h2>
+
+<p>In addition to everything above, Android 4.0 naturally supports all APIs from previous releases.
+Because the Android 3.x platform is available only for large-screen devices, if you've
+been developing primarily for handsets, then you might not be aware of all the APIs added to Android
+in these recent releases.</p>
+
+<p>Here's a look at some of the most notable APIs you might have missed that are now available
+on handsets as well:</p>
+
+<dl>
+  <dt><a href="android-3.0.html">Android 3.0</a></dt>
+  <dd>
+    <ul>
+      <li>{@link android.app.Fragment}: A framework component that allows you to separate distinct
+elements of an activity into self-contained modules that define their own UI and lifecycle. See the
+<a href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</li>
+      <li>{@link android.app.ActionBar}: A replacement for the traditional title bar at the top of
+the activity window. It includes the application logo in the left corner and provides a new
+interface for menu items. See the
+<a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guide.</li>
+      <li>{@link android.content.Loader}: A framework component that facilitates asynchronous
+loading of data in combination with UI components to dynamically load data without blocking the
+main thread. See the
+<a href="{@docRoot}guide/components/loaders.html">Loaders</a> developer guide.</li>
+      <li>System clipboard: Applications can copy and paste data (beyond mere text) to and from
+the system-wide clipboard. Clipped data can be plain text, a URI, or an intent. See the
+<a href="{@docRoot}guide/topics/text/copy-paste.html">Copy and Paste</a> developer guide.</li>
+      <li>Drag and drop: A set of APIs built into the view framework that facilitates drag and drop
+operations. See the
+<a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</li>
+      <li>An all new flexible animation framework allows you to animate arbitrary properties of any
+object (View, Drawable, Fragment, Object, or anything else) and define animation aspects such
+as duration, interpolation, repeat and more. The new framework makes Animations in Android
+simpler than ever. See the
+<a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a> developer
+guide.</li>
+      <li>RenderScript graphics and compute engine: RenderScript offers a high performance 3D
+graphics rendering and compute API at the native level, which you write in the C (C99 standard),
+providing the type of performance you expect from a native environment while remaining portable
+across various CPUs and GPUs. See the
+<a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer
+guide.</li>
+      <li>Hardware accelerated 2D graphics: You can now enable the OpenGL renderer for your
+application by setting {android:hardwareAccelerated="true"} in your manifest element's <a
+href="{@docRoot}guide/topics/manifest/application-element.html"><code>&lt;application&gt;</code></a>
+element or for individual <a
+href="{@docRoot}guide/topics/manifest/activity-element.html"><code>&lt;activity&gt;</code></a>
+elements. This results
+in smoother animations, smoother scrolling, and overall better performance and response to user
+interaction.
+      <p class="note"><strong>Note:</strong> If you set your application's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
+{@code "14"} or higher, hardware acceleration is enabled by default.</p></li>
+      <li>And much, much more. See the <a href="android-3.0.html">Android 3.0 Platform</a>
+notes for more information.</li>
+    </ul>
+  </dd>
+  
+  <dt><a href="android-3.1.html">Android 3.1</a></dt>
+  <dd>
+    <ul>
+      <li>USB APIs: Powerful new APIs for integrating connected peripherals with
+Android applications. The APIs are based on a USB stack and services that are
+built into the platform, including support for both USB host and device interactions. See the <a
+href="{@docRoot}guide/topics/connectivity/usb/index.html">USB Host and Accessory</a> developer guide.</li>
+      <li>MTP/PTP APIs: Applications can interact directly with connected cameras and other PTP
+devices to receive notifications when devices are attached and removed, manage files and storage on
+those devices, and transfer files and metadata to and from them. The MTP API implements the PTP
+(Picture Transfer Protocol) subset of the MTP (Media Transfer Protocol) specification. See the
+{@link android.mtp} documentation.</li>
+      <li>RTP APIs: Android exposes an API to its built-in RTP (Real-time Transport Protocol) stack,
+which applications can use to manage on-demand or interactive data streaming. In particular, apps
+that provide VOIP, push-to-talk, conferencing, and audio streaming can use the API to initiate
+sessions and transmit or receive data streams over any available network. See the {@link
+android.net.rtp} documentation.</li>
+      <li>Support for joysticks and other generic motion inputs.</li>
+      <li>See the <a href="android-3.1.html">Android 3.1 Platform</a>
+notes for many more new APIs.</li>
+    </ul>
+  </dd>
+  
+  <dt><a href="android-3.2.html">Android 3.2</a></dt>
+  <dd>
+    <ul>
+      <li>New screens support APIs that give you more control over how your applications are
+displayed across different screen sizes. The API extends the existing screen support model with the
+ability to precisely target specific screen size ranges by dimensions, measured in
+density-independent pixel units (such as 600dp or 720dp wide), rather than by their generalized
+screen sizes (such as large or xlarge). For example, this is important in order to help you
+distinguish between a 5" device and a 7" device, which would both traditionally be bucketed as
+"large" screens. See the blog post, <a
+href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
+New Tools for Managing Screen Sizes</a>.</li>
+      <li>New constants for <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> to
+declare landscape or portrait screen orientation requirements.</li>
+      <li>The device "screen size" configuration now changes during a screen orientation
+change. If your app targets API level 13 or higher, you must handle the {@code "screenSize"}
+configuration change if you also want to handle the {@code "orientation"} configuration change. See
+<a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
+android:configChanges}</a> for more information.</li>
+      <li>See the <a href="android-3.2.html">Android 3.2 Platform</a>
+notes for other new APIs.</li>
+    </ul>
+  </dd>
+
+</dl>
+
+
+
+
+<h3 id="api-level">API Level</h3>
+
+<p>The Android {@sdkPlatformVersion} API is assigned an integer
+identifier&mdash;<strong>{@sdkPlatformApiLevel}</strong>&mdash;that is stored in the system itself.
+This identifier, called the "API level", allows the system to correctly determine whether an
+application is compatible with the system, prior to installing the application. </p>
+
+<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
+application against an Android platform that supports API level {@sdkPlatformApiLevel} or
+higher. Depending on your needs, you might also need to add an
+<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
+element.</p>
+
+<p>For more information, read <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">What is API
+Level?</a></p>
diff --git a/docs/html/about/versions/api-levels.jd b/docs/html/about/versions/api-levels.jd
new file mode 100644
index 0000000..525e2cb
--- /dev/null
+++ b/docs/html/about/versions/api-levels.jd
@@ -0,0 +1,421 @@
+page.title=Android API Levels
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>In this document</h2>
+<ol>
+  <li><a href="#intro">What is API Level?</a></li>
+  <li><a href="#uses">Uses of API Level in Android</a></li>
+  <li><a href="#considerations">Development Considerations</a>
+    <ol>
+      <li><a href="#fc">Application forward compatibility</a></li>
+      <li><a href="#bc">Application backward compatibility</a></li>
+      <li><a href="#platform">Selecting a platform version and API Level</a></li>
+      <li><a href="#apilevel">Declaring a minimum API Level</a></li>
+      <li><a href="#testing">Testing against higher API Levels</a></li>
+    </ol>
+  </li>
+  <li><a href="#provisional">Using a Provisional API Level</a></li>
+  <li><a href="#filtering">Filtering the Documentation</a></li>
+</ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a> manifest element</li>
+  </ol>
+
+</div>
+</div>
+
+<p>As you develop your application on Android, it's useful to understand the
+platform's general approach to API change management. It's also important to
+understand the API Level identifier and the role it plays in ensuring your 
+application's compatibility with devices on which it may be installed. </p>
+
+<p>The sections below provide information about API Level and how it affects
+your applications. </p>
+
+<p>For information about how to use the "Filter by API Level" control
+available in the API reference documentation, see 
+<a href="#filtering">Filtering the documentation</a> at the 
+end of this document. </p>
+
+<h2 id="intro">What is API Level?</h2>
+
+<p>API Level is an integer value that uniquely identifies the framework API
+revision offered by a version of the Android platform.</p>
+
+<p>The Android platform provides a framework API that applications can use to
+interact with the underlying Android system. The framework API consists of:</p>
+
+<ul>
+<li>A core set of packages and classes</li>
+<li>A set of XML elements and attributes for declaring a manifest file</li>
+<li>A set of XML elements and attributes for declaring and accessing resources</li>
+<li>A set of Intents</li>
+<li>A set of permissions that applications can request, as well as permission
+enforcements included in the system</li>
+</ul>
+
+<p>Each successive version of the Android platform can include updates to the
+Android application framework API that it delivers. </p>
+
+<p>Updates to the framework API are designed so that the new API remains
+compatible with earlier versions of the API. That is, most changes in the API
+are additive and introduce new or replacement functionality. As parts of the API
+are upgraded, the older replaced parts are deprecated but are not removed, so
+that existing applications can still use them. In a very small number of cases,
+parts of the API may be modified or removed, although typically such changes are
+only needed to ensure API robustness and application or system security. All
+other API parts from earlier revisions are carried forward without
+modification.</p>
+
+<p>The framework API that an Android platform delivers is specified using an
+integer identifier called "API Level". Each Android platform version supports
+exactly one API Level, although support is implicit for all earlier API Levels
+(down to API Level 1). The initial release of the Android platform provided 
+API Level 1 and subsequent releases have incremented the API Level.</p>
+
+<p>The following table specifies the API Level supported by each version of the
+Android platform.</p>
+
+<table>
+  <tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr>
+ 
+     <tr><td><a href="{@docRoot}about/versions/android-4.0.3.html">Android 4.0.3</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/15/changes.html" title="Diff Report">15</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1}</td>
+    <td rowspan="2"><a href="{@docRoot}about/versions/android-4.0-highlights.html">Platform
+Highlights</a></td></tr>
+
+    <tr><td><a href="{@docRoot}about/versions/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/14/changes.html" title="Diff Report">14</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}</td>
+    </tr>
+  
+    <tr><td><a href="{@docRoot}about/versions/android-3.2.html">Android 3.2</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/13/changes.html" title="Diff Report">13</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}</td>
+    <td><!-- <a href="{@docRoot}about/versions/android-3.2-highlights.html">Platform Highlights</a>--></td></tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-3.1.html">Android 3.1.x</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/12/changes.html" title="Diff Report">12</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR1}</td>
+    <td><a href="{@docRoot}about/versions/android-3.1-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-3.0.html">Android 3.0.x</td>
+    <td><a href="{@docRoot}sdk/api_diff/11/changes.html" title="Diff Report">11</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB}</td>
+    <td><a href="{@docRoot}about/versions/android-3.0-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td>
+    <td><a href="{@docRoot}sdk/api_diff/10/changes.html" title="Diff Report">10</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}</td>
+    <td rowspan="2"><a href="{@docRoot}about/versions/android-2.3-highlights.html">Platform Highlights</a></td></tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android 2.3</td>
+    <td><a href="{@docRoot}sdk/api_diff/9/changes.html" title="Diff Report">9</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD}</td>
+    </tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-2.2.html">Android 2.2.x</td>
+    <td ><a href="{@docRoot}sdk/api_diff/8/changes.html" title="Diff Report">8</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#FROYO}</td>
+    <td><a href="{@docRoot}about/versions/android-2.2-highlights.html">Platform Highlights</a></td></tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-2.1.html">Android 2.1.x</td>
+    <td><a href="{@docRoot}sdk/api_diff/7/changes.html" title="Diff Report">7</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ECLAIR_MR1}</td>
+    <td rowspan="3" ><a href="{@docRoot}about/versions/android-2.0-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1</td>
+    <td><a href="{@docRoot}sdk/api_diff/6/changes.html" title="Diff Report">6</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ECLAIR_0_1}</td>
+    </tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-2.0.html">Android 2.0</td>
+    <td><a href="{@docRoot}sdk/api_diff/5/changes.html" title="Diff Report">5</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ECLAIR}</td>
+    </tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-1.6.html">Android 1.6</td>
+    <td><a href="{@docRoot}sdk/api_diff/4/changes.html" title="Diff Report">4</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#DONUT}</td>
+    <td><a href="{@docRoot}about/versions/android-1.6-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-1.5.html">Android 1.5</td>
+    <td><a href="{@docRoot}sdk/api_diff/3/changes.html" title="Diff Report">3</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#CUPCAKE}</td>
+    <td><a href="{@docRoot}about/versions/android-1.5-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-1.1.html">Android 1.1</td>
+    <td>2</td>
+    <td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr>
+    
+  <tr><td>Android 1.0</td>
+    <td>1</td>
+    <td>{@link android.os.Build.VERSION_CODES#BASE}</td>
+    <td></td></tr>
+</table>
+
+
+<h2 id="uses">Uses of API Level in Android</h2>
+
+<p>The API Level identifier serves a key role in ensuring the best possible
+experience for users and application developers: 
+
+<ul>
+<li>It lets the Android platform describe the maximum framework API revision 
+that it supports</li>
+<li>It lets applications describe the framework API revision that they
+require</li>
+<li>It lets the system negotiate the installation of applications on the user's
+device, such that version-incompatible applications are not installed.</li>
+</ul>
+
+<p>Each Android platform version stores its API Level identifier internally, in
+the Android system itself. </p>
+
+<p>Applications can use a manifest element provided by the framework API &mdash;
+<code>&lt;uses-sdk&gt;</code> &mdash; to describe the minimum and maximum API
+Levels under which they are able to run, as well as the preferred API Level that
+they are designed to support. The element offers three key attributes:</p>
+
+<ul>
+<li><code>android:minSdkVersion</code> &mdash; Specifies the minimum API Level
+on which the application is able to run. The default value is "1".</li>
+<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
+on which the application is designed to run. In some cases, this allows the
+application to use manifest elements or behaviors defined in the target
+API Level, rather than being restricted to using only those defined 
+for the minimum API Level.</li>
+<li><code>android:maxSdkVersion</code> &mdash; Specifies the maximum API Level
+on which the application is able to run. <strong>Important:</strong> Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation before using this attribute.  </li>
+</ul>
+
+<p>For example, to specify the minimum system API Level that an application
+requires in order to run, the application would include in its manifest a
+<code>&lt;uses-sdk&gt;</code> element with a <code>android:minSdkVersion</code>
+attribute. The value of <code>android:minSdkVersion</code> would be the integer
+corresponding to the API Level of the earliest version of the Android platform
+under which the application can run. </p>
+
+<p>When the user attempts to install an application, or when revalidating an
+appplication after a system update, the Android system first checks the
+<code>&lt;uses-sdk&gt;</code> attributes in the application's manifest and
+compares the values against its own internal API Level. The system allows the
+installation to begin only if these conditions are met:</p>
+
+<ul>
+<li>If a <code>android:minSdkVersion</code> attribute is declared, its value
+must be less than or equal to the system's API Level integer. If not declared,
+the system assumes that the application requires API Level 1. </li>
+<li>If a <code>android:maxSdkVersion</code> attribute is declared, its value
+must be equal to or greater than the system's API Level integer. 
+If not declared, the system assumes that the application
+has no maximum API Level. Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation for more information about how the system handles this attribute.</li>
+</ul>
+
+<p>When declared in an application's manifest, a <code>&lt;uses-sdk&gt;</code>
+element might look like this: </p>
+
+<pre>&lt;manifest&gt;
+  &lt;uses-sdk android:minSdkVersion="5" /&gt;
+  ...
+&lt;/manifest&gt;</pre>
+
+<p>The principal reason that an application would declare an API Level in
+<code>android:minSdkVersion</code> is to tell the Android system that it is
+using APIs that were <em>introduced</em> in the API Level specified. If the
+application were to be somehow installed on a platform with a lower API Level,
+then it would crash at run-time when it tried to access APIs that don't exist.
+The system prevents such an outcome by not allowing the application to be
+installed if the lowest API Level it requires is higher than that of the
+platform version on the target device.</p>
+
+<p>For example, the {@link android.appwidget} package was introduced with API
+Level 3. If an application uses that API, it must declare a
+<code>android:minSdkVersion</code> attribute with a value of "3". The
+application will then be installable on platforms such as Android 1.5 (API Level
+3) and Android 1.6 (API Level 4), but not on the Android 1.1 (API Level 2) and
+Android 1.0 platforms (API Level 1).</p>
+
+<p>For more information about how to specify an application's API Level
+requirements, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+ section of the manifest file documentation.</p>
+
+
+<h2 id="considerations">Development Considerations</h2>
+
+<p>The sections below provide information related to API level that you should
+consider when developing your application.</p>
+
+<h3 id="fc">Application forward compatibility</h3>
+
+<p>Android applications are generally forward-compatible with new versions of
+the Android platform.</p>
+
+<p>Because almost all changes to the framework API are additive, an Android
+application developed using any given version of the API (as specified by its
+API Level) is forward-compatible with later versions of the Android platform and
+higher API levels. The application should be able to run on all later versions
+of the Android platform, except in isolated cases where the application uses a
+part of the API that is later removed for some reason. </p>
+
+<p>Forward compatibility is important because many Android-powered devices
+receive over-the-air (OTA) system updates. The user may install your
+application and use it successfully, then later receive an OTA update to a new
+version of the Android platform. Once the update is installed, your application
+will run in a new run-time version of the environment, but one that has the API
+and system capabilities that your application depends on. </p>
+
+<p>In some cases, changes <em>below</em> the API, such those in the underlying
+system itself, may affect your application when it is run in the new
+environment. For that reason it's important for you, as the application
+developer, to understand how the application will look and behave in each system
+environment. To help you test your application on various versions of the Android
+platform, the Android SDK includes multiple platforms that you can download.
+Each platform includes a compatible system image that you can run in an AVD, to
+test your application. </p>
+
+<h3 id="bc">Application backward compatibility</h3>
+
+<p>Android applications are not necessarily backward compatible with versions of
+the Android platform older than the version against which they were compiled.
+</p>
+
+<p>Each new version of the Android platform can include new framework APIs, such
+as those that give applications access to new platform capabilities or replace
+existing API parts. The new APIs are accessible to applications when running on
+the new platform and, as mentioned above, also when running on later versions of
+the platform, as specified by API Level. Conversely, because earlier versions of
+the platform do not include the new APIs, applications that use the new APIs are
+unable to run on those platforms.</p>
+
+<p>Although it's unlikely that an Android-powered device would be downgraded to
+a previous version of the platform, it's important to realize that there are
+likely to be many devices in the field that run earlier versions of the
+platform. Even among devices that receive OTA updates, some might lag and
+might not receive an update for a significant amount of time. </p>
+
+<h3 id="platform">Selecting a platform version and API Level</h3>
+
+<p>When you are developing your application, you will need to choose
+the platform version against which you will compile the application. In
+general, you should compile your application against the lowest possible
+version of the platform that your application can support. 
+
+<p>You can determine the lowest possible platform version by compiling the
+application against successively lower build targets. After you determine the
+lowest version, you should create an AVD using the corresponding platform
+version (and API Level) and fully test your application. Make sure to declare a
+<code>android:minSdkVersion</code> attribute in the application's manifest and
+set its value to the API Level of the platform version. </p>
+
+<h3 id="apilevel">Declaring a minimum API Level</h3>
+
+<p>If you build an application that uses APIs or system features introduced in
+the latest platform version, you should set the
+<code>android:minSdkVersion</code> attribute to the API Level of the latest
+platform version. This ensures that users will only be able to install your
+application if their devices are running a compatible version of the Android
+platform. In turn, this ensures that your application can function properly on
+their devices. </p>
+
+<p>If your application uses APIs introduced in the latest platform version but
+does <em>not</em> declare a <code>android:minSdkVersion</code> attribute, then
+it will run properly on devices running the latest version of the platform, but
+<em>not</em> on devices running earlier versions of the platform. In the latter
+case, the application will crash at runtime when it tries to use APIs that don't
+exist on the earlier versions.</p>
+
+<h3 id="testing">Testing against higher API Levels</h3>
+
+<p>After compiling your application, you should make sure to test it on the
+platform specified in the application's <code>android:minSdkVersion</code>
+attribute. To do so, create an AVD that uses the platform version required by
+your application. Additionally, to ensure forward-compatibility, you should run
+and test the application on all platforms that use a higher API Level than that
+used by your application. </p>
+
+<p>The Android SDK includes multiple platform versions that you can use,
+including the latest version, and provides an updater tool that you can use to
+download other platform versions as necessary. </p>
+
+<p>To access the updater, use the <code>android</code> command-line tool,
+located in the &lt;sdk&gt;/tools directory. You can launch the SDK updater by
+executing <code>android sdk</code>. You can
+also simply double-click the android.bat (Windows) or android (OS X/Linux) file.
+In ADT, you can also access the updater by selecting 
+<strong>Window</strong>&nbsp;>&nbsp;<strong>Android SDK
+Manager</strong>.</p>
+
+<p>To run your application against different platform versions in the emulator,
+create an AVD for each platform version that you want to test. For more
+information about AVDs, see <a
+href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>. If
+you are using a physical device for testing, ensure that you know the API Level
+of the Android platform it runs. See the table at the top of this document for
+a list of platform versions and their API Levels. </p>
+
+<h2 id="provisional">Using a Provisional API Level</h2>
+
+<p>In some cases, an "Early Look" Android SDK platform may be available. To let
+you begin developing on the platform although the APIs may not be final, the
+platform's API Level integer will not be specified. You must instead use the
+platform's <em>provisional API Level</em> in your application manifest, in order
+to build applications against the platform. A provisional API Level is not an
+integer, but a string matching the codename of the unreleased platform version.
+The provisional API Level will be specified in the release notes for the Early
+Look SDK release notes and is case-sensitive.</p>
+
+<p>The use of a provisional API Level is designed to protect developers and
+device users from inadvertently publishing or installing applications based on
+the Early Look framework API, which may not run properly on actual devices
+running the final system image.</p>
+
+<p>The provisional API Level will only be valid while using the Early Look SDK
+and can only be used to run applications in the emulator. An application using
+the provisional API Level can never be installed on an Android device. At the
+final release of the platform, you must replace any instances of the provisional
+API Level in your application manifest with the final platform's actual API
+Level integer.</p>
+
+
+<h2 id="filtering">Filtering the Reference Documentation by API Level</h2>
+
+<p>Reference documentation pages on the Android Developers site offer a "Filter
+by API Level" control in the top-right area of each page. You can use the 
+control to show documentation only for parts of the API that are actually 
+accessible to your application, based on the API Level that it specifies in 
+the <code>android:minSdkVersion</code> attribute of its manifest file. </p>
+
+<p>To use filtering, select the checkbox to enable filtering, just below the
+page search box. Then set the "Filter by API Level" control to the same API
+Level as specified by your application. Notice that APIs introduced in a later
+API Level are then grayed out and their content is masked, since they would not
+be accessible to your application. </p>
+
+<p>Filtering by API Level in the documentation does not provide a view
+of what is new or introduced in each API Level &mdash; it simply provides a way
+to view the entire API associated with a given API Level, while excluding API
+elements introduced in later API Levels.</p>
+
+<p>If you decide that you don't want to filter the API documentation, just
+disable the feature using the checkbox. By default, API Level filtering is
+disabled, so that you can view the full framework API, regardless of API Level.
+</p>
+
+<p>Also note that the reference documentation for individual API elements
+specifies the API Level at which each element was introduced. The API Level 
+for packages and classes is specified as "Since &lt;api level&gt;" at the 
+top-right corner of the content area on each documentation page. The API Level 
+for class members is specified in their detailed description headers, 
+at the right margin. </p>
diff --git a/docs/html/about/versions/index.jd b/docs/html/about/versions/index.jd
new file mode 100644
index 0000000..30826c0
--- /dev/null
+++ b/docs/html/about/versions/index.jd
@@ -0,0 +1,141 @@
+page.title=App Framework
+@jd:body
+
+<p>Android is a software stack for mobile devices that includes an operating
+system, middleware and key applications. The <a
+href="http://developer.android.com/sdk/index.html">Android SDK</a>
+provides the tools and APIs necessary to begin developing applications on the
+Android platform using the Java programming language.</p>
+
+<h2>Features</h2>
+
+<ul>
+    <li><strong>Application framework</strong> enabling reuse and replacement
+    of components</li>
+    <li><strong>Dalvik virtual machine</strong> optimized for mobile
+        devices</li>
+    <li><strong>Integrated browser</strong> based on the open source <a
+    href="http://webkit.org/">WebKit</a> engine </li>
+    <li><strong>Optimized graphics</strong> powered by a custom 2D graphics library; 3D
+    graphics based on the OpenGL ES 1.0 specification (hardware acceleration
+    optional)</li>
+    <li><strong>SQLite</strong> for structured data storage</li>
+    <li><strong>Media support</strong> for common audio, video, and still
+    image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG,
+    GIF)</li>
+    <li><strong>GSM Telephony</strong> (hardware dependent)</li>
+    <li><strong>Bluetooth, EDGE, 3G, and WiFi</strong> (hardware dependent)</li>
+    <li><strong>Camera, GPS, compass, and accelerometer</strong> (hardware dependent)</li>
+    <li><strong>Rich development environment</strong> including a device
+    emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE</li>
+</ul>
+
+<a name="os_architecture" id="os_architecture"></a>
+<h2>Android Architecture</h2> 
+
+<p>The following diagram shows the major components of the Android operating
+system. Each section is described in more detail below.</p>
+
+<p><img src="{@docRoot}images/system-architecture.jpg" alt="Android System Architecture" width="713" height="512"></p>
+
+<a name="applications" id="applications"></a>
+<h2>Applications</h2>
+
+<p>Android will ship with a set of core applications including an email
+client, SMS program, calendar, maps, browser, contacts, and
+others. All applications are written using the Java programming language.</p>
+
+<a name="application_framework" id="application_framework"></a>
+<h2>Application Framework</h2>
+
+<p>By providing an open development platform, Android
+offers developers the ability to build extremely rich and innovative
+applications. Developers are free to take advantage of the
+device hardware, access location information, run background services, set alarms,
+add notifications to the status bar, and much, much more. </p>
+
+<p>Developers have full access to the same framework APIs used by the core
+applications. The application architecture is designed to simplify the reuse
+of components; any application can publish its capabilities and any other
+application may then make use of those capabilities (subject to security
+constraints enforced by the framework). This same mechanism allows components
+to be replaced by the user.</p>
+
+<p>Underlying all applications is a set of services and systems, including:
+<ul>
+    <li>A rich and extensible set of <a
+    href="{@docRoot}resources/tutorials/views/index.html">Views</a> that can be used to
+    build an application, including lists, grids, text boxes, buttons, and even
+    an embeddable web browser</li>
+    <li><a href="{@docRoot}guide/topics/providers/content-providers.html">Content
+    Providers</a> that enable applications to access data from other
+    applications (such as Contacts), or to share their own data</li> <li>A <a
+    href="{@docRoot}guide/topics/resources/resources-i18n.html">Resource
+    Manager</a>, providing access to non-code resources such as localized
+    strings, graphics, and layout files</li>
+    <li>A {@link android.app.NotificationManager Notification Manager} that enables
+    all applications to display custom alerts in the status bar</li>
+    <li>An {@link android.app.Activity Activity Manager} that manages the
+    lifecycle of applications and provides a common navigation backstack</li>
+</ul>
+
+<p>For more details and a walkthrough of an application, see the <a
+href="{@docRoot}resources/tutorials/notepad/index.html">Notepad Tutorial</a>.</p>
+    
+<a name="libraries" id="libraries"></a>
+<h2>Libraries</h2>
+
+<p>Android includes a set of C/C++ libraries used by various components of the
+Android system. These capabilities are exposed to developers through the
+Android application framework. Some of the core libraries are listed below:</p>
+<ul>
+    <li><strong>System C library</strong> - a BSD-derived implementation of
+    the standard C system library (libc), tuned for embedded Linux-based
+    devices</li>
+    <li><strong>Media Libraries</strong> - based on PacketVideo's OpenCORE;
+    the libraries support playback and recording of many popular audio and video
+    formats, as well as static image files, including MPEG4, H.264, MP3, AAC,
+    AMR, JPG, and PNG</li>
+    <li><strong>Surface Manager</strong> - manages access to the display
+    subsystem and seamlessly composites 2D and 3D graphic layers from multiple
+    applications</li>
+    <li><strong>LibWebCore</strong> - a modern web browser engine which
+    powers both the Android browser and an embeddable web view</li>
+    <li><strong>SGL</strong> - the underlying 2D graphics
+    engine</li>
+    <li><strong>3D libraries</strong> - an implementation based on
+    OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration
+    (where available) or the included, highly optimized 3D software
+    rasterizer</li>
+    <li><strong>FreeType</strong> - bitmap and vector font rendering</li>
+    <li><strong>SQLite</strong> - a powerful and lightweight relational
+    database engine available to all applications</li>
+</ul>
+
+<a name="runtime" id="runtime"></a>
+
+<h2>Android Runtime</h2>
+
+<p>Android includes a set of core libraries that provides most of
+the functionality available in the core libraries of the Java programming
+language.</p>
+
+<p>Every Android application runs in its own process, with its own instance of
+the Dalvik virtual machine. Dalvik has been written so that a device can run
+multiple VMs efficiently. The Dalvik VM executes files in the Dalvik
+Executable (.dex) format which is optimized for minimal memory
+footprint. The VM is register-based, and runs classes
+compiled by a Java language compiler that have been transformed into the .dex
+format by the included &quot;dx&quot; tool.</p>
+
+<p>The Dalvik VM relies on the Linux kernel for underlying functionality such
+as threading and low-level memory management.</p>
+
+<a name="kernel" id="kernel"></a>
+
+<h2>Linux Kernel</h2>
+
+<p>Android relies on Linux version 2.6 for core system services such as
+security, memory management, process management, network stack, and driver
+model. The kernel also acts as an abstraction layer between the hardware and
+the rest of the software stack.</p>
diff --git a/docs/html/community/index.html b/docs/html/community/index.html
deleted file mode 100644
index fb2a0d3..0000000
--- a/docs/html/community/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/community-groups.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/resources/community-groups.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/design/building-blocks/index.jd b/docs/html/design/building-blocks/index.jd
index 52b4915..d915aae 100644
--- a/docs/html/design/building-blocks/index.jd
+++ b/docs/html/design/building-blocks/index.jd
@@ -10,7 +10,7 @@
 
 #text-overlay {
   position: absolute;
-  left: 10px;
+  left: 0;
   top: 472px;
   width: 450px;
 }
diff --git a/docs/html/design/building-blocks/progress.jd b/docs/html/design/building-blocks/progress.jd
index b188538..03fc09c 100644
--- a/docs/html/design/building-blocks/progress.jd
+++ b/docs/html/design/building-blocks/progress.jd
@@ -1,5 +1,4 @@
 page.title=Progress and Activity
-header.title=Feedback
 @jd:body
 
 <p>When an operation of interest to the user is taking place over a relatively long period of time,
diff --git a/docs/html/design/design_toc.cs b/docs/html/design/design_toc.cs
index 6dd8d61..a31fdd3 100644
--- a/docs/html/design/design_toc.cs
+++ b/docs/html/design/design_toc.cs
@@ -63,8 +63,4 @@
     <div class="nav-section-header empty"><a href="<?cs var:toroot ?>design/downloads/index.html">Downloads</a></div>
   </li>
 
-  <li>
-    <div id="back-dac-section"><a href="<?cs var:toroot ?>index.html">Developers</a></div>
-  </li>
-
 </ul>
\ No newline at end of file
diff --git a/docs/html/design/index.jd b/docs/html/design/index.jd
index d404aa6..1e6b40c 100644
--- a/docs/html/design/index.jd
+++ b/docs/html/design/index.jd
@@ -1,4 +1,4 @@
-page.title=
+page.title=Design
 header.hide=1
 footer.hide=1
 @jd:body
@@ -10,7 +10,7 @@
 
 #text-overlay {
   position: absolute;
-  left: 10px;
+  left: 0;
   top: 472px;
   width: 280px;
 }
diff --git a/docs/html/design/media/typography_sizes.png b/docs/html/design/media/typography_sizes.png
index fe6cdce..eda1d99 100644
--- a/docs/html/design/media/typography_sizes.png
+++ b/docs/html/design/media/typography_sizes.png
Binary files differ
diff --git a/docs/html/design/patterns/index.jd b/docs/html/design/patterns/index.jd
index 732e4db..6f88e6d 100644
--- a/docs/html/design/patterns/index.jd
+++ b/docs/html/design/patterns/index.jd
@@ -10,7 +10,7 @@
 
 #text-overlay {
   position: absolute;
-  left: 10px;
+  left: 0;
   top: 492px;
   width: 200px;
 }
diff --git a/docs/html/design/style/iconography.jd b/docs/html/design/style/iconography.jd
index c4e8bd6..775e45d 100644
--- a/docs/html/design/style/iconography.jd
+++ b/docs/html/design/style/iconography.jd
@@ -139,7 +139,7 @@
 
     <ul>
       <li class="no-bullet with-icon tablet">
-        <p>Action bar icons for phones and tablets should be <strong>32x32 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
+        <p>Action bar icons for phones should be <strong>32x32 <acronym title="Density-independent pixels. One dp is one pixel on a 160 dpi screen.">dp</acronym></strong>.</p></li>
     </ul>
 
   </div>
diff --git a/docs/html/design/style/index.jd b/docs/html/design/style/index.jd
index d346aea..74d085b 100644
--- a/docs/html/design/style/index.jd
+++ b/docs/html/design/style/index.jd
@@ -10,7 +10,7 @@
 
 #text-overlay {
   position: absolute;
-  left: 10px;
+  left: 0;
   top: 402px;
   width: 220px;
 }
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
new file mode 100644
index 0000000..6830b72
--- /dev/null
+++ b/docs/html/develop/index.jd
@@ -0,0 +1,366 @@
+fullpage=true
+page.title=Develop
+header.hide=1
+carousel=1
+tabbedList=1
+@jd:body
+
+<style>
+#noplayer-message {
+position:absolute;top:50%;left:0;width:100%;z-index:-1;text-align:center;display:none;
+}
+#player-frame object {z-index:1;}
+</style>
+
+<div id="player-wrapper">
+  <div id="player-frame">
+    <div id="noplayer-message">
+      <!-- busted flash player message -->
+      Your video is supposed to appear here.<br/>
+      Make sure you have the <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash&reg; Player</a>.
+    </div>
+    <div id="player"><!-- Youtube embeds here... actually replaces this div --></div>
+    <a class="close" onclick="$('#player-wrapper').hide()">close video</a>
+  </div>
+</div>
+
+<div class="wrap">
+   <!-- Slideshow -->
+   <div class="slideshow-container slideshow-develop col-16">
+       <a href="" class="slideshow-prev">Prev</a>
+       <a href="" class="slideshow-next">Next</a>
+       <div class="frame">
+           <ul>
+               <li class="item carousel-home">
+                 <div class="col-8">
+                   <img
+src="http://1.bp.blogspot.com/-6qyjPxTuzv0/T6lde-Oq_fI/AAAAAAAABXc/zle7OFEGP44/s400/fddns%2Bcopy.png"
+class="play no-shadow no-transform" />
+                 </div>
+                <div class="content-right col-6">
+                  <p class="title-intro">From the blog:</p>
+                  <h2>Using DialogFragments</h2>
+                  <p>In this post, I'll show how to use DialogFragments with the <a
+href="http://developer.android.com/reference/android/support/v4/app/DialogFragment.html">v4 support
+library</a> (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and
+return a result to the calling Activity using an interface.</p>
+                  <p><a
+href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html" class="button">Read
+more</a></p>
+                </div>            
+              </li>
+               <li class="item carousel-home">
+                   <div class="col-8">
+                     <img
+src="http://1.bp.blogspot.com/-6K1kfNOdek8/T72bXvtTSQI/AAAAAAAABmw/kYzmJt0_328/s1600/google-play-subscriptions.png" class="play"></div>
+                   <div class="content-right col-6">
+                   <p class="title-intro">From the blog:</p>
+                   <h2>In-app Subscriptions in Google Play</h2>
+                   <p>Starting today, developers can use In-app Billing to sell monthly or annual
+subscriptions from inside of their apps. All subscriptions are auto-renewing, for every app and game
+and every type of subscription product.</p>
+                   <p><a class="button"
+href="http://android-developers.blogspot.com/2012/05/in-app-subscriptions-in-google-play.html">Read
+more</a></p>
+                   </div>                
+                </li>
+               <li class="item carousel-home">
+                   <div class="col-8">
+                     <img
+src="{@docRoot}images/home/developers_live.png" class="play"></div>
+                   <div class="content-right col-6">
+                   <h2>Learn what great apps are made of</h2>
+                   <p>Every week we host a live broadcast in which we review a collection of apps and games
+                     nominated by the creators. It's no-holds-barred and we tell you exactly what is flawed or
+                     fantastic in each app and how to make improvements.</p>
+                   <p><a href="" class="button" onclick="$('ul#DevelopersLive li:first
+a').click();return false;">Watch the latest review</a></p>
+                   </div>                
+                </li>
+               <li class="item carousel-home">
+                   <div class="col-8">
+                     <img style="margin-top:30px;width:300px"
+src="{@docRoot}images/home/ics-android.png" class="play no-shadow no-transform" />
+                   </div>
+                   <div class="content-right col-6">
+                   <h2>Ice Cream Sandwich</h2>
+                   <p>Android 4.0 brings handsets and tablets together with a unified
+                   design and a set of APIs for you to build a great user experience on all devices.
+                   For information about API changes in the latest release (API level 15),
+                   read the <a href='{@docRoot}about/versions/android-4.0.3.html'>platform notes</a> and <a
+                   href='{@docRoot}sdk/api_diff/15/changes.html'>diff report</a>.</p>
+                   <p><a class="button"
+href="{@docRoot}about/versions/android-4.0-highlights.html">Read the highlights</a></p>
+                   </div>                
+                </li>
+           </ul>
+       </div>
+   </div>
+   <!-- /End slideshow -->
+</div>
+<div class="wrap">
+	<!-- news and feature feed -->
+	<div class="feed col-8" style="margin-left:0">
+		<ul class="feed-nav">
+			<li class="active">DEVELOPER NEWS</li>
+			<li>FEATURED DOCS</li>
+		</ul>
+		<div class="feed-container">
+			<div class="feed-frame">
+                                <!-- DEVELOPER NEWS -->
+				<ul>
+					<li><a href="http://android-developers.blogspot.com/2012/04/faster-emulator-with-better-hardware.html">
+                                          <div class="feed-image" style="background:url('../images/emulator-wvga800l.png') no-repeat 0 0">
+                                          </div>
+                                          <h4>A Faster Emulator with Better...</h4>
+                                          <p>Today we’re thrilled to announce several significant improvements to the emulator, including a dramatic...</p>
+					</a></li>
+					<li><a href="http://android-developers.blogspot.com/2012/04/android-c2dm-client-login-key.html">
+                                          <div class="feed-image" style="background:url('../images/develop/auth-code.png') no-repeat 0 0">
+                                          </div>
+                                          <h4>Android C2DM — Client Login key...</h4>
+                                          <p>In the upcoming weeks, some of the older Client
+					Login authentication keys will expire. If you generated the token you’re...</p>
+					</a></li>
+					<li><a href="http://android-developers.blogspot.com/2012/04/accessibility-are-you-serving-all-your.html">
+                                          <div class="feed-image">
+                                          </div>
+                                          <h4>Accessibility</h4>
+                                          <p>We recently published some new resources to help developers make their Android applications more accessible... </p>
+					</a></li>
+					<li><a href="http://android-developers.blogspot.com/2012/04/new-seller-countries-in-google-play.html">
+                                          <div class="feed-image" style="background:url('http://developer.android.com/images/home/play_logo.png') no-repeat 0 0" >
+                                          </div>
+                                          <h4>New Seller Countries in Google Play</h4>
+                                          <p>Over the past year we’ve been working to expand the list of 
+                                            countries and currencies from which Android developers...</p>
+					</a></li>
+				</ul>
+                                <!-- FEATURED DOCS -->
+				<ul>
+					<li><a href="{@docRoot}guide/google/play/billing/index.html">
+						<h4>Google Play In-app Billing</h4>
+						<p>In-app Billing is a Google Play service that lets you sell digital content from inside your applications. You can sell products as standard in-app products (one-time purchase) or with subscriptions (recurring...</p>
+					</a></li>
+					<li><a href="{@docRoot}guide/topics/providers/contacts-provider.html">
+						<h4>Contacts Provider</h4>
+						<p>The Contacts Provider is a powerful and flexible Android component that manages the device's central repository of data about people. You can use it to build powerful social features...</p>
+					</a></li>
+					<li><a href="{@docRoot}training/efficient-downloads/index.html">
+						<h4>Transferring Data Without Draining the Battery</h4>
+						<p>This training class demonstrates the best practices for scheduling and executing downloads using techniques such as caching, polling, and prefetching.</p>
+					</a></li>
+					<li><a href="{@docRoot}training/backward-compatible-ui/index.html">
+						<h4>Creating Backward-Compatible UIs</h4>
+						<p>This training class demonstrates how to use UI components and APIs available in newer versions of Android in a backward-compatible way, ensuring that your application still runs on previous versions...</p>
+					</a></li>
+				</ul>
+			</div>
+		</div>
+	</div>	<!-- /news and feature feed -->
+	<!-- video feed -->
+	<div class="feed col-8" style="margin-right:0">
+		<ul class="feed-nav">
+			<li class="active">DEVELOPERS LIVE</li>
+			<li>VIDEO PLAYLISTS</li>
+		</ul>
+		<div class="feed-container">
+			<div class="feed-frame">
+				<ul id="DevelopersLive">
+				</ul>
+				<ul id="VideoPlaylists">
+				</ul>
+			</div>
+		</div>
+	</div>
+	<!-- /video feed -->
+</div>
+
+<br class="clearfix"/>
+    </div>
+
+      
+      
+      
+      
+      
+      
+      
+      
+
+<script src="//swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script>
+<script type="text/javascript">
+
+/* Load a video into the player box.
+ * @param id        The YouTube video ID
+ * @param title     The video title to display in the player box (character escaped)
+ * @param autoplay  Whether to automatically play the video
+ */
+function loadVideo(id, title, autoplay) {
+  swfobject.embedSWF('//www.youtube.com/v/' + id + '&rel=1&border=0&fs=1&autoplay=' +
+      (autoplay?1:0), 'player', '525', '330', '9.0.0', false, false, {allowfullscreen: 'true'});
+  $("#videoPlayerTitle").html("<h2>" + unescape(title) + "</h2>");
+  $("#player-wrapper").show();
+  setTimeout(function(){$('#noplayer-message').show()}, 2000);
+}
+
+/* Draw all videos from a playlist into a 'videoPreviews' list
+ * @param data  The feed data returned from the youtube request
+ */
+function renderVideoPlaylists(data) {
+  var MAX_LIST_DESC_LENGTH = 130; // the length at which we will trim the description
+  var MAX_VIDEO_DESC_LENGTH = 100; // the length at which we will trim the description
+  var MAX_LIST_LENGTH = 4; // number of videos to put in the list
+  var feed = data.feed;
+  var entries = feed.entry || [];
+  var playlistId = feed.yt$playlistId.$t;
+
+  var $ulVideos = $('<ul style="display:none"/>');
+  var summary = feed.media$group.media$description != null ? feed.media$group.media$description.$t : feed.subtitle.$t;
+  
+  var $liPlaylist = $('<li class="playlist"></li>');
+  var $aPlaylist = $('<a href="" onclick="togglePlaylist(this);return false;"></a>');
+  $liPlaylist.append($aPlaylist);
+  $aPlaylist.append('<h4>' + feed.title.$t + '</h4>');
+  
+  var playlistDescription = summary.substr(0, MAX_LIST_DESC_LENGTH);
+  playlistDescription += playlistDescription.length == MAX_LIST_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
+  $aPlaylist.append('<p>' +  playlistDescription + '</p>');
+  
+  // Loop through each entry (each video) and add it to the 'videoPreviews' list
+  var length = feed.entry.length < MAX_LIST_LENGTH ? feed.entry.length : MAX_LIST_LENGTH; // max of 4 videos per list
+  for (var i = 0; i < length; i++) {
+    var entry = entries[i];
+
+    var title = entry.title.$t;
+    var id = entry.media$group.yt$videoid.$t;
+    var thumbUrl = entry.media$group.media$thumbnail[0].url;
+    var fullDescription = entry.media$group.media$description.$t;
+    var playerUrl = entry.media$group.media$content[0].url;
+
+    var shortDescription = fullDescription.substr(0, MAX_VIDEO_DESC_LENGTH);
+    shortDescription += shortDescription.length == MAX_VIDEO_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
+
+    var img = $('<img src="' + thumbUrl + '" width="60" height="45"/>');
+    var a = $('<a href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
+    var pShortDescription = $('<p>' + shortDescription + '</p>');
+    var h5Title = "<h5>" + title + "</h5>";
+    var li = $('<li class="playlist-video"/>');
+
+    li.append(a);
+    a.append(img).append(h5Title).append(pShortDescription);
+
+    $ulVideos.append(li);
+    
+    // use the first entry's thumbnail for the playlist
+    if (i == 0) {
+      $aPlaylist.prepend('<img src="' + thumbUrl + '" width="120" height="90"/>');
+    }
+  }
+  
+  if (feed.entry.length > MAX_LIST_LENGTH) {
+    // add item to go to youtube for playlist
+    $ulVideos.append('<li class="more"><a href="//www.youtube.com/playlist?list=PL' + playlistId + '">More &raquo;</a></li>');
+  }
+
+  $liPlaylist.append($ulVideos);
+  $('#VideoPlaylists').append($liPlaylist);
+}
+
+
+function renderDevelopersLivePlaylist(data) {
+
+  var MAX_DESC_LENGTH = 125; // the length at which we will trim the description
+  var feed = data.feed;
+  var entries = feed.entry || [];
+  var playlistId = feed.yt$playlistId.$t;
+
+  var ul = $('#DevelopersLive');
+
+  // Loop through each entry (each video) and add it to the '#DevelopersLive' list
+  for (var i = 0; i < 4; i++) {
+    var entry = entries[i];
+
+    var title = entry.title.$t;
+    var id = entry.media$group.yt$videoid.$t;
+    var thumbUrl = entry.media$group.media$thumbnail[0].url;
+    var fullDescription = entry.media$group.media$description.$t;
+    var playerUrl = entry.media$group.media$content[0].url;
+    var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH);
+    shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
+
+    var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>');
+    var a = $('<a href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return false;" />');
+    var pShortDescription = $('<p>' + shortDescription + '</p>');
+    var h4Title = "<h4>" + title + "</h4>";
+    var li = $('<li/>');
+
+    li.append(a);
+    a.append(img).append(h4Title).append(pShortDescription);
+
+    ul.append(li);
+  }
+}
+
+
+
+/* This 'playlist' object defines the playlist IDs for each tab.
+ * Each name inside 'playlist' corresponds to class names for the tab that the playlists belong to (eg: "googleioTab" and "googleioBox" divs).
+ * Each string in 'ids' is the ID of a YouTube playlist that belongs in the corresponding tab.
+ */
+var playlists = {
+  'googleio' : {
+    'ids': ["734A052F802C96B9"]
+  },
+  'fridayreview' : {
+    'ids': ["B7B9B23D864A55C3"]
+  },
+  'officehours' : {
+    'ids': ["7383D9AADA6E6D55"]
+  },
+  'about' : {
+    'ids': ["D7C64411AF40DEA5"]
+  }
+};
+
+/* Request the playlist feeds from YouTube */
+function showVideosPlaylists() {
+  for (var x in playlists) {
+    var ids = playlists[x].ids;
+    for (var i in ids) {
+      var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
+                    + ids[i] +
+                    "?v=2&alt=json-in-script&max-results=50&callback=renderVideoPlaylists&orderby=published'><\/script>";
+      $("body").append(script);
+    }
+  }
+}
+
+
+/* Request the playlist feeds from YouTube */
+function showDevelopersLivePlaylist() {
+  var playlistId = "B7B9B23D864A55C3"; /* The Friday Review */
+  var script = "<script type='text/javascript' src='//gdata.youtube.com/feeds/api/playlists/"
+                + playlistId +
+                "?v=2&alt=json-in-script&max-results=10&callback=renderDevelopersLivePlaylist&orderby=published'><\/script > ";
+  $("body").append(script);
+}
+
+
+function togglePlaylist(listLink) {
+  var $list = $(listLink).parent();
+  var $ul = $list.find('ul');
+  if ($ul.is(":visible")) {
+    $ul.slideUp(function() {
+      $list.css({'height':'inherit'});
+    });
+  } else {
+    $list.closest('ul').find('li.playlist').find('ul').slideUp();
+    $ul.slideDown();
+    $list.css({'height':'auto'});
+  }
+}
+
+showDevelopersLivePlaylist();
+showVideosPlaylists();
+</script>
\ No newline at end of file
diff --git a/docs/html/distribute/distribute_toc.cs b/docs/html/distribute/distribute_toc.cs
new file mode 100644
index 0000000..bc028e5
--- /dev/null
+++ b/docs/html/distribute/distribute_toc.cs
@@ -0,0 +1,112 @@
+<ul id="nav">
+
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/index.html">
+      <span class="en">Google Play</span></a>
+    </div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/about/visibility.html">
+           <span class="en">Visibility</a></li>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/about/monetizing.html">
+           <span class="en">Monetizing</a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/about/distribution.html">
+           <span class="en">Distribution</a></li>
+    </ul>  
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/publish/index.html">
+      <span class="en">Publishing</span></a>
+    </div>
+    <ul>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/register.html">
+           <span class="en">Get Started</span>
+          </a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/console.html">
+           <span class="en">Developer Console</span>
+          </a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/publish/preparing.html">
+           <span class="en">Publishing Checklist</span>
+          </a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">
+          <span class="en">App Quality</span>
+         </a></li>
+     </ul>
+  </li>
+  
+<!--  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/developer-console.html">
+        <span class="en">The Developer Console</span>
+      </a>
+    </div>
+    <ul>
+      <li class="nav-section"><a href="<?cs var:toroot ?>distribute/googleplay/register.html">
+        <span class="en">Get Started</span></a></li>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/distribution-controls.html">
+        <span class="en">Managing Distribution</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/pricing-billing.html">
+        <span class="en">Pricing and Billing</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/app-data.html">
+        <span class="en">Reviewing App Data</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/advanced-options.html">
+        <span class="en">Advanced Options</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>distribute/googleplay/publishing.html">
+        <span class="en">Publishing and Updating</span>
+        </a></li>
+    </ul>
+  </li> end of Developer Console -->
+  
+   <li class="nav-section">
+     <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/promote/index.html">
+       <span class="en">Promoting</span></a>
+     </div>
+     <ul>
+<!--   <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/product-pages.html">
+        <span class="en">Your Product Pages</a></li> 
+-->
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/linking.html">
+        <span class="en">Linking to Your Products</a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/badges.html">
+        <span class="en">Google Play Badges</a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/promote/brand.html">
+        <span class="en">Brand Assets and Guidelines</a></li>
+     </ul>
+   </li>
+
+<!--    
+   <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/after.html">
+      <span class="en">After Launch</span></a>
+    </div>
+    <ul>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/errors.html.html">Reviewing Errors</a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/reviews.html">Tracking User Reviews</a></li>
+       <li><a href="<?cs var:toroot ?>distribute/googleplay/supporting-users.html">Supporting Users</a></li>
+    </ul>
+  </li> 
+-->
+
+<!--  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>distribute/googleplay/strategies/index.html">
+      <span class="en">Strategies</span></a>
+    </div>
+    <ul>
+          <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/featuring.html">Featuring</a></li>
+          <li><a href="<?cs var:toroot ?>distribute/googleplay/strategies/app-quality.html">App Quality</a></li>
+    </ul>
+  </li> 
+-->
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+      <a href="<?cs var:toroot ?>distribute/open.html">
+        <span class="en">Open Distribution</span>
+      </a>
+    </div>
+  </li>
+</ul>
+  
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/about/distribution.jd b/docs/html/distribute/googleplay/about/distribution.jd
new file mode 100644
index 0000000..291d559
--- /dev/null
+++ b/docs/html/distribute/googleplay/about/distribution.jd
@@ -0,0 +1,127 @@
+page.title=Distribution Control
+page.metaDescription=Reach the users you want, whenever you want.
+
+@jd:body
+
+<p>Deliver your apps to the users you want, on the devices you want, on <em>your</em> schedule. </p>
+
+<h2 id="instant">Instant publishing, instant updates</h2>
+
+<p>On Google Play, you can publish your products to customers instantly. Just
+upload and configure your product in the <span style="font-weight:500;">Google Play Android Developer Console</span>
+and press the Publish button&mdash;your app appears in the store listings within
+hours, not weeks. There are no delays for code or policy reviews, so you keep
+complete control over your release schedule.</p>
+
+<p>Once your app is published, you can update it as often as you want. You can
+change prices, configuration, and distribution options at any time through the
+Google Play Android Developer Console, without needing to update your app
+binary.</p>
+
+<p>Later, as you add features or address code issues, you can publish an updated
+binary at any time. Google Play makes the new version available immediately and
+notifies existing customers that an update is ready for download. To streamline
+the rollout across your customer base, Google Play also lets users accept
+automatic updates of your app, so that your updates are delivered and installed
+s soon as you publish them.</p>
+
+<h2>Reaching the customers you want</h2>
+
+<p>Google Play does more than connect your app with users&mdash;it helps you
+reach the broadest possible distribution across the Android ecosystem, while
+making sure that your app is only available to the audience that you want to
+reach.</p>
+
+<div style="float:right;margin-left:18px;border:1px solid #DDD;margin:1.5em;">
+<img src="{@docRoot}images/gp-dc-countries.png" style="width:400px;padding:4px;margin-bottom:0;">
+</div>
+
+<h3 id="geotargeting">Geographic targeting</h3>
+
+<p>You can use controls in the Google Play Android Developer Console to easily
+manage the geographic distribution of your apps, without any changes in your
+application binary. You can specify which countries and territories you want to
+distribute to, and even which carriers (for some countries). </p>
+
+<p>When users visit the store, Google Play makes sure that they are in one of
+your targeted countries before downloading your app. You can change your country
+and carrier targeting at any time just by saving changes in the Google Play
+Android Developer Console</p>
+
+<div style="float:right;margin-left:18px;border:1px solid #DDD;margin:1.5em;">
+<img src="{@docRoot}images/gp-supported-dev-requirements.png"
+style="width:400px;padding:4px;margin-bottom:0;">
+</div>
+
+<h3 id="captargeting">Capabilities targeting</h3>
+
+<p>Google Play also lets you control distribution according to device features
+or capabilities that your app depends on. There are several types of
+dependencies that the app can define in its manifest, such as hardware features,
+OpenGL texture compression formats, libraries, Android platform versions, and
+others.</p>
+
+<p>When you upload your app, Google Play reads the dependencies and sets up any
+necessary distribution rules. For technical information about declaring
+dependencies, read <a href="{@docRoot}guide/google/play/filters.html">Filters on 
+Google Play</a>. </p>
+
+<p>For pinpoint control over distribution, Google Play lets you see all of the
+devices your app is available to based on its dependencies (if any). From the
+Google Play Android Developer Console, you can list the supported devices and
+even exclude specific devices if needed.</p>
+
+<h2 id="stats">Statistics for analyzing installs</h2>
+
+<p>Once you’ve published your app, Google Play makes it easy to see how it’s
+doing. The Google Play Android Developer Console gives you access to a variety
+of anonymized metrics that show your app’s installation performance measured by
+unique users and unique devices, across a variety of different dimensions such
+as country, Android version, device, country, carrier, and app version.</p>
+
+<div style="border:1px solid #DDD;margin:1.5em;margin-left:8%;width:608px">
+<img src="{@docRoot}images/gp-dc-stats-mini.png"
+style="width:600px;padding:4px;margin-bottom:0;">
+</div>
+<p>You can also view your installation data on timeline charts, for all metrics and
+dimensions. At a glance, these charts highlight your app’s installation peaks
+and longer-term trends, which you can correlate to promotions, app improvements,
+or other factors. You can even focus in on data inside a dimension by
+highlighting specific data points (such as individual platform versions or
+languages) on the timeline.</p>
+
+<p>So that you can “take your data with you”, you can download all of your
+installation data as a CSV file for viewing in the business program of your
+choice.</p>
+
+
+<h2 id="advanced">Advanced delivery options</h2>
+
+<p>Google Play offers convenient options for managing how your apps are
+delivered to users.</p>
+
+<p>In most cases, it’s easy to create an app that supports all of your targeted
+screen sizes and platform versions from a single APK. Distributing a single APK
+to all of your users is a highly recommended approach, because it’s the easiest
+way to manage and maintain the app. If you need to deliver a different APK to
+devices, Google Play provides a way to do that. </p>
+ 
+<p>An option called Multiple APK support lets you create multiple APK packages
+that use the same package name but differ in their OpenGL texture compression
+formats, screen-size support, or Android platform versions supported. You can
+upload all of the APKs to Google Play under a single product listing and Google
+Play selects the best APK to deliver to users, based on the characteristics of
+their devices.  </p>
+
+<p>The APK Expansion Files option lets you upload up to two secondary downloads
+for each published APK, including multiple APKs. Each of the two expansion files
+can be up to 2GB each and can contain any type of code or assets. When you
+upload the expansion files, Google Play hosts them for free and handles the
+download of the files as part of the normal APK installation.</p>
+
+<h2 id="licensing">Protecting your App</h2>
+
+<p>To help you protect your application against piracy, Google Play offers a
+licensing service that you can implement in your app. It’s a network-based
+service that lets an application query a trusted Google Play licensing server to
+determine whether the application is licensed to the current device user.</p>
diff --git a/docs/html/distribute/googleplay/about/monetizing.jd b/docs/html/distribute/googleplay/about/monetizing.jd
new file mode 100644
index 0000000..1e3437b
--- /dev/null
+++ b/docs/html/distribute/googleplay/about/monetizing.jd
@@ -0,0 +1,152 @@
+page.title=Flexible Monetizing and Business Tools
+page.metaDescription=
+
+@jd:body
+   
+<div style="float:right;margin-left:18px;padding:1.5em;">
+<img src="{@docRoot}images/gp-details-ww.png" style="width:180px">
+<img src="{@docRoot}images/gp-details-ww-purchase.png" style="width:180px">
+</div>
+    
+<p>Sell your app in more than 130 countries. Flexible monetization options with
+in-app purchase, subscriptions, and more. </p>
+
+<h2>Streamlined purchase flow for users</h2>
+
+<p>When users find your app, they can purchase it instantly with a streamlined,
+consistent purchasing process and convenient payment methods.</p>
+
+<h3>Instant purchase from device or web</h3>
+
+<p>Google Play makes it fast and easy for your customers to buy your products,
+whether from a phone, a tablet, or a desktop computer. When users find an app or
+game that they want to buy, they can purchase it in as few as two steps&mdash;one
+to initiate the purchase and another to accept purchase details and permissions
+and complete the transaction.</p>
+
+<p>Google Play's convenient purchase experience is the same familiar process for
+all products everywhere across Google Play&mdash;apps, games, in-app products and
+subscriptions, and other digital content.</p>
+
+<h3 id="cloud-connected-purchase">Cloud-connected</h3>
+
+<p>Purchasing is even more convenient on Google Play because it’s
+cloud-connected. Users can find and purchase your products from anywhere&mdash;from
+their Android phones or using any web browser on any host computer. </p>
+
+<p>When users find an app or game they want to buy, they purchase it and download
+it instantly to their devices over-the-air. Users who sign in to the Google Play web site can also buy apps and games
+and push them instantly to their phones, tablets, or other devices. Google Play
+manages the application download.</p>
+
+<h3 id="payment-methods">Convenient payment options</h3>
+
+<p>Users can purchase your products on Google Play using several convenient
+payment methods&mdash;credit card, Direct Carrier Billing, and Google Play balance.</p>
+
+<p><span style="font-weight:500">Credit card</span> is the most common method of payment. Users can pay using any credit card
+that they’ve registered in Google Play. To make it easy for users to get started,
+registration is offered as a part of initial device setup process.</p>
+
+<div class="sidebox-wrapper" style="float:right;">
+<div class="sidebox">
+<h2>Payment methods on Google Play</h2>
+<ul>
+<li>Credit Card</li>
+<li>Direct Carrier Billing</li>
+</ul>
+</div>
+</div>
+
+<p>Subscribers on many popular carrier networks worldwide can charge purchases
+to their monthly mobile phone bills through <span style="font-weight:500">Direct
+Carrier Billing</span>. This form of payment is convenient and simple and is
+extremely popular in regions where credit cards are less common. More than 75
+million users in key markets around the world can purchase
+your products through Direct Carrier Billing. Many more will get the option in
+the months ahead.</p>
+
+<p>The payment methods available to users worldwide may vary, based on
+location, carrier network, and other factors.</p>
+
+<div style="float:left;margin-right:2em;margin-top:1em;width:220px;">
+<img src="{@docRoot}images/gp-subs.png" style="width:220px">
+</div>
+
+<h2 id="billing-models" style="margin-top:1.5em;">Choice of billing models</h2>
+
+<p>Google Play gives you a choice of billing models to let you monetize your
+products. </p>
+
+<p>You can offer apps to all users for free, or
+you can set an initial price for the app, paid before download. You can also
+sell one-time purchases and auto-renewing subscriptions from inside the app, and
+you can take advantage of AdMob integration to monetize your app through
+targeted advertising.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Billing models on Google Play</h2>
+<ul>
+<li>Free (no charge to download)</li>
+<li>Priced (user charged before download)</li>
+<li>In-App products and subscriptions</li>
+</ul>
+</div>
+</div>
+
+<p>You can combine these billing models in different ways, based on your business
+needs or market conditions. </p>
+
+<p>For example, you can use a freemium or ad-supported model by distributing
+your app for free and selling in-app products or advertising. Alternatively you
+could set a nominal price for your app at download and sell value add-ons,
+gameplay levels, and upgrades as in-app products. The only restriction is that
+free apps must remain free (to download) for the life of the app.</p>
+
+<h2 id="buyer-currency" style="margin-top:1.5em;">Flexible pricing in the currencies of your customers</h2>
+
+<div style="float:right;margin-left:18px;border:1px solid #DDD;">
+<img src="{@docRoot}images/gp-buyer-currency.png" style="width:240px;padding:4px;margin-bottom:0;">
+</div>
+
+<p>Google Play gives you complete control over how you price your products. You
+can set prices in more than 130 countries, for millions of
+users around the world. When users browse your app’s product page or initiate a
+purchase, Google Play shows them the price they will be charged <em>in
+their local currency</em>.</p>
+
+<p>You can set and adjust your prices at any time, in any available currency. 
+Your prices in available currencies are independent, so you can adjust one
+price without affecting others. This gives you the ability to run
+short-term promotions and discounts in specific countries and more easily
+manage shifts in exchange rates.</p>
+
+<p>You can set and manage prices for your apps and in-app products from the
+Google Play Android Developer Console.</p>
+
+<h2 id="payouts">Monthly payouts in your local currency</h2>
+
+<p>To sell products in Google Play, all you have to do is register for a Google
+Checkout merchant account and link it to your Google Play Android Developer
+Console account (see <a
+href="{@docRoot}distribute/googleplay/publish/register.html">Get Started with
+Publishing</a> for details). Once you’ve set up your account and published your
+apps, Google Play makes monthly payouts of sales proceeds to your merchant
+account, in your local currency.</p>
+
+<h2 id="reporting">Detailed financial reporting</h2>
+
+<p>When you sell priced apps or in-app products on Google Play, you get a
+variety of financial reports to help you track and project sales, optimize your
+marketing campaigns, and support your customers.</p>
+
+<p>To help you keep up-to-date with the current activity, you can download daily
+reports summarizing recent purchases of your products. The reports include
+estimated sales amounts and include a variety of other data for each
+transaction.</p>
+
+<p>At the close of the month, you can download a complete sales report that
+gives you the final details of all transactions that closed in the month,
+including the payout amounts and other data. Additional financial reports are
+available in your Google Checkout merchant account.</p>
diff --git a/docs/html/distribute/googleplay/about/visibility.jd b/docs/html/distribute/googleplay/about/visibility.jd
new file mode 100644
index 0000000..2c5dbe5
--- /dev/null
+++ b/docs/html/distribute/googleplay/about/visibility.jd
@@ -0,0 +1,247 @@
+page.title=Visibility for Your Apps
+page.metaDescription=
+
+@jd:body
+    
+<div style="float:right;margin:0px 0px 24px 0px;">
+  <img src="{@docRoot}images/gp-tab.png" style="width:420px" style>
+</div>
+
+<p>A billion downloads a month and growing. Get your apps in front of millions
+of users at Google's scale. </p>  
+
+
+<h2 id="reach">Worldwide reach, rapid growth</h2>
+
+<p>Google Play is the premier store for distributing Android apps. It’s
+preinstalled on more than 300 million devices worldwide, a number growing by
+almost a million every day. Android users have downloaded
+more than <strong style="text-wrap:none;">15 billion apps</strong> from Google
+Play, growing at a rate of more than 1 billion per month.</p>
+
+<p>When you publish on Google Play, you put your apps in front of Android's huge
+base of active customers, in more than 130 countries and territories across the
+world. </p>
+
+<p>Google Play is a central part of the Android experience. New users
+personalize their devices with apps, games, and other Google Play content.
+Existing users return regularly to see what's trending and new. Downloading new
+apps is extremely convenient and fast&mdash; Google Play pushes  apps to the
+user's devices instantly, over the air. No cable or sync is ever needed.</p>
+
+<div style="float:left;margin:0px 20px 0px 0px;width:374px;">
+<div  style="width:378px;padding:2px;">
+<img src="{@docRoot}images/gp-growth-downloads.png" style="width:600px;margin-bottom:0em;">
+</div>
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Growth in app consumption</span>: Users download more than
+1 billion apps from Google Play each month.</p>
+</div>
+
+<div>
+<p>Google Play is also a top destination for visitors from the the web. Anyone
+with a browser can explore everything that Google Play has to offer from its <a
+href="http://play.google.com/store">web site</a>. Android users can even buy and
+install the apps they want and Google Play pushes them automatically to their
+devices over the air. </p>
+
+<p>The accessiblility and convenience of the Google Play web
+site give you new ways to drive traffic to your products from online ads, web
+search, cross-linking, and more.</p>
+</div>
+
+   <div style="clear:both;">
+<h2>Built for app discovery</h2>
+
+<p>Google Play is designed to connect users with great apps and games. It
+provides key channels to help your app get noticed and gain traction in the
+marketplace.</p>
+
+<h3 id="ratings">User ratings and reviews</h3>
+
+<p>When you develop a great app, Android users show their appreciation through
+ratings and reviews. They rate your app (out of 5 stars) after downloading it
+and can post a short description of their experience. When other users are
+considering your app, they look at the ratings and reviews as key benchmarks of
+the app’s quality. </p>
+
+   </div>
+
+<p>Your app’s rating is one of the most important factors influencing its
+ranking in the various lists and search results in Google Play. It's also one of
+the key signals that the editorial staff looks for, when curating apps and games
+for promotion in the store.</p>
+
+<div style="border:1px solid #DDD;padding:1px;margin-left:110px;width:504px;">
+<img src="{@docRoot}images/gp-rating-web.png" style="width:500px;padding:0;margin:0;">
+</div>
+
+<h3 id="category" stdle="padding-top:2em;">Category browsing</h3>
+
+<p>When you publish an app in Google Play, you pick the category in which you
+want users to find your app. More than 30 categories are available. Inside each
+category, apps are ranked based on a combination of ratings, reviews, downloads,
+country, and other factors. Many popular categories also start with a collection
+of featured apps selected by the Google Play editorial staff.</p>
+
+<div style="clear:both;margin-top:2em;margin-left:10%;width:560px;">
+<div style="clear:both;margin-top:2em;">
+<img src="{@docRoot}images/gpp-cat-feature280-puzzle.png" style="width:180px">
+<img src="{@docRoot}images/gpp-cat-feature280-photo.png" style="width:180px">
+<img src="{@docRoot}images/gpp-cat-feature280-sports.png" style="width:180px">
+</div>
+<p class="image-caption"><span style="font-weight:500;">Featuring in
+categories</span>: Most app and game categories include a featured list curated
+by the editorial team.</p>
+</div>
+
+<h3 id="search">Search</h3>
+
+<p>Search on Google Play lets users pinpoint an app or game quickly. Search uses
+powerful heuristics to suggest terms as the user types, and it offers direct
+links to apps as suggestions. In results, users find the most relevant, most
+popular apps at the top. </p>
+
+<div style="float:left;margin:12px 24px 0px 0px;">
+<img src="{@docRoot}images/gp-top-new-paid.png" style="width:250px">
+</div>
+
+<h3 id="top-charts" style="padding-top:1em">Top charts and lists</h3>
+
+<p>Top charts keep users in touch with what’s popular and trending with Android
+users, right from the Apps and Games home pages. The charts are generated
+several times each day based on recent download activity, keeping them fresh and
+allowing new apps to move upward in the charts. To make the charts as relevant
+as possible for users across the world, they are also country-specific.</p>
+
+<p>As your apps get traction and build momentum in downloads and ratings,
+they’ll climb one or more of the top charts and gain even more exposure.</p>
+
+<div>
+<table style="width:440px">
+<tr>
+<td style="width:100px">Top Free</td><td>Free apps and games</td></tr>
+<td style="width:140px">Top Paid</td><td>Priced apps and games</td></tr>
+<td>Top New Free</td><td>Less than 30 days old</td></tr>
+<td>Top New Paid</td><td>Less than 30 days old</td></tr>
+<td>Top Grossing</td><td>Gross proceeds, free or priced</td></tr>
+<td>Best Selling</td><td>Popular priced games</td></tr>
+<td>Trending</td><td>New arrivals growing quickly in installs</td>
+</tr>
+</table>
+</div>
+
+<div style="clear:both">
+<h4 id="featured" style="padding-top:2.5em;">Featured, Staff Picks, Collections,
+and Badges</h4>
+
+
+<div style="float:right;margin-left:18px;">
+<img src="{@docRoot}images/gp-apps-home.png" style="width:180px">
+<img src="{@docRoot}images/gp-games-home.png" style="width:180px">
+</div>
+
+<p>The Google Play editorial team is dedicated to bringing the best apps to the
+attention of users. It constantly reviews apps from across Google Play to find
+not only the biggest apps and games, but also the “diamonds in the rough” that
+they want more people to see. </p>
+
+<p>When the team finds great apps and games they use the <em>Featured</em>,
+<em>Staff Picks</em>, and other collections to promote them. Any one of those
+can give your apps dramatically higher visibility and market penetration.</p>
+
+<p>You can’t nominate your app for featuring or pay for a promotional slot,
+because the editorial team wants to show the best apps and give the same chances
+to all developers. However, if you build an app that users love and that looks
+great on Android devices, the editorial team will notice. <!--In some cases,
+they will reach out to you before your app is featured to make sure that your
+app will be at its best during featuring.</p> -->
+</div>
+
+<h4>Featured and Staff Picks</h4>
+
+<p>Each week the the Google Play editorial staff selects a new set of apps to
+promote in its popular <em>Featured</em> and <em>Staff Picks</em> collections.
+</p>
+
+The <em>Featured</em> collections highlight the latest and greatest app and game
+titles available for Android. Category featuring highlights the best and most
+popular apps in the top categories.
+
+<em>Staff Picks</em> collects all recently featured apps and games on Google
+Play. To better reach tablet users, there’s a special <em>Staff Picks</em>
+collection that highlights the best apps for Android tablets.</p>
+
+<div style="float:left;margin-right:18px;">
+<img src="{@docRoot}images/gp-collectibles.png" stydle="width:180px">
+
+</div>
+
+<h4>App collections</h4>
+
+<p>From time to time the editorial staff puts together a collection of apps and
+games based on a theme or seasonal event. The collections are popular with
+customers because they are timely and relevant, and they provide a new way to
+showcase great Android apps to users.</p>
+
+<p>The editorial staff chooses apps for collection promotions in a similar way
+as for featuring&mdash;high-quality apps that show the best of Android on phones
+and tablets. For collections the staff also looks for apps that can make an
+interesting or unique contribution to the collection as a whole. </p>
+
+<h4><img style="margin-right:.25em;margin-bottom:.5em;"
+src="{@docRoot}images/editorschoice_ann.png"> EDITORS' CHOICE</h4>
+
+<p><em>Editors’ Choice</em> is a curated collection of apps that highlights some
+of the very best apps available on Android. These apps are chosen for high
+quality and great UI, long-term popularity, and innovative use of Android
+features.</p>
+
+<p>Apps chosen for <em>Editors’ Choice</em> also receive a badge that is
+displayed wherever the app name is seen in Google Play.</p>
+
+<h4><img style="margin-right:.25em;margin-bottom:.5em;"
+src="{@docRoot}images/topdev_ann.png"> TOP DEVELOPER</h4>
+
+<p>Top Developer is a badge recognizing established, respected developers for
+their commitment to launching high-quality and innovative apps on
+Android. The Google Play editorial staff selects developers awards a Top
+Developer badge from time to time, based on the cumulative work of the
+developer.</p>
+
+<p>The Top Developer badge appears next to the developer name wherever it is
+displayed in Google Play. For a developer, the badge means long-term recognition
+of all of your apps. For users, the badge signifies an additional level of trust
+and confidence in your products.</p>
+
+<h3 id="details">Rich, colorful product pages</h3>
+
+<p>In Google Play, your app’s storefront is its <em>product details page</em>
+&mdash; a rich and colorful page that lets you promote your app, highlight its
+ratings and reviews, and show what your app can do. 
+
+<p>Your product details page is the one page where your users come to find out
+everything about your app. When they see your app listed in search results, top
+charts, category listings, and collections, one tap takes them directly to your 
+product details page.</p>
+
+<div style="float:right;margin-left:10px;">
+<img src="{@docRoot}images/gp-details-pages-magicpiano.png" style="width:500px">
+</div>
+
+<p>You can manage your product details page through the <span
+style="font-weight:500">Google Play Android Develeper Console</span>, from any
+web browser. Just sign in, upload or update your brand assets, and enter your
+product details in the languages of your markets. </p>
+
+<p>When you publish, Google Play adds your app’s ratings, reviews, links to your
+other products, and more, and makes sure your product details page looks great
+on phones, tablets, or in a web browser.</p>
+
+<p>You can link web users directly to your product details page from outside
+Google Play, such as from your web site, an ad campaign, reviews, social media
+posts, and more. See <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking
+to Your Products</a> to find out how. </p>
+
+<p>To learn more about how to create your product details page, see
+<a href="{@docRoot}distribute/googleplay/publish/index.html">Publishing on Google Play</a>.</p>
diff --git a/docs/html/distribute/googleplay/index.html b/docs/html/distribute/googleplay/index.html
new file mode 100644
index 0000000..46a8ce2
--- /dev/null
+++ b/docs/html/distribute/googleplay/index.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/distribute/index.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should have been redirected. Please <a
+href="http://developer.android.com/distribute/index.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/promote/badges.jd b/docs/html/distribute/googleplay/promote/badges.jd
new file mode 100644
index 0000000..de12e2a
--- /dev/null
+++ b/docs/html/distribute/googleplay/promote/badges.jd
@@ -0,0 +1,203 @@
+page.title=Google Play Badges
+@jd:body
+
+<p>Google Play badges give you an officially branded way of promoting your app to Android users. Use the form below to quickly create badges to link users to your products from web pages, ads, reviews, and more. See <a href="linking.html">Linking to your products</a> for more ways to bring users to your apps.</p>
+
+<p>Input your app's package or your publisher name, choose the style, size, and language, and click "Build my badge". The form will generate code for an embbeded button that links to your app's product page or a list of your apps. </p>
+
+<p>Note that you should not modify the Google Play badges after generating them, including colors, size, text, and logo. See <a href="http://www.android.com/branding.html">Android Brand Guidelines</a> for more information.</p>
+
+<style type="text/css">
+
+form.button-form {
+  margin-top:2em;
+}
+
+/* the label and input elements are blocks that float left in order to
+   keep the left edgets of the input aligned, and IE 6/7 do not fully support "inline-block" */
+label.block {
+  display: block;
+  float: left;
+  width: 100px;
+  padding-right: 10px;
+}
+
+input.text {
+  display: block;
+  float: left;
+  width: 250px;
+}
+
+div.button-row {
+  white-space:nowrap;
+  min-height:80px;
+}
+
+div.button-row input {
+  vertical-align:120%;
+}
+
+#jd-content div.button-row img {
+  margin: 0;
+}
+
+</style>
+
+<script type="text/javascript">
+
+// variables for creating 'try it out' demo button
+var imagePath = "http://www.android.com/images/brand/"
+var linkStart = "<a href=\"http://play.google.com/store/";
+var imageStart = "\">\n"
+        + "  <img alt=\"";
+  // leaves opening for the alt text value
+var imageSrc = "\"\n       src=\"" + imagePath;
+  // leaves opening for the image file name
+var imageEnd = ".png\" />\n</a>";
+
+// variables for creating code snippet
+var linkStartCode = "&lt;a href=\"http://play.google.com/store/";
+var imageStartCode = "\"&gt;\n"
+        + "  &lt;img alt=\"";
+  // leaves opening for the alt text value
+var imageSrcCode = "\"\n       src=\"" + imagePath;
+  // leaves opening for the image file name
+var imageEndCode = ".png\" />\n&lt;/a>";
+
+/** Generate the HTML snippet and demo based on form values */
+function buildButton(form) {
+  var selectedValue = $('form input[type=radio]:checked').val();
+  var altText = selectedValue.indexOf("get_it") != -1 ? "Get it on Google Play" : "Android app on Google Play";
+
+  if (form["package"].value != "com.example.android") {
+    $("#preview").show();
+    $("#snippet").show().html(linkStartCode + "apps/details?id=" + form["package"].value
+            + imageStartCode + altText + imageSrcCode
+            + selectedValue + imageEndCode);
+    $("#button-preview").html(linkStart + "apps/details?id=" + form["package"].value
+            + imageStart + altText + imageSrc
+            + selectedValue + imageEnd);
+  } else if (form["publisher"].value != "Example, Inc.") {
+    $("#preview").show();
+    $("#snippet").show().html(linkStartCode + "search?q=pub:" + form["publisher"].value
+            + imageStartCode + altText + imageSrcCode
+            + selectedValue + imageEndCode);
+    $("#button-preview").html(linkStart + "search?q=pub:" + form["publisher"].value
+            + imageStart + altText + imageSrc
+            + selectedValue + imageEnd);
+  } else {
+    alert("Please enter your package name or publisher name");
+  }
+  return false;
+}
+
+/** Listen for Enter key */
+function onTextEntered(event, form, me) {
+  // 13 = enter
+  if (event.keyCode == 13) {
+    buildButton(form);
+  }
+}
+
+/** When input is focused, remove example text and disable other input */
+function onInputFocus(object, example) {
+  if (object.value == example) {
+    $(object).val('').css({'color' : '#000'});
+  }
+  $('input[type="text"]:not(input[name='+object.name+'])',
+          object.parentNode).attr('disabled','true');
+  $('#'+object.name+'-clear').show();
+}
+
+/** When input is blured, restore example text if appropriate and enable other input */
+function onInputBlur(object, example) {
+  if (object.value.length < 1) {
+    $(object).attr('value',example).css({'color':'#ccc'});
+    $('input[type="text"]', object.parentNode).removeAttr('disabled');
+    $('#'+object.name+'-clear').hide();
+  }
+}
+
+/** Clear the form to start over */
+function clearLabel(id, example) {
+  $("#preview").hide();
+  $('#'+id+'').html('').attr('value',example).css({'color':'#ccc'});
+  $('input[type="text"]', $('#'+id+'').parent()).removeAttr('disabled');
+  $('#'+id+'-clear').hide();
+  return false;
+}
+
+/** When the doc is ready, find the inputs and color the input grey if the value is the example
+    text. This is necessary to handle back-navigation, which can auto-fill the form with previous
+    values (and text should not be grey) */
+$(document).ready(function() {
+  $(".button-form input.text").each(function(index) {
+    if ($(this).val() == $(this).attr("default")) {
+      $(this).css("color","#ccc");
+    } else {
+      /* This is necessary to handle back-navigation to the page after form was filled */
+      $('input[type="text"]:not(input[name='+this.name+'])',
+              this.parentNode).attr('disabled','true');
+      $('#'+this.name+'-clear').show();
+    }
+  });
+});
+
+</script>
+
+<form class="button-form">
+  <label class="block" for="package">Package name:</label>
+  <input class="text" type="text" id="package" name="package"
+         value="com.example.android"
+         default="com.example.android"
+         onfocus="onInputFocus(this, 'com.example.android')"
+         onblur="onInputBlur(this, 'com.example.android')"
+         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
+         <a id="package-clear" style="display:none" href="#"
+            onclick="return clearLabel('package','com.example.android');">clear</a>
+  <p style="clear:both;margin:0">&nbsp;<em>or</em></p>
+  <label class="block" style="margin-top:5px" for="publisher">Publisher&nbsp;name:</label>
+  <input class="text" type="text" id="publisher" name="publisher"
+         value="Example, Inc."
+         default="Example, Inc."
+         onfocus="onInputFocus(this, 'Example, Inc.')"
+         onblur="onInputBlur(this, 'Example, Inc.')"
+         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
+         <a id="publisher-clear" style="display:none" href="#"
+            onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
+         <br/><br/>
+
+<div class="button-row">
+  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
+    <label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
+alt="Get it on Google Play (small)" /></label>
+    &nbsp;&nbsp;&nbsp;&nbsp;
+  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
+    <label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
+alt="Get it on Google Play (large)" /></label>
+</div>
+
+<div class="button-row">
+  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
+    <label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
+alt="Android app on Google Play (small)" /></label>
+    &nbsp;&nbsp;&nbsp;&nbsp;
+  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
+    <label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
+alt="Android app on Google Play (large)" /></label>
+</div>
+
+  <input type="button" onclick="return buildButton(this.parentNode)" value="Build my badge"
+style="padding:5px" />
+  <br/>
+</form>
+
+<div id="preview" style="display:none">
+  <p>Copy and paste this HTML into your web site:</p>
+  <textarea id="snippet" cols="100" rows="5" onclick="this.select()"
+style="font-family:monospace;background-color:#efefef;padding:5px;display:none;margin-bottom:1em">
+  </textarea >
+
+<p>Try it out:</p>
+<div id="button-preview" style="margin-top:1em"></div>
+</div>
diff --git a/docs/html/distribute/googleplay/promote/brand.jd b/docs/html/distribute/googleplay/promote/brand.jd
new file mode 100644
index 0000000..8aafc48
--- /dev/null
+++ b/docs/html/distribute/googleplay/promote/brand.jd
@@ -0,0 +1,174 @@
+page.title=Brand Assets, Icons, and Guidelines
+@jd:body
+
+<p>We encourage you to use the Android and Google Play brands in your
+promotional materials. You can use the icons and other assets on this page in
+any way you want, provided that you follow the guidelines described below.</p>
+
+<h2 id="brand-android">Android Brand</h2>
+
+<div>
+  <div style="float:right;width:50%;padding:1.5em;">
+    <img alt="" src="{@docRoot}images/brand/droid.gif">
+  </div>
+
+  <div style="width:45%;">
+    <h4>01/ Android Robot</h4>
+
+    <p> Can be used, reproduced, and modified freely in marketing
+    communications. Our standard color value for print is PMS 376C. Our online hex
+    color is <span id= "android-green">#A4C639</span>.</p>
+
+    <p>When using the Android Robot or any modification of it, proper attribution is
+    required under the terms of the Creative Commons Attribution license. For more
+    details on proper attribution, please see the <a
+    href="{@docRoot}license.html#attribution">Content License</a> document. </p>
+  </div>
+<div>
+
+<div style="clear:both">
+  <div style="float:right;width:50%;padding:1.5em;">
+    <img alt="" src="{@docRoot}images/brand/logo_android.gif">
+  </div>
+
+  <div style="width:45%;">
+    <h4>02/ Android Logo</h4>
+
+    <p>The Android logo may not be used.</p>
+  </div>
+<div>
+
+<div style="clear:both">
+  <div style="float:right;width:50%;padding:1.5em;">
+    <img alt="" src="{@docRoot}images/brand/norad.gif">
+  </div>
+
+  <div style="width:45%;">
+    <h4>03/ Android Custom Typeface</h4>
+
+    <p>The custom typeface may not be used.</p>
+  </div>
+<div>
+
+<div style="clear:both">
+  <div style="float:right;width:50%;padding:1.5em;">
+    <img alt="" src="{@docRoot}images/brand/mediaplayer.gif">
+  </div>
+
+  <div style="width:45%;">
+    <h4>04/ Android in Official Names</h4>
+<p>Any name with 'Android' alone may not be used in a name without permission. Any name
+            with 'Droid' alone may not be used in a name.</p>
+            
+          <p>The word 'Android' may be used only as a descriptor, 'for Android'. If used with your
+            logo, 'for Android' needs to be smaller in size than your logo. First instance of this
+            use should be followed by a TM symbol, 'for Android™'.</p>
+            
+          <p>If you are not sure you meet these criteria, <a href=
+            "http://services.google.com/permissions/application">please contact us</a>. </p>
+  </div>
+<div>
+
+<div style="clear:both">
+  <div style="float:right;width:50%;padding:1.5em;">
+    <img alt="" src="{@docRoot}images/brand/learnmore.gif">
+  </div>
+
+  <div style="width:45%;">
+    <h4>05/ Android in Messaging</h4>
+          <p>
+            May be used in text as a descriptor, as long as it is followed by a proper generic term
+            (e.g. "Android™ application"). First instance of this use should be followed by a TM
+            symbol.
+          </p>       
+  </div>
+<div>
+          <p class="caution"><strong>Note: Any usage of #04 or #05 needs to include footer attribution in your
+          communication:</strong><br /><span style="margin-left:1.5em">
+          "Android is a trademark of Google Inc."</span>
+        </p>
+
+<h2 id="brand-google_play">Google Play Brand</h2>
+
+<div style="clear:both">
+  <div style="float:right;width:50%;padding:1.5em;">
+    <p>
+      <img alt="Google Play logo" src="{@docRoot}images/brand/google_play_logo_450.png">
+    </p>
+    <p>
+    <img alt="Get it on Google Play badge, large" src=
+            "/images/brand/get_it_on_play_logo_large.png"><br>
+            Download: <a href="{@docRoot}images/brand/get_it_on_play_logo_small.png">Small</a> | <a href=
+            "/images/brand/get_it_on_play_logo_large.png">Large</a>
+          </p>
+          <p>
+            <img alt="Android App on Google Play badge, large" src=
+            "/images/brand/android_app_on_play_logo_large.png"><br>
+            Download: <a href="{@docRoot}images/brand/android_app_on_play_logo_small.png">Small</a> |
+            <a href="{@docRoot}images/brand/android_app_on_play_large.png">Large</a>
+          </p>
+  </div> 
+        
+  <div style="width:45%;">
+    <h4>06/ <em>Get it on Google Play</em> Badge
+          </h4>
+          <p>
+            The "Get it on Google Play" and "Android App on Google Play" logos are badges that you
+            can use on your web site and promotional materials, to point to your products on Google
+            Play.
+          </p>
+          <p>
+            The logos are available in two sizes:
+          </p>
+          <ul>
+            <li>Large: 60(h) x 172(w)</li>
+            </li>
+            <li>Small 45(h) x 129(w)
+            </li>
+          </ul>
+          <p>
+            Guidelines for usage:
+          </p>
+          <ul>
+            <li>Never separate the phrase “Get it on Google Play” or "Android App on Google Play"
+            from the Google Play logo, and do not change the color, proportions, spacing or any
+            other aspect of the logo.
+            </li>
+     </ul>
+     </div>
+     
+     <ul>
+            <li>When used online, the badge logo should be used to direct users to:
+              <ul>
+                <li>The Google Play landing page: <br /><span style="margin-left:1em;"><a href=
+                "http://play.google.com/">play.google.com</a></span>
+                </li>
+                <li>The Google Play Apps landing page: <br /><a href="http://play.google.com/store/apps">
+                 <span style="margin-left:1em;"> play.google.com/store/apps</a></span>
+                </li>
+                <li>A list of products that include your company name, for example, <br />
+                <span style="margin-left:1em;">http://play.google.com/store/search?q=<em>yourCompanyName</em></span>
+                </li>
+                <li>A list of products published by you, for example,<br />
+                <span style="margin-left:1em;">play.google.com/store/search?q=<em>publisherName</em>M/span>
+                </li>
+                <li>A specific app product details page within Google Play, for example,<br />
+                <span style="margin-left:1em;">play.google.com/store/apps/details?id=<em>packageName</em></span>
+                </li>
+              </ul>
+            </li>
+            <li>When used alongside logos for other application marketplaces, the Google Play logo
+            should be of equal or greater size</li>
+  </ul>
+            
+            <p>For details on all the ways that you can link to your product details page in Google Play, 
+            see <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to your products</a></p>
+
+          <p>For convenience, if you are using the logos online, you can use the 
+            <a href="{@docRoot}distribute/googleplay/promote/badges.html">badge generator</a>
+            to create the appropriate markup and link to your apps.</p>
+
+<h2>Other Brands</h2>
+
+<p>Any other brands or icons depicted on this site are <em>not</em> are the property of their
+repective owners and usage is reserved. You must seek the developer for appropriate permission to use them.</p>
diff --git a/docs/html/distribute/googleplay/promote/index.jd b/docs/html/distribute/googleplay/promote/index.jd
new file mode 100644
index 0000000..6882990
--- /dev/null
+++ b/docs/html/distribute/googleplay/promote/index.jd
@@ -0,0 +1,43 @@
+page.title=Promoting Your Apps
+page.metaDescription=Raise the visibility of your apps in Google Play through deep links  and Google Play badges.
+header.hide=0
+footer.hide=0
+@jd:body
+
+<!--
+<style>
+#landing-graphic-container {
+  position: relative;
+}
+
+#text-overlay {
+  position: absolute;
+  left: 0;
+  top: 472px;
+  width: 280px;
+}
+</style>
+
+<div id="landing-graphic-container">
+  <div id="text-overlay">
+   Raise the visibility of your apps with badges and link users to your products on Google Play.
+    <br><br>
+    <a href="{@docRoot}distribute/googleplay/promote/product-pages.html" class="landing-page-link">Your Product Pages</a>
+  </div>
+
+  <a href="{@docRoot}distribute/googleplay/promote/index.html">
+    <img src="{@docRoot}design/media/index_landing_page.png">
+  </a>
+</div> -->
+
+<p>After you publish your app, you can bring Android users to your app's product details page by
+providing links in your social network posts, ad campaigns, app reviews and articles, your
+web site, and more. </p>
+
+<p>You can use the resources in this section to create deep links for your online placements.
+Google Play badges are an especially great way let Android users know that your app is available
+and link them directly to your download page. With the badge generator, they're also easy to make.</p>
+
+
+<p style="margin-top:1.5em;margin-bottom:1.5em;"><a href="{@docRoot}distribute/googleplay/promote/linking.html" class="landing-page-link">Linking to Your Products</a></p>
+
diff --git a/docs/html/distribute/googleplay/promote/linking.jd b/docs/html/distribute/googleplay/promote/linking.jd
new file mode 100644
index 0000000..4a1b198
--- /dev/null
+++ b/docs/html/distribute/googleplay/promote/linking.jd
@@ -0,0 +1,213 @@
+page.title=Linking to Your Products
+@jd:body
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<a href="badges.html">
+  <img alt="Get it on Google Play"
+       src="http://www.android.com/images/brand/get_it_on_play_logo_small.png" />
+</a>
+<p>For a link that includes the Google Play brand icon, check out the <a href="badges.html">Badges</a> page. </p>
+</div>
+</div>
+
+<p>Google Play provides several link formats that let you bring users to your
+products in the way you want, from Android apps, web pages, ads, reviews,
+articles, social media posts, and more.</p> 
+
+<p>The link formats let you:</p>
+<ul>
+<li>Link to a specific app's <a href="#OpeningDetails">product details page</a></li>
+<li>Link to a <a href="#OpeningPublisher">list of all of your apps</a>, or</li>
+<li>Link to a <a href="#PerformingSearch">search result</a> of your choice</li>
+<li>Link to a <a href="#OpeningCollection">collection</a> on Google Play</li>
+</ul>
+
+<p>If you are linking from an Android app, you can also control whether the link
+launches the Play Store application or the browser, which takes the user
+to the Google Play web site.</p>
+
+<h2 id="OpeningDetails">Linking to a Product Details Page</h2>
+
+<p>Use the format below to deep-link users directly to a specific app's product
+details page. At the product details page, users can see the app description,
+screenshots, reviews and more, and then install it.</p>
+
+<p>To create the link, you need to know the app's fully qualified <em>package
+name</em>, which is declared in the app's <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#package">manifest
+file</a>. The package name is also visible in the Developer Console. </p>
+
+<dl>
+<dt><strong>From a web site:</strong></dt>
+<dd>
+<pre>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</pre>
+</dd>
+<dt><strong>From an Android app:</strong></dt>
+<dd>
+<pre>market://details?id=&lt;package_name&gt;</pre>
+</dd>
+</dl>
+
+<p>Here's an example:</p>
+
+<p style="margin-left:1em;"><code><a href="http://play.google.com/store/apps/details?id=com.google.android.apps">http://play.google.com/store/apps/details?id=com.google.android.apps</a></code></p>
+
+<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
+
+
+
+<h2 id="OpeningPublisher">Linking to a Product List</h2>
+
+<p>Use the format below to link users to a list of apps published by you. The
+product list lets users see all of the apps from a specific publisher, with
+ratings, editorial badges, and an Install button for each. </p>
+
+<p>To create the link, you need to know your <em>publisher name</em>, which is
+available from the Developer Console. </p>
+
+<dl>
+<dt><strong>From a web site:</strong></dt>
+<dd>
+<pre>http://play.google.com/store/search?q=pub:&lt;publisher_name&gt;</pre>
+</dd>
+<dt><strong>From an Android app:</strong></dt>
+<dd>
+<pre>market://search?q=pub:&lt;publisher_name&gt;</pre>
+</dd>
+</dl>
+
+<p>Here's an example:</p>
+
+<p style="margin-left:1em;"><code><a href="http://play.google.com/store/search?q=pub:Google Inc.">http://play.google.com/store/search?q=pub:Google Inc.</a></code></p>
+
+<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
+
+
+<h2 id="PerformingSearch">Linking to a Search Result</h2>
+
+<p>Use the format below to link users to a search query result on Google Play.
+The search result page shows a list of apps (and optionally other content) that
+match the query, with ratings, badges, and an Install button for each. </p>
+
+<p>To create the link, you just need a search query string. If you want the
+query to search outside of the Google Play Apps listings, you can remove the
+<code>&c=apps</code> part of the link URL.</p>
+
+<dl>
+<dt><strong>From a web site:</strong></dt>
+<dd>
+<pre>http://play.google.com/store/search?q=&lt;search_query&gt;&c=apps</pre>
+</dd>
+<dt><strong>From an Android app:</strong></dt>
+<dd>
+<pre>market://search?q=&lt;seach_query&gt;&c=apps</pre>
+</dd>
+</dl>
+
+<p>Here's an example:</p>
+
+<p style="margin-left:1em;"><code><a href="http://play.google.com/store/search?q=maps&c=apps">http://play.google.com/store/search?q=maps&c=apps</a></code></p>
+
+<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
+
+
+
+<h2 id="OpeningCollection">Linking to a Collection</h2>
+
+<p>If your app is featured or appears in one of the Google Play Top charts or
+collections, you can use the format below to link users directly to the
+collection. The collection shows a ranked list of apps in the collection, with
+ratings, short descriptions, and an Install button.</p>
+
+<dl>
+<dt><strong>From a web site:</strong></dt>
+<dd>
+<pre>http://play.google.com/store/apps/collection/&lt;collection_name&gt;</pre>
+</dd>
+<dt><strong>From an Android app:</strong></dt>
+<dd>
+<pre>market://apps/collection/&lt;collection_name&gt;</pre>
+</dd>
+</dl>
+
+<p>Here's an example:</p>
+
+<p style="margin-left:1em;"><code><a href="http://play.google.com/store/apps/collection/editors_choice">http://play.google.com/store/apps/collection/editors_choice</a></code></p>
+
+<p>For details on how to send the link in an Android app, see <a href="#android-app">Linking from an Android App</a>.</p>
+
+<p class="table-caption"><strong>Table 1.</strong> Collections on Google Play</a>.</p>
+
+<table>
+<tr>
+<th>Collection</th><th>collection_name</th>
+</tr>
+<tr><td>Staff Picks (Featured)</td><td>featured</td></tr>
+<tr><td>Editor's Choice</td><td>editors_choice</td></tr>
+<tr><td>Top Paid</td><td>topselling_paid</td></tr>
+<tr><td>Top Free</td><td>topselling_free</td></tr>
+<tr><td>Top New Free</td><td>topselling_new_free</td></tr>
+<tr><td>Top New Paid</td><td>topselling_new_paid</td></tr>
+<tr><td>Top Grossing</td><td>topgrossing</td></tr>
+<tr><td>Trending</td><td>movers_shakers</td></tr>
+<tr><td>Best Selling in Games</td><td>topselling_paid_game</td></tr>
+</table>
+
+
+<h2 id="android-app">Linking from an Android App</h2>
+
+<p>There are two general formats for links that are accessible to users on
+Android devices, The two formats trigger slightly different behaviors on the
+device:</p>
+
+<ul>
+<li><code>market://</code> &nbsp;&nbsp; Launches the Play Store app to load the
+target page.</li>
+<li><code>http://</code> &nbsp;&nbsp; Lets the user choose whether to launch the
+Play Store app or the browser to handle the request. If the browser handles the
+request, it loads the target page on the Google Play web site.</li>
+</ul>
+
+<p>In general, you should use <code>http://</code> format for links on web pages
+and <code>market://</code> for links in Android apps.</p>
+
+<p>If you want to link to your products from an Android app, create an {@link
+android.content.Intent} that opens an Google Play URL, as shown in the example
+below.</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_VIEW);
+intent.setData(Uri.parse("market://details?id=com.example.android"));
+startActivity(intent);
+</pre>
+
+
+<h2 id="UriSummary">Summary of URL formats</h2>
+
+<p>The table below provides a summary of the URIs currently supported by the Google Play (both on
+the web and in an Android application), as discussed in the previous sections.</p>
+
+<table>
+<tr>
+<th>For&nbsp;this&nbsp;result</th>
+<th>Web page link</th>
+<th>Android app link</th>
+</tr>
+<tr>
+<td style="width:72px;">Show the product details page for a specific app</td>
+<td><code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
+<td><code>market://details?id=&lt;package_name&gt;</code></td>
+</tr>
+<tr>
+<td>Show apps by a specific publisher</td>
+<td><nobr><code>http://play.google.com/store/search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
+<td><nobr><code>market://search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
+</tr>
+<tr>
+<td>Search for apps using a general string query.</td>
+<td><code>http://play.google.com/store/search?q=&lt;query&gt;</code></td>
+<td><code>market://search?q=&lt;query&gt;</code></td>
+</tr>
+</table>
+
diff --git a/docs/html/distribute/googleplay/promote/product-pages.jd b/docs/html/distribute/googleplay/promote/product-pages.jd
new file mode 100644
index 0000000..af5b2d5
--- /dev/null
+++ b/docs/html/distribute/googleplay/promote/product-pages.jd
@@ -0,0 +1,4 @@
+page.title=Your Product Pages
+@jd:body
+
+<p>Placeholder...</p>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/publish/console.jd b/docs/html/distribute/googleplay/publish/console.jd
new file mode 100644
index 0000000..72b97ab
--- /dev/null
+++ b/docs/html/distribute/googleplay/publish/console.jd
@@ -0,0 +1,201 @@
+page.title=The Developer Console
+@jd:body
+
+
+<p>Once you've <a
+href="{@docRoot}distribute/googleplay/publish/register.html">registered</a> and
+received verification by email, you can sign in to your Google Play Android
+Developer Console, which will be the home for your app publishing operations and
+tools on Google Play. This sections below introduce a few of the key areas
+you'll find in the Developer Console.</p>
+
+<div style="width:610px;margin-left:">
+<div style="width:610px;border:1px solid #DDD;">
+<img src="{@docRoot}images/gp-dc-home.png" style="width:600px;padding:4px;margin-bottom:0em;">
+</div>
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Developer Console home page</span>: Gives you a quick
+overview of your apps, lets you jump to stats, reviews, or product details, or
+upload a new app. </p>
+</div>
+
+<h3 id="profile">Your Developer Profile</h3>
+
+<div style="width:408px;float:right;margin:1.5em;">
+<div style="width:410px;border:1px solid #DDD;">
+<img src="{@docRoot}images/gp-dc-profile.png" style="width:400px;padding:4px;margin-bottom:0em;">
+</div>
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Developer profile</span>: Specifies your developer
+identity and contact information, stores your developer key, and more.</p>
+</div>
+
+<p>Your developer profile identifies you to Google Play and to your customers.
+During registration you can provide information for your profile, but you can go
+back at any time to edit the information and change your settings. </p>
+
+<p>Your developer profile contains:</p>
+<ul>
+<li>Your developer name &mdash; the name you want to show users on your product
+details page and elsewhere on Google Play. 
+<li>Your developer contact information &mdash; how Google can contact you if
+needed (this information isn't exposed to users.
+<li>Merchant information, in-app billing information.</li>
+<li>Your developer public key for licensing and In-app Billing.</li>
+</ul>
+
+<h3 id="user-accounts">Multiple user accounts</h3>
+
+<p>If you are working with a team, you can set up multiple user accounts to
+access different parts of your Developer Console. The first account registered
+is the <em>account owner</em>, with full access to all parts of the Console. The
+owner can add <em>user accounts</em> and manage what parts of the Console they
+have access to. For example, an owner can grant users access to publishing and
+app configuration, but not access to financial reports. </p>
+
+<h3 id="merchant">Linking your Merchant Account</h3>
+
+<p>If you want to sell apps or in-app products, you can link your Google
+Checkout Merchant account to your developer profile. Google Play uses the linked
+Checkout account for financial and tax identification and monthly payouts of
+sales. </p>
+
+<div style="width:410px;float:right;margin:1.5em;">
+<div style="width:410px;border:1px solid #DDD;">
+<img src="{@docRoot}images/gp-dc-details.png" style="width:400px;padding:4px;margin-bottom:0em;">
+</div>
+<p class="image-caption" style="padding:.5em"><span
+style="font-weight:500;">Product details page</span>: Lets you upload your
+graphic assets, description, support information, and other information to
+create the product details page for a specific app.</p>
+</div>
+
+<h3 id="details">Your product and listing details</h3>
+
+<p>The Developer Console lets you set up a colorful storefront page for your app
+called the <em>product details page</em>. Your product details page is the home
+for your app in Google Play &mdash; it's the page users see on their mobile
+phones or on the web when they want to learn about your app and download it.
+</p>
+
+<p>You can upload custom brand assets, screen shots, and videos to highlight
+what's great about your app, and you can provide a localized description, add
+notes about the latest version, and more. You can update your store listing at
+any time, even if you don’t have a new version of your application.</p>
+
+<h3 id="uploading">Uploading and publishing</h3>
+
+<p>From the Developer Console you can quickly upload a release-ready APK and
+publish it when you're ready. The app is a <em>draft</em> until you publish it,
+at which time Google Play makes your product details page and app available to
+users. You can unpublish the app at any time.</p>
+
+<h3 id="controls">Distribution Controls</h3>
+
+<p>In the Developer Console you can manage what countries and territories the
+app is distributed to and, for some countries, you can choose what carriers you
+want to target.</p>
+
+<p>You can also see the list of devices that your app is currently available to,
+based on any distribution rules declared in its manifest file.</p>
+
+<h3 id="profile">Selling and pricing your Products</h3>
+
+<p>The Developer Console gives you tools to set prices for your apps and in-app
+products. Your app can either be free to download or priced (charged before
+download). </p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<p>See <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">Supported locations for distributing applications</a> for a list of countries where you can distribute or sell your app,</p>
+</div>
+</div>
+
+<ul>
+<li>If you publish your app as free, <span style="font-weight:500;">it must
+remain free</span>. Free apps can be downloaded by any users in Google
+Play.</li>
+<li>If you publish it as priced, you can change it to free, Priced apps can be
+purchased and downloaded only from .</li>
+</ul>
+
+<p>In addition, you can sell in-app products and subscriptions in your app,
+whether it is free or priced. You can set prices separately for priced apps,
+in-app products, and subscriptions.</p>
+
+<p>If you are selling a priced app or in-app products or subscriptions, the
+Developer Console lets you set prices in a large number of different currencies.
+When users around the world visit your product details page, they see the price
+of your app in their own currency. For most countries, the price you set is the
+final price charged to users, inclusive of taxes. </p>
+
+<p>To help you manage your prices, the Developer Console provides an autofill
+capability that uses recent exchange rates to populate the prices in all
+supported currencies. You can change prices for apps and in-app products at any
+time, just by saving changes in the Develoer Console.</p>
+
+<h3>In-app Billing</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>In-app Billing</h2>
+<p>For details on how to implement In-app Billing, see the
+<a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</span></a>
+developer documentation.</p></div></div>
+
+<p><a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</a> is a Google Play service that lets you monetize your apps in more ways by selling in-app products and subscriptions. In-app products are one-time purchases, while  subscriptions are recurring charges on an monthly or annual basis.</p>
+
+<p>From the Developer Console you can create product lists for in-app
+products and subscriptions, set prices, and publish.</p>
+
+<div style="width:410px;float:right;margin:1.5em;">
+<div style="width:410px;border:1px solid #DDD;">
+<img src="{@docRoot}images/gp-dc-reviews.png" style="width:400px;padding:4px;margin-bottom:0em;">
+</div>
+<p class="image-caption" style="padding:.5em"><span style="font-weight:500;">User
+reviews page</span>: Gives you access to user reviews for a specific app.
+You can filter  reviews in a number of ways to locate issues more easily
+and support your customers more effectively.</p>
+</div>
+
+<h3>User reviews and error reports</h3>
+
+<p>Google Play makes it easy for users to submit reviews of your app for the
+benefit of other users. The reviews are also extremely important to you, since
+they give you usability feedback, support requests, and important functionality
+issues direct from your customers. </p>
+
+<p>The Developer console also lets you see error reports, with stack trace and
+other data, submitted automatically from Android devices, for debugging and
+improving your app.</p>
+
+<h3>App statistics</h3>
+
+<p>The Developer Console gives you detailed statistics on the install
+performance of your app. </p>
+
+<p>You can view installations of your app measured by unique users, as well as
+by unique devices. For user installations, you can view active installs, total
+installs, and daily installs and uninstalls. For devices, you can see active
+installs as well as daily installs, uninstalls, and upgrades.</p>
+
+<p>You can zoom into the installation numbers along several dimensions,
+including Android platform version, device, country, language, app version, and
+carrier (mobile operator). You can see the installation data for each dimension
+on a timeline charts.</p>
+
+<p>At a glance, these charts highlight your app’s installation peaks and
+longer-term trends, which you can correlate to promotions, app improvements, or
+other factors. You can even focus in on data inside a dimension by adding
+specific points (such as individual platform versions or languages) to the
+timeline.</p>
+
+<div style="width:610px;margin:1.5em;margin-left:0">
+<div style="width:610px;border:1px solid #DDD;">
+<img src="{@docRoot}images/gp-dc-stats.png" 
+style="width:600px;padding:4px;margin-bottom:0em;">
+</div>
+<p class="image-caption" style="padding:.5em"><span style="font-weight:500;">App
+installation statistics page</span>: Shows you a variety of statistics about a
+specific app's installation performance over time.</p>
+</div>
diff --git a/docs/html/distribute/googleplay/publish/index.jd b/docs/html/distribute/googleplay/publish/index.jd
new file mode 100644
index 0000000..5a5eaf2
--- /dev/null
+++ b/docs/html/distribute/googleplay/publish/index.jd
@@ -0,0 +1,23 @@
+page.title=Publishing on Google Play
+header.hide=1
+footer.hide=1
+page.metaDescription=Get started publishing apps on Google Play.
+
+@jd:body
+
+<div style="height:413px;padding-top:50px;">
+    <img src="{@docRoot}images/gp-devconsole-home.png" style="margin-top:0px;">
+</div>
+
+<div style="width:460px;padding-bottom:40px;margin-left:1.5em;"> 
+  <p>Upload apps, build your product pages, configure prices and
+  distribution, and publish. You can manage all phases of publishing
+  on Google Play through the Developer Console, from any web browser.</p>
+
+<p style="margin-top:1.5em;margin-bottom:1.5em;"><a href="{@docRoot}distribute/googleplay/publish/register.html" class="landing-page-link">Get started</a></p>
+</div>
+
+
+
+
+
diff --git a/docs/html/distribute/googleplay/publish/preparing.jd b/docs/html/distribute/googleplay/publish/preparing.jd
new file mode 100644
index 0000000..e50d3bf
--- /dev/null
+++ b/docs/html/distribute/googleplay/publish/preparing.jd
@@ -0,0 +1,570 @@
+page.title=Publishing Checklist for Google Play
+@jd:body
+
+<div id="qv-wrapper"><div id="qv">
+<h2>Checklist:</h2>
+<ol>
+<li><a href="#process">1. Understand the publishing process</a></li>
+<li><a href="#policies">2. Understand Google Play policies</a></li>
+<li><a href="#rating">3. Determine your content rating</a></li>
+<li><a href="#countries">4. Determine country distribution</a></li>
+<li><a href="#size">5. Confirm the app's overall size</a></li>
+<li><a href="#compatibility">6. Confirm app compatibility ranges</a></li>
+<li><a href="#free-priced">7. Decide on free or priced</a></li>
+<li><a href="#inapp-billing">8. Consider In-app Billing</a></li>
+<li><a href="#pricing">9. Set prices for your apps</a></li>
+<li><a href="#localize">10. Start localization</a></li>
+<li><a href="#localize">11. Prepare promotional graphics</a></li>
+<li><a href="#apk">12. Build the release-ready APK</a></li>
+<li><a href="#product-page">13. Complete the product details</a></li>
+<li><a href="#badges">14. Use Google Play badges and links to your promotional campaigns</a></li>
+<li><a href="#final-checks">15. Final checks and publishing</a></li>
+<li><a href="#support">16. Support users after launch</a></li>
+</ol>
+</div></div>
+
+
+<p>Before you publish your app on Google Play and distribute it to users, you
+need to get the app ready, test it, and prepare your promotional materials. </p>
+
+<p>This document helps you understand the publishing process and get ready for a
+successful product launch on Google Play. It summarizes some of the
+tasks you'll need to complete before publishing your app on Google Play, such as
+creating a signed, release-ready APK, understanding the requirements of the app,
+and creating the product page and graphic assets for your app.</p>
+
+<p>The preparation and publishing tasks are numbered to give you a rough idea of
+sequence. However, you can handle the tasks in any sequence that works for you
+or you can skip steps as appropriate.</p>
+
+<p>As you move toward publishing, a variety of support resources are available to
+you. Relevant links are provided in each step.</p>
+
+
+<h2 id="process">1. Understand the publishing process</h2>
+
+<p>Before you begin the steps in this checklist, you should take a moment to
+read and understand the overall publishing workflow and become familiar with how
+the process works. In particular, you or your development team will need to
+prepare your app for release using a process common to all Android apps.
+The <a
+href="{@docRoot}tools/publishing/publishing_overview.html">Publishing
+Workflow</a> documents provide the details on how publishing works and how to
+get an APK ready for release. </p>
+
+<p>Once you are familiar with publishing in general, read this document to
+understand the issues that you should consider when publishing an app on Google
+Play. </p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}tools/publishing/publishing_overview.html">General Publishing Overview</a></strong> &mdash; Start here for an overview of publishing options for Android apps.</li>
+<li><strong><a href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a></strong> &mdash; Developer documentation on how to build the signed, release-ready APK. This process is the same for all Android apps. </li>
+<li><strong><a href="{@docRoot}distribute/googleplay/publish/publishing.html">Publishing on Google Play</a></strong> &mdash; Publishing process specific to Android apps being published on Google Play.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="policies">2. Understand Google Play policies and agreements</h2>
+
+<p>Make sure that you understand and follow the Google Play program policies
+that you accepted when registering. Google Play actively enforces the policies
+and any violations can lead to suspension of your app or, for repeated
+violations, termination of your developer account. </p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/topic.py?hl=en&topic=2364761&parent=2365624&ctx=topic">Policy and Best Practices
+</a></strong> &mdash; Help Center document describing various content policies and processes.</li>
+
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="rating">3. Determine your app's content rating</h2>
+
+<p>Google Play requires you to set a content rating for your app, which informs
+Google Play users of its maturity level. Before you publish, you should confirm
+what rating level you want to use. The available content rating levels are:</p>
+
+<ul>
+<li>Everyone</li>
+<li>Low maturity</li>
+<li>Medium maturity</li>
+<li>High maturity</li>
+</ul>
+
+<p>On their Android devices, Android users can set the desired maturity level
+for browsing. Google Play then filters apps based on the setting, so the content
+rating you select can affect the app's distribution to users. You can assign (or
+change) the content rating for your app in the Developer Console, so no changes
+are required in your app binary.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=188189">Rating your application content for Google Play</a></strong> &mdash; Help Center document describing content ratings levels and how to choose the appropriate one for your app.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="countries">4. Determine country distribution</h2>
+
+<p>Google Play lets you control what countries and territories your app is
+distributed to. For widest reach and the largest potential customer base, you
+would normally want to distribute to all available countries and territories.
+However, because of business needs, app requirements, or launch dependencies,
+you might want to exclude one or more countries from your distribution. </p>
+
+<p>It's important to determine the exact country distribution early, because it
+can affect:</p>
+<ul>
+<li>The need for localized resources in the app</li>
+<li>The need for a localized app description in the Developer Console</li>
+<li>Legal requirements for the app that may be specific to certain
+countries</li>
+<li>Time zone support, local pricing, and so on.</li>
+</ul>
+
+<p>With your country targeting in mind, you should assess what
+your localization needs are, both in your app and in its Google Play listing
+details, and start the work of localization well in advance of your
+launch target date.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">Supported locations for distributing applications</a></strong> on Google Play.
+.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="size">5. Confirm the app's overall size</h2>
+
+<p>The overall size of your app can affect its design and how you publish it on
+Google Play. Currently, the maximum size for an APK published on Google Play is
+<strong>50 MB</strong>. If your app exceeds that size, or if you want to offer a
+secondary download, you can use <a
+href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a>,
+which Google Play will host for free on its server infrastructure and
+automatically handle the download to devices.</p>
+
+<ul>
+<li>The maximum size for an APK published on Google Play is 50 MB.</li>
+<li>You can use up to two (2) APK Expansion Files, each up to 2 GB in size, for
+each APK.</li>
+</ul>
+
+<p>Using APK Expansion files is a convenient, cost-effective method of
+distributing large apps. However, the use of APK Expansion Files requires some
+changes in your app binary, so you will need to make those changes before
+creating your release-ready APK.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a></strong> &mdash; Developer documentation describing APK Expansion Files and how to support them in your app.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="compatibility">6. Confirm the app's platform and screen compatibility ranges</h2>
+
+<p>Before publishing, it's important to make sure that your app is designed to
+run properly on the Android platform versions and device screen sizes that you
+want to target. 
+
+<p>From an app-compatibility perspective, Android platform versions are defined
+by <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level</a>. You should
+confirm the minimum version that your app is compatible with (<a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;minSdkVersion&gt;</code></a>),
+as that will affect its distribution to Android
+devices once it is published. </p>
+
+<p>For screen sizes, you should confirm that the app runs properly and looks
+good on the range of screen sizes and densities that you want to support. You
+should confirm the minimum screen-size and density support that your app
+declares (<a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html"><code>&lt;supports-screens&gt;</code></a>),
+since that can affect its distribution to
+Android devices once it is published. </p>
+
+<p>To get a better understanding of the current device penetration of Android
+platform versions and screen sizes across all Android devices, see the <a
+href="{@docRoot}guide/topics/resources/localization.html">Device Dashboard</a>
+charts.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/resources/localization.html">Device Dashboard</a></strong> &mdash; A chart showing global percentages of devices by Android version, screen size, and level of OpenGL ES support.</li>
+<li><strong><a href="{@docRoot}guide/topics/resources/localization.html">Android API Levels</a></strong> &mdash; A definition of API Levels and a list of which Android platform versions they are associated with. </li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="free-priced">7. Decide whether your app will be free or priced</h2>
+
+<p>On Google Play, you can publish apps as free to download or priced. Free apps
+can be downloaded by any Android user in Google Play.
+Paid apps can be downloaded only by users who have registered a form of payment
+in Google Play, such as a credit card or Direct Carrier Billing.</p>
+
+<p>Deciding whether you app will be free or paid is important because, on Google
+Play, <strong>free apps must remain free</strong>.</p>
+
+<ul>
+<li>Once you publish your app as a free app, you cannot ever change it to being
+a priced app. However, you can still sell in-app products and
+subscriptions through Google Play's In-app Billing service.</li>
+<li>If you publish your app as a priced app, you <em>can</em> change
+it at any time to being a free app (but cannot then change it back to
+priced). You can also sell in-app products and subscriptions. </li>
+</ul>
+
+<p> If your app is be priced, or if you'll be selling in-app products,
+you need set up a Checkout Merchant Account before you can publish.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</a></strong> &mdash; Developer introduction to Google Play In-app Billing.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="inapp-billing">8. Consider using In-app Billing</h2>
+
+<p>Google Play <a href="{@docRoot}guide/google/play/billing/index.html">In-app
+Billing</a> lets you sell digital content in your applications. You can use the
+service to sell a wide range of content, including downloadable content such as
+media files or photos, and virtual content such as game levels or potions.
+In-app Billing service lets you sell one-time purchases and subscriptions from
+inside your app. This can help you to monetize the app over its installed
+lifetime. </p>
+
+<p>If your are looking for more ways to monetize your app and build engagement,
+you should consider In-app Billing. The service has become very popular with
+both users and developers. To use In-app Billing, you need to make changes to
+your app binary, so you will need to complete and test your implementation
+before creating your release-ready APK.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing</a></strong> &mdash; Developer documentation describing In-app Billing and how to support it in your app.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="pricing">9. Set prices for your products</h2>
+
+<p>If your app is priced or you will sell in-app products, Google Play lets you
+set prices for your products in a variety of currencies, for users in markets
+around the world. You can set prices individually in different currencies, so
+you have the flexibility to adjust your price according to market conditions and
+exchange rates. </p>
+
+<p>Before you publish, consider how you will price your products
+and what your prices will be in various currencies. Later, you can set prices
+in all available currencies through the Developer Console.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1169947&topic=15867&ctx=topic">Selling Apps in Multiple Currencies
+</a></strong> &mdash; Help Center document describing how pricing works in Google Play.</li>
+
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138412&topic=15867&ctx=topic">Prices and supported currencies
+</a></strong> &mdash; Help Center document listing supported currencies for pricing your apps.</li>
+
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=112622&topic=15867&ctx=topic">Transaction Fees
+</a></strong> &mdash; Help Center document describing transaction fees for priced apps and in-app products.</li>
+
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138000&topic=15867&ctx=topic">Specifying tax rates
+</a></strong> &mdash; Help Center document describing how to set tax rates for different countries. </li>
+
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="localize">10. Start localization</h2>
+
+<p>With your country targeting in mind, it's a good idea to assess your localization
+needs and start the work of localizing well in advance of your target
+launch date.</p>
+
+<p>There are at least two aspects of localization to consider:</p>
+
+<ul>
+<li>Localizing the strings, images, and other resources in your app</li>
+<li>Localizing you app's store listing details on Google Play</li>
+</ul>
+
+<p>To get started localizing your app, work with your development team to extract
+any resource or coded strings for translation. Also identify images, icons, or
+other assets that should be language- or locale-specific. Hand these off to  
+a translator.</p>
+
+<p>To localize your store listing, first create and finalize your app title, description, 
+and promotional text. Collect and send all of these for localization. You can optionally
+translate the "Recent Changes" text for app updates as well.</p>
+
+<p>When your translations are complete, move them into your app resources as needed and test
+that they are loaded properly. Save your app's translated listing details for later,
+when you upload assets and configure your product details.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}guide/topics/resources/localization.html">Localization</a></strong> &mdash; How to supply localized resources in your app.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="graphics">11. Prepare promotional graphics</h2>
+
+<p>When you publish on Google Play, you can supply a variety of high-quality
+graphic assets to showcase your app or brand. After you publish, these appear on
+your product details page, in store listings and search results, and elsewhere.
+These graphic assets are key parts of a successful product details page that
+attracts and engages users, so you should consider having a professional produce
+them for you. Screen shots and videos are also very important, because they show
+what your app looks like, how it's used or played, and what makes it different.
+
+<p>All of your graphic assets should be designed so that they are easy to see
+and highlight your app or brand in a colorful, interesting way. The assets
+should reference the same logo and icon as users will actually find in the All
+Apps launcher once they have downloaded the app. Your graphic assets should also
+fit in well with the graphic assets of other apps published by you, which will
+be also be displayed to users on your product details page. </p>
+
+<p>Because these assets are so important, you should get started on them well in
+advance of your target publishing date. </p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1078870">Graphic Assets for your Application
+</a></strong> &mdash; Details about the graphic assets you need to upload before publishing.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="apk">12. Build and upload the release-ready APK</h2>
+
+<p>When you are satisfied that your app meets your UI, compatibility, and
+quality requirements, you can build the release-ready version of the app. The
+release-ready APK is what you you will upload to the Developer Console and
+distribute to users. 
+
+<p>The process for preparing a release-ready APK is the same for all apps,
+regardless of how they are distributed. Generally the process includes basic code cleanup
+and optimization, building and signing with your release key, and final testing.
+When you are finished preparing your application for release, you'll have a signed
+APK file that you can upload to the Developer Console for distribution to
+users. </p>
+
+<p>For complete details on how to create a release-ready version of your app,
+read <a href="{@docRoot}tools/publishing/preparing.html">Preparing for
+Release</a>.</p>
+
+<p>Once you have the release-ready APK in hand, you can upload it to 
+the Developer Console. If necessary, you can replace the APK with a more 
+recent version before publishing. </p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a></strong> &mdash; Essential information for preparing and packaging your app properly for distribution.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="product-page">13. Complete the app's product details</h2>
+
+<p>On Google Play, your app's product information is shown to users on its
+product details page, the page that users visit to learn more about your app and
+the page from which they will decide to purchase or download your app, on their
+Android devices or on the web.</p>
+
+<p>Google Play gives you a variety of ways to promote your app and engage with
+users on your product details page, from colorful graphics, screenshots, and
+videos to localized descriptions, release details, and links to your other apps.
+As you prepare to publish your app, make sure that you take advantage of all
+that your product details page can offer, making your app as compelling as
+possible to users.</p>
+
+<p>You should begin planning your product page in advance of your target launch
+date, arranging for localized description, high-quality graphic assets,
+screenshots and video, and so on. </p>
+
+<p>As you get near your target publishing date, you should become familiar with 
+all the fields, options, and assets associated with the product details configuration
+page in the Developer Console. As you collect the information and assets for the
+page, make sure that you can enter or upload it to the Developer Console, until 
+the page is complete and ready for publishing. </p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}distribute/googleplay/promote/product-pages.html">Your Product Page</a></strong> &mdash; Tips and details on creating your product details page.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113475&topic=2365760&ctx=topic">Category types
+</a></strong> &mdash; Help Center document listing available categories for apps.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1078870&topic=2365760&ctx=topic">Graphic Assets for your Application
+</a></strong> &mdash; Help Center document describing the various graphics you can add to your product listing.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="badges">14. Use Google Play badges and links in your promotional
+campaigns</h2>
+
+<p>Google Play badges give you an officially branded way of promoting your app
+to Android users. Use the <a
+href="{@docRoot}distribute/googleplay/promote/badges.html">Google Play Badge
+generator</a> to quickly create badges to link users to your products from web
+pages, ads, reviews, and more. You can also use special <a
+href="{@docRoot}distribute/googleplay/promote/linking.html">link formats</a>
+to link directly to your product details page, to a list of your products, or to
+search results.</p>
+
+<p>To help your app get traction after launch, it's strongly recommended that you support 
+launch with a promotional campaign that announces your product through many channels as
+possible, in as many countries as possible. For example, you can promote the launch 
+using ad placements, social network or blog posts, video and other media, interviews
+and reviews, or any other channel available.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="{@docRoot}distribute/googleplay/promote/badges.html">Google Play Badges</a></strong> &mdash; Generate a badge to bring users to your app in Google Play.</li>
+<li><strong><a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a></strong> &mdash; Link formats that you can use to bring users to your app in Google Play.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+<h2 id="final-checks">15. Final checks and publishing</h2> 
+
+<p>When you think you are ready to publish, sign in to the Developer Console and take a few moments for a few
+final checks:</p>
+
+<p>Make sure that: </p>
+
+<ul>
+<li>Your developer profile has the correct information and is linked to the proper Google Checkout Merchant account (if you are selling products).</li>
+<li>You have the right version of the app uploaded.</li>
+<li>All parts of your Product Details are ready, including all graphic assets, screenshots, video, localized descriptions, and so on. </li>
+<li>You have set your app's pricing to free or priced.</li>
+<li>You have set country (and carrier) targeting and priced your products (if appropriate) in buyer currencies</li>
+<li>"Compatible devices" shows that your app is actually reaching the devices that you are targeting. If not, you should check with your development team on the apps requirements and filtering rules. </li>
+<li>You have provided the correct link to your web site and the correct support email address.</li>
+<li>Your app does not violate content policy guidelines.</li>
+<li>You have acknowledged that your app meets the guidelines for Android content on Google Play and also US export laws. </li>
+</ul>
+
+<p>Your app is now ready to publish!</p>
+
+<p>If you are releasing an update, make sure to read the <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113476&topic=2365760&ctx=topic">requirements for publishing updates</a>. </p>
+
+<p>When you are ready, click the <strong>Publish</strong> button in the Developer Console. Within a few hours, your app will become available to users and your product page will be appear in Google Play for browsing, searching, or linking from your promotional campaigns.</p>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://www.android.com/us/developer-content-policy.html">Google Play Developer Program Policies</a></strong> &mdash; Guidelines for what is acceptable conent in Google Play. Please read and understand the policies before publishing. </li>
+<li><strong><a href="{@docRoot}distribute/googleplay/promote/linking.html">Updates</a></strong> &mdash; Requirements for app updates in Google Play.</li>
+<li><strong><a href="{@docRoot}support.html">Developer Support</a></strong> &mdash; Support resources that you can use to find answers and report issues.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+<h2 id="support">16. Support users after launch</h2>
+
+<p>After you publish an app or an app update, it's crucial for you to support
+your customers. Prompt and courteous support can provide a better experience for
+users that results in better ratings and more positive reviews for your
+products. Users are likely to be more engaged with your app and recommend it if
+you are responsive to their needs and feedback.  This is especially true after
+publishing if you are using a coordinated promotional campaign.</p>
+
+<p>There are a number of ways that you can keep in touch with users and offer
+them support. The most fundamental is to provide your <em>support email
+address</em> on your product details page. Beyond that, you can provide support
+in any way you choose, such as a forum, mailing list or a Google+ page.  The
+Google Play team does provide user support for downloading, installing and
+payments issues, but issues that fall outside of these topics will fall under
+your domain.  Examples of issues you can support include:  feature requests,
+questions about using the app and questions about compatibility settings.  </p>
+
+<p>After publishing, plan to: </p>
+<ul>
+<li>Check your ratings and reviews frequently on your app's product details
+page. Watch for recurring issues that could signal bugs or other issues. </li>
+<li>Be mindful of new Android platform version launches, as compatibility
+settings for your apps might need to be updated.</li>
+<li>Put a link to your support resources on your web site and set up any other
+support such as forums.</li>
+<li>Provide an appropriate support email address on your product details page
+and respond to users when they take the time to email you.</li>
+<li>Beyond the automatic refund window offered by Google Play, be generous with
+your own refund policy, as satisfied users will be more likely to purchase in
+the future. </li>
+<li>Acknowledge and fix issues in your app. It helps to be transparent and
+list known issues on your product details page proactively.  </li>
+<li>Publish updates as frequently as you are able, without sacrificing quality
+or annoying users with too-frequent updates. </li>
+<li>With each update, make sure to provide a summary of what's changed. You can
+enter this information in the Developer Console. Users will read it and
+appreciate that you are serious about improving the quality of your app. </li>
+</ul>
+
+<table>
+<tr>
+<td><p>Related resources:</p>
+<ul style="margin-top:-.5em;">
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113477&topic=2364761&ctx=topic">Supporting your users
+</a></strong> &mdash; Help Center document describing options for supporting users.</li>
+<li><strong><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153479">In-app Billing</a></strong> &mdash; Help Center document describing how to correctly set up In-app Billing.</li>
+<li><strong><a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138001">Issuing Refunds</a></strong> &mdash;  -- Help Center document describing how to issue refunds.</li>
+</ul>
+</td>
+</tr>
+</table>
+
+
+
diff --git a/docs/html/distribute/googleplay/publish/register.jd b/docs/html/distribute/googleplay/publish/register.jd
new file mode 100644
index 0000000..7ca6696
--- /dev/null
+++ b/docs/html/distribute/googleplay/publish/register.jd
@@ -0,0 +1,72 @@
+page.title=Get Started with Publishing
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Help topics</h2>
+<ul>
+  <li><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=113468">Developer Registration</a></li>
+  <li><a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294&topic=2365624&ctx=topic">Supported Locations for Distributing Apps</a></li>
+  <li><a href="http://support.google.com/googleplay/android-developer/bin/topic.py?hl=en&topic=2364761">Policy and Best Practices</a></li>
+  <li><a href="http://support.google.com/googleplay/android-developer/">Developer Support</a></li>
+</ul>
+
+<h2>Get Started</h2>
+<ol>
+  <li><a href="https://play.google.com/apps/publish/">Google Play Android Developer Console</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>You can set up to start publishing on Google Play in only a few minutes. Here's how you do it: </p>
+
+<ul>
+<li>Register for a Google Play publisher account</li>
+<li>If you will sell apps, set up a Google Checkout Merchant Account</li>
+<li>Explore the Google Play Android Developer Console and learn about the tools for publishing</li>
+</ul>
+
+
+<h3>Register for a publisher account</h3>
+
+<p>The first step is to visit the Google Play Android Developer Console and register for a publisher account.</p>
+
+<p>Here's what you will do during registration: </p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Tips</h2>
+  <ul>
+    <li>You need a Google account to register. You can create one during the process. </li>
+    <li>If you are an organization, consider registering a new Google account rather than using a personal account.</li>
+    <li>Review the <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=138294">developer countries</a> and <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=150324">merchant countries</a> where you can distribute and sell apps.</li> 
+  </ul>
+</div></div>
+
+
+<ol>
+<li>Visit the Google Play Android Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>.
+<li>Enter basic information about your <strong>developer identity</strong> &mdash; developer name, email address, and so on. You can modify this information later.</li>
+<li>Read and accept the <strong>Developer Distribution Agreement</strong> that applies to your country or region. Note that apps and store listings that you publish on Google Play must comply with the Developer Program Policies and US export law,</li>
+<li>Pay a <strong>$25 USD registration fee</strong> using Google Checkout. If you don't have a Google Checkout account, you can quickly set one up during the process.</li>
+</ol>
+
+<p>When your registration is verified, you’ll be notified at the email address you specified during registration. </p>
+
+<h3>Set up a Google Checkout Merchant account</h3>
+ 
+<p>If you want to sell products on Google Play &mdash; priced apps, in-app products, or subscriptions &mdash; you will also need to set up a Google Checkout <a href="http://checkout.google.com/sell">Merchant Account</a>. You can do that at any time, but make sure to first review the list of <a href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=150324">merchant countries</a>.</p>
+
+<p>To set up a Merchant account from the Developer Console:</p>
+
+<ol>
+<li><strong>Sign in</strong> to your Google Play Android Developer Console at <a href="https://play.google.com/apps/publish/">https://play.google.com/apps/publish/</a>
+<li>Click on the "<strong>Edit profile</strong>" link.
+<li>Select "<strong>Setup a Merchant Account at Google Checkout</strong>".</li>
+</ol>
+
+<p>This will take you to the Google Checkout site to sign up as a Merchant; you'll need to have information about your business handy to complete this step.</p>
+
+<h3>Explore the Developer Console</h3>
+<p>When your registration is verified, you can sign in to your Android Developer Console, which will be the home for your app publishing operations and tools on Google Play. </p>
diff --git a/docs/html/distribute/googleplay/strategies/app-quality.jd b/docs/html/distribute/googleplay/strategies/app-quality.jd
new file mode 100644
index 0000000..26d71d7
--- /dev/null
+++ b/docs/html/distribute/googleplay/strategies/app-quality.jd
@@ -0,0 +1,116 @@
+page.title=Improving App Quality
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Strategies:</h2>
+<ul>
+<li><a href="#listen">Listen to Your Users</a></li>
+<li><a href="#stability">Improve Stability and Eliminate Bugs</a></li>
+<li><a href="#responsiveness">Improve UI Responsiveness</a></li>
+<li><a href="#usability">Improve Usability</a></li>
+<li><a href="#appearance">Professional Appearance and Aesthetics</a></li>
+<li><a href="#features">Deliver the Right Set of Features</a></li>
+<li><a href="#integrate">Integrate with the System and Third-Party Apps</a></li>
+<li><a href="#details">Pay Attention to Details</a></li>
+</ul>
+</div>
+</div>
+
+<p>
+With thousands of new apps being published in Google Play every week, it's important to look for any available way to get the most visibility and the highest ratings possible.  One way of improving your app's visibility in the ecosystem is by deploying well-targeted mobile advertising campaigns and cross-app promotions. Another time-tested method of fueling the impression-install-ranking cycle is simply: <em>improve the product</em>!</p>
+<p>
+A better app can go a very long way: a higher quality app will translate to higher user ratings, generally better rankings, more downloads, and higher retention (longer install periods). High-quality apps also have a much higher likelihood of getting some unanticipated positive publicity such as being featured in Google Play or getting social media buzz.</p>
+<p>
+The upside to having a higher-quality app is obvious. However, it's not always clear how to make an app "better". The path to improving app quality isn't always well-lit. The term "quality" &mdash; along with "polish" and "fit and finish" &mdash; aren't always well-defined. Here we'll light the path by looking at some of the key factors in app quality and ways of improving your app along these dimensions.</p>
+
+<h2 id="listen">Listen to Your Users</h2>
+<p>
+Most ways of measuring the "success" of an app are dependent on user behavior. User-related metrics such as number of downloads, daily active installs, retention rates, and so on highlight the importance of users. If you aren't doing so already, it's a good idea to start thinking of your app's quality as it relates to your users.</p>
+<p>
+The most obvious way to listen to users is by reading and addressing comments on your app in Google Play. Although the comments aren't always productive or constructive, some will provide valuable insight on aspects of your app that you may not have consciously considered before. It's important to remember that users have the opportunity to change their ratings and comments about an app as much as they'd like.</p>
+<p>
+One way to reach users and help them address their concerns is to set up your own support and discussion destination(s). There are some great support tools out there that can put you in touch with your users directly such as <a href="http://groups.google.com">Google Groups</a>, <a href="http://discussions.zoho.com/">Zoho Discussions</a>, <a href="http://getsatisfaction.com">getsatisfaction.com</a> and <a href="http://uservoice.com">uservoice.com</a>. Once you get set up with such a tool, make sure to fill in the support link in your Google Play product details page &mdash; users do click through to these.</p>
+<p>
+Another way to better listen to your users is by having a public beta or trusted tester program. It's crucial to have some amount of real user testing before releasing something in Google Play. Fortunately, you can distribute your apps to users outside of Google Play via a website; this website can require a login or be publicly accessible&nbsp;&mdash;&nbsp;it's entirely up to you. Take advantage of this opportunity by offering your next planned update to some early adopters, before submitting to Google Play. You'll be surprised by how many little, yet impactful, improvements can come out of crowd-sourced, real-user testing.</p>
+
+
+<h2 id="stability">Improve Stability and Eliminate Bugs</h2>
+
+<p>
+The effect of overall app stability of ratings and user satisfaction is very well-known and there are many tools and techniques for testing and profiling your app on different devices and user scenarios.</p>
+<p>
+One noteworthy and yet relatively underused tool for catching stability issues such as crashes is the <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> (Monkey). Monkey will send random UI events to your app's activities, allowing you to trigger user flows that can uncover stability problems.</p>
+<p>
+Also, with the Google error-reporting features built into most Android devices, users now have a way to report application crashes to developers. The error reports show up in aggregate in the Google Play Developer Console. Make sure to read these reports often and act on them appropriately.</p>
+<p>
+Last, keep an external bug and feature request tracker and let users know how to find it. This will enable them to engage with the app at a closer level, by following features and bugs that affect them. User frustration with app problems can be effectively managed with diligent issue tracking and communication. Some of the community support tools listed above offer issue tracking features, and if your project is open source, most popular repository hosting sites such as <a href="http://code.google.com/hosting">Google Code</a> and <a href="https://github.com/">GitHub</a> will offer this as well.</p>
+
+<h2 id="responsiveness">Improve UI Responsiveness</h2>
+<p>
+One sure-fire way to lose your users is to give them a slow, unresponsive UI. Research has shown that <a href="http://googleresearch.blogspot.com/2009/06/speed-matters.html">speed matters</a>... for any interface, be it desktop, web, or mobile. In fact, the importance of speed is amplified on mobile devices since users often need their information on the go and in a hurry.</p>
+<p>
+You can improve your apps's UI responsiveness by moving long-running operations off the main thread to worker threads. Android offers built-in debugging facilities such as StrictMode for analyzing your app's performance and activities on the main thread. You can see more recommendations in <a href="http://www.youtube.com/watch?v=c4znvD-7VDA">Writing Zippy Android Apps</a>, a developer session from Google I/O 2010,</p>
+
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>More resources</h2>
+<ul>
+<li><a href="{@docRoot}design/index.html">Android Design</a></li>
+<li><a href="{@docRoot}guide/practices/performance.html">Designing for Performance</a></li>
+<li><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a>
+<li><a href="{@docRoot}guide/practices/seamlessness.html">Designing for seamlessness</a>
+</li>
+</ul>
+</div></div>
+<p>
+A great way to improve UI performance is to minimize the complexity of your layouts. If you open up <a href="{@docRoot}tools/help/hierarchy-viewer.html">hierarchyviewer</a> and see that your layouts are more than 5 levels deep, it may be time to simplify your layout. Consider refactoring those deeply nested LinearLayouts into RelativeLayout. The impact of View objects is cumulative &mdash; each one costs about 1 to 2 KB of memory, so large view hierarchies can be a recipe for disaster, causing frequent VM garbage collection passes which block the main (UI) thread. You can learn more in <a href="http://www.youtube.com/watch?v=wDBM6wVEO70">World of ListView</a>, another session at Google I/O.</p>
+<p>
+Lastly, pointed out in the blog post <a href="http://android-developers.blogspot.com/2010/10/traceview-war-story.html">Traceview War Story</a>, tools like <a href="{@docRoot}tools/traceview.html">traceview</code> and <a href="{@docRoot}tools/ddms.html">ddms</a> can be your best friends in improving your app by profiling method calls and monitoring VM memory allocations, respectively.</p>
+
+
+<h2 id="usability">Improve Usability</h2>
+<p>
+In usability and in app design too, you should listen carefully to your users. Ask a handful of real Android device users (friends, family, etc.) to try out your app and observe them as they interact with it. Look for cases where they get confused, are unsure of how to proceed, or are surprised by certain behaviors. Minimize these cases by rethinking some of the interactions in your app, perhaps working in some of the <a href="http://www.youtube.com/watch?v=M1ZBjlCRfz0">user interface patterns</a> the Android UI team discussed at Google I/O.</p>
+<p>
+In the same vein, two problems that can plague some Android user interfaces are small tap targets and excessively small font sizes. These are generally easy to fix and can make a big impact on usability and user satisfaction. As a general rule, optimize for ease of use and legibility, while minimizing, or at least carefully balancing, information density.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>More resources</h2>
+<ul>
+As you are designing or evaluating your app's UI, make sure to read and become familiar with the <a href="{@docRoot}design/index.html">Android Design</a> guidelines. Included are many examples of UI patterns, styles, and building blocks, as well as tools for the design process.</li>
+</ul>
+</div></div>
+
+<p>
+Another way to incrementally improve usability, based on real-world data, is to implement <a href="http://code.google.com/mobile/analytics/docs/">Analytics</a> throughout your app to log usage of particular sections. Consider demoting infrequently used sections to the overflow menu in the <a href="{@docRoot}design/patterns/actionbar.html">Action bar</a>, or removing them altogether. For often-used sections and UI elements, make sure they're immediately obvious and easily accessible in your app's UI so that users can get to them quickly.</p>
+<p>
+Lastly, usability is an extensive and well-documented subject, with close ties to interface design, cognitive science, and other disciplines.</p>
+
+<h2 id="appearance">Professional Appearance and Aesthetics</h2>
+<p>
+There's no substitute for a real user interface designer&nbsp;&mdash;&nbsp;ideally one who's well-versed in mobile and Android, and ideally handy with both interaction and visual design. One popular venue to post openings for designers is <a href="http://jobs.smashingmagazine.com">jobs.smashingmagazine.com</a>, and leveraging social connections on Twitter and LinkedIn can surface great talent.</p>
+<p>
+If you don't have the luxury of working with a UI designer, there are some ways in which you can improve your app's appearance yourself. First, get familiar with Adobe Photoshop, Adobe Fireworks, or some other raster image editing tool. Mastering the art of the pixel in these apps takes time, but honing this skill can help build polish across your interface designs. Also, master the resources framework by studying <a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=tree;f=core/res/res;h=a3562fe1af94134486a8a899f02a9c2f7986c8dd;hb=master">the framework UI</a> assets and layouts and reading through the new <a href="{@docRoot}guide/components/resources/available-resources.html">resources documentation</a>. Techniques such as 9-patches and resource directory qualifiers are somewhat unique to Android, and are crucial in building flexible yet aesthetic UIs.</p>
+<p>
+Before you get too far in designing your app and writing the code, make sure to visit the Android Design site and learn about the vision, the building blocks, and the tools of designing beautiful and inspiring user interfaces.</p>
+
+<h2 id="features">Deliver the Right Set of Features</h2>
+<p>
+Having the <em>right</em> set of features in your app is important. It's often easy to fall into the trap of feature-creep, building as much functionality into your app as possible. Providing instant gratification by immediately showing the most important or relevant information is crucial on mobile devices. Providing too much information can be as frustrating (or even more so) than not providing enough of it.</p>
+<p>
+Again, listen to your users by collecting and responding to feature requests. Be careful, though, to take feature requests with a grain of salt. Requests can be very useful in aggregate, to get a sense of what kinds of functionality you should be working on, but not every feature request needs to be implemented.</p>
+
+<h2 id="integrate">Integrate with the System and Third-Party apps</h2>
+<p>
+A great way to deliver a delightful user experience is to integrate tightly with the operating system. Features like <a href="{@docRoot}guide/topics/appwidgets/index.html">Home screen widgets</a>, <a href={@docRoot}design/patterns/notifications.html">rich notifications</a>, <a href="{@docRoot}guide/topics/search/index.html">global search integration</a>, and {@link android.widget.QuickContactBadge Quick Contacts} are fairly low-hanging fruit in this regard. </p>
+
+<p>For some app categories, basic features like home screen widgets are par for the course. Not including them is a sure-fire way to tarnish an otherwise positive user experience. Some apps can achieve even tighter OS integration with Android's contacts, accounts, and sync APIs. </p>
+<p>
+Third-party integrations can provide even more user delight and give the user a feeling of device cohesiveness. It's also a really nice way of adding functionality to your app without writing any extra code (by leveraging other apps' functionalities). For example, if you're creating a camera app, you can allow users to edit their photos in <a href=" http://mobile.photoshop.com/android/">Photoshop Express</a> before saving them to their collection, if they have that third-party application installed. More information on this subject is available in the class, <a href="{@docRoot}training/basics/intents/index.html">Interacting with Other Apps</a>.</p>
+
+<h2 id="details">Pay Attention to Details</h2>
+<p>
+One particular detail to pay close attention to is your app's icon quality and consistency. Make sure your app icons (especially your launcher icon) are crisp and pixel-perfect at all resolutions, and follow the <a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">icon guidelines</a> as much as possible. If you're having trouble or don't have the resources to design the icons yourself, consider using the new <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android Asset Studio</a> tool to generate a set.</p>
diff --git a/docs/html/distribute/googleplay/strategies/featuring.jd b/docs/html/distribute/googleplay/strategies/featuring.jd
new file mode 100644
index 0000000..4c4e67e
--- /dev/null
+++ b/docs/html/distribute/googleplay/strategies/featuring.jd
@@ -0,0 +1,4 @@
+page.title=Preparing for Featuring
+@jd:body
+
+<p>Placeholder...</p>
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/strategies/index.jd b/docs/html/distribute/googleplay/strategies/index.jd
new file mode 100644
index 0000000..3794bbf
--- /dev/null
+++ b/docs/html/distribute/googleplay/strategies/index.jd
@@ -0,0 +1,33 @@
+page.title=Success Strategies
+page.metaDescription=
+header.hide=1
+footer.hide=1
+
+@jd:body
+
+
+
+<style>
+#landing-graphic-container {
+  position: relative;
+}
+
+#text-overlay {
+  position: absolute;
+  left: 0;
+  top: 472px;
+  width: 280px;
+}
+</style>
+
+<div id="landing-graphic-container">
+  <div id="text-overlay">
+   Strategies for building ratings, improving reviews, monetizing, and more.  
+    <br><br>
+    <a href="/distribute/googleplay/promote/product-pages.html" class="landing-page-link">Preparing for Featuring</a>
+  </div>
+
+  <a href="{@docRoot}distribute/googleplay/promote/index.html">
+    <img src="{@docRoot}design/media/index_landing_page.png">
+  </a>
+</div>
\ No newline at end of file
diff --git a/docs/html/distribute/index.jd b/docs/html/distribute/index.jd
new file mode 100644
index 0000000..ffdeb2f
--- /dev/null
+++ b/docs/html/distribute/index.jd
@@ -0,0 +1,39 @@
+page.title=Distribute Apps
+header.hide=1
+
+@jd:body
+
+    
+    
+    <div class="marquee">
+    
+    <div continer>
+    
+  <div class="madin-img" style="position:absolute;margin-left:42px;margin-top:76px;">
+    <img src="/images/home/google-play.png">
+  </div>
+  <div class="copy" style="position:relative;left:480px;width:360;">
+    <h1>Introducing Google Play</h1>
+    <p>The most visited store in the world for Android apps.  Cloud-connected and always synced, it's never been easier for users to find and download your apps.</p>
+    
+    <p><a class="landing-page-link" href="http://youtu.be/g5SzWc8-X0M">Watch a video</a></p>
+  </div>    </div>
+</div>
+<div class="distribute-features col-13" style="clear:both;margin-top:246px;">
+  <ul>
+    <li><h5>Growth Engine</h5>
+    A billion downloads a month and growing. Get your apps in front of millions of users at Google's scale.<br />
+    <a href="{@docRoot}distribute/googleplay/about/visibility.html">Read More ›</a>
+    <li><h5>Build Your Business</h5> Sell your app in over 130 countries.  Flexible monetization options with in-app purchase, subscriptions, and more. <br />
+    <a href="{@docRoot}distribute/googleplay/about/monetizing.html">Read More ›</a></li>
+    <li class="last"><h5>Distribution Control</h5> Deliver your apps to the users you want, on the devices you want, on <em>your</em> schedule. <br />
+    <a href="{@docRoot}distribute/googleplay/about/distribution.html">Read More ›</a></li>
+  </ul>
+</div>
+
+
+
+    
+
+
+
diff --git a/docs/html/distribute/open.jd b/docs/html/distribute/open.jd
new file mode 100644
index 0000000..edcfc9c
--- /dev/null
+++ b/docs/html/distribute/open.jd
@@ -0,0 +1,107 @@
+page.title=Open Distribution
+@jd:body
+
+<p>As an open platform, Android offers choice. You
+distribute your Android apps to users in any way you want, using any
+distribution approach or combination of approaches that meets your needs. 
+From publishing in an app marketplace to serving your apps from a web site or
+emailing them directly users, you are never locked into any
+particular distribution platform.</p>
+
+<p>The process for building and packaging your app for distribution is the same,
+regardless of how you will distribute your app. This saves you time and lets you
+automate parts of the process as needed. You can read <a 
+href="{@docRoot}tools/publishing/preparing.html">Preparing 
+for Release</a> for more information.</p>
+
+<p>The sections below highlight some of the alternatives for distributing
+your apps to users.</p>
+
+<h2 id="publishing-marketplace">Distributing through an App Marketplace</h2>
+
+<p>Usually, to reach the broadest possible audience, you would distribute your
+apps through a marketplace, such as Google Play.</p>
+
+<p>Google Play is the premier marketplace for Android apps and is particularly
+useful if you want to distribute your applications to a large global audience.
+However, you can distribute your apps through any app marketplace you want or
+you can use multiple marketplaces.</p>
+
+<h2 id="publishing-email">Distributing your application through email</h2>
+
+<div class="figure" style="width:246px">
+  <img src="{@docRoot}images/publishing/publishing_via_email.png"
+       alt="Screenshot showing the graphical user interface users see when you send them an app"
+       style="width:240px;" />
+  <p class="img-caption">
+    <strong>Figure 1.</strong> Users can simply click <strong>Install</strong> when you send them
+    an application via email.
+  </p>
+</div>
+
+<p>The easiest and quickest way to release your application is to send it to users through
+email. To do this, you prepare your application for release and then attach it to an email
+and send it to a user. When users open your email message on their Android-powered device,
+the Android system will recognize the APK and display an <strong>Install Now</strong>
+button in the email message (see figure 1). Users can install your application by touching the
+button.</p>
+
+<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button
+shown in Figure 1 appears only if users have configured their device to allow
+installation from <a href="#unknown-sources">unknown sources</a> and have opened your 
+email with the native Gmail application.</p>
+
+<p>Distributing applications through email is convenient if you are sending your application to
+only a few trusted users, but it provides few protections from piracy and unauthorized
+distribution; that is, anyone you send your application to can simply forward it to someone else.</p>
+
+<h2 id="publishing-website">Distributing through a web site</h2>
+
+<p>If you do not want to release your app on a marketplace like Google Play, you
+can make the app available for download on your own website or server, including
+on a private or enterprise server. To do this, you must first prepare your
+application for release in the normal way. Then all you need to do is host the
+release-ready APK file on your website and provide a download link to users.
+</p>
+
+<p>When users browse to the download link from their Android-powered devices,
+the file is downloaded and Android system automatically starts installing it on
+the device. However, the installation process will start automatically only if
+users have configured their Settings to allow the installation of apps from
+<a href="#unknown-sources">unknown sources</a>.</p>
+
+<p>Although it is relatively easy to release your application on your own
+website, it can be inefficient. For example, if you want to monetize your
+application you will have to process and track all financial transactions
+yourself and you will not be able to use Google Play's <a
+href="{@docRoot}guide/google/play/billing/index.html">In-app Billing service</a>
+to sell in-app products. In addition, you will not be able to use the <a
+href="{@docRoot}guide/google/play/licensing/index.html">Licensing service</a> to
+help prevent unauthorized installation and use of your application.</p>
+
+
+<h2 id="unknown-sources">User Opt-In for Apps from Unknown Sources</h2>
+
+<div class="figure" style="width:246px;margin-top:0;">
+  <img src="{@docRoot}images/publishing/publishing_unknown_sources_sm.png"
+       alt="Screenshot showing the setting for accepting download and install of
+       apps from unknown sources." style="width:240px;" />
+  <p class="img-caption">
+    <strong>Figure 2.</strong> Users must enable the <strong>Unknown sources</strong>
+    setting before they can install apps not downloaded from Google Play. 
+  </p>
+</div> 
+
+<p>Android protects users from inadvertent download and install of apps from
+locations other than Google Play (which is trusted). It blocks such installs
+until the user opts-in <strong>Unknown sources</strong> in
+Settings&nbsp;<strong>&gt;</strong>&nbsp;Security, shown in Figure 2. To allow
+the installation of applications from other sources, users need to enable the
+Unknown sources setting on their devices, and they need to make this
+configuration change <em>before</em> they download your application to their
+devices.</p> 
+
+<p class="note">Note that some network providers do not allow users to install
+applications from unknown sources.</p>
+
+
diff --git a/docs/html/favicon-a.ico b/docs/html/favicon-a.ico
new file mode 100644
index 0000000..d8884b7
--- /dev/null
+++ b/docs/html/favicon-a.ico
Binary files differ
diff --git a/docs/html/favicon.ico b/docs/html/favicon.ico
index d8884b7..c1076aa 100644
--- a/docs/html/favicon.ico
+++ b/docs/html/favicon.ico
Binary files differ
diff --git a/docs/html/guide/appendix/api-levels.jd b/docs/html/guide/appendix/api-levels.jd
deleted file mode 100644
index bc7d83b..0000000
--- a/docs/html/guide/appendix/api-levels.jd
+++ /dev/null
@@ -1,421 +0,0 @@
-page.title=Android API Levels
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-<ol>
-  <li><a href="#intro">What is API Level?</a></li>
-  <li><a href="#uses">Uses of API Level in Android</a></li>
-  <li><a href="#considerations">Development Considerations</a>
-    <ol>
-      <li><a href="#fc">Application forward compatibility</a></li>
-      <li><a href="#bc">Application backward compatibility</a></li>
-      <li><a href="#platform">Selecting a platform version and API Level</a></li>
-      <li><a href="#apilevel">Declaring a minimum API Level</a></li>
-      <li><a href="#testing">Testing against higher API Levels</a></li>
-    </ol>
-  </li>
-  <li><a href="#provisional">Using a Provisional API Level</a></li>
-  <li><a href="#filtering">Filtering the Documentation</a></li>
-</ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a> manifest element</li>
-  </ol>
-
-</div>
-</div>
-
-<p>As you develop your application on Android, it's useful to understand the
-platform's general approach to API change management. It's also important to
-understand the API Level identifier and the role it plays in ensuring your 
-application's compatibility with devices on which it may be installed. </p>
-
-<p>The sections below provide information about API Level and how it affects
-your applications. </p>
-
-<p>For information about how to use the "Filter by API Level" control
-available in the API reference documentation, see 
-<a href="#filtering">Filtering the documentation</a> at the 
-end of this document. </p>
-
-<h2 id="intro">What is API Level?</h2>
-
-<p>API Level is an integer value that uniquely identifies the framework API
-revision offered by a version of the Android platform.</p>
-
-<p>The Android platform provides a framework API that applications can use to
-interact with the underlying Android system. The framework API consists of:</p>
-
-<ul>
-<li>A core set of packages and classes</li>
-<li>A set of XML elements and attributes for declaring a manifest file</li>
-<li>A set of XML elements and attributes for declaring and accessing resources</li>
-<li>A set of Intents</li>
-<li>A set of permissions that applications can request, as well as permission
-enforcements included in the system</li>
-</ul>
-
-<p>Each successive version of the Android platform can include updates to the
-Android application framework API that it delivers. </p>
-
-<p>Updates to the framework API are designed so that the new API remains
-compatible with earlier versions of the API. That is, most changes in the API
-are additive and introduce new or replacement functionality. As parts of the API
-are upgraded, the older replaced parts are deprecated but are not removed, so
-that existing applications can still use them. In a very small number of cases,
-parts of the API may be modified or removed, although typically such changes are
-only needed to ensure API robustness and application or system security. All
-other API parts from earlier revisions are carried forward without
-modification.</p>
-
-<p>The framework API that an Android platform delivers is specified using an
-integer identifier called "API Level". Each Android platform version supports
-exactly one API Level, although support is implicit for all earlier API Levels
-(down to API Level 1). The initial release of the Android platform provided 
-API Level 1 and subsequent releases have incremented the API Level.</p>
-
-<p>The following table specifies the API Level supported by each version of the
-Android platform.</p>
-
-<table>
-  <tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr>
- 
-     <tr><td><a href="{@docRoot}sdk/android-4.0.3.html">Android 4.0.3</a></td>
-    <td><a href="{@docRoot}sdk/api_diff/15/changes.html" title="Diff Report">15</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1}</td>
-    <td rowspan="2"><a href="{@docRoot}sdk/android-4.0-highlights.html">Platform
-Highlights</a></td></tr>
-
-    <tr><td><a href="{@docRoot}sdk/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td>
-    <td><a href="{@docRoot}sdk/api_diff/14/changes.html" title="Diff Report">14</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}</td>
-    </tr>
-  
-    <tr><td><a href="{@docRoot}sdk/android-3.2.html">Android 3.2</a></td>
-    <td><a href="{@docRoot}sdk/api_diff/13/changes.html" title="Diff Report">13</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}</td>
-    <td><!-- <a href="{@docRoot}sdk/android-3.2-highlights.html">Platform Highlights</a>--></td></tr>
-  
-  <tr><td><a href="{@docRoot}sdk/android-3.1.html">Android 3.1.x</a></td>
-    <td><a href="{@docRoot}sdk/api_diff/12/changes.html" title="Diff Report">12</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR1}</td>
-    <td><a href="{@docRoot}sdk/android-3.1-highlights.html">Platform Highlights</a></td></tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-3.0.html">Android 3.0.x</td>
-    <td><a href="{@docRoot}sdk/api_diff/11/changes.html" title="Diff Report">11</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB}</td>
-    <td><a href="{@docRoot}sdk/android-3.0-highlights.html">Platform Highlights</a></td></tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td>
-    <td><a href="{@docRoot}sdk/api_diff/10/changes.html" title="Diff Report">10</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}</td>
-    <td rowspan="2"><a href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a></td></tr>
-  
-  <tr><td><a href="{@docRoot}sdk/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android 2.3</td>
-    <td><a href="{@docRoot}sdk/api_diff/9/changes.html" title="Diff Report">9</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD}</td>
-    </tr>
-  
-  <tr><td><a href="{@docRoot}sdk/android-2.2.html">Android 2.2.x</td>
-    <td ><a href="{@docRoot}sdk/api_diff/8/changes.html" title="Diff Report">8</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#FROYO}</td>
-    <td><a href="{@docRoot}sdk/android-2.2-highlights.html">Platform Highlights</a></td></tr>
-  
-  <tr><td><a href="{@docRoot}sdk/android-2.1.html">Android 2.1.x</td>
-    <td><a href="{@docRoot}sdk/api_diff/7/changes.html" title="Diff Report">7</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#ECLAIR_MR1}</td>
-    <td rowspan="3" ><a href="{@docRoot}sdk/android-2.0-highlights.html">Platform Highlights</a></td></tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-2.0.1.html">Android 2.0.1</td>
-    <td><a href="{@docRoot}sdk/api_diff/6/changes.html" title="Diff Report">6</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#ECLAIR_0_1}</td>
-    </tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-2.0.html">Android 2.0</td>
-    <td><a href="{@docRoot}sdk/api_diff/5/changes.html" title="Diff Report">5</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#ECLAIR}</td>
-    </tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-1.6.html">Android 1.6</td>
-    <td><a href="{@docRoot}sdk/api_diff/4/changes.html" title="Diff Report">4</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#DONUT}</td>
-    <td><a href="{@docRoot}sdk/android-1.6-highlights.html">Platform Highlights</a></td></tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-1.5.html">Android 1.5</td>
-    <td><a href="{@docRoot}sdk/api_diff/3/changes.html" title="Diff Report">3</a></td>
-    <td>{@link android.os.Build.VERSION_CODES#CUPCAKE}</td>
-    <td><a href="{@docRoot}sdk/android-1.5-highlights.html">Platform Highlights</a></td></tr>
-    
-  <tr><td><a href="{@docRoot}sdk/android-1.1.html">Android 1.1</td>
-    <td>2</td>
-    <td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr>
-    
-  <tr><td>Android 1.0</td>
-    <td>1</td>
-    <td>{@link android.os.Build.VERSION_CODES#BASE}</td>
-    <td></td></tr>
-</table>
-
-
-<h2 id="uses">Uses of API Level in Android</h2>
-
-<p>The API Level identifier serves a key role in ensuring the best possible
-experience for users and application developers: 
-
-<ul>
-<li>It lets the Android platform describe the maximum framework API revision 
-that it supports</li>
-<li>It lets applications describe the framework API revision that they
-require</li>
-<li>It lets the system negotiate the installation of applications on the user's
-device, such that version-incompatible applications are not installed.</li>
-</ul>
-
-<p>Each Android platform version stores its API Level identifier internally, in
-the Android system itself. </p>
-
-<p>Applications can use a manifest element provided by the framework API &mdash;
-<code>&lt;uses-sdk&gt;</code> &mdash; to describe the minimum and maximum API
-Levels under which they are able to run, as well as the preferred API Level that
-they are designed to support. The element offers three key attributes:</p>
-
-<ul>
-<li><code>android:minSdkVersion</code> &mdash; Specifies the minimum API Level
-on which the application is able to run. The default value is "1".</li>
-<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
-on which the application is designed to run. In some cases, this allows the
-application to use manifest elements or behaviors defined in the target
-API Level, rather than being restricted to using only those defined 
-for the minimum API Level.</li>
-<li><code>android:maxSdkVersion</code> &mdash; Specifies the maximum API Level
-on which the application is able to run. <strong>Important:</strong> Please read the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-documentation before using this attribute.  </li>
-</ul>
-
-<p>For example, to specify the minimum system API Level that an application
-requires in order to run, the application would include in its manifest a
-<code>&lt;uses-sdk&gt;</code> element with a <code>android:minSdkVersion</code>
-attribute. The value of <code>android:minSdkVersion</code> would be the integer
-corresponding to the API Level of the earliest version of the Android platform
-under which the application can run. </p>
-
-<p>When the user attempts to install an application, or when revalidating an
-appplication after a system update, the Android system first checks the
-<code>&lt;uses-sdk&gt;</code> attributes in the application's manifest and
-compares the values against its own internal API Level. The system allows the
-installation to begin only if these conditions are met:</p>
-
-<ul>
-<li>If a <code>android:minSdkVersion</code> attribute is declared, its value
-must be less than or equal to the system's API Level integer. If not declared,
-the system assumes that the application requires API Level 1. </li>
-<li>If a <code>android:maxSdkVersion</code> attribute is declared, its value
-must be equal to or greater than the system's API Level integer. 
-If not declared, the system assumes that the application
-has no maximum API Level. Please read the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-documentation for more information about how the system handles this attribute.</li>
-</ul>
-
-<p>When declared in an application's manifest, a <code>&lt;uses-sdk&gt;</code>
-element might look like this: </p>
-
-<pre>&lt;manifest&gt;
-  &lt;uses-sdk android:minSdkVersion="5" /&gt;
-  ...
-&lt;/manifest&gt;</pre>
-
-<p>The principal reason that an application would declare an API Level in
-<code>android:minSdkVersion</code> is to tell the Android system that it is
-using APIs that were <em>introduced</em> in the API Level specified. If the
-application were to be somehow installed on a platform with a lower API Level,
-then it would crash at run-time when it tried to access APIs that don't exist.
-The system prevents such an outcome by not allowing the application to be
-installed if the lowest API Level it requires is higher than that of the
-platform version on the target device.</p>
-
-<p>For example, the {@link android.appwidget} package was introduced with API
-Level 3. If an application uses that API, it must declare a
-<code>android:minSdkVersion</code> attribute with a value of "3". The
-application will then be installable on platforms such as Android 1.5 (API Level
-3) and Android 1.6 (API Level 4), but not on the Android 1.1 (API Level 2) and
-Android 1.0 platforms (API Level 1).</p>
-
-<p>For more information about how to specify an application's API Level
-requirements, see the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
- section of the manifest file documentation.</p>
-
-
-<h2 id="considerations">Development Considerations</h2>
-
-<p>The sections below provide information related to API level that you should
-consider when developing your application.</p>
-
-<h3 id="fc">Application forward compatibility</h3>
-
-<p>Android applications are generally forward-compatible with new versions of
-the Android platform.</p>
-
-<p>Because almost all changes to the framework API are additive, an Android
-application developed using any given version of the API (as specified by its
-API Level) is forward-compatible with later versions of the Android platform and
-higher API levels. The application should be able to run on all later versions
-of the Android platform, except in isolated cases where the application uses a
-part of the API that is later removed for some reason. </p>
-
-<p>Forward compatibility is important because many Android-powered devices
-receive over-the-air (OTA) system updates. The user may install your
-application and use it successfully, then later receive an OTA update to a new
-version of the Android platform. Once the update is installed, your application
-will run in a new run-time version of the environment, but one that has the API
-and system capabilities that your application depends on. </p>
-
-<p>In some cases, changes <em>below</em> the API, such those in the underlying
-system itself, may affect your application when it is run in the new
-environment. For that reason it's important for you, as the application
-developer, to understand how the application will look and behave in each system
-environment. To help you test your application on various versions of the Android
-platform, the Android SDK includes multiple platforms that you can download.
-Each platform includes a compatible system image that you can run in an AVD, to
-test your application. </p>
-
-<h3 id="bc">Application backward compatibility</h3>
-
-<p>Android applications are not necessarily backward compatible with versions of
-the Android platform older than the version against which they were compiled.
-</p>
-
-<p>Each new version of the Android platform can include new framework APIs, such
-as those that give applications access to new platform capabilities or replace
-existing API parts. The new APIs are accessible to applications when running on
-the new platform and, as mentioned above, also when running on later versions of
-the platform, as specified by API Level. Conversely, because earlier versions of
-the platform do not include the new APIs, applications that use the new APIs are
-unable to run on those platforms.</p>
-
-<p>Although it's unlikely that an Android-powered device would be downgraded to
-a previous version of the platform, it's important to realize that there are
-likely to be many devices in the field that run earlier versions of the
-platform. Even among devices that receive OTA updates, some might lag and
-might not receive an update for a significant amount of time. </p>
-
-<h3 id="platform">Selecting a platform version and API Level</h3>
-
-<p>When you are developing your application, you will need to choose
-the platform version against which you will compile the application. In
-general, you should compile your application against the lowest possible
-version of the platform that your application can support. 
-
-<p>You can determine the lowest possible platform version by compiling the
-application against successively lower build targets. After you determine the
-lowest version, you should create an AVD using the corresponding platform
-version (and API Level) and fully test your application. Make sure to declare a
-<code>android:minSdkVersion</code> attribute in the application's manifest and
-set its value to the API Level of the platform version. </p>
-
-<h3 id="apilevel">Declaring a minimum API Level</h3>
-
-<p>If you build an application that uses APIs or system features introduced in
-the latest platform version, you should set the
-<code>android:minSdkVersion</code> attribute to the API Level of the latest
-platform version. This ensures that users will only be able to install your
-application if their devices are running a compatible version of the Android
-platform. In turn, this ensures that your application can function properly on
-their devices. </p>
-
-<p>If your application uses APIs introduced in the latest platform version but
-does <em>not</em> declare a <code>android:minSdkVersion</code> attribute, then
-it will run properly on devices running the latest version of the platform, but
-<em>not</em> on devices running earlier versions of the platform. In the latter
-case, the application will crash at runtime when it tries to use APIs that don't
-exist on the earlier versions.</p>
-
-<h3 id="testing">Testing against higher API Levels</h3>
-
-<p>After compiling your application, you should make sure to test it on the
-platform specified in the application's <code>android:minSdkVersion</code>
-attribute. To do so, create an AVD that uses the platform version required by
-your application. Additionally, to ensure forward-compatibility, you should run
-and test the application on all platforms that use a higher API Level than that
-used by your application. </p>
-
-<p>The Android SDK includes multiple platform versions that you can use,
-including the latest version, and provides an updater tool that you can use to
-download other platform versions as necessary. </p>
-
-<p>To access the updater, use the <code>android</code> command-line tool,
-located in the &lt;sdk&gt;/tools directory. You can launch the SDK updater by
-executing <code>android sdk</code>. You can
-also simply double-click the android.bat (Windows) or android (OS X/Linux) file.
-In ADT, you can also access the updater by selecting 
-<strong>Window</strong>&nbsp;>&nbsp;<strong>Android SDK
-Manager</strong>.</p>
-
-<p>To run your application against different platform versions in the emulator,
-create an AVD for each platform version that you want to test. For more
-information about AVDs, see <a
-href="{@docRoot}guide/developing/devices/index.html">Creating and Managing Virtual Devices</a>. If
-you are using a physical device for testing, ensure that you know the API Level
-of the Android platform it runs. See the table at the top of this document for
-a list of platform versions and their API Levels. </p>
-
-<h2 id="provisional">Using a Provisional API Level</h2>
-
-<p>In some cases, an "Early Look" Android SDK platform may be available. To let
-you begin developing on the platform although the APIs may not be final, the
-platform's API Level integer will not be specified. You must instead use the
-platform's <em>provisional API Level</em> in your application manifest, in order
-to build applications against the platform. A provisional API Level is not an
-integer, but a string matching the codename of the unreleased platform version.
-The provisional API Level will be specified in the release notes for the Early
-Look SDK release notes and is case-sensitive.</p>
-
-<p>The use of a provisional API Level is designed to protect developers and
-device users from inadvertently publishing or installing applications based on
-the Early Look framework API, which may not run properly on actual devices
-running the final system image.</p>
-
-<p>The provisional API Level will only be valid while using the Early Look SDK
-and can only be used to run applications in the emulator. An application using
-the provisional API Level can never be installed on an Android device. At the
-final release of the platform, you must replace any instances of the provisional
-API Level in your application manifest with the final platform's actual API
-Level integer.</p>
-
-
-<h2 id="filtering">Filtering the Reference Documentation by API Level</h2>
-
-<p>Reference documentation pages on the Android Developers site offer a "Filter
-by API Level" control in the top-right area of each page. You can use the 
-control to show documentation only for parts of the API that are actually 
-accessible to your application, based on the API Level that it specifies in 
-the <code>android:minSdkVersion</code> attribute of its manifest file. </p>
-
-<p>To use filtering, select the checkbox to enable filtering, just below the
-page search box. Then set the "Filter by API Level" control to the same API
-Level as specified by your application. Notice that APIs introduced in a later
-API Level are then grayed out and their content is masked, since they would not
-be accessible to your application. </p>
-
-<p>Filtering by API Level in the documentation does not provide a view
-of what is new or introduced in each API Level &mdash; it simply provides a way
-to view the entire API associated with a given API Level, while excluding API
-elements introduced in later API Levels.</p>
-
-<p>If you decide that you don't want to filter the API documentation, just
-disable the feature using the checkbox. By default, API Level filtering is
-disabled, so that you can view the full framework API, regardless of API Level.
-</p>
-
-<p>Also note that the reference documentation for individual API elements
-specifies the API Level at which each element was introduced. The API Level 
-for packages and classes is specified as "Since &lt;api level&gt;" at the 
-top-right corner of the content area on each documentation page. The API Level 
-for class members is specified in their detailed description headers, 
-at the right margin. </p>
diff --git a/docs/html/guide/appendix/g-app-intents.jd b/docs/html/guide/appendix/g-app-intents.jd
index df9d29b..10ec01e 100644
--- a/docs/html/guide/appendix/g-app-intents.jd
+++ b/docs/html/guide/appendix/g-app-intents.jd
@@ -4,7 +4,7 @@
 <div class="sidebox-wrapper">
 <div class="sidebox">
 For more information about intents, see the <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>.
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>.
 </div>
 </div>
 
diff --git a/docs/html/guide/appendix/glossary.jd b/docs/html/guide/appendix/glossary.jd
index 06fdef2..94cb0f0 100644
--- a/docs/html/guide/appendix/glossary.jd
+++ b/docs/html/guide/appendix/glossary.jd
@@ -42,7 +42,7 @@
         SDK. It provides tools to browse the device, copy tools on the device, and
         forward ports for debugging. If you are developing in Eclipse using the
 		ADT Plugin, adb is integrated into your development environment. See 
-		<a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>
+		<a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>
 		for more information. </dd>
 
     <dt id="application">Application</dt>
@@ -91,7 +91,7 @@
     with the SDK. It provides screen capture, log dump, and process
     examination capabilities. If you are developing in Eclipse using the ADT
     Plugin, DDMS is integrated into your development environment. See <a
-    href="{@docRoot}guide/developing/debugging/ddms.html">Using DDMS</a> to learn more about the program.</dd>
+    href="{@docRoot}tools/debugging/ddms.html">Using DDMS</a> to learn more about the program.</dd>
 
     <dt id="dialog">Dialog</dt> <dd> A floating window that that acts as a lightweight
     form. A dialog can have button controls only and is intended to perform a
@@ -131,7 +131,7 @@
     is responsible for resolving the best-available receiver for each Intent,
     based on the criteria supplied in the Intent and the Intent Filters
     defined by other applications. For more information, see <a
-    href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
+    href="{@docRoot}guide/components/intents-filters.html">Intents and
     Intent Filters</a>. 
     <p>Related: <a href="#intentfilter">Intent Filter</a>, <a
     href="#broadcastreceiver">Broadcast Receiver</a>.</p></dd>
@@ -145,7 +145,7 @@
     available intent filters in all applications and passes the Intent to the
     application/activity that best matches the Intent and criteria. For more
     information, see <a
-    href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
+    href="{@docRoot}guide/components/intents-filters.html">Intents and
     Intent Filters</a>. 
     <p>Related: <a href="#intent">Intent</a>, <a
     href="#broadcastreceiver">Broadcast Receiver</a>.</p></dd>
diff --git a/docs/html/guide/appendix/install-location.jd b/docs/html/guide/appendix/install-location.jd
index 63a3817..19c4b39 100644
--- a/docs/html/guide/appendix/install-location.jd
+++ b/docs/html/guide/appendix/install-location.jd
@@ -174,7 +174,7 @@
   <dt>Copy Protection</dt>
     <dd>Your application cannot be installed to a device's SD card if it uses Google Play's 
       Copy Protection feature. However, if you use Google Play's 
-      <a href="{@docRoot}guide/market/licensing.html">Application Licensing</a> instead, your 
+      <a href="{@docRoot}guide/google/play/licensing.html">Application Licensing</a> instead, your 
       application <em>can</em> be installed to internal or external storage, including SD cards.</dd>
 </dl>
 
@@ -198,7 +198,7 @@
 provide additional services when inactive. When external storage becomes unavailable and a game
 process is killed, there should be no visible effect when the storage becomes available again and
 the user restarts the game (assuming that the game properly saved its state during the normal
-<a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity lifecycle</a>).</p>
+<a href="{@docRoot}guide/components/activities.html#Lifecycle">Activity lifecycle</a>).</p>
 
 <p>If your application requires several megabytes for the APK file, you should
 carefully consider whether to enable the application to install on the external storage so that
diff --git a/docs/html/guide/appendix/market-filters.jd b/docs/html/guide/appendix/market-filters.jd
deleted file mode 100644
index 3e502d7..0000000
--- a/docs/html/guide/appendix/market-filters.jd
+++ /dev/null
@@ -1,454 +0,0 @@
-page.title=Filters on Google Play
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-<ul>
-<li>Google Play applies filters that control which Android-powered devices can access your
-application when the user is visiting the store.</li>
-<li>Filtering is determined by comparing device configurations that you declare in you app's
-manifest file to the configurations defined by the device, as well as other factors.</li> </ul>
-
-<h2>In this document</h2>
-
-<ol>
-  <li><a href="#how-filters-work">How Filters Work on Google Play</a></li>
-  <li><a href="#manifest-filters">Filtering based on Manifest Elements</a>
-    <ol>
-      <li><a href="#advanced-filters">Advanced manifest filters</a></li>
-    </ol>
-  </li>
-  <li><a href="#other-filters">Other Filters</a></li>
-  <li><a href="#MultiApks">Publishing Multiple APKs with Different Filters</a></li>
-</ol>
-
-<h2>See also</h2>
- <ol>
-<li><a
-href="{@docRoot}guide/practices/compatibility.html">Android Compatibility</a></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
-<li><code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
-</ol>
-
-<div id="qv-extra">
-  <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
-  <div id="qv-sub-rule">
-    <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0 5px;">
-    <h2 style="color:#669999;padding-top:1em;">Interested in publishing your app on Google Play?</h2>
-    <p><a id="publish-link"
-href="http://play.google.com/apps/publish">Go to Google Play</a> to create a publisher
-account and upload your app.</p></div>
-</div>
-
-</div>
-</div>
-
-
-<p>When a user searches or browses on Google Play on an Android device, the results are filtered
-based on which applications are compatible with that device. For example, if an application
-requires a camera (as specified in the application manifest file), then Google Play will not show
-the app on any device that does not have a camera.</p>
-
-<p>Declarations in the manifest file that are compared to the device's configuration is not the
-only part of how applications are filtered. Filtering might also occur due to the user's country and
-carrier, the presence or absence of a SIM card, and other factors. </p>
-
-<p>Changes to the Google Play filters are independent of changes to the Android platform itself.
-This document is updated periodically to reflect any changes that affect the way Google Play
-filters applications.</p>
-
-
-<h2 id="how-filters-work">How Filters Work on Google Play</h2>
-
-<p>Google Play uses the filter restrictions described below to determine
-whether to show your application to a user who is browsing or searching for
-applications from the Google Play app. When determining whether to display your app,
-Google Play checks the device's hardware and software configuration, as well as it's
-carrier, location, and other characteristics. It then compares those against the
-restrictions and dependencies expressed by the application's
-manifest file and publishing details. If the application is
-compatible with the device according to the filter rules, Google Play displays the
-application to the user. Otherwise, Google Play hides your application from search
-results and category browsing, even if a user specifically requests
-the app by clicking a deep link that points directly to the app's ID within Google Play..</p>
-
-<p class="note"><strong>Note:</strong> When users browse the <a
-href="http://play.google.com/apps">Google Play web site</a>, they can see all published
-applications. The Google Play web site compares the application requirements to each of the
-user's registered devices for compatibility, though, and only allows them to install the application
-if it's compatible with their device.</p>
-
-<p>You can use any combination of the available filters for your app. For example, you can set a
-<code>minSdkVersion</code> requirement of <code>"4"</code> and set <code>smallScreens="false"</code>
-in the app, then when uploading the app to Google Play you could target European countries (carriers)
-only. Google Play's filters will thus prevent the application from being available on any device
-that does not match all three of these requirements. </p>
-
-<p>All filtering restrictions are associated with an application's version and can
-change between versions. For example, if a user has installed your application and you publish an
-update that makes the app invisible to the user, the user will not see that an update is
-available.</p>
-
-
-<h2 id="manifest-filters">Filtering based on Manifest Elements</h2>
-
-<p>Most filters are triggered by elements within an application's
-manifest file, <a
-href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
-(although not everything in the manifest file can trigger filtering).
-Table 1 lists the manifest elements that you should use to trigger
-filtering, and explains how the filtering for each element works.</p>
-
-<p id="table1" class="table-caption"><strong>Table 1.</strong> Manifest elements that
-trigger filtering on Google Play.</p>
-<table>
-  <tr>
-    <th>Manifest Element</th>
-    <th>Filter Name</th>
-    <th>How It Works</th>
-  </tr>
-  <tr>
-    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
-      <!-- ##api level 4## --></td>
-    <td valign="top">Screen Size</td>
-    <td valign="top">
-
-<p>An application indicates the screen sizes that it is capable of supporting by
-setting attributes of the <code>&lt;supports-screens&gt;</code> element. When
-the application is published, Google Play uses those attributes to determine whether
-to show the application to users, based on the screen sizes of their
-devices. </p>
-
-<p>As a general rule, Google Play assumes that the platform on the device can adapt
-smaller layouts to larger screens, but cannot adapt larger layouts to smaller
-screens. Thus, if an application declares support for "normal" screen size only,
-Google Play makes the application available to both normal- and large-screen devices,
-but filters the application so that it is not available to small-screen
-devices.</p>
-
-<p>If an application does not declare attributes for
-<code>&lt;supports-screens&gt;</code>, Google Play uses the default values for those
-attributes, which vary by API Level. Specifically: </p>
-
-<ul>
-<li><p>For applications that set either the <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
-minSdkVersion</a></code> or <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
-targetSdkVersion</a></code> to 3 or lower, the <code>&lt;supports-screens&gt;</code> element itself
-is undefined and no attributes are available. In this case, Google Play assumes that
-the application is designed for normal-size screens and shows the application to
-devices that have normal or larger screens. </p>
-
-<li>When the either the <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
-minSdkVersion</a></code> or <code><a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
-targetSdkVersion</a></code> is set to 4 or higher, the default for all attributes is
-<code>"true"</code>. In this way, the application is considered to support all screen sizes by
-default.</li>
-</ul>
-
-    <p><strong>Example 1</strong><br />
-    The manifest declares <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>
-    and does not include a <code>&lt;supports-screens&gt;</code> element.
-    <strong>Result</strong>: Google Play will not show the app to a user of a
-    small-screen device, but will show it to users of normal and large-screen
-    devices, unless  other filters apply. </p>
-    <p><strong>Example 2<br />
-    </strong>The manifest declares <code>&lt;uses-sdk android:minSdkVersion="3"
-    android:targetSdkVersion="4"&gt;</code> and does not include a
-    <code>&lt;supports-screens&gt;</code> element.
-    <strong>Result</strong>: Google Play will show the app to users on all
-    devices, unless other filters apply. </p>
-    <p><strong>Example 3<br />
-    </strong>The manifest declares <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>
-    and does not include a <code>&lt;supports-screens&gt;</code> element.
-    <strong>Result</strong>: Google Play will show the app to all users,
-    unless  other filters apply. </p>
-    <p>For more information on how to declare support for screen sizes in your
-    application, see <code><a
-    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
-    and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-    Screens</a>.</p>
-</td>
-  </tr>
-
-  <tr>
-    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
-      <!-- ##api level 3## --></td>
-    <td valign="top">Device
-    Configuration: <br />
-    keyboard, navigation, touch screen</td>
-    <td valign="top"><p>An application can
-    request certain hardware features, and Google Play will  show the app only on devices that have the required hardware.</p>
-      <p><strong>Example 1<br />
-      </strong>The manifest includes <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>, and a user is searching for apps on a device that does not have a five-way navigational control. <strong>Result</strong>: Google Play will not show the app to the user. </p>
-      <p><strong>Example 2<br />
-      </strong>The manifest does not include a <code>&lt;uses-configuration&gt;</code> element. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply.</p>
-<p>For more details, see  <a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>.</p></td>
-  </tr>
-
-  <tr>
-    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
-</code>
-      <!-- ##api level 4## --></td>
-    <td valign="top">Device Features<br />
-      (<code>name</code>)</td>
-    <td valign="top"><p>An application can require certain device features to be
-present on the device. This functionality was introduced in Android 2.0 (API
-Level 5).</p>
-      <p><strong>Example 1<br />
-      </strong>The manifest includes <code>&lt;uses-feature
-android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>, and a user
-is searching for apps on a device that does not have a light sensor.
-<strong>Result</strong>: Google Play will not show the app to the user. </p>
-      <p><strong>Example 2<br />
-      </strong>The manifest does not include a <code>&lt;uses-feature&gt;</code>
-element. <strong>Result</strong>: Google Play will show the app to all users,
-unless other filters apply.</p>
-      <p>For complete information, see <code><a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
-</code>.</p>
-      <p><em>Filtering based on implied features:</em> In some cases, Google
-Play interprets permissions requested through
-<code>&lt;uses-permission&gt;</code> elements as feature requirements equivalent
-to those declared in <code>&lt;uses-feature&gt;</code> elements. See <a
-href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>,
-below.</p>
-</td>
-  </tr>
-
-  <tr>
-    <td valign="top">OpenGL-ES
-    Version<br />
-(<code>openGlEsVersion</code>)</td>
-    <td valign="top"><p>An application can require that the device support a specific
-      OpenGL-ES version using the <code>&lt;uses-feature
-        android:openGlEsVersion=&quot;int&quot;&gt;</code> attribute.</p>
-      <p><strong>Example 1<br />
-      </strong>An app
-        requests multiple OpenGL-ES versions by specifying <code>openGlEsVersion</code> multiple times in the
-        manifest.  <strong>Result</strong>: Google Play assumes that the app requires the highest of the indicated versions.</p>
-<p><strong>Example 2<br />
-</strong>An app
-        requests OpenGL-ES version 1.1, and a user is searching for apps on a device that supports OpenGL-ES version 2.0. <strong>Result</strong>: Google Play will show the app to the user, unless other filters apply. If a
-  device reports that it supports OpenGL-ES version <em>X</em>,  Google Play assumes that it
-  also supports any version earlier than <em>X</em>.
-</p>
-<p><strong>Example 3<br />
-</strong>A user is searching for apps on a device that does not
-        report an OpenGL-ES version (for example, a device running Android 1.5 or earlier). <strong>Result</strong>: Google Play assumes that the device
-  supports only OpenGL-ES 1.0. Google Play will only show the user apps that do not specify <code>openGlEsVersion</code>, or apps that do not specify an OpenGL-ES version higher than 1.0. </p>
-      <p><strong>Example 4<br />
-      </strong>The manifest does not specify <code>openGlEsVersion</code>. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply. </p>
-<p>For more details, see <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p></td>
-  </tr>
-
-  <tr>
-    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
-    <td valign="top">Software Libraries</td>
-    <td valign="top"><p>An application can require specific
-    shared libraries to be present on the device. </p>
-      <p><strong>Example 1<br />
-      </strong>An app requires the <code>com.google.android.maps</code> library, and a user is searching for apps on a device that does not have the <code>com.google.android.maps</code> library. <strong>Result</strong>: Google Play will not show the app to the user. </p>
-      <p><strong>Example 2</strong><br />
-        The manifest does not include a <code>&lt;uses-library&gt;</code> element. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply.</p>
-<p>For more details, see <a
-href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>.</p></td>
-  </tr>
-  <tr id="uses-permission-filtering">
-    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
-    <td valign="top">&nbsp;</td>
-    <td valign="top">Strictly, Google Play does not filter based on
-<code>&lt;uses-permission&gt;</code> elements. However, it does read the
-elements to determine whether the application has hardware feature requirements
-that may not have been properly declared in <code>&lt;uses-feature&gt;</code>
-elements. For example, if an application requests the <code>CAMERA</code>
-permission but does not declare a <code>&lt;uses-feature&gt;</code> element for
-<code>android.hardware.camera</code>, Google Play considers that the
-application requires a camera and should not be shown to users whose devices do
-not offer a camera.</p>
-    <p>In general, if an application requests hardware-related permissions,
-Google Play assumes that the application requires the underlying hardware
-features, even though there might be no corresponding to
-<code>&lt;uses-feature&gt;</code> declarations. Google Play then sets up
-filtering based on the features implied by the <code>&lt;uses-feature&gt;</code>
-declarations.</p>
-    <p>For a list of permissions that imply hardware features, see
-the documentation for the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a>
-element.</p>
-</td>
-  </tr>
-
-  <tr>
-    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
-    <td valign="top">Minimum Framework Version (<code>minSdkVersion</code>)</td>
-    <td valign="top"><p>An application can require a minimum API level.  </p>
-      <p><strong>Example 1</strong><br />
-        The manifest includes <code>&lt;uses-sdk
-      android:minSdkVersion=&quot;3&quot;&gt;</code>, and the app uses APIs that were introduced in API Level 3. A user is searching for apps on a device that has API Level 2. <strong>Result</strong>: Google Play will not show the app to the user. </p>
-      <p><strong>Example 2</strong><br />
-      The manifest does not include <code>minSdkVersion</code>, and the app uses APIs that were introduced in API Level 3. A user is searching for apps on a device that has API Level 2. <strong>Result</strong>: Google Play assumes that <code>minSdkVersion</code> is &quot;1&quot; and that the app is compatible with all versions of Android. Google Play  shows the app to the user and allows the user to download the app. The app crashes at runtime. </p>
-    <p>Because you want to avoid this second scenario, we recommend that you always declare a <code>minSdkVersion</code>. For details, see <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>.</p></td>
-  </tr>
-  <tr>
-    <td valign="top">Maximum Framework Version (<code>maxSdkVersion</code>)</td>
-    <td valign="top"><p><em>Deprecated.</em> Android
-    2.1 and later do not check or enforce the <code>maxSdkVersion</code> attribute, and
-    the SDK will not compile if <code>maxSdkVersion</code> is set in an app's manifest. For devices already
-    compiled with <code>maxSdkVersion</code>, Google Play will respect it and use it for
-    filtering.</p>
-<p> Declaring <code>maxSdkVersion</code> is <em>not</em> recommended. For details, see <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>.</p></td>
-  </tr>
-</table>
-
-
-
-<h3 id="advanced-filters">Advanced manifest filters</h3>
-
-<p>In addition to the manifest elements in <a href="#table1">table 1</a>, Google Play can also
-filter applications based on the advanced manifest elements in table 2.</p>
-
-<p>These manifest elements and the filtering they trigger are for exceptional use-cases
-only. These are designed for certain types of high-performance games and similar applications that
-require strict controls on application distribution. <strong>Most applications should never use
-these filters</strong>.</p>
-
-<p id="table2" class="table-caption"><strong>Table 2.</strong> Advanced manifest elements for
-Google Play filtering.</p>
-<table>
-  <tr><th>Manifest Element</th><th>Summary</th></tr>
-  <tr>
-    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a></nobr></td>
-    <td>
-      <p>Google Play filters the application if the device screen size and density does not match
-any of the screen configurations (declared by a {@code &lt;screen&gt;} element) in the {@code
-&lt;compatible-screens&gt;} element.</p>
-      <p class="caution"><strong>Caution:</strong> Normally, <strong>you should not use
-this manifest element</strong>. Using this element can dramatically
-reduce the potential user base for your application, by excluding all combinations of screen size
-and density that you have not listed. You should instead use the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> manifest element (described above in <a href="#table1">table
-1</a>) to enable screen compatibility mode for screen configurations you have not accounted for
-with alternative resources.</p>
-    </td>
-  </tr>
-  <tr>
-    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a></nobr></td>
-    <td>
-      <p>Google Play filters the application unless one or more of the GL texture compression
-formats supported by the application are also supported by the device. </p>
-    </td>
-  </tr>
-</table>
-
-
-
-<h2 id="other-filters">Other Filters</h2>
-
-<p>Google Play uses other application characteristics to determine whether to show or hide an application for a particular user on a given device, as described in the table below. </p>
-
-<p id="table3" class="table-caption"><strong>Table 3.</strong> Application and publishing
-characteristics that affect filtering on Google Play.</p>
-<table> <tr>
-    <th>Filter Name</th> <th>How It Works</th> </tr>
-
-  <tr>
-    <td valign="top">Publishing Status</td> <td valign="top"><p>Only published applications will appear in
-      searches and browsing within Google Play.</p> <p>Even if an app is unpublished, it can
-        be installed if users can see it in their Downloads area among their purchased,
-        installed, or recently uninstalled apps.</p> <p>If an application has been
-  suspended, users will not be able to reinstall or update it, even if it appears in their Downloads.</p> </td></tr>
-  <tr>
-  <td valign="top">Priced
-    Status</td> <td valign="top"><p>Not all users can see paid apps. To show paid apps, a device
-must have a SIM card and be running Android 1.1 or later, and it must be in a
-country (as determined by SIM carrier) in which paid apps are available.</p></td>
-</tr> <tr>
-  <td valign="top">Country / Carrier Targeting</td> <td valign="top"> <p>When you upload your app to
-    Google Play, you can select specific countries to target. The app will only
-    be visible to the countries (carriers) that you select, as follows:</p>
-    <ul><li><p>A device's country is determined based on the carrier, if a carrier is
-      available. If no carrier can be determined, Google Play tries to
-      determine the country based on IP.</p></li> <li><p>Carrier is determined based on
-      the device's SIM (for GSM devices), not the current roaming carrier.</p></li></ul>
-</td> </tr> <tr>
-  <td valign="top">Native Platform</td> <td valign="top"><p>An application that includes native
-    libraries that target a specific platform (ARM EABI v7 or x86, for example) are
-    visible only on devices that support that platform. For details about the NDK and using
-    native libraries, see <a href="{@docRoot}sdk/ndk/index.html#overview">What is the
-      Android NDK?</a></p> </tr> <tr>
-        <td valign="top">Copy-Protected Applications</td> <td valign="top"><p>To
-          copy protect an application, set copy protection to "On" when you configure publishing
-options for your application. Google Play will not show copy-protected applications on
-developer devices or unreleased devices.</p></td> </tr> </table>
-
-
-
-<h2 id="MultiApks">Publishing Multiple APKs with Different Filters</h2>
-
-<p>Some specific Google Play filters allow you to publish multiple APKs for the same
-application in order to provide a different APK to different device configurations. For example, if
-you're creating a video game that uses high-fidelity graphic assets, you might want to create
-two APKs that each support different texture compression formats. This way, you can reduce the
-size of the APK file by including only the textures that are required for each device
-configuration. Depending on each device's support for your texture compression formats, Google
-Play will deliver it the APK that you've declared to support that device.</p>
-
-<p>Currently, Google Play allows you to publish multiple APKs for the same application only
-when each APK provides different filters based on the following configurations:</p>
-<ul>
-  <li>OpenGL texture compression formats
-    <p>By using the <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a> element.</p>
-  </li>
-  <li>Screen size (and, optionally, screen density)
-    <p>By using the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> or <a
-href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a> element.</p>
-  </li>
-  <li>API level
-    <p>By using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
-&lt;uses-sdk&gt;}</a> element.</p>
-  </li>
-</ul>
-
-<p>All other filters still work the same as usual, but these three are the only filters that can
-distinguish one APK from another within the same application listing on Google Play. For example,
-you <em>cannot</em> publish multiple APKs for the same application if the APKs differ only based on
-whether the device has a camera.</p>
-
-<p class="caution"><strong>Caution:</strong> Publishing multiple APKs for the same application is
-considered an advanced feature and <strong>most application should publish only one
-APK that supports a wide range of device configurations</strong>. Publishing multiple APKs
-requires that you follow specific rules within your filters and that you pay extra attention to the
-version codes for each APK to ensure proper update paths for each configuration.</p>
-
-<p>If you need more information about how to publish multiple APKs on Google Play, read <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
diff --git a/docs/html/guide/appendix/media-formats.jd b/docs/html/guide/appendix/media-formats.jd
index 137f138..93e8136 100644
--- a/docs/html/guide/appendix/media-formats.jd
+++ b/docs/html/guide/appendix/media-formats.jd
@@ -268,9 +268,9 @@
   <thead>
   <tr>
     <th>&nbsp;</th>
-    <th style="background-color:#f3f3f3;font-weight:normal"><acronym title="Standard definition">SD</a> (Low quality)</th>
-    <th style="background-color:#f3f3f3;font-weight:normal"><acronym title="Standard definition">SD</a> (High quality)</th>
-    <th style="background-color:#f3f3f3;font-weight:normal"><acronym title="High definition">HD</a> (Not available on all devices)</th>
+    <th><acronym title="Standard definition">SD</a> (Low quality)</th>
+    <th><acronym title="Standard definition">SD</a> (High quality)</th>
+    <th><acronym title="High definition">HD</a> (Not available on all devices)</th>
   </tr>
   </thead>
   <tbody>
diff --git a/docs/html/guide/basics/what-is-android.jd b/docs/html/guide/basics/what-is-android.jd
deleted file mode 100644
index 9393fab..0000000
--- a/docs/html/guide/basics/what-is-android.jd
+++ /dev/null
@@ -1,141 +0,0 @@
-page.title=What is Android?
-@jd:body
-
-<p>Android is a software stack for mobile devices that includes an operating
-system, middleware and key applications. The <a
-href="http://developer.android.com/sdk/index.html">Android SDK</a>
-provides the tools and APIs necessary to begin developing applications on the
-Android platform using the Java programming language.</p>
-
-<h2>Features</h2>
-
-<ul>
-    <li><strong>Application framework</strong> enabling reuse and replacement
-    of components</li>
-    <li><strong>Dalvik virtual machine</strong> optimized for mobile
-        devices</li>
-    <li><strong>Integrated browser</strong> based on the open source <a
-    href="http://webkit.org/">WebKit</a> engine </li>
-    <li><strong>Optimized graphics</strong> powered by a custom 2D graphics library; 3D
-    graphics based on the OpenGL ES 1.0 specification (hardware acceleration
-    optional)</li>
-    <li><strong>SQLite</strong> for structured data storage</li>
-    <li><strong>Media support</strong> for common audio, video, and still
-    image formats (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG,
-    GIF)</li>
-    <li><strong>GSM Telephony</strong> (hardware dependent)</li>
-    <li><strong>Bluetooth, EDGE, 3G, and WiFi</strong> (hardware dependent)</li>
-    <li><strong>Camera, GPS, compass, and accelerometer</strong> (hardware dependent)</li>
-    <li><strong>Rich development environment</strong> including a device
-    emulator, tools for debugging, memory and performance profiling, and a plugin for the Eclipse IDE</li>
-</ul>
-
-<a name="os_architecture" id="os_architecture"></a>
-<h2>Android Architecture</h2> 
-
-<p>The following diagram shows the major components of the Android operating
-system. Each section is described in more detail below.</p>
-
-<p><img src="{@docRoot}images/system-architecture.jpg" alt="Android System Architecture" width="713" height="512"></p>
-
-<a name="applications" id="applications"></a>
-<h2>Applications</h2>
-
-<p>Android will ship with a set of core applications including an email
-client, SMS program, calendar, maps, browser, contacts, and
-others. All applications are written using the Java programming language.</p>
-
-<a name="application_framework" id="application_framework"></a>
-<h2>Application Framework</h2>
-
-<p>By providing an open development platform, Android
-offers developers the ability to build extremely rich and innovative
-applications. Developers are free to take advantage of the
-device hardware, access location information, run background services, set alarms,
-add notifications to the status bar, and much, much more. </p>
-
-<p>Developers have full access to the same framework APIs used by the core
-applications. The application architecture is designed to simplify the reuse
-of components; any application can publish its capabilities and any other
-application may then make use of those capabilities (subject to security
-constraints enforced by the framework). This same mechanism allows components
-to be replaced by the user.</p>
-
-<p>Underlying all applications is a set of services and systems, including:
-<ul>
-    <li>A rich and extensible set of <a
-    href="{@docRoot}resources/tutorials/views/index.html">Views</a> that can be used to
-    build an application, including lists, grids, text boxes, buttons, and even
-    an embeddable web browser</li>
-    <li><a href="{@docRoot}guide/topics/providers/content-providers.html">Content
-    Providers</a> that enable applications to access data from other
-    applications (such as Contacts), or to share their own data</li> <li>A <a
-    href="{@docRoot}guide/topics/resources/resources-i18n.html">Resource
-    Manager</a>, providing access to non-code resources such as localized
-    strings, graphics, and layout files</li>
-    <li>A {@link android.app.NotificationManager Notification Manager} that enables
-    all applications to display custom alerts in the status bar</li>
-    <li>An {@link android.app.Activity Activity Manager} that manages the
-    lifecycle of applications and provides a common navigation backstack</li>
-</ul>
-
-<p>For more details and a walkthrough of an application, see the <a
-href="{@docRoot}resources/tutorials/notepad/index.html">Notepad Tutorial</a>.</p>
-    
-<a name="libraries" id="libraries"></a>
-<h2>Libraries</h2>
-
-<p>Android includes a set of C/C++ libraries used by various components of the
-Android system. These capabilities are exposed to developers through the
-Android application framework. Some of the core libraries are listed below:</p>
-<ul>
-    <li><strong>System C library</strong> - a BSD-derived implementation of
-    the standard C system library (libc), tuned for embedded Linux-based
-    devices</li>
-    <li><strong>Media Libraries</strong> - based on PacketVideo's OpenCORE;
-    the libraries support playback and recording of many popular audio and video
-    formats, as well as static image files, including MPEG4, H.264, MP3, AAC,
-    AMR, JPG, and PNG</li>
-    <li><strong>Surface Manager</strong> - manages access to the display
-    subsystem and seamlessly composites 2D and 3D graphic layers from multiple
-    applications</li>
-    <li><strong>LibWebCore</strong> - a modern web browser engine which
-    powers both the Android browser and an embeddable web view</li>
-    <li><strong>SGL</strong> - the underlying 2D graphics
-    engine</li>
-    <li><strong>3D libraries</strong> - an implementation based on
-    OpenGL ES 1.0 APIs; the libraries use either hardware 3D acceleration
-    (where available) or the included, highly optimized 3D software
-    rasterizer</li>
-    <li><strong>FreeType</strong> - bitmap and vector font rendering</li>
-    <li><strong>SQLite</strong> - a powerful and lightweight relational
-    database engine available to all applications</li>
-</ul>
-
-<a name="runtime" id="runtime"></a>
-
-<h2>Android Runtime</h2>
-
-<p>Android includes a set of core libraries that provides most of
-the functionality available in the core libraries of the Java programming
-language.</p>
-
-<p>Every Android application runs in its own process, with its own instance of
-the Dalvik virtual machine. Dalvik has been written so that a device can run
-multiple VMs efficiently. The Dalvik VM executes files in the Dalvik
-Executable (.dex) format which is optimized for minimal memory
-footprint. The VM is register-based, and runs classes
-compiled by a Java language compiler that have been transformed into the .dex
-format by the included &quot;dx&quot; tool.</p>
-
-<p>The Dalvik VM relies on the Linux kernel for underlying functionality such
-as threading and low-level memory management.</p>
-
-<a name="kernel" id="kernel"></a>
-
-<h2>Linux Kernel</h2>
-
-<p>Android relies on Linux version 2.6 for core system services such as
-security, memory management, process management, network stack, and driver
-model. The kernel also acts as an abstraction layer between the hardware and
-the rest of the software stack.</p>
diff --git a/docs/html/guide/components/activities.jd b/docs/html/guide/components/activities.jd
new file mode 100644
index 0000000..36f651f
--- /dev/null
+++ b/docs/html/guide/components/activities.jd
@@ -0,0 +1,776 @@
+page.title=Activities
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Quickview</h2>
+<ul>
+  <li>An activity provides a user interface for a single screen in your application</li>
+  <li>Activities can move into the background and then be resumed with their state restored</li>
+</ul>
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Creating">Creating an Activity</a>
+    <ol>
+      <li><a href="#UI">Implementing a user interface</a></li>
+      <li><a href="#Declaring">Declaring the activity in the manifest</a></li>
+    </ol>
+  </li>
+  <li><a href="#StartingAnActivity">Starting an Activity</a>
+    <ol>
+      <li><a href="#StartingAnActivityForResult">Starting an activity for a result</a></li>
+    </ol>
+  </li>
+  <li><a href="#ShuttingDown">Shutting Down an Activity</a></li>
+  <li><a href="#Lifecycle">Managing the Activity Lifecycle</a>
+    <ol>
+      <li><a href="#ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</a></li>
+      <li><a href="#SavingActivityState">Saving activity state</a></li>
+      <li><a href="#ConfigurationChanges">Handling configuration changes</a></li>
+      <li><a href="#CoordinatingActivities">Coordinating activities</a></li>
+    </ol>
+  </li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.app.Activity}</li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+  <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
+Stack</a></li>
+</ol>
+
+</div>
+</div>
+
+
+
+<p>An {@link android.app.Activity} is an application component that provides a screen with which
+users can interact in order to do something, such as dial the phone, take a photo, send an email, or
+view a map. Each activity is given a window in which to draw its user interface. The window
+typically fills the screen, but may be smaller than the screen and float on top of other
+windows.</p>
+
+<p> An application usually consists of multiple activities that are loosely bound
+to each other. Typically, one activity in an application is specified as the "main" activity, which
+is presented to the user when launching the application for the first time. Each
+activity can then start another activity in order to perform different actions. Each time a new
+activity starts, the previous activity is stopped, but the system preserves the activity
+in a stack (the "back stack"). When a new activity starts, it is pushed onto the back stack and
+takes user focus. The back stack abides to the basic "last in, first out" stack mechanism,
+so, when the user is done with the current activity and presses the <em>Back</em> button, it
+is popped from the stack (and destroyed) and the previous activity resumes. (The back stack is
+discussed more in the <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks
+and Back Stack</a> document.)</p>
+
+<p>When an activity is stopped because a new activity starts, it is notified of this change in state
+through the activity's lifecycle callback methods.
+There are several callback methods that an activity might receive, due to a change in its
+state&mdash;whether the system is creating it, stopping it, resuming it, or destroying it&mdash;and
+each callback provides you the opportunity to perform specific work that's
+appropriate to that state change. For instance, when stopped, your activity should release any
+large objects, such as network or database connections. When the activity resumes, you can
+reacquire the necessary resources and resume actions that were interrupted. These state transitions
+are all part of the activity lifecycle.</p>
+
+<p>The rest of this document discusses the basics of how to build and use an activity,
+including a complete discussion of how the activity lifecycle works, so you can properly manage
+the transition between various activity states.</p>
+
+
+
+<h2 id="Creating">Creating an Activity</h2>
+
+<p>To create an activity, you must create a subclass of {@link android.app.Activity} (or
+an existing subclass of it). In your subclass, you need to implement callback methods that the
+system calls when the activity transitions between various states of its lifecycle, such as when
+the activity is being created, stopped, resumed, or destroyed. The two most important callback
+methods are:</p>
+
+<dl>
+  <dt>{@link android.app.Activity#onCreate onCreate()}</dt>
+  <dd>You must implement this method. The system calls this when creating your
+    activity. Within your implementation, you should initialize the essential components of your
+activity.
+    Most importantly, this is where you must call {@link android.app.Activity#setContentView
+    setContentView()} to define the layout for the activity's user interface.</dd>
+  <dt>{@link android.app.Activity#onPause onPause()}</dt>
+  <dd>The system calls this method as the first indication that the user is leaving your
+activity (though it does not always mean the activity is being destroyed). This is usually where you
+should commit any changes that should be persisted beyond the current user session (because
+the user might not come back).</dd>
+</dl>
+
+<p>There are several other lifecycle callback methods that you should use in order to provide a
+fluid user experience between activities and handle unexpected interuptions that cause your activity
+to be stopped and even destroyed. All of the lifecycle callback methods are discussed later, in
+the section about <a href="#Lifecycle">Managing the Activity Lifecycle</a>.</p>
+
+
+
+<h3 id="UI">Implementing a user interface</h3>
+
+<p> The user interface for an activity is provided by a hierarchy of views&mdash;objects derived
+from the {@link android.view.View} class.  Each view controls a particular rectangular space
+within the activity's window and can respond to user interaction. For example, a view might be a
+button that initiates an action when the user touches it.</p>
+
+<p>Android provides a number of ready-made views that you can use to design and organize your
+layout. "Widgets" are views that provide a visual (and interactive) elements for the screen, such
+as a button, text field, checkbox, or just an image. "Layouts" are views derived from {@link
+android.view.ViewGroup} that provide a unique layout model for its child views, such as a linear
+layout, a grid layout, or relative layout. You can also subclass the {@link android.view.View} and
+{@link android.view.ViewGroup} classes (or existing subclasses) to create your own widgets and
+layouts and apply them to your activity layout.</p>
+
+<p>The most common way to define a layout using views is with an XML layout file saved in your
+application resources. This way, you can maintain the design of your user interface separately from
+the source code that defines the activity's behavior. You can set the layout as the UI for your
+activity with {@link android.app.Activity#setContentView(int) setContentView()}, passing the
+resource ID for the layout. However, you can also create new {@link android.view.View}s in your
+activity code and build a view hierarchy by inserting new {@link
+android.view.View}s into a {@link android.view.ViewGroup}, then use that layout by passing the root
+{@link android.view.ViewGroup} to {@link android.app.Activity#setContentView(View)
+setContentView()}.</p>
+
+<p>For information about creating a user interface, see the <a
+href="{@docRoot}guide/topics/ui/index.html">User Interface</a> documentation.</p>
+
+
+
+<h3 id="Declaring">Declaring the activity in the manifest</h3>
+
+<p>You must declare your activity in the manifest file in order for it to
+be accessible to the system. To declare your activity, open your manifest file and add an <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> element
+as a child of the <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
+element. For example:</p>
+
+<pre>
+&lt;manifest ... &gt;
+  &lt;application ... &gt;
+      &lt;activity android:name=".ExampleActivity" /&gt;
+      ...
+  &lt;/application ... &gt;
+  ...
+&lt;/manifest &gt;
+</pre>
+
+<p>There are several other attributes that you can include in this element, to define properties
+such as the label for the activity, an icon for the activity, or a theme to style the activity's
+UI. The <a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">{@code android:name}</a>
+attribute is the only required attribute&mdash;it specifies the class name of the activity. Once
+you publish your application, you should not change this name, because if you do, you might break
+some functionality, such as application shortcuts (read the blog post, <a
+href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
+That Cannot Change</a>).</p>
+
+<p>See the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> element
+reference for more information about declaring your activity in the manifest.</p>
+
+
+<h4>Using intent filters</h4>
+
+<p>An <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a> element can also specify various intent filters&mdash;using the <a
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> element&mdash;in order to declare how other application components may
+activate it.</p>
+
+<p>When you create a new application using the Android SDK tools, the stub activity
+that's created for you automatically includes an intent filter that declares the activity
+responds to the "main" action and should be placed in the "launcher" category. The intent filter
+looks like this:</p>
+
+<pre>
+&lt;activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"&gt;
+    &lt;intent-filter&gt;
+        &lt;action android:name="android.intent.action.MAIN" /&gt;
+        &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
+    &lt;/intent-filter&gt;
+&lt;/activity&gt;
+</pre>
+
+<p>The <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a> element specifies that this is the "main" entry point to the application. The <a
+href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> element specifies that this activity should be listed in the
+system's application launcher (to allow users to launch this activity).</p>
+
+<p>If you intend for your application to be self-contained and not allow other applications to
+activate its activities, then you don't need any other intent filters. Only one activity should
+have the "main" action and "launcher" category, as in the previous example. Activities that
+you don't want to make available to other applications should have no intent filters and you can
+start them yourself using explicit intents (as discussed in the following section).</p>
+
+<p>However, if you want your activity to respond to implicit intents that are delivered from
+other applications (and your own), then you must define additional intent filters for your
+activity. For each type of intent to which you want to respond, you must include an <a
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> that includes an
+<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
+&lt;action&gt;}</a> element and, optionally, a <a
+href="{@docRoot}guide/topics/manifest/category-element.html">{@code
+&lt;category&gt;}</a> element and/or a <a
+href="{@docRoot}guide/topics/manifest/data-element.html">{@code
+&lt;data&gt;}</a> element. These elements specify the type of intent to which your activity can
+respond.</p>
+
+<p>For more information about how your activities can respond to intents, see the <a
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
+document.</p>
+
+
+
+<h2 id="StartingAnActivity">Starting an Activity</h2>
+
+<p>You can start another activity by calling {@link android.app.Activity#startActivity
+  startActivity()}, passing it an {@link android.content.Intent} that describes the activity you
+  want to start. The intent specifies either the exact activity you want to start or describes the
+  type of action you want to perform (and the system selects the appropriate activity for you,
+which
+  can even be from a different application). An intent can also carry small amounts of data to be
+  used by the activity that is started.</p>
+
+<p>When working within your own application, you'll often need to simply launch a known activity.
+ You can do so by creating an intent that explicitly defines the activity you want to start,
+using the class name. For example, here's how one activity starts another activity named {@code
+SignInActivity}:</p>
+
+<pre>
+Intent intent = new Intent(this, SignInActivity.class);
+startActivity(intent);
+</pre>
+
+<p>However, your application might also want to perform some action, such as send an email, text
+  message, or status update, using data from your activity. In this case, your application might
+ not have its own activities to perform such actions, so you can instead leverage the activities
+  provided by other applications on the device, which can perform the actions for you. This is where
+intents are really valuable&mdash;you can create an intent that describes an action you want to
+perform and the system
+  launches the appropriate activity from another application. If there are
+  multiple activities that can handle the intent, then the user can select which one to use. For
+  example, if you want to allow the user to send an email message, you can create the
+  following intent:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_SEND);
+intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
+startActivity(intent);
+</pre>
+
+<p>The {@link android.content.Intent#EXTRA_EMAIL} extra added to the intent is a string array of
+  email addresses to which the email should be sent. When an email application responds to this
+  intent, it reads the string array provided in the extra and places them in the "to" field of the
+  email composition form. In this situation, the email application's activity starts and when the
+  user is done, your activity resumes.</p>
+
+
+
+
+<h3 id="StartingAnActivityForResult">Starting an activity for a result</h3>
+
+<p>Sometimes, you might want to receive a result from the activity that you start. In that case,
+  start the activity by calling {@link android.app.Activity#startActivityForResult
+  startActivityForResult()} (instead of {@link android.app.Activity#startActivity
+  startActivity()}). To then receive the result from the subsequent
+activity, implement the {@link android.app.Activity#onActivityResult onActivityResult()} callback
+  method. When the subsequent activity is done, it returns a result in an {@link
+android.content.Intent} to your {@link android.app.Activity#onActivityResult onActivityResult()}
+method.</p>
+
+<p>For example, perhaps you want the user to pick one of their contacts, so your activity can
+do something with the information in that contact. Here's how you can create such an intent and
+handle the result:</p>
+
+<pre>
+private void pickContact() {
+    // Create an intent to "pick" a contact, as defined by the content provider URI
+    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
+    startActivityForResult(intent, PICK_CONTACT_REQUEST);
+}
+
+&#64;Override
+protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
+    if (resultCode == Activity.RESULT_OK &amp;&amp; requestCode == PICK_CONTACT_REQUEST) {
+        // Perform a query to the contact's content provider for the contact's name
+        Cursor cursor = getContentResolver().query(data.getData(),
+        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
+        if (cursor.moveToFirst()) { // True if the cursor is not empty
+            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
+            String name = cursor.getString(columnIndex);
+            // Do something with the selected contact's name...
+        }
+    }
+}
+</pre>
+
+<p>This example shows the basic logic you should use in your {@link
+android.app.Activity#onActivityResult onActivityResult()} method in order to handle an
+activity result. The first condition checks whether the request was successful&mdash;if it was, then
+the {@code resultCode} will be {@link android.app.Activity#RESULT_OK}&mdash;and whether the request
+to which this result is responding is known&mdash;in this case, the {@code requestCode} matches the
+second parameter sent with {@link android.app.Activity#startActivityForResult
+startActivityForResult()}. From there, the code handles the activity result by querying the
+data returned in an {@link android.content.Intent} (the {@code data} parameter).</p>
+
+<p>What happens is, a {@link
+android.content.ContentResolver} performs a query against a content provider, which returns a
+{@link android.database.Cursor} that allows the queried data to be read. For more information, see
+the <a
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> document.</p>
+
+<p>For more information about using intents, see the <a
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
+Filters</a> document.</p>
+
+
+<h2 id="ShuttingDown">Shutting Down an Activity</h2>
+
+<p>You can shut down an activity by calling its {@link android.app.Activity#finish
+finish()} method. You can also shut down a separate activity that you previously started by calling
+{@link android.app.Activity#finishActivity finishActivity()}.</p>
+
+<p class="note"><strong>Note:</strong> In most cases, you should not explicitly finish an activity
+using these methods. As discussed in the following section about the activity lifecycle, the
+Android system manages the life of an activity for you, so you do not need to finish your own
+activities. Calling these methods could adversely affect the expected user
+experience and should only be used when you absolutely do not want the user to return to this
+instance of the activity.</p>
+
+
+<h2 id="Lifecycle">Managing the Activity Lifecycle</h2>
+
+<p>Managing the lifecycle of your activities by implementing callback methods is
+crucial to developing a strong
+and flexible application. The lifecycle of an activity is directly affected by its association with
+other activities, its task and back stack.</p>
+
+<p>An activity can exist in essentially three states:</p>
+
+<dl>
+  <dt><i>Resumed</i></dt>
+    <dd>The activity is in the foreground of the screen and has user focus. (This state is
+also sometimes referred to as "running".)</dd>
+
+  <dt><i>Paused</i></dt>
+    <dd>Another activity is in the foreground and has focus, but this one is still visible. That is,
+another activity is visible on top of this one and that activity is partially transparent or doesn't
+cover the entire screen. A paused activity is completely alive (the {@link android.app.Activity}
+object is retained in memory, it maintains all state and member information, and remains attached to
+the window manager), but can be killed by the system in extremely low memory situations.</dd>
+
+  <dt><i>Stopped</i></dt>
+    <dd>The activity is completely obscured by another activity (the activity is now in the
+"background"). A stopped activity is also still alive (the {@link android.app.Activity}
+object is retained in memory, it maintains all state and member information, but is <em>not</em>
+attached to the window manager). However, it is no longer visible to the user and it
+can be killed by the system when memory is needed elsewhere.</dd>
+</dl>
+
+<p>If an activity is paused or stopped, the system can drop it from memory either by asking it to
+finish (calling its {@link android.app.Activity#finish finish()} method), or simply killing its
+process.  When the activity is opened again (after being finished or killed), it must be created all
+over.</p>
+
+
+
+<h3 id="ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</h3>
+
+<p>When an activity transitions into and out of the different states described above, it is notified
+through various callback methods. All of the callback methods are hooks that you
+can override to do appropriate work when the state of your activity changes. The following skeleton
+activity includes each of the fundamental lifecycle methods:</p>
+
+
+<pre>
+public class ExampleActivity extends Activity {
+    &#64;Override
+    public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        // The activity is being created.
+    }
+    &#64;Override
+    protected void {@link android.app.Activity#onStart onStart()} {
+        super.onStart();
+        // The activity is about to become visible.
+    }
+    &#64;Override
+    protected void {@link android.app.Activity#onResume onResume()} {
+        super.onResume();
+        // The activity has become visible (it is now "resumed").
+    }
+    &#64;Override
+    protected void {@link android.app.Activity#onPause onPause()} {
+        super.onPause();
+        // Another activity is taking focus (this activity is about to be "paused").
+    }
+    &#64;Override
+    protected void {@link android.app.Activity#onStop onStop()} {
+        super.onStop();
+        // The activity is no longer visible (it is now "stopped")
+    }
+    &#64;Override
+    protected void {@link android.app.Activity#onDestroy onDestroy()} {
+        super.onDestroy();
+        // The activity is about to be destroyed.
+    }
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> Your implementation of these lifecycle methods must
+always call the superclass implementation before doing any work, as shown in the examples above.</p>
+
+<p>Taken together, these methods define the entire lifecycle of an activity. By implementing these
+methods, you can monitor three nested loops in the activity lifecycle: </p>
+
+<ul>
+<li>The <b>entire lifetime</b> of an activity happens between the call to {@link
+android.app.Activity#onCreate onCreate()} and the call to {@link
+android.app.Activity#onDestroy}. Your activity should perform setup of
+"global" state (such as defining layout) in {@link android.app.Activity#onCreate onCreate()}, and
+release all remaining resources in {@link android.app.Activity#onDestroy}. For example, if your
+activity has a thread running in the background to download data from the network, it might create
+that thread in {@link android.app.Activity#onCreate onCreate()} and then stop the thread in {@link
+android.app.Activity#onDestroy}.</li>
+
+<li><p>The <b>visible lifetime</b> of an activity happens between the call to {@link
+android.app.Activity#onStart onStart()} and the call to {@link
+android.app.Activity#onStop onStop()}. During this time, the user can see the activity
+on-screen and interact with it. For example, {@link android.app.Activity#onStop onStop()} is called
+when a new activity starts and this one is no longer visible. Between these two methods, you can
+maintain resources that are needed to show the activity to the user. For example, you can register a
+{@link android.content.BroadcastReceiver} in {@link
+android.app.Activity#onStart onStart()} to monitor changes that impact your UI, and unregister
+it in {@link android.app.Activity#onStop onStop()} when the user can no longer see what you are
+displaying. The system might call {@link android.app.Activity#onStart onStart()} and {@link
+android.app.Activity#onStop onStop()} multiple times during the entire lifetime of the activity, as
+the activity alternates between being visible and hidden to the user.</p></li>
+
+<li><p>The <b>foreground lifetime</b> of an activity happens between the call to {@link
+android.app.Activity#onResume onResume()} and the call to {@link android.app.Activity#onPause
+onPause()}. During this time, the activity is in front of all other activities on screen and has
+user input focus.  An activity can frequently transition in and out of the foreground&mdash;for
+example, {@link android.app.Activity#onPause onPause()} is called when the device goes to sleep or
+when a dialog appears. Because this state can transition often, the code in these two methods should
+be fairly lightweight in order to avoid slow transitions that make the user wait.</p></li>
+</ul>
+
+<p>Figure 1 illustrates these loops and the paths an activity might take between states.
+The rectangles represent the callback methods you can implement to perform operations when
+the activity transitions between states. <p>
+
+<img src="{@docRoot}images/activity_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> The activity lifecycle.</p>
+
+<p>The same lifecycle callback methods are listed in table 1, which describes each of the callback
+methods in more detail and locates each one within the
+activity's overall lifecycle, including whether the system can kill the activity after the
+callback method completes.</p>
+
+<p class="table-caption"><strong>Table 1.</strong> A summary of the activity lifecycle's
+callback methods.</p>
+
+<table border="2" width="85%" frame="hsides" rules="rows">
+<colgroup align="left" span="3"></colgroup>
+<colgroup align="left"></colgroup>
+<colgroup align="center"></colgroup>
+<colgroup align="center"></colgroup>
+
+<thead>
+<tr><th colspan="3">Method</th> <th>Description</th> <th>Killable after?</th> <th>Next</th></tr>
+</thead>
+
+<tbody>
+<tr>
+  <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
+  <td>Called when the activity is first created.
+      This is where you should do all of your normal static set up &mdash;
+      create views, bind data to lists, and so on.  This method is passed
+      a Bundle object containing the activity's previous state, if that
+      state was captured (see <a href="#actstate">Saving Activity State</a>,
+      later).
+      <p>Always followed by {@code onStart()}.</p></td>
+  <td align="center">No</td>
+      <td align="center">{@code onStart()}</td>
+</tr>
+
+<tr>
+   <td rowspan="5" style="border-left: none; border-right: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+   <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart
+onRestart()}</code></td>
+   <td>Called after the activity has been stopped, just prior to it being
+       started again.
+       <p>Always followed by {@code onStart()}</p></td>
+   <td align="center">No</td>
+   <td align="center">{@code onStart()}</td>
+</tr>
+
+<tr>
+   <td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
+   <td>Called just before the activity becomes visible to the user.
+       <p>Followed by {@code onResume()} if the activity comes
+       to the foreground, or {@code onStop()} if it becomes hidden.</p></td>
+    <td align="center">No</td>
+    <td align="center">{@code onResume()} <br/>or<br/> {@code onStop()}</td>
+</tr>
+
+<tr>
+   <td rowspan="2" style="border-left: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
+   <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
+   <td>Called just before the activity starts
+       interacting with the user.  At this point the activity is at
+       the top of the activity stack, with user input going to it.
+       <p>Always followed by {@code onPause()}.</p></td>
+   <td align="center">No</td>
+   <td align="center">{@code onPause()}</td>
+</tr>
+
+<tr>
+   <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
+   <td>Called when the system is about to start resuming another
+       activity.  This method is typically used to commit unsaved changes to
+       persistent data, stop animations and other things that may be consuming
+       CPU, and so on.  It should do whatever it does very quickly, because
+       the next activity will not be resumed until it returns.
+       <p>Followed either by {@code onResume()} if the activity
+       returns back to the front, or by {@code onStop()} if it becomes
+       invisible to the user.</td>
+   <td align="center"><strong style="color:#800000">Yes</strong></td>
+   <td align="center">{@code onResume()} <br/>or<br/> {@code onStop()}</td>
+</tr>
+
+<tr>
+   <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
+   <td>Called when the activity is no longer visible to the user.  This
+       may happen because it is being destroyed, or because another activity
+       (either an existing one or a new one) has been resumed and is covering it.
+       <p>Followed either by {@code onRestart()} if
+       the activity is coming back to interact with the user, or by
+       {@code onDestroy()} if this activity is going away.</p></td>
+   <td align="center"><strong style="color:#800000">Yes</strong></td>
+   <td align="center">{@code onRestart()} <br/>or<br/> {@code onDestroy()}</td>
+</tr>
+
+<tr>
+   <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy
+onDestroy()}</code></td>
+   <td>Called before the activity is destroyed.  This is the final call
+       that the activity will receive.  It could be called either because the
+       activity is finishing (someone called <code>{@link android.app.Activity#finish
+       finish()}</code> on it), or because the system is temporarily destroying this
+       instance of the activity to save space.  You can distinguish
+       between these two scenarios with the <code>{@link
+       android.app.Activity#isFinishing isFinishing()}</code> method.</td>
+   <td align="center"><strong style="color:#800000">Yes</strong></td>
+   <td align="center"><em>nothing</em></td>
+</tr>
+</tbody>
+</table>
+
+<p>The column labeled "Killable after?" indicates whether or not the system can
+kill the process hosting the activity at any time <em>after the method returns</em>, without
+executing another line of the activity's code.  Three methods are marked "yes": ({@link
+android.app.Activity#onPause
+onPause()}, {@link android.app.Activity#onStop onStop()}, and {@link android.app.Activity#onDestroy
+onDestroy()}). Because {@link android.app.Activity#onPause onPause()} is the first
+of the three, once the activity is created, {@link android.app.Activity#onPause onPause()} is the
+last method that's guaranteed to be called before the process <em>can</em> be killed&mdash;if
+the system must recover memory in an emergency, then {@link
+android.app.Activity#onStop onStop()} and {@link android.app.Activity#onDestroy onDestroy()} might
+not be called. Therefore, you should use {@link android.app.Activity#onPause onPause()} to write
+crucial persistent data (such as user edits) to storage. However, you should be selective about
+what information must be retained during {@link android.app.Activity#onPause onPause()}, because any
+blocking procedures in this method block the transition to the next activity and slow the user
+experience.</p>
+
+<p> Methods that are marked "No" in the <b>Killable</b> column protect the process hosting the
+activity from being killed from the moment they are called.  Thus, an activity is killable
+from the time {@link android.app.Activity#onPause onPause()} returns to the time
+{@link android.app.Activity#onResume onResume()} is called. It will not again be killable until
+{@link android.app.Activity#onPause onPause()} is again called and returns. </p>
+
+<p class="note"><strong>Note:</strong> An activity that's not technically "killable" by this
+definition in table 1 might still be killed by the system&mdash;but that would happen only in
+extreme circumstances when there is no other recourse. When an activity might be killed is
+discussed more in the <a
+href="{@docRoot}guide/components/processes-and-threads.html">Processes and
+Threading</a> document.</p>
+
+
+<h3 id="SavingActivityState">Saving activity state</h3>
+
+<p>The introduction to <a href="#Lifecycle">Managing the Activity Lifecycle</a> briefly mentions
+that
+when an activity is paused or stopped, the state of the activity is retained. This is true because
+the {@link android.app.Activity} object is still held in memory when it is paused or
+stopped&mdash;all information about its members and current state is still alive. Thus, any changes
+the user made within the activity are retained so that when the activity returns to the
+foreground (when it "resumes"), those changes are still there.</p>
+
+<p>However, when the system destroys an activity in order to recover memory, the {@link
+android.app.Activity} object is destroyed, so the system cannot simply resume it with its state
+intact. Instead, the system must recreate the {@link android.app.Activity} object if the user
+navigates back to it. Yet, the user is unaware
+that the system destroyed the activity and recreated it and, thus, probably
+expects the activity to be exactly as it was. In this situation, you can ensure that
+important information about the activity state is preserved by implementing an additional
+callback method that allows you to save information about the state of your activity: {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
+
+<p>The system calls {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
+before making the activity vulnerable to destruction. The system passes this method
+a {@link android.os.Bundle} in which you can save 
+state information about the activity as name-value pairs, using methods such as {@link
+android.os.Bundle#putString putString()} and {@link
+android.os.Bundle#putInt putInt()}. Then, if the system kills your application
+process and the user navigates back to your activity, the system recreates the activity and passes
+the {@link android.os.Bundle} to both {@link android.app.Activity#onCreate onCreate()} and {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Using either of these
+methods, you can extract your saved state from the {@link android.os.Bundle} and restore the
+activity state. If there is no state information to restore, then the {@link
+android.os.Bundle} passed to you is null (which is the case when the activity is created for
+the first time).</p>
+
+<img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> The two ways in which an activity returns to user
+focus with its state intact: either the activity is destroyed, then recreated and the activity must restore
+the previously saved state, or the activity is stopped, then resumed and the activity state
+remains intact.</p>
+
+<p class="note"><strong>Note:</strong> There's no guarantee that {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} will be called before your
+activity is destroyed, because there are cases in which it won't be necessary to save the state
+(such as when the user leaves your activity using the <em>Back</em> button, because the user is
+explicitly
+closing the activity). If the system calls {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()}, it does so before {@link
+android.app.Activity#onStop onStop()} and possibly before {@link android.app.Activity#onPause
+onPause()}.</p>
+
+<p>However, even if you do nothing and do not implement {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}, some of the activity state is
+restored by the {@link android.app.Activity} class's default implementation of {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()}. Specifically, the default
+implementation calls the corresponding {@link
+android.view.View#onSaveInstanceState onSaveInstanceState()} method for every {@link
+android.view.View} in the layout, which allows each view to provide information about itself
+that should be saved. Almost every widget in the Android framework implements this method as
+appropriate, such that any visible changes to the UI are automatically saved and restored when your
+activity is recreated. For example, the {@link android.widget.EditText} widget saves any text
+entered by the user and the {@link android.widget.CheckBox} widget saves whether it's checked or
+not. The only work required by you is to provide a unique ID (with the <a
+href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>
+attribute) for each widget you want to save its state. If a widget does not have an ID, then the
+system cannot save its state.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<p>You can also explicitly stop a view in your layout from saving its state by setting the
+{@link android.R.attr#saveEnabled android:saveEnabled} attribute to {@code "false"} or by calling
+the {@link android.view.View#setSaveEnabled setSaveEnabled()} method. Usually, you should not
+disable this, but you might if you want to restore the state of the activity UI differently.</p>
+</div>
+</div>
+
+<p>Although the default implementation of {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} saves useful information about
+your activity's UI, you still might need to override it to save additional information.
+For example, you might need to save member values that changed during the activity's life (which
+might correlate to values restored in the UI, but the members that hold those UI values are not
+restored, by default).</p>
+
+<p>Because the default implementation of {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} helps save the state of the UI, if
+you override the method in order to save additional state information, you should always call the
+superclass implementation of {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
+before doing any work. Likewise, you should also call the supercall implementation of {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} if you override it, so the
+default implementation can restore view states.</p>
+
+<p class="note"><strong>Note:</strong> Because {@link android.app.Activity#onSaveInstanceState
+onSaveInstanceState()} is not guaranteed
+to be called, you should use it only to record the transient state of the activity (the state of
+the UI)&mdash;you should never use it to store persistent data.  Instead, you should use  {@link
+android.app.Activity#onPause onPause()} to store persistent data (such as data that should be saved
+to a database) when the user leaves the activity.</p>
+
+<p>A good way to test your application's ability to restore its state is to simply rotate the
+device so that the screen orientation changes. When the screen orientation changes, the system
+destroys and recreates the activity in order to apply alternative resources that might be available
+for the new screen configuration. For this reason alone, it's very important that your activity
+completely restores its state when it is recreated, because users regularly rotate the screen while
+using applications.</p>
+
+
+<h3 id="ConfigurationChanges">Handling configuration changes</h3>
+
+<p>Some device configurations can change during runtime (such as screen orientation, keyboard
+availability, and language). When such a change occurs, Android recreates the running activity
+(the system calls {@link android.app.Activity#onDestroy}, then immediately calls {@link
+android.app.Activity#onCreate onCreate()}). This behavior is
+designed to help your application adapt to new configurations by automatically reloading your
+application with alternative resources that you've provided (such as different layouts for
+different screen orientations and sizes).</p>
+
+<p>If you properly design your activity to handle a restart due to a screen orientation change and
+restore the activity state as described above, your application will be more resilient to other
+unexpected events in the activity lifecycle.</p>
+
+<p>The best way to handle such a restart is
+  to save and restore the state of your activity using {@link
+  android.app.Activity#onSaveInstanceState onSaveInstanceState()} and {@link
+android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (or {@link
+android.app.Activity#onCreate onCreate()}), as discussed in the previous section.</p>
+
+<p>For more information about configuration changes that happen at runtime and how you can handle
+them, read the guide to <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
+Runtime Changes</a>.</p>
+
+
+
+<h3 id="CoordinatingActivities">Coordinating activities</h3>
+
+ <p>When one activity starts another, they both experience lifecycle transitions. The first activity
+pauses and stops (though, it won't stop if it's still visible in the background), while the other
+activity is created. In case these activities share data saved to disc or elsewhere, it's important
+to understand that the first activity is not completely stopped before the second one is created.
+Rather, the process of starting the second one overlaps with the process of stopping the first
+one.</p>
+
+<p>The order of lifecycle callbacks is well defined, particularly when the two activities are in the
+same process and one is starting the other. Here's the order of operations that occur when Activity
+A starts Acivity B: </p>
+
+<ol>
+<li>Activity A's {@link android.app.Activity#onPause onPause()} method executes.</li>
+
+<li>Activity B's {@link android.app.Activity#onCreate onCreate()}, {@link
+android.app.Activity#onStart onStart()}, and {@link android.app.Activity#onResume onResume()}
+methods execute in sequence. (Activity B now has user focus.)</li>
+
+<li>Then, if Activity A is no longer visible on screen, its {@link
+android.app.Activity#onStop onStop()} method executes.</li>
+</ol>
+
+ <p>This predictable sequence of lifecycle callbacks allows you to manage the transition of
+information from one activity to another. For example, if you must write to a database when the
+first activity stops so that the following activity can read it, then you should write to the
+database during {@link android.app.Activity#onPause onPause()} instead of during {@link
+android.app.Activity#onStop onStop()}.</p>
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For more information about how Android maintains a history of activities and
+enables user multitasking, continue with the <b><a
+href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back
+Stack</a></b> document.</p>
+-->
\ No newline at end of file
diff --git a/docs/html/guide/components/bound-services.jd b/docs/html/guide/components/bound-services.jd
new file mode 100644
index 0000000..b6a2512
--- /dev/null
+++ b/docs/html/guide/components/bound-services.jd
@@ -0,0 +1,675 @@
+page.title=Bound Services
+parent.title=Services
+parent.link=services.html
+@jd:body
+
+
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>Quickview</h2>
+<ul>
+  <li>A bound service allows other components to bind to it, in order to interact with it and
+perform interprocess communication</li>
+  <li>A bound service is destroyed once all clients unbind, unless the service was also started</li>
+</ul>
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Basics">The Basics</a></li>
+  <li><a href="#Creating">Creating a Bound Service</a>
+    <ol>
+      <li><a href="#Binder">Extending the Binder class</a></li>
+      <li><a href="#Messenger">Using a Messenger</a></li>
+    </ol>
+  </li>
+  <li><a href="#Binding">Binding to a Service</a></li>
+  <li><a href="#Lifecycle">Managing the Lifecycle of a Bound Service</a></li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.app.Service}</li>
+  <li>{@link android.content.ServiceConnection}</li>
+  <li>{@link android.os.IBinder}</li>
+</ol>
+
+<h2>Samples</h2>
+<ol>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
+      RemoteService}</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
+      LocalService}</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+  <li><a href="{@docRoot}guide/components/services.html">Services</a></li>
+</ol>
+</div>
+
+
+<p>A bound service is the server in a client-server interface. A bound service allows components
+(such as activities) to bind to the service, send requests, receive responses, and even perform
+interprocess communication (IPC). A bound service typically lives only while it serves another
+application component and does not run in the background indefinitely.</p>
+
+<p>This document shows you how to create a bound service, including how to bind
+to the service from other application components. However, you should also refer to the <a
+href="{@docRoot}guide/components/services.html">Services</a> document for additional
+information about services in general, such as how to deliver notifications from a service, set
+the service to run in the foreground, and more.</p>
+
+
+<h2 id="Basics">The Basics</h2>
+
+<p>A bound service is an implementation of the {@link android.app.Service} class that allows
+other applications to bind to it and interact with it. To provide binding for a
+service, you must implement the {@link android.app.Service#onBind onBind()} callback method. This
+method returns an {@link android.os.IBinder} object that defines the programming interface that
+clients can use to interact with the service.</p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h3>Binding to a Started Service</h3>
+
+<p>As discussed in the <a href="{@docRoot}guide/components/services.html">Services</a>
+document, you can create a service that is both started and bound. That is, the service can be
+started by calling {@link android.content.Context#startService startService()}, which allows the
+service to run indefinitely, and also allow a client to bind to the service by calling {@link
+android.content.Context#bindService bindService()}.
+  <p>If you do allow your service to be started and bound, then when the service has been
+started, the system does <em>not</em> destroy the service when all clients unbind. Instead, you must
+explicitly stop the service, by calling {@link android.app.Service#stopSelf stopSelf()} or {@link
+android.content.Context#stopService stopService()}.</p>
+
+<p>Although you should usually implement either {@link android.app.Service#onBind onBind()}
+<em>or</em> {@link android.app.Service#onStartCommand onStartCommand()}, it's sometimes necessary to
+implement both. For example, a music player might find it useful to allow its service to run
+indefinitely and also provide binding. This way, an activity can start the service to play some
+music and the music continues to play even if the user leaves the application. Then, when the user
+returns to the application, the activity can bind to the service to regain control of playback.</p>
+
+<p>Be sure to read the section about <a href="#Lifecycle">Managing the Lifecycle of a Bound
+Service</a>, for more information about the service lifecycle when adding binding to a
+started service.</p>
+</div>
+</div>
+
+<p>A client can bind to the service by calling {@link android.content.Context#bindService
+bindService()}. When it does, it must provide an implementation of {@link
+android.content.ServiceConnection}, which monitors the connection with the service. The {@link
+android.content.Context#bindService bindService()} method returns immediately without a value, but
+when the Android system creates the connection between the
+client and service, it calls {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} on the {@link
+android.content.ServiceConnection}, to deliver the {@link android.os.IBinder} that
+the client can use to communicate with the service.</p>
+
+<p>Multiple clients can connect to the service at once. However, the system calls your service's
+{@link android.app.Service#onBind onBind()} method to retrieve the {@link android.os.IBinder} only
+when the first client binds. The system then delivers the same {@link android.os.IBinder} to any
+additional clients that bind, without calling {@link android.app.Service#onBind onBind()} again.</p>
+
+<p>When the last client unbinds from the service, the system destroys the service (unless the
+service was also started by {@link android.content.Context#startService startService()}).</p>
+
+<p>When you implement your bound service, the most important part is defining the interface
+that your {@link android.app.Service#onBind onBind()} callback method returns. There are a few
+different ways you can define your service's {@link android.os.IBinder} interface and the following
+section discusses each technique.</p>
+
+
+
+<h2 id="Creating">Creating a Bound Service</h2>
+
+<p>When creating a service that provides binding, you must provide an {@link android.os.IBinder}
+that provides the programming interface that clients can use to interact with the service. There
+are three ways you can define the interface:</p>
+
+<dl>
+  <dt><a href="#Binder">Extending the Binder class</a></dt>
+  <dd>If your service is private to your own application and runs in the same process as the client
+(which is common), you should create your interface by extending the {@link android.os.Binder} class
+and returning an instance of it from
+{@link android.app.Service#onBind onBind()}. The client receives the {@link android.os.Binder} and
+can use it to directly access public methods available in either the {@link android.os.Binder}
+implementation or even the {@link android.app.Service}.
+  <p>This is the preferred technique when your service is merely a background worker for your own
+application. The only reason you would not create your interface this way is because
+your service is used by other applications or across separate processes.</dd>
+
+  <dt><a href="#Messenger">Using a Messenger</a></dt>
+  <dd>If you need your interface to work across different processes, you can create
+an interface for the service with a {@link android.os.Messenger}. In this manner, the service
+defines a {@link android.os.Handler} that responds to different types of {@link
+android.os.Message} objects. This {@link android.os.Handler}
+is the basis for a {@link android.os.Messenger} that can then share an {@link android.os.IBinder}
+with the client, allowing the client to send commands to the service using {@link
+android.os.Message} objects. Additionally, the client can define a {@link android.os.Messenger} of
+its own so the service can send messages back.
+  <p>This is the simplest way to perform interprocess communication (IPC), because the {@link
+android.os.Messenger} queues all requests into a single thread so that you don't have to design
+your service to be thread-safe.</p>
+  </dd>
+
+  <dt>Using AIDL</dt>
+  <dd>AIDL (Android Interface Definition Language) performs all the work to decompose objects into
+primitives that the operating system can understand and marshall them across processes to perform
+IPC. The previous technique, using a {@link android.os.Messenger}, is actually based on AIDL as
+its underlying structure. As mentioned above, the {@link android.os.Messenger} creates a queue of
+all the client requests in a single thread, so the service receives requests one at a time. If,
+however, you want your service to handle multiple requests simultaneously, then you can use AIDL
+directly. In this case, your service must be capable of multi-threading and be built thread-safe.
+  <p>To use AIDL directly, you must
+create an {@code .aidl} file that defines the programming interface. The Android SDK tools use
+this file to generate an abstract class that implements the interface and handles IPC, which you
+can then extend within your service.</p>
+  </dd>
+</dl>
+
+  <p class="note"><strong>Note:</strong> Most applications <strong>should not</strong> use AIDL to
+create a bound service, because it may require multithreading capabilities and
+can result in a more complicated implementation. As such, AIDL is not suitable for most applications
+and this document does not discuss how to use it for your service. If you're certain that you need
+to use AIDL directly, see the <a href="{@docRoot}tools/aidl.html">AIDL</a>
+document.</p>
+
+
+
+
+<h3 id="Binder">Extending the Binder class</h3>
+
+<p>If your service is used only by the local application and does not need to work across processes,
+then you can implement your own {@link android.os.Binder} class that provides your client direct
+access to public methods in the service.</p>
+
+<p class="note"><strong>Note:</strong> This works only if the client and service are in the same
+application and process, which is most common. For example, this would work well for a music
+application that needs to bind an activity to its own service that's playing music in the
+background.</p>
+
+<p>Here's how to set it up:</p>
+<ol>
+  <li>In your service, create an instance of {@link android.os.Binder} that either:
+    <ul>
+      <li>contains public methods that the client can call</li>
+      <li>returns the current {@link android.app.Service} instance, which has public methods the
+client can call</li>
+      <li>or, returns an instance of another class hosted by the service with public methods the
+client can call</li>
+    </ul>
+  <li>Return this instance of {@link android.os.Binder} from the {@link
+android.app.Service#onBind onBind()} callback method.</li>
+  <li>In the client, receive the {@link android.os.Binder} from the {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method and
+make calls to the bound service using the methods provided.</li>
+</ol>
+
+<p class="note"><strong>Note:</strong> The reason the service and client must be in the same
+application is so the client can cast the returned object and properly call its APIs. The service
+and client must also be in the same process, because this technique does not perform any
+marshalling across processes.</p>
+
+<p>For example, here's a service that provides clients access to methods in the service through
+a {@link android.os.Binder} implementation:</p>
+
+<pre>
+public class LocalService extends Service {
+    // Binder given to clients
+    private final IBinder mBinder = new LocalBinder();
+    // Random number generator
+    private final Random mGenerator = new Random();
+
+    /**
+     * Class used for the client Binder.  Because we know this service always
+     * runs in the same process as its clients, we don't need to deal with IPC.
+     */
+    public class LocalBinder extends Binder {
+        LocalService getService() {
+            // Return this instance of LocalService so clients can call public methods
+            return LocalService.this;
+        }
+    }
+
+    &#64;Override
+    public IBinder onBind(Intent intent) {
+        return mBinder;
+    }
+
+    /** method for clients */
+    public int getRandomNumber() {
+      return mGenerator.nextInt(100);
+    }
+}
+</pre>
+
+<p>The {@code LocalBinder} provides the {@code getService()} method for clients to retrieve the
+current instance of {@code LocalService}. This allows clients to call public methods in the
+service. For example, clients can call {@code getRandomNumber()} from the service.</p>
+
+<p>Here's an activity that binds to {@code LocalService} and calls {@code getRandomNumber()}
+when a button is clicked:</p>
+
+<pre>
+public class BindingActivity extends Activity {
+    LocalService mService;
+    boolean mBound = false;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+    }
+
+    &#64;Override
+    protected void onStart() {
+        super.onStart();
+        // Bind to LocalService
+        Intent intent = new Intent(this, LocalService.class);
+        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+    }
+
+    &#64;Override
+    protected void onStop() {
+        super.onStop();
+        // Unbind from the service
+        if (mBound) {
+            unbindService(mConnection);
+            mBound = false;
+        }
+    }
+
+    /** Called when a button is clicked (the button in the layout file attaches to
+      * this method with the android:onClick attribute) */
+    public void onButtonClick(View v) {
+        if (mBound) {
+            // Call a method from the LocalService.
+            // However, if this call were something that might hang, then this request should
+            // occur in a separate thread to avoid slowing down the activity performance.
+            int num = mService.getRandomNumber();
+            Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show();
+        }
+    }
+
+    /** Defines callbacks for service binding, passed to bindService() */
+    private ServiceConnection mConnection = new ServiceConnection() {
+
+        &#64;Override
+        public void onServiceConnected(ComponentName className,
+                IBinder service) {
+            // We've bound to LocalService, cast the IBinder and get LocalService instance
+            LocalBinder binder = (LocalBinder) service;
+            mService = binder.getService();
+            mBound = true;
+        }
+
+        &#64;Override
+        public void onServiceDisconnected(ComponentName arg0) {
+            mBound = false;
+        }
+    };
+}
+</pre>
+
+<p>The above sample shows how the client binds to the service using an implementation of
+{@link android.content.ServiceConnection} and the {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback. The next
+section provides more information about this process of binding to the service.</p>
+
+<p class="note"><strong>Note:</strong> The example above doesn't explicitly unbind from the service,
+but all clients should unbind at an appropriate time (such as when the activity pauses).</p>
+
+<p>For more sample code, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
+LocalService.java}</a> class and the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html">{@code
+LocalServiceActivities.java}</a> class in <a
+href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
+
+
+
+
+
+<h3 id="Messenger">Using a Messenger</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h4>Compared to AIDL</h4>
+  <p>When you need to perform IPC, using a {@link android.os.Messenger} for your interface is
+simpler than implementing it with AIDL, because {@link android.os.Messenger} queues
+all calls to the service, whereas, a pure AIDL interface sends simultaneous requests to the
+service, which must then handle multi-threading.</p>
+  <p>For most applications, the service doesn't need to perform multi-threading, so using a {@link
+android.os.Messenger} allows the service to handle one call at a time. If it's important
+that your service be multi-threaded, then you should use <a
+href="{@docRoot}tools/aidl.html">AIDL</a> to define your interface.</p>
+</div>
+</div>
+
+<p>If you need your service to communicate with remote processes, then you can use a
+{@link android.os.Messenger} to provide the interface for your service. This technique allows
+you to perform interprocess communication (IPC) without the need to use AIDL.</p>
+
+<p>Here's a summary of how to use a {@link android.os.Messenger}:</p>
+
+<ul>
+  <li>The service implements a {@link android.os.Handler} that receives a callback for each
+call from a client.</li>
+  <li>The {@link android.os.Handler} is used to create a {@link android.os.Messenger} object
+(which is a reference to the {@link android.os.Handler}).</li>
+  <li>The {@link android.os.Messenger} creates an {@link android.os.IBinder} that the service
+returns to clients from {@link android.app.Service#onBind onBind()}.</li>
+  <li>Clients use the {@link android.os.IBinder} to instantiate the {@link android.os.Messenger}
+(that references the service's {@link android.os.Handler}), which the client uses to send
+{@link android.os.Message} objects to the service.</li>
+  <li>The service receives each {@link android.os.Message} in its {@link
+android.os.Handler}&mdash;specifically, in the {@link android.os.Handler#handleMessage
+handleMessage()} method.</li>
+</ul>
+
+
+<p>In this way, there are no "methods" for the client to call on the service. Instead, the
+client delivers "messages" ({@link android.os.Message} objects) that the service receives in
+its {@link android.os.Handler}.</p>
+
+<p>Here's a simple example service that uses a {@link android.os.Messenger} interface:</p>
+
+<pre>
+public class MessengerService extends Service {
+    /** Command to the service to display a message */
+    static final int MSG_SAY_HELLO = 1;
+
+    /**
+     * Handler of incoming messages from clients.
+     */
+    class IncomingHandler extends Handler {
+        &#64;Override
+        public void handleMessage(Message msg) {
+            switch (msg.what) {
+                case MSG_SAY_HELLO:
+                    Toast.makeText(getApplicationContext(), "hello!", Toast.LENGTH_SHORT).show();
+                    break;
+                default:
+                    super.handleMessage(msg);
+            }
+        }
+    }
+
+    /**
+     * Target we publish for clients to send messages to IncomingHandler.
+     */
+    final Messenger mMessenger = new Messenger(new IncomingHandler());
+
+    /**
+     * When binding to the service, we return an interface to our messenger
+     * for sending messages to the service.
+     */
+    &#64;Override
+    public IBinder onBind(Intent intent) {
+        Toast.makeText(getApplicationContext(), "binding", Toast.LENGTH_SHORT).show();
+        return mMessenger.getBinder();
+    }
+}
+</pre>
+
+<p>Notice that the {@link android.os.Handler#handleMessage handleMessage()} method in the
+{@link android.os.Handler} is where the service receives the incoming {@link android.os.Message}
+and decides what to do, based on the {@link android.os.Message#what} member.</p>
+
+<p>All that a client needs to do is create a {@link android.os.Messenger} based on the {@link
+android.os.IBinder} returned by the service and send a message using {@link
+android.os.Messenger#send send()}. For example, here's a simple activity that binds to the
+service and delivers the {@code MSG_SAY_HELLO} message to the service:</p>
+
+<pre>
+public class ActivityMessenger extends Activity {
+    /** Messenger for communicating with the service. */
+    Messenger mService = null;
+
+    /** Flag indicating whether we have called bind on the service. */
+    boolean mBound;
+
+    /**
+     * Class for interacting with the main interface of the service.
+     */
+    private ServiceConnection mConnection = new ServiceConnection() {
+        public void onServiceConnected(ComponentName className, IBinder service) {
+            // This is called when the connection with the service has been
+            // established, giving us the object we can use to
+            // interact with the service.  We are communicating with the
+            // service using a Messenger, so here we get a client-side
+            // representation of that from the raw IBinder object.
+            mService = new Messenger(service);
+            mBound = true;
+        }
+
+        public void onServiceDisconnected(ComponentName className) {
+            // This is called when the connection with the service has been
+            // unexpectedly disconnected -- that is, its process crashed.
+            mService = null;
+            mBound = false;
+        }
+    };
+
+    public void sayHello(View v) {
+        if (!mBound) return;
+        // Create and send a message to the service, using a supported 'what' value
+        Message msg = Message.obtain(null, MessengerService.MSG_SAY_HELLO, 0, 0);
+        try {
+            mService.send(msg);
+        } catch (RemoteException e) {
+            e.printStackTrace();
+        }
+    }
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+    }
+
+    &#64;Override
+    protected void onStart() {
+        super.onStart();
+        // Bind to the service
+        bindService(new Intent(this, MessengerService.class), mConnection,
+            Context.BIND_AUTO_CREATE);
+    }
+
+    &#64;Override
+    protected void onStop() {
+        super.onStop();
+        // Unbind from the service
+        if (mBound) {
+            unbindService(mConnection);
+            mBound = false;
+        }
+    }
+}
+</pre>
+
+<p>Notice that this example does not show how the service can respond to the client. If you want the
+service to respond, then you need to also create a {@link android.os.Messenger} in the client. Then
+when the client receives the {@link android.content.ServiceConnection#onServiceConnected
+onServiceConnected()} callback, it sends a {@link android.os.Message} to the service that includes
+the client's {@link android.os.Messenger} in the {@link android.os.Message#replyTo} parameter
+of the {@link android.os.Messenger#send send()} method.</p>
+
+<p>You can see an example of how to provide two-way messaging in the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html">{@code
+MessengerService.java}</a> (service) and <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html">{@code
+MessengerServiceActivities.java}</a> (client) samples.</p>
+
+
+
+
+
+<h2 id="Binding">Binding to a Service</h2>
+
+<p>Application components (clients) can bind to a service by calling
+{@link android.content.Context#bindService bindService()}. The Android
+system then calls the service's {@link android.app.Service#onBind
+onBind()} method, which returns an {@link android.os.IBinder} for interacting with the service.</p>
+
+<p>The binding is asynchronous. {@link android.content.Context#bindService
+bindService()} returns immediately and does <em>not</em> return the {@link android.os.IBinder} to
+the client. To receive the {@link android.os.IBinder}, the client must create an instance of {@link
+android.content.ServiceConnection} and pass it to {@link android.content.Context#bindService
+bindService()}. The {@link android.content.ServiceConnection} includes a callback method that the
+system calls to deliver the {@link android.os.IBinder}.</p>
+
+<p class="note"><strong>Note:</strong> Only activities, services, and content providers can bind
+to a service&mdash;you <strong>cannot</strong> bind to a service from a broadcast receiver.</p>
+
+<p>So, to bind to a service from your client, you must: </p>
+<ol>
+  <li>Implement {@link android.content.ServiceConnection}.
+    <p>Your implementation must override two callback methods:</p>
+    <dl>
+      <dt>{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}</dt>
+        <dd>The system calls this to deliver the {@link android.os.IBinder} returned by
+the service's {@link android.app.Service#onBind onBind()} method.</dd>
+      <dt>{@link android.content.ServiceConnection#onServiceDisconnected
+onServiceDisconnected()}</dt>
+        <dd>The Android system calls this when the connection to the service is unexpectedly
+lost, such as when the service has crashed or has been killed. This is <em>not</em> called when the
+client unbinds.</dd>
+    </dl>
+  </li>
+  <li>Call {@link
+android.content.Context#bindService bindService()}, passing the {@link
+android.content.ServiceConnection} implementation. </li>
+  <li>When the system calls your {@link android.content.ServiceConnection#onServiceConnected
+onServiceConnected()} callback method, you can begin making calls to the service, using
+the methods defined by the interface.</li>
+  <li>To disconnect from the service, call {@link
+android.content.Context#unbindService unbindService()}.
+    <p>When your client is destroyed, it will unbind from the service, but you should always unbind
+when you're done interacting with the service or when your activity pauses so that the service can
+shutdown while its not being used. (Appropriate times to bind and unbind is discussed
+more below.)</p>
+  </li>
+</ol>
+
+<p>For example, the following snippet connects the client to the service created above by
+<a href="#Binder">extending the Binder class</a>, so all it must do is cast the returned
+{@link android.os.IBinder} to the {@code LocalService} class and request the {@code
+LocalService} instance:</p>
+
+<pre>
+LocalService mService;
+private ServiceConnection mConnection = new ServiceConnection() {
+    // Called when the connection with the service is established
+    public void onServiceConnected(ComponentName className, IBinder service) {
+        // Because we have bound to an explicit
+        // service that is running in our own process, we can
+        // cast its IBinder to a concrete class and directly access it.
+        LocalBinder binder = (LocalBinder) service;
+        mService = binder.getService();
+        mBound = true;
+    }
+
+    // Called when the connection with the service disconnects unexpectedly
+    public void onServiceDisconnected(ComponentName className) {
+        Log.e(TAG, "onServiceDisconnected");
+        mBound = false;
+    }
+};
+</pre>
+
+<p>With this {@link android.content.ServiceConnection}, the client can bind to a service by passing
+this it to {@link android.content.Context#bindService bindService()}. For example:</p>
+
+<pre>
+Intent intent = new Intent(this, LocalService.class);
+bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
+</pre>
+
+<ul>
+  <li>The first parameter of {@link android.content.Context#bindService bindService()} is an
+{@link android.content.Intent} that explicitly names the service to bind (thought the intent
+could be implicit).</li>
+<li>The second parameter is the {@link android.content.ServiceConnection} object.</li>
+<li>The third parameter is a flag indicating options for the binding. It should usually be {@link
+android.content.Context#BIND_AUTO_CREATE} in order to create the service if its not already alive.
+Other possible values are {@link android.content.Context#BIND_DEBUG_UNBIND}
+and {@link android.content.Context#BIND_NOT_FOREGROUND}, or {@code 0} for none.</li>
+</ul>
+
+
+<h3>Additional notes</h3>
+
+<p>Here are some important notes about binding to a service:</p>
+<ul>
+  <li>You should always trap {@link android.os.DeadObjectException} exceptions, which are thrown
+when the connection has broken. This is the only exception thrown by remote methods.</li>
+  <li>Objects are reference counted across processes. </li>
+  <li>You should usually pair the binding and unbinding during
+matching bring-up and tear-down moments of the client's lifecycle. For example:
+    <ul>
+      <li>If you only need to interact with the service while your activity is visible, you
+should bind during {@link android.app.Activity#onStart onStart()} and unbind during {@link
+android.app.Activity#onStop onStop()}.</li>
+      <li>If you want your activity to receive responses even while it is stopped in the
+background, then you can bind during {@link android.app.Activity#onCreate onCreate()} and unbind
+during {@link android.app.Activity#onDestroy onDestroy()}. Beware that this implies that your
+activity needs to use the service the entire time it's running (even in the background), so if
+the service is in another process, then you increase the weight of the process and it becomes
+more likely that the system will kill it.</li>
+    </ul>
+    <p class="note"><strong>Note:</strong> You should usually <strong>not</strong> bind and unbind
+during your activity's {@link android.app.Activity#onResume onResume()} and {@link
+android.app.Activity#onPause onPause()}, because these callbacks occur at every lifecycle transition
+and you should keep the processing that occurs at these transitions to a minimum. Also, if
+multiple activities in your application bind to the same service and there is a transition between
+two of those activities, the service may be destroyed and recreated as the current activity unbinds
+(during pause) before the next one binds (during resume). (This activity transition for how
+activities coordinate their lifecycles is described in the <a
+href="{@docRoot}guide/components/activities.html#CoordinatingActivities">Activities</a>
+document.)</p>
+</ul>
+
+<p>For more sample code, showing how to bind to a service, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
+RemoteService.java}</a> class in <a
+href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
+
+
+
+
+
+<h2 id="Lifecycle">Managing the Lifecycle of a Bound Service</h2>
+
+<div class="figure" style="width:588px">
+<img src="{@docRoot}images/fundamentals/service_binding_tree_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> The lifecycle for a service that is started
+and also allows binding.</p>
+</div>
+
+<p>When a service is unbound from all clients, the Android system destroys it (unless it was also
+started with {@link android.app.Service#onStartCommand onStartCommand()}). As such, you don't have
+to manage the lifecycle of your service if it's purely a bound
+service&mdash;the Android system manages it for you based on whether it is bound to any clients.</p>
+
+<p>However, if you choose to implement the {@link android.app.Service#onStartCommand
+onStartCommand()} callback method, then you must explicitly stop the service, because the
+service is now considered to be <em>started</em>. In this case, the service runs until the service
+stops itself with {@link android.app.Service#stopSelf()} or another component calls {@link
+android.content.Context#stopService stopService()}, regardless of whether it is bound to any
+clients.</p>
+
+<p>Additionally, if your service is started and accepts binding, then when the system calls
+your {@link android.app.Service#onUnbind onUnbind()} method, you can optionally return
+{@code true} if you would like to receive a call to {@link android.app.Service#onRebind
+onRebind()} the next time a client binds to the service (instead of receiving a call to {@link
+android.app.Service#onBind onBind()}). {@link android.app.Service#onRebind
+onRebind()} returns void, but the client still receives the {@link android.os.IBinder} in its
+{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback.
+Below, figure 1 illustrates the logic for this kind of lifecycle.</p>
+
+<p>For more information about the lifecycle of an started service, see the <a
+href="{@docRoot}guide/components/services.html#Lifecycle">Services</a> document.</p>
+
+
+
+
diff --git a/docs/html/guide/components/fragments.jd b/docs/html/guide/components/fragments.jd
new file mode 100644
index 0000000..938e0ab
--- /dev/null
+++ b/docs/html/guide/components/fragments.jd
@@ -0,0 +1,836 @@
+page.title=Fragments
+parent.title=Activities
+parent.link=activities.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>Quickview</h2>
+  <ul>
+    <li>Fragments decompose application functionality and UI into reusable modules</li>
+    <li>Add multiple fragments to a screen to avoid switching activities</li>
+    <li>Fragments have their own lifecycle, state, and back stack</li>
+    <li>Fragments require API Level 11 or greater</li>
+  </ul>
+
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#Design">Design Philosophy</a></li>
+    <li><a href="#Creating">Creating a Fragment</a>
+      <ol>
+        <li><a href="#UI">Adding a user interface</a></li>
+        <li><a href="#Adding">Adding a fragment to an activity</a></li>
+      </ol>
+    </li>
+    <li><a href="#Managing">Managing Fragments</a></li>
+    <li><a href="#Transactions">Performing Fragment Transactions</a></li>
+    <li><a href="#CommunicatingWithActivity">Communicating with the Activity</a>
+      <ol>
+        <li><a href="#EventCallbacks">Creating event callbacks to the activity</a></li>
+        <li><a href="#ActionBar">Adding items to the Action Bar</a></li>
+      </ol>
+    </li>
+    <li><a href="#Lifecycle">Handling the Fragment Lifecycle</a>
+      <ol>
+        <li><a href="#CoordinatingWithActivity">Coordinating with the activity lifecycle</a></li>
+      </ol>
+    </li>
+    <li><a href="#Example">Example</a></li>
+  </ol>
+
+  <h2>Key classes</h2>
+  <ol>
+    <li>{@link android.app.Fragment}</li>
+    <li>{@link android.app.FragmentManager}</li>
+    <li>{@link android.app.FragmentTransaction}</li>
+  </ol>
+
+  <h2>Related samples</h2>
+  <ol>
+    <li><a
+href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a></li>
+    <li><a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">ApiDemos</a></li>
+  </ol>
+  
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets
+and Handsets</a></li>
+  </ol>
+</div>
+</div>
+
+<p>A {@link android.app.Fragment} represents a behavior or a portion of user interface in an
+{@link android.app.Activity}. You can combine multiple fragments in a single activity to build a
+multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a
+modular section of an activity, which has its own lifecycle, receives its own input events, and
+which you can add or remove while the activity is running (sort of like a "sub activity" that
+you can reuse in different activities).</p>
+
+<p>A fragment must always be embedded in an activity and the fragment's lifecycle is directly
+affected by the host activity's lifecycle. For example, when the activity is paused, so are all
+fragments in it, and when the activity is destroyed, so are all fragments. However, while an
+activity is running (it is in the <em>resumed</em> <a
+href="{@docRoot}guide/components/activities.html#Lifecycle">lifecycle state</a>), you can
+manipulate each fragment independently, such as add or remove them. When you perform such a
+fragment transaction, you can also add it to a back stack that's managed by the
+activity&mdash;each back stack entry in the activity is a record of the fragment transaction that
+occurred. The back stack allows the user to reverse a fragment transaction (navigate backwards),
+by pressing the <em>Back</em> button.</p>
+
+<p>When you add a fragment as a part of your activity layout, it lives in a {@link
+android.view.ViewGroup} inside the activity's view hierarchy and the fragment defines its own view
+layout.
+You can insert a fragment into your activity layout by declaring the fragment in the activity's
+layout file, as a {@code &lt;fragment&gt;} element, or from your application code by adding it to an
+existing {@link android.view.ViewGroup}. However, a fragment is not required to be a part of the
+activity layout; you may also use a fragment without its own UI as an invisible worker for the
+activity.</p>
+
+<p>This document describes how to build your application to use fragments, including
+how fragments can maintain their state when added to the activity's back stack, share
+events with the activity and other fragments in the activity, contribute to the activity's action
+bar, and more.</p>
+
+
+<h2 id="Design">Design Philosophy</h2>
+
+<p>Android introduced fragments in Android 3.0 (API level 11), primarily to support more
+dynamic and flexible UI designs on large screens, such as tablets. Because a
+tablet's screen is much larger than that of a handset, there's more room to combine and
+interchange UI components. Fragments allow such designs without the need for you to manage complex
+changes to the view hierarchy. By dividing the layout of an activity into fragments, you become able
+to modify the activity's appearance at runtime and preserve those changes in a back stack
+that's managed by the activity.</p>
+
+<p>For example, a news application can use one fragment to show a list of articles on the
+left and another fragment to display an article on the right&mdash;both fragments appear in one
+activity, side by side, and each fragment has its own set of lifecycle callback methods and handle
+their own user input events. Thus, instead of using one activity to select an article and another
+activity to read the article, the user can select an article and read it all within the same
+activity, as illustrated in the tablet layout in figure 1.</p>
+
+<p>You should design each fragment as a modular and reusable activity component. That is, because
+each fragment defines its own layout and its own behavior with its own lifecycle callbacks, you can
+include one fragment in multiple activities, so you should design for reuse and avoid directly
+manipulating one fragment from another fragment. This is especially important because a modular
+fragment allows you to change your fragment combinations for different screen sizes. When designing
+your application to support both tablets and handsets, you can reuse your fragments in different
+layout configurations to optimize the user experience based on the available screen space. For
+example, on a handset, it might be necessary to separate fragments to provide a single-pane UI when
+more than one cannot fit within the same activity.</p>
+
+<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> An example of how two UI modules defined by
+fragments can be combined into one activity for a tablet design, but separated for a
+handset design.</p>
+
+<p>For example&mdash;to continue with the news application example&mdash;the application can embed
+two fragments in <em>Activity A</em>, when running on a tablet-sized device. However, on a
+handset-sized screen, there's not enough room for both fragments, so <em>Activity A</em> includes
+only the fragment for the list of articles, and when the user selects an article, it starts
+<em>Activity B</em>, which includes the second fragment to read the article. Thus, the application
+supports both tablets and handsets by reusing fragments in different combinations, as illustrated in
+figure 1.</p>
+
+<p>For more information about designing your application with different fragment combinations for
+different screen configurations, see the guide to <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and Handsets</a>.</p>
+
+
+
+<h2 id="Creating">Creating a Fragment</h2>
+
+<div class="figure" style="width:327px">
+<img src="{@docRoot}images/fragment_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> The lifecycle of a fragment (while its
+activity is running).</p>
+</div>
+
+<p>To create a fragment, you must create a subclass of {@link android.app.Fragment} (or an existing
+subclass of it). The {@link android.app.Fragment} class has code that looks a lot like
+an {@link android.app.Activity}. It contains callback methods similar to an activity, such
+as {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()},
+{@link android.app.Fragment#onPause onPause()}, and {@link android.app.Fragment#onStop onStop()}. In
+fact, if you're converting an existing Android application to use fragments, you might simply move
+code from your activity's callback methods into the respective callback methods of your
+fragment.</p>
+
+<p>Usually, you should implement at least the following lifecycle methods:</p>
+
+<dl>
+  <dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
+  <dd>The system calls this when creating the fragment. Within your implementation, you should
+initialize essential components of the fragment that you want to retain when the fragment is
+paused or stopped, then resumed.</dd>
+  <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
+  <dd>The system calls this when it's time for the fragment to draw its user interface for the
+first time. To draw a UI for your fragment, you must return a {@link android.view.View} from this
+method that is the root of your fragment's layout. You can return null if the fragment does not
+provide a UI.</dd>
+  <dt>{@link android.app.Activity#onPause onPause()}</dt>
+  <dd>The system calls this method as the first indication that the user is leaving the
+fragment (though it does not always mean the fragment is being destroyed). This is usually where you
+should commit any changes that should be persisted beyond the current user session (because
+the user might not come back).</dd>
+</dl>
+
+<p>Most applications should implement at least these three methods for every fragment, but there are
+several other callback methods you should also use to handle various stages of the
+fragment lifecycle. All the lifecycle callback methods are discussed more later, in the section
+about <a href="#Lifecycle">Handling the Fragment Lifecycle</a>.</p>
+
+
+<p>There are also a few subclasses that you might want to extend, instead of the base {@link
+android.app.Fragment} class:</p>
+
+<dl>
+  <dt>{@link android.app.DialogFragment}</dt>
+  <dd>Displays a floating dialog. Using this class to create a dialog is a good alternative to using
+the dialog helper methods in the {@link android.app.Activity} class, because you can
+incorporate a fragment dialog into the back stack of fragments managed by the activity,
+allowing the user to return to a dismissed fragment.</dd>
+
+  <dt>{@link android.app.ListFragment}</dt>
+  <dd>Displays a list of items that are managed by an adapter (such as a {@link
+android.widget.SimpleCursorAdapter}), similar to {@link android.app.ListActivity}. It provides
+several methods for managing a list view, such as the {@link
+android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} callback to
+handle click events.</dd>
+
+  <dt>{@link android.preference.PreferenceFragment}</dt>
+  <dd>Displays a hierarchy of {@link android.preference.Preference} objects as a list, similar to
+{@link android.preference.PreferenceActivity}. This is useful when creating a "settings"
+activity for your application.</dd>
+</dl>
+
+
+<h3 id="UI">Adding a user interface</h3>
+
+<p>A fragment is usually used as part of an activity's user interface and contributes its own
+layout to the activity.</p>
+
+<p>To provide a layout for a fragment, you must implement the {@link
+android.app.Fragment#onCreateView onCreateView()} callback method, which the Android system calls
+when it's time for the fragment to draw its layout. Your implementation of this method must return a
+{@link android.view.View} that is the root of your fragment's layout.</p>
+
+<p class="note"><strong>Note:</strong> If your fragment is a subclass of {@link
+android.app.ListFragment}, the default implementation returns a {@link android.widget.ListView} from
+{@link android.app.Fragment#onCreateView onCreateView()}, so you don't need to implement it.</p>
+
+<p>To return a layout from {@link
+android.app.Fragment#onCreateView onCreateView()}, you can inflate it from a <a
+href="{@docRoot}guide/topics/resources/layout-resource.html">layout resource</a> defined in XML. To
+help you do so, {@link android.app.Fragment#onCreateView onCreateView()} provides a
+{@link android.view.LayoutInflater} object.</p>
+
+<p>For example, here's a subclass of {@link android.app.Fragment} that loads a layout from the
+{@code example_fragment.xml} file:</p>
+
+<pre>
+public static class ExampleFragment extends Fragment {
+    &#64;Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        // Inflate the layout for this fragment
+        return inflater.inflate(R.layout.example_fragment, container, false);
+    }
+}
+</pre>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h3>Creating a layout</h3>
+  <p>In the sample above, {@code R.layout.example_fragment} is a reference to a layout resource
+named {@code example_fragment.xml} saved in the application resources. For information about how to
+create a layout in XML, see the <a href="{@docRoot}guide/topics/ui/index.html">User Interface</a>
+documentation.</p>
+</div>
+</div>
+
+<p>The {@code container} parameter passed to {@link android.app.Fragment#onCreateView
+onCreateView()} is the parent {@link android.view.ViewGroup} (from the activity's layout) in which
+your fragment layout
+will be inserted. The {@code savedInstanceState} parameter is a {@link android.os.Bundle} that
+provides data about the previous instance of the fragment, if the fragment is being resumed
+(restoring state is discussed more in the section about <a href="#Lifecycle">Handling the
+Fragment Lifecycle</a>).</p>
+
+<p>The {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} method takes
+three arguments:</p>
+<ul>
+  <li>The resource ID of the layout you want to inflate.</li>
+  <li>The {@link android.view.ViewGroup} to be the parent of the inflated layout. Passing the {@code
+container} is important in order for the system to apply layout parameters to the root view of the
+inflated layout, specified by the parent view in which it's going.</li>
+  <li>A boolean indicating whether the inflated layout should be attached to the {@link
+android.view.ViewGroup} (the second parameter) during inflation. (In this case, this
+is false because the system is already inserting the inflated layout into the {@code
+container}&mdash;passing true would create a redundant view group in the final layout.)</li>
+</ul>
+
+<p>Now you've seen how to create a fragment that provides a layout. Next, you need to add
+the fragment to your activity.</p>
+
+
+
+<h3 id="Adding">Adding a fragment to an activity</h3>
+
+<p>Usually, a fragment contributes a portion of UI to the host activity, which is embedded as a part
+of the activity's overall view hierarchy. There are two ways you can add a fragment to the activity
+layout:</p>
+
+<ul>
+  <li><b>Declare the fragment inside the activity's layout file.</b>
+<p>In this case, you can
+specify layout properties for the fragment as if it were a view. For example, here's the layout
+file for an activity with two fragments:</p>
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="horizontal"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;fragment android:name="com.example.news.ArticleListFragment"
+            android:id="@+id/list"
+            android:layout_weight="1"
+            android:layout_width="0dp"
+            android:layout_height="match_parent" /&gt;
+    &lt;fragment android:name="com.example.news.ArticleReaderFragment"
+            android:id="@+id/viewer"
+            android:layout_weight="2"
+            android:layout_width="0dp"
+            android:layout_height="match_parent" /&gt;
+&lt;/LinearLayout&gt;
+</pre>
+  <p>The {@code android:name} attribute in the {@code &lt;fragment&gt;} specifies the {@link
+android.app.Fragment} class to instantiate in the layout.</p>
+
+<p>When the system creates this activity layout, it instantiates each fragment specified in the
+layout and calls the {@link android.app.Fragment#onCreateView onCreateView()} method for each one,
+to retrieve each fragment's layout. The system inserts the {@link android.view.View} returned by the
+fragment directly in place of the {@code &lt;fragment&gt;} element.</p>
+
+<div class="note">
+  <p><strong>Note:</strong> Each fragment requires a unique identifier that
+the system can use to restore the fragment if the activity is restarted (and which you can use to
+capture the fragment to perform transactions, such as remove it). There are three ways to provide an
+ID for a fragment:</p>
+  <ul>
+    <li>Supply the {@code android:id} attribute with a unique ID.</li>
+    <li>Supply the {@code android:tag} attribute with a unique string.</li>
+    <li>If you provide neither of the previous two, the system uses the ID of the container 
+view.</li>
+  </ul>
+</div>
+  </li>
+
+  <li><b>Or, programmatically add the fragment to an existing {@link android.view.ViewGroup}.</b>
+<p>At any time while your activity is running, you can add fragments to your activity layout. You
+simply need to specify a {@link
+android.view.ViewGroup} in which to place the fragment.</p>
+  <p>To make fragment transactions in your activity (such as add, remove, or replace a
+fragment), you must use APIs from {@link android.app.FragmentTransaction}. You can get an instance
+of {@link android.app.FragmentTransaction} from your {@link android.app.Activity} like this:</p>
+
+<pre>
+FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()}
+FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
+</pre>
+
+<p>You can then add a fragment using the {@link
+android.app.FragmentTransaction#add(int,Fragment) add()} method, specifying the fragment to add and
+the view in which to insert it. For example:</p>
+
+<pre>
+ExampleFragment fragment = new ExampleFragment();
+fragmentTransaction.add(R.id.fragment_container, fragment);
+fragmentTransaction.commit();
+</pre>
+
+  <p>The first argument passed to {@link android.app.FragmentTransaction#add(int,Fragment) add()}
+is the {@link android.view.ViewGroup} in which the fragment should be placed, specified by
+resource ID, and the second parameter is the fragment to add.</p>
+  <p>Once you've made your changes with
+{@link android.app.FragmentTransaction}, you must
+call {@link android.app.FragmentTransaction#commit} for the changes to take effect.</p>
+  </li>
+</ul>
+
+
+<h4 id="AddingWithoutUI">Adding a fragment without a UI</h4>
+
+<p>The examples above show how to add a fragment to your activity in order to provide a UI. However,
+you can also use a fragment to provide a background behavior for the activity without presenting
+additional UI.</p>
+
+<p>To add a fragment without a UI, add the fragment from the activity using {@link
+android.app.FragmentTransaction#add(Fragment,String)} (supplying a unique string "tag" for the
+fragment, rather than a view ID). This adds the fragment, but, because it's not associated with a
+view in the activity layout, it does not receive a call to {@link
+android.app.Fragment#onCreateView onCreateView()}. So you don't need to implement that method.</p>
+
+<p>Supplying a string tag for the fragment isn't strictly for non-UI fragments&mdash;you can also
+supply string tags to fragments that do have a UI&mdash;but if the fragment does not have a
+UI, then the string tag is the only way to identify it. If you want to get the fragment from the
+activity later, you need to use {@link android.app.FragmentManager#findFragmentByTag
+findFragmentByTag()}.</p>
+
+<p>For an example activity that uses a fragment as a background worker, without a UI, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html">{@code
+FragmentRetainInstance.java}</a> sample.</p>
+
+
+
+<h2 id="Managing">Managing Fragments</h2>
+
+<p>To manage the fragments in your activity, you need to use {@link android.app.FragmentManager}. To
+get it, call {@link android.app.Activity#getFragmentManager()} from your activity.</p>
+
+<p>Some things that you can do with {@link android.app.FragmentManager} include:</p>
+
+<ul>
+  <li>Get fragments that exist in the activity, with {@link
+android.app.FragmentManager#findFragmentById findFragmentById()} (for fragments that provide a UI in
+the activity layout) or {@link android.app.FragmentManager#findFragmentByTag
+findFragmentByTag()} (for fragments that do or don't provide a UI).</li> 
+  <li>Pop fragments off the back stack, with {@link
+android.app.FragmentManager#popBackStack()} (simulating a <em>Back</em> command by the user).</li>
+  <li>Register a listener for changes to the back stack, with {@link
+android.app.FragmentManager#addOnBackStackChangedListener addOnBackStackChangedListener()}.</li>
+</ul>
+
+<p>For more information about these methods and others, refer to the {@link
+android.app.FragmentManager} class documentation.</p>
+
+<p>As demonstrated in the previous section, you can also use {@link android.app.FragmentManager}
+to open a {@link android.app.FragmentTransaction}, which allows you to perform transactions, such as
+add and remove fragments.</p>
+
+
+<h2 id="Transactions">Performing Fragment Transactions</h2>
+
+<p>A great feature about using fragments in your activity is the ability to add, remove, replace,
+and perform other actions with them, in response to user interaction. Each set of changes that you
+commit to the activity is called a transaction and you can perform one using APIs in {@link
+android.app.FragmentTransaction}. You can also save each transaction to a back stack managed by the
+activity, allowing the user to navigate backward through the fragment changes (similar to navigating
+backward through activities).</p>
+
+<p>You can acquire an instance of {@link android.app.FragmentTransaction} from the {@link
+android.app.FragmentManager} like this:</p>
+
+<pre>
+FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()};
+FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
+</pre>
+
+<p>Each transaction is a set of changes that you want to perform at the same time. You can set
+up all the changes you want to perform for a given transaction using methods such as {@link
+android.app.FragmentTransaction#add add()}, {@link android.app.FragmentTransaction#remove remove()},
+and {@link android.app.FragmentTransaction#replace replace()}. Then, to apply the transaction
+to the activity, you must call {@link android.app.FragmentTransaction#commit()}.</p>
+</dl>
+
+<p>Before you call {@link
+android.app.FragmentTransaction#commit()}, however, you might want to call {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()}, in order to add the transaction
+to a back stack of fragment transactions. This back stack is managed by the activity and allows
+the user to return to the previous fragment state, by pressing the <em>Back</em> button.</p>
+
+<p>For example, here's how you can replace one fragment with another, and preserve the previous
+state in the back stack:</p>
+
+<pre>
+// Create new fragment and transaction
+Fragment newFragment = new ExampleFragment();
+FragmentTransaction transaction = getFragmentManager().beginTransaction();
+
+// Replace whatever is in the fragment_container view with this fragment,
+// and add the transaction to the back stack
+transaction.replace(R.id.fragment_container, newFragment);
+transaction.addToBackStack(null);
+
+// Commit the transaction
+transaction.commit();
+</pre>
+
+<p>In this example, {@code newFragment} replaces whatever fragment (if any) is currently in the
+layout container identified by the {@code R.id.fragment_container} ID. By calling {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()}, the replace transaction is
+saved to the back stack so the user can reverse the transaction and bring back the
+previous fragment by pressing the <em>Back</em> button.</p>
+
+<p>If you add multiple changes to the transaction (such as another {@link
+android.app.FragmentTransaction#add add()} or {@link android.app.FragmentTransaction#remove
+remove()}) and call {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()}, then all changes applied
+before you call {@link android.app.FragmentTransaction#commit commit()} are added to the
+back stack as a single transaction and the <em>Back</em> button will reverse them all together.</p>
+
+<p>The order in which you add changes to a {@link android.app.FragmentTransaction} doesn't matter,
+except:</p>
+<ul>
+  <li>You must call {@link android.app.FragmentTransaction#commit()} last</li>
+  <li>If you're adding multiple fragments to the same container, then the order in which
+you add them determines the order they appear in the view hierarchy</li>
+</ul>
+
+<p>If you do not call {@link android.app.FragmentTransaction#addToBackStack(String)
+addToBackStack()} when you perform a transaction that removes a fragment, then that fragment is
+destroyed when the transaction is committed and the user cannot navigate back to it. Whereas, if you
+do call {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} when
+removing a fragment, then the fragment is <em>stopped</em> and will be resumed if the user navigates
+back.</p>
+
+<p class="note"><strong>Tip:</strong> For each fragment transaction, you can apply a transition
+animation, by calling {@link android.app.FragmentTransaction#setTransition setTransition()} before
+you commit.</p>
+
+<p>Calling {@link android.app.FragmentTransaction#commit()} does not perform the transaction
+immediately. Rather, it schedules it to run on the activity's UI thread (the "main" thread) as soon
+as the thread is able to do so. If necessary, however, you may call {@link
+android.app.FragmentManager#executePendingTransactions()} from your UI thread to immediately execute
+transactions submitted by {@link android.app.FragmentTransaction#commit()}. Doing so is
+usually not necessary unless the transaction is a dependency for jobs in other threads.</p>
+
+<p class="caution"><strong>Caution:</strong> You can commit a transaction using {@link
+android.app.FragmentTransaction#commit commit()} only prior to the activity <a
+href="{@docRoot}guide/components/activities.html#SavingActivityState">saving its
+state</a> (when the user leaves the activity). If you attempt to commit after that point, an
+exception will be thrown. This is because the state after the commit can be lost if the activity
+needs to be restored. For situations in which its okay that you lose the commit, use {@link
+android.app.FragmentTransaction#commitAllowingStateLoss()}.</p>
+
+
+
+
+<h2 id="CommunicatingWithActivity">Communicating with the Activity</h2>
+
+<p>Although a {@link android.app.Fragment} is implemented as an object that's independent from an
+{@link android.app.Activity} and can be used inside multiple activities, a given instance of
+a fragment is directly tied to the activity that contains it.</p>
+
+<p>Specifically, the fragment can access the {@link android.app.Activity} instance with {@link
+android.app.Fragment#getActivity()} and easily perform tasks such as find a view in the
+activity layout:</p>
+
+<pre>
+View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list);
+</pre>
+
+<p>Likewise, your activity can call methods in the fragment by acquiring a reference to the
+{@link android.app.Fragment} from {@link android.app.FragmentManager}, using {@link
+android.app.FragmentManager#findFragmentById findFragmentById()} or {@link
+android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. For example:</p>
+
+<pre>
+ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
+</pre>
+
+
+<h3 id="EventCallbacks">Creating event callbacks to the activity</h3>
+
+<p>In some cases, you might need a fragment to share events with the activity. A good way to do that
+is to define a callback interface inside the fragment and require that the host activity implement
+it. When the activity receives a callback through the interface, it can share the information with
+other fragments in the layout as necessary.</p>
+
+<p>For example, if a news application has two fragments in an activity&mdash;one to show a list of
+articles (fragment A) and another to display an article (fragment B)&mdash;then fragment A must tell
+the activity when a list item is selected so that it can tell fragment B to display the article. In
+this case, the {@code OnArticleSelectedListener} interface is declared inside fragment A:</p>
+
+<pre>
+public static class FragmentA extends ListFragment {
+    ...
+    // Container Activity must implement this interface
+    public interface OnArticleSelectedListener {
+        public void onArticleSelected(Uri articleUri);
+    }
+    ...
+}
+</pre>
+
+<p>Then the activity that hosts the fragment implements the {@code OnArticleSelectedListener}
+interface and
+overrides {@code onArticleSelected()} to notify fragment B of the event from fragment A. To ensure
+that the host activity implements this interface, fragment A's {@link
+android.app.Fragment#onAttach onAttach()} callback method (which the system calls when adding
+the fragment to the activity) instantiates an instance of {@code OnArticleSelectedListener} by
+casting the {@link android.app.Activity} that is passed into {@link android.app.Fragment#onAttach
+onAttach()}:</p>
+
+<pre>
+public static class FragmentA extends ListFragment {
+    OnArticleSelectedListener mListener;
+    ...
+    &#64;Override
+    public void onAttach(Activity activity) {
+        super.onAttach(activity);
+        try {
+            mListener = (OnArticleSelectedListener) activity;
+        } catch (ClassCastException e) {
+            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
+        }
+    }
+    ...
+}
+</pre>
+
+<p>If the activity has not implemented the interface, then the fragment throws a
+{@link java.lang.ClassCastException}.
+On success, the {@code mListener} member holds a reference to activity's implementation of 
+{@code OnArticleSelectedListener}, so that fragment A can share events with the activity by calling
+methods defined by the {@code OnArticleSelectedListener} interface. For example, if fragment A is an
+extension of {@link android.app.ListFragment}, each time
+the user clicks a list item, the system calls {@link android.app.ListFragment#onListItemClick
+onListItemClick()} in the fragment, which then calls {@code onArticleSelected()} to share
+the event with the activity:</p>
+
+<pre>
+public static class FragmentA extends ListFragment {
+    OnArticleSelectedListener mListener;
+    ...
+    &#64;Override
+    public void onListItemClick(ListView l, View v, int position, long id) {
+        // Append the clicked item's row ID with the content provider Uri
+        Uri noteUri = ContentUris.{@link android.content.ContentUris#withAppendedId withAppendedId}(ArticleColumns.CONTENT_URI, id);
+        // Send the event and Uri to the host activity
+        mListener.onArticleSelected(noteUri);
+    }
+    ...
+}
+</pre>
+
+<p>The {@code id} parameter passed to {@link
+android.app.ListFragment#onListItemClick onListItemClick()} is the row ID of the clicked item,
+which the activity (or other fragment) uses to fetch the article from the application's {@link
+android.content.ContentProvider}.</p>
+
+<p><!--To see a complete implementation of this kind of callback interface, see the <a
+href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->More information about
+using a content provider is available in the <a
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> document.</p>
+
+
+
+<h3 id="ActionBar">Adding items to the Action Bar</h3>
+
+<p>Your fragments can contribute menu items to the activity's <a
+href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a> (and, consequently, the <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>) by implementing
+{@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}. In order
+for this method to receive calls, however, you must call {@link
+android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()} during {@link
+android.app.Fragment#onCreate(Bundle) onCreate()}, to indicate that the fragment
+would like to add items to the Options Menu (otherwise, the fragment will not receive a call to
+{@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()}).</p>
+
+<p>Any items that you then add to the Options Menu from the fragment are appended to the existing
+menu items. The fragment also receives callbacks to {@link
+android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} when a menu item
+is selected.</p>
+
+<p>You can also register a view in your fragment layout to provide a context menu by calling {@link
+android.app.Fragment#registerForContextMenu(View) registerForContextMenu()}. When the user opens
+the context menu, the fragment receives a call to {@link
+android.app.Fragment#onCreateContextMenu(ContextMenu,View,ContextMenu.ContextMenuInfo)
+onCreateContextMenu()}. When the user selects an item, the fragment receives a call to {@link
+android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}.</p>
+
+<p class="note"><strong>Note:</strong> Although your fragment receives an on-item-selected callback
+for each menu item it adds, the activity is first to receive the respective callback when the user
+selects a menu item. If the activity's implementation of the on-item-selected callback does not
+handle the selected item, then the event is passed to the fragment's callback. This is true for
+the Options Menu and context menus.</p>
+
+<p>For more information about menus, see the <a
+href="{@docRoot}guide/topics/ui/menus.html">Menus</a> and <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guides.</p>
+
+
+
+
+<h2 id="Lifecycle">Handling the Fragment Lifecycle</h2>
+
+<div class="figure" style="width:350px">
+<img src="{@docRoot}images/activity_fragment_lifecycle.png" alt=""/>
+<p class="img-caption"><strong>Figure 3.</strong> The effect of the activity lifecycle on the fragment
+lifecycle.</p>
+</div>
+
+<p>Managing the lifecycle of a fragment is a lot like managing the lifecycle of an activity. Like
+an activity, a fragment can exist in three states:</p>
+
+<dl>
+  <dt><i>Resumed</i></dt>
+    <dd>The fragment is visible in the running activity.</dd>
+
+  <dt><i>Paused</i></dt>
+    <dd>Another activity is in the foreground and has focus, but the activity in which this
+fragment lives is still visible (the foreground activity is partially transparent or doesn't
+cover the entire screen).</dd>
+
+  <dt><i>Stopped</i></dt>
+    <dd>The fragment is not visible. Either the host activity has been stopped or the
+fragment has been removed from the activity but added to the back stack. A stopped fragment is
+still alive (all state and member information is retained by the system). However, it is no longer
+visible to the user and will be killed if the activity is killed.</dd>
+</dl>
+
+<p>Also like an activity, you can retain the state of a fragment using a {@link
+android.os.Bundle}, in case the activity's process is killed and you need to restore the
+fragment state when the activity is recreated. You can save the state during the fragment's {@link
+android.app.Fragment#onSaveInstanceState onSaveInstanceState()} callback and restore it during
+either {@link android.app.Fragment#onCreate onCreate()}, {@link
+android.app.Fragment#onCreateView onCreateView()}, or {@link
+android.app.Fragment#onActivityCreated onActivityCreated()}. For more information about saving
+state, see the <a
+href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
+document.</p>
+
+<p>The most significant difference in lifecycle between an activity and a fragment is how one is
+stored in its respective back stack. An activity is placed into a back stack of activities
+that's managed by the system when it's stopped, by default (so that the user can navigate back
+to it with the <em>Back</em> button, as discussed in <a
+href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>).
+However, a fragment is placed into a back stack managed by the host activity only when you
+explicitly request that the instance be saved by calling {@link
+android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} during a transaction that
+removes the fragment.</p>
+
+<p>Otherwise, managing the fragment lifecycle is very similar to managing the activity
+lifecycle. So, the same practices for <a
+href="{@docRoot}guide/components/activities.html#Lifecycle">managing the activity
+lifecycle</a> also apply to fragments. What you also need to understand, though, is how the life
+of the activity affects the life of the fragment.</p>
+
+
+<h3 id="CoordinatingWithActivity">Coordinating with the activity lifecycle</h3>
+
+<p>The lifecycle of the activity in which the fragment lives directly affects the lifecycle of the
+fragment, such that each lifecycle callback for the activity results in a similar callback for each
+fragment. For example, when the activity receives {@link android.app.Activity#onPause}, each
+fragment in the activity receives {@link android.app.Fragment#onPause}.</p>
+
+<p>Fragments have a few extra lifecycle callbacks, however, that handle unique interaction with the
+activity in order to perform actions such as build and destroy the fragment's UI. These additional
+callback methods are:</p>
+
+<dl>
+  <dt>{@link android.app.Fragment#onAttach onAttach()}</dt>
+    <dd>Called when the fragment has been associated with the activity (the {@link
+android.app.Activity} is passed in here).</dd>
+  <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
+    <dd>Called to create the view hierarchy associated with the fragment.</dd>
+  <dt>{@link android.app.Fragment#onActivityCreated onActivityCreated()}</dt>
+    <dd>Called when the activity's {@link android.app.Activity#onCreate
+onCreate()} method has returned.</dd>
+  <dt>{@link android.app.Fragment#onDestroyView onDestroyView()}</dt>
+    <dd>Called when the view hierarchy associated with the fragment is being removed.</dd>
+  <dt>{@link android.app.Fragment#onDetach onDetach()}</dt>
+    <dd>Called when the fragment is being disassociated from the activity.</dd>
+</dl>
+
+<p>The flow of a fragment's lifecycle, as it is affected by its host activity, is illustrated
+by figure 3. In this figure, you can see how each successive state of the activity determines which
+callback methods a fragment may receive. For example, when the activity has received its {@link
+android.app.Activity#onCreate onCreate()} callback, a fragment in the activity receives no more than
+the {@link android.app.Fragment#onActivityCreated onActivityCreated()} callback.</p>
+
+<p>Once the activity reaches the resumed state, you can freely add and remove fragments to the
+activity. Thus, only while the activity is in the resumed state can the lifecycle of a fragment
+change independently.</p>
+
+<p>However, when the activity leaves the resumed state, the fragment again is pushed through its
+lifecycle by the activity.</p>
+
+
+
+
+<h2 id="Example">Example</h2>
+
+<p>To bring everything discussed in this document together, here's an example of an activity
+using two fragments to create a two-pane layout. The activity below includes one fragment to
+show a list of Shakespeare play titles and another to show a summary of the play when selected
+from the list. It also demonstrates how to provide different configurations of the fragments,
+based on the screen configuration.</p>
+
+<p class="note"><strong>Note:</strong> The complete source code for this activity is available in
+<a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code
+FragmentLayout.java}</a>.</p>
+
+<p>The main activity applies a layout in the usual way, during {@link
+android.app.Activity#onCreate onCreate()}:</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java main}
+
+<p>The layout applied is {@code fragment_layout.xml}:</p>
+
+{@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout}
+
+<p>Using this layout, the system instantiates the {@code TitlesFragment} (which lists the play
+titles) as soon as the activity loads the layout, while the {@link android.widget.FrameLayout}
+(where the fragment for showing the play summary will go) consumes space on the right side of the
+screen, but remains empty at first. As you'll see below, it's not until the user selects an item
+from the list that a fragment is placed into the {@link android.widget.FrameLayout}.</p>
+
+<p>However, not all screen configurations are wide enough to show both the list of
+plays and the summary, side by side. So, the layout above is used only for the landscape
+screen configuration, by saving it at {@code res/layout-land/fragment_layout.xml}.</p>
+
+<p>Thus, when the screen is in portrait orientation, the system applies the following layout, which
+is saved at {@code res/layout/fragment_layout.xml}:</p>
+
+{@sample development/samples/ApiDemos/res/layout/fragment_layout.xml layout}
+
+<p>This layout includes only {@code TitlesFragment}. This means that, when the device is in
+portrait orientation, only the list of play titles is visible. So, when the user clicks a list
+item in this configuration, the application will start a new activity to show the summary,
+instead of loading a second fragment.</p>
+
+<p>Next, you can see how this is accomplished in the fragment classes. First is {@code
+TitlesFragment}, which shows the list of Shakespeare play titles. This fragment extends {@link
+android.app.ListFragment} and relies on it to handle most of the list view work.</p>
+
+<p>As you inspect this code, notice that there are two possible behaviors when the user clicks a
+list item: depending on which of the two layouts is active, it can either create and display a new
+fragment to show the details in the same activity (adding the fragment to the {@link
+android.widget.FrameLayout}), or start a new activity (where the fragment can be shown).</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java titles}
+
+<p>The second fragment, {@code DetailsFragment} shows the play summary for the item selected from
+the list from {@code TitlesFragment}:</p>
+ 
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details}
+
+<p>Recall from the {@code TitlesFragment} class, that, if the user clicks a list item and the
+current layout does <em>not</em> include the {@code R.id.details} view (which is where the
+{@code DetailsFragment} belongs), then the application starts the {@code DetailsActivity}
+activity to display the content of the item.</p>
+
+<p>Here is the {@code DetailsActivity}, which simply embeds the {@code DetailsFragment} to display
+the selected play summary when the screen is in portrait orientation:</p>
+
+{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java
+details_activity}
+ 
+<p>Notice that this activity finishes itself if the configuration is landscape, so that the main
+activity can take over and display the {@code DetailsFragment} alongside the {@code TitlesFragment}.
+This can happen if the user begins the {@code DetailsActivity} while in portrait orientation, but
+then rotates to landscape (which restarts the current activity).</p>
+
+
+<p>For more samples using fragments (and complete source files for this example),
+see the sample code available in <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
+ApiDemos</a> (available for download from the <a
+href="{@docRoot}resources/samples/get.html">Samples SDK component</a>).</p>
+
+
diff --git a/docs/html/guide/components/fundamentals.jd b/docs/html/guide/components/fundamentals.jd
new file mode 100644
index 0000000..1717782
--- /dev/null
+++ b/docs/html/guide/components/fundamentals.jd
@@ -0,0 +1,518 @@
+page.title=Application Fundamentals
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+<ul>
+  <li>Android applications are composed of one or more application components (activities,
+services, content providers, and broadcast receivers)</li>
+  <li>Each component performs a different role in the overall application behavior, and each
+one can be activated individually (even by other applications)</li>
+  <li>The manifest file must declare all components in the application and should also declare
+all application requirements, such as the minimum version of Android required and any hardware
+configurations required</li>
+  <li>Non-code application resources (images, strings, layout files, etc.) should include
+alternatives for different device configurations (such as different strings for different
+languages and different layouts for different screen sizes)</li>
+</ul>
+
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#Components">Application Components</a>
+  <ol>
+    <li><a href="#ActivatingComponents">Activating components</a></li>
+  </ol>
+</li>
+<li><a href="#Manifest">The Manifest File</a>
+  <ol>
+    <li><a href="#DeclaringComponents">Declaring components</a></li>
+    <li><a href="#DeclaringRequirements">Declaring application requirements</a></li>
+  </ol>
+</li>
+<li><a href="#Resources">Application Resources</a></li>
+</ol>
+</div>
+</div>
+
+<p>Android applications are written in the Java programming language. The Android SDK tools compile
+the code&mdash;along with any data and resource files&mdash;into an <i>Android package</i>, an
+archive file with an {@code .apk} suffix. All the code in a single {@code .apk} file is considered
+to be one application and is the file that Android-powered devices use to install the
+application.</p>
+
+<p>Once installed on a device, each Android application lives in its own security sandbox: </p>
+
+<ul>
+ <li>The Android operating system is a multi-user Linux system in which each application is a
+different user.</li>
+
+<li>By default, the system assigns each application a unique Linux user ID (the ID is used only by
+the system and is unknown to the application). The system sets permissions for all the files in an
+application so that only the user ID assigned to that application can access them. </li>
+
+<li>Each process has its own virtual machine (VM), so an application's code runs in isolation from
+other applications.</li>
+
+<li>By default, every application runs in its own Linux process. Android starts the process when any
+of the application's components need to be executed, then shuts down the process when it's no longer
+needed or when the system must recover memory for other applications.</li>
+</ul>
+
+<p>In this way, the Android system implements the <em>principle of least privilege</em>. That is,
+each application, by default, has access only to the components that it requires to do its work and
+no more. This creates a very secure environment in which an application cannot access parts of
+the system for which it is not given permission.</p>
+
+<p>However, there are ways for an application to share data with other applications and for an
+application to access system services:</p>
+
+<ul>
+  <li>It's possible to arrange for two applications to share the same Linux user ID, in which case
+they are able to access each other's files.  To conserve system resources, applications with the
+same user ID can also arrange to run in the same Linux process and share the same VM (the
+applications must also be signed with the same certificate).</li>
+  <li>An application can request permission to access device data such as the user's
+contacts, SMS messages, the mountable storage (SD card), camera, Bluetooth, and more. All
+application permissions must be granted by the user at install time.</li>
+</ul>
+
+<p>That covers the basics regarding how an Android application exists within the system. The rest of
+this document introduces you to:</p>
+<ul>
+  <li>The core framework components that define your application.</li>
+  <li>The manifest file in which you declare components and required device features for your
+application.</li>
+  <li>Resources that are separate from the application code and allow your application to
+gracefully optimize its behavior for a variety of device configurations.</li>
+</ul>
+
+<!--
+<p class="note"><strong>Tip:</strong> If you're new to Android development, we suggest that you
+follow the Beginner's Path link at the bottom of this page. For each document in the Application
+Fundamentals, the Beginner's Path points you to the document we suggest you read next, in order
+to get up to speed on the core Android concepts.</p>
+-->
+
+
+<h2 id="Components">Application Components</h2>
+
+<p>Application components are the essential building blocks of an Android application. Each
+component is a different point through which the system can enter your application. Not all
+components are actual entry points for the user and some depend on each other, but each one exists
+as its own entity and plays a specific role&mdash;each one is a unique building block that
+helps define your application's overall behavior.</p>
+
+<p>There are four different types of application components. Each type serves a distinct purpose
+and has a distinct lifecycle that defines how the component is created and destroyed.</p>
+
+<p>Here are the four types of application components:</p>
+
+<dl>
+
+<dt><b>Activities</b></dt>
+
+<dd>An <i>activity</i> represents a single screen with a user interface. For example,
+an email application might have one activity that shows a list of new
+emails, another activity to compose an email, and another activity for reading emails. Although
+the activities work together to form a cohesive user experience in the email application, each one
+is independent of the others. As such, a different application can start any one of these
+activities (if the email application allows it). For example, a camera application can start the
+activity in the email application that composes new mail, in order for the user to share a picture.
+
+<p>An activity is implemented as a subclass of {@link android.app.Activity} and you can learn more
+about it in the <a href="{@docRoot}guide/components/activities.html">Activities</a>
+developer guide.</p>
+</dd>
+
+
+<dt><b>Services</b></dt>
+
+<dd>A <i>service</i> is a component that runs in the background to perform long-running
+operations or to perform work for remote processes. A service
+does not provide a user interface. For example, a service might play music in the background while
+the user is in a different application, or it might fetch data over the network without
+blocking user interaction with an activity. Another component, such as an activity, can start the
+service and let it run or bind to it in order to interact with it.
+
+<p>A service is implemented as a subclass of {@link android.app.Service} and you can learn more
+about it in the <a href="{@docRoot}guide/components/services.html">Services</a> developer
+guide.</p>
+</dd>
+
+
+<dt><b>Content providers</b></dt>
+
+<dd>A <i>content provider</i> manages a shared set of application data. You can store the data in
+the file system, an SQLite database, on the web, or any other persistent storage location your
+application can access. Through the content provider, other applications can query or even modify
+the data (if the content provider allows it). For example, the Android system provides a content
+provider that manages the user's contact information. As such, any application with the proper
+permissions can query part of the content provider (such as {@link
+android.provider.ContactsContract.Data}) to read and write information about a particular person.
+
+<p>Content providers are also useful for reading and writing data that is private to your
+application and not shared. For example, the <a
+href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample application uses a
+content provider to save notes.</p>
+
+<p>A content provider is implemented as a subclass of {@link android.content.ContentProvider}
+and must implement a standard set of APIs that enable other applications to perform
+transactions. For more information, see the <a
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> developer
+guide.</p>
+</dd>
+
+
+<dt><b>Broadcast receivers</b></dt>
+
+<dd>A <i>broadcast receiver</i> is a component that responds to system-wide broadcast
+announcements.  Many broadcasts originate from the system&mdash;for example, a broadcast announcing
+that the screen has turned off, the battery is low, or a picture was captured.
+Applications can also initiate broadcasts&mdash;for example, to let other applications know that
+some data has been downloaded to the device and is available for them to use. Although broadcast
+receivers don't display a user interface, they may <a
+href="{@docRoot}guide/topics/ui/notifiers/notifications.html">create a status bar notification</a>
+to alert the user when a broadcast event occurs. More commonly, though, a broadcast receiver is
+just a "gateway" to other components and is intended to do a very minimal amount of work. For
+instance, it might initiate a service to perform some work based on the event.
+
+<p>A broadcast receiver is implemented as a subclass of {@link android.content.BroadcastReceiver}
+and each broadcast is delivered as an {@link android.content.Intent} object. For more information,
+see the {@link android.content.BroadcastReceiver} class.</p>
+</dd>
+
+</dl>
+
+
+
+<p>A unique aspect of the Android system design is that any application can start another
+application’s component. For example, if you want the user to capture a
+photo with the device camera, there's probably another application that does that and your
+application can use it, instead of developing an activity to capture a photo yourself. You don't
+need to incorporate or even link to the code from the camera application.
+Instead, you can simply start the activity in the camera application that captures a
+photo. When complete, the photo is even returned to your application so you can use it. To the user,
+it seems as if the camera is actually a part of your application.</p>
+
+<p>When the system starts a component, it starts the process for that application (if it's not
+already running) and instantiates the classes needed for the component. For example, if your
+application starts the activity in the camera application that captures a photo, that activity
+runs in the process that belongs to the camera application, not in your application's process.
+Therefore, unlike applications on most other systems, Android applications don't have a single entry
+point (there's no {@code main()} function, for example).</p>
+
+<p>Because the system runs each application in a separate process with file permissions that
+restrict access to other applications, your application cannot directly activate a component from
+another application. The Android system, however, can. So, to activate a component in
+another application, you must deliver a message to the system that specifies your <em>intent</em> to
+start a particular component. The system then activates the component for you.</p>
+
+
+<h3 id="ActivatingComponents">Activating Components</h3>
+
+<p>Three of the four component types&mdash;activities, services, and
+broadcast receivers&mdash;are activated by an asynchronous message called an <em>intent</em>.
+Intents bind individual components to each other at runtime (you can think of them
+as the messengers that request an action from other components), whether the component belongs
+to your application or another.</p>
+
+<p>An intent is created with an {@link android.content.Intent} object, which defines a message to
+activate either a specific component or a specific <em>type</em> of component&mdash;an intent
+can be either explicit or implicit, respectively.</p>
+
+<p>For activities and services, an intent defines the action to perform (for example, to "view" or
+"send" something) and may specify the URI of the data to act on (among other things that the
+component being started might need to know). For example, an intent might convey a request for an
+activity to show an image or to open a web page. In some cases, you can start an
+activity to receive a result, in which case, the activity also returns
+the result in an {@link android.content.Intent} (for example, you can issue an intent to let
+the user pick a personal contact and have it returned to you&mdash;the return intent includes a
+URI pointing to the chosen contact).</p>
+
+<p>For broadcast receivers, the intent simply defines the
+announcement being broadcast (for example, a broadcast to indicate the device battery is low
+includes only a known action string that indicates "battery is low").</p>
+
+<p>The other component type, content provider, is not activated by intents. Rather, it is
+activated when targeted by a request from a {@link android.content.ContentResolver}. The content
+resolver handles all direct transactions with the content provider so that the component that's
+performing transactions with the provider doesn't need to and instead calls methods on the {@link
+android.content.ContentResolver} object. This leaves a layer of abstraction between the content
+provider and the component requesting information (for security).</p>
+
+<p>There are separate methods for activating each type of component:</p>
+<ul>
+  <li>You can start an activity (or give it something new to do) by
+passing an {@link android.content.Intent} to {@link android.content.Context#startActivity
+startActivity()} or {@link android.app.Activity#startActivityForResult startActivityForResult()}
+(when you want the activity to return a result).</li>
+  <li>You can start a service (or give new instructions to an ongoing service) by
+passing an {@link android.content.Intent} to {@link android.content.Context#startService
+startService()}. Or you can bind to the service by passing an {@link android.content.Intent} to
+{@link android.content.Context#bindService bindService()}.</li>
+  <li>You can initiate a broadcast by passing an {@link android.content.Intent} to methods like
+{@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}, {@link
+android.content.Context#sendOrderedBroadcast(Intent, String) sendOrderedBroadcast()}, or {@link
+android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</li>
+  <li>You can perform a query to a content provider by calling {@link
+android.content.ContentProvider#query query()} on a {@link android.content.ContentResolver}.</li>
+</ul>
+
+<p>For more information about using intents, see the <a
+href="{@docRoot}guide/components/intents-filters.html">Intents and
+Intent Filters</a> document. More information about activating specific components is also provided
+in the following documents: <a
+href="{@docRoot}guide/components/activities.html">Activities</a>, <a
+href="{@docRoot}guide/components/services.html">Services</a>, {@link
+android.content.BroadcastReceiver} and <a
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.</p>
+
+
+<h2 id="Manifest">The Manifest File</h2>
+
+<p>Before the Android system can start an application component, the system must know that the
+component exists by reading the application's {@code AndroidManifest.xml} file (the "manifest"
+file). Your application must declare all its components in this file, which must be at the root of
+the application project directory.</p>
+
+<p>The manifest does a number of things in addition to declaring the application's components,
+such as:</p>
+<ul>
+  <li>Identify any user permissions the application requires, such as Internet access or
+read-access to the user's contacts.</li>
+  <li>Declare the minimum <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a>
+required by the application, based on which APIs the application uses.</li>
+  <li>Declare hardware and software features used or required by the application, such as a camera,
+bluetooth services, or a multitouch screen.</li>
+  <li>API libraries the application needs to be linked against (other than the Android framework
+APIs), such as the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps
+library</a>.</li>
+  <li>And more</li>
+</ul>
+
+
+<h3 id="DeclaringComponents">Declaring components</h3>
+
+<p>The primary task of the manifest is to inform the system about the application's components. For
+example, a manifest file can declare an activity as follows: </p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest ... &gt;
+    &lt;application android:icon="@drawable/app_icon.png" ... &gt;
+        &lt;activity android:name="com.example.project.ExampleActivity"
+                  android:label="@string/example_label" ... &gt;
+        &lt;/activity&gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;</pre>
+
+<p>In the <code><a
+href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
+element, the {@code android:icon} attribute points to resources for an icon that identifies the
+application.</p>
+
+<p>In the <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> element,
+the {@code android:name} attribute specifies the fully qualified class name of the {@link
+android.app.Activity} subclass and the {@code android:label} attributes specifies a string
+to use as the user-visible label for the activity.</p>
+
+<p>You must declare all application components this way:</p>
+<ul>
+  <li><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> elements
+for activities</li>
+  <li><code><a
+href="{@docRoot}guide/topics/manifest/service-element.html">&lt;service&gt;</a></code> elements for
+services</li>
+  <li><code><a
+href="{@docRoot}guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></code> elements
+for broadcast receivers</li>
+  <li><code><a
+href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code> elements
+for content providers</li>
+</ul>
+
+<p>Activities, services, and content providers that you include in your source but do not declare
+in the manifest are not visible to the system and, consequently, can never run.  However,
+broadcast
+receivers can be either declared in the manifest or created dynamically in code (as
+{@link android.content.BroadcastReceiver} objects) and registered with the system by calling
+{@link android.content.Context#registerReceiver registerReceiver()}.</p>
+
+<p>For more about how to structure the manifest file for your application, see the <a
+href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>
+documentation. </p>
+
+
+
+<h3 id="DeclaringComponentCapabilities">Declaring component capabilities</h3>
+
+<p>As discussed above, in <a href="#ActivatingComponents">Activating Components</a>, you can use an
+{@link android.content.Intent} to start activities, services, and broadcast receivers. You can do so
+by explicitly naming the target component (using the component class name) in the intent. However,
+the real power of intents lies in the concept of intent actions. With intent actions, you simply
+describe the type of action you want to perform (and optionally, the data upon which you’d like to
+perform the action) and allow the system to find a component on the device that can perform the
+action and start it. If there are multiple components that can perform the action described by the
+intent, then the user selects which one to use.</p>
+
+<p>The way the system identifies the components that can respond to an intent is by comparing the
+intent received to the <i>intent filters</i> provided in the manifest file of other applications on
+the device.</p>
+
+<p>When you declare a component in your application's manifest, you can optionally include
+intent filters that declare the capabilities of the component so it can respond to intents
+from other applications. You can declare an intent filter for your component by
+adding an <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
+&lt;intent-filter&gt;}</a> element as a child of the component's declaration element.</p>
+
+<p>For example, an email application with an activity for composing a new email might declare an
+intent filter in its manifest entry to respond to "send" intents (in order to send email). An
+activity in your application can then create an intent with the “send” action ({@link
+android.content.Intent#ACTION_SEND}), which the system matches to the email application’s “send”
+activity and launches it when you invoke the intent with {@link android.app.Activity#startActivity
+startActivity()}.</p>
+
+<p>For more about creating intent filters, see the <a
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> document.
+</p>
+
+
+
+<h3 id="DeclaringRequirements">Declaring application requirements</h3>
+
+<p>There are a variety of devices powered by Android and not all of them provide the
+same features and capabilities. In order to prevent your application from being installed on devices
+that lack features needed by your application, it's important that you clearly define a profile for
+the types of devices your application supports by declaring device and software requirements in your
+manifest file. Most of these declarations are informational only and the system does not read
+them, but external services such as Google Play do read them in order to provide filtering
+for users when they search for applications from their device.</p>
+
+<p>For example, if your application requires a camera and uses APIs introduced in Android 2.1 (<a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> 7), you should declare these as
+requirements in your manifest file. That way, devices that do <em>not</em> have a camera and have an
+Android version <em>lower</em> than 2.1 cannot install your application from Google Play.</p>
+
+<p>However, you can also declare that your application uses the camera, but does not
+<em>require</em> it. In that case, your application must perform a check at runtime to determine
+if the device has a camera and disable any features that use the camera if one is not available.</p>
+
+<p>Here are some of the important device characteristics that you should consider as you design and
+develop your application:</p>
+
+<dl>
+  <dt>Screen size and density</dt>
+  <dd>In order to categorize devices by their screen type, Android defines two characteristics for
+each device: screen size (the physical dimensions of the screen) and screen density (the physical
+density of the pixels on the screen, or dpi&mdash;dots per inch). To simplify all the different
+types of screen configurations, the Android system generalizes them into select groups that make
+them easier to target.
+<p>The screen sizes are: small, normal, large, and extra large.<br/>
+The screen densities are: low density, medium density, high density, and extra high density.</p>
+
+<p>By default, your application is compatible with all screen sizes and densities,
+because the Android system makes the appropriate adjustments to your UI layout and image
+resources. However, you should create specialized layouts for certain screen sizes and provide
+specialized images for certain densities, using alternative layout resources, and by declaring in
+your manifest exactly which screen sizes your application supports with the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> element.</p>
+<p>For more information, see the <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>
+document.</p></dd>
+
+  <dt>Input configurations</dt>
+  <dd>Many devices provide a different type of user input mechanism, such as a hardware keyboard, a
+trackball, or a five-way navigation pad. If your application requires a particular kind of input
+hardware, then you should declare it in your manifest with the <a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
+&lt;uses-configuration&gt;}</a> element. However, it is rare that an application should require
+a certain input configuration.</dd>
+
+  <dt>Device features</dt>
+  <dd>There are many hardware and software features that may or may not exist on a given
+Android-powered device, such as a camera, a light sensor, bluetooth, a certain
+version of OpenGL, or the fidelity of the touchscreen. You should never assume that a certain
+feature is available on all Android-powered devices (other than the availability of the standard
+Android library), so you should declare any features used by your application with the <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
+element.</dd>
+
+  <dt>Platform Version</dt>
+  <dd>Different Android-powered devices often run different versions of the Android platform,
+such as Android 1.6 or Android 2.3. Each successive version often includes additional APIs not
+available in the previous version. In order to indicate which set of APIs are available, each
+platform version specifies an <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> (for example, Android 1.0 is API Level
+1 and Android 2.3 is API Level 9). If you use any APIs that were added to the platform after
+version 1.0, you should declare the minimum API Level in which those APIs were introduced using the
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
+element.</dd>
+</dl>
+
+<p>It's important that you declare all such requirements for your application, because, when you
+distribute your application on Google Play, the store uses these declarations to filter which
+applications are available on each device. As such, your application should be available only to
+devices that meet all your application requirements.</p>
+
+<p>For more information about how Google Play filters applications based on these (and other)
+requirements, see the <a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>
+document.</p>
+
+
+
+<h2 id="Resources">Application Resources</h2>
+
+<p>An Android application is composed of more than just code&mdash;it requires resources that are
+separate from the source code, such as images, audio files, and anything relating to the visual
+presentation of the application. For example, you should define animations, menus, styles, colors,
+and the layout of activity user interfaces with XML files. Using application resources makes it easy
+to update various characteristics of your application without modifying code and&mdash;by providing
+sets of alternative resources&mdash;enables you to optimize your application for a  variety of
+device configurations (such as different languages and screen sizes).</p>
+
+<p>For every resource that you include in your Android project, the SDK build tools define a unique
+integer ID, which you can use to reference the resource from your application code or from
+other resources defined in XML. For example, if your application contains an image file named {@code
+logo.png} (saved in the {@code res/drawable/} directory), the SDK tools generate a resource ID
+named {@code R.drawable.logo}, which you can use to reference the image and insert it in your
+user interface.</p>
+
+<p>One of the most important aspects of providing resources separate from your source code
+is the ability for you to provide alternative resources for different device
+configurations. For example, by defining UI strings in XML, you can translate the strings into other
+languages and save those strings in separate files. Then, based on a language <em>qualifier</em>
+that you append to the resource directory's name (such as {@code res/values-fr/} for French string
+values) and the user's language setting, the Android system applies the appropriate language strings
+to your UI.</p>
+
+<p>Android supports many different <em>qualifiers</em> for your alternative resources. The
+qualifier is a short string that you include in the name of your resource directories in order to
+define the device configuration for which those resources should be used. As another
+example, you should often create different layouts for your activities, depending on the
+device's screen orientation and size. For example, when the device screen is in portrait
+orientation (tall), you might want a layout with buttons to be vertical, but when the screen is in
+landscape orientation (wide), the buttons should be aligned horizontally. To change the layout
+depending on the orientation, you can define two different layouts and apply the appropriate
+qualifier to each layout's directory name. Then, the system automatically applies the appropriate
+layout depending on the current device orientation.</p>
+
+<p>For more about the different kinds of resources you can include in your application and how
+to create alternative resources for various device configurations, see the <a
+href="{@docRoot}guide/topics/resources/index.html">Application Resources</a> developer guide.</p>
+
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For a close look at implementing activities&mdash;the components your users use to
+interact with your application&mdash;continue with the <b><a
+href="{@docRoot}guide/components/activities.html">Activities</a></b> document.</p>
+-->
diff --git a/docs/html/guide/components/index.jd b/docs/html/guide/components/index.jd
new file mode 100644
index 0000000..87bae53
--- /dev/null
+++ b/docs/html/guide/components/index.jd
@@ -0,0 +1,56 @@
+page.title=App Components
+page.landing=true
+page.landing.intro=Android's application framework lets you create extremely rich and innovative apps using a set of reusable components. This section explains how Android apps work and how you use components to build them. 
+page.landing.image=images/develop/app_components.png
+
+@jd:body
+
+<div class="landing-docs">
+
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
+      <h4>Using DialogFragments</h4>
+      <p>In this post, I’ll show how to use DialogFragments with the v4 support library (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and return a result to the calling Activity using an interface.</p>
+    </a>
+
+    <a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">
+      <h4>Fragments For All</h4>
+      <p>Today we’ve released a static library that exposes the same Fragments API (as well as the new LoaderManager and a few other classes) so that applications compatible with Android 1.6 or later can use fragments to create tablet-compatible user interfaces. </p>
+    </a>
+    
+    <a
+href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
+      <h4>Multithreading for Performance</h4>
+      <p>A good practice in creating responsive applications is to make sure your main UI thread
+does the minimum amount of work. Any potentially long task that may hang your application should be
+handled in a different thread.</p>
+    </a>
+  </div>
+
+  <div class="col-6">
+    <h3>Training</h3>
+    
+    <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
+      <h4>Managing the Activity Lifecycle</h4>
+      <p>This class explains important lifecycle callback methods that each Activity
+      instance receives and how you can use them so your activity does what the user expects and does not consume system
+      resources when your activity doesn't need them.</p>
+    </a>
+
+    <a href="http://developer.android.com/training/basics/fragments/index.html">
+      <h4>Building a Dynamic UI with Fragments</h4>
+      <p>This class shows you how to create a dynamic user experience with fragments and optimize
+your app's user experience for devices with different screen sizes, all while continuing to support
+devices running versions as old as Android 1.6.</p>
+    </a>
+
+    <a href="http://developer.android.com/training/sharing/index.html">
+      <h4>Sharing Content</h4>
+      <p>This class covers some common ways you can send and receive content between
+      applications using Intent APIs and the ActionProvider object.</p>
+    </a>
+  </div>
+
+</div>
diff --git a/docs/html/guide/topics/intents/intents-filters.jd b/docs/html/guide/components/intents-filters.jd
similarity index 100%
rename from docs/html/guide/topics/intents/intents-filters.jd
rename to docs/html/guide/components/intents-filters.jd
diff --git a/docs/html/guide/topics/fundamentals/loaders.jd b/docs/html/guide/components/loaders.jd
similarity index 100%
rename from docs/html/guide/topics/fundamentals/loaders.jd
rename to docs/html/guide/components/loaders.jd
diff --git a/docs/html/guide/components/processes-and-threads.jd b/docs/html/guide/components/processes-and-threads.jd
new file mode 100644
index 0000000..07a2667
--- /dev/null
+++ b/docs/html/guide/components/processes-and-threads.jd
@@ -0,0 +1,424 @@
+page.title=Processes and Threads
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Quickview</h2>
+<ul>
+  <li>Every application runs in its own process and all components of the application run in that
+process, by default</li>
+  <li>Any slow, blocking operations in an activity should be done in a new thread, to avoid slowing
+down the user interface</li>
+</ul>
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#Processes">Processes</a>
+  <ol>
+    <li><a href="#Lifecycle">Process lifecycle</a></li>
+  </ol>
+</li>
+<li><a href="#Threads">Threads</a>
+  <ol>
+    <li><a href="#WorkerThreads">Worker threads</a></li>
+    <li><a href="#ThreadSafe">Thread-safe methods</a></li>
+  </ol>
+</li>
+<li><a href="#IPC">Interprocess Communication</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>When an application component starts and the application does not have any other components
+running, the Android system starts a new Linux process for the application with a single thread of
+execution. By default, all components of the same application run in the same process and thread
+(called the "main" thread). If an application component starts and there already exists a process
+for that application (because another component from the application exists), then the component is
+started within that process and uses the same thread of execution. However, you can arrange for
+different components in your application to run in separate processes, and you can create additional
+threads for any process.</p>
+
+<p>This document discusses how processes and threads work in an Android application.</p>
+
+
+<h2 id="Processes">Processes</h2>
+
+<p>By default, all components of the same application run in the same process and most applications
+should not change this. However, if you find that you need to control which process a certain
+component belongs to, you can do so in the manifest file.</p>
+
+<p>The manifest entry for each type of component element&mdash;<a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
+&lt;service&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code
+&lt;receiver&gt;}</a>, and <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
+&lt;provider&gt;}</a>&mdash;supports an {@code android:process} attribute that can specify a
+process in which that component should run. You can set this attribute so that each component runs
+in its own process or so that some components share a process while others do not.  You can also set
+{@code android:process} so that components of different applications run in the same
+process&mdash;provided that the applications share the same Linux user ID and are signed with the
+same certificates.</p>
+
+<p>The <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
+&lt;application&gt;}</a> element also supports an {@code android:process} attribute, to set a
+default value that applies to all components.</p>
+
+<p>Android might decide to shut down a process at some point, when memory is low and required by
+other processes that are more immediately serving the user. Application
+components running in the process that's killed are consequently destroyed.  A process is started
+again for those components when there's again work for them to do.</p>
+
+<p>When deciding which processes to kill, the Android system weighs their relative importance to
+the user.  For example, it more readily shuts down a process hosting activities that are no longer
+visible on screen, compared to a process hosting visible activities. The decision whether to
+terminate a process, therefore, depends on the state of the components running in that process. The
+rules used to decide which processes to terminate is discussed below. </p>
+
+
+<h3 id="Lifecycle">Process lifecycle</h3>
+
+<p>The Android system tries to maintain an application process for as long as possible, but
+eventually needs to remove old processes to reclaim memory for new or more important processes.  To
+determine which processes to keep
+and which to kill, the system places each process into an "importance hierarchy" based on the
+components running in the process and the state of those components.  Processes with the lowest
+importance are eliminated first, then those with the next lowest importance, and so on, as necessary
+to recover system resources.</p>
+
+<p>There are five levels in the importance hierarchy. The following list presents the different
+types of processes in order of importance (the first process is <em>most important</em> and is
+<em>killed last</em>):</p>
+
+<ol>
+  <li><b>Foreground process</b>
+    <p>A process that is required for what the user is currently doing.  A
+      process is considered to be in the foreground if any of the following conditions are true:</p>
+
+      <ul>
+        <li>It hosts an {@link android.app.Activity} that the user is interacting with (the {@link
+android.app.Activity}'s {@link android.app.Activity#onResume onResume()} method has been
+called).</li>
+
+        <li>It hosts a {@link android.app.Service} that's bound to the activity that the user is
+interacting with.</li>
+
+        <li>It hosts a {@link android.app.Service} that's running "in the foreground"&mdash;the
+service has called {@link android.app.Service#startForeground startForeground()}.
+
+        <li>It hosts a {@link android.app.Service} that's executing one of its lifecycle
+callbacks ({@link android.app.Service#onCreate onCreate()}, {@link android.app.Service#onStart
+onStart()}, or {@link android.app.Service#onDestroy onDestroy()}).</li>
+
+        <li>It hosts a {@link android.content.BroadcastReceiver} that's executing its {@link
+        android.content.BroadcastReceiver#onReceive onReceive()} method.</li>
+    </ul>
+
+    <p>Generally, only a few foreground processes exist at any given time.  They are killed only as
+a last resort&mdash;if memory is so low that they cannot all continue to run.  Generally, at that
+point, the device has reached a memory paging state, so killing some foreground processes is
+required to keep the user interface responsive.</p></li>
+
+  <li><b>Visible process</b>
+    <p>A process that doesn't have any foreground components, but still can
+      affect what the user sees on screen. A process is considered to be visible if either of the
+      following conditions are true:</p>
+
+      <ul>
+        <li>It hosts an {@link android.app.Activity} that is not in the foreground, but is still
+visible to the user (its {@link android.app.Activity#onPause onPause()} method has been called). 
+This might occur, for example, if the foreground activity started a dialog, which allows the
+previous activity to be seen behind it.</li>
+
+        <li>It hosts a {@link android.app.Service} that's bound to a visible (or foreground)
+activity.</li>
+      </ul>
+
+      <p>A visible process is considered extremely important and will not be killed unless doing so
+is required to keep all foreground processes running. </p>
+    </li>
+
+  <li><b>Service process</b>
+    <p>A process that is running a service that has been started with the {@link
+android.content.Context#startService startService()} method and does not fall into either of the two
+higher categories. Although service processes are not directly tied to anything the user sees, they
+are generally doing things that the user cares about (such as playing music in the background or
+downloading  data on the network), so the system keeps them running unless there's not enough memory
+to retain them along with all foreground and visible processes. </p>
+  </li>
+
+  <li><b>Background process</b>
+    <p>A process holding an activity that's not currently visible to the user  (the activity's
+{@link android.app.Activity#onStop onStop()} method has been called). These processes have no direct
+impact on the user experience, and the system can kill them at any time to reclaim memory for a
+foreground,
+visible, or service process. Usually there are many background processes running, so they are kept
+in an LRU (least recently used) list to ensure that the process with the activity that was most
+recently seen by the user is the last to be killed. If an activity implements its lifecycle methods
+correctly, and saves its current state, killing its process will not have a visible effect on
+the user experience, because when the user navigates back to the activity, the activity restores
+all of its visible state. See the <a
+href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
+document for information about saving and restoring state.</p>
+  </li>
+
+  <li><b>Empty process</b>
+    <p>A process that doesn't hold any active application components.  The only reason to keep this
+kind of process alive is for caching purposes, to improve startup time the next time a component
+needs to run in it.  The system often kills these processes in order to balance overall system
+resources between process caches and the underlying kernel caches.</p>
+  </li>
+</ol>
+
+
+  <p>Android ranks a process at the highest level it can, based upon the importance of the
+components currently active in the process.  For example, if a process hosts a service and a visible
+activity, the process is ranked as a visible process, not a service process.</p>
+
+  <p>In addition, a process's ranking might be increased because other processes are dependent on
+it&mdash;a process that is serving another process can never be ranked lower than the process it is
+serving. For example, if a content provider in process A is serving a client in process B, or if a
+service in process A is bound to a component in process B, process A is always considered at least
+as important as process B.</p>
+
+  <p>Because a process running a service is ranked higher than a process with background activities,
+an activity that initiates a long-running operation might do well to start a <a
+href="{@docRoot}guide/components/services.html">service</a> for that operation, rather than
+simply create a worker thread&mdash;particularly if the operation will likely outlast the activity.
+For example, an activity that's uploading a picture to a web site should start a service to perform
+the upload so that the upload can continue in the background even if the user leaves the activity.
+Using a service guarantees that the operation will have at least "service process" priority,
+regardless of what happens to the activity. This is the same reason that broadcast receivers should
+employ services rather than simply put time-consuming operations in a thread.</p>
+
+
+
+
+<h2 id="Threads">Threads</h2>
+
+<p>When an application is launched, the system creates a thread of execution for the application,
+called "main." This thread is very important because it is in charge of dispatching events to
+the appropriate user interface widgets, including drawing events. It is also the thread in which
+your application interacts with components from the Android UI toolkit (components from the {@link
+android.widget} and {@link android.view} packages). As such, the main thread is also sometimes
+called the UI thread.</p>
+
+<p>The system does <em>not</em> create a separate thread for each instance of a component. All
+components that run in the same process are instantiated in the UI thread, and system calls to
+each component are dispatched from that thread. Consequently, methods that respond to system
+callbacks (such as {@link android.view.View#onKeyDown onKeyDown()} to report user actions
+or a lifecycle callback method) always run in the UI thread of the process.</p>
+
+<p>For instance, when the user touches a button on the screen, your app's UI thread dispatches the
+touch event to the widget, which in turn sets its pressed state and posts an invalidate request to
+the event queue. The UI thread dequeues the request and notifies the widget that it should redraw
+itself.</p>
+
+<p>When your app performs intensive work in response to user interaction, this single thread model
+can yield poor performance unless you implement your application properly. Specifically, if
+everything is happening in the UI thread, performing long operations such as network access or
+database queries will block the whole UI. When the thread is blocked, no events can be dispatched,
+including drawing events. From the user's perspective, the
+application appears to hang. Even worse, if the UI thread is blocked for more than a few seconds
+(about 5 seconds currently) the user is presented with the infamous "<a
+href="http://developer.android.com/guide/practices/responsiveness.html">application not
+responding</a>" (ANR) dialog. The user might then decide to quit your application and uninstall it
+if they are unhappy.</p>
+
+<p>Additionally, the Andoid UI toolkit is <em>not</em> thread-safe. So, you must not manipulate
+your UI from a worker thread&mdash;you must do all manipulation to your user interface from the UI
+thread. Thus, there are simply two rules to Android's single thread model:</p>
+
+<ol>
+<li>Do not block the UI thread
+<li>Do not access the Android UI toolkit from outside the UI thread
+</ol>
+
+<h3 id="WorkerThreads">Worker threads</h3>
+
+<p>Because of the single thread model described above, it's vital to the responsiveness of your
+application's UI that you do not block the UI thread. If you have operations to perform
+that are not instantaneous, you should make sure to do them in separate threads ("background" or
+"worker" threads).</p>
+
+<p>For example, below is some code for a click listener that downloads an image from a separate
+thread and displays it in an {@link android.widget.ImageView}:</p>
+
+<pre>
+public void onClick(View v) {
+    new Thread(new Runnable() {
+        public void run() {
+            Bitmap b = loadImageFromNetwork("http://example.com/image.png");
+            mImageView.setImageBitmap(b);
+        }
+    }).start();
+}
+</pre>
+
+<p>At first, this seems to work fine, because it creates a new thread to handle the network
+operation. However, it violates the second rule of the single-threaded model: <em>do not access the
+Android UI toolkit from outside the UI thread</em>&mdash;this sample modifies the {@link
+android.widget.ImageView} from the worker thread instead of the UI thread. This can result in
+undefined and unexpected behavior, which can be difficult and time-consuming to track down.</p>
+
+<p>To fix this problem, Android offers several ways to access the UI thread from other
+threads. Here is a list of methods that can help:</p>
+
+<ul>
+<li>{@link android.app.Activity#runOnUiThread(java.lang.Runnable)
+Activity.runOnUiThread(Runnable)}</li>
+<li>{@link android.view.View#post(java.lang.Runnable) View.post(Runnable)}</li>
+<li>{@link android.view.View#postDelayed(java.lang.Runnable, long) View.postDelayed(Runnable,
+long)}</li>
+</ul>
+
+<p>For example, you can fix the above code by using the {@link
+android.view.View#post(java.lang.Runnable) View.post(Runnable)} method:</p>
+
+<pre>
+public void onClick(View v) {
+    new Thread(new Runnable() {
+        public void run() {
+            final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
+            mImageView.post(new Runnable() {
+                public void run() {
+                    mImageView.setImageBitmap(bitmap);
+                }
+            });
+        }
+    }).start();
+}
+</pre>
+
+<p>Now this implementation is thread-safe: the network operation is done from a separate thread
+while the {@link android.widget.ImageView} is manipulated from the UI thread.</p>
+
+<p>However, as the complexity of the operation grows, this kind of code can get complicated and
+difficult to maintain. To handle more complex interactions with a worker thread, you might consider
+using a {@link android.os.Handler} in your worker thread, to process messages delivered from the UI
+thread. Perhaps the best solution, though, is to extend the {@link android.os.AsyncTask} class,
+which simplifies the execution of worker thread tasks that need to interact with the UI.</p>
+
+
+<h4 id="AsyncTask">Using AsyncTask</h4>
+
+<p>{@link android.os.AsyncTask} allows you to perform asynchronous work on your user
+interface. It performs the blocking operations in a worker thread and then publishes the results on
+the UI thread, without requiring you to handle threads and/or handlers yourself.</p>
+
+<p>To use it, you must subclass {@link android.os.AsyncTask} and implement the {@link
+android.os.AsyncTask#doInBackground doInBackground()} callback method, which runs in a pool of
+background threads. To update your UI, you should implement {@link
+android.os.AsyncTask#onPostExecute onPostExecute()}, which delivers the result from {@link
+android.os.AsyncTask#doInBackground doInBackground()} and runs in the UI thread, so you can safely
+update your UI. You can then run the task by calling {@link android.os.AsyncTask#execute execute()}
+from the UI thread.</p>
+
+<p>For example, you can implement the previous example using {@link android.os.AsyncTask} this
+way:</p>
+
+<pre>
+public void onClick(View v) {
+    new DownloadImageTask().execute("http://example.com/image.png");
+}
+
+private class DownloadImageTask extends AsyncTask&lt;String, Void, Bitmap&gt; {
+    /** The system calls this to perform work in a worker thread and
+      * delivers it the parameters given to AsyncTask.execute() */
+    protected Bitmap doInBackground(String... urls) {
+        return loadImageFromNetwork(urls[0]);
+    }
+    
+    /** The system calls this to perform work in the UI thread and delivers
+      * the result from doInBackground() */
+    protected void onPostExecute(Bitmap result) {
+        mImageView.setImageBitmap(result);
+    }
+}
+</pre>
+
+<p>Now the UI is safe and the code is simpler, because it separates the work into the
+part that should be done on a worker thread and the part that should be done on the UI thread.</p>
+
+<p>You should read the {@link android.os.AsyncTask} reference for a full understanding on
+how to use this class, but here is a quick overview of how it works:</p>
+
+<ul>
+<li>You can specify the type of the parameters, the progress values, and the final
+value of the task, using generics</li>
+<li>The method {@link android.os.AsyncTask#doInBackground doInBackground()} executes automatically
+on a worker thread</li>
+<li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link
+android.os.AsyncTask#onPostExecute onPostExecute()}, and {@link
+android.os.AsyncTask#onProgressUpdate onProgressUpdate()} are all invoked on the UI thread</li>
+<li>The value returned by {@link android.os.AsyncTask#doInBackground doInBackground()} is sent to
+{@link android.os.AsyncTask#onPostExecute onPostExecute()}</li>
+<li>You can call {@link android.os.AsyncTask#publishProgress publishProgress()} at anytime in {@link
+android.os.AsyncTask#doInBackground doInBackground()} to execute {@link
+android.os.AsyncTask#onProgressUpdate onProgressUpdate()} on the UI thread</li>
+<li>You can cancel the task at any time, from any thread</li>
+</ul>
+
+<p class="caution"><strong>Caution:</strong> Another problem you might encounter when using a worker
+thread is unexpected restarts in your activity due to a <a
+href="{@docRoot}guide/topics/resources/runtime-changes.html">runtime configuration change</a>
+(such as when the user changes the screen orientation), which may destroy your worker thread. To
+see how you can persist your task during one of these restarts and how to properly cancel the task
+when the activity is destroyed, see the source code for the <a
+href="http://code.google.com/p/shelves/">Shelves</a> sample application.</p>
+
+
+<h3 id="ThreadSafe">Thread-safe methods</h3>
+
+<p> In some situations, the methods you implement might be called from more than one thread, and
+therefore must be written to be thread-safe. </p>
+
+<p>This is primarily true for methods that can be called remotely&mdash;such as methods in a <a
+href="{@docRoot}guide/components/bound-services.html">bound service</a>. When a call on a
+method implemented in an {@link android.os.IBinder} originates in the same process in which the
+{@link android.os.IBinder IBinder} is running, the method is executed in the caller's thread.
+However, when the call originates in another process, the method is executed in a thread chosen from
+a pool of threads that the system maintains in the same process as the {@link android.os.IBinder
+IBinder} (it's not executed in the UI thread of the process).  For example, whereas a service's
+{@link android.app.Service#onBind onBind()} method would be called from the UI thread of the
+service's process, methods implemented in the object that {@link android.app.Service#onBind
+onBind()} returns (for example, a subclass that implements RPC methods) would be called from threads
+in the pool. Because a service can have more than one client, more than one pool thread can engage
+the same {@link android.os.IBinder IBinder} method at the same time.  {@link android.os.IBinder
+IBinder} methods must, therefore, be implemented to be thread-safe.</p>
+
+<p> Similarly, a content provider can receive data requests that originate in other processes.
+Although the {@link android.content.ContentResolver} and {@link android.content.ContentProvider}
+classes hide the details of how the interprocess communication is managed, {@link
+android.content.ContentProvider} methods that respond to those requests&mdash;the methods {@link
+android.content.ContentProvider#query query()}, {@link android.content.ContentProvider#insert
+insert()}, {@link android.content.ContentProvider#delete delete()}, {@link
+android.content.ContentProvider#update update()}, and {@link android.content.ContentProvider#getType
+getType()}&mdash;are called from a pool of threads in the content provider's process, not the UI
+thread for the process.  Because these methods might be called from any number of threads at the
+same time, they too must be implemented to be thread-safe. </p>
+
+
+<h2 id="IPC">Interprocess Communication</h2>
+
+<p>Android offers a mechanism for interprocess communication (IPC) using remote procedure calls
+(RPCs), in which a method is called by an activity or other application component, but executed
+remotely (in another process), with any result returned back to the
+caller. This entails decomposing a method call and its data to a level the operating system can
+understand, transmitting it from the local process and address space to the remote process and
+address space, then reassembling and reenacting the call there.  Return values are then
+transmitted in the opposite direction.  Android provides all the code to perform these IPC
+transactions, so you can focus on defining and implementing the RPC programming interface. </p>
+
+<p>To perform IPC, your application must bind to a service, using {@link
+android.content.Context#bindService bindService()}. For more information, see the <a
+href="{@docRoot}guide/components/services.html">Services</a> developer guide.</p>
+
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For information about how to perform work in the background for an indefinite period of time
+(without a user interface), continue with the <b><a
+href="{@docRoot}guide/components/services.html">Services</a></b> document.</p>
+-->
diff --git a/docs/html/guide/components/services.jd b/docs/html/guide/components/services.jd
new file mode 100644
index 0000000..ba5e1f0
--- /dev/null
+++ b/docs/html/guide/components/services.jd
@@ -0,0 +1,874 @@
+page.title=Services
+@jd:body
+
+<div id="qv-wrapper">
+<ol id="qv">
+<h2>Quickview</h2>
+<ul>
+  <li>A service can run in the background to perform work even while the user is in a different
+application</li>
+  <li>A service can allow other components to bind to it, in order to interact with it and
+perform interprocess communication</li>
+  <li>A service runs in the main thread of the application that hosts it, by default</li>
+</ul>
+<h2>In this document</h2>
+<ol>
+<li><a href="#Basics">The Basics</a></li>
+<ol>
+  <li><a href="#Declaring">Declaring a service in the manifest</a></li>
+</ol>
+<li><a href="#CreatingAService">Creating a Started Service</a>
+  <ol>
+    <li><a href="#ExtendingIntentService">Extending the IntentService class</a></li>
+    <li><a href="#ExtendingService">Extending the Service class</a></li>
+    <li><a href="#StartingAService">Starting a service</a></li>
+    <li><a href="#Stopping">Stopping a service</a></li>
+  </ol>
+</li>
+<li><a href="#CreatingBoundService">Creating a Bound Service</a></li>
+<li><a href="#Notifications">Sending Notifications to the User</a></li>
+<li><a href="#Foreground">Running a Service in the Foreground</a></li>
+<li><a href="#Lifecycle">Managing the Lifecycle of a Service</a>
+<ol>
+  <li><a href="#LifecycleCallbacks">Implementing the lifecycle callbacks</a></li>
+</ol>
+</li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.app.Service}</li>
+  <li>{@link android.app.IntentService}</li>
+</ol>
+
+<h2>Samples</h2>
+<ol>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html">{@code
+      ServiceStartArguments}</a></li>
+  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
+      LocalService}</a></li>
+</ol>
+
+<h2>Articles</h2>
+<ol>
+  <li><a href="{@docRoot}resources/articles/multitasking-android-way.html">Multitasking the Android Way</a></li>
+  <li><a href="{@docRoot}resources/articles/service-api-changes-starting-with.html">Service API changes starting
+      with Android 2.0</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+<li><a href="{@docRoot}guide/components/bound-services.html">Bound Services</a></li>
+</ol>
+
+</div>
+
+
+<p>A {@link android.app.Service} is an application component that can perform
+long-running operations in the background and does not provide a user interface. Another
+application component can start a service and it will continue to run in the background even if the
+user switches to another application. Additionally, a component can bind to a service to
+interact with it and even perform interprocess communication (IPC). For example, a service might
+handle network transactions, play music, perform file I/O, or interact with a content provider, all
+from the background.</p>
+
+<p>A service can essentially take two forms:</p>
+
+<dl>
+  <dt>Started</dt>
+  <dd>A service is "started" when an application component (such as an activity) starts it by
+calling {@link android.content.Context#startService startService()}. Once started, a service
+can run in the background indefinitely, even if the component that started it is destroyed. Usually,
+a started service performs a single operation and does not return a result to the caller.
+For example, it might download or upload a file over the network. When the operation is done, the
+service should stop itself.</dd>
+  <dt>Bound</dt>
+  <dd>A service is "bound" when an application component binds to it by calling {@link
+android.content.Context#bindService bindService()}. A bound service offers a client-server
+interface that allows components to interact with the service, send requests, get results, and even
+do so across processes with interprocess communication (IPC). A bound service runs only as long as
+another application component is bound to it. Multiple components can bind to the service at once,
+but when all of them unbind, the service is destroyed.</dd>
+</dl>
+
+<p>Although this documentation generally discusses these two types of services separately, your
+service can work both ways&mdash;it can be started (to run indefinitely) and also allow binding.
+It's simply a matter of whether you implement a couple callback methods: {@link
+android.app.Service#onStartCommand onStartCommand()} to allow components to start it and {@link
+android.app.Service#onBind onBind()} to allow binding.</p>
+
+<p>Regardless of whether your application is started, bound, or both, any application component
+can use the service (even from a separate application), in the same way that any component can use
+an activity&mdash;by starting it with an {@link android.content.Intent}. However, you can declare
+the service as private, in the manifest file, and block access from other applications. This is
+discussed more in the section about <a href="#Declaring">Declaring the service in the
+manifest</a>.</p>
+
+<p class="caution"><strong>Caution:</strong> A service runs in the
+main thread of its hosting process&mdash;the service does <strong>not</strong> create its own thread
+and does <strong>not</strong> run in a separate process (unless you specify otherwise). This means
+that, if your service is going to do any CPU intensive work or blocking operations (such as MP3
+playback or networking), you should create a new thread within the service to do that work. By using
+a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the
+application's main thread can remain dedicated to user interaction with your activities.</p>
+
+
+<h2 id="Basics">The Basics</h2>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h3>Should you use a service or a thread?</h3>
+  <p>A service is simply a component that can run in the background even when the user is not
+interacting with your application. Thus, you should create a service only if that is what you
+need.</p>
+  <p>If you need to perform work outside your main thread, but only while the user is interacting
+with your application, then you should probably instead create a new thread and not a service. For
+example, if you want to play some music, but only while your activity is running, you might create
+a thread in {@link android.app.Activity#onCreate onCreate()}, start running it in {@link
+android.app.Activity#onStart onStart()}, then stop it in {@link android.app.Activity#onStop
+onStop()}. Also consider using {@link android.os.AsyncTask} or {@link android.os.HandlerThread},
+instead of the traditional {@link java.lang.Thread} class. See the <a
+href="{@docRoot}guide/components/processes-and-threads.html#Threads">Processes and
+Threading</a> document for more information about threads.</p>
+  <p>Remember that if you do use a service, it still runs in your application's main thread by
+default, so you should still create a new thread within the service if it performs intensive or
+blocking operations.</p>
+</div>
+</div>
+
+<p>To create a service, you must create a subclass of {@link android.app.Service} (or one
+of its existing subclasses). In your implementation, you need to override some callback methods that
+handle key aspects of the service lifecycle and provide a mechanism for components to bind to
+the service, if appropriate. The most important callback methods you should override are:</p>
+
+<dl>
+  <dt>{@link android.app.Service#onStartCommand onStartCommand()}</dt>
+    <dd>The system calls this method when another component, such as an activity,
+requests that the service be started, by calling {@link android.content.Context#startService
+startService()}. Once this method executes, the service is started and can run in the
+background indefinitely. If you implement this, it is your responsibility to stop the service when
+its work is done, by calling {@link android.app.Service#stopSelf stopSelf()} or {@link
+android.content.Context#stopService stopService()}. (If you only want to provide binding, you don't
+need to implement this method.)</dd>
+  <dt>{@link android.app.Service#onBind onBind()}</dt>
+    <dd>The system calls this method when another component wants to bind with the
+service (such as to perform RPC), by calling {@link android.content.Context#bindService
+bindService()}. In your implementation of this method, you must provide an interface that clients
+use to communicate with the service, by returning an {@link android.os.IBinder}. You must always
+implement this method, but if you don't want to allow binding, then you should return null.</dd>
+  <dt>{@link android.app.Service#onCreate()}</dt>
+    <dd>The system calls this method when the service is first created, to perform one-time setup
+procedures (before it calls either {@link android.app.Service#onStartCommand onStartCommand()} or
+{@link android.app.Service#onBind onBind()}). If the service is already running, this method is not
+called.</dd>
+  <dt>{@link android.app.Service#onDestroy()}</dt>
+    <dd>The system calls this method when the service is no longer used and is being destroyed.
+Your service should implement this to clean up any resources such as threads, registered
+listeners, receivers, etc. This is the last call the service receives.</dd>
+</dl>
+
+<p>If a component starts the service by calling {@link
+android.content.Context#startService startService()} (which results in a call to {@link
+android.app.Service#onStartCommand onStartCommand()}), then the service
+remains running until it stops itself with {@link android.app.Service#stopSelf()} or another
+component stops it by calling {@link android.content.Context#stopService stopService()}.</p>
+
+<p>If a component calls
+{@link android.content.Context#bindService bindService()} to create the service (and {@link
+android.app.Service#onStartCommand onStartCommand()} is <em>not</em> called), then the service runs
+only as long as the component is bound to it. Once the service is unbound from all clients, the
+system destroys it.</p>
+
+<p>The Android system will force-stop a service only when memory is low and it must recover system
+resources for the activity that has user focus. If the service is bound to an activity that has user
+focus, then it's less likely to be killed, and if the service is declared to <a
+href="#Foreground">run in the foreground</a> (discussed later), then it will almost never be killed.
+Otherwise, if the service was started and is long-running, then the system will lower its position
+in the list of background tasks over time and the service will become highly susceptible to
+killing&mdash;if your service is started, then you must design it to gracefully handle restarts
+by the system. If the system kills your service, it restarts it as soon as resources become
+available again (though this also depends on the value you return from {@link
+android.app.Service#onStartCommand onStartCommand()}, as discussed later). For more information
+about when the system might destroy a service, see the <a
+href="{@docRoot}guide/components/processes-and-threads.html">Processes and Threading</a>
+document.</p>
+
+<p>In the following sections, you'll see how you can create each type of service and how to use
+it from other application components.</p>
+
+
+
+<h3 id="Declaring">Declaring a service in the manifest</h3>
+
+<p>Like activities (and other components), you must declare all services in your application's
+manifest file.</p>
+
+<p>To declare your service, add a <a
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> element
+as a child of the <a
+href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
+element. For example:</p>
+
+<pre>
+&lt;manifest ... &gt;
+  ...
+  &lt;application ... &gt;
+      &lt;service android:name=".ExampleService" /&gt;
+      ...
+  &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<p>There are other attributes you can include in the <a
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> element to
+define properties such as permissions required to start the service and the process in
+which the service should run. The <a
+href="{@docRoot}guide/topics/manifest/service-element.html#nm">{@code android:name}</a>
+attribute is the only required attribute&mdash;it specifies the class name of the service. Once
+you publish your application, you should not change this name, because if you do, you might break
+some functionality where explicit intents are used to reference your service (read the blog post, <a
+href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
+That Cannot Change</a>).
+
+<p>See the <a
+href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> element
+reference for more information about declaring your service in the manifest.</p>
+
+<p>Just like an activity, a service can define intent filters that allow other components to
+invoke the service using implicit intents. By declaring intent filters, components
+from any application installed on the user's device can potentially start your service if your
+service declares an intent filter that matches the intent another application passes to {@link
+android.content.Context#startService startService()}.</p>
+
+<p>If you plan on using your service only locally (other applications do not use it), then you
+don't need to (and should not) supply any intent filters. Without any intent filters, you must
+start the service using an intent that explicitly names the service class. More information
+about <a href="#StartingAService">starting a service</a> is discussed below.</p>
+
+<p>Additionally, you can ensure that your service is private to your application only if
+you include the <a
+href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a>
+attribute and set it to {@code "false"}. This is effective even if your service supplies intent
+filters.</p>
+
+<p>For more information about creating intent filters for your service, see the <a
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
+document.</p>
+
+
+
+<h2 id="CreatingStartedService">Creating a Started Service</h2>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h2>Targeting Android 1.6 or lower</h2>
+  <p>If you're building an application for Android 1.6 or lower, you need
+to implement {@link android.app.Service#onStart onStart()}, instead of {@link
+android.app.Service#onStartCommand onStartCommand()} (in Android 2.0,
+{@link android.app.Service#onStart onStart()} was deprecated in favor of {@link
+android.app.Service#onStartCommand onStartCommand()}).</p>
+  <p>For more information about providing compatibility with versions of Android older than 2.0, see
+the {@link android.app.Service#onStartCommand onStartCommand()} documentation.</p>
+</div>
+</div>
+
+<p>A started service is one that another component starts by calling {@link
+android.content.Context#startService startService()}, resulting in a call to the service's
+{@link android.app.Service#onStartCommand onStartCommand()} method.</p>
+
+<p>When a service is started, it has a lifecycle that's independent of the
+component that started it and the service can run in the background indefinitely, even if
+the component that started it is destroyed. As such, the service should stop itself when its job
+is done by calling {@link android.app.Service#stopSelf stopSelf()}, or another component can stop it
+by calling {@link android.content.Context#stopService stopService()}.</p>
+
+<p>An application component such as an activity can start the service by calling {@link
+android.content.Context#startService startService()} and passing an {@link android.content.Intent}
+that specifies the service and includes any data for the service to use. The service receives
+this {@link android.content.Intent} in the {@link android.app.Service#onStartCommand
+onStartCommand()} method.</p>
+
+<p>For instance, suppose an activity needs to save some data to an online database. The activity can
+start a companion service and deliver it the data to save by passing an intent to {@link
+android.content.Context#startService startService()}. The service receives the intent in {@link
+android.app.Service#onStartCommand onStartCommand()}, connects to the Internet and performs the
+database transaction. When the transaction is done, the service stops itself and it is
+destroyed.</p>
+
+<p class="caution"><strong>Caution:</strong> A services runs in the same process as the application
+in which it is declared and in the main thread of that application, by default. So, if your service
+performs intensive or blocking operations while the user interacts with an activity from the same
+application, the service will slow down activity performance. To avoid impacting application
+performance, you should start a new thread inside the service.</p>
+
+<p>Traditionally, there are two classes you can extend to create a started service:</p>
+<dl>
+  <dt>{@link android.app.Service}</dt>
+  <dd>This is the base class for all services. When you extend this class, it's important that
+you create a new thread in which to do all the service's work, because the service uses your
+application's main thread, by default, which could slow the performance of any activity your
+application is running.</dd>
+  <dt>{@link android.app.IntentService}</dt>
+  <dd>This is a subclass of {@link android.app.Service} that uses a worker thread to handle all
+start requests, one at a time. This is the best option if you don't require that your service
+handle multiple requests simultaneously. All you need to do is implement {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}, which receives the intent for each
+start request so you can do the background work.</dd>
+</dl>
+
+<p>The following sections describe how you can implement your service using either one for these
+classes.</p>
+
+
+<h3 id="ExtendingIntentService">Extending the IntentService class</h3>
+
+<p>Because most started services don't need to handle multiple requests simultaneously
+(which can actually be a dangerous multi-threading scenario), it's probably best if you
+implement your service using the {@link android.app.IntentService} class.</p>
+
+<p>The {@link android.app.IntentService} does the following:</p>
+
+<ul>
+  <li>Creates a default worker thread that executes all intents delivered to {@link
+android.app.Service#onStartCommand onStartCommand()} separate from your application's main
+thread.</li>
+  <li>Creates a work queue that passes one intent at a time to your {@link
+android.app.IntentService#onHandleIntent onHandleIntent()} implementation, so you never have to
+worry about multi-threading.</li>
+  <li>Stops the service after all start requests have been handled, so you never have to call
+{@link android.app.Service#stopSelf}.</li>
+  <li>Provides default implementation of {@link android.app.IntentService#onBind onBind()} that
+returns null.</li>
+  <li>Provides a default implementation of {@link android.app.IntentService#onStartCommand
+onStartCommand()} that sends the intent to the work queue and then to your {@link
+android.app.IntentService#onHandleIntent onHandleIntent()} implementation.</li>
+</ul>
+
+<p>All this adds up to the fact that all you need to do is implement {@link
+android.app.IntentService#onHandleIntent onHandleIntent()} to do the work provided by the
+client. (Though, you also need to provide a small constructor for the service.)</p>
+
+<p>Here's an example implementation of {@link android.app.IntentService}:</p>
+
+<pre>
+public class HelloIntentService extends IntentService {
+
+  /** 
+   * A constructor is required, and must call the super {@link android.app.IntentService#IntentService}
+   * constructor with a name for the worker thread.
+   */
+  public HelloIntentService() {
+      super("HelloIntentService");
+  }
+
+  /**
+   * The IntentService calls this method from the default worker thread with
+   * the intent that started the service. When this method returns, IntentService
+   * stops the service, as appropriate.
+   */
+  &#64;Override
+  protected void onHandleIntent(Intent intent) {
+      // Normally we would do some work here, like download a file.
+      // For our sample, we just sleep for 5 seconds.
+      long endTime = System.currentTimeMillis() + 5*1000;
+      while (System.currentTimeMillis() &lt; endTime) {
+          synchronized (this) {
+              try {
+                  wait(endTime - System.currentTimeMillis());
+              } catch (Exception e) {
+              }
+          }
+      }
+  }
+}
+</pre>
+
+<p>That's all you need: a constructor and an implementation of {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}.</p>
+
+<p>If you decide to also override other callback methods, such as {@link
+android.app.IntentService#onCreate onCreate()}, {@link
+android.app.IntentService#onStartCommand onStartCommand()}, or {@link
+android.app.IntentService#onDestroy onDestroy()}, be sure to call the super implementation, so
+that the {@link android.app.IntentService} can properly handle the life of the worker thread.</p>
+
+<p>For example, {@link android.app.IntentService#onStartCommand onStartCommand()} must return
+the default implementation (which is how the intent gets delivered to {@link
+android.app.IntentService#onHandleIntent onHandleIntent()}):</p>
+
+<pre>
+&#64;Override
+public int onStartCommand(Intent intent, int flags, int startId) {
+    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
+    return super.onStartCommand(intent,flags,startId);
+}
+</pre>
+
+<p>Besides {@link android.app.IntentService#onHandleIntent onHandleIntent()}, the only method
+from which you don't need to call the super class is {@link android.app.IntentService#onBind
+onBind()} (but you only need to implement that if your service allows binding).</p>
+
+<p>In the next section, you'll see how the same kind of service is implemented when extending
+the base {@link android.app.Service} class, which is a lot more code, but which might be
+appropriate if you need to handle simultaneous start requests.</p>
+
+
+<h3 id="ExtendingService">Extending the Service class</h3>
+
+<p>As you saw in the previous section, using {@link android.app.IntentService} makes your
+implementation of a started service very simple. If, however, you require your service to
+perform multi-threading (instead of processing start requests through a work queue), then you
+can extend the {@link android.app.Service} class to handle each intent.</p>
+
+<p>For comparison, the following example code is an implementation of the {@link
+android.app.Service} class that performs the exact same work as the example above using {@link
+android.app.IntentService}. That is, for each start request, it uses a worker thread to perform the
+job and processes only one request at a time.</p>
+
+<pre>
+public class HelloService extends Service {
+  private Looper mServiceLooper;
+  private ServiceHandler mServiceHandler;
+
+  // Handler that receives messages from the thread
+  private final class ServiceHandler extends Handler {
+      public ServiceHandler(Looper looper) {
+          super(looper);
+      }
+      &#64;Override
+      public void handleMessage(Message msg) {
+          // Normally we would do some work here, like download a file.
+          // For our sample, we just sleep for 5 seconds.
+          long endTime = System.currentTimeMillis() + 5*1000;
+          while (System.currentTimeMillis() &lt; endTime) {
+              synchronized (this) {
+                  try {
+                      wait(endTime - System.currentTimeMillis());
+                  } catch (Exception e) {
+                  }
+              }
+          }
+          // Stop the service using the startId, so that we don't stop
+          // the service in the middle of handling another job
+          stopSelf(msg.arg1);
+      }
+  }
+
+  &#64;Override
+  public void onCreate() {
+    // Start up the thread running the service.  Note that we create a
+    // separate thread because the service normally runs in the process's
+    // main thread, which we don't want to block.  We also make it
+    // background priority so CPU-intensive work will not disrupt our UI.
+    HandlerThread thread = new HandlerThread("ServiceStartArguments",
+            Process.THREAD_PRIORITY_BACKGROUND);
+    thread.start();
+    
+    // Get the HandlerThread's Looper and use it for our Handler 
+    mServiceLooper = thread.getLooper();
+    mServiceHandler = new ServiceHandler(mServiceLooper);
+  }
+
+  &#64;Override
+  public int onStartCommand(Intent intent, int flags, int startId) {
+      Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
+
+      // For each start request, send a message to start a job and deliver the
+      // start ID so we know which request we're stopping when we finish the job
+      Message msg = mServiceHandler.obtainMessage();
+      msg.arg1 = startId;
+      mServiceHandler.sendMessage(msg);
+      
+      // If we get killed, after returning from here, restart
+      return START_STICKY;
+  }
+
+  &#64;Override
+  public IBinder onBind(Intent intent) {
+      // We don't provide binding, so return null
+      return null;
+  }
+  
+  &#64;Override
+  public void onDestroy() {
+    Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
+  }
+}
+</pre>
+
+<p>As you can see, it's a lot more work than using {@link android.app.IntentService}.</p>
+
+<p>However, because you handle each call to {@link android.app.Service#onStartCommand
+onStartCommand()} yourself, you can perform multiple requests simultaneously. That's not what
+this example does, but if that's what you want, then you can create a new thread for each
+request and run them right away (instead of waiting for the previous request to finish).</p>
+
+<p>Notice that the {@link android.app.Service#onStartCommand onStartCommand()} method must return an
+integer. The integer is a value that describes how the system should continue the service in the
+event that the system kills it (as discussed above, the default implementation for {@link
+android.app.IntentService} handles this for you, though you are able to modify it). The return value
+from {@link android.app.Service#onStartCommand onStartCommand()} must be one of the following
+constants:</p>
+
+<dl>
+  <dt>{@link android.app.Service#START_NOT_STICKY}</dt>
+    <dd>If the system kills the service after {@link android.app.Service#onStartCommand
+onStartCommand()} returns, <em>do not</em> recreate the service, unless there are pending
+intents to deliver. This is the safest option to avoid running your service when not necessary
+and when your application can simply restart any unfinished jobs.</dd>
+  <dt>{@link android.app.Service#START_STICKY}</dt>
+    <dd>If the system kills the service after {@link android.app.Service#onStartCommand
+onStartCommand()} returns, recreate the service and call {@link
+android.app.Service#onStartCommand onStartCommand()}, but <em>do not</em> redeliver the last intent.
+Instead, the system calls {@link android.app.Service#onStartCommand onStartCommand()} with a
+null intent, unless there were pending intents to start the service, in which case,
+those intents are delivered. This is suitable for media players (or similar services) that are not
+executing commands, but running indefinitely and waiting for a job.</dd>
+  <dt>{@link android.app.Service#START_REDELIVER_INTENT}</dt>
+    <dd>If the system kills the service after {@link android.app.Service#onStartCommand
+onStartCommand()} returns, recreate the service and call {@link
+android.app.Service#onStartCommand onStartCommand()} with the last intent that was delivered to the
+service. Any pending intents are delivered in turn. This is suitable for services that are
+actively performing a job that should be immediately resumed, such as downloading a file.</dd>
+</dl>
+<p>For more details about these return values, see the linked reference documentation for each
+constant.</p>
+
+
+
+<h3 id="StartingAService">Starting a Service</h3>
+
+<p>You can start a service from an activity or other application component by passing an
+{@link android.content.Intent} (specifying the service to start) to {@link
+android.content.Context#startService startService()}. The Android system calls the service's {@link
+android.app.Service#onStartCommand onStartCommand()} method and passes it the {@link
+android.content.Intent}. (You should never call {@link android.app.Service#onStartCommand
+onStartCommand()} directly.)</p>
+
+<p>For example, an activity can start the example service in the previous section ({@code
+HelloSevice}) using an explicit intent with {@link android.content.Context#startService
+startService()}:</p>
+
+<pre>
+Intent intent = new Intent(this, HelloService.class);
+startService(intent);
+</pre>
+
+<p>The {@link android.content.Context#startService startService()} method returns immediately and
+the Android system calls the service's {@link android.app.Service#onStartCommand
+onStartCommand()} method. If the service is not already running, the system first calls {@link
+android.app.Service#onCreate onCreate()}, then calls {@link android.app.Service#onStartCommand
+onStartCommand()}.</p>
+
+<p>If the service does not also provide binding, the intent delivered with {@link
+android.content.Context#startService startService()} is the only mode of communication between the
+application component and the service. However, if you want the service to send a result back, then
+the client that starts the service can create a {@link android.app.PendingIntent} for a broadcast
+(with {@link android.app.PendingIntent#getBroadcast getBroadcast()}) and deliver it to the service
+in the {@link android.content.Intent} that starts the service. The service can then use the
+broadcast to deliver a result.</p>
+
+<p>Multiple requests to start the service result in multiple corresponding calls to the service's
+{@link android.app.Service#onStartCommand onStartCommand()}. However, only one request to stop
+the service (with {@link android.app.Service#stopSelf stopSelf()} or {@link
+android.content.Context#stopService stopService()}) is required to stop it.</p>
+
+
+<h3 id="Stopping">Stopping a service</h3>
+
+<p>A started service must manage its own lifecycle. That is, the system does not stop or
+destroy the service unless it must recover system memory and the service
+continues to run after {@link android.app.Service#onStartCommand onStartCommand()} returns. So,
+the service must stop itself by calling {@link android.app.Service#stopSelf stopSelf()} or another
+component can stop it by calling {@link android.content.Context#stopService stopService()}.</p>
+
+<p>Once requested to stop with {@link android.app.Service#stopSelf stopSelf()} or {@link
+android.content.Context#stopService stopService()}, the system destroys the service as soon as
+possible.</p>
+
+<p>However, if your service handles multiple requests to {@link
+android.app.Service#onStartCommand onStartCommand()} concurrently, then you shouldn't stop the
+service when you're done processing a start request, because you might have since received a new
+start request (stopping at the end of the first request would terminate the second one). To avoid
+this problem, you can use {@link android.app.Service#stopSelf(int)} to ensure that your request to
+stop the service is always based on the most recent start request. That is, when you call {@link
+android.app.Service#stopSelf(int)}, you pass the ID of the start request (the <code>startId</code>
+delivered to {@link android.app.Service#onStartCommand onStartCommand()}) to which your stop request
+corresponds. Then if the service received a new start request before you were able to call {@link
+android.app.Service#stopSelf(int)}, then the ID will not match and the service will not stop.</p>
+
+<p class="caution"><strong>Caution:</strong> It's important that your application stops its services
+when it's done working, to avoid wasting system resources and consuming battery power. If necessary,
+other components can stop the service by calling {@link
+android.content.Context#stopService stopService()}. Even if you enable binding for the service,
+you must always stop the service yourself if it ever received a call to {@link
+android.app.Service#onStartCommand onStartCommand()}.</p>
+
+<p>For more information about the lifecycle of a service, see the section below about <a
+href="#Lifecycle">Managing the Lifecycle of a Service</a>.</p>
+
+
+
+<h2 id="CreatingBoundService">Creating a Bound Service</h2>
+
+<p>A bound service is one that allows application components to bind to it by calling {@link
+android.content.Context#bindService bindService()} in order to create a long-standing connection
+(and generally does not allow components to <em>start</em> it by calling {@link
+android.content.Context#startService startService()}).</p>
+
+<p>You should create a bound service when you want to interact with the service from activities
+and other components in your application or to expose some of your application's functionality to
+other applications, through interprocess communication (IPC).</p>
+
+<p>To create a bound service, you must implement the {@link
+android.app.Service#onBind onBind()} callback method to return an {@link android.os.IBinder} that
+defines the interface for communication with the service. Other application components can then call
+{@link android.content.Context#bindService bindService()} to retrieve the interface and
+begin calling methods on the service. The service lives only to serve the application component that
+is bound to it, so when there are no components bound to the service, the system destroys it
+(you do <em>not</em> need to stop a bound service in the way you must when the service is started
+through {@link android.app.Service#onStartCommand onStartCommand()}).</p>
+
+<p>To create a bound service, the first thing you must do is define the interface that specifies
+how a client can communicate with the service. This interface between the service
+and a client must be an implementation of {@link android.os.IBinder} and is what your service must
+return from the {@link android.app.Service#onBind
+onBind()} callback method. Once the client receives the {@link android.os.IBinder}, it can begin
+interacting with the service through that interface.</p>
+
+<p>Multiple clients can bind to the service at once. When a client is done interacting with the
+service, it calls {@link android.content.Context#unbindService unbindService()} to unbind. Once
+there are no clients bound to the service, the system destroys the service.</p>
+
+<p>There are multiple ways to implement a bound service and the implementation is more
+complicated than a started service, so the bound service discussion appears in a separate
+document about <a
+href="{@docRoot}guide/components/bound-services.html">Bound Services</a>.</p>
+
+
+
+<h2 id="Notifications">Sending Notifications to the User</h2>
+
+<p>Once running, a service can notify the user of events using <a
+href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Toast Notifications</a> or <a
+href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>.</p>
+
+<p>A toast notification is a message that appears on the surface of the current window for a
+moment then disappears, while a status bar notification provides an icon in the status bar with a
+message, which the user can select in order to take an action (such as start an activity).</p>
+
+<p>Usually, a status bar notification is the best technique when some background work has completed
+(such as a file completed
+downloading) and the user can now act on it. When the user selects the notification from the
+expanded view, the notification can start an activity (such as to view the downloaded file).</p>
+
+<p>See the <a
+href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Toast Notifications</a> or <a
+href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>
+developer guides for more information.</p>
+
+
+
+<h2 id="Foreground">Running a Service in the Foreground</h2>
+
+<p>A foreground service is a service that's considered to be something the
+user is actively aware of and thus not a candidate for the system to kill when low on memory. A 
+foreground service must provide a notification for the status bar, which is placed under the
+"Ongoing" heading, which means that the notification cannot be dismissed unless the service is
+either stopped or removed from the foreground.</p>
+
+<p>For example, a music player that plays music from a service should be set to run in the
+foreground, because the user is explicitly aware
+of its operation. The notification in the status bar might indicate the current song and allow
+the user to launch an activity to interact with the music player.</p>
+
+<p>To request that your service run in the foreground, call {@link
+android.app.Service#startForeground startForeground()}. This method takes two parameters: an integer
+that uniquely identifies the notification and the {@link
+android.app.Notification} for the status bar. For example:</p>
+
+<pre>
+Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
+        System.currentTimeMillis());
+Intent notificationIntent = new Intent(this, ExampleActivity.class);
+PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
+notification.setLatestEventInfo(this, getText(R.string.notification_title),
+        getText(R.string.notification_message), pendingIntent);
+startForeground(ONGOING_NOTIFICATION, notification);
+</pre>
+
+
+<p>To remove the service from the foreground, call {@link
+android.app.Service#stopForeground stopForeground()}. This method takes a boolean, indicating
+whether to remove the status bar notification as well. This method does <em>not</em> stop the
+service. However, if you stop the service while it's still running in the foreground, then the
+notification is also removed.</p>
+
+<p class="note"><strong>Note:</strong> The methods {@link
+android.app.Service#startForeground startForeground()} and {@link
+android.app.Service#stopForeground stopForeground()} were introduced in Android 2.0 (API Level
+5). In order to run your service in the foreground on older versions of the platform, you must
+use the previous {@code setForeground()} method&mdash;see the {@link
+android.app.Service#startForeground startForeground()} documentation for information about how
+to provide backward compatibility.</p>
+
+<p>For more information about notifications, see <a
+href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Creating Status Bar
+Notifications</a>.</p>
+
+
+
+<h2 id="Lifecycle">Managing the Lifecycle of a Service</h2>
+
+<p>The lifecycle of a service is much simpler than that of an activity. However, it's even more important
+that you pay close attention to how your service is created and destroyed, because a service
+can run in the background without the user being aware.</p>
+
+<p>The service lifecycle&mdash;from when it's created to when it's destroyed&mdash;can follow two
+different paths:</p>
+
+<ul>
+<li>A started service
+  <p>The service is created when another component calls {@link
+android.content.Context#startService startService()}. The service then runs indefinitely and must
+stop itself by calling {@link
+android.app.Service#stopSelf() stopSelf()}. Another component can also stop the
+service by calling {@link android.content.Context#stopService
+stopService()}. When the service is stopped, the system destroys it..</p></li>
+
+<li>A bound service
+  <p>The service is created when another component (a client) calls {@link
+android.content.Context#bindService bindService()}. The client then communicates with the service
+through an {@link android.os.IBinder} interface. The client can close the connection by calling
+{@link android.content.Context#unbindService unbindService()}. Multiple clients can bind to
+the same service and when all of them unbind, the system destroys the service. (The service
+does <em>not</em> need to stop itself.)</p></li>
+</ul>
+
+<p>These two paths are not entirely separate. That is, you can bind to a service that was already
+started with {@link android.content.Context#startService startService()}. For example, a background
+music service could be started by calling {@link android.content.Context#startService
+startService()} with an {@link android.content.Intent} that identifies the music to play. Later,
+possibly when the user wants to exercise some control over the player or get information about the
+current song, an activity can bind to the service by calling {@link
+android.content.Context#bindService bindService()}. In cases like this, {@link
+android.content.Context#stopService stopService()} or {@link android.app.Service#stopSelf
+stopSelf()} does not actually stop the service until all clients unbind. </p>
+
+
+<h3 id="LifecycleCallbacks">Implementing the lifecycle callbacks</h3>
+
+<p>Like an activity, a service has lifecycle callback methods that you can implement to monitor
+changes in the service's state and perform work at the appropriate times. The following skeleton
+service demonstrates each of the lifecycle methods:</p>
+
+
+<div class="figure" style="width:432px">
+<img src="{@docRoot}images/service_lifecycle.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> The service lifecycle. The diagram on the left
+shows the lifecycle when the service is created with {@link android.content.Context#startService
+startService()} and the diagram on the right shows the lifecycle when the service is created
+with {@link android.content.Context#bindService bindService()}.</p>
+</div>
+
+<pre>
+public class ExampleService extends Service {
+    int mStartMode;       // indicates how to behave if the service is killed
+    IBinder mBinder;      // interface for clients that bind
+    boolean mAllowRebind; // indicates whether onRebind should be used
+
+    &#64;Override
+    public void {@link android.app.Service#onCreate onCreate}() {
+        // The service is being created
+    }
+    &#64;Override
+    public int {@link android.app.Service#onStartCommand onStartCommand}(Intent intent, int flags, int startId) {
+        // The service is starting, due to a call to {@link android.content.Context#startService startService()}
+        return <em>mStartMode</em>;
+    }
+    &#64;Override
+    public IBinder {@link android.app.Service#onBind onBind}(Intent intent) {
+        // A client is binding to the service with {@link android.content.Context#bindService bindService()}
+        return <em>mBinder</em>;
+    }
+    &#64;Override
+    public boolean {@link android.app.Service#onUnbind onUnbind}(Intent intent) {
+        // All clients have unbound with {@link android.content.Context#unbindService unbindService()}
+        return <em>mAllowRebind</em>;
+    }
+    &#64;Override
+    public void {@link android.app.Service#onRebind onRebind}(Intent intent) {
+        // A client is binding to the service with {@link android.content.Context#bindService bindService()},
+        // after onUnbind() has already been called
+    }
+    &#64;Override
+    public void {@link android.app.Service#onDestroy onDestroy}() {
+        // The service is no longer used and is being destroyed
+    }
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> Unlike the activity lifecycle callback methods, you are
+<em>not</em> required to call the superclass implementation of these callback methods.</p>
+
+<p>By implementing these methods, you can monitor two nested loops of the service's lifecycle: </p>
+
+<ul>
+<li>The <strong>entire lifetime</strong> of a service happens between the time {@link
+android.app.Service#onCreate onCreate()} is called and the time {@link
+android.app.Service#onDestroy} returns. Like an activity, a service does its initial setup in
+{@link android.app.Service#onCreate onCreate()} and releases all remaining resources in {@link
+android.app.Service#onDestroy onDestroy()}.  For example, a
+music playback service could create the thread where the music will be played in {@link
+android.app.Service#onCreate onCreate()}, then stop the thread in {@link
+android.app.Service#onDestroy onDestroy()}.
+
+<p>The {@link android.app.Service#onCreate onCreate()} and {@link android.app.Service#onDestroy
+onDestroy()} methods are called for all services, whether
+they're created by {@link android.content.Context#startService startService()} or {@link
+android.content.Context#bindService bindService()}.</p></li>
+
+<li>The <strong>active lifetime</strong> of a service begins with a call to either {@link
+android.app.Service#onStartCommand onStartCommand()} or {@link android.app.Service#onBind onBind()}.
+Each method is handed the {@link
+android.content.Intent} that was passed to either {@link android.content.Context#startService
+startService()} or {@link android.content.Context#bindService bindService()}, respectively.
+<p>If the service is started, the active lifetime ends the same time that the entire lifetime
+ends (the service is still active even after {@link android.app.Service#onStartCommand
+onStartCommand()} returns). If the service is bound, the active lifetime ends when {@link
+android.app.Service#onUnbind onUnbind()} returns.</p>
+</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Although a started service is stopped by a call to
+either {@link android.app.Service#stopSelf stopSelf()} or {@link
+android.content.Context#stopService stopService()}, there is not a respective callback for the
+service (there's no {@code onStop()} callback). So, unless the service is bound to a client,
+the system destroys it when the service is stopped&mdash;{@link
+android.app.Service#onDestroy onDestroy()} is the only callback received.</p>
+
+<p>Figure 2 illustrates the typical callback methods for a service. Although the figure separates
+services that are created by {@link android.content.Context#startService startService()} from those
+created by {@link android.content.Context#bindService bindService()}, keep
+in mind that any service, no matter how it's started, can potentially allow clients to bind to it.
+So, a service that was initially started with {@link android.app.Service#onStartCommand
+onStartCommand()} (by a client calling {@link android.content.Context#startService startService()})
+can still receive a call to {@link android.app.Service#onBind onBind()} (when a client calls
+{@link android.content.Context#bindService bindService()}).</p>
+
+<p>For more information about creating a service that provides binding, see the <a
+href="{@docRoot}guide/components/bound-services.html">Bound Services</a> document,
+which includes more information about the {@link android.app.Service#onRebind onRebind()}
+callback method in the section about <a
+href="{@docRoot}guide/components/bound-services.html#Lifecycle">Managing the Lifecycle of
+a Bound Service</a>.</p>
+
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>To learn how to query data from the system or other applications (such as contacts or media
+stored on the device), continue with the <b><a
+href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a></b>
+document.</p>
+-->
diff --git a/docs/html/guide/components/tasks-and-back-stack.jd b/docs/html/guide/components/tasks-and-back-stack.jd
new file mode 100644
index 0000000..8b7041c
--- /dev/null
+++ b/docs/html/guide/components/tasks-and-back-stack.jd
@@ -0,0 +1,595 @@
+page.title=Tasks and Back Stack
+parent.title=Activities
+parent.link=activities.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Quickview</h2>
+<ul>
+  <li>All activities belong to a task</li>
+  <li>A task contains a collection of activities in the order in which the user interacts with
+them</li>
+  <li>Tasks can move to the background and retain the state of each activity in order for users
+to perform other tasks without losing their work</li>
+</ul>
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#ActivityState">Saving Activity State</a></li></li>
+<li><a href="#ManagingTasks">Managing Tasks</a>
+  <ol>
+    <li><a href="#TaskLaunchModes">Defining launch modes</a></li>
+    <li><a href="#Affinities">Handling affinities</a></li>
+    <li><a href="#Clearing">Clearing the back stack</a></li>
+    <li><a href="#Starting">Starting a task</a></li>
+  </ol>
+</li>
+</ol>
+
+<h2>Articles</h2>
+<ol>
+  <li><a href="http://android-developers.blogspot.com/2010/04/multitasking-android-way.html">Multitasking the Android Way</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+  <li><a href="{@docRoot}design/patterns/navigation.html">Android Design:
+Navigation</a></li>
+  <li><a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;} manifest
+element</a></li>
+</ol>
+</div>
+</div>
+
+
+<p>An application usually contains multiple <a
+href="{@docRoot}guide/components/activities.html">activities</a>. Each activity
+should be designed around a specific kind of action the user can perform and can start other
+activities. For example, an email application might have one activity to show a list of new email.
+When the user selects an email, a new activity opens to view that email.</p>
+
+<p>An activity can even start activities that exist in other applications on the device. For
+example, if your application wants to send an email, you can define an intent to perform a "send"
+action and include some data, such as an email address and a message. An activity from another
+application that declares itself to handle this kind of intent then opens. In this case, the intent
+is to send an email, so an email application's "compose" activity starts (if multiple activities
+support the same intent, then the system lets the user select which one to use). When the email is
+sent, your activity resumes and it seems as if the email activity was part of your application. Even
+though the activities may be from different applications, Android maintains this seamless user
+experience by keeping both activities in the same <em>task</em>.</p>
+
+<p>A task is a collection of activities that users interact with
+when performing a certain job. The activities are arranged in a stack (the "back stack"), in the
+order in which each activity is opened.</p>
+
+<!-- SAVE FOR WHEN THE FRAGMENT DOC IS ADDED
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h3>Adding fragments to a task's back stack</h3>
+
+<p>Your activity can also include {@link android.app.Fragment}s to the back stack. For example,
+suppose you have a two-pane layout using fragments, one of which is a list view (fragment A) and the
+other being a layout to display an item from the list (fragment B). When the user selects an item
+from the list, fragment B is replaced by a new fragment (fragment C). In this case, it might be
+desireable for the user to navigate back to reveal fragment B, using the <em>Back</em> button.</p>
+<p>In order to add fragment B to the back stack so that this is possible, you must call {@link
+android.app.FragmentTransaction#addToBackStack addToBackStack()} before you {@link
+android.app.FragmentTransaction#commit()} the transaction that replaces fragment B with fragment
+C.</p>
+<p>For more information about using fragments and adding them to the back stack, see the {@link
+android.app.Fragment} class documentation.</p>
+
+</div>
+</div>
+-->
+
+<p>The device Home screen is the starting place for most tasks. When the user touches an icon in the
+application
+launcher (or a shortcut on the Home screen), that application's task comes to the foreground. If no
+task exists for the application (the application has not been used recently), then a new task
+is created and the "main" activity for that application opens as the root activity in the stack.</p>
+
+<p>When the current activity starts another, the new activity is pushed on the top of the stack and
+takes focus. The previous activity remains in the stack, but is stopped. When an activity
+stops, the system retains the current state of its user interface. When the user presses the
+<em>Back</em>
+button, the current activity is popped from the top of the stack (the activity is destroyed) and the
+previous activity resumes (the previous state of its UI is restored). Activities in the stack are
+never rearranged, only pushed and popped from the stack&mdash;pushed onto the stack when started by
+the current activity and popped off when the user leaves it using the <em>Back</em> button. As such,
+the back
+stack operates as a "last in, first out" object structure. Figure 1 visualizes
+this behavior with a timeline showing the progress between activities along with the current back
+stack at each point in time.</p>
+
+<img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> A representation of how each new activity in a
+task adds an item to the back stack. When the user presses the <em>Back</em> button, the current
+activity is
+destroyed and the previous activity resumes.</p>
+
+
+<p>If the user continues to press <em>Back</em>, then each activity in the stack is popped off to
+reveal the
+previous one, until the user returns to the Home screen (or to whichever activity was running when
+the task began). When all activities are removed from the stack, the task no longer exists.</p>
+
+<div class="figure" style="width:287px">
+<img src="{@docRoot}images/fundamentals/diagram_multitasking.png" alt="" /> <p
+class="img-caption"><strong>Figure 2.</strong> Two tasks: Task B receives user interaction
+in the foreground, while Task A is in the background, waiting to be resumed.</p>
+</div>
+<div class="figure" style="width:215px">
+  <img src="{@docRoot}images/fundamentals/diagram_multiple_instances.png" alt="" /> <p
+class="img-caption"><strong>Figure 3.</strong> A single activity is instantiated multiple times.</p>
+</div>
+
+<p>A task is a cohesive unit that can move to the "background" when users begin a new task or go
+to the Home screen, via the <em>Home</em> button. While in the background, all the activities in the
+task are
+stopped, but the back stack for the task remains intact&mdash;the task has simply lost focus while
+another task takes place, as shown in figure 2. A task can then return to the "foreground" so users
+can pick up where they left off. Suppose, for example, that the current task (Task A) has three
+activities in its stack&mdash;two under the current activity. The user presses the <em>Home</em>
+button, then
+starts a new application from the application launcher. When the Home screen appears, Task A goes
+into the background. When the new application starts, the system starts a task for that application
+(Task B) with its own stack of activities. After interacting with
+that application, the user returns Home again and selects the application that originally
+started Task A. Now, Task A comes to the
+foreground&mdash;all three activities in its stack are intact and the activity at the top of the
+stack resumes. At
+this point, the user can also switch back to Task B by going Home and selecting the application icon
+that started that task (or by touching and holding the <em>Home</em> button to reveal recent tasks
+and selecting
+one). This is an example of multitasking on Android.</p>
+
+<p class="note"><strong>Note:</strong> Multiple tasks can be held in the background at once.
+However, if the user is running many background tasks at the same time, the system might begin
+destroying background activities in order to recover memory, causing the activity states to be lost.
+See the following section about <a href="#ActivityState">Activity state</a>.</p>
+
+<p>Because the activities in the back stack are never rearranged, if your application allows
+users to start a particular activity from more than one activity, a new instance of
+that activity is created and pushed onto the stack (rather than bringing any previous instance of
+the activity to the top). As such, one activity in your application might be instantiated multiple
+times (even from different tasks), as shown in figure 3. As such, if the user navigates backward
+using the <em>Back</em> button, each instance of the activity is revealed in the order they were
+opened (each
+with their own UI state). However, you can modify this behavior if you do not want an activity to be
+instantiated more than once. How to do so is discussed in the later section about <a
+href="#ManagingTasks">Managing Tasks</a>.</p>
+
+
+<p>To summarize the default behavior for activities and tasks:</p>
+
+<ul>
+  <li>When Activity A starts Activity B, Activity A is stopped, but the system retains its state
+(such as scroll position and text entered into forms).
+If the user presses the <em>Back</em> button while in Activity B, Activity A resumes with its state
+restored.</li>
+  <li>When the user leaves a task by pressing the <em>Home</em> button, the current activity is
+stopped and
+its task goes into the background. The system retains the state of every activity in the task. If
+the user later resumes the task by selecting the launcher icon that began the task, the task comes
+to the foreground and resumes the activity at the top of the stack.</li>
+  <li>If the user presses the <em>Back</em> button, the current activity is popped from the stack
+and
+destroyed. The previous activity in the stack is resumed. When an activity is destroyed, the system
+<em>does not</em> retain the activity's state.</li>
+  <li>Activities can be instantiated multiple times, even from other tasks.</li>
+</ul>
+
+
+<div class="design-announce">
+<p><strong>Navigation Design</strong></p>
+  <p>For more about how app navigation works on Android, read Android Design's <a
+href="{@docRoot}design/patterns/navigation.html">Navigation</a> guide.</p>
+</div>
+
+
+<h2 id="ActivityState">Saving Activity State</h2>
+
+<p>As discussed above, the system's default behavior preserves the state of an activity when it is
+stopped. This way, when users navigate back to a previous activity, its user interface appears
+the way they left it. However, you can&mdash;and <strong>should</strong>&mdash;proactively retain
+the state of your activities using callback methods, in case the activity is destroyed and must
+be recreated.</p>
+
+<p>When the system stops one of your activities (such as when a new activity starts or the task
+moves to the background), the system might destroy that activity completely if it needs to recover
+system memory. When this happens, information about the activity state is lost. If this happens, the
+system still
+knows that the activity has a place in the back stack, but when the activity is brought to the
+top of the stack the system must recreate it (rather than resume it). In order to
+avoid losing the user's work, you should proactively retain it by implementing the {@link
+android.app.Activity#onSaveInstanceState onSaveInstanceState()} callback
+methods in your activity.</p>
+
+<p>For more information about how to save your activity state, see the <a
+href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
+document.</p>
+
+
+
+<h2 id="ManagingTasks">Managing Tasks</h2>
+
+<p>The way Android manages tasks and the back stack, as described above&mdash;by placing all
+activities started in succession in the same task and in a "last in, first out" stack&mdash;works
+great for most applications and you shouldn't have to worry about how your activities are associated
+with tasks or how they exist in the back stack. However, you might decide that you want to interrupt
+the normal behavior. Perhaps you want an activity in your application to begin a new task when it is
+started (instead of being placed within the current task); or, when you start an activity, you want
+to bring forward an existing instance of it (instead of creating a new
+instance on top of the back stack); or, you want your back stack to be cleared of all
+activities except for the root activity when the user leaves the task.</p>
+
+<p>You can do these things and more, with attributes in the
+<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
+&lt;activity&gt;}</a> manifest element and with flags in the intent that you pass to {@link
+android.app.Activity#startActivity startActivity()}.</p>
+
+<p>In this regard, the the principal <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
+attributes you can use are:</p>
+
+<ul class="nolist">
+  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code
+taskAffinity}</a></li>
+  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
+launchMode}</a></li>
+  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">{@code
+allowTaskReparenting}</a></li>
+  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code
+clearTaskOnLaunch}</a></li>
+  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#always">{@code
+alwaysRetainTaskState}</a></li>
+  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code
+finishOnTaskLaunch}</a></li>
+</ul>
+
+<p>And the principal intent flags you can use are:</p>
+
+<ul class="nolist">
+  <li>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</li>
+  <li>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</li>
+  <li>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</li>
+</ul>
+
+<p>In the following sections, you'll see how you can use these manifest attributes and intent
+flags to define how activities are associated with tasks and how the behave in the back stack.</p>
+
+
+<p class="caution"><strong>Caution:</strong> Most applications should not interrupt the default
+behavior for activities and tasks. If you determine that it's necessary for your activity to modify
+the default behaviors, use caution and be sure to test the usability of the activity during
+launch and when navigating back to it from other activities and tasks with the <em>Back</em> button.
+Be sure 
+to test for navigation behaviors that might conflict with the user's expected behavior.</p>
+
+
+<h3 id="TaskLaunchModes">Defining launch modes</h3>
+
+<p>Launch modes allow you to define how a new instance of an activity is associated with the
+current task. You can define different launch modes in two ways:</p>
+<ul class="nolist">
+  <li><a href="#ManifestForTasks">Using the manifest file</a>
+    <p>When you declare an activity in your manifest file, you can specify how the activity
+should associate with tasks when it starts.</li>
+  <li><a href="#IntentFlagsForTasks">Using Intent flags</a>
+    <p>When you call {@link android.app.Activity#startActivity startActivity()},
+you can include a flag in the {@link android.content.Intent} that declares how (or
+whether) the new activity should associate with the current task.</p></li>
+</ul>
+
+<p>As such, if Activity A starts Activity B, Activity B can define in its manifest how it
+should associate with the current task (if at all) and Activity A can also request how Activity
+B should associate with current task. If both activities define how Activity B
+should associate with a task, then Activity A's request (as defined in the intent) is honored
+over Activity B's request (as defined in its manifest).</p>
+
+<p class="note"><strong>Note:</strong> Some launch modes available for the manifest file
+are not available as flags for an intent and, likewise, some launch modes available as flags
+for an intent cannot be defined in the manifest.</p>
+
+
+<h4 id="ManifestForTasks">Using the manifest file</h4>
+
+<p>When declaring an activity in your manifest file, you can specify how the activity should
+associate with a task using the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
+element's <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
+launchMode}</a> attribute.</p>
+
+<p>The <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
+launchMode}</a> attribute specifies an instruction on how the activity should be launched into a
+task. There are four different launch modes you can assign to the
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code>
+attribute:</p>
+
+<dl>
+<dt>{@code "standard"} (the default mode)</dt>
+  <dd>Default. The system creates a new instance of the activity in the task from
+which it was started and routes the intent to it. The activity can be instantiated multiple times,
+each instance can belong to different tasks, and one task can have multiple instances.</dd>
+<dt>{@code "singleTop"}</dt>
+  <dd>If an instance of the activity already exists at the top of the current task, the system
+routes the intent to that instance through a call to its {@link
+android.app.Activity#onNewIntent onNewIntent()} method, rather than creating a new instance of the
+activity. The activity can be instantiated multiple times, each instance can
+belong to different tasks, and one task can have multiple instances (but only if the the
+activity at the top of the back stack is <em>not</em> an existing instance of the activity).
+  <p>For example, suppose a task's back stack consists of root activity A with activities B, C,
+and D on top (the stack is A-B-C-D; D is on top). An intent arrives for an activity of type D.
+If D has the default {@code "standard"} launch mode, a new instance of the class is launched and the
+stack becomes A-B-C-D-D. However, if D's launch mode is {@code "singleTop"}, the existing instance
+of D receives the intent through {@link
+android.app.Activity#onNewIntent onNewIntent()}, because it's at the top of the stack&mdash;the
+stack remains A-B-C-D. However, if an intent arrives for an activity of type B, then a new
+instance of B is added to the stack, even if its launch mode is {@code "singleTop"}.</p>
+  <p class="note"><strong>Note:</strong> When a new instance of an activity is created,
+the user can press the <em>Back</em> button to return to the previous activity. But when an existing
+instance of
+an activity handles a new intent, the user cannot press the <em>Back</em> button to return to the
+state of
+the activity before the new intent arrived in {@link android.app.Activity#onNewIntent
+onNewIntent()}.</p>
+</dd>
+
+<dt>{@code "singleTask"}</dt>
+  <dd>The system creates a new task and instantiates the activity at the root of the new task.
+However, if an instance of the activity already exists in a separate task, the system routes the
+intent to the existing instance through a call to its {@link
+android.app.Activity#onNewIntent onNewIntent()} method, rather than creating a new instance. Only
+one instance of the activity can exist at a time.
+  <p class="note"><strong>Note:</strong> Although the activity starts in a new task, the
+<em>Back</em> button still returns the user to the previous activity.</p></dd>
+<dt>{@code "singleInstance"}.</dt>
+  <dd>Same as {@code "singleTask"}, except that the system doesn't launch any other activities into
+the task holding the instance. The activity is always the single and only member of its task;
+any activities started by this one open in a separate task.</dd>
+</dl>
+
+
+<p>As another example, the Android Browser application declares that the web browser activity should
+always open in its own task&mdash;by specifying the {@code singleTask} launch mode in the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> element.
+This means that if your application issues an
+intent to open the Android Browser, its activity is <em>not</em> placed in the same
+task as your application. Instead, either a new task starts for the Browser or, if the Browser
+already has a task running in the background, that task is brought forward to handle the new
+intent.</p>
+
+<p>Regardless of whether an activity starts in a new task or in the same task as the activity that
+started it, the <em>Back</em> button always takes the user to the previous activity. However, if you
+start an activity that specifies the {@code singleTask} launch mode, then if an instance of
+that activity exists in a background task, that whole task is brought to the foreground. At this
+point, the back stack now includes all activities from the task brought forward, at the top of the
+stack. Figure 4 illustrates this type of scenario.</p>
+
+<img src="{@docRoot}images/fundamentals/diagram_backstack_singletask_multiactivity.png" alt="" />
+<p class="img-caption"><strong>Figure 4.</strong> A representation of how an activity with
+launch mode "singleTask" is added to the back stack. If the activity is already a part of a
+background task with its own back stack, then the entire back stack also comes
+forward, on top of the current task.</p>
+
+<p>For more information about using launch modes in the manifest file, see the
+<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
+element documentation, where the {@code launchMode} attribute and the accepted values are
+discussed more.</p>
+
+<p class="note"><strong>Note:</strong> The behaviors that you specify for your activity with the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> attribute
+can be overridden by flags included with the intent that start your activity, as discussed in the
+next section.</p>
+
+
+
+<h4 id="#IntentFlagsForTasks">Using Intent flags</h4>
+
+<p>When starting an activity, you can modify the default association of an activity to its task
+by including flags in the intent that you deliver to {@link
+android.app.Activity#startActivity startActivity()}. The flags you can use to modify the
+default behavior are:</p>
+
+<p>
+  <dt>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</dt>
+    <dd>Start the activity in a new task. If a task is already running for the activity you are now
+starting, that task is brought to the foreground with its last state restored and the activity
+receives the new intent in {@link android.app.Activity#onNewIntent onNewIntent()}. 
+    <p>This produces the same behavior as the {@code "singleTask"} <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> value,
+discussed in the previous section.</p></dd>
+  <dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt>
+    <dd>If the activity being started is the current activity (at the top of the back stack), then
+the existing instance receives a call to {@link android.app.Activity#onNewIntent onNewIntent()},
+instead of creating a new instance of the activity.
+    <p>This produces the same behavior as the {@code "singleTop"} <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> value,
+discussed in the previous section.</p></dd>
+  <dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt>
+    <dd>If the activity being started is already running in the current task, then instead
+of launching a new instance of that activity, all of the other activities on top of it are
+destroyed and this intent is delivered to the resumed instance of the activity (now on top),
+through {@link android.app.Activity#onNewIntent onNewIntent()}).
+    <p>There is no value for the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
+attribute that produces this behavior.</p>
+    <p>{@code FLAG_ACTIVITY_CLEAR_TOP} is most often used in conjunction with {@code
+FLAG_ACTIVITY_NEW_TASK}.  When used together, these flags are a way of locating an existing activity
+in another task and putting it in a position where it can respond to the intent. </p>
+    <p class="note"><strong>Note:</strong> If the launch mode of the designated activity is {@code
+"standard"}, it too is removed from the stack and a new instance is launched in its place to handle
+the incoming intent.  That's because a new instance is always created for a new intent when the
+launch mode is {@code "standard"}. </p>
+</dd>
+</dl>
+
+
+
+
+
+<h3 id="Affinities">Handling affinities</h3>
+
+<p>The <em>affinity</em> indicates which task an activity prefers to belong to. By default, all the
+activities from the same application have an affinity for each other. So, by default, all
+activities in the same application prefer to be in the same task. However, you can modify
+the default affinity for an activity. Activities defined in
+different applications can share an affinity, or activities defined in the same application can be
+assigned different task affinities.</p>
+
+<p>You can modify the affinity for any given activity with the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> attribute
+of the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
+element.</p>
+
+<p>The <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
+attribute takes a string value, which must be unique from the default package name
+declared in the <a href="{@docRoot}guide/topics/manifest/manifest-element.html">{@code
+&lt;manifest&gt;}</a> element, because the system uses that name to identify the default task
+affinity for the application.</p>
+
+<p>The affinity comes into play in two circumstances:</p>
+<ul>
+  <li>When the intent that launches an activity contains the {@link
+android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag.
+
+<p>A new activity is, by default, launched into the task of the activity
+that called {@link android.app.Activity#startActivity startActivity()}. It's pushed onto the same
+back stack as the caller.  However, if the intent passed to {@link
+android.app.Activity#startActivity startActivity()} contains the {@link
+android.content.Intent#FLAG_ACTIVITY_NEW_TASK}
+flag, the system looks for a different task to house the new activity. Often, it's a new task. 
+However, it doesn't have to be.  If there's already an existing task with the same affinity as the
+new activity, the activity is launched into that task.  If not, it begins a new task.</p>
+
+<p>If this flag causes an activity to begin a new task and the user presses the <em>Home</em> button
+to leave
+it, there must be some way for the user to navigate back to the task. Some entities (such as the
+notification manager) always start activities in an external task, never as part of their own, so
+they always put {@code FLAG_ACTIVITY_NEW_TASK} in the intents they pass to {@link
+android.app.Activity#startActivity startActivity()}.  If you have an activity that can be invoked by
+an external entity that might use this flag, take care that the user has a independent way to get
+back to the task that's started, such as with a launcher icon (the root activity of the task
+has a {@link android.content.Intent#CATEGORY_LAUNCHER} intent filter; see the <a
+href="#Starting">Starting a task</a> section below).</p>
+</li>
+
+  <li>When an activity has its <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">{@code
+allowTaskReparenting}</a> attribute set to {@code "true"}.
+  <p>In this case, the activity can move from the task it starts to the task it has an affinity
+for, when that task comes to the foreground.</p>
+  <p>For example, suppose that an activity that reports weather conditions in selected cities is
+defined as part of a travel application.  It has the same affinity as other activities in the same
+application (the default application affinity) and it allows re-parenting with this attribute.
+When one of your activities starts the weather reporter activity, it initially belongs to the same
+task as your activity. However, when the travel application's task comes to the foreground, the
+weather reporter activity is reassigned to that task and displayed within it.</p>
+</li>
+</ul>
+
+<p class="note"><strong>Tip:</strong> If an {@code .apk} file contains more than one "application"
+from the user's point of view, you probably want to use the <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
+attribute to assign different affinities to the activities associated with each "application".</p>
+
+
+
+<h3 id="Clearing">Clearing the back stack</h3>
+
+<p>If the user leaves a task for a long time, the system clears the task of all activities except
+the root activity.  When the user returns to the task again, only the root activity is restored.
+The system behaves this way, because, after an extended amount of time, users likely have abandoned
+what they were doing before and are returning to the task to begin something new. </p>
+
+<p>There are some activity attributes that you can use to modify this behavior: </p>
+
+<dl>
+<dt><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code>
+</dt>
+<dd>If this attribute is set to {@code "true"} in the root activity of a task,
+the default behavior just described does not happen.
+The task retains all activities in its stack even after a long period.</dd>
+
+<dt><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt>
+<dd>If this attribute is set to {@code "true"} in the root activity of a task,
+the stack is cleared down to the root activity whenever the user leaves the task
+and returns to it.  In other words, it's the opposite of <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#always">{@code
+alwaysRetainTaskState}</a>.  The user always returns to the task in its
+initial state, even after a leaving the task for only a moment.</dd>
+
+<dt><code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code>
+</dt>
+<dd>This attribute is like <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>,
+but it operates on a
+single activity, not an entire task.  It can also cause any activity to go
+away, including the root activity.  When it's set to {@code "true"}, the
+activity remains part of the task only for the current session.  If the user
+leaves and then returns to the task, it is no longer present.</dd>
+</dl>
+
+
+
+
+<h3 id="Starting">Starting a task</h3>
+
+<p>You can set up an activity as the entry point for a task by giving it an intent filter with
+{@code "android.intent.action.MAIN"} as the specified action and {@code
+"android.intent.category.LAUNCHER"} as the specified category. For example:</p>
+
+<pre>
+&lt;activity ... &gt;
+    &lt;intent-filter ... &gt;
+        &lt;action android:name="android.intent.action.MAIN" /&gt;
+        &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
+    &lt;/intent-filter&gt;
+    ...
+&lt;/activity&gt;
+</pre>
+
+<p>An intent filter of this kind causes an icon and label for the
+activity to be displayed in the application launcher, giving users a way to launch the activity and
+to return to the task that it creates any time after it has been launched.
+</p>
+
+<p>This second ability is important: Users must be able to leave a task and then come back to it
+later using this activity launcher.  For this reason, the two <a href="#LaunchModes">launch
+modes</a> that mark activities as always initiating a task, {@code "singleTask"} and "{@code
+"singleInstance"}, should be used only when the activity has an {@link
+android.content.Intent#ACTION_MAIN}
+and a {@link android.content.Intent#CATEGORY_LAUNCHER}
+filter. Imagine, for example, what could happen if the filter is missing: An intent launches a
+{@code "singleTask"} activity, initiating a new task, and the user spends some time working in
+that task.  The user then presses the <em>Home</em> button. The task is now sent to the background
+and is
+not visible. Now the user has no way to return to the task, because it is not represented in the
+application launcher.
+</p>
+
+<p>For those cases where you don't want the user to be able to return to an activity, set the
+  <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> element's
+<a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code
+finishOnTaskLaunch}</a> to {@code "true"} (see <a
+href="#Clearing">Clearing the stack</a>).</p>
+
+
+
+<!--
+<h2>Beginner's Path</h2>
+
+<p>For more information about how to use intents to
+activate other application components and publish the intents to which your components
+respond, continue with the <b><a
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
+Filters</a></b> document.</p>
+-->
diff --git a/docs/html/guide/developing/building/building-cmdline.jd b/docs/html/guide/developing/building/building-cmdline.jd
deleted file mode 100644
index fd90b1a..0000000
--- a/docs/html/guide/developing/building/building-cmdline.jd
+++ /dev/null
@@ -1,371 +0,0 @@
-page.title=Building and Running from the Command Line
-parent.title=Building and Running
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-      <ol>
-        <li><a href="#DebugMode">Building in Debug Mode</a></li>
-        <li><a href="#ReleaseMode">Building in Release Mode</a>
-          <ol>
-            <li><a href="#ManualReleaseMode">Build unsigned</a></li>
-            <li><a href="#AutoReleaseMode">Build signed and aligned</a></li>
-            <li><a href="#OnceBuilt">Once built and signed in release mode</a></li>
-          </ol>
-        </li>
-        <li><a href="#RunningOnEmulator">Running on the Emulator</a></li>
-        <li><a href="#RunningOnDevice">Running on a Device</a></li>
-        <li><a href="#Signing">Application Signing</a></li>
-        <li><a href="#AntReference">Ant Command Reference</a></li>
-      </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/developing/devices/managing-avds-cmdline.html">Managing AVDs from
-the Command Line</a></li>
-    <li><a href="{@docRoot}guide/developing/devices/emulator.html">Using the Android
-Emulator</a></li>
-    <li><a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a></li>
-  </ol>
-    </div>
-  </div>
-
-  <p>There are two ways to build your application using the Ant build script: one for
-  testing/debugging your application &mdash; <em>debug mode</em> &mdash; and one for building your
-  final package for release &mdash; <em>release mode</em>. Regardless of which way you build your application,
-  it must be signed before it can install on an emulator or device&mdash;with a debug key when building
-  in debug mode and with your own private key when building in release mode.</p>
-
-  <p>Whether you're building in debug mode or release mode, you need to use the Ant tool to compile
-  and build your project. This will create the .apk file that you can install on an emulator or device.
-  When you build in debug mode, the .apk file is automatically signed by the SDK tools with
-  a debug key, so it's instantly ready for installation onto an emulator or attached
-  development device. You cannot distribute an application that is signed with a debug key.
-  When you build in release mode, the .apk file is <em>unsigned</em>, so you
-  must manually sign it with your own private key, using Keytool and Jarsigner.</p>
-
-  <p>It's important that you read and understand <a href=
-  "{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>, particularly once
-  you're ready to release your application and share it with end-users. That document describes the
-  procedure for generating a private key and then using it to sign your .apk file. If you're just
-  getting started, however, you can quickly run your applications on an emulator or your own
-  development device by building in debug mode.</p>
-
-  <p>If you don't have Ant, you can obtain it from the <a href="http://ant.apache.org/">Apache Ant
-  home page</a>. Install it and make sure it is in your executable PATH. Before calling Ant, you
-  need to declare the JAVA_HOME environment variable to specify the path to where the JDK is
-  installed.</p>
-
-  <p class="note"><strong>Note:</strong> When installing JDK on Windows, the default is to install
-  in the "Program Files" directory. This location will cause <code>ant</code> to fail, because of
-  the space. To fix the problem, you can specify the JAVA_HOME variable like this:
-  <pre>set JAVA_HOME=c:\Progra~1\Java\&lt;jdkdir&gt;</pre>
-
-  <p>The easiest solution, however, is to install JDK in a non-space directory, for example:</p>
-
-  <pre>c:\java\jdk1.6.0_02</pre>
-
-  <h2 id="DebugMode">Building in Debug Mode</h2>
-
-  <p>For immediate application testing and debugging, you can build your application in debug mode
-  and immediately install it on an emulator. In debug mode, the build tools automatically sign your
-  application with a debug key and optimize the package with {@code zipalign}.</p>
-
-  <p>To build in debug mode:</p>
-
-  <ol>
-    <li>Open a command-line and navigate to the root of your project directory.</li>
-    <li>Use Ant to compile your project in debug mode:
-      <pre>
-ant debug
-</pre>
-
-      <p>This creates your debug <code>.apk</code> file inside the project <code>bin/</code> directory, named
-      <code>&lt;your_project_name&gt;-debug.apk</code>. The file is already signed with
-      the debug key and has been aligned with
-      <a href="{@docRoot}guide/developing/tools/zipalign.html"><code>zipalign</code></a>.
-      </p>
-    </li>
-  </ol>
-
-  <p>Each time you change a source file or resource, you must run Ant again in order to package up
-  the latest version of the application.</p>
-
-  <p>To install and run your application on an emulator, see the following section about <a href=
-  "#RunningOnEmulator">Running on the Emulator</a>.</p>
-
-  <h2 id="ReleaseMode">Building in Release Mode</h2>
-
-  <p>When you're ready to release and distribute your application to end-users, you must build your
-  application in release mode. Once you have built in release mode, it's a good idea to perform
-  additional testing and debugging with the final .apk.</p>
-
-  <p>Before you start building your application in release mode, be aware that you must sign the
-  resulting application package with your private key, and should then align it using the {@code
-  zipalign} tool. There are two approaches to building in release mode: build an unsigned package
-  in release mode and then manually sign and align the package, or allow the build script to sign
-  and align the package for you.</p>
-
-  <h3 id="ManualReleaseMode">Build unsigned</h3>
-
-  <p>If you build your application <em>unsigned</em>, then you will need to manually sign and align
-  the package.</p>
-
-  <p>To build an <em>unsigned</em> .apk in release mode:</p>
-
-  <ol>
-    <li>Open a command-line and navigate to the root of your project directory.</li>
-
-    <li>Use Ant to compile your project in release mode:
-      <pre>
-ant release
-</pre>
-    </li>
-  </ol>
-
-  <p>This creates your Android application .apk file inside the project <code>bin/</code>
-  directory, named <code><em>&lt;your_project_name&gt;</em>-unsigned.apk</code>.</p>
-
-  <p class="note"><strong>Note:</strong> The .apk file is <em>unsigned</em> at this point and can't
-  be installed until signed with your private key.</p>
-
-  <p>Once you have created the unsigned .apk, your next step is to sign the .apk with your private
-  key and then align it with {@code zipalign}. To complete this procedure, read <a href=
-  "{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.</p>
-
-  <p>When your <code>.apk</code> has been signed and aligned, it's ready to be distributed to end-users.
-  You should test the final build on different devices or AVDs to ensure that it
-  runs properly on different platforms.</p>
-
-  <h3 id="AutoReleaseMode">Build signed and aligned</h3>
-
-  <p>If you would like, you can configure the Android build script to automatically sign and align
-  your application package. To do so, you must provide the path to your keystore and the name of
-  your key alias in your project's {@code ant.properties} file. With this information provided,
-  the build script will prompt you for your keystore and alias password when you build in release
-  mode and produce your final application package, which will be ready for distribution.</p>
-
-  <p class="caution"><strong>Caution:</strong> Due to the way Ant handles input, the password that
-  you enter during the build process <strong>will be visible</strong>. If you are concerned about
-  your keystore and alias password being visible on screen, then you may prefer to perform the
-  application signing manually, via Jarsigner (or a similar tool). To instead perform the signing
-  procedure manually, <a href="#ManualReleaseMode">build unsigned</a> and then continue with
-  <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.</p>
-
-  <p>To specify your keystore and alias, open the project {@code ant.properties} file (found in
-  the root of the project directory) and add entries for {@code key.store} and {@code key.alias}.
-  For example:</p>
-  <pre>
-key.store=path/to/my.keystore
-key.alias=mykeystore
-</pre>
-
-  <p>Save your changes. Now you can build a <em>signed</em> .apk in release mode:</p>
-
-  <ol>
-    <li>Open a command-line and navigate to the root of your project directory.</li>
-
-    <li>Use Ant to compile your project in release mode:
-      <pre>
-ant release
-</pre>
-    </li>
-
-    <li>When prompted, enter you keystore and alias passwords.
-
-      <p class="caution"><strong>Caution:</strong> As described above, your password will be
-      visible on the screen.</p>
-    </li>
-  </ol>
-
-  <p>This creates your Android application .apk file inside the project <code>bin/</code>
-  directory, named <code><em>&lt;your_project_name&gt;</em>-release.apk</code>. This .apk file has
-  been signed with the private key specified in {@code ant.properties} and aligned with {@code
-  zipalign}. It's ready for installation and distribution.</p>
-
-  <h3 id="OnceBuilt">Once built and signed in release mode</h3>
-
-  <p>Once you have signed your application with a private key, you can install and run it on an
-  <a href="#RunningOnEmulator">emulator</a> or <a href="#RunningOnDevice">device</a>. You can
-  also try installing it onto a device from a web server. Simply upload the signed .apk to a web
-  site, then load the .apk URL in your Android web browser to download the application and begin
-  installation. (On your device, be sure you have enabled
-  <em>Settings &gt; Applications &gt; Unknown sources</em>.)</p>
-
-  <h2 id="RunningOnEmulator">Running on the Emulator</h2>
-
-  <p>Before you can run your application on the Android Emulator, you must <a href=
-  "{@docRoot}guide/developing/devices/managing-avds.html">create an AVD</a>.</p>
-
-  <p>To run your application:</p>
-
-  <ol>
-    <li>
-      <strong>Open the AVD Manager and launch a virtual device</strong>
-
-      <p>From your SDK's <code>platform-tools/</code> directory, execute the {@code android} tool
-with the <code>avd</code> options:</p>
-      <pre>
-android avd
-</pre>
-
-      <p>In the <em>Virtual Devices</em> view, select an AVD and click <strong>Start</strong>.</p>
-    </li>
-
-    <li>
-      <strong>Install your application</strong>
-
-      <p>From your SDK's <code>tools/</code> directory, install the {@code .apk} on the
-      emulator:</p>
-      <pre>
-adb install <em>&lt;path_to_your_bin&gt;</em>.apk
-</pre>
-
-      <p>Your .apk file (signed with either a release or debug key) is in your project {@code bin/}
-      directory after you build your application.</p>
-
-      <p>If there is more than one emulator running, you must specify the emulator upon which to
-      install the application, by its serial number, with the <code>-s</code> option. For
-      example:</p>
-      <pre>
-adb -s emulator-5554 install <em>path/to/your/app</em>.apk
-</pre>
-
-      <p>To see a list of available device serial numbers, execute {@code adb devices}.</p>
-    </li>
-  </ol>
-
-  <p>If you don't see your application on the emulator, try closing the emulator and launching the
-  virtual device again from the AVD Manager. Sometimes when you install an application for the
-  first time, it won't show up in the application launcher or be accessible by other applications.
-  This is because the package manager usually examines manifests completely only on emulator
-  startup.</p>
-
-  <p>Be certain to create multiple AVDs upon which to test your application. You should have one
-  AVD for each platform and screen type with which your application is compatible. For instance, if
-  your application compiles against the Android 1.5 (API Level 3) platform, you should create an
-  AVD for each platform equal to and greater than 1.5 and an AVD for each <a href=
-  "{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test your
-  application on each one.</p>
-
-  <p class="note"><strong>Tip:</strong> If you have <em>only one</em> emulator running, you can
-  build your application and install it on the emulator in one simple step. Navigate to the root of
-  your project directory and use Ant to compile the project with <em>install mode</em>: <code>ant
-  install</code>. This will build your application, sign it with the debug key, and install it on
-  the currently running emulator.</p>
-
-  <h2 id="RunningOnDevice">Running on a Device</h2>
-
-  <p>Before you can run your application on a device, you must perform some basic setup for your
-  device:</p>
-
-  <ul>
-    <li>Enable USB Debugging on your device. You can find the setting on most Android devices by
-    going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
-
-    <li>Ensure that your development computer can detect your device when connected via USB</li>
-  </ul>
-
-  <p>Read <a href="{@docRoot}guide/developing/device.html#setting-up">Setting up a Device for
-  Development</a> for more information.</p>
-
-  <p>Once your device is set up and connected via USB, navigate to your SDK's <code>platform-tools/</code>
-  directory and install the <code>.apk</code> on the device:</p>
-  <pre>
-adb -d install <em>path/to/your/app</em>.apk
-</pre>
-
-  <p>The {@code -d} flag specifies that you want to use the attached device (in case you also have
-  an emulator running).</p>
-
-  <p>For more information on the tools used above, please see the following documents:</p>
-
-  <ul>
-    <li><a href="{@docRoot}guide/developing/tools/android.html">android Tool</a></li>
-
-    <li><a href="{@docRoot}guide/developing/devices/emulator.html">Android Emulator</a></li>
-
-    <li><a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a> (ADB)</li>
-  </ul>
-
-  <h2 id="Signing">Application Signing</h2>
-
-  <p>As you begin developing Android applications, understand that all Android applications must be
-  digitally signed before the system will install them on an emulator or device. There are two ways
-  to do this: with a <em>debug key</em> (for immediate testing on an emulator or development
-  device) or with a <em>private key</em> (for application distribution).</p>
-
-  <p>The Android build tools help you get started by automatically signing your .apk files with a
-  debug key at build time. This means that you can compile your application and install it on the
-  emulator without having to generate your own private key. However, please note that if you intend
-  to publish your application, you <strong>must</strong> sign the application with your own private
-  key, rather than the debug key generated by the SDK tools.</p>
-
-  <p>The ADT plugin helps you get started quickly by signing your .apk files with a debug key,
-  prior to installing them on an emulator or development device. This means that you can quickly
-  run your application from Eclipse without having to generate your own private key. No specific
-  action on your part is needed, provided ADT has access to Keytool. However, please note that if
-  you intend to publish your application, you <strong>must</strong> sign the application with your
-  own private key, rather than the debug key generated by the SDK tools.</p>
-
-  <p>Please read <a href="{@docRoot}guide/publishing/app-signing.html">Signing Your
-  Applications</a>, which provides a thorough guide to application signing on Android and what it
-  means to you as an Android application developer. The document also includes a guide to exporting
-  and signing your application with the ADT's Export Wizard.</p>
-
-  <h2 id="AntReference">Ant Command Reference</h2>
-  <dt><code>ant clean</code></dt>
-  <dd>Cleans the project. If you include the <code>all</code> target before <code>clean</code>
-(<code>ant all clean</code>), other projects are also cleaned. For instance if you clean a
-test project, the tested project is also cleaned.</dd>
-
-  <dt><code>ant debug</code></dt>
-  <dd>Builds a debug package. Works on application, library, and test projects and compiles
-  dependencies as  needed.</dd>
-
-  <dt id="emma"><code>ant emma debug</code></dt>
-  <dd>Builds a test project while building the tested project with instrumentation turned on.
-  This is used to run tests with code coverage enabled.</dd>
-
-  <dt><code>ant release</code></dt>
-  <dd>Builds a release package.</dd>
-
-  <dt><code>ant instrument</code>
-  </dt>
-  <dd>Builds an instrumented debug package. This is generally called automatically when building a
-  test project with code coverage enabled (with the <code>emma</code>
-  target)</dd>
-
-  <dt><code>ant &lt;build_target&gt; install</code></dt>
-  <dd>Builds and installs a package. Using <code>install</code> by itself fails.</dd>
-
-  <dt><code>ant installd</code></dt>
-  <dd>Installs an already compiled debug package. This fails if the <code>.apk</code> is not
-  already built.</dd>
-
-  <dt><code>ant installr</code></dt>
-  <dd>Installs an already compiled release package. This fails if the <code>.apk</code> is not
-  already built.</dd>
-
-  <dt><code>ant installt</code></dt>
-  <dd>Installs an already compiled test package. Also installs the <code>.apk</code> of the
-  tested application. This fails if the <code>.apk</code> is not already built.</dd>
-
-  <dt><code>ant installi</code></dt>
-  <dd>Installs an already compiled instrumented package. This is generally not used manually as
-  it's called when installing a test package. This fails if the <code>.apk</code> is not already
-  built.</dd>
-
-   <dt><code>ant test</code></dt>
-   <dd>Runs the tests (for test projects). The tested and test <code>.apk</code> files must be
-   previously installed.</dd>
-
-  <dt><code>ant debug installt test</code></dt>
-  <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
-  runs the tests.</dd>
-
-  <dt><code>ant emma debug install test</code></dt>
-  <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
-  runs the tests with code coverage enabled.</dd>
-
diff --git a/docs/html/guide/developing/building/building-eclipse.jd b/docs/html/guide/developing/building/building-eclipse.jd
deleted file mode 100644
index 6ebc49e..0000000
--- a/docs/html/guide/developing/building/building-eclipse.jd
+++ /dev/null
@@ -1,165 +0,0 @@
-page.title=Building and Running from Eclipse with ADT
-parent.title=Building and Running
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#RunningOnEmulatorEclipse">Running on an Emulator</a></li>
-
-        <li><a href="#RunningOnDeviceEclipse">Running on a Device</a></li>
-
-        <li><a href="#RunConfig">Creating a Run Configuration</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Eclipse and ADT provide an environment where most of the details of the build process are
-  hidden from you. By default, the build process constantly runs in the background as you make
-  changes to your project.</p>
-
-  <p>When Eclipse automatically builds your application, it enables debugging and signs the
-  <code>.apk</code> with a debug key, by default. When you run the application,
-  Eclipse invokes ADB and installs your application to a device or emulator, so you do not have to
-  manually perform these tasks. Since most of the build process is taken care of by Eclipse, the
-  following topics show you how to run an application, which will automatically build your
-  application as well.</p>
-
-  <p>To distribute your application, however, you must build your application in release mode and sign the
-  <code>.apk</code> file with your own private key.</p>
-  
-   <p>This document shows you how to run your application on an emulator or a real device 
-   from Eclipse&mdash;all of which is done using the debug version of your application. 
-   For more information about how to sign your application with a private key for release, see <a href=
-  "{@docRoot}guide/publishing/app-signing.html#ExportWizard">Signing Your Applications</a></p>
-
-  <h2 id="RunningOnEmulatorEclipse">Running on the emulator</h2>
-
-  <p>Before you can run your application on the Android Emulator, you must <a href=
-  "{@docRoot}guide/developing/devices/managing-avds.html">create an AVD</a>.</p>
-
-  <p>To run (or debug) your application, select <strong>Run</strong> &gt; <strong>Run</strong> (or
-  <strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar. The ADT plugin will
-  automatically create a default run configuration for the project. Eclipse will then perform the
-  following:</p>
-
-  <ol>
-    <li>Compile the project (if there have been changes since the last build).</li>
-
-    <li>Create a default run configuration (if one does not already exist for the project).</li>
-
-    <li>Install and start the application on an emulator (or device), based on the Deployment
-    Target defined by the run configuration.
-
-      <p>By default, Android run configurations use an "automatic target" mode for selecting a
-      device target. For information on how automatic target mode selects a deployment target, see
-      <a href="#AutoAndManualTargetModes">Automatic and manual target modes</a> below.</p>
-    </li>
-  </ol>
-
-  <p>If you run the application with the Debug option, the application will start in the "Waiting For Debugger" mode. Once the debugger
-  is attached, Eclipse opens the Debug perspective and starts the application's main activity. Otherwise, if you run the
-  application with the normal Run option, Eclipse installs the application on the device and launches the main activity.</p>
-
-  <p>To set or change the run configuration used for your project, use the run configuration
-  manager. See the section below about <a href="#RunConfig">Creating a Run Configuration</a> for more information.</p>
-
-  <p>Be certain to create multiple AVDs upon which to test your application. You should have one
-  AVD for each platform and screen type with which your application is compatible. For instance, if
-  your application compiles against the Android 1.5 (API Level 3) platform, you should create an
-  AVD for each platform equal to and greater than 1.5 and an AVD for each <a href=
-  "{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test your
-  application on each one.</p>
-
-  <h2 id="RunningOnDeviceEclipse">Running on a device</h2>
-
-  <p>Before you can run your application on a device, you must perform some basic setup for your
-  device:</p>
-
-  <ul>
-    <li>Ensure that your application is debuggable by setting the
-    <code>android:debuggable</code> attribute of the <code>&lt;application&gt;</code>
-    element to <code>true</code>. As of ADT 8.0, this is done by default when you build in debug mode.</li>
-
-    <li>Enable USB Debugging on your device. You can find the setting on most Android devices by
-    going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
-
-    <li>Ensure that your development computer can detect your device when connected via USB</li>
-  </ul>
-
-  <p>Read <a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a>
-  for more information.</p>
-
-  <p>Once set up and your device is connected via USB, install your application on the device by
-  selecting <strong>Run</strong> &gt; <strong>Run</strong> (or <strong>Run</strong> &gt;
-  <strong>Debug</strong>) from the Eclipse menu bar.</p>
-
-  <h2 id="RunConfig">Creating a Run Configuration</h2>
-
-  <p>The run configuration specifies the project to run, the Activity to start, the emulator or
-  connected device to use, and so on. When you first run a project as an <em>Android
-  Application</em>, ADT will automatically create a run configuration. The default run
-  configuration will launch the default project Activity and use automatic target mode for device
-  selection (with no preferred AVD). If the default settings don't suit your project, you can
-  customize the run configuration or even create a new one.</p>
-
-  <p>To create or modify a run configuration, refer to the Eclipse documentation on how to create Run configurations.
-  The following steps highlight the important things you need to do for an Android project:</p>
-
-  <ol>
-    <li>Open the run configuration manager from the Run Menu.</li>
-
-    <li>Expand the <strong>Android Application</strong> item and create a new configuration or open
-    an existing one.
-    </li>
-
-    <li>With the Run Configuration selected, adjust your desired run configuration settings:
-      <ul>
-      <li>In the Android tab, specify the Project and Activity to launch.
-      </li>
-      <li><p>In the Target tab, consider whether you'd like to use Manual or Automatic mode when
-      selecting an AVD to run your application. See the following section on <a href=
-      "#AutoAndManualTargetModes">Automatic and manual target modes</a>).</p>
-
-      <p>You can specify any emulator options to the Additional Emulator Command Line Options
-      field. For example, you could add <code>-scale 96dpi</code> to scale the AVD's screen to an
-      accurate size, based on the dpi of your computer monitor. For a full list of emulator
-      options, see the <a href="{@docRoot}guide/developing/tools/emulator.html">Android
-      Emulator</a> document.</p>
-      </li>
-      </ul>
-    </li>
-  </ol>
-
-  <h4 id="AutoAndManualTargetModes">Automatic and manual target modes</h4>
-
-  <p>By default, a run configuration uses the <strong>automatic</strong> target mode in order to
-  select an AVD. In this mode, ADT will select an AVD for the application in the following
-  manner:</p>
-
-  <ol>
-    <li>If there's a device or emulator already running and its AVD configuration meets the
-    requirements of the application's build target, the application is installed and run upon
-    it.</li>
-
-    <li>If there's more than one device or emulator running, each of which meets the requirements
-    of the build target, a "device chooser" is shown to let you select which device to use.</li>
-
-    <li>If there are no devices or emulators running that meet the requirements of the build
-    target, ADT looks at the available AVDs. If there is an AVD that matches the build target of the project,
-    ADT chooses that AVD. If the AVD versions are newer than the build target of the project, ADT chooses
-    the oldest possible version of an AVD that meets the project's build target requirement.</li>
-
-    <li>If there are no suitable AVDs, the application is not installed a console error warning tells
-    you that there is no existing AVD that meets the build target requirements.</li>
-  </ol>
-
-  <p>However, if a "preferred AVD" is selected in the run configuration, then the application will
-  <em>always</em> be deployed to that AVD. If it's not already running, then a new emulator will be
-  launched.</p>
-
-  <p>If your run configuration uses <strong>manual</strong> mode, then the "device chooser" is
-  presented every time that your application is run, so that you can select which AVD to use.</p>
\ No newline at end of file
diff --git a/docs/html/guide/developing/building/index.jd b/docs/html/guide/developing/building/index.jd
deleted file mode 100644
index 569cd28..0000000
--- a/docs/html/guide/developing/building/index.jd
+++ /dev/null
@@ -1,81 +0,0 @@
-page.title=Building and Running
-@jd:body
-
-<div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-      <ol>
-        <li><a href="#detailed-build">A Detailed Look at the Build Process</a></li>
-      </ol>
-    </div>
-  </div>
-  
- <p>During the build process, your Android projects are compiled and packaged into an .apk file,
-  the container for your application binary. It contains all of the information necessary to run
-  your application on a device or emulator, such as compiled <code>.dex</code> files (<code>.class</code> files
-  converted to Dalvik byte code), a binary version of the <code>AndroidManifest.xml</code> file, compiled
-  resources (<code>resources.arsc</code>) and uncompiled resource files for your application.</p>
-
-  <p>If you are developing in Eclipse, the ADT plugin incrementally builds your project as you
-  make changes to the source code. Eclipse outputs an <code>.apk</code> file automatically to the bin folder of
-  the project, so you do not have to do anything extra to generate the <code>.apk</code>.</p>
-
-  <p>If you are developing in a non-Eclipse environment, you can build your project with the
-  generated <code>build.xml</code> Ant file that is in the project directory. The Ant file calls targets that
-  automatically call the build tools for you.</p>
-
-  <p>To run an application on an emulator or device, the application must be signed using debug or
-  release mode. You typically want to sign your application in debug mode when you develop and test
-  your application, because the build tools use a debug key with a known password so you do not have
-  to enter it every time you build. When you are ready to release the application to Google
-  Play, you must sign the application in release mode, using your own private key.</p>
-
-  <p>Fortunately, Eclipse or your Ant build script signs the application for you in debug mode
-  when you build your application. You can also easily setup Eclipse or your Ant build to sign your
-  application in release mode as well. For more information on signing applications, see <a href=
-  "{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a>.</p>
-  
-  <p>The following diagram depicts the components involved in building and running an application:</p>
-
-  <img src="{@docRoot}images/build-simplified.png" />
-
-  <h2 id="detailed-build">A Detailed Look at the Build Process</h2>
-
-  <p>The build process involves many tools and processes that generate intermediate files on the
-  way to producing an <code>.apk</code>. If you are developing in Eclipse, the complete build process is
-  automatically done periodically as you develop and save your code changes. If you are using other
-  IDEs, this build process is done every time you run the generated Ant build script for your
-  project. It is useful, however, to understand what is happening under the hood since much of the
-  tools and processes are masked from you. The following diagram depicts the different tools and
-  processes that are involved in a build:</p>
-
-  <img src="{@docRoot}images/build.png" />
-
-  <p>The general process for a typical build is outlined below:</p>
-
-  <ul>
-  
-    <li>The Android Asset Packaging Tool (aapt) takes your application resource files, such as the
-    <code>AndroidManifest.xml</code> file and the XML files for your Activities, and compiles them. An <code>R.java</code> is
-    also produced so you can reference your resources from your Java code.</li>
-
-    <li>The aidl tool converts any <code>.aidl</code> interfaces that you have into Java interfaces.</li>
-
-    <li>All of your Java code, including the <code>R.java</code> and <code>.aidl</code> files, are compiled by the Java
-    compiler and .class files are output.</li>
-
-    <li>The dex tool converts the .class files to Dalvik byte code. Any 3rd party libraries and
-    .class files that you have included in your project are also converted into <code>.dex</code> files so that
-    they can be packaged into the final <code>.apk</code> file.</li>
-
-    <li>All non-compiled resources (such as images), compiled resources, and the .dex files are
-    sent to the apkbuilder tool to be packaged into an <code>.apk</code> file.</li>
-
-    <li>Once the <code>.apk</code> is built, it must be signed with either a debug or release key before it can
-    be installed to a device.</li>
-
-    <li>Finally, if the application is being signed in release mode, you must align the <code>.apk</code> with
-    the zipalign tool. Aligning the final <code>.apk</code> decreases memory usage when the application is
-    running on a device.</li>
-  </ul>
-
diff --git a/docs/html/guide/developing/debug-tasks.html b/docs/html/guide/developing/debug-tasks.html
deleted file mode 100644
index 4e73804..0000000
--- a/docs/html/guide/developing/debug-tasks.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/debugging/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/debugging/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/debugging/ddms.jd b/docs/html/guide/developing/debugging/ddms.jd
deleted file mode 100644
index 9892e49..0000000
--- a/docs/html/guide/developing/debugging/ddms.jd
+++ /dev/null
@@ -1,357 +0,0 @@
-page.title=Using DDMS
-parent.title=Debugging
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-      <li><a href="#running">Running DDMS</a></li>
-        <li><a href="#how-ddms-works">How DDMS Interacts with a Debugger</a></li>
-
-        <li><a href="#using-ddms">Using DDMS</a>
-        <ol>
-                <li><a href="#heap">Viewing heap usage for a process</a></li>
-                <li><a href="#alloc">Tracking memory allocation of objects</a></li>
-                <li><a href="#emulator">Working with an emulator or device's file system</a></li>
-                <li><a href="#thread">Examining thread information</a></li>
-                <li><a href="#profiling">Starting method profiling</a></li>
-                <li><a href="#network">Using the Network Traffic tool</a></li>
-                <li><a href="#logcat">Using LogCat</a></li>
-                <li><a href="#ops-location">Emulating phone operations and location</a></li>
-            </ol>
-        
-        </li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Android ships with a debugging tool called the Dalvik Debug Monitor Server (DDMS), which
-  provides port-forwarding services, screen capture on the device, thread and heap information on
-  the device, logcat, process, and radio state information, incoming call and SMS spoofing,
-  location data spoofing, and more. This page provides a modest discussion of DDMS features; it is
-  not an exhaustive exploration of all the features and capabilities.</p>
-  
-  <h2 id="running">Running DDMS</h2>
-  <p>DDMS is integrated into Eclipse and is also shipped in the <code>tools/</code> directory of the
-  SDK. DDMS works with both the emulator and a connected device. If both are connected and running simultaneously, 
-  DDMS defaults to the emulator.</p>
-  
-  <ul>
-    <li>From Eclipse: Click <strong>Window > Open Perspective > Other... > DDMS</strong>.</li>
-    <li>From the command line: Type <code>ddms</code> (or <code>./ddms</code> on Mac/Linux) from the <code>tools/</code>
-    directory. </li>
-  </ul>
-
-
-  <h2 id="how-ddms-works">How DDMS Interacts with a Debugger</h2>
-
-  <p>On Android, every application runs in its own process, each of which runs in its own virtual machine
-  (VM). Each VM exposes a unique port that a debugger can attach to.</p>
-
-  <p>When DDMS starts, it connects to <a href="{@docRoot}guide/developing/tools/adb.html">adb</a>.
-  When a device is connected, a VM monitoring service is created between
-  <code>adb</code> and DDMS, which notifies DDMS when a VM on the device is started or terminated. Once a VM
-  is running, DDMS retrieves the the VM's process ID (pid), via <code>adb</code>, and opens a connection to the
-  VM's debugger, through the adb daemon (adbd) on the device. DDMS can now talk to the VM using a
-  custom wire protocol.</p>
-
-  <p>DDMS assigns a debugging port to each VM on the device. Typically,
-  DDMS assigns port 8600 for the first debuggable VM, the next on 8601, and so on. When a debugger
-  connects to one of these ports, all traffic is forwarded to the debugger from the associated
-  VM. You can only attach a single debugger to a single port, but DDMS can handle multiple, attached
-  debuggers.</p>
-
-  <p>By default, DDMS also listens on another debugging port, the DDMS "base port" (8700, by default).
-  The base port is a port forwarder, which can accept VM traffic from any debugging port and forward
-  it to the debugger on port 8700. This allows you to attach one debugger to port 8700, and debug
-  all the VMs on a device. The traffic that is forwarded is determined by the currently selected process
-  in the DDMS Devices view.</p>
-
-  <p>The following screenshot shows a typical DDMS screen in Eclipse. If you are starting DDMS from
-  the command line, the screen is slightly different, but much of the functionality is identical.
-  Notice that the highlighted process, <code>com.android.email</code>, that is running in the emulator
-  has the debugging port 8700 assigned to it as well as 8606. This signifies that DDMS is currently
-  forwarding port 8606 to the static debugging port of 8700.</p>
-
-  <img src="{@docRoot}images/debug-ddms.png"
-       width="1024" />
-  <p class="img-caption"><strong>Figure 1.</strong> 
-  Screenshot of DDMS</p> 
-
-  <p>If you are not using Eclipse and ADT, read <a href=
-  "{@docRoot}guide/developing/debugging/debugging-projects-cmdline.html#debuggingPort">Configuring
-  your IDE to attach to the debugging port</a>, for more information on attaching your
-  debugger.</p>
-
-  <p class="note"><strong>Tip:</strong> You can set a number of DDMS preferences in
-  <strong>File</strong> &gt; <strong>Preferences</strong>. Preferences are saved to
-  <code>$HOME/.android/ddms.cfg</code>.</p>
-
-  <p class="warning"><strong>Known debugging issues with Dalvik</strong><br />
-  Debugging an application in the Dalvik VM should work the same as it does in other VMs. However,
-  when single-stepping out of synchronized code, the "current line" cursor may jump to the last
-  line in the method for one step.</p>
-
-  <h2 id="using-ddms">Using DDMS</h2>
-  The following sections describe how to use DDMS and the various tabs and panes that are part of the
-  DDMS GUI. The Eclipse version and the command line version have minor UI differences, but the 
-  same functionality. For information on running DDMS, see the previous section in this document,
-  <a href="#running">Running DDMS</a>.
-  
-  
-  <h3 id="heap">Viewing heap usage for a process</h3>
-
-  <p>DDMS allows you to view how much heap memory a process is using. This information is useful in
-  tracking heap usage at a certain point of time during the execution of your application.</p>
-  <p>To view heap usage for a process:</p>
-  <ol>
-    <li>In the Devices tab, select the process that you want to see the heap information for.</li>
-
-    <li>Click the <strong>Update Heap</strong> button to enable heap information for the
-    process.</li>
-
-    <li>In the Heap tab, click <strong>Cause GC</strong> to invoke garbage collection, which
-    enables the collection of heap data. When the operation completes, you will see a group of
-    object types and the memory that has been allocated for each type. You can click <strong>Cause
-    GC</strong> again to refresh the data.</li>
-
-    <li>Click on an object type in the list to see a bar graph that shows the number of objects
-    allocated for a particular memory size in bytes.</li>
-  </ol>
-
-  <h3 id="alloc">Tracking memory allocation of objects</h3>
-
-  <p>DDMS provides a feature to track objects that are being allocated to memory and to see which
-  classes and threads are allocating the objects. This allows you to track, in real time, where
-  objects are being allocated when you perform certain actions in your application. This
-  information is valuable for assessing memory usage that can affect application performance.
-  </p>
-  
-  <p>To track memory allocation of objects:</p>
-  <ol>
-    <li>In the Devices tab, select the process that you want to enable allocation tracking
-    for.</li>
-
-    <li>In the Allocation Tracker tab, click the <strong>Start Tracking</strong> button to begin
-    allocation tracking. At this point, anything you do in your application will be tracked.</li>
-
-    <li>Click <strong>Get Allocations</strong> to see a list of objects that have been allocated
-    since you clicked on the <strong>Start Tracking</strong> button. You can click on <strong>Get
-    Allocations</strong> again to append to the list new objects that that have been
-    allocated.</li>
-
-    <li>To stop tracking or to clear the data and start over, click the <strong>Stop Tracking
-    button</strong>.</li>
-
-    <li>Click on a specific row in the list to see more detailed information such as the method and
-    line number of the code that allocated the object.</li>
-  </ol>
-
-  <h3 id="emulator">Working with an emulator or device's file system</h3>
-
-  <p>DDMS provides a File Explorer tab that allows you to view, copy, and delete files on the
-  device. This feature is useful in examining files that are created by your application or if you
-  want to transfer files to and from the device.</p>
-  
-  <p>To work with an emulator or device's file system:</p>
-  <ol>
-    <li>In the Devices tab, select the emulator that you want to view the file system for.</li>
-
-    <li>To copy a file from the device, locate the file in the File Explorer and click the
-    <strong>Pull file</strong> button.</li>
-
-    <li>To copy a file to the device, click the <strong>Push file</strong> button on the File
-    Explorer tab.</li>
-  </ol>
-  
-  <!-- Need to elaborate more on where things are stored in the file system,
-   databases, apks, user info, files that are important to look at -->
-
-  <h3 id="thread">Examining thread information</h3>
-
-  <p>The Threads tab in DDMS shows you the currently running threads for a selected process.</p>
-
-  <ol>
-    <li>In the Devices tab, select the process that you want to examine the threads for.</li>
-
-    <li>Click the <strong>Update Threads</strong> button.</li>
-
-    <li>In the Threads tab, you can view the thread information for the selected process.</li>
-  </ol>
-
-  <h3 id="profiling">Starting method profiling</h3>
-
-  <p>Method profiling is a means to track certain metrics about a method, such as number of calls,
-  execution time, and time spent executing the method. If you want more granular control over 
-  where profiling data is collected, use the {@link android.os.Debug#startMethodTracing()} and 
-  {@link android.os.Debug#stopMethodTracing()} methods. For more information about generating trace logs, see 
-  <a href="debugging-tracing.html">Profiling and Debugging UIs</a>.</p>
-  
-  <p>Before you start method profiling in DDMS, be aware of the following restrictions:</p>
-    <ul>
-      <li>Android 1.5 devices are not supported.</li>
-      <li>Android 2.1 and earlier devices must
-      have an SD card present and your application must have permission to write to the SD card.
-      <li>Android 2.2 and later devices do not need an SD card. The trace log files are 
-      streamed directly to your development machine.</li>
-    </ul>
-  
-  <p>To start method profiling:</p>
-  <ol>
-    <li>On the Devices tab, select the process that you want to enable method profiling for.</li>
-
-    <li>Click the <strong>Start Method Profiling</strong> button.</li>
-
-    <li>Interact with your application to start the methods that you want to profile.</li>
-
-    <li>Click the <strong>Stop Method Profiling</strong> button. DDMS stops profiling your
-    application and opens <a href="{@docRoot}guide/developing/debugging/debugging-ui.html">Traceview</a>
-    with the method profiling information that was collected
-    between the time you clicked on <strong>Start Method Profiling</strong> and <strong>Stop Method
-    Profiling</strong>.</li>
-  </ol>
-
-   <h3 id="network">Using the Network Traffic tool</h3>
-   
-   <p>In Android 4.0, the DDMS (Dalvik Debug Monitor Server) includes a Detailed
-Network Usage tab that makes it possible to track when your application is
-making network requests. Using this tool, you can monitor how and when your app
-transfers data and optimize the underlying code appropriately. You can also
-distinguish between different traffic types by applying a “tag” to network
-sockets before use.</p>
-
-<p>These tags are shown in a stack area chart in DDMS, as shown in figure 2:</p>
-
-<img src="{@docRoot}images/developing/ddms-network.png" />
-<p class="img-caption"><strong>Figure 2.</strong> Network Usage tab.</p>
-
-<p>By monitoring the frequency of your data transfers, and the amount of data
-transferred during each connection, you can identify areas of your application
-that can be made more battery-efficient. Generally, you should look for
-short spikes that can be delayed, or that should cause a later transfer to be
-pre-empted. </p>
-
-<p>To better identify the cause of transfer spikes, the
-{@link android.net.TrafficStats} API allows you
-to tag the data transfers occurring within a thread using {@link
-android.net.TrafficStats#setThreadStatsTag setThreadStatsTag()}, followed
-by manually tagging (and untagging) individual sockets using {@link
-android.net.TrafficStats#tagSocket tagSocket()} and {@link
-android.net.TrafficStats#untagSocket untagSocket()}. For example:</p>
-
-<pre>TrafficStats.setThreadStatsTag(0xF00D);
-TrafficStats.tagSocket(outputSocket);
-// Transfer data using socket
-TrafficStats.untagSocket(outputSocket);</pre>
-
-<p>Alternatively, the Apache {@link org.apache.http.client.HttpClient} and 
-{@link java.net.URLConnection} APIs included in the platform
-automatically tag sockets internally based on the active tag (as 
-identified by 
-{@link android.net.TrafficStats#getThreadStatsTag getThreadStatsTag()}).
-These APIs correctly tag/untag sockets when recycled through
-keep-alive pools. In the following example,  
-{@link android.net.TrafficStats#setThreadStatsTag setThreadStatsTag()} 
-sets the active tag to be {@code 0xF00D}. 
-There can only be one active tag per thread. 
-That is the value that will 
-be returned by {@link android.net.TrafficStats#getThreadStatsTag getThreadStatsTag()}
-and thus used by {@link org.apache.http.client.HttpClient}  
- to tag sockets. The {@code finally} statement 
-invokes 
-{@link android.net.TrafficStats#clearThreadStatsTag clearThreadStatsTag()} 
-to clear the tag.</p>
-
-<pre>TrafficStats.setThreadStatsTag(0xF00D);
-    try {
-        // Make network request using HttpClient.execute()
-    } finally {
-        TrafficStats.clearThreadStatsTag();
-}</pre>
-
-<p>Socket tagging is supported in Android 4.0, but real-time stats will only be
-displayed on devices running Android 4.0.3 or higher.</p>
-   
-  <h3 id="logcat">Using LogCat</h3>
-
-  <p>LogCat is integrated into DDMS, and outputs the messages that you print out using the {@link android.util.Log}
-  class along with other system messages such as stack traces when exceptions are thrown. View the
-  <a href="{@docRoot}guide/developing/debugging/debugging-log.html">Reading and
-  Writing Log Messages.</a> topic for more information on how to log messages to the LogCat.</p>
-
-  <p>When you have set up your logging, you can use the LogCat feature of DDMS to filter certain
-  messages with the following buttons:</p>
-
-  <ul>
-    <li>Verbose</li>
-
-    <li>Debug</li>
-
-    <li>Info</li>
-
-    <li>Warn</li>
-
-    <li>Error</li>
-  </ul>
-  
-  <p>You can also setup your own custom filter to specify more details such as filtering messages
-  with the log tags or with the process id that generated the log message. The add filter,
-  edit filter, and delete filter buttons let you manage your custom filters.</p>
-
-  <h3 id="ops-location">Emulating phone operations and location</h3>
-  <p>The Emulator control tab lets you simulate a
-  phone's voice and data network status. This is useful when you want to test your application's
-  robustness in differing network environments.</p>
-
-  <h4>Changing network state, speed, and latency</h4>
-  <p>The Telephony Status section of the Emulator
-  controls tab lets you change different aspects of the phone's networks status, speed and latency.
-  The following options are available to you and are effective immediately after you set them:</p>
-
-  <ul>
-    <li>Voice - unregistered, home, roaming, searching, denied</li>
-
-    <li>Data - unregistered, home, roaming, searching, denied</li>
-
-    <li>Speed - Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA</li>
-
-    <li>Latency - GPRS, EDGE, UMTS</li>
-  </ul>
-
-  <h4>Spoofing calls or SMS text messages</h4>
-  <p>The Telephony Actions section of the Emulator
-  controls tab lets you spoof calls and messages. This is useful when you want to to test your
-  application's robustness in responding to incoming calls and messages that are sent to the phone.
-  The following actions are available to you:</p>
-
-  <ul>
-    <li>Voice - Enter a number in the <strong>Incoming number</strong> field and click 
-    <strong>Call</strong> to send a simulated call to the emulator or phone. Click the
-    <strong>Hang up</strong> button to terminate the call.</li>
-
-    <li>SMS - Enter a number in the <strong>Incoming number</strong> field and a message in the
-    <strong>Message:</strong> field and click the <strong>Send</strong> button to send the
-    message.</li>
-  </ul>
-
-  <h4>Setting the location of the phone</h4>
-  <p>If your application depends on the location of the phone, you can have DDMS send your
-  device or AVD a mock location. This is useful if you
-  want to test different aspects of your application's location specific features without
-  physically moving. The following geolocation data types are available to you:</p>
-
-  <ul>
-    <li>Manual - set the location by manually specifying decimal or sexagesimal longitude and
-    latitude values.</li>
-
-    <li>GPX - GPS eXchange file</li>
-
-    <li>KML - Keyhole Markup Language file</li>
-  </ul>
-  
-  For more information about providing mock location data, see 
-  <a href="{@docRoot}guide/topics/location/obtaining-user-location.html#MockData">Obtaining User Location</a>.
-  
diff --git a/docs/html/guide/developing/debugging/debugging-devtools.jd b/docs/html/guide/developing/debugging/debugging-devtools.jd
deleted file mode 100644
index 157d62e..0000000
--- a/docs/html/guide/developing/debugging/debugging-devtools.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Using the Dev Tools App
-parent.title=Debugging
-parent.link=index.html
-@jd:body
-
-<p>The Dev Tools application is installed by default on all system images included with the SDK,
-  so you can use it with the Android Emulator. With the Dev Tools application, you can enable a
-  number of settings on your device that will make it easier to test and debug your applications.</p>
-
-  <p> If you'd like to install the Dev Tools application
-  on a real development device, you can copy the application from your emulator and then install it
-  on your device using ADB. To copy the application from a running emulator, execute:</p>
-  <pre>
-adb -e pull /system/app/Development.apk ./Development.apk
-</pre>
-
-  <p>This copies the .apk file into the current directory. Then install it on your connected device
-  with:</p>
-  <pre>
-adb -d install Development.apk
-</pre>
-
-  <p>To get started, launch the Dev Tools application and select <strong>Development Settings</strong>. This will
-  open the Development Settings page with the following options (among others):</p>
-
-  <dl>
-    <dt><strong>Debug app</strong></dt>
-
-    <dd>
-      Lets you select the application to debug. You do not need to set this to attach a debugger,
-      but setting this value has two effects:
-
-      <ul>
-        <li>It will prevent Android from throwing an error if you pause on a breakpoint for a long
-        time while debugging.</li>
-
-        <li>It will enable you to select the <em>Wait for Debugger</em> option to pause application
-        startup until your debugger attaches (described next).</li>
-      </ul>
-    </dd>
-
-    <dt><strong>Wait for debugger</strong></dt>
-
-    <dd>Blocks the selected application from loading until a debugger attaches. This way you can
-    set a breakpoint in {@link android.app.Activity#onCreate onCreate()}, 
-    which is important to debug the startup process of an Activity.
-    When you change this option, any currently running instances of the selected application will
-    be killed. In order to check this box, you must have selected a debug application as described
-    in the previous option. You can do the same thing by adding {@link
-    android.os.Debug#waitForDebugger()} to your code.</dd>
-
-    <dt><strong>Show screen updates</strong></dt>
-
-    <dd>Flashes a momentary pink rectangle on any screen sections that are being redrawn. This is
-    very useful for discovering unnecessary screen drawing.</dd>
-
-    <dt><strong>Immediately destroy activities</strong></dt>
-
-    <dd>Tells the system to destroy an activity as soon as it is stopped (as if Android had to
-    reclaim memory).&nbsp; This is very useful for testing the {@link
-    android.app.Activity#onSaveInstanceState} / {@link
-    android.app.Activity#onCreate(android.os.Bundle)} code path, which would otherwise be difficult
-    to force. Choosing this option will probably reveal a number of problems in your application
-    due to not saving state. For more information about saving an activity's state, see the
-    <a href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
-document.</dd>
-
-    <dt><strong>Show CPU usage</strong></dt>
-
-    <dd>Displays CPU meters at the top of the screen, showing how much the CPU is being used. The
-    top red bar shows overall CPU usage, and the green bar underneath it shows the CPU time spent
-    in compositing the screen. 
-    <p class="note">Note: You cannot turn this feature off once it is on, without
-    restarting the emulator.</p></dd>
-
-    <dt><strong>Show background</strong></dt>
-
-    <dd>Displays a background pattern when no activity screens are visible. This typically does not
-    happen, but can happen during debugging.</dd>
-  </dl>
-
-  <p>These settings will be remembered across emulator restarts.</p>
-
-
-
diff --git a/docs/html/guide/developing/debugging/debugging-log.jd b/docs/html/guide/developing/debugging/debugging-log.jd
deleted file mode 100644
index b5b626e..0000000
--- a/docs/html/guide/developing/debugging/debugging-log.jd
+++ /dev/null
@@ -1,308 +0,0 @@
-page.title=Reading and Writing Logs
-parent.title=Debugging
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#logClass">The Log class</a></li>
-
-        <li><a href="#startingLogcat">Starting LogCat</a></li>
-
-        <li><a href="#filteringOutput">Filtering Log Output</a></li>
-
-        <li><a href="#outputFormat">Controlling Log Output Format</a></li>
-
-        <li><a href="#alternativeBuffers">Viewing Alternative Log Output Buffers</a></li>
-
-        <li><a href="#viewingStd">Viewing stdout and stderr</a></li>
-
-        <li><a href="#DebuggingWebPages">Debugging Web Pages</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>The Android logging system provides a mechanism for collecting and viewing system debug
-  output. Logcat dumps a log of system messages, which include things such as stack traces when the
-  emulator throws an error and messages that you have written from your application by using the
-  {@link android.util.Log} class. You can run LogCat through ADB or from DDMS, which allows you to
-  read the messages in real time.</p>
-
-  <h2 id="logClass">The <code>Log</code> class</h2>
-
-  <p>{@link android.util.Log} is a logging class that you can utilize in your code to print out
-  messages to the LogCat. Common logging methods include:</p>
-
-  <ul>
-    <li>{@link android.util.Log#v(String,String)} (verbose)</li>
-
-    <li>{@link android.util.Log#d(String,String)} (debug)</li>
-
-    <li>{@link android.util.Log#i(String,String)} (information)</li>
-
-    <li>{@link android.util.Log#w(String,String)} (warning)</li>
-
-    <li>{@link android.util.Log#e(String,String)} (error)</li>
-  </ul>For example:
-  <pre class="no-pretty-print">
-Log.i("MyActivity", "MyClass.getView() &mdash; get item number " + position);
-</pre>
-
-  <p>The LogCat will then output something like:</p>
-  <pre class="no-pretty-print">
-I/MyActivity( 1557): MyClass.getView() &mdash; get item number 1
-</pre>
-
-  <h2 id="startingLogcat">Using LogCat</h2>
-
-  <p>You can use LogCat from within DDMS or call it on an ADB shell. For more information on how to
-  use LogCat within DDMS, see <a href="{@docRoot}guide/developing/debugging/ddms.html#logcat">Using
-  DDMS</a>. To run LogCat, through the ADB shell, the general usage is:</p>
-  <pre>
-[adb] logcat [&lt;option&gt;] ... [&lt;filter-spec&gt;] ...
-</pre>
-
-  <p>You can use the <code>logcat</code> command from your development computer or from a remote
-  adb shell in an emulator/device instance. To view log output in your development computer, you
-  use</p>
-  <pre>
-$ adb logcat
-</pre>
-
-  <p>and from a remote adb shell you use</p>
-  <pre>
-# logcat
-</pre>
-
-  <p>The following table describes the <code>logcat</code> command line options:</p>
-
-  <table>
-    <tr>
-      <td><code>-c</code></td>
-
-      <td>Clears (flushes) the entire log and exits.</td>
-    </tr>
-
-    <tr>
-      <td><code>-d</code></td>
-
-      <td>Dumps the log to the screen and exits.</td>
-    </tr>
-
-    <tr>
-      <td><code>-f&nbsp;&lt;filename&gt;</code></td>
-
-      <td>Writes log message output to <code>&lt;filename&gt;</code>. The default is
-      <code>stdout</code>.</td>
-    </tr>
-
-    <tr>
-      <td><code>-g</code></td>
-      <td>Prints the size of the specified log buffer and exits.</td>
-    </tr>
-
-    <tr>
-      <td><code>-n&nbsp;&lt;count&gt;</code></td>
-
-      <td>Sets the maximum number of rotated logs to <code>&lt;count&gt;</code>. The default value
-      is 4. Requires the <code>-r</code> option.</td>
-    </tr>
-
-    <tr>
-      <td><code>-r&nbsp;&lt;kbytes&gt;</code></td>
-
-      <td>Rotates the log file every <code>&lt;kbytes&gt;</code> of output. The default value is
-      16. Requires the <code>-f</code> option.</td>
-    </tr>
-
-    <tr>
-      <td><code>-s</code></td>
-
-      <td>Sets the default filter spec to silent.</td>
-    </tr>
-
-    <tr>
-      <td><code>-v&nbsp;&lt;format&gt;</code></td>
-
-      <td>Sets the output format for log messages. The default is <code>brief</code> format. For a
-      list of supported formats, see <a href="#outputFormat">Controlling Log Output
-      Format</a>.</td>
-    </tr>
-  </table>
-
-  <h3 id="filteringOutput">Filtering Log Output</h3>
-
-  <p>Every Android log message has a <em>tag</em> and a <em>priority</em> associated with it.</p>
-
-  <ul>
-    <li>The tag of a log message is a short string indicating the system component from which the
-    message originates (for example, "View" for the view system).</li>
-
-    <li>The priority is one of the following character values, ordered from lowest to highest
-    priority:</li>
-
-    <li style="list-style: none; display: inline">
-      <ul>
-        <li><code>V</code> &mdash; Verbose (lowest priority)</li>
-
-        <li><code>D</code> &mdash; Debug</li>
-
-        <li><code>I</code> &mdash; Info</li>
-
-        <li><code>W</code> &mdash; Warning</li>
-
-        <li><code>E</code> &mdash; Error</li>
-
-        <li><code>F</code> &mdash; Fatal</li>
-
-        <li><code>S</code> &mdash; Silent (highest priority, on which nothing is ever printed)</li>
-      </ul>
-    </li>
-  </ul>
-
-  <p>You can obtain a list of tags used in the system, together with priorities, by running
-  LogCat and observing the first two columns of each message, given as
-  <code>&lt;priority&gt;/&lt;tag&gt;</code>.</p>
-
-  <p>Here's an example of logcat output that shows that the message relates to priority level "I"
-  and tag "ActivityManager":</p>
-  <pre>
-I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
-</pre>
-
-  <p>To reduce the log output to a manageable level, you can restrict log output using <em>filter
-  expressions</em>. Filter expressions let you indicate to the system the tags-priority
-  combinations that you are interested in &mdash; the system suppresses other messages for the
-  specified tags.</p>
-
-  <p>A filter expression follows this format <code>tag:priority ...</code>, where <code>tag</code>
-  indicates the tag of interest and <code>priority</code> indicates the <em>minimum</em> level of
-  priority to report for that tag. Messages for that tag at or above the specified priority are
-  written to the log. You can supply any number of <code>tag:priority</code> specifications in a
-  single filter expression. The series of specifications is whitespace-delimited.</p>
-
-  <p>Here's an example of a filter expression that suppresses all log messages except those with
-  the tag "ActivityManager", at priority "Info" or above, and all log messages with tag "MyApp",
-  with priority "Debug" or above:</p>
-  <pre>
-adb logcat ActivityManager:I MyApp:D *:S
-</pre>
-
-  <p>The final element in the above expression, <code>*:S</code>, sets the priority level for all
-  tags to "silent", thus ensuring only log messages with "View" and "MyApp" are displayed. Using
-  <code>*:S</code> is an excellent way to ensure that log output is restricted to the filters that
-  you have explicitly specified &mdash; it lets your filters serve as a "whitelist" for log
-  output.</p>
-
-  <p>The following filter expression displays all log messages with priority level "warning" and higher, on all tags:</p>
-  <pre>
-adb logcat *:W
-</pre>
-
-  <p>If you're running LogCat from your development computer (versus running it on a
-  remote adb shell), you can also set a default filter expression by exporting a value for the
-  environment variable <code>ANDROID_LOG_TAGS</code>:</p>
-  <pre>
-export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
-</pre>
-
-  <p>Note that <code>ANDROID_LOG_TAGS</code> filter is not exported to the emulator/device
-  instance, if you are running LogCat from a remote shell or using <code>adb shell
-  logcat</code>.</p>
-
-  <h3 id="outputFormat">Controlling Log Output Format</h3>
-
-  <p>Log messages contain a number of metadata fields, in addition to the tag and priority. You can
-  modify the output format for messages so that they display a specific metadata field. To do so,
-  you use the <code>-v</code> option and specify one of the supported output formats listed
-  below.</p>
-
-  <ul>
-    <li><code>brief</code> &mdash; Display priority/tag and PID of the process issuing the
-    message (the default format).</li>
-
-    <li><code>process</code> &mdash; Display PID only.</li>
-
-    <li><code>tag</code> &mdash; Display the priority/tag only.</li>
-
-    <li><code>raw</code> &mdash; Display the raw log message, with no other metadata fields.</li>
-
-    <li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the
-    process issuing the message.</li>
-
-    <li><code>threadtime</code> &mdash; Display the date, invocation time, priority, tag, and
-    the PID and TID of the thread issuing the message.</li>
-
-    <li><code>long</code> &mdash; Display all metadata fields and separate messages with blank
-    lines.</li>
-  </ul>
-
-  <p>When starting LogCat, you can specify the output format you want by using the
-  <code>-v</code> option:</p>
-  <pre>
-[adb] logcat [-v &lt;format&gt;]
-</pre>
-
-  <p>Here's an example that shows how to generate messages in <code>thread</code> output
-  format:</p>
-  <pre>
-adb logcat -v thread
-</pre>
-
-  <p>Note that you can only specify one output format with the <code>-v</code> option.</p>
-
-  <h3 id="alternativeBuffers">Viewing Alternative Log Buffers</h3>
-
-  <p>The Android logging system keeps multiple circular buffers for log messages, and not all of
-  the log messages are sent to the default circular buffer. To see additional log messages, you can
-  run the <code>logcat</code> command with the <code>-b</code> option, to request viewing of an alternate
-  circular buffer. You can view any of these alternate buffers:</p>
-
-  <ul>
-    <li><code>radio</code> &mdash; View the buffer that contains radio/telephony related
-    messages.</li>
-
-    <li><code>events</code> &mdash; View the buffer containing events-related messages.</li>
-
-    <li><code>main</code> &mdash; View the main log buffer (default)</li>
-  </ul>
-
-  <p>The usage of the <code>-b</code> option is:</p>
-  <pre>
-[adb] logcat [-b &lt;buffer&gt;]
-</pre>
-
-  <p>Here's an example of how to view a log buffer containing radio and telephony messages:</p>
-  <pre>
-adb logcat -b radio
-</pre><a name="stdout"
-        id="stdout"></a>
-
-  <h2 id="viewingStd">Viewing stdout and stderr</h2>
-
-  <p>By default, the Android system sends <code>stdout</code> and <code>stderr</code>
-  (<code>System.out</code> and <code>System.err</code>) output to <code>/dev/null</code>. In
-  processes that run the Dalvik VM, you can have the system write a copy of the output to the log
-  file. In this case, the system writes the messages to the log using the log tags
-  <code>stdout</code> and <code>stderr</code>, both with priority <code>I</code>.</p>
-
-  <p>To route the output in this way, you stop a running emulator/device instance and then use the
-  shell command <code>setprop</code> to enable the redirection of output. Here's how you do it:</p>
-  <pre>
-$ adb shell stop
-$ adb shell setprop log.redirect-stdio true
-$ adb shell start
-</pre>
-
-  <p>The system retains this setting until you terminate the emulator/device instance. To use the
-  setting as a default on the emulator/device instance, you can add an entry to
-  <code>/data/local.prop</code> on the device.</p>
-
-  <h2 id="DebuggingWebPages">Debugging Web Apps</h2>
-  <p>
-  If you're developing a web application for Android, you can debug your JavaScript using the console JavaScript APIs,
-  which output messages to LogCat. For more information, see
-  <a href="{@docRoot}guide/webapps/debugging.html">Debugging Web Apps</a>.</p>
diff --git a/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd b/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd
deleted file mode 100644
index 3b5ceab..0000000
--- a/docs/html/guide/developing/debugging/debugging-projects-cmdline.jd
+++ /dev/null
@@ -1,78 +0,0 @@
-page.title=Debugging from Other IDEs
-parent.title=Debugging
-parent.link=index.html
-@jd:body
-
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#start-debugging">Starting a Debugging Environment</a>
-        <ul>
-          <li><a href="#debuggingPort">Configuring Your IDE to Attach to the Debugging Port</a></li>
-        </ul>
-        </li>
-      </ol>
-    </div>
-  </div>
- 
-  <p>If you are not using Eclipse to develop, you can still take advantage of all the tools that
-  the Android SDK provides for debugging. A basic debugging environment consists of:</p>
-
-  <ul>
-    <li><a href="{@docRoot}guide/developing/tools/adb.html">ADB</a></li>
-
-    <li><a href="{@docRoot}guide/developing/debugging/ddms.html">DDMS</a></li>
-
-    <li>Java Debugger</li>
-  </ul>
-  
-  <p>You need to obtain a JDWP-compliant Java debugger to properly debug your application.
-  Most Java IDEs will already have one included, or you can use a command line debugger,
-  such as JDB, if you are using a simple text editor to develop applications.</p>
-
-  <h2 id="start-debugging">Starting a debugging environment</h2>
-  <p>A Java Debugger assists you in finding problems with
-  your code by letting you set breakpoints, step through execution of your application, and examine
-  variable values. Since you are not using Eclipse, you have to manually start up the debugging
-  environment yourself by running a few tools that are provided in the Android SDK. To begin
-  debugging your application, follow these general steps:</p>
-
-  <ol>
-    <li>Load an AVD with the Android emulator or connect a device to your computer.</li>
-    
-    <li>Start DDMS from the sdk <code>/tools</code> directory. This also starts ADB if it is 
-    not already started. You should see your device appear in DDMS.</li>
-
-    <li>Install and run your <code>.apk</code> file on the device or emulator. In DDMS, you should see your
-    application running under the device that you installed it to.</li>
-
-    <li>Attach your debugger to the debugging port 8700, or to the specific port shown for the
-    application in DDMS.</li>
-  </ol>
-
-  <h3 id="debuggingPort">Configuring Your IDE to Attach to the Debugging Port</h3>
-
-  <p>DDMS assigns a specific debugging port to every virtual machine that it finds on the
-  emulator. You must either attach your IDE to that port (listed on the Info tab for that VM), or
-  you can use a default port 8700 to connect to whatever application is currently selected on the
-  list of discovered virtual machines.</p>
-
-  <p>Your IDE should attach to your application running on the emulator, showing you its threads
-  and allowing you to suspend them, inspect their state, and set breakpoints. If you selected "Wait
-  for debugger" in the Development settings panel the application will run when Eclipse connects,
-  so you will need to set any breakpoints you want before connecting.</p>
-
-  <p>Changing either the application being debugged or the "Wait for debugger" option causes the
-  system to kill the selected application if it is currently running. You can use this to kill your
-  application if it is in a bad state by simply going to the settings and toggling the
-  checkbox.</p>
-
-
-
-
-
-
-
diff --git a/docs/html/guide/developing/debugging/debugging-tracing.jd b/docs/html/guide/developing/debugging/debugging-tracing.jd
deleted file mode 100644
index 72f6498..0000000
--- a/docs/html/guide/developing/debugging/debugging-tracing.jd
+++ /dev/null
@@ -1,402 +0,0 @@
-page.title=Profiling with Traceview and dmtracedump
-parent.title=Debugging
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li>
-          <a href="#traceviewLayout">Traceview Layout</a>
-
-          <ol>
-            <li><a href="#timelinepanel">Timeline Panel</a></li>
-
-            <li><a href="#profilepanel">Profile Panel</a></li>
-          </ol>
-        </li>
-
-        <li>
-          <a href="#format">Traceview File Format</a>
-          <ol>
-            <li><a href="#datafileformat">Data File Format</a></li>
-
-            <li><a href="#keyfileformat">Key File Format</a></li>
-          </ol>
-        </li>
-
-        <li><a href="#creatingtracefiles">Creating Trace Files</a></li>
-
-        <li><a href="#copyingfiles">Copying Trace Files to a Host Machine</a></li>
-
-        <li><a href="#runningtraceview">Viewing Trace Files in Traceview</a></li>
-
-        <li><a href="#dmtracedump">Using dmtracedump</a></li>
-        
-        <li><a href="#knownissues">Traceview Known Issues</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Traceview is a graphical viewer for execution logs that you create by using the {@link
-  android.os.Debug} class to log tracing information in your code. Traceview can help you debug
-  your application and profile its performance.</p>
-
-  <h2 id="traceviewLayout">Traceview Layout</h2>
-
-  <p>When you have a trace log file (generated by adding tracing code to your application or by DDMS),
-  you can have Traceview load the log files and display their data in a window visualizes your application
-  in two panels:</p>
-
-  <ul>
-    <li>A <a href="#timelinepanel">timeline panel</a> -- describes when each thread and method
-    started and stopped</li>
-
-    <li>A <a href="#timelinepanel">profile panel</a> -- provides a summary of what happened inside
-    a method</li>
-  </ul>
-
-  <p>The sections below provide addition information about the traceview output panes.</p>
-  
-  <h3 id="timelinepanel">Timeline Panel</h3>
-
-  <p>The image below shows a close up of the timeline panel. Each thread&rsquo;s execution is shown
-  in its own row, with time increasing to the right. Each method is shown in another color (colors
-  are reused in a round-robin fashion starting with the methods that have the most inclusive time).
-  The thin lines underneath the first row show the extent (entry to exit) of all the calls to the
-  selected method. The method in this case is <code>LoadListener.nativeFinished()</code> and it was selected in
-  the profile view.</p>
-
-  <img src="{@docRoot}images/traceview_timeline.png"
-       alt="Traceview timeline panel"
-       width="893"
-       height="284" />
-       <p class="img-caption"><strong>Figure 1.</strong> The Traceview Timeline Panel</p>
-
-  <h3 id="profilepanel">Profile Panel</h3>
-
-  <p>Figure 2 shows the profile pane, a summary of all the time spent
-  in a method. The table shows both the inclusive and exclusive times (as well as the percentage of
-  the total time). Exclusive time is the time spent in the method. Inclusive time is the time spent
-  in the method plus the time spent in any called functions. We refer to calling methods as
-  "parents" and called methods as "children." When a method is selected (by clicking on it), it
-  expands to show the parents and children. Parents are shown with a purple background and children
-  with a yellow background. The last column in the table shows the number of calls to this method
-  plus the number of recursive calls. The last column shows the number of calls out of the total
-  number of calls made to that method. In this view, we can see that there were 14 calls to
-  <code>LoadListener.nativeFinished();</code> looking at the timeline panel shows that one of those calls took
-  an unusually long time.</p>
-
-  <img src="{@docRoot}images/traceview_profile.png"
-       alt="Traceview profile panel."
-       width="892"
-       height="630" />
-  <p class="img-caption"><strong>Figure 2.</strong> The Traceview Profile Panel</p>
-
-  <h2 id="format">Traceview File Format</h2>
-
-  <p>Tracing creates two distinct pieces of output: a <em>data</em> file, which holds the trace
-  data, and a <em>key</em> file, which provides a mapping from binary identifiers to thread and
-  method names. The files are concatenated when tracing completes, into a single <em>.trace</em>
-  file.</p>
-
-  <p class="note"><strong>Note:</strong> The previous version of Traceview did not concatenate
-  these files for you. If you have old key and data files that you'd still like to trace, you can
-  concatenate them yourself with <code>cat mytrace.key mytrace.data &gt;
-  mytrace.trace</code>.</p>
-
-  <h3 id="datafileformat">Data File Format</h3>
-
-  <p>The data file is binary, structured as follows (all values are stored in little-endian
-  order):</p>
-  <pre>
-* File format:
-* header
-* record 0
-* record 1
-* ...
-*
-* Header format:
-* u4 magic 0x574f4c53 ('SLOW')
-* u2 version
-* u2 offset to data
-* u8 start date/time in usec
-*
-* Record format:
-* u1 thread ID
-* u4 method ID | method action
-* u4 time delta since start, in usec
-</pre>
-
-  <p>The application is expected to parse all of the header fields, then seek to "offset to data"
-  from the start of the file. From there it just reads 9-byte records until EOF is reached.</p>
-
-  <p><em>u8 start date/time in usec</em> is the output from <code>gettimeofday()</code>. It's mainly there so
-  that you can tell if the output was generated yesterday or three months ago.</p>
-
-  <p><em>method action</em> sits in the two least-significant bits of the <em>method</em> word. The
-  currently defined meanings are:</p>
-
-  <ul>
-    <li>0 - method entry</li>
-
-    <li>1 - method exit</li>
-
-    <li>2 - method "exited" when unrolled by exception handling</li>
-
-    <li>3 - (reserved)</li>
-  </ul>
-
-  <p>An unsigned 32-bit integer can hold about 70 minutes of time in microseconds.</p>
-
-  <h3 id="keyfileformat">Key File Format</h3>
-
-  <p>The key file is a plain text file divided into three sections. Each section starts with a
-  keyword that begins with '*'. If you see a '*' at the start of a line, you have found the start
-  of a new section.</p>
-
-  <p>An example file might look like this:</p>
-  <pre>
-*version
-1
-clock=global
-*threads
-1 main
-6 JDWP Handler
-5 Async GC
-4 Reference Handler
-3 Finalizer
-2 Signal Handler
-*methods
-0x080f23f8 java/io/PrintStream write ([BII)V
-0x080f25d4 java/io/PrintStream print (Ljava/lang/String;)V
-0x080f27f4 java/io/PrintStream println (Ljava/lang/String;)V
-0x080da620 java/lang/RuntimeException   &lt;init&gt;    ()V
-[...]
-0x080f630c android/os/Debug startMethodTracing ()V
-0x080f6350 android/os/Debug startMethodTracing (Ljava/lang/String;Ljava/lang/String;I)V
-*end
-</pre>
-<p>The following list describes the major sections of a key file:</p>
-  <dl>
-    <dt><em>version section</em></dt>
-
-    <dd>The first line is the file version number, currently 1. The second line,
-    <code>clock=global</code>, indicates that we use a common clock across all threads. A future
-    version may use per-thread CPU time counters that are independent for every thread.</dd>
-
-    <dt><em>threads section</em></dt>
-
-    <dd>One line per thread. Each line consists of two parts: the thread ID, followed by a tab,
-    followed by the thread name. There are few restrictions on what a valid thread name is, so
-    include everything to the end of the line.</dd>
-
-    <dt><em>methods section</em></dt>
-
-    <dd>One line per method entry or exit. A line consists of four pieces, separated by tab marks:
-    <em>method-ID</em> [TAB] <em>class-name</em> [TAB] <em>method-name</em> [TAB]
-    <em>signature</em> . Only the methods that were actually entered or exited are included in the
-    list. Note that all three identifiers are required to uniquely identify a method.</dd>
-  </dl>
-
-  <p>Neither the threads nor methods sections are sorted.</p>
-
-  <h2 id="creatingtracefiles">Creating Trace Files</h2>
-
-  <p>To use Traceview, you need to generate log files containing the trace information you want to
-  analyze.</p>
-  
-  <p>There are two ways to generate trace logs:</p>
-  <ul>
-    <li>Include the {@link android.os.Debug} class in your code and call its
-  methods to start and stop logging of trace information to disk. This method is very precise because
-  you can specify in your code exactly where to start and stop logging trace data.</li>
-    <li>Use the method profiling feature of DDMS to generate trace logs. This method is less
-    precise since you do not modify code, but rather specify when to start and stop logging with
-    a DDMS. Although you have less control on exactly where the data is logged, this method is useful 
-    if you don't have access to the application's code, or if you do not need the precision of the first method.
-    </li>
-  </ul>
-  
-  <p>Before you start generating trace logs, be aware of the following restrictions:</p>
-  <ul>
-    <li>If you are using the {@link android.os.Debug} class, your device or emulator must have an SD card
-     and your application must have permission to write to the SD card. </li>
-    <li>If you are using DDMS, Android 1.5 devices are not supported.</li>
-    <li>If you are using DDMS, Android 2.1 and earlier devices must
-    have an SD card present and your application must have permission to write to the SD card.
-    <li>If you are using DDMS, Android 2.2 and later devices do not need an SD card. The trace log files are 
-    streamed directly to your development machine.</li>
-  </ul>
-  
-  <p>This document focuses on using the {@link android.os.Debug} class to generate trace data.  For more information on using DDMS
-  to generate trace data, see <a href="ddms.html#profiling">Using the Dalvik Debug Monitor Server.</a>
-  </p>
-  
-  <p>To create the trace files, include the {@link android.os.Debug} class and call one of the
-  {@link android.os.Debug#startMethodTracing() startMethodTracing()} methods. In the call, you
-  specify a base name for the trace files that the system generates. To stop tracing, call {@link
-  android.os.Debug#stopMethodTracing() stopMethodTracing()}. These methods start and stop method
-  tracing across the entire virtual machine. For example, you could call 
-  {@link android.os.Debug#startMethodTracing() startMethodTracing()} in
-  your activity's {@link android.app.Activity#onCreate onCreate()} method, and call
-  {@link android.os.Debug#stopMethodTracing() stopMethodTracing()} in that activity's
-  {@link android.app.Activity#onDestroy()} method.</p>
-  <pre>
-    // start tracing to "/sdcard/calc.trace"
-    Debug.startMethodTracing("calc");
-    // ...
-    // stop tracing
-    Debug.stopMethodTracing();
-</pre>
-
-  <p>When your application calls startMethodTracing(), the system creates a file called
-  <code>&lt;trace-base-name&gt;.trace</code>. This contains the binary method trace data and a
-  mapping table with thread and method names.</p>
-
-  <p>The system then begins buffering the generated trace data, until your application calls
-  stopMethodTracing(), at which time it writes the buffered data to the output file. If the system
-  reaches the maximum buffer size before stopMethodTracing() is called, the system stops tracing
-  and sends a notification to the console.</p>
-
-  <p>Interpreted code will run more slowly when profiling is enabled. Don't try to generate
-  absolute timings from the profiler results (i.e. "function X takes 2.5 seconds to run"). The
-  times are only useful in relation to other profile output, so you can see if changes have made
-  the code faster or slower.</p>
-
-  <p>When using the Android emulator, you must specify an SD card when you create your AVD because the trace files
-  are written to the SD card. Your application must have permission to write to the SD card as well.
-
-  <p>The format of the trace files is previously described <a href="#format">in this
-  document</a>.</p>
-
-  <h2 id="copyingfiles">Copying Trace Files to a Host Machine</h2>
-
-  <p>After your application has run and the system has created your trace files
-  <code>&lt;trace-base-name&gt;.trace</code> on a device or emulator, you must copy those files to
-  your development computer. You can use <code>adb pull</code> to copy the files. Here's an example
-  that shows how to copy an example file, calc.trace, from the default location on the emulator to
-  the /tmp directory on the emulator host machine:</p>
-  <pre>
-adb pull /sdcard/calc.trace /tmp
-</pre>
-
-  <h2 id="runningtraceview">Viewing Trace Files in Traceview</h2>
-
-  <p>To run Traceview and view the trace files, enter <code>traceview
-  &lt;trace-base-name&gt;</code>. For example, to run Traceview on the example files copied in the
-  previous section, use:</p>
-  <pre>
-traceview /tmp/calc
-</pre>
-
-  <p class="note"><strong>Note:</strong> If you are trying to view the trace logs of an application 
-  that is built with ProGuard enabled (release mode build), some method and member names might be obfuscated.
-  You can use the Proguard <code>mapping.txt</code> file to figure out the original unobfuscated names. For more information
-  on this file, see the <a href="{@docRoot}guide/developing/tools/proguard.html">Proguard</a> documentation.</p>
-
-      <h2 id="dmtracedump">Using dmtracdedump</h2>
-
-      <p><code>dmtracedump</code> is a tool that gives you an alternate way of generating
-      graphical call-stack diagrams from trace log files. The tool uses the Graphviz Dot utility to
-      create the graphical output, so you need to install Graphviz before running dmtracedump.</p>
-
-      <p>The dmtracedump tool generates the call stack data as a tree diagram, with each call
-      represented as a node. It shows call flow (from parent node to child nodes) using arrows. The
-      diagram below shows an example of dmtracedump output.</p>
-      <img src=
-      "{@docRoot}images/tracedump.png"
-          width="485"
-          height="401" />
-       <p class="image-caption"><strong>Figure 3.</strong> Screenshot of dmtracedump</p>
-
-      <p>For each node, dmtracedump shows <code>&lt;ref&gt;
-      <em>callname</em> (&lt;inc-ms&gt;, &lt;exc-ms&gt;,&lt;numcalls&gt;)</code>, where</p>
-
-      <ul>
-        <li><code>&lt;ref&gt;</code> -- Call reference number, as used in trace logs</li>
-
-        <li><code>&lt;inc-ms&gt;</code> -- Inclusive elapsed time (milliseconds spent in method,
-        including all child methods)</li>
-
-        <li><code>&lt;exc-ms&gt;</code> -- Exclusive elapsed time (milliseconds spent in method,
-        not including any child methods)</li>
-
-        <li><code>&lt;numcalls&gt;</code> -- Number of calls</li>
-      </ul>
-
-      <p>The usage for dmtracedump is:</p>
-      <pre>
-dmtracedump [-ho] [-s sortable] [-d trace-base-name] [-g outfile] &lt;trace-base-name&gt;
-</pre>
-
-      <p>The tool then loads trace log data from <code>&lt;trace-base-name&gt;.data</code> and
-      <code>&lt;trace-base-name&gt;.key</code>. The table below lists the options for dmtracedump.</p>
-
-      <table>
-        <tr>
-          <th>Option</th>
-
-          <th>Description</th>
-        </tr>
-
-        <tr>
-          <td><code>-d&nbsp;&lt;trace-base-name&gt;</code></td>
-
-          <td>Diff with this trace name</td>
-        </tr>
-
-        <tr>
-          <td><code>-g&nbsp;&lt;outfile&gt;</code></td>
-
-          <td>Generate output to &lt;outfile&gt;</td>
-        </tr>
-
-        <tr>
-          <td><code>-h</code></td>
-
-          <td>Turn on HTML output</td>
-        </tr>
-
-        <tr>
-          <td><code>-o</code></td>
-
-          <td>Dump the trace file instead of profiling</td>
-        </tr>
-
-        <tr>
-          <td><code>-d&nbsp;&lt;trace-base-name&gt;</code></td>
-
-          <td>URL base to the location of the sortable javascript file</td>
-        </tr>
-
-        <tr>
-          <td><code>-t&nbsp;&lt;percent&gt;</code></td>
-
-          <td>Minimum threshold for including child nodes in the graph (child's inclusive time as a
-          percentage of parent inclusive time). If this option is not used, the default threshold
-          is 20%.</td>
-        </tr>
-      </table>
-  
-  
-    
-  <h2 id="knownissues">Traceview Known Issues</h2>
-
-  <dl>
-    <dt>Threads</dt>
-
-    <dd>
-      Traceview logging does not handle threads well, resulting in these two problems:
-
-      <ol>
-        <li>If a thread exits during profiling, the thread name is not emitted;</li>
-
-        <li>The VM reuses thread IDs. If a thread stops and another starts, they may get the same
-        ID.</li>
-      </ol>
-    </dd>
-
-    </dl>
\ No newline at end of file
diff --git a/docs/html/guide/developing/debugging/debugging-ui.jd b/docs/html/guide/developing/debugging/debugging-ui.jd
deleted file mode 100644
index 22748be..0000000
--- a/docs/html/guide/developing/debugging/debugging-ui.jd
+++ /dev/null
@@ -1,547 +0,0 @@
-page.title=Debugging and Profiling User Interfaces
-parent.title=Debugging
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li>
-            <a href="#HierarchyViewer">
-                Debugging and Optimizing User Interfaces with Hierarchy Viewer
-            </a>
-            <ol>
-                <li><a href="#runhv">Running Hierarchy Viewer and choosing a window</a></li>
-                <li><a href="#viewhierarchy">About the View Hierarchy window</a></li>
-                <li><a href="#indiView">Working with an individual View in Tree View</a></li>
-                <li><a href="#hvdebugging">Debugging with View Hierarchy</a></li>
-                <li><a href="#hvoptimize">Optimizing with View Hierarchy</a></li>
-            </ol>
-        </li>
-        <li>
-            <a href="#pixelperfect">
-                Examining and Designing User Interfaces with Pixel Perfect
-            </a>
-            <ol>
-                <li><a href="#aboutpixelperfect">About the Pixel Perfect window</a></li>
-                <li><a href="#overlays">Working with Pixel Perfect overlays</a></li>
-            </ol>
-        </li>
-        <li><a href="#layoutopt">Optimizing Layouts with <code>layoutopt</code></a></li>
-      </ol>
-      <h2>Related videos</h2>
-          <ol>
-              <li>
-<iframe title="Hierarchyviewer" 
-    width="272" height="234" 
-    src="http://www.youtube.com/embed/PAgE7saQUUY?rel=0&amp;hd=1" 
-    frameborder="0" allowfullscreen>
-</iframe>
-              </li>
-              <li>
-<iframe title="Pixel Perfect" 
-    width="272" height="234" 
-    src="http://www.youtube.com/embed/C45bMZGdN7Y?rel=0&amp;hd=1" 
-    frameborder="0" 
-    allowfullscreen>
-</iframe>
-              </li>
-          </ol>
-    </div>
-  </div>
-
-  <p>
-Sometimes your application's layout can slow down your application.
-  To help debug issues in your layout, the Android SDK provides the Hierarchy Viewer and
-  <code>layoutopt</code> tools.
-  </p>
-
-  <p>The Hierarchy Viewer application allows you to debug and optimize your user interface. It
-  provides a visual representation of the layout's View hierarchy (the View Hierarchy window)
-  and a magnified view of the display (the Pixel Perfect window).</p>
-
-  <p><code>layoutopt</code> is a command-line tool that helps you optimize the layouts and layout
-  hierarchies of your applications. You can run it against your layout files or resource
-  directories to quickly check for inefficiencies or other types of problems that could be
-  affecting the performance of your application.</p>
-
-<h2 id="HierarchyViewer">Debugging and Optimizing User Interfaces with Hierarchy Viewer</h2>
-
-<h3 id="runhv">Running Hierarchy Viewer and choosing a window</h3>
-<p>
-    To run Hierarchy Viewer, follow these steps:</p>
-<ol>
-    <li>
-        Connect your device or launch an emulator.
-        <p>
-            To preserve security, Hierarchy Viewer can only connect to devices running a
-            developer version of the Android system.
-        </p>
-    </li>
-    <li>
-        If you have not done so already, install the application you want to work with.
-    </li>
-    <li>
-        Run the application, and ensure that its UI is visible.
-    </li>
-    <li>
-        From a terminal, launch <code>hierarchyviewer</code> from the
-        <code>&lt;sdk&gt;/tools/</code>
-        directory.
-    </li>
-    <li>
-        The first window you see displays a list of devices and emulators. To expand the list
-        of Activity objects for a device or emulator, click the arrow on the left. This displays a
-        list of the Activity objects whose UI is currently visible on the device or emulator. The
-        objects are listed by their Android component name. The list includes both your application
-        Activity and system Activity objects. A screenshot of this window appears in
-        figure 1.
-    </li>
-    <li>
-        Select the name of your Activity from the list. You can now look at its view
-        hierarchy using the View Hierarchy window, or look at a magnified image of the UI using
-        the Pixel Perfect window.
-    </li>
-</ol>
-<p>
-    To learn how to use the View Hierarchy window, go to
-    <a href="#viewhierarchy">About the View Hierarchy window</a>. To learn how to use the
-    Pixel Perfect window, go to <a href="#pixelperfect">About the Pixel Perfect window</a>.
-</p>
-<img id="Fig1" src="{@docRoot}images/developing/hv_device_window.png" alt="" height="600"/>
-<p class="img-caption"><strong>Figure 1.</strong> Hierarchy Viewer device window</p>
-<h3 id="viewhierarchy">About the View Hierarchy window</h3>
-<p>
-    The View Hierarchy window displays the View objects that form the UI of the
-    Activity that is running on your device or emulator. You use it to look at individual
-    View objects within the context of the entire View tree. For each View object, the View
-    Hierarchy window also displays rendering performance data.
-</p>
-<p>
-    To see the View Hierarchy window, run Hierarchy Viewer as described in
-    the section <a href="#runhv">Running Hierarchy Viewer and choosing a window</a>. Next, click
-    <strong>View Hierarchy</strong> at the top of the device window.
-</p>
-<p>
-    You should see four panes:
-</p>
-<ul>
-    <li>
-        <strong>Tree View</strong>: The left-hand pane displays the Tree View,
-        a diagram of the Activity object's hierarchy of views. Use Tree View to examine individual
-        View objects and see the relationships between View objects in your UI.
-        <p>
-            To zoom in on the pane, use the slider at the bottom of the pane, or use your mouse
-            scroll wheel. To move around in the pane or reveal View objects that are not currently
-            visible, click and drag the pane.
-        </p>
-        <p>
-            To highlight the nodes in the tree whose class or ID match a search string, enter the
-            string in the <strong>Filter by class or id:</strong> edit box at the bottom of the
-            window. The background of nodes that match the search string will change from gray to
-            bright blue.
-        </p>
-        <p>
-            To save a screenshot of Tree View to a PNG file, click <strong>Save As PNG</strong> at
-            the top of the View Hierarchy window. This displays a dialog in which you can choose
-            a directory and file name.
-        </p>
-        <p>
-            To save a layered screenshot of your device or emulator to an Adobe Photoshop (PSD)
-            file, click <strong>Capture Layers</strong> at the top of the View Hierarchy window.
-            This displays a dialog in which you can choose a directory or file name.
-            Each View in the UI is saved as a separate Photoshop layer.
-        </p>
-        <p>
-            In Photoshop (or similar program that accepts .psd files), you can hide, show or edit a
-            layer independently of others. When you save a layered screenshot, you can examine and
-            modify the image of an individual View object. This helps you experiment with design
-            changes.
-        </p>
-    </li>
-    <li>
-        The upper right-hand pane displays the <strong>Tree Overview</strong>, a smaller map
-        representation of the entire Tree View window. Use Tree Overview to identify the part of the
-        view tree that is being displayed in Tree View.
-        <p>
-            You can also use Tree Overview to move around in the Tree View pane. Click and drag
-            the shaded rectangle over an area to reveal it in Tree View.
-        </p>
-    </li>
-    <li>
-        The middle right-hand pane displays the <strong>Properties View</strong>,
-        a list of the properties for a selected View object. With Properties View, you can
-        examine all the properties without having to look at your application source.
-        <p>
-            The properties are organized by category. To find an individual property, expand
-            a category name by clicking the arrow on its left. This reveals all the properties
-            in that category.
-        </p>
-    </li>
-    <li>
-        The lower right-hand pane displays the <strong>Layout View</strong>,
-        a block representation of the UI. Layout View is another way to navigate through your UI.
-        When you click on a View object in Tree View, its position in the UI is highlighted.
-        Conversely, when you click in an area of Layout View, the View object for that area is
-        highlighted in Tree View.
-        <p>
-            The outline colors of blocks in Layout View provide additional information:
-        </p>
-            <ul>
-                <li>
-                    Bold red: The block represents the the View that is currently selected in
-                    Tree View.
-                </li>
-                <li>
-                    Light red: The block represents the parent of the block outlined in bold red.
-                </li>
-                <li>
-                    White: The block represents a visible View that is not a parent or child of the
-                    View that is currently selected in Tree View.
-                </li>
-            </ul>
-    </li>
-</ul>
-<p>
-    When the UI of the current Activity changes, the View Hierarchy window is not automatically
-    updated. To update it, click <strong>Load View Hierarchy</strong> at the top of the window.
-</p>
-<p>
-    Also, the window is not updated if you switch to a new Activity. To update it, start by
-    clicking the window selection icon in the bottom left-hand corner of the window. This
-    navigates back to the Window Selection window. From this window, click the Android
-    component name of the new Activity and then click <strong>Load View Hierarchy</strong>
-    at the top of the window.
-</p>
-<p>
-    A screenshot of the View Hierarchy window appears in figure 2.
-</p>
-<img id="Fig2" src="{@docRoot}images/developing/hv_view_hierarchy_window.png" alt="" height="600"/>
-<p class="img-caption"><strong>Figure 2.</strong> The View Hierarchy window</p>
-<h3 id="indiView">Working with an individual View in Tree View</h3>
-<p>
-    Each node in Tree View represents a single View. Some information is always visible. Starting
-    at the top of the node, you see the following:
-</p>
-<ol>
-    <li>
-        View class: The View object's class.
-    </li>
-    <li>
-        View object address: A pointer to View object.
-    </li>
-    <li>
-        View object ID: The value of the
-        <code><a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">android:id</a>
-        </code> attribute.
-    </li>
-    <li>
-        Performance indicators: A set of three colored dots that indicate the rendering
-        speed of this View relative to other View objects in the tree. The three dots
-        represent (from left to right) the measure, layout, and draw times of the rendering.
-        <p>
-            The colors indicate the following relative performance:
-        </p>
-        <ul>
-            <li>
-                Green: For this part of the render time, this View is in the faster 50% of all
-                the View objects in the tree. For example, a green dot for the measure time means
-                that this View has a faster measure time than 50% of the View objects in the tree.
-            </li>
-            <li>
-                Yellow: For this part of the render time, this View is in the slower 50% of all
-                the View objects in the tree. For example, a yellow dot for the layout time means
-                that this View has a slower layout time than 50% of the View objects in the tree.
-            </li>
-            <li>
-                Red: For this part of the render time, this View is the slowest one in the tree.
-                For example, a red dot for the draw time means that this View takes the most
-                time to draw of all the View objects in the tree.
-            </li>
-        </ul>
-    </li>
-    <li>
-        View index: The zero-based index of the View in its parent View. If it is the only child,
-        this is 0.
-    </li>
-</ol>
-<p>
-    When you select a node, additional information for the View appears in a small window above
-    the node. When you click one of the nodes, you see the following:
-</p>
-<ul>
-    <li>
-        Image: The actual image of the View, as it would appear in the emulator. If the View has
-        children, these are also displayed.
-    </li>
-    <li>
-        View count: The number of View objects represented by this node. This includes the View
-        itself and a count of its children. For example, this value is 4 for a View that has 3
-        children.
-    </li>
-    <li>
-        Render times: The actual measure, layout, and draw times for the View rendering, in
-        milliseconds. These represent the same values as the performance indicators mentioned in
-        the preceding section.
-    </li>
-</ul>
-<p>
-    An annotated screenshot of an individual node in the Tree View window appears in figure 3.
-</p>
-<img id="Fig3" src="{@docRoot}images/developing/hv_treeview_screenshot.png" alt="" height="600"/>
-<p class="img-caption"><strong>Figure 3.</strong> An annotated node in Tree View</p>
-<h3 id="hvdebugging">Debugging with View Hierarchy</h3>
-<p>
-    The View Hierarchy window helps you debug an application by providing a static display
-    of the UI. The display starts with your application's opening screen. As you step through
-    your application, the display remains unchanged until you redraw it by invalidating and
-    then requesting layout for a View.
-</p>
-<p>
-    To redraw a View in the display:
-</p>
-    <ul>
-        <li>
-            Select a View in Tree View. As you move up towards the root of the tree (to the
-            left in the Tree View), you see the highest-level View objects. Redrawing a high-level
-            object usually forces the lower-level objects to redraw as well.
-        </li>
-        <li>
-            Click <strong>Invalidate</strong> at the top of the window. This marks the View as
-            invalid, and schedules it for a redraw at the next point that a layout is requested.
-        </li>
-        <li>
-            Click <strong>Request Layout</strong> to request a layout. The View and its children
-            are redrawn, as well as any other View objects that need to be redrawn.
-        </li>
-    </ul>
-<p>
-    Manually redrawing a View allows you to watch the View object tree and examine the properties of
-    individual View objects one step at a time as you go through breakpoints in your code.
-</p>
-<h3 id="hvoptimize">Optimizing with View Hierarchy</h3>
-<p>
-    View Hierarchy also helps you identify slow render performance. You start by looking at the
-    View nodes with red or yellow performance indicators to identify the slower View objects. As you
-    step through your application, you can judge if a View is consistently slow or slow only in
-    certain circumstances.
-</p>
-<p>
-    Remember that slow performance is not necessarily evidence of a problem, especially for
-    ViewGroup objects. View objects that have more children and more complex View objects render
-    more slowly.
-</p>
-<p>
-    The View Hierarchy window also helps you find performance issues. Just by looking at the
-    performance indicators (the dots) for each View node, you can see which View objects are the
-    slowest to measure, layout, and draw. From that, you can quickly identify the problems you
-    should look at first.
-</p>
-<h2 id="pixelperfect">Examining and Designing User Interfaces with Pixel Perfect</h2>
-<p>
-    Pixel Perfect is a tool for examining pixel properties and laying out UIs from a design drawing.
-</p>
-<h3 id="aboutpixelperfect">About the Pixel Perfect window</h3>
-<p>
-    The Pixel Perfect window displays a magnified image of the screen that is currently
-    visible on the emulator or device. In it, you can examine the properties
-    of individual pixels in the screen image. You can also use the Pixel Perfect window
-    to help you lay out your application UI based on a bitmap design.
-</p>
-<p>
-    To see the Pixel Perfect window, run Hierarchy Viewer, as described in
-    the section <a href="#runhv">Running Hierarchy Viewer and choosing a window</a>. Next, click
-    <strong>Inspect Screenshot</strong> at the top of the device window. The Pixel Perfect window
-    appears.
-</p>
-<p>
-    In it, you see three panes:
-</p>
-<ul>
-    <li>
-        View Object pane: This is a hierarchical list of the View objects that are currently
-        visible on the device or emulator screen, including both the ones in your application and
-        the ones generated by the system. The objects are listed by their View class.
-        To see the class names of a View object's children, expand the View by clicking the
-        arrow to its left. When you click a View, its position is highlighted in the Pixel Perfect
-        pane on the right.
-    </li>
-    <li>
-        Pixel Perfect Loupe pane: This is the magnified screen image. It is overlaid by a grid in
-        which each square represents one pixel. To look at the information for a pixel, click in its
-        square. Its color and X,Y coordinates appear at the bottom of the pane.
-        <p>
-            The magenta crosshair in the pane corresponds to the positioning
-            crosshair in the next pane. It only moves when you move the crosshair in the next pane.
-        </p>
-        <p>
-            To zoom in or out on the image, use the <strong>Zoom</strong> slider at the bottom of
-            the pane, or use your mouse's scroll wheel.
-        </p>
-        <p>
-            When you select a pixel in the Loupe pane, you see the following information at the
-            bottom of the pane:
-        </p>
-        <ul>
-            <li>
-                Pixel swatch: A rectangle filled with the same color as the pixel.
-            </li>
-            <li>
-                HTML color code: The hexadecimal RGB code corresponding to the pixel color
-            </li>
-            <li>
-                RGB color values: A list of the (R), green (G), and blue (B) color values of the
-                pixel color. Each value is in the range 0-255.
-            </li>
-            <li>
-                X and Y coordinates: The pixel's coordinates, in device-specific pixel units.
-                The values are 0-based, with X=0 at the left of the screen and Y=0 at the top.
-            </li>
-        </ul>
-    </li>
-    <li>
-        Pixel Perfect pane: This displays the currently visible screen as it would appear in the
-        emulator.
-        <p>
-            You use the cyan crosshair to do coarse positioning. Drag the crosshair in the image,
-            and the Loupe crosshair will move accordingly. You can also click on a point in the
-            Pixel Perfect pane, and the crosshair will move to that point.
-        </p>
-        <p>
-            The image corresponding to the View object selected in the View Object pane is
-            outlined in a box that indicates the View object's position on the screen. For the
-            selected object, the box is bold red. Sibling and parent View objects have a light
-            red box. View objects that are neither parents nor siblings are in white.
-        </p>
-        <p>
-            The layout box may have other rectangles either inside or outside it, each of which
-            indicates part of the View. A purple or green rectangle indicates the View bounding box.
-            A white or black box inside the layout box represents the <strong>padding</strong>, the
-            defined distance between the View object's content and its bounding box. An outer white
-            or black rectangle represents the <strong>margins</strong>, the distance between the
-            View bounding box and adjacent View objects. The padding and margin boxes are white if
-            the layout background is black, and vice versa.
-        </p>
-        <p>
-            You can save the screen image being displayed in the Pixel Perfect pane as a PNG file.
-            This produces a screenshot of the current screen. To do this, click
-            <strong>Save as PNG</strong> at the top of the window. This displays a dialog,
-            in which you can choose a directory and filename for the file.
-        </p>
-    </li>
-</ul>
-<p>
-    The panes are not automatically refreshed when you change one of the View objects or go to
-    another Activity. To refresh the Pixel Perfect pane and the Loupe pane, click
-    <strong>Refresh Screenshot</strong> at the top of the window. This will change the panes
-    to reflect the current screen image. You still may need to refresh the View Object pane;
-    to do this, click <strong>Refresh Tree</strong> at the top of the window.
-</p>
-<p>
-    To automatically refresh the panes while you are debugging, set
-    <strong>Auto Refresh</strong> at the top of the window, and then set a refresh rate
-    with the <strong>Refresh Rate</strong> slider at the bottom of the Loupe pane.
-</p>
-<h3 id="overlays">Working with Pixel Perfect overlays</h3>
-<p>
-    You often construct a UI based on a design done as a bitmap image. The Pixel Perfect window
-    helps you match up your View layout to a bitmap image by allowing you to load the bitmap as an
-    <strong>overlay</strong> on the screen image.
-</p>
-<p>
-    To use a bitmap image as an overlay:
-</p>
-<ul>
-    <li>
-        Start your application in a device or emulator and navigate to the Activity whose UI you
-        want to work with.
-    </li>
-    <li>
-        Start Hierarchy Viewer and navigate to the Pixel Perfect window.
-    </li>
-    <li>
-        At the top of the window, click <strong>Load Overlay</strong>. A dialog opens, prompting
-        for the image file to load. Load the image file.
-    </li>
-    <li>
-        Pixel Perfect displays the overlay over the screen image in the Pixel Perfect pane. The
-        lower left corner of the bitmap image (X=0, Y=<em>max value</em>) is anchored on the lower
-        leftmost pixel (X=0, Y=<em>max screen</em>) of the screen.
-        <p>
-            By default, the overlay has a 50% transparency, which allows you to see the screen
-            image underneath. You can adjust this with the <strong>Overlay:</strong> slider at the
-            bottom of the Loupe pane.
-        </p>
-        <p>
-            Also by default, the overlay is not displayed in the Loupe pane. To display it,
-            set <strong>Show in Loupe</strong> at the top of the window.
-        </p>
-    </li>
-</ul>
-<p>
-    The overlay is not saved as part of the screenshot when you save the screen image as a PNG
-    file.
-</p>
-<p>
-    A screenshot of the Pixel Perfect window appears in figure 4.
-</p>
-<img id="Fig4" src="{@docRoot}images/developing/hv_pixelperfect.png"
-        alt=""
-        height="600"/>
-<p class="img-caption"><strong>Figure 4.</strong> The Pixel Perfect window</p>
-<h2 id="layoutopt">Optimizing layouts with layoutopt</h2>
-<p>
-    The <code>layoutopt</code> tool lets you analyze the XML files that define your
-    application's UI to find inefficiencies in the view hierarchy.</p>
-
-<p>
-    To run the tool, open a terminal and launch <code>layoutopt &lt;xmlfiles&gt;</code>
-    from your SDK <code>tools/</code> directory. The &lt;xmlfiles&gt; argument is a space-
-    delimited list of resources you want to analyze, either uncompiled resource xml files or
-    directories of such files.
-</p>
-<p>
-    The tool loads the specified XML files and analyzes their definitions and
-    hierarchies according to a set of predefined rules. For every issue it detects, it
-    displays the following information:
-</p>
-<ul>
-    <li>
-        The filename in which the issue was detected.
-    </li>
-    <li>
-        The line number for the issue.
-    </li>
-    <li>
-        A description of the issue, and for some types of issues it also suggests a resolution.
-    </li>
-</ul>
-<p>The following is a sample of the output from the tool:</p>
-<pre>
-$ layoutopt samples/
-samples/compound.xml
-   7:23 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
-   11:21 This LinearLayout layout or its FrameLayout parent is useless
-samples/simple.xml
-   7:7 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
-samples/too_deep.xml
-   -1:-1 This layout has too many nested layouts: 13 levels, it should have &lt;= 10!
-   20:81 This LinearLayout layout or its LinearLayout parent is useless
-   24:79 This LinearLayout layout or its LinearLayout parent is useless
-   28:77 This LinearLayout layout or its LinearLayout parent is useless
-   32:75 This LinearLayout layout or its LinearLayout parent is useless
-   36:73 This LinearLayout layout or its LinearLayout parent is useless
-   40:71 This LinearLayout layout or its LinearLayout parent is useless
-   44:69 This LinearLayout layout or its LinearLayout parent is useless
-   48:67 This LinearLayout layout or its LinearLayout parent is useless
-   52:65 This LinearLayout layout or its LinearLayout parent is useless
-   56:63 This LinearLayout layout or its LinearLayout parent is useless
-samples/too_many.xml
-   7:413 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
-   -1:-1 This layout has too many views: 81 views, it should have &lt;= 80!
-samples/useless.xml
-   7:19 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
-   11:17 This LinearLayout layout or its FrameLayout parent is useless
-</pre>
diff --git a/docs/html/guide/developing/debugging/index.jd b/docs/html/guide/developing/debugging/index.jd
deleted file mode 100644
index 0ad1a08..0000000
--- a/docs/html/guide/developing/debugging/index.jd
+++ /dev/null
@@ -1,188 +0,0 @@
-page.title=Debugging
-@jd:body
-
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#stack">Debugging Environment</a></li>
-
-        <li><a href="#addltools">Additional Debugging Tools</a></li>
-
-        <li><a href="#tips">Debugging Tips</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>The Android SDK provides most of the tools that you need to debug your applications. You need
-  a JDWP-compliant debugger if you want to be able to do things such as step through code,
-  view variable values, and pause execution of an application. If you are using Eclipse, a
-  JDWP-compliant debugger is already included and there is no setup required. If you are using
-  another IDE, you can use the debugger that comes with it and attach the debugger to a special
-  port so it can communicate with the application VMs on your devices. The main components that
-  comprise a typical Android debugging environment are:</p>
-
-  <dl>
-    <dt><a href="{@docRoot}guide/developing/tools/adb.html"><strong>adb</strong></a></dt>
-
-    <dd><code>adb</code> acts as a middleman between a device and your development system. It provides various
-    device management capabilities, including moving and syncing files to the emulator, running a
-    UNIX shell on the device or emulator, and providing a general means to communicate with
-    connected emulators and devices.</dd>
-
-    <dt><a href="{@docRoot}guide/developing/debugging/ddms.html"><strong>Dalvik Debug Monitor
-    Server</strong></a></dt>
-
-    <dd>DDMS is a graphical program that communicates with your devices through <code>adb</code>. DDMS can
-    capture screenshots, gather thread and stack information, spoof incoming calls and SMS
-    messages, and has many other features.</dd>
-
-    <dt><strong><a href="{@docRoot}guide/developing/device.html">Device</a> or
-    <a href="{@docRoot}guide/developing/devices/index.html">Android Virtual Device</a></strong></dt>
-
-    <dd>Your application must run in a device or in an AVD so that it can be debugged. An <code>adb</code> device
-    daemon runs on the device or emulator and provides a means for the <code>adb</code> host daemon to
-    communicate with the device or emulator.</dd>
-
-    <dt><strong>JDWP debugger</strong></dt>
-
-    <dd>The Dalvik VM (Virtual Machine) supports the JDWP protocol to allow debuggers to attach to
-    a VM. Each application runs in a VM and exposes a unique port that you can attach a debugger to
-    via DDMS. If you want to debug multiple applications, attaching to each port might become
-    tedious, so DDMS provides a port forwarding feature that can forward a specific VM's debugging
-    port to port 8700. You can switch freely from application to application by highlighting it in the
-    Devices tab of DDMS. DDMS forwards the appropriate port to port 8700. Most modern Java IDEs include a JDWP debugger,
-    or you can use a command line debugger such as <a href="http://download.oracle.com/javase/6/docs/technotes/tools/">
-    <code>jdb</code></a>.</dd>
-  </dl>
-
-  <h2>Debugging Environment</h2>
-
-  <p>Figure 1 shows how the various debugging tools work together in a typical
-  debugging environment.</p>
-  <img src="{@docRoot}images/debugging.png"
-        alt="Debugging workflow" />
-  <p class="img-caption><strong>Figure 1. </strong> Debugging Workflow</p>
-
-  <p>On your emulator or device, each application runs in its own instance of a Dalvik VM. The <code>adb</code>
-  device daemon allows communication with the VMs from an outside party.</p>
-
-  <p>On your development machine, the <code>adb</code> host daemon communicates with the <code>adb</code> device daemon and
-  allows tools such as DDMS to communicate with the device or emulator. The <code>adb</code> host daemon also
-  allows you to access shell commands on the device as well as providing capabilities such as
-  application installation and file transferring.</p>
-
-  <p>Each application VM on the device or emulator exposes a debugging port that you can attach to
-  via DDMS. DDMS can forward any of these ports to a static debugging port (typically port 8700) by
-  selecting the application that you want to debug in the DDMS user interface. A JDWP debugger can
-  attach to this static debugging port and debug all the applications that are running on the
-  device or emulator without having to attach to multiple ports.</p>
-
-  <p>If you are using Eclipse, much of these interconnections are hidden from you. DDMS, <code>adb</code>, and a
-  JDWP debugger are all setup for you and you can access them through the Debug and DDMS
-  perspectives in Eclipse. If you are developing in a non-Eclipse environment, you have to invoke
-  these tools manually.</p>
-
-  <h2 id="addltools">Additional Debugging Tools</h2>
-
-  <p>In addition to the main debugging tools, the Android SDK provides additional tools to help you
-  debug and profile your applications:</p>
-
-  <dl>
-    <dt><strong><a href="{@docRoot}guide/developing/debugging/debugging-ui.html">Heirarchy Viewer
-    and layoutopt</a></strong></dt>
-
-    <dd>Graphical programs that let you debug and profile user interfaces.</dd>
-
-    <dt><strong><a href=
-    "{@docRoot}guide/developing/debugging/debugging-tracing.html">Traceview</a></strong></dt>
-
-    <dd>A graphical viewer that displays trace file data for method calls and times saved by your
-    application, which can help you profile the performance of your application.</dd>
-
-    <dt><strong><a href="{@docRoot}guide/developing/debugging/debugging-devtools.html">Dev Tools
-    Android application</a></strong></dt>
-
-    <dd>The Dev Tools application included in the emulator system image exposes several settings
-    that provide useful information such as CPU usage and frame rate. You can also transfer the
-    application to a hardware device.</dd>
-  </dl>
-
-
-  <h2 id="tips">Debugging Tips</h2>
-
-<p>While debugging, keep these helpful tips in mind to help you figure out common problems with your
-applications:</p>
-
-<dl>
-<dt><strong>Dump the stack trace</strong></dt>
-<dd>To obtain a stack dump from emulator, you can log
-in with <code>adb shell</code>, use <code>ps</code> to find the process you
-want, and then <code>kill -3</code>. The stack trace appears in the log file.
-</dd>
-
-<dt><strong>Display useful info on the emulator screen</strong></dt>
-<dd>The device can display useful information such as CPU usage or highlights
-around redrawn areas. Turn these features on and off in the developer settings
-window as described in <a href="{@docRoot}guide/developing/debugging/debugging-devtools.html">
-Debugging with the Dev Tools App</a>.
-</dd>
-
-<dt><strong>Get application and system state information from the emulator</strong></dt>
-<dd>You can access dumpstate information from the <code>adb shell</code> commands. See
-<a href="{@docRoot}guide/developing/tools/adb.html#dumpsys">dumpsys and
-dumpstate</a> on the adb topic page.</dd>
-
-
-
-<dt><strong>Get wireless connectivity information</strong></dt>
-<dd>You can get information about wireless connectivity using DDMS.
-From the <strong>Device</strong> menu, select <strong>Dump
-radio state</strong>.</dd>
-
-<dt><strong>Log trace data</strong></dt>
-<dd>You can log method calls and other tracing data in an activity by calling
-{@link android.os.Debug#startMethodTracing(String) startMethodTracing()}. See <a
-href="{@docRoot}guide/developing/debugging/debugging-tracing.html">Profiling with Traceview and
-dmtracedump</a> for details. </dd>
-
-<dt><strong>Log radio data</strong></dt>
-<dd>By default, radio information is not logged to the system (it is a lot of
-data). However, you can enable radio logging using the following commands:
-
-<pre class="no-pretty-print">
-adb shell
-logcat -b radio
-</pre>
-</dd>
-
-<dt><strong>Capture screenshots</strong></dt>
-<dd>The Dalvik Debug Monitor Server (DDMS) can capture screenshots from the emulator. Select
-<strong>Device > Screen capture</strong>.</dd>
-
-<dt><strong>Use debugging helper classes</strong></dt>
-<dd>Android provides debug helper classes such as {@link android.util.Log
-    util.Log} and {@link android.os.Debug} for your convenience. </dd>
-
-<dt><strong>Garbage collection</strong></dt>
-<dd>
-The debugger and garbage collector are currently loosely integrated. The VM guarantees that any
-object the debugger is aware of is not garbage collected until after the debugger disconnects.
-This can result in a buildup of objects over time while the debugger is connected. For example,
-if the debugger sees a running thread, the associated {@link java.lang.Thread} object is not
-garbage collected even after the thread terminates.
-</dd>
-
-</dl>
-
-<p>See the <a href="{@docRoot}resources/faq/troubleshooting.html">Troubleshooting</a> document
-for answers to some common developing and debugging issues.</p>
-
-
-
-
-
-
-
diff --git a/docs/html/guide/developing/device.jd b/docs/html/guide/developing/device.jd
deleted file mode 100644
index d91551a..0000000
--- a/docs/html/guide/developing/device.jd
+++ /dev/null
@@ -1,267 +0,0 @@
-page.title=Using Hardware Devices
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#setting-up">Setting up a Device for Development</a>
-      <ol>
-        <li><a href="#VendorIds">USB Vendor IDs</a></li>
-      </ol>
-    </li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a></li>
-    <li><a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a></li>
-  </ol>
-</div>
-</div>
-
-<p>When building a mobile application, it's important that you always test your application on a
-real device before releasing it to users. This page describes how to set up your development
-environment and Android-powered device for testing and debugging on the device.</p>
-
-<p>You can use any Android-powered device as an environment for running,
-debugging, and testing your applications. The tools included in the SDK make it easy to install and
-run your application on the device each time you compile. You can install your application on the
-device directly from Eclipse or from the command line with ADB. If
-you don't yet have a device, check with the service providers in your area to determine which
-Android-powered devices are available.</p>
-
-<p>If you want a SIM-unlocked phone, then you might consider the Google Nexus S. To find a place
-to purchase the Nexus S and other Android-powered devices, visit <a
-href="http://www.google.com/phone/detail/nexus-s">google.com/phone</a>.</p>
-
-<p class="note"><strong>Note:</strong> When developing on a device, keep in mind that you should
-still use the <a
-href="{@docRoot}guide/developing/devices/emulator.html">Android emulator</a> to test your
-application
-on configurations that are not equivalent to those of your real device. Although the emulator
-does not allow you to test every device feature (such as the accelerometer), it does
-allow you to verify that your application functions properly on different versions of the Android
-platform, in different screen sizes and orientations, and more.</p>
-
-
-<h2 id="setting-up">Setting up a Device for Development</h2>
-
-<p>With an Android-powered device, you can develop and debug your Android applications just as you
-would on the emulator. Before you can start, there are just a few things to do:</p>
-
-<ol>
-  <li>Declare your application as "debuggable" in your Android Manifest.
-    <p>When using Eclipse, you can skip this step, because running your app directly from
-the Eclipse IDE automatically enables debugging.</p>
-    <p>In the <code>AndroidManifest.xml</code> file, add <code>android:debuggable="true"</code> to
-the <code>&lt;application></code> element.</p>
-    <p class="note"><strong>Note:</strong> If you manually enable debugging in the manifest
- file, be sure to disable it before you build for release (your published application
-should usually <em>not</em> be debuggable).</p></li>
-  <li>Turn on "USB Debugging" on your device.
-    <p>On the device, go to <strong>Settings > Applications > Development</strong> 
-    and enable <strong>USB debugging</strong> 
-    (on an Android 4.0 device, the setting is 
-located in <strong>Settings > Developer options</strong>).</p>
-  </li>
-  <li>Set up your system to detect your device.
-    <ul>
-      <li>If you're developing on Windows, you need to install a USB driver for adb. For an
-installation guide and links to OEM drivers, see the <a href="{@docRoot}sdk/oem-usb.html">OEM USB
-Drivers</a> document.</li>
-      <li>If you're developing on Mac OS X, it just works. Skip this step.</li>
-      <li>If you're developing on Ubuntu Linux, you need to add a
-<code>udev</code> rules file that contains a USB configuration for each type of device
-you want to use for development. In the rules file, each device manufacturer
-is identified by a unique vendor ID, as specified by the
-<code>ATTR{idVendor}</code> property. For a list of vendor IDs, see  <a
-href="#VendorIds">USB Vendor IDs</a>, below. To set up device detection on
-Ubuntu Linux:
-
-        <ol type="a">
-          <li>Log in as root and create this file:
-            <code>/etc/udev/rules.d/51-android.rules</code></span>.
-            <p>Use this format to add each vendor to the file:<br/>
-              <code>SUBSYSTEM==&quot;usb&quot;, ATTR{idVendor}==&quot;0bb4&quot;, MODE=&quot;0666&quot;, GROUP=&quot;plugdev&quot;</code>
-              <br /><br />
-              
-              In this example, the vendor ID is for HTC. The <code>MODE</code>
-assignment specifies read/write permissions, and <code>GROUP</code> defines
-which Unix group  owns the device node. </p>
-            
-            <p class="note"><strong>Note:</strong> The rule syntax
-may vary slightly depending on your  environment. Consult the <code>udev</code>
-documentation for your system as needed. For an overview of rule syntax, see
-this guide to <a
-href="http://www.reactivated.net/writing_udev_rules.html">writing udev
-rules</a>.</p>
-          </li>
-          <li>Now execute:<br/>
-            <code>chmod a+r /etc/udev/rules.d/51-android.rules</code>
-          </li>
-        </ol>
-      </li>
-    </ul>
-  </li>
-</ol>
-
-<p>When plugged in over USB, can verify that your device is connected by executing <code>adb
-devices</code> from your SDK {@code platform-tools/} directory. If connected,
-you'll see the device name listed as a "device."</p>
-
-<p>If using Eclipse, run or debug your application as usual. You will be
-presented with a <b>Device Chooser</b> dialog that lists the available
-emulator(s) and connected device(s). Select the device upon which you want to
-install and run the application.</p>
-
-<p>If using the <a href="{@docRoot}guide/developing/tools/adb.html">Android
-Debug Bridge</a> (adb), you can issue commands with the <code>-d</code> flag to
-target your connected device.</p>
-
-<h3 id="VendorIds">USB Vendor IDs</h3>
-
-<p>This table provides a reference to the vendor IDs needed in order to add USB
-device support on Linux. The USB Vendor ID is the value given to the
-<code>ATTR{idVendor}</code> property in the rules file, as described 
-above.</p>
-
-<table>
-  <tr>
-    <th>Company</th><th>USB Vendor ID</th></tr>
-  <tr>
-    <td>Acer</td>
-    <td><code>0502</code></td>
-  </tr>
-  <tr>
-    <td>ASUS</td>
-    <td><code>0b05</code></td>
-  </tr>
-  <tr>
-    <td>Dell</td>
-    <td><code>413c</code></td>
-  </tr>
-  <tr>
-    <td>Foxconn</td>
-    <td><code>0489</code></td>
-  </tr>
-  <tr>
-    <td>Fujitsu</td>
-    <td><code>04c5</code></td>
-  </tr>
-  <tr>
-    <td>Fujitsu Toshiba</td>
-    <td><code>04c5</code></td>
-  </tr>
-  <tr>
-    <td>Garmin-Asus</td>
-    <td><code>091e</code></td>
-  </tr>
-  <tr>
-    <td>Google</td>
-    <td><code>18d1</code></td>
-  </tr>
-  <tr>
-    <td>Hisense</td>
-    <td><code>109b</code></td>
-  </tr>
-  <tr>
-    <td>HTC</td>
-    <td><code>0bb4</code></td>
-  </tr>
-  <tr>
-    <td>Huawei</td>
-    <td><code>12d1</code></td>
-  </tr>
-  <tr>
-    <td>K-Touch</td>
-    <td><code>24e3</code></td>
-  </tr>
-  <tr>
-    <td>KT Tech</td>
-    <td><code>2116</code></td>
-  </tr>
-  <tr>
-    <td>Kyocera</td>
-    <td><code>0482</code></td>
-  </tr>
-  <tr>
-    <td>Lenovo</td>
-    <td><code>17ef</code></td>
-  </tr>
-  <tr>
-    <td>LG</td>
-    <td><code>1004</code></td>
-  </tr>
-  <tr>
-    <td>Motorola</td>
-    <td><code>22b8</code></td>
-  </tr>
-  <tr>
-    <td>NEC</td>
-    <td><code>0409</code></td>
-  </tr>
-  <tr>
-    <td>Nook</td>
-    <td><code>2080</code></td>
-  </tr>
-  <tr>
-    <td>Nvidia</td>
-    <td><code>0955</code></td>
-  </tr>
-  <tr>
-    <td>OTGV</td>
-    <td><code>2257</code></td>
-  </tr>
-  <tr>
-    <td>Pantech</td>
-    <td><code>10a9</code></td>
-  </tr>
-  <tr>
-    <td>Pegatron</td>
-    <td><code>1d4d</code></td>
-  </tr>
-  <tr>
-    <td>Philips</td>
-    <td><code>0471</code></td>
-  </tr>
-  <tr>
-    <td>PMC-Sierra</td>
-    <td><code>04da</code></td>
-  </tr>
-  <tr>
-    <td>Qualcomm</td>
-    <td><code>05c6</code></td>
-  </tr>
-  <tr>
-    <td>SK Telesys</td>
-    <td><code>1f53</code></td>
-  </tr>
-  <tr>
-    <td>Samsung</td>
-    <td><code>04e8</code></td>
-  </tr>
-  <tr>
-    <td>Sharp</td>
-    <td><code>04dd</code></td>
-  </tr>
-  <tr>
-    <td>Sony</td>
-    <td><code>054c</code></td>
-  </tr>
-  <tr>
-    <td>Sony Ericsson</td>
-    <td><code>0fce</code></td>
-  </tr>
-  <tr>
-    <td>Teleepoch</td>
-    <td><code>2340</code></td>
-  </tr>
-  <tr>
-    <td>Toshiba</td>
-    <td><code>0930</code></td>
-  </tr>
-  <tr>
-    <td>ZTE</td>
-    <td><code>19d2</code></td>
-  </tr>
-</table>
diff --git a/docs/html/guide/developing/devices/emulator.jd b/docs/html/guide/developing/devices/emulator.jd
deleted file mode 100644
index 5edd1f5..0000000
--- a/docs/html/guide/developing/devices/emulator.jd
+++ /dev/null
@@ -1,1571 +0,0 @@
-page.title=Using the Android Emulator
-parent.title=Managing Virtual Devices
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-    <ol>
-      <li><a href="#overview">Overview</a></li>
-      <li><a href="#avds">Android Virtual Devices and the Emulator</a></li>
-      <li><a href="#starting">Starting and Stopping the Emulator</a></li>
-      <li><a href="#apps">Installing Applications on the Emulator</a></li>
-      <li><a href="#acceleration">Using Hardware Acceleration</a>
-        <ol>
-          <li><a href="#accel-graphics">Configuring Graphics Acceleration</a></li>
-          <li><a href="#accel-vm">Configuring Virtual Machine Acceleration</a></li>
-        </ol>
-      </li>
-      <li><a href="#sdcard">SD Card Emulation</a>
-        <ol>
-          <li><a href="#sdcard-creating">Creating an SD card image</a></li>
-          <li><a href="#sdcard-files">Copying files to an SD card image</a></li>
-          <li><a href="#sdcard-loading">Loading an SD card image</a></li>
-        </ol>
-      </li>
-      <li><a href="#diskimages">Working with Emulator Disk Images</a>
-	      <ol>
-	        <li><a href="#defaultimages">Default image files</a></li>
-	        <li><a href="#runtimeimages">Runtime images: user data and SD card</a></li>
-	        <li><a href="#temporaryimages">Temporary images</a></li>
-	      </ol>
-	    </li>
-      <li><a href="#emulatornetworking">Emulator Networking</a>
-	      <ol>
-          <li><a href="#networkaddresses">Network Address Space</a></li>
-          <li><a href="#networkinglimitations">Local Networking Limitations</a></li>
-          <li><a href="#redirection">Using Network Redirection</a></li>
-          <li><a href="#dns">Configuring the Emulator's DNS Settings</a></li>
-          <li><a href="#proxy">Using the Emulator with a Proxy</a></li>
-          <li><a href="#connecting">Interconnecting Emulator Instances</a></li>
-          <li><a href="#calling">Sending a Voice Call or SMS to Another Emulator Instance</a></li>
-        </ol>
-      </li>
-      <li><a href="#console">Using the Emulator Console</a>
-        <ol>
-          <li><a href="#portredirection">Port Redirection</a></li>
-          <li><a href="#geo">Geo Location Provider Emulation</a></li>
-          <li><a href="#events">Hardware Events Emulation</a></li>
-          <li><a href="#power">Device Power Characteristics</a></li>
-          <li><a href="#netstatus">Network Status</a></li>
-          <li><a href="#netdelay">Network Delay Emulation</a></li>
-          <li><a href="#netspeed">Network Speed Emulation</a></li>
-          <li><a href="#telephony">Telephony Emulation</a></li>
-          <li><a href="#sms">SMS Emulation</a></li>
-          <li><a href="#vm">VM State</a></li>
-          <li><a href="#window">Emulator Window</a></li>
-          <li><a href="#terminating">Terminating an Emulator Instance</a></li>
-        </ol>
-      </li>
-      <li><a href="#limitations">Emulator Limitations</a></li>
-      <li><a href="#troubleshooting">Troubleshooting Emulator Problems</a></li>
-    </ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a></li>
-    <li><a href="{@docRoot}guide/developing/devices/managing-avds.html">Managing AVDs with AVD Manager</a></li>
-  </ol>
-</div>
-</div>
-
-<img src="{@docRoot}images/emulator-wvga800l.png" alt="Image of the Android Emulator"
-width="367" height="349" style="margin-left:2em;float:right;"/>
-<p>The Android SDK includes a virtual mobile device emulator
-that runs on your computer. The emulator lets you prototype, develop and test
-Android applications without using a physical device. </p>
-
-<p>The Android emulator mimics all of the hardware and software features
-of a typical mobile device, except that it cannot place actual phone
-calls. It provides a variety of navigation and control keys, which you can "press"
-using your mouse or keyboard to generate events for your application. It also
-provides a screen in which your application is displayed, together with any other
-active Android applications. </p>
-
-<p>To let you model and test your application more easily, the emulator utilizes
-Android Virtual Device (AVD) configurations. AVDs let you define certain hardware
-aspects of your emulated phone and allow you to create many configurations to test
-many Android platforms and hardware permutations. Once your application is running on
-the emulator, it can use the services of the Android platform to invoke other
-applications, access the network, play audio and video, store and retrieve data,
-notify the user, and render graphical transitions and themes. </p>
-
-<p>The emulator also includes a variety of debug capabilities, such as a console
-from which you can log kernel output, simulate application interrupts (such as
-arriving SMS messages or phone calls), and simulate latency effects and dropouts
-on the data network.</p>
-
-
-
-<h2 id="overview">Overview</h2>
-
-<p>The Android emulator is an application that provides a virtual
-mobile device on which you can run your Android applications. It runs a full
-Android system stack, down to the kernel level, that includes a set of
-preinstalled applications (such as the dialer) that you can access from your
-applications. You can choose what version of the Android system you want to
-run in the emulator by configuring AVDs, and you can also customize the
-mobile device skin and key mappings. When launching the emulator and at runtime,
-you can use a variety of commands and options to control its behavior.
-</p>
-
-<p>The Android system images available through the Android SDK Manager contain
-code for the Android Linux kernel, the native libraries, the Dalvik VM, and the
-various Android packages (such as the Android framework and preinstalled
-applications). The emulator provides dynamic binary translation of device
-machine code to the OS and processor architecture of your development
-machine.</p>
-
-<p>The Android emulator supports many hardware features likely to be found on
-mobile devices, including: </p>
-
-<ul>
-  <li>An ARMv5 CPU and the corresponding memory-management unit (MMU)</li>
-  <li>A 16-bit LCD display</li>
-  <li>One or more keyboards (a Qwerty-based keyboard and associated Dpad/Phone
-buttons)</li>
-  <li>A sound chip with output and input capabilities</li>
-  <li>Flash memory partitions (emulated through disk image files on the
-development machine)</li>
-  <li>A GSM modem, including a simulated SIM Card</li>
-  <li>A camera, using a webcam connected to your development computer.</li>
-  <li>Sensors like an accelerometer, using data from a USB-connected Android device.</li>
-</ul>
-
-<p>The following sections describe the emulator and its use for development of Android
-applications in more detail.</p>
-
-
-<h2 id="avds">Android Virtual Devices and the Emulator</h2>
-
-<p>To use the emulator, you first must create one or more AVD configurations. In each
-configuration, you specify an Android platform to run in the emulator and the set of hardware
-options and emulator skin you want to use. Then, when you launch the emulator, you specify
-the AVD configuration that you want to load. </p>
-
-<p>Each AVD functions as an independent device, with its own private storage for
-user data, SD card, and so on. When you launch the emulator with an AVD configuration,
-it automatically loads the user data and SD card data from the AVD directory. By default,
-the emulator stores the user data, SD card data, and cache in the AVD directory.</p>
-
-<p>To create and manage AVDs you use the AVD Manager UI or the <code>android</code> tool
-that is included in the SDK.
-For complete information about how to set up AVDs, see <a
-href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>.</p>
-
-
-<h2 id="starting">Starting and Stopping the Emulator</h2>
-
-<p>During development and testing of your application, you install and run your
-application in the Android emulator. You can launch the emulator as a standalone
-application from a command line, or you can run it from within your Eclipse
-development environment. In either case, you specify the AVD configuration to
-load and any startup options you want to use, as described in this document.
-</p>
-
-<p>You can run your application on a single instance of the emulator or,
-depending on your needs, you can start multiple emulator instances and run your
-application in more than one emulated device. You can use the emulator's
-built-in commands to simulate GSM phone calling or SMS between emulator
-instances, and you can set up network redirection that allows emulators to send
-data to one another. For more information, see <a href="#telephony">Telephony
-Emulation</a>, <a href="#sms">SMS Emulation</a>, and
-<a href="#emulatornetworking">Emulator Networking</a></p>
-
-<p>To start an instance of the emulator from the command line, navigate to the
-<code>tools/</code> folder of the SDK. Enter <code>emulator</code> command
-like this: </p>
-
-<pre>emulator -avd &lt;avd_name&gt; [&lt;options&gt;]</pre>
-
-<p>This initializes the emulator, loads an AVD configuration and displays the emulator
-window. For more information about command line options for the emulator, see the
-<a href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a> tool reference.</p>
-
-<p class="note"><strong>Note:</strong> You can run multiple
-instances of the emulator concurrently, each with its own AVD configuration and
-storage area for user data, SD card, and so on.</p>
-
-<p>If you are working in Eclipse, the ADT plugin for Eclipse installs your
-application and starts the emulator automatically, when you run or debug
-the application. You can specify emulator startup options in the Run/Debug
-dialog, in the Target tab. When the emulator is running, you can issue
-console commands as described later in this document.</p>
-
-<p>If you are not working in Eclipse, see <a href="#apps">Installing Applications
-on the Emulator</a> for information about how to install your application.</p>
-
-<p>To stop an emulator instance, just close the emulator's window.</p>
-
-<p>For a reference of the emulator's startup commands and keyboard mapping, see
-the <a href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a> tool
-reference.</p>
-
-
-<h2 id="apps">Installing Applications on the Emulator</h2>
-
-<p>If you don't have access to Eclipse or the ADT Plugin, you can install your application on the
-emulator using the <a href="{@docRoot}guide/developing/tools/adb.html#move">adb</a> utility. Before
-installing the application, you need to build and package it into an <code>.apk</code> as described
-in <a href="{@docRoot}guide/developing/building/index.html">Building and
-Running Apps</a>. Once the application is installed, you can start the emulator from the command
-line as described previously, using any startup options necessary.
-When the emulator is running, you can also connect to the emulator instance's
-<a href="#console">console</a> to issue commands as needed.</p>
-
-<p>As you update your code, you periodically package and install it on the emulator.
-The emulator preserves the application and its state data across restarts,
-in a user-data disk partition. To ensure that the application runs properly
-as you update it, you may need to delete the emulator's user-data partition.
-To do so, start the emulator with the <code>-wipe-data</code> option.
-For more information about the user-data partition and other emulator storage,
-see <a href="#diskimages">Working with Emulator Disk Images</a>.</p>
-
-
-<h2 id="acceleration">Using Hardware Acceleration</h2>
-
-<p>In order to make the Android emulator run faster and be more responsive, you can configure it to
-take advantage of hardware acceleration, using a combination of configuration options, specific
-Android system images and hardware drivers.</p>
-
-
-<h3 id="accel-graphics">Configuring Graphics Acceleration</h3>
-
-<p class="caution"><strong>Caution:</strong> As of SDK Tools Revision 17, the graphics
-acceleration feature for the emulator is experimental; be alert for incompatibilities and
-errors when using this feature. </p>
-
-<p>Graphics acceleration for the emulator takes advantage of your development computer's graphics
-hardware, specifically its graphics processing unit (GPU), to make screen drawing faster. To use
-the graphics acceleration feature, you must have the following versions of the Android development
-tools installed:</p>
-
-<ul>
-  <li>Android SDK Tools, Revision 17 or higher</li>
-  <li>Android SDK Platform API 15, Revision 3 or higher</li>
-</ul>
-
-<p>Use the <a href="{@docRoot}sdk/installing.html#AddingComponents">Android SDK
-Manager</a> to install these components:</p>
-
-<p class="note"><strong>Note:</strong> Not all applications are compatible with graphics hardware
-acceleration. In particular, the Browser application and applications using the {@link
-android.webkit.WebView} component are not compatible with graphics acceleration.</p>
-
-<p>To configure an AVD to use graphics acceleration:</p>
-
-<ol>
-  <li>Make sure you have the required SDK components installed (listed above).</li>
-  <li>Start the AVD Manager and create a new AVD with the <strong>Target</strong> value of
-<strong>Android 4.0.3 (API Level 15)</strong>, revision 3 or higher.</li>
-  <li>If you want to have graphics acceleration enabled by default for this AVD, in the
-<strong>Hardware</strong> section, click <strong>New</strong>, select <strong>GPU emulation</strong>
-and set the value to <strong>Yes</strong>.
-  <p class="note"><strong>Note:</strong> You can also enable graphics acceleration when you
-start an emulator using command line options as describe in the next section.</p>
-  </li>
-  <li>Name the AVD instance and select any other configuration options.
-  <p class="caution"><strong>Caution:</strong> Do not select the <strong>Snapshot: Enabled</strong>
-option. Snapshots are not supported for emulators with graphics acceleration enabled.</p>
-  </li>
-  <li>Click <strong>Create AVD</strong> to save the emulator configuration.</li>
-</ol>
-
-<p>If you set <strong>GPU emulation</strong> to <strong>Yes</strong> for your AVD, then graphics
-acceleration is automatically enabled when you run it. If you did not enable <strong>GPU
-emulation</strong> when you created the AVD, you can still enable it at runtime.</p>
-
-<p>To enable graphics acceleration at runtime for an AVD:</p>
-
-<ul>
-  <li>If you are running the emulator from the command line, just include the {@code -gpu on}
-option:
-<pre>emulator -avd &lt;avd_name&gt; -gpu on</pre>
-    <p class="note"><strong>Note:</strong> You must specify an AVD configuration that uses
-Android 4.0.3 (API Level 15, revision 3) or higher system image target. Graphics acceleration is not
-available for earlier system images.</p>
-  </li>
-  <li>If you are running the emulator from Eclipse, run your Android application using an AVD with
-the {@code -gpu on} option enabled:
-    <ol>
-      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
-Configurations...</strong></li>
-      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
-project run configuration or create a new configuration.</li>
-      <li>Click the <strong>Target</strong> tab.</li>
-      <li>Select the AVD you created in the previous procedure.</li>
-      <li>In the <strong>Additional Emulator Command Line Options</strong> field, enter:<br>
-        {@code -gpu on}</li>
-      <li>Run your Android project using this run configuration.</li>
-    </ol>
-  </li>
-</ul>
-
-
-<h3 id="accel-vm">Configuring Virtual Machine Acceleration</h2>
-
-<p class="caution"><strong>Caution:</strong> As of SDK Tools Revision 17, the virtual machine
-acceleration feature for the emulator is experimental; be alert for incompatibilities and errors
-when using this feature.</p>
-
-<p>Many modern CPUs provide extensions for running virtual machines (VMs) more efficiently. Taking
-advantage of these extensions with the Android emulator requires some additional configuration of
-your development system, but can significantly improve the execution speed. Before attempting to use
-this type of acceleration, you should first determine if your development system’s CPU supports one
-of the following virtualization extensions technologies:</p>
-
-<ul>
-  <li>Intel Virtualization Technology (VT, VT-x, vmx) extensions</li>
-  <li>AMD Virtualization (AMD-V, SVM) extensions (only supported for Linux)</li>
-</ul>
-
-<p>The specifications from the manufacturer of your CPU should indicate if it supports
-virtualization extensions. If your CPU does not support one of these virtualization technologies,
-then you cannot use virtual machine acceleration.</p>
-
-<p class="note"><strong>Note:</strong> Virtualization extensions are typically enabled through
-your computer's BIOS and are frequently turned off by default. Check the documentation for your
-system's motherboard to find out how to enable virtualization extensions.</p>
-
-<p>Once you have determined that your CPU supports virtualization extensions, make sure you can work
-within these additional requirements of running an emulator inside an accelerated virtual
-machine:</p>
-
-<ul>
-  <li><strong>x86 AVD Only</strong> - You must use an AVD that is uses an x86 system image target.
-AVDs that use ARM-based system images cannot be accelerated using the emulator configurations
-described here.</li>
-  <li><strong>Not Inside a VM</strong> - You cannot run a VM-accelerated emulator inside another
-virtual machine, such as a VirtualBox or VMWare-hosted virtual machine. You must run the emulator
-directly on your system hardware.</li>
-  <li><strong>Other VM Drivers</strong> - If you are running another virtualization technology on
-your system such as VirtualBox or VMWare, you may need to unload the driver for that virtual machine
-hosting software before running an accelerated emulator.</li>
-  <li><strong>OpenGL&reg; Graphics</strong> - Emulation of OpenGL ES graphics may not perform at the
-same level as an actual device.</li>
-</ul>
-
-<p>To use virtual machine acceleration with the emulator, you need the following version of Android
-development tools. Use the <a href="{@docRoot}sdk/installing.html#AddingComponents">Android SDK
-Manager</a> to install these components:</p>
-
-<ul>
-  <li>Android SDK Tools, Revision 17 or higher</li>
-  <li>Android x86-based system image</li>
-</ul>
-
-<p>If your development environment meets all of the requirements for running a VM-accelerated
-emulator, you can use the AVD Manager to create an x86-based AVD configuration:</p>
-
-<ol>
-  <li>In the Android SDK Manager, make sure you have an x86-based <strong>System Image</strong>
-    installed for your target Android version. If you do not have an x86 <strong>System
-    Image</strong> installed, select one in the Android SDK Manager and install it.
-    <p class="note"><strong>Tip:</strong> System images are listed under each API Level in the SDK
-    Manager. An x86 system image may not be available for all API levels.</p>
-  </li>
-  <li>Start the AVD Manager and create a new AVD with an x86 value for the
-<strong>CPU/ABI</strong> field. You may need to select a specific <strong>Target</strong> value, or
-select a <strong>Target</strong> value and then select a specific <strong>CPU/ABI</strong>
-option.</li>
-  <li>Name the emulator instance and select any other configuration options.</li>
-  <li>Click <strong>Create AVD</strong> to save the emulator configuration.</li>
-</ol>
-
-<h4 id="vm-windows">Configuring VM Acceleration on Windows</h4>
-
-<p>Virtual machine acceleration for Windows requires the installation of the Intel Hardware
-Accelerated Execution Manager (Intel HAXM). The software requires an Intel CPU with
-Virtualization Technology (VT) support and one of the following operating systems:</p>
-
-<ul>
-  <li>Windows 7 (32/64-bit)</li>
-  <li>Windows Vista (32/64-bit)</li>
-  <li>Windows XP (32-bit only)</li>
-</ul>
-
-<p>To install the virtualization driver:</p>
-
-<ol>
-  <li>Start the Android SDK Manager, select <strong>Extras</strong> and then select <strong>Intel
-Hardware Accelerated Execution Manager</strong>.</li>
-  <li>After the download completes, execute {@code
-&lt;sdk&gt;/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.exe}.</li>
-  <li>Follow the on-screen instructions to complete installation.</li>
-  <li>After installation completes, confirm that the virtualization driver is operating correctly by
-opening a command prompt window and running the following command:
-    <pre>sc query intelhaxm</pre>
-    <p>You should see a status message including the following information:</p>
-<pre>
-SERVICE_NAME: intelhaxm
-       ...
-       STATE              : 4  RUNNING
-       ...
-</pre>
-  </li>
-</ol>
-
-<p>To run an x86-based emulator with VM acceleration:</p>
-<ul>
-  <li>If you are running the emulator from the command line, just specify an x86-based AVD:
-<pre>emulator -avd &lt;avd_name&gt;</pre>
-    <p class="note"><strong>Note:</strong> You must provide an x86-based AVD configuration
-name, otherwise VM acceleration will not be enabled.</p>
-  </li>
-  <li>If you are running the emulator from Eclipse, run your Android application with an x86-based
-AVD:
-    <ol>
-      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
-Configurations...</strong></li>
-      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
-project run configuration or create a new configuration.</li>
-      <li>Click the <strong>Target</strong> tab.</li>
-      <li>Select the x86-based AVD you created previously.</li>
-      <li>Run your Android project using this run configuration.</li>
-    </ol>
-  </li>
-</ul>
-
-<p>You can adjust the amount of memory available to the Intel HAXM kernel extension by re-running
-its installer.</p>
-
-<p>You can stop using the virtualization driver by uninstalling it. Re-run the installer or use
-the Control Panel to remove the software.</p>
-
-
-<h4 id="vm-mac">Configuring VM Acceleration on Mac</h4>
-
-<p>Virtual machine acceleration on a Mac requires the installation of the Intel Hardware Accelerated
-Execution Manager (Intel HAXM) kernel extension to allow the Android emulator to make use of CPU
-virtualization extensions. The kernel extension is compatible with Mac OS X Snow Leopard (version
-10.6.0) and higher.</p>
-
-<p>To install the Intel HAXM kernel extension:</p>
-
-<ol>
-  <li>Start the Android SDK Manager, select <strong>Extras</strong> and then select <strong>Intel
-Hardware Accelerated Execution Manager</strong>.
-  <li>After the download completes, execute
-    {@code &lt;sdk&gt;/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmg}.</li>
-  <li>Double click the <strong>IntelHAXM.mpkg</strong> icon to begin installation.</li>
-  <li>Follow the on-screen instructions to complete installation.</li>
-  <li>After installation completes, confirm that the new kernel extension is operating correctly by
-opening a terminal window and running the following command:
-    <pre>kextstat | grep intel</pre>
-    <p>You should see a status message containing the following extension name, indicating that the
-      kernel extension is loaded:</p>
-    <pre>com.intel.kext.intelhaxm</pre>
-  </li>
-</ol>
-
-<p>To run an x86-based emulator with VM acceleration:</p>
-<ul>
-  <li>If you are running the emulator from the command line, just specify an x86-based AVD:
-<pre>emulator -avd &lt;avd_name&gt;</pre>
-    <p class="note"><strong>Note:</strong> You must provide an x86-based AVD configuration
-name, otherwise VM acceleration will not be enabled.</p>
-  </li>
-  <li>If you are running the emulator from Eclipse, run your Android application with an x86-based
-AVD:
-    <ol>
-      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
-Configurations...</strong></li>
-      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
-project run configuration or create a new configuration.</li>
-      <li>Click the <strong>Target</strong> tab.</li>
-      <li>Select the x86-based AVD you created previously.</li>
-      <li>Run your Android project using this run configuration.</li>
-    </ol>
-  </li>
-</ul>
-
-<p>You can adjust the amount of memory available to the Intel HAXM kernel extension by re-running
-the installer.</p>
-
-<p>You can stop using the virtualization kernel driver by uninstalling it. Before removing it, shut
-down any running x86 emulators. To unload the virtualization kernel driver, run the following
-command in a terminal window:</p>
-
-<pre>sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh</pre>
-
-<h4 id="vm-linux">Configuring VM Acceleration on Linux</h4>
-
-<p>Linux-based systems support virtual machine acceleration through the KVM software package. Follow
-<a href="https://www.google.com/?q=kvm+installation">instructions for installing KVM</a> on your
-Linux system, and verify that KVM is enabled. In addition to following the installation
-instructions, be aware of these configuration requirements:</p>
-
-<ul>
-  <li>Running KVM requires specific user permissions, make sure you have sufficient permissions
-according to the KVM installation instructions.</li>
-  <li>If you use another virtualization technology in your Linux platform, unload its kernel driver
-before running the x86 emulator. For example, the VirtualBox driver program is {@code vboxdrv}.</li>
-</ul>
-
-<p>To run an x86-based emulator with VM acceleration:</p>
-
-<ul>
-  <li>If you are running the emulator from the command line, start the emulator with an x86-based
-AVD and include the KVM options:
-<pre>emulator -avd &lt;avd_name&gt; -qemu -m 512 -enable-kvm</pre>
-    <p class="note"><strong>Note:</strong> You must provide an x86-based AVD configuration
-name, otherwise VM acceleration will not be enabled.</p>
-  </li>
-  <li>If you are running the emulator from Eclipse, run your Android application with an x86-based
-AVD and include the KVM options:
-    <ol>
-      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
-Configurations...</strong></li>
-      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
-project run configuration or create a new configuration.</li>
-      <li>Click the <strong>Target</strong> tab.</li>
-      <li>Select the x86-based AVD you created previously.</li>
-      <li>In the <strong>Additional Emulator Command Line Options</strong> field, enter:
-        <pre>-qemu -m 512 -enable-kvm</pre>
-      </li>
-      <li>Run your Android project using this run configuration.</li>
-    </ol>
-  </li>
-</ul>
-
-<p class="note"><strong>Important:</strong> When using the {@code -qemu} command line option, make sure
-it is the last parameter in your command. All subsequent options are interpreted as qemu-specific
-parameters.</p>
-
-
-<h2 id="sdcard">SD Card Emulation</h2>
-
-<p>You can create a disk image and then load it to the emulator at startup, to
-simulate the presence of a user's SD card in the device. To do this, you can specify
-an SD card image when you create an AVD, or you can use the mksdcard utility included
-in the SDK.</p>
-
-<p>The following sections describe how to create an SD card disk image, how to copy
-files to it, and how to load it in the emulator at startup. </p>
-
-<p>Note that you can only load a disk image at emulator startup. Similarly, you
-can not remove a simulated SD card from a running emulator. However, you can
-browse, send files to, and copy/remove files from a simulated SD card either
-with adb or the emulator. </p>
-
-<p>The emulator supports emulated SDHC cards, so you can create an SD card image
-of any size up to 128 gigabytes.</p>
-
-
-<h3 id="sdcard-creating">Creating an SD card image</h3>
-
-<p>There are several ways of creating an SD card image. The easiest way is to use the
-<strong>AVD Manager</strong> to create a new SD card by specifying a size when you create an AVD.
-You can also use the {@code android} command line tool when creating an AVD. Just add the
-<code>-c</code> option to your command: </p>
-
-<pre>android create avd -n &lt;avd_name&gt; -t &lt;targetID&gt; -c &lt;size&gt;[K|M]</pre>
-
-<p>The <code>-c</code> option can also be used to to specify a path to an SD card
-image for the new AVD. For more information, see <a
-href="{@docRoot}guide/developing/devices/managing-avds-cmdline.html">Managing Virtual Devices
-from the Command Line</a>.
-</p>
-
-<p>You can also use the mksdcard tool, included in the SDK, to create a FAT32 disk
-image that you can load in the emulator at startup. You can access mksdcard in
-the tools/ directory of the SDK and create a disk image like this: </p>
-
-<pre>mksdcard &lt;size&gt; &lt;file&gt;</pre>
-
-<p>For example:</p>
-
-<pre>mksdcard 1024M sdcard1.iso</pre>
-
-<p>For more information, see <a
-href="{@docRoot}guide/developing/tools/mksdcard.html"><code>mksdcard</code></a>.</p>
-
-
-<h3 id="sdcard-files">Copying files to an SD card image</h3>
-
-<p>Once you have created the disk image, you can copy files to it prior to
-loading it in the emulator. To copy files, you can mount the image as a loop
-device and then copy the files to it, or you can use a utility such as {@code mtools} to
-copy the files directly to the image. The {@code mtools} package is available for Linux,
-Mac, and Windows.</p>
-
-<p>Alternatively, you can use the {@code adb push} command to move files onto an SD card image
-while it is loaded in an emulator. For more information see the <a
-href="{@docRoot}guide/developing/tools/adb.html#copyfiles">{@code adb push}</a> documentation.</p>
-
-<h3 id="sdcard-loading">Loading an SD card image</h3>
-
-<p>By default, the emulator loads the SD card image that is stored with the active
-AVD (see the <code>-avd</code> startup option).</p>
-
-<p>Alternatively, you can start the emulator with the
-<code>-sdcard</code> flag and specify the name and path of your image (relative
-to the current working directory): </p>
-
-<pre>emulator -sdcard &lt;filepath&gt;</pre>
-
-
-<h2 id="diskimages">Working with Emulator Disk Images</h2>
-
-<p>The emulator uses mountable disk images stored on your development machine to
-simulate flash (or similar) partitions on an actual device. For example, it uses a
-disk image containing an emulator-specific kernel, the Android system, a
-ramdisk image, and writeable images for user data and simulated SD card.</p>
-
-<p>To run properly, the emulator requires access to a specific set of disk image
-files. By default, the Emulator always looks for the disk images in the
-private storage area of the AVD in use. If no images exist there when
-the Emulator is launched, it creates the images in the AVD directory based on
-default versions stored in the SDK. </p>
-
-<p class="note"><strong>Note:</strong> The default storage location for
-AVDs is in <code>~/.android/avd</code> on OS X and Linux, <code>C:\Documents and
-Settings\&lt;user&gt;\.android\</code> on Windows XP, and
-<code>C:\Users\&lt;user&gt;\.android\</code>
-on Windows Vista.</p>
-
-<p>To let you use alternate or custom versions of the image files, the emulator
-provides startup options that override the default locations and filenames of
-the image files. When you use one of these options, the emulator searches for the image
-file under the image name or location that you specify; if it can not locate the
-image, it reverts to using the default names and location.</p>
-
-<p>The emulator uses three types of image files: default image files, runtime
-image files, and temporary image files. The sections below describe how to
-override the location/name of each type of file. </p>
-
-<h3 id="defaultimages">Default image files</h3>
-
-<p>When the emulator launches, but does not find an existing user data image in
-the active AVD's storage area, it creates a new one from a default version
-included in the SDK. The default user data image is read-only. The image
-files are read-only.</p>
-
-<p>The emulator provides the <code>-system &lt;dir&gt;</code> startup option to
-let you override the location where the emulator looks for the default
-user data image. </p>
-
-<p>The emulator also provides a startup option that lets you override the name
-of the default user data image, as described in the following table. When you use the
-option, the emulator looks in the default directory, or in a custom location
-(if you specified <code>-system &lt;dir&gt;</code>). </p>
-
-
-<table>
-<tr>
-  <th width="10%" >Name</th>
-    <th width="30%" >Description</th>
-    <th width="40%" >Comments</th>
-</tr>
-
-<!--
-<tr>
-  <td><code>kernel-qemu.img</code></td>
-  <td>The emulator-specific Linux kernel image</td>
-  <td>Override using <code>-kernel &lt;file&gt;</code></td>
-</tr>
-
-<tr>
-  <td><code>ramdisk.img</code></td>
-  <td>The ramdisk image used to boot the system.</td>
-  <td>Override using <code>-ramdisk &lt;file&gt;</code></td>
-</tr>
-
-<tr>
-  <td><code>system.img</code></td>
-  <td>The <em>initial</em> Android system image.</td>
-  <td>Override using <code>-image &lt;file&gt;</code></td>
-</tr>
--->
-<tr>
-  <td><code>userdata.img</code></td>
-  <td>The <em>initial</em> user-data disk image</td>
-  <td>Override using <code>-initdata &lt;file&gt;</code>. Also see
-<code>-data &lt;file&gt;</code>, below.</td>
-</tr>
-
-</table>
-
-<h3 id="runtimeimages">Runtime images: user data and SD card</h3>
-
-<p>At runtime, the emulator reads and writes data to two disk images: a
-user-data image and (optionally) an SD card image. These images emulate the user-data
-partition and removable storage media on actual device. </p>
-
-<p>The emulator provides a default user-data disk image. At startup, the emulator
-creates the default image as a copy of the system user-data image (user-data.img),
-described above. The emulator stores the new image with the files of the active AVD.</p>
-
-<!--
-<p>The emulator provides a startup option, <code>-datadir &lt;dir&gt;</code>,
-that you can use to override the location under which the emulator looks for the runtime
-image files. </p>
--->
-
-<p>The emulator provides startup options to let you override the actual names and storage
-locations of the runtime images to load, as described in the following table. When you use one
-of these options, the emulator looks for the specified file(s) in the current working directory,
-in the AVD directory, or in a custom location (if you specified a path with the filename). </p>
-
-<table>
-<tr>
-  <th width="10%" >Name</th>
-    <th width="30%" >Description</th>
-    <th width="40%" >Comments</th>
-</tr>
-<tr>
-  <td><code>userdata-qemu.img</code></td>
-  <td>An image to which the emulator writes runtime user-data for a unique user.</td>
-  <td>Override using <code>-data &lt;filepath&gt;</code>, where <code>&lt;filepath&gt;</code> is the
-path the image, relative to the current working directory. If you supply a filename only,
-the emulator looks for the file in the current working directory. If the file at <code>&lt;filepath&gt;</code> does
-not exist, the emulator creates an image from the default userdata.img, stores it under the name you
-specified, and persists user data to it at shutdown. </td>
-</tr>
-
-<tr>
-  <td><code>sdcard.img</code></td>
-  <td>An image representing an SD card inserted into the emulated device.</td>
-  <td>Override using <code>-sdcard &lt;filepath&gt;</code>, where <code>&lt;filepath&gt;</code> is the
-path the image, relative to the current working directory. If you supply a filename only,
-the emulator looks for the file in the current working directory. </td>
-</tr>
-
-</table>
-
-<h4>User-Data Image</h4>
-
-<p>Each emulator instance uses a writeable user-data image to store user- and
-session-specific data. For example, it uses the image to store a unique user's
-installed application data, settings, databases, and files. </p>
-
-<p>At startup, the emulator attempts to load a user-data image stored during
-a previous session. It looks for the file in the current working directory,
-in the AVD directory described in a previous section and at the custom location/name
-that you specified at startup. </p>
-
-<ul>
-<li>If it finds a user-data image, it mounts the image and makes it available
-to the system for reading and writing of user data. </li>
-<li>If it does not find one, it creates an image by copying the system user-data
-image (userdata.img), described above. At device power-off, the system persists
-the user data to the image, so that it will be available in the next session.
-Note that the emulator stores the new disk image at the location/name that you
-specify in <code>-data</code> startup option.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Because of the AVD configurations used in the emulator,
-each emulator instance gets its own dedicated storage. There is no longer a need
-to use the <code>-d</code> option to specify an instance-specific storage area.</p>
-
-<h4>SD Card</h4>
-
-<P>Optionally, you can create a writeable disk image that the emulator can use
-to simulate removeable storage in an actual device. For information about how to create an
-emulated SD card and load it in the emulator, see <a href="#sdcard">SD Card Emulation</a></p>
-
-<p>You can also use the android tool to automatically create an SD Card image
-for you, when creating an AVD. For more information, see <a
-href="{@docRoot}guide/developing/devices/managing-avds.html">Managing Virtual Devices with AVD
-Manager</a>.
-
-
-<h3 id="temporaryimages">Temporary Images</h3>
-
-<p>The emulator creates two writeable images at startup that it deletes at
-device power-off. The images are: </p>
-
-<ul>
-  <li>A writable copy of the Android system image</li>
-  <li>The <code>/cache</code> partition image</li>
-</ul>
-
-<p>The emulator does not permit renaming the temporary system image or
-persisting it at device power-off. </p>
-
-<p>The <code>/cache</code> partition image is initially empty, and is used by
-the browser to cache downloaded web pages and images. The emulator provides an
-<code>-cache &lt;file&gt;</code>, which specifies the name of the file in which
-to persist the <code>/cache</code> image at device power-off. If <code>&lt;file&gt;
-</code> does not exist, the emulator creates it as an empty file. </p>
-
-<p>You can also disable the use of the cache partition by specifying the
-<code>-nocache</code> option at startup. </p>
-
-
-<h2 id="emulatornetworking">Emulator Networking</h2>
-
-<p>The emulator provides versatile networking capabilities that you can use to
-set up complex modeling and testing environments for your application. The
-sections below introduce the emulator's network architecture and capabilities.
-</p>
-
-<h3 id="networkaddresses">Network Address Space</h3>
-
-<p>Each instance of the emulator runs behind a virtual router/firewall service
-that isolates it from your development machine's network interfaces and settings
-and from the internet. An emulated device can not see your development machine
-or other emulator instances on the network. Instead, it sees only that it is
-connected through Ethernet to a router/firewall.</p>
-
-<p>The virtual router for each instance manages the 10.0.2/24 network address
-space &mdash; all addresses managed by the router are in the form of
-10.0.2.&lt;xx&gt;, where &lt;xx&gt; is a number. Addresses within this space are
-pre-allocated by the emulator/router as follows:</p>
-
-<table>
-  <tr>
-    <th>Network Address</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td>10.0.2.1</td>
-    <td>Router/gateway address </td>
-  </tr>
-  <tr>
-    <td>10.0.2.2</td>
-    <td>Special alias to your host loopback interface (i.e., 127.0.0.1 on your
-development machine)</td>
-  </tr>
-  <tr>
-    <td>10.0.2.3</td>
-    <td>First DNS server</td>
-  </tr>
-  <tr>
-    <td>10.0.2.4 / 10.0.2.5 / 10.0.2.6</td>
-    <td>Optional second, third and fourth DNS server (if any) </td>
-  </tr>
-  <tr>
-    <td>10.0.2.15</td>
-    <td>The emulated device's own network/ethernet interface</td>
-  </tr>
-  <tr>
-    <td>127.0.0.1</td>
-    <td>The emulated device's own loopback interface </td>
-  </tr>
-</table>
-
-<p>Note that the same address assignments are used by all running emulator
-instances. That means that if you have two instances running concurrently on
-your machine, each will have its own router and, behind that, each will have an
-IP address of 10.0.2.15. The instances are isolated by a router and can
-<em>not</em> see each other on the same network. For information about how to
-let emulator instances communicate over TCP/UDP, see <a
-href="#connecting">Connecting Emulator Instances</a>.</p>
-
-<p>Also note that the address 127.0.0.1 on your development machine corresponds
-to the emulator's own loopback interface. If you want to access services running
-on your development machine's loopback interface (a.k.a. 127.0.0.1 on your
-machine), you should use the special address 10.0.2.2 instead.</p>
-
-<p>Finally, note that each emulated device's pre-allocated addresses are
-specific to the Android emulator and will probably be very different on real
-devices (which are also very likely to be NAT-ed, i.e., behind a
-router/firewall)</p>
-
-
-<h3 id="networkinglimitations">Local Networking Limitations</h3>
-
-<p>Android applications running in an emulator can connect to the network available on your
-workstation. However, they connect through the emulator, not directly to hardware, and the emulator
-acts like a normal application on your workstation. This means that the emulator, and thus your
-Android applications, are subject to some limitations:</p>
-
-<ul>
-  <li>Communication with the emulated device may be blocked by a firewall
-program running on your machine.</li>
-  <li>Communication with the emulated device may be blocked by another
-(physical) firewall/router to which your machine is connected.</li>
-</ul>
-
-<p>The emulator's virtual router should be able to handle all outbound TCP and
-UDP connections/messages on behalf of the emulated device, provided your
-development machine's network environment allows it to do so. There are no
-built-in limitations on port numbers or ranges except the one imposed by your
-host operating system and network.</p>
-
-<p>Depending on the environment, the emulator may not be able to support other
-protocols (such as ICMP, used for "ping") might not be supported. Currently, the
-emulator does not support IGMP or multicast. </p>
-
-<h3 id="redirection">Using Network Redirection</h3>
-
-<p>To communicate with an emulator instance behind its virtual router, you need
-to set up network redirection on the virtual router. Clients can then connect
-to a specified guest port on the router, while the router directs traffic
-to/from that port to the emulated device's host port. </p>
-
-<p>To set up the network redirection, you create a mapping of host and guest
-ports/addresses on the the emulator instance. There are two ways to set up
-network redirection: using emulator console commands and using the ADB tool, as
-described below. </p>
-
-
-<h4 id="consoleredir">Setting up Redirection through the Emulator Console</h4>
-
-<p>Each emulator instance provides a control console the you can connect to, to
-issue commands that are specific to that instance. You can use the
-<code>redir</code> console command to set up redirection as needed for an
-emulator instance. </p>
-
-<p>First, determine the console port number for the target emulator instance.
-For example, the console port number for the first emulator instance launched is
-5554. Next, connect to the console of the target emulator instance, specifying
-its console port number, as follows: </p>
-
-<pre><code>telnet localhost 5554</code></pre>
-
-<p>Once connected, use the <code>redir</code> command to work with redirection.
-To add a redirection, use:</p>
-
-<pre><code>add&nbsp;&lt;protocol&gt;:&lt;host-port&gt;:&lt;guest-port&gt;</code>
-</pre>
-
-<p>where <code>&lt;protocol&gt;</code> is either <code>tcp</code> or <code>udp</code>,
-and <code>&lt;host-port&gt;</code> and <code>&lt;guest-port&gt;</code> sets the
-mapping between your own machine and the emulated system, respectively. </p>
-
-<p>For example, the following command sets up a redirection that handles all
-incoming TCP connections to your host (development) machine on 127.0.0.1:5000
-and will pass them through to the emulated system's 10.0.2.15:6000.:</p>
-
-<pre>redir add tcp:5000:6000</pre>
-
-<p>To delete a redirection, you can use the <code>redir del</code> command. To
-list all redirection for a specific instance, you can use <code>redir
-list</code>. For more information about these and other console commands, see
-<a href="#console">Using the Emulator Console</a>. </p>
-
-<p>Note that port numbers are restricted by your local environment. this typically
-means that you cannot use host port numbers under 1024 without special
-administrator privileges.  Also, you won't be able to set up a redirection for a
-host port that is already in use by another process on your machine. In that
-case, <code>redir</code> generates an error message to that effect. </p>
-
-<h4 id="adbredir">Setting Up Redirection through ADB</h4>
-
-<p>The Android Debug Bridge (ADB) tool provides port forwarding, an alternate
-way for you to set up network redirection. For more information, see <a
-href="{@docRoot}guide/developing/tools/adb.html#forwardports">Forwarding Ports</a> in the ADB
-documentation.</p>
-
-<p>Note that ADB does not currently offer any way to remove a redirection,
-except by killing the ADB server.</p>
-
-
-<h3 id="dns">Configuring the Emulator's DNS Settings</h3>
-
-<p>At startup, the emulator reads the list of DNS servers that your system is
-currently using. It then stores the IP addresses of up to four servers on this
-list and sets up aliases to them on the emulated addresses 10.0.2.3, 10.0.2.4,
-10.0.2.5 and 10.0.2.6 as needed.  </p>
-
-<p>On Linux and OS X, the emulator obtains the DNS server addresses by parsing
-the file <code>/etc/resolv.conf</code>. On Windows, the emulator obtains the
-addresses by calling the <code>GetNetworkParams()</code> API. Note that this
-usually means that the emulator ignores the content of your "hosts" file
-(<code>/etc/hosts</code> on Linux/OS X, <code>%WINDOWS%/system32/HOSTS</code>
- on Windows).</P>
-
-<p>When starting the emulator at the command line, you can also use the
-<code>-dns-server &lt;serverList&gt;</code> option to manually specify the
-addresses of DNS servers to use, where &lt;serverList&gt; is a comma-separated
-list of server names or IP addresses. You might find this option useful if you
-encounter DNS resolution problems in the emulated network (for example, an
-"Unknown Host error" message that appears when using the web browser).</p>
-
-
-<h3 id="proxy">Using the Emulator with a Proxy</h3>
-
-<p>If your emulator must access the Internet through a proxy server, you can use
-the <code>-http-proxy &lt;proxy&gt;</code> option when starting the emulator, to
-set up the appropriate redirection. In this case, you specify proxy information
-in <code>&lt;proxy&gt;</code> in one of these formats:</p>
-
-<pre>http://&lt;machineName&gt;:&lt;port&gt;</pre>
-
-<p>or</p>
-
-<pre>http://&lt;username&gt;:&lt;password&gt;@&lt;machineName&gt;:&lt;port&gt;</pre>
-
-<p>The <code>-http-proxy</code> option forces the emulator to use the specified
-HTTP/HTTPS proxy for all outgoing TCP connections. Redirection for UDP is not
-currently supported.</p>
-
-<p>Alternatively, you can define the environment variable
-<code>http_proxy</code> to the value you want to use for
-<code>&lt;proxy&gt;</code>. In this case, you do not need to specify a value for
-<code>&lt;proxy&gt;</code> in the <code>-http-proxy</code> command &mdash; the
-emulator checks the value of the <code>http_proxy</code> environment variable at
-startup and uses its value automatically, if defined. </p>
-
-<p>You can use the <code>-verbose-proxy</code> option to diagnose proxy
-connection problems.</p>
-
-
-<h3 id="connecting">Interconnecting Emulator Instances</h3>
-
-<p>To allow one emulator instance to communicate with another, you must set up
-the necessary network redirection as illustrated below. </p>
-
-<p>Assume that your environment is</p>
-
-<ul>
-  <li>A is you development machine</li>
-  <li>B is your first emulator instance, running on A</li>
-  <li>C is your second emulator instance, also running on A</li>
-</ul>
-
-<p>and you want to run a server on B, to which C will connect, here is how you
-could set it up: </p>
-
-<ol>
-  <li>Set up the server on B, listening to
-<code>10.0.2.15:&lt;serverPort&gt;</code></li>
-  <li>On B's console, set up a redirection from
-<code>A:localhost:&lt;localPort&gt;</code> to <code>
-B:10.0.2.15:&lt;serverPort&gt;</code></li>
-  <li>On C, have the client connect to <code>10.0.2.2:&lt;localPort&gt;</code></li>
-</ol>
-
-<p>For example, if you wanted to run an HTTP server, you can select
-<code>&lt;serverPort&gt;</code> as 80 and <code>&lt;localPort&gt;</code> as
-8080:</p>
-
-<ul>
-  <li>B listens on 10.0.2.15:80</li>
-  <li>On B's console, issue <code>redir add tcp:8080:80</code></li>
-  <li>C connects to 10.0.2.2:8080</li>
-</ul>
-
-<h3 id="calling">Sending a Voice Call or SMS to Another Emulator Instance</h3>
-
-<p>The emulator automatically forwards simulated voice calls and SMS messages from one instance to
-another. To send a voice call or SMS, use the dialer application or SMS application, respectively,
-from one of the emulators.</p>
-
-<p>To initiate a simulated voice call to another emulator instance:</p>
-<ol>
-<li>Launch the dialer application on the originating emulator instance.</li>
-<li>As the number to dial, enter the console port number of the instance you'd like to call. You can determine
-  the console port number of the target instance by checking its window title, where the
-  console port number is reported as "Android Emulator (&lt;port&gt;). </li>
-<li>Press "Dial". A new inbound call appears in the target emulator instance. </li>
-</ol>
-
-<p>To send an SMS message to another emulator instance, launch the SMS application (if available). Specify the console port number of the target emulator instance as as the SMS address, enter the message text, and send the message. The message is delivered to the target emulator instance. </p>
-
-<p>You can also connect to an emulator instance's console to simulate an incoming voice call or SMS. For more information, see <a href="#telephony">Telephony Emulation</a> and <a href="#sms">SMS Emulation</a>.
-
-
-<h2 id="console">Using the Emulator Console</h2>
-
-<p>Each running emulator instance provides a console that lets you query and control the emulated
-device environment. For example, you can use the console to manage port redirection, network
-characteristics, and telephony events while your application is running on the emulator. To
-access the console and enter commands, use telnet to connect to the console's port number.</p>
-
-<p>To connect to the console of any running emulator instance at any time, use this command: </p>
-
-<pre>telnet localhost &lt;console-port&gt;</pre>
-
-<p>An emulator instance occupies a pair of adjacent ports: a console port and an  {@code adb} port.
-The port numbers differ by 1, with the  {@code adb} port having the higher port number. The console
-of the first emulator instance running on a given machine uses console port 5554 and  {@code adb}
-port 5555. Subsequent instances use port numbers increasing by two &mdash; for example, 5556/5557,
-5558/5559, and so on. Up to 16 concurrent emulator instances can run a console facility. </p>
-
-<p>To connect to the emulator console, you must specify a valid console port. If multiple emulator instances are running, you need to determine the console port of the emulator instance you want to connect to. You can find the instance's console port listed in the title of the instance window. For example, here's the window title for an instance whose console port is 5554:</p>
-
-<p><code>Android Emulator (5554)</code></p>
-
-<p>Alternatively, you can use the <code>adb devices</code> command, which prints a list of running emulator instances and their console port numbers. For more information, see <a href="{@docRoot}guide/developing/tools/adb.html#devicestatus">Querying for Emulator/Device Instances</a> in the adb documentation.</p>
-
-<p class="note">Note: The emulator listens for connections on ports 5554-5587 and accepts connections only from localhost.</p>
-
-<p>Once you are connected to the console, you can then enter <code>help [command]</code> to see a list of console commands and learn about specific commands. </p>
-
-<p>To exit the console session, use <code>quit</code> or <code>exit</code>.</p>
-
-<p>The following sections below describe the major functional areas of the console.</p>
-
-
-<h3 id="portredirection">Port Redirection</h3>
-
-<p>You can use the console to add and remove port redirection while the emulator is running. After
-you connect to the console, manage port redirection by entering the following command:</p>
-
-<pre>redir &lt;list|add|del&gt; </pre>
-
-<p>The <code>redir</code> command supports the subcommands listed in the table below. </p>
-
-<table>
-<tr>
-  <th width="25%" >Subcommand
-  <th width="30%" >Description</th>
-  <th width="35%">Comments</th>
-</tr>
-
-  <tr>
-    <td><code>list</code></td>
-    <td>List the current port redirection.</td>
-  <td>&nbsp;</td>
-  </tr>
-
-
-<tr>
- <td><code>add&nbsp;&lt;protocol&gt;:&lt;host-port&gt;:&lt;guest-port&gt;</code></td>
-  <td>Add a new port redirection.</td>
-<td><ul><li>&lt;protocol&gt; must be either &quot;tcp&quot; or &quot;udp&quot;</li>
-<li>&lt;host-port&gt; is the port number to open on the host</li>
-<li>&lt;guest-port&gt; is the port number to route data to on the emulator/device</li>
-</ul></td>
-</tr>
-<tr>
-  <td><code>del &lt;protocol&gt;:&lt;host-port&gt;</code></td>
-  <td>Delete a port redirection.</td>
-<td>The meanings of &lt;protocol&gt; and &lt;host-port&gt; are listed in the previous row.</td>
-</tr>
-</table>
-
-
-<h3 id="geo">Geo Location Provider Emulation</h3>
-
-<p>You can use the console to set the geographic location reported to the applications running
-inside an emulator. Use the <code>geo</code> command to send a simple GPS fix to the
-emulator, with or without NMEA 1083 formatting:</p>
-
-<pre>geo &lt;fix|nmea&gt;</pre>
-
-<p>The <code>geo</code> command supports the subcommands listed in the table below.</p>
-
-<table>
-<tr>
-  <th width="25%">Subcommand</th>
-  <th width="30%">Description</th>
-  <th width="35%">Comments</th>
-</tr>
-
-  <tr>
-    <td><code>fix &lt;longitude&gt; &lt;latitude&gt; [&lt;altitude&gt;]</code></td>
-    <td>Send a simple GPS fix to the emulator instance.</td>
-  <td>Specify longitude and latitude in decimal degrees. Specify altitude in meters.</td>
-  </tr>
-<tr>
-  <td><code>nmea &lt;sentence&gt;</code></td>
-  <td>Send an NMEA 0183 sentence to the emulated device, as if it were sent from an emulated GPS modem.</td>
-<td><code>&lt;sentence&gt;</code> must begin with '$GP'. Only '$GPGGA' and '$GPRCM' sentences are currently supported.</td>
-</tr>
-</table>
-
-<p>You can issue the <code>geo</code> command as soon as an emulator instance is running. The
-emulator sets the location you enter by creating a mock location provider. This provider responds to
-location listeners set by applications, and also supplies the location to the {@link
-android.location.LocationManager}. Any application can query the location manager to obtain the
-current GPS fix for the emulated device by calling:
-
-<pre>LocationManager.getLastKnownLocation("gps")</pre>
-
-<p>For more information about the Location Manager, see {@link android.location.LocationManager}.
-</p>
-
-<h3 id="events">Hardware Events Emulation</h3>
-
-<p>The {@code event} console commands sends hardware events to the emulator. The syntax for this
-command is as follows:</p>
-
-<pre>event &lt;send|types|codes|text&gt;</pre>
-
-<p>The <code>event</code> command supports the subcommands listed in the table below. </p>
-
-<table>
-<tr>
-  <th width="25%" >Subcommand
-  <th width="30%" >Description</th>
-  <th width="35%">Comments</th>
-</tr>
-
-  <tr>
-    <td><code>send &lt;type&gt;:&lt;code&gt;:&lt;value&gt; [...]</code></td>
-    <td>Send one or more events to the Android kernel. </td>
-  <td>You can use text names or integers for <code>&lt;type&gt;</code> and <code>&lt;value&gt;</code>.</td>
-  </tr>
-<tr>
-  <td><code>types</code></td>
-  <td>List all <code>&lt;type&gt;</code> string aliases supported by the <code>event</code> subcommands.</td>
-<td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>codes &lt;type&gt;</code></td>
-  <td>List all <code>&lt;codes&gt;</code> string aliases supported by the <code>event</code>
-   subcommands for the specified <code>&lt;type&gt;</code>.</td>
-<td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>event text &lt;message&gt;</code></td>
-  <td>Simulate keypresses to send the specified string of characters as a message,</td>
-<td>The message must be a UTF-8 string. Unicode posts will be reverse-mapped according to the current device keyboard. Unsupported characters will be discarded silently.</td>
-</tr>
-</table>
-
-
-<h3 id="power">Device Power Characteristics</h3>
-
-<p>The {@code power} command controls the power state reported by the emulator to applications. The
-syntax for this command is as follows: </p>
-
-<pre>power &lt;display|ac|status|present|health|capacity&gt;</pre>
-
-<p>The <code>event</code> command supports the subcommands listed in the table below. </p>
-
-<table>
-<tr>
-  <th width="25%" >Subcommand </th>
-  <th width="30%" >Description</th>
-  <th width="35%">Comments</th>
-</tr>
-
-  <tr>
-    <td><code>display</code></td>
-    <td>Display battery and charger state.</td>
-  <td>&nbsp;</td>
-  </tr>
-<tr>
-  <td><code>ac &lt;on|off&gt;</code></td>
-  <td>Set AC charging state to on or off. </td>
-<td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>status &lt;unknown|charging|discharging|not-charging|full&gt;</code></td>
-  <td>Change battery status as specified.</td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-  <td><code>present &lt;true|false&gt;</code></td>
-  <td>Set battery presence state.</td>
-<td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>health &lt;unknown|good|overheat|dead|overvoltage|failure&gt;</code></td>
-  <td>Set battery health state.</td>
-<td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>power health &lt;percent&gt;</code></td>
-  <td>Set remaining battery capacity state (0-100).</td>
-<td>&nbsp;</td>
-</tr>
-</table>
-
-
-<h3 id="netstatus">Network Status</h3>
-
-<p>You can use the console to check the network status and current delay and speed characteristics. To do so, connect to the console and use the <code>netstatus</code> command. Here's an example of the command and its output. </p>
-
-<pre>network status
-</pre>
-
-
-<h3 id="netdelay">Network Delay Emulation</h3>
-
-<p>The emulator lets you simulate various network latency levels, so that you can test your
-application in an environment more typical of the actual conditions in which it will run. You can
-set a latency level or range at emulator startup or you can use the console to change the latency,
-while the application is running in the emulator. </p>
-
-<p>To set latency at emulator startup, use the  <code>-netdelay</code> emulator option with a
-supported <code>&lt;delay&gt;</code> value, as listed in the table below. Here are some
-examples:</p>
-
-<pre>emulator -netdelay gprs
-emulator -netdelay 40 100</pre>
-
-<p>To make changes to  network delay while the emulator is running, connect to the console and use
-the <code>netdelay</code> command with a supported <code>&lt;delay&gt;</code> value from the table
-below.</p>
-
-<pre>network delay gprs</pre>
-
-<p>The format of network &lt;delay&gt; is one of the following (numbers are milliseconds):</p>
-
-<table style="clear:right;width:100%;">
-<tr>
-  <th width="30%" >Value</th>
-  <th width="35%" >Description</th><th width="35%">Comments</th></tr>
-
-  <tr><td><code>gprs</code></td><td>GPRS</td>
-  <td>(min 150, max 550)</td>
-  </tr>
-
-<tr><td><code>edge</code></td><td>EDGE/EGPRS</td>
-<td>(min 80, max 400)</td>
-</tr>
-<tr><td><code>umts</code></td><td>UMTS/3G</td>
-<td>(min 35, max 200)</td>
-</tr>
-<tr><td><code>none</code></td><td>No latency</td><td>(min 0, max 0)</td></tr>
-<tr><td><code>&lt;num&gt;</code></td>
-<td>Emulate an exact latency  (milliseconds).</td>
-<td>&nbsp;</td></tr>
-<tr><td><code>&lt;min&gt;:&lt;max&gt;</code></td>
-<td>Emulate an specified latency range (min, max milliseconds).</td>
-<td>&nbsp;</td></tr>
-</table>
-
-
-<h3 id="netspeed">Network Speed Emulation</h3>
-
-<p>The emulator also lets you simulate various network transfer rates.
-You can set a transfer rate or range at emulator startup or you can use the console to change the
-rate, while the application is running in the emulator.</p>
-
-<p>To set the network speed at emulator startup, use the  <code>-netspeed</code> emulator option with a supported
-<code>&lt;speed&gt;</code> value, as listed in the table below. Here are some examples:</p>
-
-<pre>emulator -netspeed gsm
-emulator -netspeed 14.4 80</pre>
-
-<p>To make changes to network speed while the emulator is running, connect to the console and use
-the <code>netspeed</code> command with a supported <code>&lt;speed&gt;</code> value from the table
-below.</p>
-
-<pre>network speed 14.4 80</pre>
-
-<p>The format of network <code>&lt;speed&gt;</code> is one of the following (numbers are
-kilobits/sec):</p>
-<table style="clear:right;width:100%;">
-<tbody>
-<tr>
-  <th width="30%">Value</th>
-  <th width="35%">Description</th><th width="35%">Comments</th></tr>
-
-  <tr>
-  <td><code>gsm</code></td>
-  <td>GSM/CSD</td><td>(Up: 14.4, down: 14.4)</td></tr>
-<tr>
-  <td><code>hscsd</code></td>
-  <td>HSCSD</td><td>(Up: 14.4, down: 43.2)</td></tr>
-<tr>
-  <td><code>gprs</code></td>
-  <td>GPRS</td><td>(Up: 40.0, down: 80.0)</td></tr>
-<tr>
-  <td><code>edge</code></td>
-  <td>EDGE/EGPRS</td>
-  <td>(Up: 118.4, down: 236.8)</td>
-</tr>
-<tr>
-  <td><code>umts</code></td>
-  <td>UMTS/3G</td><td>(Up: 128.0, down: 1920.0)</td></tr>
-<tr>
-  <td><code>hsdpa</code></td>
-  <td>HSDPA</td><td>(Up: 348.0, down: 14400.0)</td></tr>
-<tr>
-  <td><code>full</code></td>
-  <td>no limit</td><td>(Up: 0.0, down: 0.0)</td></tr>
-<tr>
-  <td><code>&lt;num&gt;</code></td>
-  <td>Set an exact rate used for both upload and download.</td><td></td></tr>
-<tr>
-  <td><code>&lt;up&gt;:&lt;down&gt;</code></td>
-  <td>Set exact rates for upload and download separately.</td><td></td></tr>
-</table>
-
-
-<h3 id="telephony">Telephony Emulation</h3>
-
-<p>The Android emulator includes its own GSM emulated modem that lets you simulate telephony
-functions in the emulator. For example, you can simulate inbound phone calls, establish data
-connections and terminate them. The Android system handles simulated calls exactly as it would
-actual calls. The emulator does not support call audio.</p>
-
-<p>You can use the {@code gsm} command to access the emulator's telephony functions after connecting
-to the console. The syntax for this command is as follows:</p>
-
-<pre>gsm &lt;call|accept|busy|cancel|data|hold|list|voice|status&gt; </pre>
-
-<p>The <code>gsm</code> command supports the subcommands listed in the table below. </p>
-<table>
-  <tr>
-    <th>Subcommand </th>
-    <th width="25%">Description</th>
-    <th>Comments</th>
-  </tr>
-  <tr>
-    <td><code>call &lt;phonenumber&gt;</code></td>
-    <td>Simulate an inbound phone call from &lt;phonenumber&gt;.</td>
-    <td>&nbsp;</td>
-  </tr>
-  <tr>
-    <td><code>accept &lt;phonenumber&gt;</code></td>
-    <td>Accept an inbound call from &lt;phonenumber&gt; and change the call's state "active".</td>
-    <td>You can change a call's state to "active" only if its current state is "waiting" or "held".</td>
-  </tr>
-  <tr>
-    <td><code>busy &lt;phonenumber&gt;</code></td>
-    <td>Close an outbound call to &lt;phonenumber&gt; and change the call's state to "busy".</td>
-    <td>You can change a call's state to "busy" only if its current state is "waiting".</td>
-  </tr>
-  <tr>
-    <td><code>cancel &lt;phonenumber&gt;</code></td>
-    <td>Terminate an inbound or outbound phone call to/from &lt;phonenumber&gt;.</td>
-    <td>&nbsp;</td>
-  </tr>
-  <tr>
-    <td><code>data &lt;state&gt;</code></td>
-    <td>Change the state of the GPRS data connection to &lt;state&gt;.</td>
-    <td>Supported &lt;state&gt; values are:<br />
-    <ul>
-          <li><code>unregistered</code> -- No network available</li>
-          <li><code>home</code> -- On local network, non-roaming</li>
-          <li><code>roaming</code> -- On roaming network</li>
-          <li><code>searching</code> -- Searching networks</li>
-          <li><code>denied</code> -- Emergency calls only</li>
-          <li><code>off</code> -- Same as 'unregistered'</li>
-      <li><code>on</code> -- same as 'home'</li>
-    </ul>
-          </td>
-  </tr>
-  <tr>
-    <td><code>hold</code></td>
-    <td>Change the state of a call to "held". </td>
-    <td>You can change a call's state to "held" only if its current state is	 "active" or "waiting". </td>
-  </tr>
-  <tr>
-    <td><code>list</code></td>
-    <td>List all inbound and outbound calls and their states.</td>
-    <td>&nbsp;</td>
-  </tr>
-  <tr>
-    <td><code>voice &lt;state&gt;</code></td>
-    <td>Change the state of the GPRS voice connection to &lt;state&gt;.</td>
-    <td>Supported &lt;state&gt; values are:<br />
-    <ul>
-    <li><code>unregistered</code> -- No network available</li>
-    <li><code>home</code> -- On local network, non-roaming</li>
-    <li><code>roaming</code> -- On roaming network</li>
-    <li><code>searching</code> -- Searching networks</li>
-    <li><code>denied</code> -- Emergency calls only</li>
-    <li><code>off</code> -- Same as 'unregistered'</li>
-    <li><code>on</code> -- Same as 'home'</li>
-    </ul>
-    </td>
-  </tr>
-
-  <tr>
-    <td><code>status</code></td>
-    <td>Report the current GSM voice/data state.</td>
-    <td>Values are those described for the <code>voice</code> and <code>data</code> commands.</td>
-  </tr>
-</table>
-
-
-<h3 id="sms">SMS Emulation</h3>
-
-<p>The Android emulator console lets you generate an SMS message and direct it to an emulator
-instance. Once you connect to an emulator instance, you can generate an emulated incoming SMS using
-the following command:</p>
-
-<pre>sms send &lt;senderPhoneNumber&gt; &lt;textmessage&gt;</pre>
-
-<p>where <code>&lt;senderPhoneNumber&gt;</code> contains an arbitrary numeric string. </p>
-
-<p>The console forwards the SMS message to the Android framework, which passes it through to an application that handles that message type. </p>
-
-
-<h3 id="vm">VM State</h3>
-
-<p>You can use the <code>vm</code> command to control the VM on an emulator instance. The syntax for
-this command is as follows: </p>
-
-<pre>vm &lt;start|stop|status&gt;</pre>
-
-<p>The <code>vm</code> command supports the subcommands listed in the table below. </p>
-
-<table>
-<tr>
-  <th width="25%">Subcommand</th>
-  <th width="30%">Description</th>
-  <th width="35%">Comments</th>
-</tr>
-<tr>
-    <td><code>start</code></td>
-    <td>Start the VM on the instance. </td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-    <td><code>stop</code></td>
-    <td>Stop the VM on the instance. </td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-    <td><code>start</code></td>
-    <td>Display the current status of the VM (running or stopped). </td>
-  <td>&nbsp;</td>
-</tr>
-</table>
-
-
-<h3 id="window">Emulator Window</h3>
-
-<p>You can use the <code>window</code> command to manage the emulator window. The syntax for this
-command is as follows: </p>
-
-<pre>window &lt;scale&gt;</pre>
-
-<p>The <code>vm</code> command supports the subcommands listed in the table below. </p>
-
-<table>
-<tr>
-  <th width="25%">Subcommand</th>
-  <th width="30%">Description</th>
-  <th width="35%">Comments</th>
-</tr>
-<tr>
-    <td><code>scale &lt;scale&gt;</code></td>
-    <td>Scale the emulator window.</td>
-  <td>A number between 0.1 and 3 that sets the scaling factor. You can
-  also specify scale as a DPI value if you add the suffix "dpi" to the scale value. A value of "auto"
-  tells the emulator to select the best window size.</td>
-</tr>
-</table>
-
-
-<h3 id="terminating">Terminating an Emulator Instance</h3>
-
-<p>You can terminate an emulator instance through the console, using the <code>kill</code> command.</p>
-
-
-<h2 id="limitations">Emulator Limitations</h2>
-
-<p>The functional limitations of the emulator include: </p>
-<ul>
-  <li>No support for placing or receiving actual phone calls. You can simulate phone calls (placed
-    and received) through the emulator console, however. </li>
-  <li>No support for USB connections</li>
-  <li>No support for device-attached headphones</li>
-  <li>No support for determining network connected state</li>
-  <li>No support for determining battery charge level and AC charging state</li>
-  <li>No support for determining SD card insert/eject</li>
-  <li>No support for Bluetooth</li>
-</ul>
-
-
-<h2 id="troubleshooting">Troubleshooting Emulator Problems</h2>
-
-<p>The {@code adb} utility sees the emulator as an actual physical device. For this reason, you
-might have to use the {@code -d} flag with some common {@code adb} commands, such as
-<code>install</code>. The {@code -d} flag lets you specify which of several connected devices to use
-as the target of a command. If you don't specify {@code -d}, the emulator targets the first
-device in its list. For more information about {@code adb}, see <a
-href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>.</p>
-
-<p>For emulators running on Mac OS X, if you see an error {@code Warning: No DNS servers found}
-when starting the emulator, check to see whether you have an <code>/etc/resolv.conf</code> file. If
-not, please run the following line in a command window:</p>
-    <pre>ln -s /private/var/run/resolv.conf /etc/resolv.conf</pre>
-
-<p>See <a href="{@docRoot}resources/faq/index.html">Frequently Asked Questions</a> for more
-troubleshooting information. </p>
diff --git a/docs/html/guide/developing/devices/index.jd b/docs/html/guide/developing/devices/index.jd
deleted file mode 100644
index 64651a1..0000000
--- a/docs/html/guide/developing/devices/index.jd
+++ /dev/null
@@ -1,78 +0,0 @@
-page.title=Managing Virtual Devices
-@jd:body
-
-
- <p>An Android Virtual Device (AVD) is an emulator configuration that lets you model an actual
-  device by defining hardware and software options to be emulated by the Android Emulator.</p>
-
-  <p>The easiest way to create an AVD is to use the graphical <a href= 
-  "{@docRoot}guide/developing/devices/managing-avds.html">AVD Manager</a>, which you launch
-  from Eclipse by clicking <strong>Window &gt; AVD Manager</strong>. You can also start the AVD
-Manager from the command line by calling the <code>android</code> tool with the <code>avd</code>
-options, from the <strong>&lt;sdk>/tools/</strong> directory.</p>
-
-  <p>You can also create AVDs on the command line by passing the <code>android</code> tool options.
-  For more information on how to create AVDs in this manner, see <a href= 
-  "{@docRoot}guide/developing/devices/managing-avds-cmdline.html">Managing Virtual
-  Devices from the Command Line</a>.</p>
-
-  <p>An AVD consists of:</p>
-
-  <ul>
-    <li>A hardware profile: Defines the hardware features of the virtual
-    device. For example, you can define whether the device has a camera, whether it uses a physical
-    QWERTY keyboard or a dialing pad, how much memory it has, and so on.</li>
-
-    <li>A mapping to a system image: You can define what version of the Android platform will run
-    on the virtual device. You can choose a version of the standard Android platform or the system
-    image packaged with an SDK add-on.</li>
-
-    <li>Other options: You can specify the emulator skin you want to use with the AVD, which lets
-    you control the screen dimensions, appearance, and so on. You can also specify the emulated SD
-    card to use with the AVD.</li>
-
-    <li>A dedicated storage area on your development machine: the device's user data (installed
-    applications, settings, and so on) and emulated SD card are stored in this area.</li>
-  </ul>
-
-  <p>You can create as many AVDs as you need, based on the types of device you want to model. 
-  To thoroughly test your application, you should create an AVD for each general device configuration
-  (for example, different screen sizes and platform versions) with which your application is compatible
-  and test your application on each one.</p>
-
-  <p>Keep these points in mind when you are selecting a system image target for your AVD:</p>
-
-  <ul>
-    <li>The API Level of the target is important, because your application will not be able to run
-    on a system image whose API Level is less than that required by your application, as specified
-    in the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">
-    <code>minSdkVersion</code></a> attribute of the application's manifest file. For more
-    information about the relationship between system API Level and application
-    <code>minSdkVersion</code>, see <a href=
-    "{@docRoot}guide/publishing/versioning.html">Specifying Minimum System API Version</a>.</li>
-
-    <li>You should create at least one AVD that uses a target whose API Level is greater than that required
-    by your application, because it allows you to test the
-    forward-compatibility of your application. Forward-compatibility testing ensures that, when
-    users who have downloaded your application receive a system update, your application will
-    continue to function normally.</li>
-
-    <li>If your application declares a 
-    <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>uses-library</code></a>
-    element in its manifest file, the application can only run on a system image in which that external
-    library is present. If you want to run your application on an emulator, create an AVD that
-    includes the required library. Usually, you must create such an AVD using an Add-on component for the
-    AVD's platform (for example, the Google APIs Add-on contains the Google Maps library).</li>
-  </ul>
-
-  <p>To learn how to manage AVDs using a graphical tool, read <a href=
-  "{@docRoot}guide/developing/devices/managing-avds.html">Managing AVDs with AVD Manager</a>. To
-learn how to manage AVDs on the command line, read
-  <a href="{@docRoot}guide/developing/devices/managing-avds-cmdline.html">Managing AVDs
-  from the Command Line</a>.</p>
-
-
-
-
-
-
diff --git a/docs/html/guide/developing/devices/managing-avds-cmdline.jd b/docs/html/guide/developing/devices/managing-avds-cmdline.jd
deleted file mode 100644
index 8674334..0000000
--- a/docs/html/guide/developing/devices/managing-avds-cmdline.jd
+++ /dev/null
@@ -1,369 +0,0 @@
-page.title=Managing AVDs from the Command Line
-parent.title=Managing Virtual Devices
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#listingtargets">Listing Targets</a></li>
-    <li><a href="#AVDCmdLine">Creating AVDs</a>
-      <ol>
-        <li><a href="#CustomDensity">Customize the device resolution or density</a></li>
-        <li><a href="#DefaultLocation">Default location of AVD files</a></li>
-        <li><a href="#hardwareopts">Setting hardware emulation options</a></li>
-      </ol>
-    </li>
-    <li><a href="#moving">Moving an AVD</a></li>
-    <li><a href="#updating">Updating an AVD</a></li>
-    <li><a href="#deleting">Deleting an AVD</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/developing/building/building-cmdline.html">Building and Running
-from the Command Line</a></li>
-    <li><a href="{@docRoot}guide/developing/devices/emulator.html">Using the Android
-Emulator</a></li>
-  </ol>
-  </div>
-</div>
-
-
-<p>The <code>android</code> tool lets you manage AVDs on the command line. For a complete reference 
-of the command line options that you can use, see the reference for the 
-<a href="{@docRoot}guide/developing/tools/android.html"><code>android</code></a> tool.</p>
-
-
-
-<h2 id="listingtargets">Listing Targets</h2>
-
-<p>To generate a list of system image targets, use this command: </p>
-
-<pre>android list targets</pre>
-
-<p>The <code>android</code> tool scans the <code>&lt;sdk&gt;/platforms/</code> and
-<code>&lt;sdk&gt;/add-ons/</code> directories looking for valid system images and
-then generates the list of targets. Here's an example of the command output:
-</p>
-
-<pre>Available Android targets:
-id: 1 or "android-3"
-     Name: Android 1.5
-     Type: Platform
-     API level: 3
-     Revision: 4
-     Skins: QVGA-L, HVGA-L, HVGA (default), HVGA-P, QVGA-P
-id: 2 or "android-4"
-     Name: Android 1.6
-     Type: Platform
-     API level: 4
-     Revision: 3
-     Skins: QVGA, HVGA (default), WVGA800, WVGA854
-id: 3 or "android-7"
-     Name: Android 2.1-update1
-     Type: Platform
-     API level: 7
-     Revision: 2
-     Skins: QVGA, WQVGA400, HVGA (default), WVGA854, WQVGA432, WVGA800
-id: 4 or "android-8"
-     Name: Android 2.2
-     Type: Platform
-     API level: 8
-     Revision: 2
-     Skins: WQVGA400, QVGA, WVGA854, HVGA (default), WVGA800, WQVGA432
-id: 5 or "android-9"
-     Name: Android 2.3
-     Type: Platform
-     API level: 9
-     Revision: 1
-     Skins: HVGA (default), WVGA800, WQVGA432, QVGA, WVGA854, WQVGA400
-</pre>
-
-
-
-<h2 id="AVDCmdLine">Creating AVDs</h2>
-
-<p>In addition to creating AVDs with the 
-<a href="{@docRoot}guide/developing/devices/managing-avds-cmdline.html">AVD Manager user interface</a>,
-you can also create them by passing in command line arguments to the <code>android</code> tool.
-</p>
-
-<p>Open a terminal window and change to
-the <code>&lt;sdk&gt;/tools/</code> directory, if needed.</p>
-
-<p>To create each AVD, you issue the command <code>android create avd</code>,
-with options that specify a name for the new AVD and the system image you want
-to run on the emulator when the AVD is invoked. You can specify other options on
-the command line also, such as the emulated SD card size, the emulator skin, or a custom
-location for the user data files.</p> 
-
-<p>Here's the command-line usage for creating an AVD: </p>
-
-<pre>android create avd -n &lt;name&gt; -t &lt;targetID&gt; [-&lt;option&gt; &lt;value&gt;] ... </pre>
-
-<p>You can use any name you want for the AVD, but since you are likely to be
-creating multiple AVDs, you should choose a name that lets you recognize the
-general characteristics offered by the AVD. The target ID is an integer assigned by the
-<code>android</code> tool. The target ID is not derived from the system image name, 
-version, or API Level, or other attribute, so you need to run the <code>android list targets</code>
-command to list the target ID of each system image. You should do this <em>before</em> you run
-the <code>android create avd</code> command. See the <a
-href="{@docRoot}guide/developing/tools/android.html">android</a>
-tool documentation for more information on the command line options.</p>
-
-
-<p>When you've selected the target you want to use and made a note of its ID,
-use the <code>android create avd</code> command to create the AVD, supplying the
-target ID as the <code>-t</code> argument. Here's an example that creates an
-AVD with name "my_android1.5" and target ID "2" (the standard Android 1.5 
-system image in the list above): </p>
-
-<pre>android create avd -n my_android1.5 -t 2</pre>
-
-<p>If the target you selected was a standard Android system image ("Type:
-platform"), the <code>android</code> tool next asks you whether you want to
-create a custom hardware profile. </p>
-<pre>Android 1.5 is a basic Android platform.
-Do you wish to create a custom hardware profile [no]</pre>
-
-<p>If you want to set custom hardware emulation options for the AVD, enter
-"yes" and set values as needed. If you want to use the default hardware
-emulation options for the AVD, just press the return key (the default is "no").
-The <code>android</code> tool creates the AVD with name and system image mapping you
-requested, with the options you specified. For more information, see <a href="#hardwareopts">
-Setting Hardware Emulation Options</a>.
-
-<p class="note"><strong>Note:</strong> If you are creating an AVD whose target is an SDK add-on, the
-<code>android</code> tool does not allow you to set hardware emulation options.
-It assumes that the provider of the add-on has set emulation options
-appropriately for the device that the add-on is modeling, and so prevents you
-from resetting the options. </p>
-
-
-<h3 id="CustomDensity">Customize the device resolution or density</h3>
-
-<p>When testing your application, we recommend that you test your application in several different
-AVDs, using different screen configurations (different combinations of size and density). In
-addition, you should set up the AVDs to run at a physical size that closely matches an actual
-device.</p>
-
-<p>To set up your AVDs for a specific resolution or density, follow these steps:</p>
-
-<ol>
-  <li>Use the <code>create avd</code> command to create a new AVD, specifying
-the <code>--skin</code> option with a value that references either a default
-skin name (such as "WVGA800") or a custom skin resolution (such as 240x432).
-Here's an example:
-     <pre>android create avd -n &lt;name&gt; -t &lt;targetID&gt; --skin WVGA800</pre>
-  </li>
-  <li>To specify a custom density for the skin, answer "yes" when asked whether
-you want to create a custom hardware profile for the new AVD.</li>
-  <li>Continue through the various profile settings until the tool asks you to
-specify "Abstracted LCD density" (<em>hw.lcd.density</em>). Enter an appropriate
-value, such as "120" for a low-density screen, "160" for a medium density screen,
-or "240" for a high-density screen.</li>
-  <li>Set any other hardware options and complete the AVD creation.</li>
-</ol>
-
-<p>In the example above (WVGA medium density), the new AVD will emulate a 5.8"
-WVGA screen.</p>
-
-<p>As an alternative to adjusting the emulator skin configuration, you can use
-the emulator skin's default density and add the <code>-dpi-device</code> option
-to the <a href="{@docRoot}guide/developing/tools/emulator.html">emulator</a> command line when
-starting the AVD. For example:</p>
-
-<pre>emulator -avd WVGA800 -scale 96dpi -dpi-device 160</pre>
-
-
-
-<h3 id="DefaultLocation">Default location of AVD files</h3>
-
-<p>When you create an AVD, the <code>android</code> tool creates a dedicated directory for it
-on your development computer. The directory contains the AVD configuration file,
-the user data image and SD card image (if available), and any other files
-associated with the device. Note that the directory does not contain a system
-image &mdash; instead, the AVD configuration file contains a mapping to the
-system image, which it loads when the AVD is launched. </p>
-
-<p>The <code>android</code> tool also creates an <code>&lt;AVD_name&gt;.ini</code> file for the AVD at the
-root of the <code>.android/avd/</code> directory on your computer. The file specifies the
-location of the AVD directory and always remains at the root the .android 
-directory.</p>
-
-<p>By default, the <code>android</code> tool creates the AVD directory inside
-<code>~/.android/avd/</code> (on Linux/Mac), <code>C:\Documents and
-Settings\&lt;user&gt;\.android\</code> on Windows XP, and 
-<code>C:\Users\&lt;user&gt;\.android\</code> on Windows 7 and Vista. 
-If you want to use a custom location for the AVD directory, you 
-can do so by using the <code>-p &lt;path&gt;</code> option when 
-you create the AVD: </p>
-
-<pre>android create avd -n my_android1.5 -t 2 -p path/to/my/avd</pre>
-
-<p>If the .android directory is hosted on a network drive, we recommend using
-the <code>-p</code> option to place the AVD directory in another location. 
-The  AVD's .ini file remains in the .android directory on the network
-drive, regardless of the location of the AVD directory. 
-
-
-<h3 id="hardwareopts">Setting hardware emulation options</h3>
-
-<p>When you are creating a new AVD that uses a standard Android system image ("Type:
-platform"), the <code>android</code> tool lets you set hardware emulation
-options for virtual device. The table below lists the options available and the
-default values, as well as the names of properties that store the emulated
-hardware options in the AVD's configuration file (the config.ini file in the
-AVD's local directory). </p>
-
-<p class="table-caption"><strong>Table 1.</strong> Available hardware profile options for AVDs and
-the default values </p>
-
-<table>
-<tr>
-<th>Characteristic</th>
-<th>Description</th>
-<th>Property</th>
-</tr>
-
-<tr>
-<td>Device ram size</td>
-<td>The amount of physical RAM on the device, in megabytes. Default value is "96".
-<td>hw.ramSize</td>
-</tr>
-
-<tr>
-<td>Touch-screen support</td>
-<td>Whether there is a touch screen or not on the device. Default value is "yes".</td>
-<td>hw.touchScreen
-
-<tr>
-<td>Trackball support </td>
-<td>Whether there is a trackball on the device. Default value is "yes".</td>
-<td>hw.trackBall</td>
-</tr>
-
-<tr>
-<td>Keyboard support</td>
-<td>Whether the device has a QWERTY keyboard. Default value is "yes".</td>
-<td>hw.keyboard</td>
-</tr>
-
-<tr>
-<td>DPad support</td>
-<td>Whether the device has DPad keys. Default value is "yes".</td>
-<td>hw.dPad</td>
-</tr>
-
-<tr>
-<td>GSM modem support</td>
-<td>Whether there is a GSM modem in the device. Default value is "yes".</td>
-<td>hw.gsmModem</td>
-</tr>
-
-<tr>
-<td>Camera support</td>
-<td>Whether the device has a camera. Default value is "no".</td>
-<td>hw.camera</td>
-</tr>
-
-<tr>
-<td>Maximum horizontal camera pixels</td>
-<td>Default value is "640".</td>
-<td>hw.camera.maxHorizontalPixels</td>
-</tr>
-
-<tr>
-<td>Maximum vertical camera pixels</td>
-<td>Default value is "480".</td>
-<td>hw.camera.maxVerticalPixels</td>
-</tr>
-
-<tr>
-<td>GPS support</td>
-<td>Whether there is a GPS in the device. Default value is "yes".</td>
-<td>hw.gps</td>
-</tr>
-
-<tr>
-<td>Battery support</td>
-<td>Whether the device can run on a battery. Default value is "yes".</td>
-<td>hw.battery</td>
-</tr>
-
-<tr>
-<td>Accelerometer</td>
-<td>Whether there is an accelerometer in the device. Default value is "yes".</td>
-<td>hw.accelerometer</td>
-</tr>
-
-<tr>
-<td>Audio recording support</td>
-<td>Whether the device can record audio. Default value is "yes".</td>
-<td>hw.audioInput</td>
-</tr>
-
-<tr>
-<td>Audio playback support</td>
-<td>Whether the device can play audio. Default value is "yes".</td>
-<td>hw.audioOutput</td>
-</tr>
-
-<tr>
-<td>SD Card support</td>
-<td>Whether the device supports insertion/removal of virtual SD Cards. Default value is "yes".</td>
-<td>hw.sdCard</td>
-</tr>
-
-<tr>
-<td>Cache partition support</td>
-<td>Whether we use a /cache partition on the device. Default value is "yes".</td>
-<td>disk.cachePartition</td>
-</tr>
-
-<tr>
-<td>Cache partition size</td>
-<td>Default value is "66MB".</td>
-<td>disk.cachePartition.size </td>
-</tr>
-
-<tr>
-<td>Abstracted LCD density</td>
-<td>Sets the generalized density characteristic used by the AVD's screen. Default value is "160".</td>
-<td>hw.lcd.density </td>
-</tr>
-
-<tr>
-<td>Trackball support</td>
-<td>Whether there is a trackball present.</td>
-<td>hw.trackBall </td>
-</tr>
-</table>
-
-
-<h2 id="moving">Moving an AVD</h2>
-
-<p>If you want to move or rename an AVD, you can do so using this command:</p>
-
-<pre>android move avd -n &lt;name&gt; [-&lt;option&gt; &lt;value&gt;] ...</pre>
-
-<h2 id="updating">Updating an AVD</h2>
-
-<p>If, for any reason, the platform/add-on root folder has its name changed (maybe because the user has installed an update of the platform/add-on) then the AVD will not be able to load the system image that it is mapped to. In this case, the <code>android list targets</code> command will produce this output: 
-
-<pre>The following Android Virtual Devices could not be loaded: 
-Name: foo 
-Path: &lt;path&gt;/.android/avd/foo.avd 
-Error: Invalid value in image.sysdir. Run 'android update avd -n foo' </pre>
-
-<p>To fix this error, use the <code>android update avd</code> command to recompute the path to the system images.</p>
-
-<h2 id="deleting">Deleting an AVD</h2>
-
-<p>You can use the <code>android</code> tool to delete an AVD. Here is the command usage:</p>
-
-<pre>android delete avd -n &lt;name&gt; </pre>
-
-<p>When you issue the command, the <code>android</code> tool looks for an AVD matching the 
-specified name deletes the AVD's directory and files. </p>
diff --git a/docs/html/guide/developing/eclipse-adt.html b/docs/html/guide/developing/eclipse-adt.html
deleted file mode 100644
index 879a356..0000000
--- a/docs/html/guide/developing/eclipse-adt.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/projects/projects-eclipse.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/projects/projects-eclipse.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/index.jd b/docs/html/guide/developing/index.jd
deleted file mode 100644
index 3af4a8c..0000000
--- a/docs/html/guide/developing/index.jd
+++ /dev/null
@@ -1,150 +0,0 @@
-page.title=Introduction
-@jd:body
-
-<p>Developing applications for Android devices is facilitated by a group of tools that are
-  provided with the SDK. You can access these tools through an Eclipse plugin called ADT (Android
-  Development Tools) or from the command line. Developing with Eclipse is the preferred method because
-  it can directly invoke the tools that you need while developing applications.</p>
-
-  <p>However, you may choose to develop with another IDE or a simple text editor and invoke the
-  tools on the command line or with scripts. This is a less streamlined way to develop because you
-  will sometimes have to call command line tools manually, but you will have access to the same
-  number of features that you would have in Eclipse.</p>
-
-<div class="figure" style="width:461px">
-  <img src="{@docRoot}images/developing/developing_overview.png"
-       alt="Development process for Android applications"
-       height="738" />
-  <p class="img-caption">
-    <strong>Figure 1.</strong> The development process for Android applications.
-  </p>
-</div>
-
-<p>The basic steps for developing applications (with or without Eclipse) are shown in figure 1. The
-development steps encompass four development phases, which include:</p>
-
-<ul>
-  <li><strong>Setup</strong>
-    <p>During this phase you install and set up your development environment. You also create
-      Android Virtual Devices (AVDs) and connect hardware devices on which you can install your
-      applications.</p>
-    <p>See <a href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>
-      and <a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a> for more
-      information.
-  </li>
-  <li><strong>Development</strong>
-    <p>During this phase you set up and develop your Android project, which contains all of the
-    source code and resource files for your application. For more informations, see
-    <a href="{@docRoot}guide/developing/projects/index.html">Create an Android project</a>.</p>
-  </li>
-  <li><strong>Debugging and Testing</strong>
-    <p>During this phase you build your project into a debuggable <code>.apk</code> package that you
-    can install and run on the emulator or an Android-powered device. If you are using Eclipse,
-    builds are generated each time you project is saved. If you're using another IDE,
-    you can build your project using Ant and install it on a device using
-    <a href="{@docRoot}guide/developing/tools/adb.html">adb</a>. For more information, see
-    <a href="{@docRoot}guide/developing/building/index.html">Build and run your application</a>.</p>
-    <p>Next, you debug your application using a JDWP-compliant debugger along with the debugging
-    and logging tools that are provided with the Android SDK. Eclipse already comes packaged with
-    a compatible debugger. For more information see,
-    <a href="{@docRoot}guide/developing/debugging/index.html">Debug your application with the
-      SDK debugging and logging tools</a>.</p>
-    <p>Last, you test your application using various Android SDK testing tools. For more
-    information, see <a href="{@docRoot}guide/developing/testing/index.html">Test your application
-    with the Testing and Instrumentation framework</a>.</p>
-  </li>
-  <li><strong>Publishing</strong>
-    <p>During this phase you configure and build your application for release and distribute your
-      application to users. For more information, see
-      <a href="{@docRoot}guide/publishing/publishing_overview.html">Publishing Overview</a>.</p>
-  </li>
-</ul>
-
-<h2 id="EssentialTools">Essential command line tools</h2>
-
-  <p>When developing in IDEs or editors other than Eclipse, be familiar with
-  all of the tools below, because you will have to run them from the command line.</p>
-
-  <dl>
-    <dt><a href="{@docRoot}guide/developing/tools/android.html">android</a></dt>
-
-    <dd>Create and update Android projects and create, move, and delete AVDs.</dd>
-
-    <dt><a href="{@docRoot}guide/developing/devices/emulator.html">Android Emulator</a></dt>
-
-    <dd>Run your Android applications on an emulated Android platform.</dd>
-
-    <dt><a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a></dt>
-
-    <dd>Interface with your emulator or connected device (install apps, shell the device, issue
-    commands, etc.).</dd>
-  </dl>
-
-  <p>In addition to the above tools that are included with the SDK, you need the following open
-  source and third-party tools:</p>
-
-  <dl>
-    <dt>Ant</dt>
-
-    <dd>To compile and build your Android project into an installable .apk file.</dd>
-
-    <dt>Keytool</dt>
-
-    <dd>To generate a keystore and private key, used to sign your .apk file. Keytool is part of the
-    JDK.</dd>
-
-    <dt>Jarsigner (or similar signing tool)</dt>
-
-    <dd>To sign your .apk file with a private key generated by Keytool. Jarsigner is part of the
-    JDK.</dd>
-  </dl>
-
-  <p>If you are using Eclipse and ADT, tools such as <code>adb</code> and <code>android</code>
-  are automatically called by Eclipse and ADT so you don't have to manually invoke these tools.
-  You need to be familiar with <code>adb</code>, however, because certain functions are not
-accessible from
-  Eclipse, such as the <code>adb</code> shell commands. You might also need to call Keytool and
-Jarsigner to
-  sign your applications, but you can set up Eclipse to do this automatically as well.</p>
-
-<p>For more information on the tools provided with the Android SDK, see the
-  <a href="{@docRoot}guide/developing/tools/index.html">Tools</a> section of the documentation.</p>
-
-<h2 id="ThirdParty">Other Third-Party Development Tools</h2>
-<p>
-	The tools described in this section are not developed by the Android SDK team. The Android Dev Guide
-	    does not provide documentation for these tools. Please refer to the linked documents in each
-	    section for documentation.
-</p>
-<h3 id="IntelliJ">Developing in IntelliJ IDEA</h3>
-<div style="float: right">
-<img alt="The IntelliJ graphical user interface" height="500px"
-src="{@docRoot}images/developing/intellijidea_android_ide.png"/>
-</div>
-<p>
-	IntelliJ IDEA is a powerful Java IDE from JetBrains that provides
-	full-cycle Android development support in both the free Community
-	Edition and the Ultimate edition.
-</p>
-<p>
-	The IDE ensures compatibility with the latest Android SDK and offers a
-	smart code editor with completion, quick navigation between code and
-	resources, a graphical debugger, unit testing support using Android
-	Testing Framework, and the ability to run applications in either the
-	emulator or a USB-connected device.
-</p>
-<p>
-	<strong>Links:</strong>
-</p>
-<ul>
-	<li>
-    	<a href="http://www.jetbrains.com/idea">IntelliJ IDEA official website</a>
-</li>
-	<li>
-    	<a href="http://www.jetbrains.com/idea/features/google_android.html">Android support in IntelliJ IDEA</a>
-</li>
-	<li>
-    	<a href="http://wiki.jetbrains.net/intellij/Android">IntelliJ IDEA Android Tutorials</a>
-	</li>
-</ul>
-
diff --git a/docs/html/guide/developing/other-ide.html b/docs/html/guide/developing/other-ide.html
deleted file mode 100644
index 41dba05..0000000
--- a/docs/html/guide/developing/other-ide.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/projects/projects-cmdline.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/projects/projects-cmdline.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/projects/index.jd b/docs/html/guide/developing/projects/index.jd
deleted file mode 100644
index b16e466..0000000
--- a/docs/html/guide/developing/projects/index.jd
+++ /dev/null
@@ -1,446 +0,0 @@
-page.title=Managing Projects
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#ApplicationProjects">Android Projects</a></li>
-
-        <li><a href="#LibraryProjects">Library Projects</a>
-          <ol>
-            <li><a href="#considerations">Development considerations</a></li>
-          </ol>
-        </li>
-
-        <li><a href="#TestProjects">Test Projects</a></li>
-
-        <li><a href="#testing">Testing a Library Project</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Projects act as containers for storing things such as code and resource files. The SDK tools
-  expect your projects to follow a specific structure so it can compile and package your
-  application correctly, so it is highly recommended that you create them with Eclipse and ADT or
-  with the <code>android</code> tool on the command line. There are three types of projects, and
-  they all share the same general structure but differ in function:</p>
-
-  <dl>
-    <dt><strong>Android Projects</strong></dt>
-
-    <dd>An Android project is the container for your application's source code, resource files, and
-    files such as the Ant build and Android Manifest file. An application project is the main type
-    of project and the contents are eventually built into an <code>.apk</code> file that you install on a
-    device.</dd>
-
-    <dt><strong>Test Projects</strong></dt>
-
-    <dd>These projects contain code to test your application projects and are built into
-    applications that run on a device.</dd>
-
-    <dt><strong>Library Projects</strong></dt>
-
-    <dd>These projects contain shareable Android source code and resources that you can reference
-    in Android projects. This is useful when you have common code that you want to reuse.
-    Library projects cannot be installed onto a device, however, they are
-    pulled into the <code>.apk</code> file at build time.</dd>
-  </dl>
-
-  <p>When you use the Android development tools to create a new project, the essential files and
-  folders will be created for you. There are only a handful of files and folders generated for you,
-  and some of them depend on whether you use the Eclipse plugin or the {@code android} tool to
-  generate your project. As your application grows in complexity, you might require new kinds of
-  resources, directories, and files.</p>
-
-  <h2 id="ApplicationProjects">Android Projects</h2>
-
-  <p>Android projects are the projects that eventually get built into an <code>.apk</code> file that you install
-  onto a device. They contain things such as application source code and resource files.
-  Some are generated for you by default, while others should be created if
-  required. The following directories and files comprise an Android project:</p>
-
-  <dl>
-    <dt><code>src/</code></dt>
-
-    <dd>Contains your stub Activity file, which is stored at
-    <code>src<em>/your/package/namespace/ActivityName</em>.java</code>. All other source code
-     files (such as <code>.java</code> or <code>.aidl</code> files) go here as well.</dd>
-
-    <dt><code>bin</code></dt>
-
-    <dd>Output directory of the build. This is where you can find the final <code>.apk</code> file and other
-    compiled resources.</dd>
-
-    <dt><code>jni</code></dt>
-
-    <dd>Contains native code sources developed using the Android NDK. For more information, see the
-    <a href="{@docRoot}sdk/ndk/index.html">Android NDK documentation</a>.</dd>
-
-    <dt><code>gen/</code></dt>
-
-    <dd>Contains the Java files generated by ADT, such as your <code>R.java</code> file and
-    interfaces created from AIDL files.</dd>
-
-    <dt><code>assets/</code></dt>
-
-    <dd>This is empty. You can use it to store raw asset files. Files that you save here are
-    compiled into an <code>.apk</code> file as-is, and the original filename is preserved. You can navigate this
-    directory in the same way as a typical file system using URIs and read files as a stream of
-    bytes using the the {@link android.content.res.AssetManager}. For example, this is a good
-    location for textures and game data.</dd>
-
-    <dt><code>res/</code></dt>
-
-    <dd>
-      Contains application resources, such as drawable files, layout files, and string values. See
-      <a href="{@docRoot}guide/topics/resources/index.html">Application Resources</a> for more
-      information.
-
-      <dl>
-        <dt><code>anim/</code></dt>
-
-        <dd>For XML files that are compiled into animation objects. See the <a href=
-        "{@docRoot}guide/topics/resources/animation-resource.html">Animation</a> resource
-        type.</dd>
-
-        <dt><code>color/</code></dt>
-
-        <dd>For XML files that describe colors. See the <a href=
-        "{@docRoot}guide/topics/resources/color-list-resource.html">Color Values</a> resource
-        type.</dd>
-
-        <dt><code>drawable/</code></dt>
-
-        <dd>For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe
-        Drawable shapes or a Drawable objects that contain multiple states (normal, pressed, or
-        focused). See the <a href=
-        "{@docRoot}guide/topics/resources/drawable-resource.html">Drawable</a> resource type.</dd>
-
-        <dt><code>layout/</code></dt>
-
-        <dd>XML files that are compiled into screen layouts (or part of a screen). See the <a href=
-        "{@docRoot}guide/topics/resources/layout-resource.html">Layout</a> resource type.</dd>
-
-        <dt><code>menu/</code></dt>
-
-        <dd>For XML files that define application menus.
-        See the <a href="{@docRoot}guide/topics/resources/menu-resource.html">Menus</a>
-        resource type.</dd>
-
-        <dt><code>raw/</code></dt>
-
-        <dd>For arbitrary raw asset files. Saving asset files here instead of in the
-        <code>assets/</code> directory only differs in the way that you access them. These files
-        are processed by aapt and must be referenced from the application using a resource
-        identifier in the {@code R} class. For example, this is a good place for media, such as MP3
-        or Ogg files.</dd>
-
-        <dt><code>values/</code></dt>
-
-        <dd>For XML files that are compiled into many kinds of resource. Unlike other resources in
-        the <code>res/</code> directory, resources written to XML files in this folder are not
-        referenced by the file name. Instead, the XML element type controls how the resources is
-        defined within them are placed into the {@code R} class.</dd>
-
-        <dt><code>xml/</code></dt>
-
-        <dd>For miscellaneous XML files that configure application components. For example, an XML
-        file that defines a {@link android.preference.PreferenceScreen}, {@link
-        android.appwidget.AppWidgetProviderInfo}, or <a href=
-        "{@docRoot}reference/android/app/SearchManager.html#SearchabilityMetadata">Searchability
-        Metadata</a>. See <a href="{@docRoot}guide/topics/resources/index.html">Application Resources</a>
-        for more information about configuring these application components.</dd>
-      </dl>
-    </dd>
-
-    <dt><code>libs/</code></dt>
-
-    <dd>Contains private libraries.</dd>
-
-    <dt><code>AndroidManifest.xml</code></dt>
-
-    <dd>The control file that describes the nature of the application and each of its components.
-    For instance, it describes: certain qualities about the activities, services, intent receivers,
-    and content providers; what permissions are requested; what external libraries are needed; what
-    device features are required, what API Levels are supported or required; and others. See the
-    <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
-    documentation for more information</dd>
-
-    <dt><code>project.properties</code></dt>
-
-    <dd>This file contains project settings, such as the build target. This file is integral to
-    the project, so maintain it in a source revision control system. To edit project
-    properties in Eclipse, right-click the project folder and select
-    <strong>Properties</strong>.</dd>
-
-    <dt><code>local.properties</code></dt>
-
-    <dd>Customizable computer-specific properties for the build system. If you use Ant to build
-    the project, this contains the path to the SDK installation. Because the content of the file
-    is specific to the local installation of the SDK, the <code>local.properties</code> should not
-be maintained in a source revision control system. If you use Eclipse, this file is not
-used.</dd>
-
-    <dt><code>ant.properties</code></dt>
-
-    <dd>Customizable properties for the build system. You can edit this file to override default
-    build settings used by Ant and also provide the location of your keystore and key alias so that
-    the build tools can sign your application when building in release mode. This file is integral
-    to the project, so maintain it in a source revision control system. If you use Eclipse, this
-    file is not used.</dd>
-
-    <dt><code>build.xml</code></dt>
-
-    <dd>The Ant build file for your project. This is only applicable for projects that
-    you build with Ant.</dd>
-
-  </dl>
-
-  <h2 id="LibraryProjects">Library Projects</h2>
-
-  <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Library project example code</h2>
-
-      <p>The SDK includes an example application called <code>TicTacToeMain</code> that shows how a dependent
-      application can use code and resources from an Android Library project. The TicTacToeMain
-      application uses code and resources from an example library project called TicTacToeLib.</p>
-
-      <p>To download the sample applications and run them as projects in
-      your environment, use the <em>Android SDK Manager</em> to download the "Samples for
-      SDK API 8" (or later) package into your SDK.</p>
-
-      <p>For more information and to browse the code of the samples, see
-      the <a href="{@docRoot}resources/samples/TicTacToeMain/index.html">TicTacToeMain
-      application</a>.</p>
-    </div>
-  </div>
-
-    <p>An Android <em>library project</em> is a development project that holds shared Android
-    source code and resources. Other Android application projects can reference the library project
-    and, at build time, include its compiled sources in their <code>.apk</code> files. Multiple
-    application projects can reference the same library project and any single application project
-    can reference multiple library projects.</p>
-
-    <p class="note"><strong>Note:</strong> You need SDK Tools r14 or newer to use the new library
-    project feature that generates each library project into its own JAR file.
-    You can download the tools and platforms using the
-    <em>Android SDK Manager</em>, as described in
-    <a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>.</p>
-
-    <p>If you have source code and resources that are common to multiple Android projects, you
-    can move them to a library project so that it is easier to maintain across applications and
-    versions. Here are some common scenarios in which you could make use of library projects:</p>
-
-    <ul>
-      <li>If you are developing multiple related applications that use some of the same components,
-      you move the redundant components out of their respective application projects and create a
-      single, reuseable set of the same components in a library project.</li>
-
-      <li>If you are creating an application that exists in both free and paid versions. You move
-      the part of the application that is common to both versions into a library project. The two
-      dependent projects, with their different package names, will reference the library project
-      and provide only the difference between the two application versions.</li>
-    </ul>
-
-    <p>Structurally, a library project is similar to a standard Android application project. For
-    example, it includes a manifest file at the project root, as well as <code>src/</code>,
-    <code>res/</code> and similar directories. The project can contain the same types of source
-    code and resources as a standard Android project, stored in the same way. For example, source
-    code in the library project can access its own resources through its <code>R</code> class.</p>
-
-    <p>However, a library project differs from an standard Android application project in that you
-    cannot compile it directly to its own <code>.apk</code> and run it on an Android device.
-    Similarly, you cannot export the library project to a self-contained JAR file, as you would do
-    for a true library. Instead, you must compile the library indirectly, by referencing the
-    library in the dependent application and building that application.</p>
-
-    <p>When you build an application that depends on a library project, the SDK tools compile the
-    library into a temporary JAR file and uses it in the main project, then uses the
-    result to generate the <code>.apk</code>. In cases where a resource ID is defined in both the
-    application and the library, the tools ensure that the resource declared in the application gets
-    priority and that the resource in the library project is not compiled into the application
-    <code>.apk</code>. This gives your application the flexibility to either use or redefine any
-    resource behaviors or values that are defined in any library.</p>
-
-    <p>To organize your code further, your application can add references to multiple library
-    projects, then specify the relative priority of the resources in each library. This lets you
-    build up the resources actually used in your application in a cumulative manner. When two
-    libraries referenced from an application define the same resource ID, the tools select the
-    resource from the library with higher priority and discard the other.</p>
-
-    <p>Once you have added references to library projects to your Android project,
-    you can set their relative priority. At build time, the
-    libraries are merged with the application one at a time, starting from the lowest priority to
-    the highest.</p>
-
-    <p>Library projects can reference other library projects and can import an external library
-    (JAR) in the  normal way.</p>
-
-  <h3 id="considerations">Development considerations</h3>
-
-  <p>As you develop your library project and dependent applications, keep the points listed below
-  in mind:</p>
-
-  <ul>
-  <li><p><strong>Resource conflicts</strong></p>
-  <p>Since the tools merge the resources of a library project with those of a dependent application
-  project, a given resource ID might be defined in both projects. In this case, the tools select
-  the resource from the application, or the library with highest priority, and discard the other
-  resource. As you develop your applications, be aware that common resource IDs are likely to be
-  defined in more than one project and will be merged, with the resource from the application or
-  highest-priority library taking precedence.</p>
-  </li>
-
-  <li><p><strong>Use prefixes to avoid resource conflicts</strong></p>
-
-  <p>To avoid resource conflicts for common resource IDs, consider using a prefix or other
-  consistent naming scheme that is unique to the project (or is unique across all projects).</p></li>
-
-  <li><p><strong>You cannot export a library project to a JAR file</strong></p>
-
-  <p>A library cannot be distributed as a binary file (such as a JAR file). This will
-be added in a future
-  version of the SDK Tools.</p></li>
-
-  <li><p><strong>A library project can include a JAR library</strong></p>
-
-  <p>You can develop a library project that itself includes a JAR library, however you need to
-  manually edit the dependent application project's build path and add a path to the JAR file.</p></li>
-
-  <li><p><strong>A library project can depend on an external JAR library</strong></p>
-
-  <p>You can develop a library project that depends on an external library (for example, the Maps
-  external library). In this case, the dependent application must build against a target that
-  includes the external library (for example, the Google APIs Add-On). Note also that both the
-  library project and the dependent application must declare the external library in their manifest
-  files, in a <a href=
-  "{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>
-  element.</p></li>
-
-  <li> <p><strong>Library projects cannot include raw assets</strong></p>
-
-  <p>The tools do not support the use of raw asset files (saved in the <code>assets/</code> directory)
-  in a library project. Any asset resources
-  used by an application must be stored in the <code>assets/</code> directory of the application
-  project itself. However, resource files saved in the
-  <code>res/</code> directory are supported.</p></li>
-
-  <li><p><strong>Platform version must be lower than or equal to the Android project</strong></p>
-
-  <p>A library is compiled as part of the dependent application project, so the API used in the
-  library project must be compatible with the version of the Android library used to compile the
-  application project. In general, the library project should use an <a href=
-  "{@docRoot}guide/appendix/api-levels.html">API level</a> that is the same as &mdash; or lower
-  than &mdash; that used by the application. If the library project uses an API level that is
-  higher than that of the application, the application project will not compile. It is
-  perfectly acceptable to have a library that uses the Android 1.5 API (API level 3) and that is
-  used in an Android 1.6 (API level 4) or Android 2.1 (API level 7) project, for instance.</p></li>
-
-  <li> <p><strong>No restriction on library package names</strong></p>
-
-  <p>There is no requirement for the package name of a library to be the same as that of
-  applications that use it.</p></li>
-
-  <li><p><strong>Each library project creates its own R class </strong></p>
-
-  <p>When you build the dependent application project, library projects are compiled and
-  merged with the application project. Each library has its own <code>R</code> class, named according
-  to the library's package name. The <code>R</code> class generated from main
-  project and the library project is created in all the packages that are needed including the main
-  project's package and the libraries' packages.</p></li>
-
-  <li><p><strong>Library project storage location</strong></p>
-
-  <p>There are no specific requirements on where you should store a library project, relative to a
-  dependent application project, as long as the application project can reference the library
-  project by a relative link. What is important is that the main
-  project can reference the library project through a relative link.</p></li>
-  </ul>
-
-  <h2 id="TestProjects">Test Projects</h2>
-
-  <p>Test projects contain Android applications that you write using the
-  <a href="{@docRoot}guide/topics/testing/index.html">Testing and
-  Instrumentation framework</a>. The framework is an extension of the JUnit test framework and adds
-  access to Android system objects. The file structure of a test project is the same as an
-  Android project.</p>
-
-  <dl>
-    <dt><code>src/</code></dt>
-
-    <dd>Includes your test source files. Test projects do not require an Activity <code>.java</code>
-    file, but can include one.</dd>
-
-    <dt><code>gen/</code></dt>
-
-    <dd>This contains the Java files generated by ADT, such as your <code>R.java</code> file and
-    interfaces created from AIDL files.</dd>
-
-    <dt><code>assets/</code></dt>
-
-    <dd>This is empty. You can use it to store raw asset files.</dd>
-
-    <dt><code>res/</code></dt>
-
-    <dd>A folder for your application resources, such as drawable files, layout files, string
-    values, etc. See <a href="{@docRoot}guide/topics/resources/index.html">Application
-    Resources</a>.</dd>
-
-    <dt><code>AndroidManifest.xml</code></dt>
-
-    <dd>The Android Manifest for your project. See <a href=
-    "{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>. Test
-    Projects have a special <a href=
-    "{@docRoot}guide/topics/manifest/instrumentation-element.html">
-    <code>&lt;instrumentation&gt;</code></a>
-    element that connects the test project with the application project.</dd>
-
-    <dt><code>project.properties</code></dt>
-
-    <dd>This file contains project settings, such as the build target and links to the project being
-tested. This file is integral to the project, so maintain it in a source
-revision control system. To edit project properties in Eclipse, right-click the project folder
-and select <strong>Properties</strong>.</dd>
-
-    <dt><code>local.properties</code></dt>
-
-    <dd>Customizable computer-specific properties for the build system. If you use Ant to build
-    the project, this contains the path to the SDK installation. Because the content of the file
-    is specific to the local installation of the SDK, it should not be maintained in a Source
-    Revision Control system. If you use Eclipse, this file is not used.</dd>
-
-    <dt><code>ant.properties</code></dt>
-
-    <dd>Customizable properties for the build system. You can edit this file to override default
-    build settings used by Ant and provide the location to your keystore and key alias, so that the
-    build tools can sign your application when building in release mode. This file is integral to
-    the project, so maintain it in a source revision control system.
-    If you use Eclipse, this file is not used.</dd>
-
-    <dt><code>build.xml</code></dt>
-
-    <dd>The Ant build file for your project. This is only applicable for projects that
-    you build with Ant.</dd>
-  </dl>
-
-  <p>For more information, see the <a href=
-  "{@docRoot}guide/developing/testing/index.html">Testing</a> section.</p>
-
-
-  <h2 id="testing">Testing a Library Project</h2>
-
-  <p>There are two recommended ways of setting up testing on code and resources in a library
-  project:</p>
-
-  <ul>
-    <li>You can set up a <a href="{@docRoot}guide/developing/testing/testing_otheride.html">test
-    project</a> that instruments an application project that depends on the library project. You
-    can then add tests to the project for library-specific features.</li>
-
-    <li>You can set up a set up a standard application project that depends on the library and put
-    the instrumentation in that project. This lets you create a self-contained project that
-    contains both the tests/instrumentations and the code to test.</li>
-  </ul>
\ No newline at end of file
diff --git a/docs/html/guide/developing/projects/projects-cmdline.jd b/docs/html/guide/developing/projects/projects-cmdline.jd
deleted file mode 100644
index b8db5f3..0000000
--- a/docs/html/guide/developing/projects/projects-cmdline.jd
+++ /dev/null
@@ -1,295 +0,0 @@
-page.title=Managing Projects from the Command Line
-parent.title=Managing Projects
-parent.link=index.html
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#CreatingAProject">Creating an Android Project</a></li>
-        <li><a href="#UpdatingAProject">Updating a Project</a></li>
-        <li><a href="#SettingUpLibraryProject">Setting up a Library Project</a>
-          <ol>
-            <li><a href="#CreatingManifestFile">Creating the manifest file</a></li>
-            <li><a href="#UpdatingLibraryProject">Updating a library project</a></li>
-          </ol>
-        </li>
-        <li><a href="#ReferencingLibraryProject">Referencing a Library Project</a>
-          <ol>
-            <li><a href="#DeclaringLibrary">Declaring library components in the manifest
-file</a></li>
-            <li><a href="#depAppBuild">Building a dependent application</a></li>
-          </ol>
-        </li>
-      </ol>
-
-      <h2>See also</h2>
-
-      <ol>
-        <li><a href=
-        "{@docRoot}guide/developing/testing/testing_otheride.html#CreateTestProjectCommand">Testing
-        from Other IDEs</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>The <code>android</code> tool provides you with commands to create all three types of
-  projects. An Android project contains all of the files and resources that are needed to build a
-  project into an .apk file for installation.
-
-  <ul>
-    <li>An Android project contains all of the files and resources that are needed to build a project into
-  an .apk file for installation. You need to create an Android project for any application that you
-  want to eventually install on a device.</li>
-
-  <li>You can also designate an Android project as a library project, which allows it to be shared
-  with other projects that depend on it. Once an Android project is designated as a library
-  project, it cannot be installed onto a device.</li>
-
-  <li>Test projects extend JUnit test functionality to include Android specific functionality. For
-  more information on creating a test project, see <a href=
-  "{@docRoot}guide/developing/testing/testing_otheride.html">Testing from other IDEs</a>.</li>
-  </ul>
-
-
-  <h2 id="CreatingAProject">Creating an Android Project</h2>
-
-  <p>To create an Android project, you must use the <code>android</code> tool. When you create a
-  new project with <code>android</code>, it will generate a project directory with some default
-  application files, stub files, configuration files and a build file.</p>
-
-  <p>To create a new Android project, open a command-line, navigate to the <code>tools/</code>
-  directory of your SDK and run:</p>
-  <pre>
-android create project \
---target &lt;target_ID&gt; \
---name &lt;your_project_name&gt; \
---path path/to/your/project \
---activity &lt;your_activity_name&gt; \
---package &lt;your_package_namespace&gt;
-</pre>
-
-  <ul>
-    <li><code>target</code> is the "build target" for your application. It corresponds to an
-    Android platform library (including any add-ons, such as Google APIs) that you would like to
-    build your project against. To see a list of available targets and their corresponding IDs,
-    execute: <code>android list targets</code>.</li>
-
-    <li><code>name</code> is the name for your project. This is optional. If provided, this name
-    will be used for your .apk filename when you build your application.</li>
-
-    <li><code>path</code> is the location of your project directory. If the directory does not
-    exist, it will be created for you.</li>
-
-    <li><code>activity</code> is the name for your default {@link android.app.Activity} class. This
-    class file will be created for you inside
-    <code><em>&lt;path_to_your_project&gt;</em>/src/<em>&lt;your_package_namespace_path&gt;</em>/</code>
-    . This will also be used for your .apk filename unless you provide a <code>name</code>.</li>
-
-    <li><code>package</code> is the package namespace for your project, following the same rules as
-    for packages in the Java programming language.</li>
-  </ul>
-
-  <p>Here's an example:</p>
-  <pre>
-android create project \
---target 1 \
---name MyAndroidApp \
---path ./MyAndroidAppProject \
---activity MyAndroidAppActivity \
---package com.example.myandroid
-</pre>
-
-  <p>Once you've created your project, you're ready to begin development. You can move your project
-  folder wherever you want for development, but keep in mind that you must use the <a href=
-  "{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a> (adb) &mdash; located in the
-  SDK <code>platform-tools/</code> directory &mdash; to send your application to the emulator (discussed
-  later). So you need access between your project solution and the <code>platform-tools/</code> folder.</p>
-
-  <p class="note"><strong>Tip:</strong> Add the <code>platform-tools/</code> as well as the <code>tools/</code> directory
-  to your <code>PATH</code> environment variable.</p>
-
-  <p class="caution"><strong>Caution:</strong> You should refrain from moving the location of the
-  SDK directory, because this will break the SDK location property located in <code>local.properties</code>.
-  If you need to update the SDK location, use the <code>android update project</code> command.
-  See <a href="#UpdatingAProject">Updating a Project</a> for more information.</p>
-
-  <h2 id="UpdatingAProject">Updating a Project</h2>
-
-  <p>If you're upgrading a project from an older version of the Android SDK or want to create a new
-  project from existing code, use the <code>android update project</code> command to update the
-  project to the new development environment. You can also use this command to revise the build
-  target of an existing project (with the <code>--target</code> option) and the project name (with
-  the <code>--name</code> option). The <code>android</code> tool will generate any files and
-  folders (listed in the previous section) that are either missing or need to be updated, as needed
-  for the Android project.</p>
-
-  <p>To update an existing Android project, open a command-line and navigate to the
-  <code>tools/</code> directory of your SDK. Now run:</p>
-  <pre>
-android update project --name &lt;project_name&gt; --target &lt;target_ID&gt;
---path &lt;path_to_your_project&gt;
-</pre>
-
-  <ul>
-    <li><code>target</code> is the "build target" for your application. It corresponds to an
-    Android platform library (including any add-ons, such as Google APIs) that you would like to
-    build your project against. To see a list of available targets and their corresponding IDs,
-    execute: <code>android list targets</code>.</li>
-
-    <li><code>path</code> is the location of your project directory.</li>
-
-    <li><code>name</code> is the name for the project. This is optional&mdash;if you're not
-    changing the project name, you don't need this.</li>
-  </ul>
-
-  <p>Here's an example:</p>
-  <pre>
-android update project --name MyApp --target 2 --path ./MyAppProject
-</pre>
-
-  <h2 id="SettingUpLibraryProject">Setting up a Library Project</h2>
-
-  <p>A library project is a standard Android project, so you can create a new one in the same way
-  as you would a new application project. Specifically, you can use the <code>android</code> tool
-  to generate a new library project with all of the necessary files and folders.</p>
-
-  <p>To create a new library project, navigate to the <code>&lt;sdk&gt;/tools/</code> directory and
-  use this command:</p>
-  <pre class="no-pretty-print">
-android create lib-project --name &lt;your_project_name&gt; \
---target &lt;target_ID&gt; \
---path path/to/your/project \
---package &lt;your_library_package_namespace&gt;
-</pre>
-
-  <p>The <code>create lib-project</code> command creates a standard project structure that includes
-  preset property that indicates to the build system that the project is a library. It does this by
-  adding this line to the project's <code>project.properties</code> file:</p>
-  <pre class="no-pretty-print">
-android.library=true
-</pre>
-
-  <p>Once the command completes, the library project is created and you can begin moving source
-  code and resources into it, as described in the sections below.</p>
-
-  <p>If you want to convert an existing application project to a library project, so that other
-  applications can use it, you can do so by adding a the <code>android.library=true</code> property
-  to the application's <code>project.properties</code> file.</p>
-
-  <h3 id="CreatingManifestFile">Creating the manifest file</h3>
-
-  <p>A library project's manifest file must declare all of the shared components that it includes,
-  just as would a standard Android application. For more information, see the documentation for
-  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
-
-  <p>For example, the <a href=
-  "{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a> example library
-  project declares the Activity <code>GameActivity</code>:</p>
-  <pre>
-&lt;manifest&gt;
-  ...
-  &lt;application&gt;
-    ...
-    &lt;activity android:name="GameActivity" /&gt;
-    ...
-  &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-  <h3 id="UpdatingLibraryProject">Updating a library project</h3>
-
-  <p>If you want to update the build properties (build target, location) of the library project,
-  use this command:</p>
-  <pre>
-android update lib-project \
---target <em>&lt;target_ID&gt;</em> \
---path <em>path/to/your/project</em>
-</pre>
-
-  <h2 id="ReferencingLibraryProject">Referencing a Library Project</h2>
-
-  <p>If you are developing an application and want to include the shared code or resources from a
-  library project, you can do so easily by adding a reference to the library project in the
-  application project's build properties.</p>
-
-  <p>To add a reference to a library project, navigate to the <code>&lt;sdk&gt;/tools/</code>
-  directory and use this command:</p>
-  <pre>
-android update project \
---target <em>&lt;target_ID&gt;</em> \
---path <em>path/to/your/project</em>
---library <em>path/to/library_projectA</em>
-</pre>
-
-  <p>This command updates the application project's build properties to include a reference to the
-  library project. Specifically, it adds an <code>android.library.reference.<em>n</em></code>
-  property to the project's <code>project.properties</code> file. For example:</p>
-  <pre class="no-pretty-print">
-android.library.reference.1=path/to/library_projectA
-</pre>
-
-  <p>If you are adding references to multiple libraries, note that you can set their relative
-  priority (and merge order) by manually editing the <code>project.properties</code> file and
-  adjusting the each reference's <code>.<em>n</em></code> index as appropriate. For example, assume
-  these references:</p>
-  <pre class="no-pretty-print">
-android.library.reference.1=path/to/library_projectA
-android.library.reference.2=path/to/library_projectB
-android.library.reference.3=path/to/library_projectC
-</pre>
-
-  <p>You can reorder the references to give highest priority to <code>library_projectC</code> in
-  this way:</p>
-  <pre class="no-pretty-print">
-android.library.reference.2=path/to/library_projectA
-android.library.reference.3=path/to/library_projectB
-android.library.reference.1=path/to/library_projectC
-</pre>
-
-  <p>Note that the <code>.<em>n</em></code> index in the references must begin at "1" and increase
-  uniformly without "holes". References appearing in the index after a hole are ignored.</p>
-
-  <p>At build time, the libraries are merged with the application one at a time, starting from the
-  lowest priority to the highest. Note that a library cannot itself reference another library and
-  that, at build time, libraries are not merged with each other before being merged with the
-  application.</p>
-
-  <h3 id="DeclaringLibrary">Declaring library components in the manifest file</h3>
-
-  <p>In the manifest file of the application project, you must add declarations of all components
-  that the application will use that are imported from a library project. For example, you must
-  declare any <code>&lt;activity&gt;</code>, <code>&lt;service&gt;</code>,
-  <code>&lt;receiver&gt;</code>, <code>&lt;provider&gt;</code>, and so on, as well as
-  <code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar elements.</p>
-
-  <p>Declarations should reference the library components by their fully-qualified package names,
-  where appropriate.</p>
-
-  <p>For example, the <a href=
-  "{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a> example
-  application declares the library Activity <code>GameActivity</code> like this:</p>
-  <pre>
-&lt;manifest&gt;
-  ...
-  &lt;application&gt;
-    ...
-    &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
-    ...
-  &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-  <p>For more information about the manifest file, see the documentation for
-  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
-
-  <h3 id="depAppBuild">Building a dependent application</h3>
-
-  <p>To build an application project that depends on one or more library projects, you can use the
-  standard Ant build commands and compile modes, as described in <a href=
-  "{@docRoot}guide/developing/building/index.html">Building and Running</a>. The tools
-compile and merge all libraries referenced by the application as part of
-  compiling the dependent application project. No additional commands or steps are necessary.</p>
-
diff --git a/docs/html/guide/developing/projects/projects-eclipse.jd b/docs/html/guide/developing/projects/projects-eclipse.jd
deleted file mode 100644
index 90f7820..0000000
--- a/docs/html/guide/developing/projects/projects-eclipse.jd
+++ /dev/null
@@ -1,237 +0,0 @@
-page.title=Managing Projects from Eclipse with ADT
-parent.title=Managing Projects
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#CreatingAProject">Creating an Android Project</a></li>
-
-        <li><a href="#SettingUpLibraryProject">Setting up a Library Project</a></li>
-
-        <li><a href="#ReferencingLibraryProject">Referencing a Library Project</a></li>
-      </ol>
-
-      <h2>See also</h2>
-
-      <ol>
-        <li><a href=
-        "{@docRoot}guide/developing/testing/testing_eclipse.html#CreateTestProjectEclipse">Testing
-        from Eclipse with ADT</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Eclipse and the ADT plugin provide GUIs and wizards to create all three types of projects
-  (Android project, Library project, and Test project):
-  
-  <ul>
-    <li>An Android project contains all of the files and resources that are needed to build a project into
-  an .apk file for installation. You need to create an Android project for any application that you
-  want to eventually install on a device.</li>
-
-  <li>You can also designate an Android project as a library project, which allows it to be shared
-  with other projects that depend on it. Once an Android project is designated as a library
-  project, it cannot be installed onto a device.</li>
-
-  <li>Test projects extend JUnit test functionality to include Android specific functionality. For
-  more information on creating a test project, see <a href=
-  "{@docRoot}guide/developing/testing/testing_eclipse.html">Testing from Eclipse with ADT</a>.</li>
-  </ul>
-
-  <h2 id="CreatingAProject">Creating an Android Project</h2>
-
-  <p>The ADT plugin provides a <em>New Project Wizard</em> that you can use to quickly create a new Android
-  project (or a project from existing code). To create a new project:</p>
-
-  <ol>
-    <li>Select <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Project</strong>.</li>
-
-    <li>Select <strong>Android</strong> &gt; <strong>Android Project</strong>, and click
-    <strong>Next</strong>.</li>
-
-    <li>Select the contents for the project:
-
-      <ul>
-        <li>Enter a <em>Project Name</em>. This will be the name of the folder where your project
-        is created.</li>
-
-        <li>Under Contents, select <strong>Create new project in workspace</strong>. Select your
-        project workspace location.</li>
-
-        <li>Under Target, select an Android target to be used as the project's Build Target. The
-        Build Target specifies which Android platform you'd like your application built against.
-
-          <p>Select the lowest platform with which your application is compatible.</p>
-
-          <p class="note"><strong>Note:</strong> You can change your the Build Target for your
-          project at any time: Right-click the project in the Package Explorer, select
-          <strong>Properties</strong>, select <strong>Android</strong> and then check the desired
-          Project Target.</p>
-        </li>
-
-        <li>Under Properties, fill in all necessary fields.
-
-          <ul>
-            <li>Enter an <em>Application name</em>. This is the human-readable title for your
-            application &mdash; the name that will appear on the Android device.</li>
-
-            <li>Enter a <em>Package name</em>. This is the package namespace (following the same
-            rules as for packages in the Java programming language) where all your source code will
-            reside.</li>
-
-            <li>Select <em>Create Activity</em> (optional, of course, but common) and enter a name
-            for your main Activity class.</li>
-
-            <li>Enter a <em>Min SDK Version</em>. This is an integer that indicates the minimum API
-            Level required to properly run your application. Entering this here automatically sets
-            the <code>minSdkVersion</code> attribute in the <a href=
-            "{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a> of your
-            Android Manifest file. If you're unsure of the appropriate <a href=
-            "{@docRoot}guide/appendix/api-levels.html">API Level</a> to use, copy the API Level
-            listed for the Build Target you selected in the Target tab.</li>
-          </ul>
-        </li>
-      </ul>
-    </li>
-
-    <li>Click <strong>Finish</strong>.</li>
-  </ol>
-
-  <p class="note"><strong>Tip:</strong> You can also start the New Project Wizard from the
-  <em>New</em> icon in the toolbar.</p>
-
-  <h2 id="SettingUpLibraryProject">Setting up a Library Project</h2>
-
-  <p>A library project is a standard Android project, so you can create a new one in the same way
-  as you would a new application project.</p>
-
-  <p>When you are creating the library project, you can select any application name, package, and
-  set other fields as needed, as shown in figure 1.</p>
-
-  <p>Next, set the project's properties to indicate that it is a library project:</p>
-
-  <ol>
-    <li>In the <strong>Package Explorer</strong>, right-click the library project and select
-    <strong>Properties</strong>.</li>
-
-    <li>In the <strong>Properties</strong> window, select the "Android" properties group at left
-    and locate the <strong>Library</strong> properties at right.</li>
-
-    <li>Select the "is Library" checkbox and click <strong>Apply</strong>.</li>
-
-    <li>Click <strong>OK</strong> to close the <em>Properties</em> window.</li>
-  </ol>
-
-  <p>The new project is now marked as a library project. You can begin moving source code and
-  resources into it, as described in the sections below.</p>
-
-  <p>You can also convert an existing application project into a library. To do so, simply open the
-  Properties for the project and select the "is Library" checkbox. Other application projects can
-  now reference the existing project as a library project.</p>
-  
-  <img src= "{@docRoot}images/developing/adt-props-isLib.png">
-
-  <p class="img-caption"><strong>Figure 1.</strong> Marking a project as an
-     Android library project.</p>
-
-  <h3>Creating the manifest file</h3>
-
-  <p>A library project's manifest file must declare all of the shared components that it includes,
-  just as would a standard Android application. For more information, see the documentation for
-  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
-
-  <p>For example, the <a href=
-  "{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a> example library
-  project declares the Activity <code>GameActivity</code>:</p>
-  <pre>
-&lt;manifest&gt;
-  ...
-  &lt;application&gt;
-    ...
-    &lt;activity android:name="GameActivity" /&gt;
-    ...
-  &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-  <h2 id="ReferencingLibraryProject">Referencing a library project</h2>
-
-  <p>If you are developing an application and want to include the shared code or resources from a
-  library project, you can do so easily by adding a reference to the library project in the
-  application project's Properties.</p>
-
-  <p>To add a reference to a library project, follow these steps:</p>
-
-  <ol>
-    <li>In the <strong>Package Explorer</strong>, right-click the dependent project and select
-    <strong>Properties</strong>.</li>
-
-    <li>In the <strong>Properties</strong> window, select the "Android" properties group at left
-    and locate the <strong>Library</strong> properties at right.</li>
-
-    <li>Click <strong>Add</strong> to open the <strong>Project Selection</strong> dialog.</li>
-
-    <li>From the list of available library projects, select a project and click
-    <strong>OK</strong>.</li>
-
-    <li>When the dialog closes, click <strong>Apply</strong> in the <strong>Properties</strong>
-    window.</li>
-
-    <li>Click <strong>OK</strong> to close the <strong>Properties</strong> window.</li>
-  </ol>
-
-  <p>As soon as the Properties dialog closes, Eclipse rebuilds the project, including the contents
-  of the library project.</p>
-
-  <p>Figure 2 shows the Properties dialog that lets you add library references and move
-  them up and down in priority.</p><img src="{@docRoot}images/developing/adt-props-libRef.png">
-
-  <p class="img-caption"><strong>Figure 2.</strong> Adding a reference to a
-     library project in the properties of an application project.</p>
-
-  <p>If you are adding references to multiple libraries, note that you can set their relative
-  priority (and merge order) by selecting a library and using the <strong>Up</strong> and
-  <strong>Down</strong> controls. The tools merge the referenced libraries with your application
-  starting from lowest priority (bottom of the list) to highest (top of the list). If more than one
-  library defines the same resource ID, the tools select the resource from the library with higher
-  priority. The application itself has highest priority and its resources are always used in
-  preference to identical resource IDs defined in libraries.</p>
-
-  <h3>Declaring library components in the manifest file</h3>
-
-  <p>In the manifest file of the application project, you must add declarations of all components
-  that the application will use that are imported from a library project. For example, you must
-  declare any <code>&lt;activity&gt;</code>, <code>&lt;service&gt;</code>,
-  <code>&lt;receiver&gt;</code>, <code>&lt;provider&gt;</code>, and so on, as well as
-  <code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar elements.</p>
-
-  <p>Declarations should reference the library components by their fully-qualified package names,
-  where appropriate.</p>
-
-  <p>For example, the <a href=
-  "{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a> example
-  application declares the library Activity <code>GameActivity</code> like this:</p>
-  <pre>
-&lt;manifest&gt;
-  ...
-  &lt;application&gt;
-    ...
-    &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
-    ...
-  &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-  <p>For more information about the manifest file, see the documentation for <a href=
-  "{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
-
-
-
-
-
-
-
diff --git a/docs/html/guide/developing/testing/index.jd b/docs/html/guide/developing/testing/index.jd
deleted file mode 100644
index 8a08959..0000000
--- a/docs/html/guide/developing/testing/index.jd
+++ /dev/null
@@ -1,36 +0,0 @@
-page.title=Testing
-@jd:body
-<p>
-    Android includes powerful tools for setting up and running test applications.
-    Whether you are working in Eclipse with ADT or working from the command line, these tools
-    help you set up and run your tests within an emulator or the device you are targeting.
-    The documents listed below explain how to work with the tools in your development environment.
-</p>
-<p>
-    If you aren't yet familiar with the Android testing framework, please read the topic
-    <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>
-    before you get started.
-    For a step-by-step introduction to Android testing, try the <a
-    href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">Hello, Testing</a>
-    tutorial, which introduces basic testing concepts and procedures.
-    For a more advanced tutorial, try <a
-    href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>,
-    which guides you through a more complex testing scenario.
-</p>
-<dl>
-  <dt><a href="testing_eclipse.html">Testing from Eclipse, with ADT</a></dt>
-          <dd>
-            The ADT plugin lets you quickly set up and manage test projects directly in
-            the Eclipse UI. Once you have written your tests, you can build and run them and
-            then see the results in the Eclipse JUnit view. You can also use the SDK command-line
-            tools to execute your tests if needed.
-          </dd>
-  <dt><a href="testing_otheride.html">Testing from Other IDEs</a></dt>
-    <dd>
-        The SDK command-line tools provide the same capabilities as the ADT plugin. You can
-        use them to set up and manage test projects, build your test application,
-        run your tests, and see the results. You use
-        the <code>android</code> tool to create and manage test projects, the Ant build system
-        to compile them, and the <code>adb</code> tool to install and run them.
-    </dd>
-</dl>
diff --git a/docs/html/guide/developing/testing/testing_eclipse.jd b/docs/html/guide/developing/testing/testing_eclipse.jd
deleted file mode 100644
index 4e9ecca..0000000
--- a/docs/html/guide/developing/testing/testing_eclipse.jd
+++ /dev/null
@@ -1,535 +0,0 @@
-page.title=Testing from Eclipse with ADT
-parent.title=Testing
-parent.link=index.html
-@jd:body
-<div id="qv-wrapper">
-    <div id="qv">
-        <h2>In this document</h2>
-            <ol>
-                <li><a href="#CreateTestProjectEclipse">Creating a Test Project</a></li>
-                <li><a href="#CreateTestAppEclipse">Creating a Test Package</a></li>
-                <li><a href="#RunTestEclipse">Running Tests</a></li>
-            </ol>
-    </div>
-</div>
-<p>
-    This topic explains how create and run tests of Android applications in Eclipse with ADT.
-    Before you read this topic, you should read about how to create an Android application with the
-    basic processes for creating and running applications with ADT, as described in
-    <a href="{@docRoot}guide/developing/projects/projects-eclipse.html">Managing Projects from
-Eclipse</a>
-    and <a href="{@docRoot}guide/developing/building/building-eclipse.html">Building and Running
-from Eclipse</a>.
-    You may also want to read
-    <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
-    which provides an overview of the Android testing framework.
-</p>
-<p>
-    ADT provides several features that help you set up and manage your testing environment
-    effectively:
-</p>
-    <ul>
-        <li>
-            It lets you quickly create a test project and link it to the application under test.
-            When it creates the test project, it automatically inserts the necessary
-            <code>&lt;instrumentation&gt;</code> element in the test package's manifest file.
-        </li>
-        <li>
-            It lets you quickly import the classes of the application under test, so that your
-            tests can inspect them.
-        </li>
-        <li>
-            It lets you create run configurations for your test package and include in
-            them flags that are passed to the Android testing framework.
-        </li>
-        <li>
-            It lets you run your test package without leaving Eclipse. ADT builds both the
-            application under test and the test package automatically, installs them if
-            necessary to your device or emulator, runs the test package, and displays the
-            results in a separate window in Eclipse.
-        </li>
-    </ul>
-<p>
-    If you are not developing in Eclipse or you want to learn how to create and run tests from the
-    command line, see
-    <a href="{@docRoot}guide/developing/testing/testing_otheride.html">Testing from Other IDEs</a>.
-</p>
-<h2 id="CreateTestProjectEclipse">Creating a Test Project</h2>
-<p>
-    To set up a test environment for your Android application, you must first create a separate
-    project that holds the test code. The new project follows the directory structure
-    used for any Android application. It includes the same types of content and files, such as
-    source code, resources, a manifest file, and so forth. The test package you
-    create is connected to the application under test by an
-    <a href="{@docRoot}guide/topics/manifest/instrumentation-element.html">
-    <code>&lt;instrumentation&gt;</code></a> element in its manifest file.
-</p>
-<p>
-    The <em>New Android Test Project</em> dialog makes it easy for you to generate a
-    new test project that has the proper structure, including the
-    <code>&lt;instrumentation&gt;</code> element in the manifest file. You can use the New
-    Android Test Project dialog to generate the test project at any time. The dialog appears
-    just after you create a new Android main application project, but you can also run it to
-    create a test project for a project that you created previously.
-</p>
-<p>
-    To create a test project in Eclipse with ADT:
-</p>
-<ol>
-    <li>
-        In Eclipse, select <strong>File &gt; New &gt; Other</strong>. This opens the <em>Select a
-        Wizard</em> dialog.
-    </li>
-    <li>
-        In the dialog, in the <em>Wizards</em> drop-down list, find the entry for Android, then
-        click the toggle to the left. Select <strong>Android Test Project</strong>, then at the
-        bottom of the dialog click <strong>Next</strong>. The <em>New Android Test Project</em>
-        wizard appears.
-    </li>
-    <li>
-        Next to <em>Test Project Name</em>, enter a name for the project. You may use any name,
-        but you may want to associate the name with the project name for the application under test.
-        One way to do this is to take the application's project name, append the string "Test" to
-        it, and then use this as the test package project name.
-        <p>
-            The name becomes part of the suggested project path, but you can change this in the
-            next step.
-        </p>
-    </li>
-    <li>
-        In the <em>Content</em> panel, examine the suggested path to the project.
-        If <em>Use default location</em> is set, then the wizard will suggest a path that is
-        a concatenation of the workspace path and the project name you entered. For example,
-        if your workspace path is <code>/usr/local/workspace</code> and your project name is
-        <code>MyTestApp</code>, then the wizard will suggest
-        <code>/usr/local/workspace/MyTestApp</code>. To enter your own
-        choice for a path, unselect <em>Use default location</em>, then enter or browse to the
-        path where you want your project.
-        <p>
-            To learn more about choosing the location of test projects, please read
-            <a href="{@docRoot}guide/topics/testing/testing_android.html#TestProjectPaths">
-            Testing Fundamentals</a>.
-        </p>
-    </li>
-    <li>
-        In the Test Target panel, set An Existing Android Project, click Browse, then select your
-        Android application from the list. You now see that the wizard has completed the Test
-        Target Package, Application Name, and Package Name fields for you (the latter two are in
-        the Properties panel).
-    </li>
-    <li>
-        In the Build Target panel, select the Android SDK platform that the application under test
-        uses.
-    </li>
-    <li>
-        Click Finish to complete the wizard. If Finish is disabled, look for error messages at the
-        top of the wizard dialog, and then fix any problems.
-    </li>
-</ol>
-<h2 id="CreateTestAppEclipse">Creating a Test Package</h2>
-<p>
-    Once you have created a test project, you populate it with a test package. This package does not
-    require an Activity, although you can define one if you wish. Although your test package can
-    combine Activity classes, test case classes, or ordinary classes, your main test case
-    should extend one of the Android test case classes or JUnit classes, because these provide the
-    best testing features.
-</p>
-<p>
-    Test packages do not need to have an Android GUI. When you run the package in
-    Eclipse with ADT, its results appear in the JUnit view. Running tests and seeing the results is
-    described in more detail in the section <a href="#RunTestEclipse">Running Tests</a>.
-</p>
-
-<p>
-    To create a test package, start with one of Android's test case classes defined in
-    {@link android.test android.test}. These extend the JUnit
-    {@link junit.framework.TestCase TestCase} class. The Android test classes for Activity objects
-    also provide instrumentation for testing an Activity. To learn more about test case
-    classes, please read the topic <a href="{@docRoot}guide/topics/testing/testing_android.html">
-    Testing Fundamentals</a>.
-</p>
-<p>
-    Before you create your test package, you choose the Java package identifier you want to use
-    for your test case classes and the Android package name you want to use. To learn more
-    about this, please read
-    <a href="{@docRoot}guide/topics/testing/testing_android.html#PackageNames">
-    Testing Fundamentals</a>.
-</p>
-<p>
-    To add a test case class to your project:
-</p>
-<ol>
-    <li>
-        In the <em>Project Explorer</em> tab, open your test project, then open the <em>src</em>
-        folder.
-    </li>
-    <li>
-        Find the Java package identifier set by the projection creation wizard. If you haven't
-        added classes yet, this node won't have any children, and its icon will not be filled in.
-        If you want to change the identifier value, right-click the identifier and select
-        <strong>Refactor</strong> &gt; <strong>Rename</strong>, then enter the new name.
-    </li>
-    <li>
-        When you are ready, right-click the Java package identifier again and select
-        <strong>New</strong> &gt; <strong>Class</strong>. This displays the <em>New Java Class</em>
-        dialog, with the <em>Source folder</em> and <em>Package</em> values already set.
-    </li>
-    <li>
-        In the <em>Name</em> field, enter a name for the test case class. One way to choose a
-        class name is to append the string "Test" to the class of the component you are testing.
-        For example, if you are testing the class MyAppActivity, your test case class
-        name would be MyAppActivityTest. Leave the modifiers set to <em>public</em>.
-    </li>
-    <li>
-        In the <em>Superclass</em> field, enter the name of the Android test case class you
-        are extending. You can also browse the available classes.
-    </li>
-    <li>
-        In <em>Which method stubs would you like to create?</em>, unset all the options, then
-        click <strong>Finish</strong>. You will set up the constructor manually.
-    </li>
-    <li>
-        Your new class appears in a new Java editor pane.
-    </li>
-</ol>
-<p>
-    You now have to ensure that the constructor is set up correctly. Create a constructor for your
-    class that has no arguments; this is required by JUnit. As the first statement in this
-    constructor, add a call to the base class' constructor. Each base test case class has its
-    own constructor signature. Refer to the class documentation in the documentation for
-    {@link android.test} for more information.
-</p>
-<p>
-    To control your test environment, you will want to override the <code>setUp()</code> and
-    <code>tearDown()</code> methods:
-</p>
-<ul>
-    <li>
-        <code>setUp()</code>: This method is invoked before any of the test methods in the class.
-        Use it to set up the environment for the test (the test fixture. You can use
-        <code>setUp()</code> to instantiate a new Intent with the action <code>ACTION_MAIN</code>.
-        You can then use this intent to start the Activity under test.
-    </li>
-    <li>
-        <code>tearDown()</code>: This method is invoked after all the test methods in the class. Use
-        it to do garbage collection and to reset the test fixture.
-    </li>
-</ul>
-<p>
-    Another useful convention is to add the method <code>testPreconditions()</code> to your test
-    class. Use this method to test that the application under test is initialized correctly. If this
-    test fails, you know that that the initial conditions were in error. When this happens, further
-    test results are suspect, regardless of whether or not the tests succeeded.
-</p>
-<p>
-    The Resources tab contains an
-    <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-    tutorial with more information about creating test classes and methods.
-</p>
-<h2 id="RunTestEclipse">Running Tests</h2>
-    <div class="sidebox-wrapper">
-        <div class="sidebox">
-            <h2>Running tests from the command line</h2>
-                <p>
-                    If you've created your tests in Eclipse, you can still run your tests and test
-                    suites by using command-line tools included with the Android SDK. You may want
-                    to do this, for example, if you have a large number of tests to run, if you
-                    have a large test case, or if you want a fine level of control over which
-                    tests are run at a particular time.
-                </p>
-                <p>
-                    To run tests created in Eclipse with ADT with command-line tools, you must first
-                    install additional files into the test project using the <code>android</code>
-                    tool's "create test-project" option. To see how to do this, read
-                   <a href="{@docRoot}guide/developing/testing/testing_otheride.html#CreateProject">
-                    Testing in Other IDEs</a>.
-                </p>
-        </div>
-    </div>
-<p>
-    When you run a test package in Eclipse with ADT, the output appears in the Eclipse JUnit view.
-    You can run the entire test package or one test case class. To do run tests, Eclipse runs the
-    <code>adb</code> command for running a test package, and displays the output, so there is no
-    difference between running tests inside Eclipse and running them from the command line.
-</p>
-<p>
-    As with any other package, to run a test package in Eclipse with ADT you must either attach a
-    device to your computer or use the Android emulator. If you use the emulator, you must have an
-    Android Virtual Device (AVD) that uses the same target as the test package.
-</p>
-<p>
-    To run a test in Eclipse, you have two choices:</p>
-<ul>
-    <li>
-        Run a test just as you run an application, by selecting
-        <strong>Run As... &gt; Android JUnit Test</strong> from the project's context menu or
-        from the main menu's <strong>Run</strong> item.
-    </li>
-    <li>
-        Create an Eclipse run configuration for your test project. This is useful if you want
-        multiple test suites, each consisting of selected tests from the project. To run
-        a test suite, you run the test configuration.
-        <p>
-            Creating and running test configurations is described in the next section.
-        </p>
-    </li>
-</ul>
-<p>
-    To create and run a test suite using a run configuration:
-</p>
-<ol>
-    <li>
-        In the Package Explorer, select the test project, then from the main menu, select
-        <strong>Run &gt; Run Configurations...</strong>. The Run Configurations dialog appears.
-    </li>
-    <li>
-        In the left-hand pane, find the Android JUnit Test entry. In the right-hand pane, click the
-        Test tab. The Name: text box shows the name of your project. The Test class: dropdown box
-        shows one of the test classes in your project.
-    </li>
-    <li>
-        To run one test class, click  Run a single test, then enter your project name in the
-        Project: text box and the class name in the Test class: text box.
-        <p>
-            To run all the test classes, click Run all tests in the selected project or package,
-            then enter the project or package name in the text box.
-        </p>
-    </li>
-    <li>
-        Now click the Target tab.
-        <ul>
-            <li>
-                Optional: If you are using the emulator, click Automatic, then in the Android
-                Virtual Device (AVD) selection table, select an existing AVD.
-            </li>
-            <li>
-                In the Emulator Launch Parameters pane, set the Android emulator flags you want to
-                use. These are documented in the topic
-                <a href="{@docRoot}guide/developing/tools/emulator.html#startup-options">
-                Android Emulator</a>.
-            </li>
-        </ul>
-    </li>
-    <li>
-        Click the Common tab. In the Save As pane, click Local to save this run configuration
-        locally, or click Shared to save it to another project.
-    </li>
-    <li>
-        Optional: Add the configuration to the Run toolbar and the <strong>Favorites</strong>
-        menu: in the Display in Favorites pane click the checkbox next to Run.
-    </li>
-    <li>
-        Optional: To add this configuration to the <strong>Debug</strong> menu and toolbar, click
-        the checkbox next to Debug.
-    </li>
-    <li>
-        To save your settings, click Close.<br/>
-        <p class="note"><strong>Note:</strong>
-            Although you can run the test immediately by clicking Run, you should save the test
-            first and then run it by selecting it from the Eclipse standard toolbar.
-        </p>
-    </li>
-    <li>
-        On the Eclipse standard toolbar, click the down arrow next to the green Run arrow. This
-        displays a menu of saved Run and Debug configurations.
-    </li>
-    <li>
-        Select the test run configuration you just created. The test starts.
-    </li>
-</ol>
-<p>
-    The progress of your test appears in the Console view as a series of messages. Each message is
-    preceded by a timestamp and the <code>.apk</code> filename to which it applies. For example,
-    this message appears when you run a test to the emulator, and the emulator is not yet started:
-</p>
-<div class="sidebox-wrapper">
-    <div class="sidebox">
-        <h2>Message Examples</h2>
-        <p>
-            The examples shown in this section come from the
-            <a href="{@docRoot}resources/samples/SpinnerTest/index.html">SpinnerTest</a>
-            sample test package, which tests the
-            <a href="{@docRoot}resources/samples/Spinner/index.html">Spinner</a>
-            sample application. This test package is also featured in the
-            <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-            tutorial.
-        </p>
-    </div>
-</div>
-<pre>
-    [<em>yyyy-mm-dd hh:mm:ss</em> - <em>testfile</em>] Waiting for HOME ('android.process.acore') to be launched...
-</pre>
-<p>
-    In the following description of these messages, <code><em>devicename</em></code> is the name of
-    the device or emulator you are using to run the test, and <code><em>port</em></code> is the
-    port number for the device. The name and port number are in the format used by the
-    <code><a href="{@docRoot}guide/developing/tools/adb.html#devicestatus">adb devices</a></code>
-    command. Also, <code><em>testfile</em></code> is the <code>.apk</code> filename of the test
-    package you are running, and <em>appfile</em> is the filename of the application under test.
-</p>
-<ul>
-    <li>
-        If you are using an emulator and you have not yet started it, then Eclipse
-        first starts the emulator. When this is complete, you see
-        the message:
-        <p>
-            <code>HOME is up on device '<em>devicename</em>-<em>port</em>'</code>
-        </p>
-    </li>
-    <li>
-        If you have not already installed your test package, then you see
-        the message:
-        <p>
-            <code>Uploading <em>testfile</em> onto device '<em>devicename</em>-<em>port</em>'
-            </code>
-        </p>
-        <p>
-            then the message <code>Installing <em>testfile</em></code>.
-        </p>
-        <p>
-            and finally the message <code>Success!</code>
-        </p>
-    </li>
-</ul>
-<p>
-    The following lines are an example of this message sequence:
-</p>
-<code>
-[2010-07-01 12:44:40 - MyTest] HOME is up on device 'emulator-5554'<br>
-[2010-07-01 12:44:40 - MyTest] Uploading MyTest.apk onto device 'emulator-5554'<br>
-[2010-07-01 12:44:40 - MyTest] Installing MyTest.apk...<br>
-[2010-07-01 12:44:49 - MyTest] Success!<br>
-</code>
-<br>
-<ul>
-    <li>
-        Next, if you have not yet installed the application under test to the device or
-        emulator, you see the message
-        <p>
-        <code>Project dependency found, installing: <em>appfile</em></code>
-        </p>
-        <p>
-            then the message <code>Uploading <em>appfile</em></code> onto device
-            '<em>devicename</em>-<em>port</em>'
-        </p>
-        <p>
-            then the message <code>Installing <em>appfile</em></code>
-        </p>
-        <p>
-            and finally the message <code>Success!</code>
-        </p>
-    </li>
-</ul>
-<p>
-    The following lines are an example of this message sequence:
-</p>
-<code>
-[2010-07-01 12:44:49 - MyTest] Project dependency found, installing: MyApp<br>
-[2010-07-01 12:44:49 - MyApp] Uploading MyApp.apk onto device 'emulator-5554'<br>
-[2010-07-01 12:44:49 - MyApp] Installing MyApp.apk...<br>
-[2010-07-01 12:44:54 - MyApp] Success!<br>
-</code>
-<br>
-<ul>
-    <li>
-        Next, you see the message
-        <code>Launching instrumentation <em>instrumentation_class</em> on device
-        <em>devicename</em>-<em>port</em></code>
-        <p>
-            <code>instrumentation_class</code> is the fully-qualified class name of the
-            instrumentation test runner you have specified (usually
-            {@link android.test.InstrumentationTestRunner}.
-        </p>
-    </li>
-    <li>
-        Next, as {@link android.test.InstrumentationTestRunner} builds a list of tests to run,
-        you see the message
-        <p>
-            <code>Collecting test information</code>
-        </p>
-        <p>
-            followed by
-        </p>
-        <p>
-            <code>Sending test information to Eclipse</code>
-        </p>
-    </li>
-    <li>
-        Finally, you see the message <code>Running tests</code>, which indicates that your tests
-        are running. At this point, you should start seeing the test results in the JUnit view.
-        When the tests are finished, you see the console message <code>Test run complete</code>.
-        This indicates that your tests are finished.
-    </li>
-</ul>
-<p>
-    The following lines are an example of this message sequence:
-</p>
-<code>
-[2010-01-01 12:45:02 - MyTest] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554<br>
-[2010-01-01 12:45:02 - MyTest] Collecting test information<br>
-[2010-01-01 12:45:02 - MyTest] Sending test information to Eclipse<br>
-[2010-01-01 12:45:02 - MyTest] Running tests...<br>
-[2010-01-01 12:45:22 - MyTest] Test run complete<br>
-</code>
-<br>
-<p>
-    The test results appear in the JUnit view. This is divided into an upper summary pane,
-    and a lower stack trace pane.
-</p>
-<p>
-    The upper pane contains test information. In the pane's header, you see the following
-    information:
-</p>
-<ul>
-    <li>
-        Total time elapsed for the test package (labeled Finished after <em>x</em> seconds).
-    </li>
-    <li>
-        Number of runs (Runs:) - the number of tests in the entire test class.
-    </li>
-    <li>
-        Number of errors (Errors:) - the number of program errors and exceptions encountered
-        during the test run.
-    </li>
-    <li>
-        Number of failures (Failures:) - the number of test failures encountered during the test
-        run. This is the number of assertion failures. A test can fail even if the program does
-        not encounter an error.
-    </li>
-    <li>
-        A progress bar. The progress bar extends from left to right as the tests run. If all the
-        tests succeed, the bar remains green. If a test fails, the bar turns from green to red.
-    </li>
-</ul>
-<p>
-    The body of the upper pane contains the details of the test run. For each test case class
-    that was run, you see a line with the class name. To look at the results for the individual
-    test methods in that class, you click the left arrow to expand the line. You now see a
-    line for each test method in the class, and to its right the time it took to run.
-    If you double-click the method name, Eclipse opens the test class source in an editor view
-    pane and moves the focus to the first line of the test method.
-</p>
-<p>
-    The results of a successful test are shown in figure 1.
-</p>
-<a href="{@docRoot}images/testing/eclipse_test_results.png">
-    <img src="{@docRoot}images/testing/eclipse_test_results.png"
-         alt="Messages for a successful test" height="327px" id="TestResults"/>
-</a>
-<p class="img-caption">
-    <strong>Figure 1.</strong> Messages for a successful test.
-</p>
-<p>
-    The lower pane is for stack traces. If you highlight a failed test in the upper pane, the
-    lower pane contains a stack trace for the test. If a line corresponds to a point in your
-    test code, you can double-click it to display the code in an editor view pane, with the
-    line highlighted. For a successful test, the lower pane is empty.
-</p>
-<p>The results of a failed test are shown in figure 2.</p>
-<a href="{@docRoot}images/testing/eclipse_test_run_failure.png">
-    <img src="{@docRoot}images/testing/eclipse_test_run_failure.png"
-         alt="" height="372px" id="TestRun"/>
-</a>
-<p class="img-caption">
-    <strong>Figure 2.</strong> Messages for a test failure.
-</p>
diff --git a/docs/html/guide/developing/testing/testing_otheride.jd b/docs/html/guide/developing/testing/testing_otheride.jd
deleted file mode 100644
index 7745ae7..0000000
--- a/docs/html/guide/developing/testing/testing_otheride.jd
+++ /dev/null
@@ -1,694 +0,0 @@
-page.title=Testing from Other IDEs
-parent.title=Testing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-    <div id="qv">
-        <h2>In this document</h2>
-            <ol>
-                <li>
-                    <a href="#CreateTestProjectCommand">Working with Test Projects</a>
-                    <ol>
-                        <li>
-                            <a href="#CreateTestProject">Creating a test project</a>
-                        </li>
-                        <li>
-                            <a href="#UpdateTestProject">Updating a test project</a>
-                        </li>
-                    </ol>
-                </li>
-                <li>
-                    <a href="#CreateTestApp">Creating a Test Package</a>
-                </li>
-                <li>
-                    <a href="#RunTestsCommand">Running Tests</a>
-                    <ol>
-                        <li>
-                            <a href="#RunTestsAnt">Quick build and run with Ant</a>
-                        </li>
-                        <li>
-                            <a href="#RunTestsDevice">Running tests on a device or emulator</a>
-                        </li>
-                    </ol>
-                </li>
-                <li>
-                    <a href="#AMSyntax">Using the Instrument Command</a>
-                    <ol>
-                        <li>
-                            <a href="#AMOptionsSyntax">Instrument options</a>
-                        </li>
-                        <li>
-                            <a href="#RunTestExamples">Instrument examples</a>
-                        </li>
-                    </ol>
-                </li>
-            </ol>
-        <h2>See Also</h2>
-            <ol>
-                <li>
-                    <a href="{@docRoot}guide/topics/testing/testing_android.html">
-                        Testing Fundamentals</a>
-                </li>
-                <li>
-                    <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>
-                </li>
-            </ol>
-    </div>
-</div>
-<p>
-    This document describes how to create and run tests directly from the command line.
-    You can use the techniques described here if you are developing in an IDE other than Eclipse
-    or if you prefer to work from the command line. This document assumes that you already know how
-    to create a Android application in your programming environment. Before you start this
-    document, you should read the topic
-    <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
-    which provides an overview of Android testing.
-</p>
-<p>
-    If you are developing in Eclipse with ADT, you can set up and run your tests
-    directly in Eclipse. For more information, please read
-    <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-    Testing from Eclipse with ADT</a>.
-</p>
-<h2 id="CreateTestProjectCommand">Working with Test Projects</h2>
-<p>
-    You use the <code>android</code> tool to create test projects.
-    You also use <code>android</code> to convert existing test code into an Android test project,
-    or to add the <code>run-tests</code> Ant target to an existing Android test project.
-    These operations are described in more detail in the section <a href="#UpdateTestProject">
-    Updating a test project</a>. The <code>run-tests</code> target is described in
-    <a href="#RunTestsAnt">Quick build and run with Ant</a>.
-</p>
-<h3 id="CreateTestProject">Creating a test project</h3>
-<p>
-    To create a test project with the <code>android</code> tool, enter:
-</p>
-<pre>
-android create test-project -m &lt;main_path&gt; -n &lt;project_name&gt; -p &lt;test_path&gt;
-</pre>
-<p>
-    You must supply all the flags. The following table explains them in detail:
-</p>
-<table>
-    <tr>
-        <th>Flag</th>
-        <th>Value</th>
-        <th>Description</th>
-    </tr>
-    <tr>
-        <td><code>-m, --main</code></td>
-        <td>
-            Path to the project of the application under test, relative to the test package
-            directory.
-        </td>
-        <td>
-            For example, if the application under test is in <code>source/HelloAndroid</code>, and
-            you want to create the test project in <code>source/HelloAndroidTest</code>, then the
-            value of <code>--main</code> should be <code>../HelloAndroid</code>.
-        <p>
-            To learn more about choosing the location of test projects, please read
-            <a href="{@docRoot}guide/topics/testing/testing_android.html#TestProjects">
-            Testing Fundamentals</a>.
-        </p>
-        </td>
-    </tr>
-    <tr>
-        <td><code>-n, --name</code></td>
-        <td>Name that you want to give the test project.</td>
-        <td>&nbsp;</td>
-    </tr>
-    <tr>
-        <td><code>-p, --path</code></td>
-        <td>Directory in which you want to create the new test project.</td>
-        <td>
-            The <code>android</code> tool creates the test project files and directory structure
-            in this directory. If the directory does not exist, <code>android</code> creates it.
-        </td>
-    </tr>
-</table>
-<p>
-    If the operation is successful, <code>android</code> lists to STDOUT the names of the files
-    and directories it has created.
-</p>
-<p>
-    This creates a new test project with the appropriate directories and build files. The directory
-    structure and build file contents are identical to those in a regular Android application
-    project. They are described in detail in the topic
-    <a href="{@docRoot}guide/developing/projects/index.html">Managing Projects</a>.
-</p>
-<p>
-    The operation also creates an <code>AndroidManifest.xml</code> file with instrumentation
-    information. When you run the test, Android uses this information to load the application you
-    are testing and control it with instrumentation.
-</p>
-<p>
-    For example, suppose you create the <a href="{@docRoot}resources/tutorials/hello-world.html">
-    Hello, World</a> tutorial application in the directory <code>~/source/HelloAndroid</code>.
-    In the tutorial, this application uses the package name <code>com.example.helloandroid</code>
-    and the activity name <code>HelloAndroid</code>. You can to create the test for this in
-    <code>~/source/HelloAndroidTest</code>. To do so, you enter:
-</p>
-<pre>
-$ cd ~/source
-$ android create test-project -m ../HelloAndroid -n HelloAndroidTest -p HelloAndroidTest
-</pre>
-<p>
-    This creates a directory called <code>~/src/HelloAndroidTest</code>. In the new directory you
-    see the file <code>AndroidManifest.xml</code>. This file contains the following
-    instrumentation-related elements and attributes:
-</p>
-<ul>
-    <li>
-        <code>&lt;application&gt;</code>: to contain the
-        <code>&lt;uses-library&gt;</code> element.
-    </li>
-    <li>
-        <code>&lt;uses-library android:name=&quot;android.test.runner&quot;</code>:
-        specifies this testing application uses the <code>android.test.runner</code> library.
-    </li>
-    <li>
-        <code>&lt;instrumentation&gt;</code>: contains attributes that control Android
-        instrumentation. The attributes are:
-        <ul>
-            <li>
-                <code>android:name=&quot;android.test.InstrumentationTestRunner&quot;</code>:
-                {@link android.test.InstrumentationTestRunner} runs test cases. It extends both
-                JUnit test case runner classes and Android instrumentation classes.
-            </li>
-            <li>
-                <code>android:targetPackage=&quot;com.example.helloandroid&quot;</code>: specifies
-                that the tests in HelloAndroidTest should be run against the application with the
-                <em>Android</em> package name <code>com.example.helloandroid</code>. This is the
-                package name of the <a
-                href="{@docRoot}resources/tutorials/hello-world.html">Hello, World</a>
-                tutorial application.
-            </li>
-            <li>
-                <code>android:label=&quot;Tests for .HelloAndroid&quot;</code>: specifies a
-                user-readable label for the instrumentation class. By default,
-                the <code>android</code> tool gives it the value &quot;Tests for &quot; plus
-                the name of the main Activity of the application under test.
-            </li>
-        </ul>
-    </li>
-</ul>
-<h3 id="UpdateTestProject">Updating a test project</h3>
-<p>
-    You use the <code>android</code> tool when you need to change the path to the
-    project of the application under test. If you are changing an existing test project created in
-    Eclipse with ADT so that you can also build and run it from the command line, you must use the
-    "create" operation. See the section <a href="#CreateTestProject">Creating a test project</a>.
-</p>
-<p class="note">
-    <strong>Note:</strong> If you change the Android package name of the application under test,
-    you must <em>manually</em> change the value of the <code>&lt;android:targetPackage&gt;</code>
-    attribute within the <code>AndroidManifest.xml</code> file of the test package.
-    Running <code>android update test-project</code> does not do this.
-</p>
-<p>
-  To update a test project with the <code>android</code> tool, enter:
-</p>
-<pre>android update test-project -m &lt;main_path&gt; -p &lt;test_path&gt;</pre>
-
-<table>
-    <tr>
-        <th>Flag</th>
-        <th>Value</th>
-        <th>Description</th>
-    </tr>
-    <tr>
-        <td><code>-m, --main</code></td>
-        <td>The path to the project of the application under test, relative to the test project</td>
-        <td>
-            For example, if the application under test is in <code>source/HelloAndroid</code>, and
-            the test project is in <code>source/HelloAndroidTest</code>, then the value for
-            <code>--main</code> is <code>../HelloAndroid</code>.
-        </td>
-    </tr>
-    <tr>
-        <td><code>-p, --path</code></td>
-        <td>The of the test project.</td>
-        <td>
-            For example, if the test project is in <code>source/HelloAndroidTest</code>, then the
-            value for <code>--path</code> is <code>HelloAndroidTest</code>.
-        </td>
-    </tr>
-</table>
-<p>
-    If the operation is successful, <code>android</code> lists to STDOUT the names of the files
-    and directories it has created.
-</p>
-<h2 id="CreateTestApp">Creating a Test Package</h2>
-<p>
-    Once you have created a test project, you populate it with a test package.
-    The application does not require an {@link android.app.Activity Activity},
-    although you can define one if you wish. Although your test package can
-    combine Activities, Android test class extensions, JUnit extensions, or
-    ordinary classes, you should extend one of the Android test classes or JUnit classes,
-    because these provide the best testing features.
-</p>
-<p>
-    If you run your tests with {@link android.test.InstrumentationTestRunner}
-    (or a related test runner), then it will run all the methods in each class. You can modify
-    this behavior by using the {@link junit.framework.TestSuite TestSuite} class.
-</p>
-
-<p>
-    To create a test package, start with one of Android's test classes in the Java package
-    {@link android.test android.test}. These extend the JUnit
-    {@link junit.framework.TestCase TestCase} class. With a few exceptions, the Android test
-    classes also provide instrumentation for testing.
-</p>
-<p>
-    For test classes that extend {@link junit.framework.TestCase TestCase}, you probably want to
-    override the <code>setUp()</code> and <code>tearDown()</code> methods:
-</p>
-<ul>
-    <li>
-        <code>setUp()</code>: This method is invoked before any of the test methods in the class.
-        Use it to set up the environment for the test. You can use <code>setUp()</code>
-        to instantiate a new <code>Intent</code> object with the action <code>ACTION_MAIN</code>.
-        You can then use this intent to start the Activity under test.
-        <p class="note">
-            <strong>Note:</strong> If you override this method, call
-            <code>super.setUp()</code> as the first statement in your code.
-        </p>
-    </li>
-    <li>
-        <code>tearDown()</code>: This method is invoked after all the test methods in the class. Use
-        it to do garbage collection and re-setting before moving on to the next set of tests.
-        <p class="note"><strong>Note:</strong> If you override this method, you must call
-        <code>super.tearDown()</code> as the <em>last</em> statement in your code.</p>
-    </li>
-</ul>
-<p>
-    Another useful convention is to add the method <code>testPreConditions()</code> to your test
-    class. Use this method to test that the application under test is initialized correctly. If this
-    test fails, you know that that the initial conditions were in error. When this happens, further
-    test results are suspect, regardless of whether or not the tests succeeded.
-</p>
-<p>
-    To learn more about creating test packages, see the topic <a
-    href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
-    which provides an overview of Android testing. If you prefer to follow a tutorial,
-    try the <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-    tutorial, which leads you through the creation of tests for an actual Android application.
-</p>
-<h2 id="RunTestsCommand">Running Tests</h2>
-<p>
-    You run tests from the command line, either with Ant or with an
-    <a href="{@docRoot}guide/developing/tools/adb.html">
-    Android Debug Bridge (adb)</a> shell.
-</p>
-<h3 id="RunTestsAnt">Quick build and run with Ant</h3>
-<p>
-    You can use Ant to run all the tests in your test project, using the target
-    <code>run-tests</code>, which is created automatically when you create a test project with
-    the <code>android</code> tool.
-</p>
-<p>
-    This target re-builds your main project and test project if necessary, installs the test
-    application to the current AVD or device, and then runs all the test classes in the test
-    application. The results are directed to <code>STDOUT</code>.
-</p>
-<p>
-    You can update an existing test project to use this feature. To do this, use the
-    <code>android</code> tool with the <code>update test-project</code> option. This is described
-    in the section <a href="#UpdateTestProject">Updating a test project</a>.
-</p>
-<h3 id="RunTestsDevice">Running tests on a device or emulator</h3>
-<p>
-    When you run tests from the command line with
-    <a href="{@docRoot}guide/developing/tools/adb.html">
-    Android Debug Bridge (adb)</a>, you get more options for choosing the tests
-    to run than with any other method. You can select individual test methods, filter tests
-    according to their annotation, or specify testing options. Since the test run is controlled
-    entirely from a command line, you can customize your testing with shell scripts in various ways.
-</p>
-<p>
-    To run a test from the command line, you run <code>adb shell</code> to start a command-line
-    shell on your device or emulator, and then in the shell run the <code>am instrument</code>
-    command. You control <code>am</code> and your tests with command-line flags.
-</p>
-<p>
-    As a shortcut, you can start an <code>adb</code> shell, call <code>am instrument</code>, and
-    specify command-line flags all on one input line. The shell opens on the device or emulator,
-    runs your tests, produces output, and then returns to the command line on your computer.
-</p>
-<p>
-    To run a test with <code>am instrument</code>:
-</p>
-<ol>
-    <li>
-        If necessary, rebuild your main application and test package.
-    </li>
-    <li>
-        Install your test package and main application Android package files
-        (<code>.apk</code> files) to your current Android device or emulator</li>
-    <li>
-        At the command line, enter:
-<pre>
-$ adb shell am instrument -w &lt;test_package_name&gt;/&lt;runner_class&gt;
-</pre>
-        <p>
-            where <code>&lt;test_package_name&gt;</code> is the Android package name of your test
-            application, and <code>&lt;runner_class&gt;</code> is the name of the Android test
-            runner class you are using. The Android package name is the value of the
-            <code>package</code> attribute of the <code>manifest</code> element in the manifest file
-            (<code>AndroidManifest.xml</code>) of your test package. The Android test runner
-            class is usually {@link android.test.InstrumentationTestRunner}.
-        </p>
-        <p>
-            Your test results appear in <code>STDOUT</code>.
-        </p>
-    </li>
-</ol>
-<p>
-    This operation starts an <code>adb</code> shell, then runs <code>am instrument</code>
-    with the specified parameters. This particular form of the command will run all of the tests
-    in your test package. You can control this behavior with flags that you pass to
-    <code>am instrument</code>. These flags are described in the next section.
-</p>
-<h2 id="AMSyntax">Using the am instrument Command</h2>
-<p>
-    The general syntax of the <code>am instrument</code> command is:
-</p>
-<pre>
-    am instrument [flags] &lt;test_package&gt;/&lt;runner_class&gt;
-</pre>
-<p>
-    The main input parameters to <code>am instrument</code> are described in the following table:
-</p>
-<table>
-    <tr>
-        <th>
-            Parameter
-        </th>
-        <th>
-            Value
-        </th>
-        <th>
-            Description
-        </th>
-    </tr>
-    <tr>
-        <td>
-            <code>&lt;test_package&gt;</code>
-        </td>
-        <td>
-            The Android package name of the test package.
-        </td>
-        <td>
-            The value of the <code>package</code> attribute of the <code>manifest</code>
-            element in the test package's manifest file.
-        </td>
-    </tr>
-    <tr>
-        <td>
-            <code>&lt;runner_class&gt;</code>
-        </td>
-        <td>
-            The class name of the instrumented test runner you are using.
-        </td>
-        <td>
-            This is usually {@link android.test.InstrumentationTestRunner}.
-        </td>
-    </tr>
-</table>
-<p>
-    The flags for <code>am instrument</code> are described in the following table:
-</p>
-<table>
-    <tr>
-        <th>
-            Flag
-        </th>
-        <th>
-            Value
-        </th>
-        <th>
-            Description
-        </th>
-    </tr>
-    <tr>
-        <td>
-            <code>-w</code>
-        </td>
-        <td>
-            (none)
-        </td>
-        <td>
-            Forces <code>am instrument</code> to wait until the instrumentation terminates
-            before terminating itself. The net effect is to keep the shell open until the tests
-            have finished. This flag is not required, but if you do not use it, you will not
-            see the results of your tests.
-        </td>
-    </tr>
-    <tr>
-        <td>
-            <code>-r</code>
-        </td>
-        <td>
-            (none)
-        </td>
-        <td>
-            Outputs results in raw format. Use this flag when you want to collect
-            performance measurements, so that they are not formatted as test results. This flag is
-            designed for use with the flag <code>-e perf true</code> (documented in the section
-            <a href="#AMOptionsSyntax">Instrument options</a>).
-        </td>
-    </tr>
-    <tr>
-        <td>
-            <code>-e</code>
-        </td>
-        <td>
-             &lt;test_options&gt;
-        </td>
-        <td>
-            Provides testing options as key-value pairs. The
-            <code>am instrument</code> tool passes these to the specified instrumentation class
-            via its <code>onCreate()</code> method. You can specify multiple occurrences of
-            <code>-e &lt;test_options&gt;</code>. The keys and values are described in the
-            section <a href="#AMOptionsSyntax">am instrument options</a>.
-            <p>
-                The only instrumentation class that uses these key-value pairs is
-                {@link android.test.InstrumentationTestRunner} (or a subclass). Using them with
-                any other class has no effect.
-            </p>
-        </td>
-    </tr>
-</table>
-
-<h3 id="AMOptionsSyntax">am instrument options</h3>
-<p>
-    The <code>am instrument</code> tool passes testing options to
-    <code>InstrumentationTestRunner</code> or a subclass in the form of key-value pairs,
-    using the <code>-e</code> flag, with this syntax:
-</p>
-<pre>
-    -e &lt;key&gt; &lt;value&gt;
-</pre>
-<p>
-    Some keys accept multiple values. You specify multiple values in a comma-separated list.
-    For example, this invocation of <code>InstrumentationTestRunner</code> provides multiple
-    values for the <code>package</code> key:
-</p>
-<pre>
-$ adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
-&gt; com.android.test/android.test.InstrumentationTestRunner
-</pre>
-<p>
-    The following table describes the key-value pairs and their result. Please review the
-    <strong>Usage Notes</strong> following the table.
-</p>
-<table>
-    <tr>
-        <th>Key</th>
-        <th>Value</th>
-        <th>Description</th>
-    </tr>
-    <tr>
-        <td>
-            <code>package</code>
-        </td>
-        <td>
-            &lt;Java_package_name&gt;
-        </td>
-        <td>
-            The fully-qualified <em>Java</em> package name for one of the packages in the test
-            application. Any test case class that uses this package name is executed. Notice that
-            this is not an <em>Android</em> package name; a test package has a single
-            Android package name but may have several Java packages within it.
-        </td>
-    </tr>
-    <tr>
-        <td rowspan="2"><code>class</code></td>
-        <td>&lt;class_name&gt;</td>
-        <td>
-            The fully-qualified Java class name for one of the test case classes. Only this test
-            case class is executed.
-        </td>
-    </tr>
-    <tr>
-        <td>&lt;class_name&gt;<strong>#</strong>method name</td>
-        <td>
-            A fully-qualified test case class name, and one of its methods. Only this method is
-            executed. Note the hash mark (#) between the class name and the method name.
-        </td>
-    </tr>
-    <tr>
-        <td><code>func</code></td>
-        <td><code>true</code></td>
-        <td>
-            Runs all test classes that extend {@link android.test.InstrumentationTestCase}.
-        </td>
-    </tr>
-    <tr>
-        <td><code>unit</code></td>
-        <td><code>true</code></td>
-        <td>
-            Runs all test classes that do <em>not</em> extend either
-            {@link android.test.InstrumentationTestCase} or
-            {@link android.test.PerformanceTestCase}.
-        </td>
-    </tr>
-    <tr>
-        <td><code>size</code></td>
-        <td>
-            [<code>small</code> | <code>medium</code> | <code>large</code>]
-        </td>
-        <td>
-            Runs a test method annotated by size. The  annotations are <code>@SmallTest</code>,
-            <code>@MediumTest</code>, and <code>@LargeTest</code>.
-        </td>
-    </tr>
-    <tr>
-        <td><code>perf</code></td>
-        <td><code>true</code></td>
-        <td>
-            Runs all test classes that implement {@link android.test.PerformanceTestCase}.
-            When you use this option, also specify the <code>-r</code> flag for
-            <code>am instrument</code>, so that the output is kept in raw format and not
-            re-formatted as test results.
-        </td>
-    </tr>
-    <tr>
-        <td><code>debug</code></td>
-        <td><code>true</code></td>
-        <td>
-            Runs tests in debug mode.
-        </td>
-    </tr>
-    <tr>
-        <td><code>log</code></td>
-        <td><code>true</code></td>
-        <td>
-            Loads and logs all specified tests, but does not run them. The test
-            information appears in <code>STDOUT</code>. Use this to verify combinations of other
-            filters and test specifications.
-        </td>
-    </tr>
-    <tr>
-        <td><code>emma</code></td>
-        <td><code>true</code></td>
-        <td>
-            Runs an EMMA code coverage analysis and writes the output to
-            <code>/data//coverage.ec</code> on the device. To override the file location, use the
-            <code>coverageFile</code> key that is described in the following entry.
-            <p class="note">
-                <strong>Note:</strong> This option requires an EMMA-instrumented build of the test
-                application, which you can generate with the <code>coverage</code> target.
-            </p>
-        </td>
-    </tr>
-    <tr>
-        <td><code>coverageFile</code></td>
-        <td><code>&lt;filename&gt;</code></td>
-        <td>
-            Overrides the default location of the EMMA coverage file on the device. Specify this
-            value as a path and filename in UNIX format. The default filename is described in the
-            entry for the <code>emma</code> key.
-        </td>
-    </tr>
-</table>
-<strong><code>-e</code> Flag Usage Notes</strong>
-<ul>
-    <li>
-        <code>am instrument</code> invokes
-        {@link android.test.InstrumentationTestRunner#onCreate(Bundle)}
-        with a {@link android.os.Bundle} containing the key-value pairs.
-    </li>
-    <li>
-        The <code>package</code> key takes precedence over the <code>class</code> key. If you
-        specifiy a package, and then separately specify a class within that package, Android
-        will run all the tests in the package and ignore the <code>class</code> key.
-    </li>
-    <li>
-        The <code>func</code> key and <code>unit</code> key are mutually exclusive.
-    </li>
-</ul>
-<h3 id="RunTestExamples">Usage examples</h3>
-<p>
-The following sections provide examples of using <code>am instrument</code> to run tests.
-They are based on the following structure:</p>
-<ul>
-    <li>
-        The test package has the Android package name <code>com.android.demo.app.tests</code>
-    </li>
-    <li>
-        There are three test classes:
-        <ul>
-            <li>
-                <code>UnitTests</code>, which contains the methods
-                <code>testPermissions</code> and <code>testSaveState</code>.
-            </li>
-            <li>
-                <code>FunctionTests</code>, which contains the methods
-                <code>testCamera</code>, <code>testXVGA</code>, and <code>testHardKeyboard</code>.
-            </li>
-            <li>
-                <code>IntegrationTests</code>,
-                which contains the method <code>testActivityProvider</code>.
-            </li>
-        </ul>
-    </li>
-    <li>
-        The test runner is {@link android.test.InstrumentationTestRunner}.
-    </li>
-</ul>
-<h4>Running the entire test package</h4>
-<p>
-    To run all of the test classes in the test package, enter:
-</p>
-<pre>
-$ adb shell am instrument -w com.android.demo.app.tests/android.test.InstrumentationTestRunner
-</pre>
-<h4>Running all tests in a test case class</h4>
-<p>
-    To run all of the tests in the class <code>UnitTests</code>, enter:
-</p>
-<pre>
-$ adb shell am instrument -w  \
-&gt; -e class com.android.demo.app.tests.UnitTests \
-&gt; com.android.demo.app.tests/android.test.InstrumentationTestRunner
-</pre>
-<p>
-  <code>am instrument</code> gets the value of the <code>-e</code> flag, detects the
-  <code>class</code> keyword, and runs all the methods in the <code>UnitTests</code> class.
-</p>
-<h4>Selecting a subset of tests</h4>
-<p>
-    To run all of the tests in <code>UnitTests</code>, and the <code>testCamera</code> method in
-    <code>FunctionTests</code>, enter:
-</p>
-<pre>
-$ adb shell am instrument -w \
-&gt; -e class com.android.demo.app.tests.UnitTests,com.android.demo.app.tests.FunctionTests#testCamera \
-&gt; com.android.demo.app.tests/android.test.InstrumentationTestRunner
-</pre>
-<p>
-    You can find more examples of the command in the documentation for
-    {@link android.test.InstrumentationTestRunner}.
-</p>
diff --git a/docs/html/guide/developing/tools/MonkeyDevice.jd b/docs/html/guide/developing/tools/MonkeyDevice.jd
deleted file mode 100644
index abcf8fd..0000000
--- a/docs/html/guide/developing/tools/MonkeyDevice.jd
+++ /dev/null
@@ -1,1355 +0,0 @@
-page.title=MonkeyDevice
-parent.title=monkeyrunner
-parent.link=index.html
-@jd:body
-<style>
-    h4.jd-details-title {background-color: #DEE8F1;}
-</style>
-<p>
-    A monkeyrunner class that represents a device or emulator accessible by the workstation running
-<code><a href="{@docRoot}guide/developing/tools/monkeyrunner_concepts.html">monkeyrunner</a></code>.
-</p>
-<p>
-    This class is used to control an Android device or emulator. The methods send UI events,
-    retrieve information, install and remove applications, and run applications.
-</p>
-<p>
-    You normally do not have to create an instance of <code>MonkeyDevice</code>. Instead, you
-    use
-<code><a href="{@docRoot}guide/developing/tools/MonkeyRunner.html#waitForConnection">
-MonkeyRunner.waitForConnection()</a></code> to create a new object from a connection to a device or
-emulator. For example, instead of
-using:</p>
-<pre>
-newdevice = MonkeyDevice()
-</pre>
-<p>
-    you would use:
-</p>
-<pre>
-newdevice = MonkeyRunner.waitForConnection()
-</pre>
-<h2>Summary</h2>
-    <table id="constants" class="jd-sumtable" style="background-color: white;">
-       <tr>
-            <th colspan="12" style="background-color: #E2E2E2">Constants</th>
-       </tr>
-        <tr class="api" style="background-color: white;">
-            <td class="jd-typecol"><em>string</em></td>
-            <td class="jd-linkcol"><a href="#ACTION_DOWN">DOWN</a></td>
-            <td class="jd-descrcol" width="100%">
-                Use this with the <code>type</code> argument of
-                <code><a href="#press">press()</a></code> or <code><a href="#touch">touch()</a>
-                </code>
-                to send a DOWN event.
-            </td>
-        </tr>
-        <tr class="api" style="background-color: white;">
-            <td class="jd-typecol"><em>string</em></td>
-            <td class="jd-linkcol"><a href="#ACTION_UP">UP</a></td>
-            <td class="jd-descrcol" width="100%">
-                Use this with the <code>type</code> argument of
-                <code><a href="#press">press()</a></code> or <code><a href="#touch">touch()</a>
-                </code>
-                to send an UP event.
-            </td>
-        </tr>
-        <tr class="api" style="background-color: white;">
-            <td class="jd-typecol"><em>string</em></td>
-            <td class="jd-linkcol"><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></td>
-            <td class="jd-descrcol" width="100%">
-                Use this with the <code>type</code> argument of
-                <code><a href="#press">press()</a></code> or <code><a href="#touch">touch()</a>
-                </code>
-                to send a DOWN event immediately followed by an UP event.
-            </td>
-        </tr>
-    </table>
-<table id="pubmethods" class="jd-sumtable">
-    <tr>
-        <th colspan="12" style="background-color: #E2E2E2">Methods</th>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#broadcastIntent">broadcastIntent</a>
-                </span>
-                (<em>string</em> uri,
-                <em>string</em> action,
-                <em>string</em> data,
-                <em>string</em> mimetype,
-                <em>iterable</em> categories
-                <em>dictionary</em> extras,
-                <em>component</em> component,
-                <em>iterable</em> flags)
-            </nobr>
-            <div class="jd-descrdiv">
-                Broadcasts an Intent to this device, as if the Intent were coming from an
-                application.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#drag">drag</a>
-                </span>
-                (<em>tuple</em> start,
-                <em>tuple</em> end,
-                <em>float</em> duration,
-                <em>integer</em> steps)
-            </nobr>
-            <div class="jd-descrdiv">
-                Simulates a drag gesture (touch, hold, and move) on this device's screen.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>object</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#getProperty">getProperty</a>
-                </span>
-                (<em>string</em> key)
-            </nobr>
-            <div class="jd-descrdiv">
-                Given the name of a system environment variable, returns its value for this device.
-                The available variable names are listed in the <a href="#getProperty">
-                detailed description</a> of this method.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>object</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#getSystemProperty">getSystemProperty</a>
-                </span>
-                (<em>string</em> key)
-            </nobr>
-            <div class="jd-descrdiv">
-.               The API equivalent of <code>adb shell getprop &lt;key&gt;. This is provided for use
-                by platform developers.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#installPackage">installPackage</a>
-                </span>
-                (<em>string</em> path)
-            </nobr>
-            <div class="jd-descrdiv">
-                Installs the Android application or test package contained in packageFile onto this
-                device. If the application or test package is already installed, it is replaced.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>dictionary</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#instrument">instrument</a>
-                </span>
-                (<em>string</em> className,
-                <em>dictionary</em> args)
-            </nobr>
-            <div class="jd-descrdiv">
-                Runs the specified component under Android instrumentation, and returns the results
-                in a dictionary whose exact format is dictated by the component being run. The
-                component must already be present on this device.
-            </div>
-        </td>
-    </tr>
-    <tr class="api">
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#press">press</a>
-                </span>
-                (<em>string</em> name,
-                <em>dictionary</em> type)
-            </nobr>
-            <div class="jd-descrdiv">
-                Sends the key event specified by type to the key specified by
-                keycode.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#reboot">reboot</a>
-                </span>
-                (<em>string</em> into)
-            </nobr>
-            <div class="jd-descrdiv">
-                Reboots this device into the bootloader specified by bootloadType.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#removePackage">removePackage</a>
-                </span>
-                (<em>string</em> package)
-            </nobr>
-            <div class="jd-descrdiv">
-                Deletes the specified package from this device, including its data and cache.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>object</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#shell">shell</a>
-                </span>
-                (<em>string</em> cmd)
-            </nobr>
-            <div class="jd-descrdiv">
-                Executes an <code>adb</code> shell command and returns the result, if any.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#startActivity">startActivity</a>
-                </span>
-                (<em>string</em> uri,
-                <em>string</em> action,
-                <em>string</em> data,
-                <em>string</em> mimetype,
-                <em>iterable</em> categories
-                <em>dictionary</em> extras,
-                <em>component</em> component,
-                <em>flags</em>)
-            </nobr>
-            <div class="jd-descrdiv">
-                Starts an Activity on this device by sending an Intent constructed from the
-                supplied arguments.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <code>
-                <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">
-                        MonkeyImage
-                    </a>
-                </code>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#takeSnapshot">takeSnapshot</a>()
-                </span>
-            </nobr>
-            <div class="jd-descrdiv">
-                Captures the entire screen buffer of this device, yielding a
-                <code>
-                <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">
-                        MonkeyImage
-                </a>
-                </code> object containing a screen capture of the current display.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#touch">touch</a>
-                </span>
-               (<em>integer</em> x,
-                 <em>integer</em> y,
-                 <em>integer</em> type)
-            </nobr>
-            <div class="jd-descrdiv">
-                Sends a touch event specified by type to the screen location specified
-                by x and y.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#touch">type</a>
-                </span>
-                   (<em>string</em> message)
-            </nobr>
-            <div class="jd-descrdiv">
-                Sends the characters contained in message to this device, as if they
-                had been typed on the device's keyboard. This is equivalent to calling
-                <code><a href="#press">press()</a></code> for each keycode in <code>message</code>
-                using the key event type <code><a href="#ACTION_DOWN_AND_UP"></a>DOWN_AND_UP</code>.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#touch">wake</a>
-                </span>
-                   ()
-            </nobr>
-            <div class="jd-descrdiv">
-                Wakes the screen of this device.
-            </div>
-        </td>
-    </tr>
-</table>
-<!-- ========= ENUM CONSTANTS DETAIL ======== -->
-<h2>Constants</h2>
-<A NAME="ACTION_DOWN"></a>
-<div class="jd-details api">
-    <h4 class="jd-details-title">
-        <span class="normal">
-            <em>string</em>
-        </span>
-            DOWN
-    </h4>
-    <div class="jd-details-descr">
-        <div class="jd-tagdata jd-tagdescr">
-            <p>
-                <code><a href="#press">press()</a></code> or
-                <code><a href="#press">touch()</a></code> value.
-                Specifies that a DOWN event type should be sent to the device, corresponding to
-                pressing down on a key or touching the screen.
-            </p>
-        </div>
-    </div>
-</div>
-<A NAME="ACTION_UP"></A>
-<div class="jd-details api">
-    <h4 class="jd-details-title">
-        <span class="normal">
-            <em>string</em>
-        </span>
-            UP
-    </h4>
-    <div class="jd-details-descr">
-        <div class="jd-tagdata jd-tagdescr">
-            <p>
-                <code><a href="#press">press()</a></code> or
-                <code><a href="#press">touch()</a></code> value.
-                Specifies that an UP event type should be sent to the device, corresponding to
-                releasing a key or lifting up from the screen.
-            </p>
-        </div>
-    </div>
-</div>
-<A NAME="ACTION_DOWN_AND_UP"></A>
-
-<div class="jd-details api">
-    <h4 class="jd-details-title">
-        <span class="normal">
-            <em>string</em>
-        </span>
-            DOWN_AND_UP
-    </h4>
-    <div class="jd-details-descr">
-        <div class="jd-tagdata jd-tagdescr">
-            <p>
-                <code><a href="#press">press()</a></code>,
-                <code><a href="#press">touch()</a></code> or
-                <code><a href="#type">type()</a></code> value.
-                Specifies that a DOWN event type followed by an UP event type should be sent to the
-                device, corresponding to typing a key or clicking the screen.
-            </p>
-        </div>
-    </div>
-</div>
-<!-- ========= METHOD DETAIL ======== -->
-<!-- Public methods -->
-<h2>Public Methods</h2>
-<A NAME="broadcastIntent"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">broadcastIntent</span>
-      <span class="normal">
-      (
-            <em>string</em> uri,
-            <em>string</em> action,
-            <em>string</em> data,
-            <em>string</em> mimetype,
-            <em>iterable</em> categories
-            <em>dictionary</em> extras,
-            <em>component</em> component,
-            <em>iterable</em> flags)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Broadcasts an Intent to this device, as if the Intent were coming from an
-            application. See {@link android.content.Intent Intent} for more information about the
-            arguments.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>uri</th>
-            <td>
-                The URI for the Intent.
-                (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
-            </td>
-        </tr>
-        <tr>
-            <th>action</th>
-            <td>
-                The action for this Intent
-                (see {@link android.content.Intent#setAction(java.lang.String) Intent.setAction()}).
-            </td>
-        </tr>
-        <tr>
-            <th>data</th>
-            <td>
-                The data URI for this Intent
-                (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
-            </td>
-        </tr>
-        <tr>
-            <th>mimetype</th>
-            <td>
-                The MIME type for the Intent
-                (see {@link android.content.Intent#setType(java.lang.String) Intent.setType()}).
-            </td>
-        </tr>
-        <tr>
-            <th>categories</th>
-            <td>
-                An iterable data structure containing strings that define categories for this
-                Intent
-                (see
-                {@link android.content.Intent#addCategory(java.lang.String) Intent.addCategory()}).
-            </td>
-        </tr>
-        <tr>
-            <th>extras</th>
-            <td>
-                A dictionary of extra data for this Intent
-                (see {@link android.content.Intent#putExtra(java.lang.String,java.lang.String)
-                Intent.putExtra()}
-                for an example).
-                <p>
-                    The key for each dictionary item should be a <em>string</em>. The item's value
-                    can be any simple or structured data type.
-                </p>
-            </td>
-        </tr>
-        <tr>
-            <th>component</th>
-            <td>
-                The component for this Intent (see {@link android.content.ComponentName}).
-                Using this argument will direct the Intent to a specific class within a specific
-                Android package.
-            </td>
-        </tr>
-        <tr>
-            <th>flags</th>
-            <td>
-                An iterable data structure containing flags that control how the Intent is handled
-                (see {@link android.content.Intent#setFlags(int) Intent.setFlags()}).
-            </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="drag"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">drag</span>
-      <span class="normal">
-      (
-            <em>tuple</em> start,
-            <em>tuple</em> end,
-            <em>float</em> duration,
-            <em>integer</em> steps)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Simulates a drag gesture (touch, hold, and move) on this device's screen.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>start</th>
-          <td>
-            The starting point of the drag gesture, in the form of a <em>tuple</em>
-            (x,y) where x and y are <em>integers</em>.
-          </td>
-        </tr>
-        <tr>
-          <th>end</th>
-          <td>
-            The end point of the drag gesture, in the form of a <em>tuple</em> (x,y)
-            where x and y are <em>integers</em>.
-          </td>
-        </tr>
-        <tr>
-            <th>duration</th>
-            <td>The duration of the drag gesture in seconds. The default is 1.0 seconds.</td>
-        </tr>
-        <tr>
-            <th>steps</th>
-            <td>The number of steps to take when interpolating points. The default is 10.</td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="getProperty"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>object</em>
-      </span>
-      <span class="sympad">getProperty</span>
-      <span class="normal">
-        (<em>string</em> key)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Given the name of a system environment variable, returns its value for this device.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>key</th>
-          <td>
-            The name of the system environment variable. The available variable names are listed in
-            <a href="#table1">Table 1. Property variable names</a> at the end of this topic.
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            The value of the variable. The data format varies according to the variable requested.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="getSystemProperty"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>object</em>
-      </span>
-      <span class="sympad">getSystemProperty</span>
-      <span class="normal">
-      (<em>string</em> key)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Synonym for <code><a href="#getProperty">getProperty()</a></code>.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>key</th>
-          <td>
-            The name of the system environment variable. The available variable names are listed in
-            <a href="#table1">Table 1. Property Variable Names</a>.
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            The value of the variable. The data format varies according to the variable requested.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="installPackage"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">installPackage</span>
-      <span class="normal">
-      (<em>string</em> path)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Installs the Android application or test package contained in packageFile
-            onto this device. If the application or test package is already installed, it is
-            replaced.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>path</th>
-          <td>
-            The fully-qualified path and filename of the <code>.apk</code> file to install.
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="instrument"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>dictionary</em>
-      </span>
-      <span class="sympad">instrument</span>
-      <span class="normal">
-      (
-            <em>string</em> className,
-            <em>dictionary</em> args)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Runs the specified component with Android instrumentation, and returns the results
-            in a dictionary whose exact format is dictated by the component being run. The
-            component must already be present on this device.
-        </p>
-        <p>
-            Use this method to start a test case that uses one of Android's test case classes.
-            See <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing
-            Fundamentals</a> to learn more about unit testing with the Android testing
-            framework.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>className</th>
-          <td>
-            The name of an Android component that is already installed on this device, in the
-            standard form packagename/classname, where packagename is the
-            Android package name of a <code>.apk</code> file on this device, and
-            classname is the class name of an Android component (Activity,
-            ContentProvider, Service, or BroadcastReceiver) in that file. Both
-            packagename and classname must be fully qualified. See
-            {@link android.content.ComponentName} for more details.
-          </td>
-        </tr>
-        <tr>
-          <th>args</th>
-          <td>
-            A dictionary containing flags and their values. These are passed to the component as it
-            is started. If the flag does not take a value, set its dictionary value to an empty
-            string.
-          </td>
-        </tr>
-      </table>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-        <ul class="nolist">
-            <li>
-                <p>
-                    A dictionary containing the component's output. The contents of the dictionary
-                    are defined by the component itself.
-                </p>
-                <p>
-                    If you use {@link android.test.InstrumentationTestRunner} as the class name in
-                    the componentName argument, then the result dictionary contains
-                    the single key "stream". The value of "stream" is a <em>string</em> containing
-                    the test output, as if <code>InstrumentationTestRunner</code> was run from the
-                    command line. The format of this output is described in
-                    <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-                    Testing in Other IDEs</a>.
-                </p>
-            </li>
-        </ul>
-    </div>
-    </div>
-  </div>
-</div>
-<A NAME="press"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">press</span>
-      <span class="normal">
-      (<em>string</em> name,
-      <em>integer</em> type)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Sends the key event specified by <code>type</code> to the key specified by
-            <code>keycode</code>.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>name</th>
-          <td>
-            The name of the keycode to send. See {@link android.view.KeyEvent} for a list of
-            keycode names. Use the keycode name, not its integer value.
-          </td>
-        </tr>
-        <tr>
-          <th>type</th>
-          <td>
-            The type of key event to send. The allowed values are <code><a href="#ACTION_DOWN">
-            DOWN</a></code>, <code><a href="#ACTION_UP">UP</a></code>, and
-            <code><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></code>.
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="reboot"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">reboot</span>
-      <span class="normal">
-      (<em>string</em> bootloadType)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-                Reboots this device into the bootloader specified by <code>bootloadType</code>.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>into</th>
-          <td>
-            The type of bootloader to reboot into. The allowed values are
-            "bootloader", "recovery", or "None".
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="removePackage"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">removePackage</span>
-      <span class="normal">
-      (<em>string</em> package)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Deletes the specified package from this device, including its data and cache.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>package</th>
-          <td>
-            The Android package name of an <code>.apk</code> file on this device.
-          </td>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="shell"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>object</em>
-      </span>
-      <span class="sympad">shell</span>
-      <span class="normal">
-      (<em>string</em> cmd)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Executes an <code>adb</code> shell command and returns the result, if any.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>cmd</th>
-          <td>
-            The command to execute in the <code>adb</code> shell. The form of these commands is
-            described in the topic <a href="{@docRoot}guide/developing/tools/adb.html">Android
-            Debug Bridge</a>.
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            The results of the command, if any. The format of the results is determined by the
-            command.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="startActivity"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">startActivity</span>
-      <span class="normal">
-      (
-            <em>string</em> uri,
-            <em>string</em> action,
-            <em>string</em> data,
-            <em>string</em> mimetype,
-            <em>iterable</em> categories
-            <em>dictionary</em> extras,
-            <em>component</em> component,
-            <em>iterable</em> flags)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-           Starts an Activity on this device by sending an Intent constructed from the
-           supplied arguments.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>uri</th>
-          <td>
-            The URI for the Intent.
-            (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
-          </td>
-        </tr>
-        <tr>
-            <th>action</th>
-            <td>
-                The action for the Intent
-                (see {@link android.content.Intent#setAction(java.lang.String) Intent.setAction()}).
-            </td>
-        </tr>
-        <tr>
-            <th>data</th>
-            <td>
-                The data URI for the Intent
-                (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
-            </td>
-        </tr>
-        <tr>
-            <th>mimetype</th>
-            <td>
-                The MIME type for the Intent
-                (see {@link android.content.Intent#setType(java.lang.String) Intent.setType()}).
-            </td>
-        </tr>
-        <tr>
-            <th>categories</th>
-            <td>
-                An iterable data structure containing strings that define categories for the
-                Intent
-                (see
-                {@link android.content.Intent#addCategory(java.lang.String) Intent.addCategory()}).
-            </td>
-        </tr>
-        <tr>
-            <th>extras</th>
-            <td>
-                A dictionary of extra data for the Intent
-                (see
-                {@link android.content.Intent#putExtra(java.lang.String,java.lang.String)
-                Intent.putExtra()}
-                for an example).
-                <p>
-                    The key for each dictionary item should be a <em>string</em>. The item's value
-                    can be any simple or structured data type.
-                </p>
-            </td>
-        </tr>
-        <tr>
-            <th>component</th>
-            <td>
-                The component for the Intent
-                (see {@link android.content.ComponentName}). Using this argument will direct the
-                Intent to a specific class within a specific Android package.
-            </td>
-        </tr>
-        <tr>
-            <th>flags</th>
-            <td>
-                An iterable data structure containing flags that control how the Intent is handled
-                (see {@link android.content.Intent#setFlags(int) Intent.setFlags()}).
-            </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="takeSnapshot"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <code>
-            <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">
-                MonkeyImage
-            </a>
-        </code>
-      </span>
-      <span class="sympad">takeSnapshot</span>
-      <span class="normal">
-      ()
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Captures the entire screen buffer of this device, yielding a
-            screen capture of the current display.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            A <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">
-            MonkeyImage</a> object containing the image of the current display.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="touch"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">touch</span>
-      <span class="normal">
-      (
-            <em>integer</em> x,
-            <em>integer</em> y,
-            <em>string</em> type)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Sends a touch event specified by type to the screen location specified
-            by x and y.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>x</th>
-          <td>
-            The horizontal position of the touch in actual device pixels, starting from the left of
-            the screen in its current orientation.
-          </td>
-        </tr>
-        <tr>
-          <th>y</th>
-          <td>
-            The vertical position of the touch in actual device pixels, starting from the top of
-            the screen in its current orientation.
-          </td>
-        </tr>
-        <tr>
-            <th>type</th>
-            <td>
-                The type of key event to send. The allowed values are <code><a href="#ACTION_DOWN">
-                DOWN</a></code>, <code><a href="#ACTION_UP">UP</a></code>, and
-                <code><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></code>.
-            </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="type"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">type</span>
-      <span class="normal">
-      (<em>string</em> message)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Sends the characters contained in message to this device, as if they
-            had been typed on the device's keyboard. This is equivalent to calling
-            <code><a href="#press">press()</a></code> for each keycode in <code>message</code>
-            using the key event type <code><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></code>.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>message</th>
-          <td>
-              A string containing the characters to send.
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="wake"></A>
-<div class="jd-details api">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">wake</span>
-      <span class="normal">
-      ()
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Wakes the screen of this device.
-        </p>
-    </div>
-  </div>
-</div>
-<hr></hr>
-<h2>Appendix</h2>
-    <p class="table-caption" id="table1">
-        <strong>Table 1.</strong>Property variable names used with
-        <span class="sympad"><a href="#getProperty">getProperty()</a></span> and
-        <span class="sympad"><a href="#getSystemProperty">getSystemProperty()</a></span>.
-    </p>
-    <table>
-        <tr>
-            <th>
-                Property Group
-            </th>
-            <th>
-                Property
-            </th>
-            <th>
-                Description
-            </th>
-            <th>
-                Notes
-            </th>
-        </tr>
-        <tr>
-            <td rowspan="17"><code>build</code></td>
-            <td><code>board</code></td>
-            <td>Code name for the device's system board</td>
-            <td rowspan="17">
-                See {@link android.os.Build}
-            </td>
-        </tr>
-        <tr>
-            <td><code>brand</code></td>
-            <td>The carrier or provider for which the OS is customized.</td>
-        </tr>
-            <tr>
-            <td><code>device</code></td>
-            <td>The device design name.</td>
-        </tr>
-            <tr>
-            <td><code>fingerprint</code></td>
-            <td>A unique identifier for the currently-running build.</td>
-        </tr>
-            <tr>
-            <td><code>host</code></td>
-            <td></td>
-        </tr>
-            <tr>
-            <td><code>ID</code></td>
-            <td>A changelist number or label.</td>
-        </tr>
-            <tr>
-            <td><code>model</code></td>
-            <td>The end-user-visible name for the device.</td>
-        </tr>
-            <tr>
-            <td><code>product</code></td>
-            <td>The overall product name.</td>
-        </tr>
-            <tr>
-            <td><code>tags</code></td>
-            <td>Comma-separated tags that describe the build, such as "unsigned" and "debug".</td>
-        </tr>
-            <tr>
-            <td><code>type</code></td>
-            <td>The build type, such as "user" or "eng".</td>
-        </tr>
-        <tr>
-            <td><code>user</code></td>
-            <td></td>
-        </tr>
-        <tr>
-            <td><code>CPU_ABI</code></td>
-            <td>
-                The name of the native code instruction set, in the form CPU type plus
-                ABI convention.
-            </td>
-        </tr>
-        <tr>
-            <td><code>manufacturer</code></td>
-            <td>The product/hardware manufacturer.</td>
-        </tr>
-        <tr>
-            <td><code>version.incremental</code></td>
-            <td>
-                The internal code used by the source control system to represent this version
-                of the software.
-            </td>
-        </tr>
-        <tr>
-            <td><code>version.release</code></td>
-            <td>The user-visible name of this version of the software.</td>
-        </tr>
-        <tr>
-            <td><code>version.sdk</code></td>
-            <td>The user-visible SDK version associated with this version of the OS.</td>
-        </tr>
-        <tr>
-            <td><code>version.codename</code></td>
-            <td>
-                The current development codename, or "REL" if this version of the software has been
-                released.
-            </td>
-        </tr>
-        <tr>
-            <td rowspan="3"><code>display</code></td>
-            <td><code>width</code></td>
-            <td>The device's display width in pixels.</td>
-            <td rowspan="3">
-                See
-                {@link android.util.DisplayMetrics} for details.
-            </td>
-        </tr>
-        <tr>
-            <td><code>height</code></td>
-            <td>The device's display height in pixels.</td>
-        </tr>
-        <tr>
-            <td><code>density</code></td>
-            <td>
-                The logical density of the display. This is a factor that scales
-                DIP (Density-Independent Pixel) units to the device's resolution. DIP is adjusted so
-                that 1 DIP is equivalent to one pixel on a 160 pixel-per-inch display. For example,
-                on a 160-dpi screen, density = 1.0, while on a 120-dpi screen, density = .75.
-                <p>
-                    The value does not exactly follow the real screen size, but is adjusted to
-                    conform to large changes in the display DPI. See
-                    {@link android.util.DisplayMetrics#density} for more details.
-                </p>
-            </td>
-        </tr>
-        <tr>
-            <td rowspan="6"><code>am.current</code></td>
-            <td><code>package</code></td>
-            <td>The Android package name of the currently running package.</td>
-            <td rowspan="6">
-                The <code>am.current</code> keys return information about the currently-running
-                Activity.
-            </td>
-        </tr>
-        <tr>
-            <td><code>action</code></td>
-            <td>
-                The current activity's action. This has the same format as the <code>name</code>
-                attribute of the <code>action</code> element in a package manifest.
-            </td>
-        </tr>
-        <tr>
-            <td><code>comp.class</code></td>
-            <td>
-                The class name of the component that started the current Activity. See
-                <code><a href="#comppackage">comp.package</a></code> for more details.</td>
-        </tr>
-        <tr>
-            <td><a name="comppackage"><code>comp.package</code></a></td>
-            <td>
-                The package name of the component that started the current Activity. A component
-                is specified by a package name and the name of class that the package contains.
-            </td>
-        </tr>
-        <tr>
-            <td><code>data</code></td>
-            <td>The data (if any) contained in the Intent that started the current Activity.</td>
-        </tr>
-        <tr>
-            <td><code>categories</code></td>
-            <td>The categories specified by the Intent that started the current Activity.</td>
-        </tr>
-        <tr>
-            <td rowspan="3"><code>clock</code></td>
-            <td><code>realtime</code></td>
-            <td>
-                The number of milliseconds since the device rebooted, including deep-sleep
-                time.
-            </td>
-            <td rowspan="3">
-                See {@link android.os.SystemClock} for more information.
-            </td>
-        </tr>
-        <tr>
-            <td><code>uptime</code></td>
-            <td>
-                The number of milliseconds since the device rebooted, <em>not</em> including
-                deep-sleep time
-            </td>
-        </tr>
-        <tr>
-            <td><code>millis</code></td>
-            <td>current time since the UNIX epoch, in milliseconds.</td>
-        </tr>
-    </table>
diff --git a/docs/html/guide/developing/tools/MonkeyImage.jd b/docs/html/guide/developing/tools/MonkeyImage.jd
deleted file mode 100644
index 2efc373..0000000
--- a/docs/html/guide/developing/tools/MonkeyImage.jd
+++ /dev/null
@@ -1,437 +0,0 @@
-page.title=MonkeyImage
-parent.title=monkeyrunner
-parent.link=index.html
-@jd:body
-<style>
-    h4.jd-details-title {background-color: #DEE8F1;}
-</style>
-
-<p>
-    A monkeyrunner class to hold an image of the device or emulator's screen. The image is
-    copied from the screen buffer during a screenshot. This object's methods allow you to
-    convert the image into various storage formats, write the image to a file, copy parts of
-    the image, and compare this object to other <code>MonkeyImage</code> objects.
-</p>
-<p>
-    You do not need to create new instances of <code>MonkeyImage</code>. Instead, use
-<code><a href="{@docRoot}guide/developing/tools/MonkeyDevice.html#takeSnapshot">
-MonkeyDevice.takeSnapshot()</a></code> to create a new instance from a screenshot. For example, use:
-</p>
-<pre>
-newimage = MonkeyDevice.takeSnapshot()
-</pre>
-<h2>Summary</h2>
-<table id="pubmethods" class="jd-sumtable">
-    <tr>
-        <th colspan="12" style="background-color: #E2E2E2">Methods</th>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>string</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#convertToBytes">convertToBytes</a>
-                </span>
-                (<em>string</em> format)
-            </nobr>
-            <div class="jd-descrdiv">
-                Converts the current image to a particular format and returns it as a
-                <em>string</em> that you can then access as an <em>iterable</em> of binary bytes.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>tuple</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#getRawPixel">getRawPixel</a>
-                </span>
-                (<em>integer</em> x,
-                <em>integer</em> y)
-            </nobr>
-            <div class="jd-descrdiv">
-                Returns the single pixel at the image location (x,y), as an
-                a <em>tuple</em> of <em>integer</em>, in the form (a,r,g,b).
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>integer</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#getRawPixelInt">getRawPixelInt</a>
-                </span>
-                (<em>integer</em> x,
-                 <em>integer</em> y)
-            </nobr>
-            <div class="jd-descrdiv">
-                Returns the single pixel at the image location (x,y), as
-                a 32-bit <em>integer</em>.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <code>
-                    <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">MonkeyImage</a>
-                </code>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#getSubImage">getSubImage</a>
-                </span>
-                (<em>tuple</em> rect)
-            </nobr>
-            <div class="jd-descrdiv">
-                Creates a new <code>MonkeyImage</code> object from a rectangular selection of the
-                current image.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>boolean</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#sameAs">sameAs</a>
-                </span>
-         (<code><a href="{@docRoot}guide/developing/tools/MonkeyImage.html">MonkeyImage</a></code>
-            other,
-            <em>float</em> percent)
-            </nobr>
-            <div class="jd-descrdiv">
-                Compares this <code>MonkeyImage</code> object to another and returns the result of
-                the comparison. The <code>percent</code> argument specifies the percentage
-                difference that is allowed for the two images to be "equal".
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>void</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#writeToFile">writeToFile</a>
-                </span>
-                (<em>string</em> path,
-                <em>string</em> format)
-            </nobr>
-            <div class="jd-descrdiv">
-                Writes the current image to the file specified by <code>filename</code>, in the
-                format specified by <code>format</code>.
-            </div>
-        </td>
-    </tr>
-</table>
-<!-- ========= METHOD DETAIL ======== -->
-<!-- Public methods -->
-<h2>Public Methods</h2>
-<A NAME="convertToBytes"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>string</em>
-      </span>
-      <span class="sympad">convertToBytes</span>
-      <span class="normal">
-      (
-            <em>string</em> format)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Converts the current image to a particular format and returns it as a <em>string</em>
-            that you can then access as an <em>iterable</em> of binary bytes.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>format</th>
-            <td>
-                The desired output format. All of the common raster output formats are supported.
-                The default value is "png" (Portable Network Graphics).
-            </td>
-        </tr>
-        </table>
-    </div>
-</div>
-</div>
-<A NAME="getRawPixel"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>tuple</em>
-      </span>
-      <span class="sympad">getRawPixel</span>
-      <span class="normal">
-        (<em>integer</em> x,
-         <em>integer</em> y)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Returns the single pixel at the image location (x,y), as an
-            a <em>tuple</em> of <em>integer</em>, in the form (a,r,g,b).
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>x</th>
-          <td>
-            The horizontal position of the pixel, starting with 0 at the left of the screen in the
-            orientation it had when the screenshot was taken.
-          </td>
-        </tr>
-        <tr>
-          <th>y</th>
-          <td>
-            The vertical position of the pixel, starting with 0 at the top of the screen in the
-            orientation it had when the screenshot was taken.
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            A tuple of integers representing the pixel, in the form (a,r,g,b) where
-            a is the alpha channel value, and r, g, and b are the red, green, and blue values,
-            respectively.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="getRawPixelInt"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>tuple</em>
-      </span>
-      <span class="sympad">getRawPixelInt</span>
-      <span class="normal">
-        (<em>integer</em> x,
-         <em>integer</em> y)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Returns the single pixel at the image location (x,y), as an
-            an <em>integer</em>. Use this method to economize on memory.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>x</th>
-          <td>
-            The horizontal position of the pixel, starting with 0 at the left of the screen in the
-            orientation it had when the screenshot was taken.
-          </td>
-        </tr>
-        <tr>
-          <th>y</th>
-          <td>
-            The vertical position of the pixel, starting with 0 at the top of the screen in the
-            orientation it had when the screenshot was taken.
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            The a,r,g, and b values of the pixel as 8-bit values combined into a 32-bit
-            integer, with a as the leftmost 8 bits, r the next rightmost, and so forth.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="getSubImage"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-          <code>
-              <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">MonkeyImage</a>
-          </code>
-      </span>
-      <span class="sympad">getSubImage</span>
-      <span class="normal">
-        (<em>tuple</em> rect)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-           Creates a new <code>MonkeyImage</code> object from a rectangular selection of the
-           current image.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>rect</th>
-          <td>
-            A tuple (x, y, w, h) specifying the selection. x and y specify the 0-based pixel
-            position of the upper left-hand corner of the selection. w specifies the width of the
-            region, and h specifies its height, both in units of pixels.
-            <p>
-                The image's orientation is the same as the screen orientation at the time the
-                screenshot was made.
-            </p>
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            A new <code>MonkeyImage</code> object containing the selection.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="sameAs"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>boolean</em>
-      </span>
-      <span class="sympad">sameAs</span>
-      <span class="normal">
-      (
-       <code>
-           <a href="{@docRoot}guide/developing/tools/MonkeyImage.html">MonkeyImage</a>
-       </code> otherImage,
-       <em>float</em> percent
-      )
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-           Compares this <code>MonkeyImage</code> object to another and returns the result of
-           the comparison. The <code>percent</code> argument specifies the percentage
-           difference that is allowed for the two images to be "equal".
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>other</th>
-          <td>
-            Another <code>MonkeyImage</code> object to compare to this one.
-          </td>
-        </tr>
-        <tr>
-          <th>
-            percent
-          </th>
-          <td>
-            A float in the range 0.0 to 1.0, inclusive, indicating
-            the percentage of pixels that need to be the same for the method to return
-            <code>true</code>. The default is 1.0, indicating that all the pixels
-            must match.
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            Boolean <code>true</code> if the images match, or boolean <code>false</code> otherwise.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="writeToFile"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">writeToFile</span>
-      <span class="normal">
-      (<em>string</em> filename,
-       <em>string</em> format)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-           Writes the current image to the file specified by <code>filename</code>, in the
-           format specified by <code>format</code>.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>path</th>
-          <td>
-            The fully-qualified filename and extension of the output file.
-          </td>
-        </tr>
-        <tr>
-            <th>
-                format
-            </th>
-            <td>
-                The output format to use for the file. If no format is provided, then the
-                method tries to guess the format from the filename's extension. If no
-                extension is provided and no format is specified, then the default format of
-                "png" (Portable Network Graphics) is used.
-            </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
diff --git a/docs/html/guide/developing/tools/MonkeyRunner.jd b/docs/html/guide/developing/tools/MonkeyRunner.jd
deleted file mode 100644
index ea8d69e..0000000
--- a/docs/html/guide/developing/tools/MonkeyRunner.jd
+++ /dev/null
@@ -1,448 +0,0 @@
-page.title=MonkeyRunner
-parent.title=monkeyrunner
-parent.link=index.html
-@jd:body
-
-<style>
-    h4.jd-details-title {background-color: #DEE8F1;}
-</style>
-<p>
-    A monkeyrunner class that contains static utility methods.
-</p>
-<h2>Summary</h2>
-<table id="pubmethods" class="jd-sumtable">
-    <tr>
-        <th colspan="12" style="background-color: #E2E2E2">Methods</th>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#alert">alert</a>
-                </span>
-                (<em>string</em> message,
-                 <em>string</em> title,
-                 <em>string</em> okTitle)
-            </nobr>
-            <div class="jd-descrdiv">
-                Displays an alert dialog to the process running the current
-                program.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>integer</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#choice">choice</a>
-                </span>
-                (<em>string</em> message,
-                 <em>iterable</em> choices,
-                 <em>string</em> title)
-            </nobr>
-            <div class="jd-descrdiv">
-                Displays a dialog with a list of choices to the process running the current program.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#help">help</a>
-                </span>
-                (<em>string</em> format)
-            </nobr>
-            <div class="jd-descrdiv">
-                Displays the monkeyrunner API reference in a style similar to that of Python's
-                <code>pydoc</code> tool, using the specified format.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <em>string</em>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#input">input</a>
-                </span>
-                (<em>string</em> message,
-                 <em>string</em> initialValue,
-                 <em>string</em> title,
-                 <em>string</em> okTitle,
-                 <em>string</em> cancelTitle)
-            </nobr>
-            <div class="jd-descrdiv">
-                Displays a dialog that accepts input.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                void
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#sleep">sleep</a>
-                </span>
-                (<em>float</em> seconds)
-            </nobr>
-            <div class="jd-descrdiv">
-                Pauses the current program for the specified number of seconds.
-            </div>
-        </td>
-    </tr>
-    <tr class="api" >
-        <td class="jd-typecol">
-            <nobr>
-                <code>
-                    <a href="{@docRoot}guide/developing/tools/MonkeyDevice.html">MonkeyDevice</a>
-                </code>
-            </nobr>
-        </td>
-        <td class="jd-linkcol" width="100%">
-            <nobr>
-                <span class="sympad">
-                    <a href="#waitForConnection">waitForConnection</a>
-                </span>
-                (<em>float</em> timeout,
-                <em>string</em> deviceId)
-            </nobr>
-            <div class="jd-descrdiv">
-                Tries to make a connection between the <code>monkeyrunner</code> backend and the
-                specified device or emulator.
-            </div>
-        </td>
-    </tr>
-</table>
-<!-- ========= METHOD DETAIL ======== -->
-<!-- Public methods -->
-<h2>Public Methods</h2>
-<A NAME="alert"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>string</em>
-      </span>
-      <span class="sympad">alert</span>
-      <span class="normal">
-      (
-            <em>string</em> message,
-            <em>string</em> title,
-            <em>string</em> okTitle)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Displays an alert dialog to the process running the current
-            program. The dialog is modal, so the program pauses until the user clicks the dialog's
-            button.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>message</th>
-            <td>
-                The message to display in the dialog.
-            </td>
-        </tr>
-        <tr>
-            <th>title</th>
-            <td>
-                The dialog's title. The default value is "Alert".
-            </td>
-        </tr>
-        <tr>
-            <th>okTitle</th>
-            <td>
-                The text displayed in the dialog button. The default value is "OK".
-            </td>
-        </tr>
-        </table>
-    </div>
-</div>
-</div>
-<A NAME="choice"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>integer</em>
-      </span>
-      <span class="sympad">choice</span>
-      <span class="normal">
-        (<em>string</em> message,
-         <em>iterable</em> choices,
-         <em>string</em> title)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Displays a dialog with a list of choices to the process running the current program. The
-            dialog is modal, so the program pauses until the user clicks one of the dialog's
-            buttons.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>message</th>
-          <td>
-            The prompt message displayed in the dialog.
-          </td>
-        </tr>
-        <tr>
-          <th>choices</th>
-          <td>
-            A Python iterable containing one or more objects that are displayed as strings. The
-            recommended form is an array of strings.
-          </td>
-        </tr>
-        <tr>
-            <th>
-                title
-            </th>
-            <td>
-               The dialog's title. The default is "Input".
-            </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            If the user makes a selection and clicks the "OK" button, the method returns
-            the 0-based index of the selection within the iterable.
-            If the user clicks the "Cancel" button, the method returns -1.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="help"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">help</span>
-      <span class="normal">
-        (<em>string</em> format)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Displays the monkeyrunner API reference in a style similar to that of Python's
-            <code>pydoc</code> tool, using the specified format.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>format</th>
-          <td>
-            The markup format to use in the output. The possible values are "text" for plain text
-            or "html" for HTML.
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="input"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        <em>string</em>
-      </span>
-      <span class="sympad">input</span>
-      <span class="normal">
-        (<em>string</em> message
-         <em>string</em> initialValue,
-         <em>string</em> title,
-         <em>string</em> okTitle,
-         <em>string</em> cancelTitle)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Displays a dialog that accepts input and returns it to the program. The dialog is
-            modal, so the program pauses until the user clicks one of the dialog's buttons.
-        </p>
-        <p>
-            The dialog contains two buttons, one of which displays the okTitle value
-            and the other the cancelTitle value. If the user clicks the okTitle button,
-            the current value of the input box is returned. If the user clicks the cancelTitle
-            button, an empty string is returned.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>message</th>
-          <td>
-            The prompt message displayed in the dialog.
-          </td>
-        </tr>
-        <tr>
-          <th>initialValue</th>
-          <td>
-            The initial value to display in the dialog. The default is an empty string.
-          </td>
-        </tr>
-        <tr>
-          <th>title</th>
-          <td>
-            The dialog's title. The default is "Input".
-          </td>
-        </tr>
-        <tr>
-          <th>okTitle</th>
-          <td>
-            The text displayed in the okTitle button. The default is "OK".
-          </td>
-        </tr>
-        <tr>
-          <th>cancelTitle</th>
-          <td>
-            The text displayed in the cancelTitle button. The default is "Cancel".
-          </td>
-        </tr>
-      </table>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-            If the user clicks the okTitle button, then the method returns the current value of
-            the dialog's input box. If the user clicks the cancelTitle button, the method returns
-            an empty string.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
-<A NAME="sleep"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-        void
-      </span>
-      <span class="sympad">sleep</span>
-      <span class="normal">
-      (
-       <em>float</em> seconds
-      )
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Pauses the current program for the specified number of seconds.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>seconds</th>
-          <td>
-            The number of seconds to pause.
-          </td>
-        </tr>
-      </table>
-    </div>
-  </div>
-</div>
-<A NAME="waitForConnection"></A>
-<div class="jd-details api ">
-    <h4 class="jd-details-title">
-      <span class="normal">
-          <code>
-              <a href="{@docRoot}guide/developing/tools/MonkeyDevice.html">MonkeyDevice</a>
-          </code>
-      </span>
-      <span class="sympad">waitForConnection</span>
-      <span class="normal">
-      (<em>float</em> timeout,
-       <em>string</em> deviceId)
-      </span>
-    </h4>
-  <div class="jd-details-descr">
-
-    <div class="jd-tagdata jd-tagdescr">
-        <p>
-            Tries to make a connection between the <code>monkeyrunner</code> backend and the
-            specified device or emulator.
-        </p>
-    </div>
-    <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Arguments</h5>
-      <table class="jd-tagtable">
-        <tr>
-          <th>timeout</th>
-          <td>
-            The number of seconds to wait for a connection. The default is to wait forever.
-          </td>
-        </tr>
-        <tr>
-            <th>
-                deviceId
-            </th>
-            <td>
-                A regular expression that specifies the serial number of the device or emulator. See
-                the topic
-                <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>
-                for a description of device and emulator serial numbers.
-            </td>
-        </tr>
-      </table>
-    </div>
-        <div class="jd-tagdata">
-      <h5 class="jd-tagtitle">Returns</h5>
-      <ul class="nolist">
-        <li>
-          A <code><a href="{@docRoot}guide/developing/tools/MonkeyDevice.html">MonkeyDevice</a></code>
-          instance for the device or emulator. Use this object to control and communicate with the
-          device or emulator.
-        </li>
-      </ul>
-    </div>
-  </div>
-</div>
diff --git a/docs/html/guide/developing/tools/aapt.html b/docs/html/guide/developing/tools/aapt.html
deleted file mode 100644
index e66a201..0000000
--- a/docs/html/guide/developing/tools/aapt.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/building/index.html#detailed-build">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/building/index.html#detailed-build">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/adb.jd b/docs/html/guide/developing/tools/adb.jd
deleted file mode 100644
index 50c7236..0000000
--- a/docs/html/guide/developing/tools/adb.jd
+++ /dev/null
@@ -1,669 +0,0 @@
-page.title=Android Debug Bridge
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>ADB quickview</h2>
-  <ul>
-<li>Manage the state of an emulator or device</li>
-<li>Run shell commands on a device</li>
-<li>Manage port forwarding on an emulator or device</li>
-<li>Copy files to/from an emulator or device</li>
-  </ul>
-
-  <h2>In this document</h2>
-  <ol>
-<li><a href="#issuingcommands">Issuing ADB Commands</a></li>
-<li><a href="#devicestatus">Querying for Emulator/Device Instances</a></li>
-<li><a href="#directingcommands">Directing Commands to a Specific Emulator/Device Instance</a></li>
-<li><a href="#move">Installing an Application</a></li>
-<li><a href="#forwardports">Forwarding Ports</a></li>
-<li><a href="#copyfiles">Copying Files to or from an Emulator/Device Instance</a></li>
-<li><a href="#commandsummary">Listing of adb Commands </a></li>
-<li><a href="#shellcommands">Issuing Shell Commands</a></li>
-<li><a href="#logcat">Enabling logcat Logging</a></li>
-<li><a href="#stopping">Stopping the adb Server</a></li>
-  </ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="emulator.html">Emulator</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an
-emulator instance or connected Android-powered device. It is a client-server program that includes
-three components: </p>
-
-<ul>
-  <li>A client, which runs on your development machine. You can invoke a client from a shell by issuing an adb command. Other Android tools such as the ADT plugin and DDMS also create adb clients. </li>
-  <li>A server, which runs as a background process on your development machine. The server manages communication between the client and the adb daemon running on an emulator or device. </li>
-  <li>A daemon, which runs as a background process on each emulator or device instance. </li>
-</ul>
-
-<p>You can find the {@code adb} tool in {@code &lt;sdk&gt;/platform-tools/}.</p>
-
-<p>When you start an adb client, the client first checks whether there is an adb server process already running. If there isn't, it starts the server process. When the server starts, it binds to local TCP port 5037 and listens for commands sent from adb clients&mdash;all adb clients use port 5037 to communicate with the adb server. </p>
-
-<p>The server then sets up connections to all running emulator/device instances. It locates emulator/device instances by scanning odd-numbered ports in the range 5555 to 5585, the range used by emulators/devices. Where the server finds an adb daemon, it sets up a connection to that port. Note that each emulator/device instance acquires a pair of sequential ports &mdash; an even-numbered port for console connections and an odd-numbered port for adb connections. For example: </p>
-
-<p style="margin-left:2em">
-Emulator 1, console: 5554<br/>
-Emulator 1, adb: 5555<br>
-Emulator 2, console: 5556<br>
-Emulator 2, adb: 5557 ...
-</p>
-
-<p>As shown, the emulator instance connected to adb on port 5555 is the same as the instance whose console listens on port 5554. </p>
-
-<p>Once the server has set up connections to all emulator instances, you can use adb commands to control and access those instances. Because the server manages connections to emulator/device instances and handles commands from multiple adb clients, you can control any emulator/device instance from any client (or from a script).</p>
-
-<p>The sections below describe the commands that you can use to access adb capabilities and manage the state of an emulator/device. Note that if you are developing Android applications in Eclipse and have installed the ADT plugin, you do not need to access adb from the command line. The ADT plugin provides a transparent integration of adb into the Eclipse IDE. However, you can still use adb directly as necessary, such as for debugging.</p>
-
-<a name="issuingcommands"></a>
-
-<h2>Issuing adb Commands</h2>
-
-<p>You can issue adb commands from a command line on your development machine or from a script. The usage is: </p>
-
-    <pre>adb [-d|-e|-s &lt;serialNumber&gt;] &lt;command&gt; </pre>
-
-<p>When you issue a command, the program invokes an adb client. The client is not specifically associated with any emulator instance, so if multiple emulators/devices are running, you need to use the <code>-d</code> option to specify the target instance to which the command should be directed. For more information about using this option, see <a href="#directingcommands">Directing Commands to a Specific Emulator/Device Instance</a>. </p>
-
-<a name="devicestatus"></a>
-
-<h2>Querying for Emulator/Device Instances</h2>
-
-<p>Before issuing adb commands, it is helpful to know what emulator/device instances are connected to the adb server. You can generate a list of attached emulators/devices using the <code>devices</code> command: </p>
-
-	<pre>adb devices</pre>
-
-<p>In response, adb prints this status information for each instance:</p>
-
-<ul>
-	<li>Serial number &mdash; A string created by adb to uniquely identify an emulator/device instance by its 
-        console port number. The format of the serial number is <code>&lt;type&gt;-&lt;consolePort&gt;</code>. 
-        Here's an example serial number: <code>emulator-5554</code></li>
-	<li>State &mdash; The connection state of the instance. Three states are supported: 
-		<ul>
-		<li><code>offline</code> &mdash; the instance is not connected to adb or is not responding.</li>
-		<li><code>device</code> &mdash; the instance is now connected to the adb server. Note that this state does not 
-                    imply that the Android system is fully booted and operational, since the instance connects to adb 
-                    while the system is still booting. However, after boot-up, this is the normal operational state of 
-                    an emulator/device instance.</li>
-		</ul>
-	</li>
-</ul>
-
-<p>The output for each instance is formatted like this: </p>
-
-	<pre>[serialNumber] [state]</pre>
-
-<p>Here's an example showing the <code>devices</code> command and its output:</p>
-
-	<pre>$ adb devices
-List of devices attached 
-emulator-5554&nbsp;&nbsp;device
-emulator-5556&nbsp;&nbsp;device
-emulator-5558&nbsp;&nbsp;device</pre>
-
-<p>If there is no emulator/device running, adb returns <code>no device</code>.</p>
-
-
-<a name="directingcommands"></a>
-
-<h2>Directing Commands to a Specific Emulator/Device Instance</h2>
-
-<p>If multiple emulator/device instances are running, you need to specify a target instance when issuing adb commands. To so so, use the <code>-s</code> option in the commands. The usage for the <code>-s</code> option is:</p>
-
-    <pre>adb -s &lt;serialNumber&gt; &lt;command&gt; </pre>
-	
-<p>As shown, you specify the target instance for a command using its adb-assigned serial number. You can use the <code>devices</code> command to obtain the serial numbers of running emulator/device instances. </p>
-
-<p>Here is an example: </p>
-
-	<pre>adb -s emulator-5556 install helloWorld.apk</pre>
-
-<p>Note that, if you issue a command without specifying a target emulator/device instance using <code>-s</code>, adb generates an error. 
-
-<a name="move"></a>
-
-<h2>Installing an Application</h2>
-<p>You can use adb to copy an application from your development computer and install it on an emulator/device instance. To do so, use the <code>install</code> command. With the command, you must specify the path to the .apk file that you want to install:</p>
-
-<pre>adb install &lt;path_to_apk&gt;</pre>
-
-<p>For more information about how to create an .apk file that you can install on an emulator/device
-instance, see <a href="{@docRoot}guide/developing/building/index.html">Building and Running</a></p>
-
-<p>Note that, if you are using the Eclipse IDE and have the ADT plugin installed, you do not need to use adb (or aapt) directly to install your application on the emulator/device. Instead, the ADT plugin handles the packaging and installation of the application for you. </p>
-
-
-<a name="forwardports"></a>
-
-<h2>Forwarding Ports</h2>
-
-    <p>You can use the <code>forward</code> command to set up arbitrary port forwarding &mdash; forwarding of requests on a specific host port to a different port on an emulator/device instance. Here's how you would set up forwarding of host port 6100 to emulator/device port 7100:</p>
-<pre>adb forward tcp:6100 tcp:7100</pre>
-    <p>You can also use adb to set up forwarding to named abstract UNIX domain sockets, as illustrated here:</p>
-<pre>adb forward tcp:6100 local:logd </pre>
-
-<a name="copyfiles"></a>
-
-<h2>Copying Files to or from an Emulator/Device Instance</h2>
-
-<p>You can use the adb commands <code>pull</code> and <code>push</code> to copy files to and from an emulator/device instance's data file. Unlike the <code>install</code> command, which only copies an .apk file to a specific location, the <code>pull</code> and <code>push</code> commands let you copy arbitrary directories and files to any location in an emulator/device instance. </p>
-
-<p>To copy a file or directory (recursively) <em>from</em> the emulator or device, use</p>
-<pre>adb pull &lt;remote&gt; &lt;local&gt;</pre> 
-
-<p>To copy a file or directory (recursively) <em>to</em> the emulator or device, use</p>
-    <pre>adb push &lt;local&gt; &lt;remote&gt;</pre> 
-
-<p>In the commands, <code>&lt;local&gt;</code> and <code>&lt;remote&gt;</code> refer to the paths to the target files/directory on your development machine (local) and on the emulator/device instance (remote).</p>
-
-<p>Here's an example: </p>
-<pre>adb push foo.txt /sdcard/foo.txt</pre>
-
-<a name="commandsummary"></a>
-
-<h2>Listing of adb Commands</h2>
-
-<p>The table below lists all of the supported adb commands and explains their meaning and usage. </p>
-
-
-<table>
-<tr>
-	<th>Category</th>
-	<th>Command</th>
-	<th>Description</th>
-	<th>Comments</th>
-</tr>
-
-<tr>
-<td rowspan="3">Options</td>
-<td><code>-d</code></td>
-<td>Direct an adb command to the only attached USB device.</td>
-<td>Returns an error if more than one USB device is attached.</td>
-</tr>
-
-<tr>
-<td><code>-e</code></td>
-<td>Direct an adb command to the only running emulator instance.</td>
-<td>Returns an error if more than one emulator instance is running. </td>
-</tr>
-
-<tr>
-<td><code>-s&nbsp;&lt;serialNumber&gt;</code></td>
-<td>Direct an adb command a specific emulator/device instance, referred to by its adb-assigned serial number (such as "emulator-5556").</td>
-<td>If not specified, adb generates an error.</td>
-</tr>
-
-<tr>
-<td rowspan="3">General</td>
-<td><code>devices</code></td>
-<td>Prints a list of all attached emulator/device instances.</td>
-<td>See <a href="#devicestatus">Querying for Emulator/Device Instances</a> for more information.</td>
-</tr>
-
-<tr>
-<td><code>help</code></td>
-<td>Prints a list of supported adb commands.</td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>version</code></td>
-<td>Prints the adb version number. </td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td rowspan="3">Debug</td>
-<td ><code>logcat&nbsp;[&lt;option&gt;] [&lt;filter-specs&gt;]</code></td>
-<td>Prints log data to the screen. </td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>bugreport</code></td>
-<td>Prints <code>dumpsys</code>, <code>dumpstate</code>, and <code>logcat</code> data to the screen, for the purposes of bug reporting. </td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>jdwp</code></td>
-<td>Prints a list of available JDWP processes on a given device. </td>
-<td>You can use the <code>forward jdwp:&lt;pid&gt;</code> port-forwarding specification to connect to a specific JDWP process. For example: <br>
-    <code>adb forward tcp:8000 jdwp:472</code><br>
-    <code>jdb -attach localhost:8000</code></p>
- </td>
-</tr>
-
-<tr>
-<td rowspan=3">Data</td>
-<td><code>install&nbsp;&lt;path-to-apk&gt;</code></td>
-<td>Pushes an Android application (specified as a full path to an .apk file) to the data file of an emulator/device. </td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>pull&nbsp;&lt;remote&gt;&nbsp;&lt;local&gt;</code></td>
-<td>Copies a specified file from an emulator/device instance to your development computer. </td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>push&nbsp;&lt;local&gt;&nbsp;&lt;remote&gt;</code></td>
-<td>Copies a specified file from your development computer to an emulator/device instance. </td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td rowspan="2">Ports and Networking</td>
-<td><code>forward&nbsp;&lt;local&gt;&nbsp;&lt;remote&gt;</code></td>
-<td>Forwards socket connections from a specified local port to a specified remote port on the emulator/device instance. </td>
-<td>Port specifications can use these schemes: 
-<ul><li><code>tcp:&lt;portnum&gt;</code></li>
-<li><code>local:&lt;UNIX domain socket name&gt;</code></li>
-<li><code>dev:&lt;character device name&gt;</code></li>
-<li><code>jdwp:&lt;pid&gt;</code></li></ul>
-</td>
-</tr>
-
-<tr>
-<td><code>ppp&nbsp;&lt;tty&gt;&nbsp;[parm]...</code></td>
-<td>Run PPP over USB.
-<ul>
-<li><code>&lt;tty&gt;</code> &mdash; the tty for PPP stream. For example <code>dev:/dev/omap_csmi_ttyl</code>. </li>
-<li><code>[parm]... </code> &mdash; zero or more PPP/PPPD options, such as <code>defaultroute</code>, <code>local</code>, <code>notty</code>, etc.</li></ul>
-
-<p>Note that you should not automatically start a PPP connection. </p></td>
-<td></td>
-</tr>
-
-<tr>
-<td rowspan="3">Scripting</td>
-<td><code>get-serialno</code></td>
-<td>Prints the adb instance serial number string.</td>
-<td rowspan="2">See <a href="#devicestatus">Querying for Emulator/Device Instances</a> for more information. </td>
-</tr>
-
-<tr>
-<td><code>get-state</code></td>
-<td>Prints the adb state of an emulator/device instance.</td>
-</td>
-</tr>
-
-<tr>
-<td><code>wait-for-device</code></td>
-<td>Blocks execution until the device is online &mdash; that is, until the instance state is <code>device</code>.</td>
-<td>You can prepend this command to other adb commands, in which case adb will wait until the emulator/device instance is connected before issuing the other commands. Here's an example: 
-<pre>adb wait-for-device shell getprop</pre>
-
-Note that this command does <em>not</em> cause adb to wait until the entire system is fully booted. For that reason, you should not prepend it to other commands that require a fully booted system. As an example, the <code>install</code> requires the Android package manager, which is available only after the system is fully booted. A command such as 
-
-<pre>adb wait-for-device install &lt;app&gt;.apk</pre>
-
-would issue the <code>install</code> command as soon as the emulator or device instance connected to the adb server, but before the Android system was fully booted, so it would result in an error. </td>
-</tr>
-
-
-
-<tr>
-<td rowspan="2">Server</td>
-<td><code>start-server</code></td>
-<td>Checks whether the adb server process is running and starts it, if not.</td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>kill-server</code></td>
-<td>Terminates the adb server process.</td>
-<td>&nbsp;</td>
-</tr>
-
-
-
-<tr>
-<td rowspan="2">Shell</td>
-<td><code>shell</code></td>
-<td>Starts a remote shell in the target emulator/device instance.</td>
-<td rowspan="2">See <a href="#shellcommands">Issuing Shell Commands</a> for more information. </td>
-</tr>
-
-<tr>
-<td><code>shell&nbsp;[&lt;shellCommand&gt;]</code></td>
-<td>Issues a shell command in the target emulator/device instance and then exits the remote shell.</td>
-</tr>
-
-</table>
-
-
-<a name="shellcommands"></a>
-
-<h2>Issuing Shell Commands</h2>
-
-<p>Adb provides an ash shell that you can use to run a variety of commands on an emulator 
-or device. The command binaries are stored in the file system of the emulator or device, 
-in this location: </p>
-
-<pre>/system/bin/...</pre>
-
-<p>You can use the <code>shell</code> command to issue commands, with or without entering the adb remote shell on the emulator/device. </p>
-
-<p>To issue a single command without entering a remote shell, use the <code>shell</code> command like this: </p>
-
-	<pre>adb [-d|-e|-s {&lt;serialNumber&gt;}] shell &lt;shellCommand&gt;</pre>
-	
-<p>To drop into a remote shell on a emulator/device instance, use the <code>shell</code> command like this:</p>
-
-	<pre>adb [-d|-e|-s {&lt;serialNumber&gt;}] shell</pre>
-
-<p>When you are ready to exit the remote shell, use <code>CTRL+D</code> or <code>exit</code> to end the shell session. </p>
-
-<p>The sections below provide more information about shell commands that you can use.</p>
-      
-<a name="sqlite" id="sqlite"></a>
-
-<h3>Examining sqlite3 Databases from a Remote Shell</h3>
-
-<p>From an adb remote shell, you can use the 
-<a href="http://www.sqlite.org/sqlite.html">sqlite3</a> command-line program to 
-manage SQLite databases created by Android applications. The 
-<code>sqlite3</code> tool includes many useful commands, such as 
-<code>.dump</code> to print out the contents of a table and 
-<code>.schema</code> to print the SQL CREATE statement for an existing table. 
-The tool also gives you the ability to execute SQLite commands on the fly.</p>
-
-<p>To use <code>sqlite3</code>, enter a remote shell on the emulator instance, as described above, then invoke the tool using the <code>sqlite3</code> command. Optionally, when invoking <code>sqlite3</code> you can specify the full path to the database you want to explore. Emulator/device instances store SQLite3 databases in the folder <code><span chatdir="1"><span chatindex="259474B4B070F261">/data/data/<em>&lt;package_name&gt;</em>/databases</span></span>/</code>. </p>
-
-<p>Here's an example: </p>
-
-<pre>$ adb -s emulator-5554 shell
-# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
-SQLite version 3.3.12
-Enter &quot;.help&quot; for instructions
-<em>.... enter commands, then quit...</em>
-sqlite&gt; .exit </pre>
-
-<p>Once you've invoked <code>sqlite3</code>, you can issue <code>sqlite3</code> commands in the shell. To exit and return to the adb remote shell, use <code>exit</code> or <code>CTRL+D</code>.
-
-
-<a name="monkey"></a>
-
-<h3>UI/Application Exerciser Monkey</h3>
-
-<p>The Monkey is a program that runs on your emulator or device and generates pseudo-random
-streams of user events such as clicks, touches, or gestures, as well as a number of system-level 
-events.  You can use the Monkey to stress-test applications that you are developing,
-in a random yet repeatable manner.</p>
-
-<p>The simplest way to use the monkey is with the following command, which will launch your
-application and send 500 pseudo-random events to it.</p>
-
-<pre>$ adb shell monkey -v -p your.package.name 500</pre>
-
-<p>For more information about command options for Monkey, see the complete 
-<a href="{@docRoot}guide/developing/tools/monkey.html" title="monkey">UI/Application Exerciser Monkey</a> documentation page.</p>
-
-
-<a name="othershellcommands"></a>
-
-<h3>Other Shell Commands</h3>
-
-<p>The table below lists several of the adb shell commands available. For a complete list of commands and programs, start an emulator instance and use the <code>adb -help</code> command. </p>
-
-<pre>adb shell ls /system/bin</pre>
-
-<p>Help is available for most of the commands. </p>
-
-<table>
-<tr>
-	<th>Shell Command</th>
-	<th>Description</th>
-	<th>Comments</th>
-</tr>
-
-<tr>
-<td><code>dumpsys</code></td>
-<td>Dumps system data to the screen.</td>
-<td rowspan=4">The <a href="{@docRoot}guide/developing/debugging/ddms.html">Dalvik Debug Monitor Server</a> 
-(DDMS) tool offers integrated debug environment that you may find easier to use.</td>
-</tr>
-
-<tr>
-<td><code>dumpstate</code></td>
-<td>Dumps state to a file.</td>
-</tr>
-
-<tr>
-<td><code>logcat&nbsp;[&lt;option&gt;]...&nbsp;[&lt;filter-spec&gt;]...</code></td>
-<td>Enables radio logging and prints output to the screen. </td>
-</tr>
-
-<tr>
-<td><code>dmesg</code></td>
-<td>Prints kernel debugging messages to the screen. </td>
-</tr>
-
-<tr>
-<td><code>start</code></td>
-<td>Starts (restarts) an emulator/device instance.</td>
-<td>&nbsp;</td>
-</tr>
-
-<tr>
-<td><code>stop</code></td>
-<td>Stops execution of an emulator/device instance.</td>
-<td>&nbsp;</td>
-</tr>
-
-</table>
-
-<a name="logcat"></a>
-
-<h2>Enabling logcat Logging</h2>
-
-<p>The Android logging system provides a mechanism for collecting and viewing system debug output. Logs from various applications and portions of the system are collected in a series of circular buffers, which then can be viewed and filtered by the <code>logcat</code> command.</p>
-
-<a name="usinglogcat"></a>
-
-<h3>Using logcat Commands</h3>
-
-<p>You can use the <code>logcat</code> command to view and follow the contents of the system's log buffers. The general usage is:</p>
-
-<pre>[adb] logcat [&lt;option&gt;] ... [&lt;filter-spec&gt;] ...</pre>
-
-<p>The sections below explain filter specifications and the command options. See <a href="#logcatoptions">Listing of logcat Command Options</a> for a summary of options. </p>
-
-<p>You can use the <code>logcat</code> command from your development computer  or from a remote adb shell in an emulator/device instance. To view log output in your development computer, you use</p>
-
-<pre>$ adb logcat</pre>
-
-<p>and from a remote adb shell you use</p>
-
-<pre># logcat</pre>
-
-<a name="filteringoutput"></a>
-
-<h3>Filtering Log Output</h3>
-
-<p>Every Android log message has a <em>tag</em> and a <em>priority</em> associated with it. </p>
-
-<ul>
-<li>The tag of a log message is a short string indicating the system component from which the message originates (for example, "View" for the view system). </li>
-
-<li>The priority is one of the following character values, ordered from lowest to highest priority:</li>
-
-<ul>
-    <li><code>V</code> &mdash; Verbose (lowest priority)</li>
-	<li><code>D</code> &mdash; Debug</li>
-	<li><code>I</code> &mdash; Info (default priority)</li>
-	<li><code>W</code> &mdash; Warning</li>
-	<li><code>E</code> &mdash; Error</li>
-	<li><code>F</code> &mdash; Fatal</li>
-	<li><code>S</code> &mdash; Silent (highest priority, on which nothing is ever printed)</li>
-</ul>
-</ul>
-
-<p>You can obtain a list of tags used in the system, together with priorities, by running <code>logcat</code> and observing the first two columns 
-of each message, given as <code>&lt;priority&gt;/&lt;tag&gt;</code>. </p>
-
-<p>Here's an example of logcat output that shows that the message relates to priority level "I" and tag "ActivityManager":</p>
-
-<pre>I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}</pre>
-
-<p>To reduce the log output to a manageable level, you can restrict log output using <em>filter expressions</em>. Filter expressions let you indicate to the system the tags-priority combinations that you are interested in &mdash; the system suppresses other messages for the specified tags. </p>
-
-<p>A filter expression follows this format <code>tag:priority ...</code>, where <code>tag</code> indicates the tag of interest and <code>priority</code> indicates the <em>minimum</em> level of priority to report for that tag.  Messages for that tag at or above the specified priority are written to the log. You can supply any number of <code>tag:priority</code> specifications in a single filter expression. The series of specifications is whitespace-delimited. The default output is to show all log messages with the Info priority (*:I).</p>
-
-<p>Here's an example of a filter expression that suppresses all log messages except those with the tag "ActivityManager", at priority "Info" or above, and all log messages with tag "MyApp", with priority "Debug" or above:</p>
-
-<pre>adb logcat ActivityManager:I MyApp:D *:S</pre>
-
-<p>The final element in the above expression, <code>*:S</code>, sets the priority level for all tags to "silent", thus ensuring only log messages with "View" and "MyApp" are displayed. Using <code>*:S</code> is an excellent way to ensure that log output is restricted to the filters that you have explicitly specified &mdash; it lets your filters serve as a "whitelist" for log output.</p>
-
-<p>The following filter expression displays all log messages with priority level "warning" and higher, on all tags:</p>
-
-<pre>adb logcat *:W</pre>
-
-<p>If you're running <code>logcat</code> from your development computer (versus running it on a remote adb shell), you can also set a default filter expression by exporting a value for the environment variable <code>ANDROID_LOG_TAGS</code>:</p>
-
-<pre>export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"</pre>
-
-<p>Note that <code>ANDROID_LOG_TAGS</code> filter is not exported to the emulator/device instance, if you are running <code>logcat</code> from a remote shell or using <code>adb shell logcat</code>.</p>
-
-
-<a name="outputformat"></a>
-
-<h3>Controlling Log Output Format</h3>
-
-<p>Log messages contain a number of metadata fields, in addition to the tag and priority. You can modify the output format for messages so that they display a specific metadata field. To do so, you use the <code>-v</code> option and specify one of the supported output formats listed below. </p>
-
-<ul>
-    <li><code>brief</code> &mdash; Display priority/tag and the PID of process issuing the message (the default format).</li>
-	<li><code>process</code> &mdash; Display PID only.</li>
-	<li><code>tag</code> &mdash; Display the priority/tag only. </li>
-	<li><code>raw</code> &mdash; Display the raw log message, with no other metadata fields.</li>
-	<li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the process issuing the message.</li>
-	<li><code>threadtime</code> &mdash; Display the date, invocation time, priority, tag, and the PID and TID of the thread issuing the message.</li>
-	<li><code>long</code> &mdash; Display all metadata fields and separate messages with a blank lines.</li>
-</ul>
-
-<p>When starting <code>logcat</code>, you can specify the output format you want by using the <code>-v</code> option:</p>
-
-<pre>[adb] logcat [-v &lt;format&gt;]</pre>
-
-<p>Here's an example that shows how to generate messages in <code>thread</code> output format: </p>
-
-<pre>adb logcat -v thread</pre>
-
-<p>Note that you can only specify one output format with the <code>-v</code> option. </p>
-
-<a name="alternativebuffers"></a>
-
-<h3>Viewing Alternative Log Buffers </h3>
-
-<p>The Android logging system keeps multiple circular buffers for log messages, and not all of the log messages are sent to the default circular buffer. To see additional log messages, you can start <code>logcat</code> with the <code>-b</code> option, to request viewing of an alternate circular buffer. You can view any of these alternate buffers: </p>
-
-<ul>
-<li><code>radio</code> &mdash; View the buffer that contains radio/telephony related messages.</li>
-<li><code>events</code> &mdash; View the buffer containing events-related messages.</li>
-<li><code>main</code> &mdash; View the main log buffer (default)</li>
-</ul>
-
-<p>The usage of the <code>-b</code> option is:</p>
-
-<pre>[adb] logcat [-b &lt;buffer&gt;]</pre>
-
-<p>Here's an example of how to view a log buffer containing radio and telephony messages: </p>
-
-<pre>adb logcat -b radio</b></pre>
-
-<a name="stdout"></a>
-
-<h3>Viewing stdout and stderr</h3>
-
-<p>By default, the Android system sends <code>stdout</code> and <code>stderr</code> (<code>System.out</code> and <code>System.err</code>) output to <code>/dev/null</code>. In
-processes that run the Dalvik VM, you can have the system write a copy of the output to the log file. In this case, the system writes the messages to the log using the log tags <code>stdout</code> and <code>stderr</code>, both with priority <code>I</code>. </p>
-
-<p>To route the output in this way, you stop a running emulator/device instance and then use the shell command <code>setprop</code> to enable the redirection of output. Here's how you do it: </p>
-
-<pre>$ adb shell stop
-$ adb shell setprop log.redirect-stdio true
-$ adb shell start</pre>
-
-<p>The system retains this setting until you terminate the emulator/device instance. To use the setting as a default on the emulator/device instance, you can add an entry to <code>/data/local.prop</code>
-on the device.</p>
-
-<a name="logcatoptions"></a>
-
-<h3>Listing of logcat Command Options</h3>
-
-<table>
-<tr>
-	<th>Option</th>
-	<th>Description</th>
-</tr>
-
-<tr>
-<td><code>-b&nbsp;&lt;buffer&gt;</code></td>
-<td>Loads an alternate log buffer for viewing, such as <code>event</code> or <code>radio</code>. The <code>main</code> buffer is used by default. See <a href="#alternativebuffers">Viewing Alternative Log Buffers</a>.</td>
-</tr>
-
-<tr>
-<td><code>-c</code></td>
-<td>Clears (flushes) the entire log and exits. </td>
-</tr>
-
-<tr>
-<td><code>-d</code></td>
-<td>Dumps the log to the screen and exits.</td>
-</tr>
-
-<tr>
-<td><code>-f&nbsp;&lt;filename&gt;</code></td>
-<td>Writes log message output to <code>&lt;filename&gt;</code>. The default is <code>stdout</code>.</td>
-</tr>
-
-<tr>
-<td><code>-g</code></td>
-<td>Prints the size of the specified log buffer and exits. </td>
-</tr>
-
-<tr>
-<td><code>-n&nbsp;&lt;count&gt;</code></td>
-<td>Sets the maximum number of rotated logs to <code>&lt;count&gt;</code>. The default value is 4.  Requires the <code>-r</code> option.  </td>
-</tr>
-
-<tr>
-<td><code>-r&nbsp;&lt;kbytes&gt;</code></td>
-<td>Rotates the log file every <code>&lt;kbytes&gt;</code> of output. The default value is 16.  Requires the <code>-f</code> option.  </td>
-</tr>
-
-<tr>
-<td><code>-s</code></td>
-<td>Sets the default filter spec to silent. </td>
-</tr>
-
-<tr>
-<td><code>-v&nbsp;&lt;format&gt;</code></td>
-<td>Sets the output format for log messages. The default is <code>brief</code> format. For a list of supported formats, see <a href="#outputformat">Controlling Log Output Format</a>.</td>
-</tr>
-
-</table>
-
-<a name="stopping"></a>
-
-<h2>Stopping the adb Server</h2>
-
-<p>In some cases, you might need to terminate the adb server process and then restart it. For example, if adb does not respond to a command, you can terminate the server and restart it and that may resolve the problem. </p>
-
-<p>To stop the adb server, use the <code>kill-server</code>. You can then restart the server by issuing any adb command. </p>
-
-
diff --git a/docs/html/guide/developing/tools/adt.jd b/docs/html/guide/developing/tools/adt.jd
deleted file mode 100644
index d473e85..0000000
--- a/docs/html/guide/developing/tools/adt.jd
+++ /dev/null
@@ -1,527 +0,0 @@
-page.title=Android Developer Tools
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#tools">SDK Tools Integration</a></li>
-
-        <li><a href="#editors">Code Editors</a>
-          <ol>
-            <li><a href="#resource-linking">Resource linking enhancements</a></li>
-          </ol>
-        </li>
-
-        <li><a href="#graphical-editor">Graphical Layout Editor</a>
-          <ol>
-            <li><a href="#canvas">Canvas and outline view</a></li>
-            <li><a href="#palette">Palette</a></li>
-            <li><a href="#config-chooser">Configuration chooser</a></li>
-          </ol>
-        </li>
-
-        <li><a href="#refactoring">Layout Factoring Support</a></li>
-
-      </ol>
-
-      <h2>Related videos</h2>
-
-      <ol>
-        <li><a href="{@docRoot}videos/index.html#v=Oq05KqjXTvs">Android Developer Tools
-            Google I/O Session</a>
-        </li>
-      </ol>
-
-      <h2>See also</h2>
-
-      <ol>
-        <li><a href="http://tools.android.com/recent">Android Tools change blog</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>ADT (Android Developer Tools) is a plugin for Eclipse that provides a suite of
-  tools that are integrated with the Eclipse IDE. It offers you access to many features that help
-  you develop Android applications quickly. ADT
-  provides GUI access to many of the command line SDK tools as well as a UI design tool for rapid
-  prototyping, designing, and building of your application's user interface.</p>
-
-  <p>Because ADT is a plugin for Eclipse, you get the functionality of a well-established IDE,
-  along with Android-specific features that are bundled with ADT. The following
-  describes important features of Eclipse and ADT:</p>
-
-  <dl>
-    <dt><strong>Integrated Android project creation, building, packaging, installation, and
-    debugging</strong></dt>
-
-    <dd>ADT integrates many development workflow tasks into Eclipse, making it easy for you to
-    rapidly develop and test your Android applications.</dd>
-
-    <dt><strong>SDK Tools integration</strong></dt>
-
-    <dd>Many of the <a href="#tools">SDK tools</a> are integrated into Eclipse's menus,
-    perspectives, or as a part of background processes ran by ADT.</dd>
-
-    <dt><strong>Java programming language and XML editors</strong></dt>
-
-    <dd>The Java programming language editor contains common IDE features such as compile time
-    syntax checking, auto-completion, and integrated documentation for the Android framework APIs.
-    ADT also provides custom XML editors that let you
-    edit Android-specific XML files in a form-based UI. A graphical layout editor lets you design
-    user interfaces with a drag and drop interface.</dd>
-
-    <dt><strong>Integrated documentation for Android framework APIs</strong></dt>
-    <dd>You can access documentation by hovering over classes, methods, or variables.</dd>
-  </dl>
-
-  <p>You can find the most up-to-date and more detailed information about changes and new features
-on the <a  href="http://tools.android.com/recent">Recent Changes</a> page at the Android  Tools
-Project site.</p>
-
-  <h2 id="tools">SDK Tools Integration</h2>
-
-  <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Need help designing icons?</h2>
-  <p>The <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android
-      Asset Studio</a> is a web-based tool that lets you generate icons from existing images,
-    clipart, or text. It also generates the icons with different DPIs for different screen sizes and
-    types.</p>
-
-    </div>
-  </div>
-
-  <p>Many of the tools that you can start or run from the command line are integrated into ADT.
-  They include:</p>
-
-  <ul>
-    <li><a href="{@docRoot}guide/developing/debugging/debugging-tracing.html">Traceview</a>:
-    Allows you to profile your program's execution
-    (<strong>Window &gt; Open Perspective &gt; Traceview</strong>). </li>
-
-    <li><a href="{@docRoot}guide/developing/tools/android.html">android</a>: Provides access to
-    the Android SDK Manager and AVD Manager. Other <code>android</code> features such as creating or
-    updating projects (application and library) are integrated throughout the Eclipse IDE. </li>
-
-    <li><a href="{@docRoot}guide/developing/debugging/debugging-ui.html#HierarchyViewer">Hierarchy
-    Viewer</a>: Allows you to visualize your application's view hierarchy to find inefficiencies
-    (<strong>Window &gt; Open Perspective &gt; Hierarchy Viewer</strong>).</li>
-
-    <li><a href="{@docRoot}guide/developing/debugging/debugging-ui.html#pixelperfect">Pixel
-    Perfect</a>: Allows you to closely examine your UI to help with designing and building.
-    (<strong>Window &gt; Open Perspective &gt; Pixel Perfect</strong>).</li>
-
-    <li><a href="{@docRoot}guide/developing/debugging/ddms.html">DDMS</a>: Provides
-    debugging features including: screen capturing, thread and heap information, and logcat
-    (<strong>Window &gt; Open Perspective &gt; DDMS</strong>).</li>
-
-    <li><a href="{@docRoot}guide/developing/tools/adb.html">adb</a>: Provides access to
-      a device from your development system. Some features of
-    <code>adb</code> are integrated into ADT such as project installation (Eclipse run menu),
-    file transfer, device enumeration, and logcat (DDMS). You must access the more advanced
-    features of <code>adb</code>, such as shell commands, from the command line.</li>
-
-    <li><a href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a>: Allows code obfuscation,
-    shrinking, and optimization. ADT integrates ProGuard as part of the build, if you <a href=
-    "{@docRoot}guide/developing/tools/proguard.html#enabling">enable it</a>.</li>
-  </ul>
-
-<h2 id="editors">Code Editors</h2>
-
-  <p>In addition to Eclipse's standard editor features, ADT provides custom XML editors to help
-  you create and edit Android manifests, resources, menus, and layouts in a form-based or graphical
-  mode. Double-clicking on an XML file in Eclipse's package explorer opens the
-  appropriate XML editor.
-
-    <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Google I/O Session Video</h2>
-      <p>View the segment on the <a href=
-      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=30m50s">XML editors</a> for more
-      information.</p>
-    </div>
-  </div>
-
-  <p class="note"><strong>Note:</strong> You can edit Android-specific XML files (such as a layout
-or manifest) in both a graphical mode and also an XML markup mode. You can switch between
-these modes with the pair of tabs at the bottom of each custom XML editor.</p>
-
-  <p>In addition, some special file types that don't have custom editors, such as drawables, animations,
-  and color files offer editing enhancements such as XML tag completion.</p>
-
-<p>ADT provides the following custom, form-based XML editors:</p>
-
-  <dl>
-
-    <dt><strong>Graphical Layout Editor</strong></dt>
-
-    <dd>Edit and design your XML layout files with a drag and drop interface. The layout editor
-    renders your interface as well, offering you a preview as you design your layouts. This editor
-    is invoked when you open an XML file with a view declared (usually declared in
-    <code>res/layout</code>. For more information, see <a href="#graphical-editor">Graphical Layout
-    Editor</a>.</dd>
-
-    <dt><strong>Android Manifest Editor</strong></dt>
-
-    <dd>Edit Android manifests with a simple graphical interface. This editor is invoked
-    when you open an <code>AndroidManifest.xml</code> file.</dd>
-
-    <dt><strong>Menu Editor</strong></dt>
-
-    <dd>Edit menu groups and items with a simple graphical interface. This editor is
-    invoked when you open an XML file with a <code>&lt;menu&gt;</code> declared (usually located in
-    the <code>res/menu</code> folder).</dd>
-
-    <dt><strong>Resources Editor</strong></dt>
-
-    <dd>Edit resources with a simple graphical interface. This editor is invoked when
-    you open an XML file with a <code>&lt;resources&gt;</code> tag declared.</dd>
-
-    <dt><strong>XML Resources Editor</strong></dt>
-
-    <dd>Edit XML resources with a simple graphical interface. This editor is invoked
-    when you open an XML file.</dd>
-  </dl>
-
-
-  <h3 id="resource-linking">Resource linking enhancements</h3>
-  <p>In addition to the normal code editing features of Eclipse, ADT provides enhancements to the Android
-  development experience that allow you to quickly jump to declarations of various types of resources such
-  as strings or layout files. You can access these enhancements by holding down the control key and
-  clicking on the following items:
-
-      <ul>
-
-        <li>A resource identifier, such as <code>R.id.button1</code>, jumps
-        to the XML definition of the view.</li>
-
-        <li>A declaration in the <code>R.java</code> file, such as <code>public
-        static final int Button01=0x7f050000"</code>, jumps to the corresponding XML definition.</li>
-
-        <li>An activity or service definition in your manifest, such as
-        <code>&lt;activity android:name=".TestActivity"&gt;</code>, jumps to the corresponding Java class. You can
-        jump from an activity definition (or service definition) into the corresponding Java class.</li>
-
-        <li>You can jump to any value definition (e.g. <code>@string:foo</code>), regardless of
-which XML file
-        "foo" is defined in.</li>
-
-        <li>Any file-based declaration, such as <code>@layout/bar</code>, opens the file.</li>
-
-        <li>Non-XML resources, such as <code>@drawable/icon</code>, launches
-        Eclipse's default application for the given file type, which in this case is an
-        image.</li>
-
-        <li><code>@android</code> namespace resources opens the resources found in
-        the SDK install area.</li>
-
-        <li>Custom views in XML layouts, such as <code>&lt;foo.bar.MyView&gt;&lt;/foo.bar.MyView&gt;</code>,
-        or <code>&lt;view class="foo.bar.MyView"&gt;</code>) jump to the corresponding custom view classes.</li>
-
-        <li>An XML attribute such as <code>@android:string/ok</code> or <code>android.R.string.id</code> in Java code
-        opens the file that declares the strings. The XML tab opens when doing this, not
-        the form-based editor.</li>
-
-      </ul>
-
-  <h2 id="graphical-editor">Graphical Layout Editor</h2>
-
-  <p>ADT provides many features to allow you to design and build your application's user interface.
-  Many of these features are in the graphical layout editor, which you can access by opening one of
-  your application's XML layout files in Eclipse.
-  </p>
-
-  <p>The graphical layout editor is the main screen that you use to visually design and build your
-  UI. It is split up into the following parts:</p>
-
-  <dl>
-    <dt><strong>Canvas</strong></dt>
-
-    <dd>In the middle of the editor is the canvas. It provides the rendered view of your
-    layout and supports dragging and dropping of UI widgets
-    directly from the palette. You can select the platform version used to render the items in
-    the canvas. Each platform version has its own look and feel, which might be the similar to or
-    radically different from another platform version. The canvas renders the appropriate look
-    and feel for the currently selected platform version.
-    This platform version does not need to be the same as the version that your
-    application targets.
-
-    <p>The canvas also provides
-    context-sensitive actions in the layout actions bar, such as adjusting layout margins and
-orientation.
-    The layout actions bar displays available actions depending on the selected UI element in the
-    canvas.</p>
-    </dd>
-
-    <dt><strong>Outline</strong></dt>
-
-    <dd>On the right side of the editor is the outline view. It displays a hierarchical
-    view of your layout where you can do things such as reorder of views. The outline
-    view exposes similar functionality as the canvas but displays your layout in an ordered
-    list instead of a rendered preview.</dd>
-
-    <dt><strong>Palette</strong></dt>
-
-    <dd>On the left side of the editor is the palette. It provides a set of widgets that
-    you can drag onto the canvas. The palette shows rendered previews of the
-    widgets for easy lookup of desired UI widgets.</dd>
-
-    <dt><strong>Configuration Chooser</strong></dt>
-
-    <dd>At the top of the editor is the configuration chooser.
-    It provides options to change a layout's rendering mode or screen type.</dd>
-  </dl>
-
-  <img src="{@docRoot}images/layout_editor.png" alt="graphical layout editor screenshot"
-  height="500" id="layout-editor" name="layout-editor">
-
-  <p class="img-caption"><strong>Figure 1.</strong> Graphical layout editor</p>
-
-  <h3 id="canvas">Canvas and outline view</h3>
-
-  <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Google I/O Session Video</h2>
-
-      <p>View the segment on the <a href=
-      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=7m16s">canvas and outline view</a> and the
-      <a href="http://www.youtube.com/watch?v=Oq05KqjXTvs#t=11m43s">layout actions bar</a>
-      for more information.
-      </p>
-    </div>
-  </div>
-
-  <p>The canvas is the area where you can drag and drop UI widgets from the palette to design your
-  layout. The canvas offers a rendered preview of your layout depending on factors such as the
-  selected platform version, screen orientation, and currently selected theme that you specify in
-  the <a href="#configuration-chooser">configuration chooser</a>. You can also drag and drop
-  items into the outline view, which displays your layout in a hierarchical list. The outline view
-  exposes much of the same functionality as the canvas but offers another method of organization
-  that is beneficial for ordering and quickly selecting items. When you right-click a specific item
-  in the canvas or outline view, you can access a context-sensitive menu that lets you modify the
-  following attributes of the layout or view:</p>
-
-  <dl>
-    <dt><strong>View and layout properties</strong></dt>
-
-    <dd>
-      When you right-click a view or layout in the canvas or outline view, it brings up a
-      context-sensitive menu that lets you set things such as:
-
-      <ul>
-        <li>ID of the view or layout</li>
-
-        <li>Text of the view</li>
-
-        <li>Layout width</li>
-
-        <li>Layout height</li>
-
-        <li>Properties such as alpha or clickable</li>
-      </ul>
-    </dd>
-
-    <dt><strong>Animation preview and creation</strong></dt>
-
-    <dd>
-      If your layout or view is animated, you can preview the animation directly in the canvas
-      (when you select Android 3.0 or later as the platform version in the configuration chooser).
-      Right-click an item in the canvas and select <strong>Play Animation</strong>. If
-      animation is not associated with item, an option is available in the menu to create one.
-
-      <p>View the segment on the <a href=
-      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=28m30s">animation features</a> for more
-      information.</p>
-    </dd>
-
-    <dt><strong>Extract as Include</strong></dt>
-
-    <dd>You can extract parts of a current layout into its own layout file,
-    which you can then include in any layout with a single line of XML. See <a href=
-    "#extract-as-include">Layout Refactoring Support</a> for more information.</dd>
-  </dl>
-
-  <h4>Other canvas features</h4>
-
-  <p>The canvas has additional features not available in the outline view:</p>
-
-  <ul>
-
-    <li>Edit views with the layout actions bar: The context-sensitive layout actions bar allows you to
-    edit how a view is laid out in your UI. The available actions depend on the currently
-    selected view and its parent layout. Some common actions include
-    toggling the fill mode of the view and specifying margins. For instance, if you select a
-    {@link android.widget.Button}
-    in a {@link android.widget.LinearLayout}, you see actions related to the {@link
-android.widget.LinearLayout}, such as a toggle to switch
-    between horizontal and vertical layout, and a toggle to control whether its children are
-    aligned along their text baseline. You will also see toolbar actions to control the individual
-    layout attributes of the child, such as whether the child should stretch out to match its
-    parent's width and height, a dropdown action to set the child's layout gravity, a button to open
-    a margin editor, and a layout weight editor.</li>
-
-    <li>Edit a nested layout in its current context: If you are editing a layout
-    that includes another layout, you can edit the included layout in the layout that included
-    it.</li>
-
-    <li>Preview drag and drop location: When you drag and drop a UI widget onto the canvas, ruler
-    markers appear showing you the approximate location of the UI widget depending on the
-    type of layout, such as {@link android.widget.RelativeLayout} or {@link
-    android.widget.LinearLayout}.</li>
-
-    <li>Preview animations: You can preview view and layout animations when you select Android 2.1
-    or later for the platform version in the configuration bar.</li>
-
-    <li>Render layouts in real-time: Layouts are rendered as accurately as possible according to
-    the platform version, including the appropriate system and action bars.</li>
-
-    <li>Support for fragments: Fragments can be rendered in the same screen as the layout that
-    includes the fragments.</li>
-
-  </ul>
-
-  <img src="{@docRoot}images/canvas.png" alt="screenshot of the canvas" height="553">
-
-  <p class="img-caption"><strong>Figure 2.</strong> Canvas portion of the layout editor showing
-  a rendered preview of an application</p>
-
-  <img src=
-  "{@docRoot}images/layout_outline.png" alt="screenshot of the outline view" height="185">
-
-  <p class="img-caption"><strong>Figure 3.</strong> Outline view showing current layout's structure</p>
-
-  <h3 id="palette">Palette</h3>
-
-  <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Google I/O Session Video</h2>
-
-      <p>View the segment on the <a href=
-      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=7m53s">palette</a> for more information.</p>
-    </div>
-  </div>
-
-  <p>The palette contains the UI widgets that you can drag and drop onto the canvas and add to your
-  layout. The pallete categorizes the widgets and shows rendered previews
-  for easier lookup. The main features of the palette include:</p>
-
-  <ul>
-    <li>Different modes of rendered previews include: icons only, icons and text, tiny previews,
-    small previews, and previews (rendered in real size). Previews are only available for layouts
-    rendered with the latest revisions of Android 2.1 (API Level 7) or later.</li>
-
-    <li>Custom views in your project or library projects are added under custom views
-    category.</li>
-
-    <li>Arrange UI widgets alphabetically or by category.</li>
-  </ul>
-  <img src="{@docRoot}images/palette.png" alt="palette screenshot" height="566">
-
-  <p class="img-caption"><strong>Figure 4.</strong> Palette showing available UI widgets</p>
-
-  <h3 id="config-chooser">Configuration chooser</h3>
-
-  <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Google I/O Session Video</h2>
-
-      <p>View the segment on the <a href=
-      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=12m51s">configuration chooser</a> for more
-      information.</p>
-    </div>
-  </div>
-
-
-  <p>The configuration chooser allows you to create and configure different configurations of
-  a layout for different situations, such as one for landscape and one for portrait mode. You can
-  set the following options for each configuration of a layout:
-  </p>
-      <ul>
-        <li>Screen type combo box: Predefined screen settings for common device configurations. You
-        can also create your own by selecting <strong>Custom...</strong>.</li>
-
-        <li>Screen orientation combo box: Portrait or Landscape screen orientation.</li>
-
-        <li>Theme combo box: Predefined themes or a custom theme that you have created.</li>
-
-        <li>Platform combo box: Platform version used to render the canvas and palette as well as
-        displaying appropriate themes.</li>
-
-        <li>Custom layout combo boxes: The locale, dock, and time of day combo boxes let you select
-        different versions of the same layout depending on the device's current state. You can
-        create a new version of a layout with the <strong>Create</strong> button.</li>
-      </ul>
-
-      <img src="{@docRoot}images/layout_bar.png" alt=
-  "configuration chooser screenshot" height="50" id="configuration-chooser" name="configuration chooser">
-
-  <p class="img-caption"><strong>Figure 5.</strong> Configuration chooser</p>
-
-  <h2 id="refactoring">Layout Refactoring Support</h2>
-
-  <div class="sidebox-wrapper">
-    <div class="sidebox">
-      <h2>Google I/O Session Video</h2>
-
-      <p>View the segment on <a href=
-      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=18m00s">refactoring features</a> for a rundown
-of the more important refactoring features.</p>
-
-    </div>
-  </div>
-
-  <p>In both the graphical and XML layout editor, there are many features that help you quickly
-  refactor your layouts. The following list describes the major refactoring support:</p>
-
-  <dl>
-
-    <dt><strong>Change layout</strong></dt>
-    <dd>This lets you change the layout on the fly and re-renders the canvas for you.
-    You can apply this refactoring to any layout and the layout is converted to the new type if
-    possible. In many cases, the opening and closing tags of the layout's XML element are changed
-    along with things such as ID attributes and their references. However, for some supported
-    types, ADT attempts to preserve the layout, such as changing a {@link
-    android.widget.LinearLayout} to a {@link android.widget.RelativeLayout}.</dd>
-
-    <dt><strong>Change widget</strong></dt>
-    <dd>This lets you select one or more widgets and converts them to a new widget type. In
-    addition to changing the element name, it also removes any
-    attributes that are not supported by the new widget type and adds in any mandatory attributes
-    required by the new widget type. If the current ID of a widget includes the
-    current widget type in its ID (such as a <code>&lt;Button&gt;</code> widget named
-    <code>"button1"</code>), then the ID is changed to match the new widget type and all
-    references are updated.</dd>
-
-    <dt id="extract-as-include"><strong>Extract as include</strong></dt>
-    <dd>This lets you extract views inside of an existing layout into their own separate layout
-    file. An <code>include</code> tag that points to the newly created layout file is inserted
-    into the existing layout file. Right-click the view or layout and select <strong>Extract as
-    Include...</strong>.</dd>
-
-    <dt><strong>Extract string</strong></dt>
-    <dd>Extract strings from either XML or Java files into their own separate resource file.</dd>
-
-    <dt><strong>Extract style</strong></dt>
-    <dd>Extract style-related attributes from a layout and define them in a new
-    <code>styles.xml</code> file. You can select multiple views and this refactoring extracts all
-    of the same styles into one style and assigns that style to all the views that use it.</dd>
-
-    <dt><strong>Wrap-in container</strong></dt>
-    <dd>This lets you select one or more sibling elements and wrap them in a new container. This
-    can be applied to the root element as well, in which case the namespace declaration attributes
-    will be transferred to the new root. This refactoring also transfers <code>layout_</code>
-    attribute references to the new root, For example, suppose you have a {@link android.widget.RelativeLayout}.
-    If other widgets have layout constraints pointing to your widget, wrapping the widget causes
-    these constraints to point to the parent instead.</dd>
-
-    <dt><strong>Quick Assistant</strong></dt>
-    <dd>Provides refactoring suggestions depending on the current context. Press
-    <strong>Ctrl-1</strong> (or <strong>Cmd-1</strong> on
-    Mac) in an editor, and Eclipse provides a list of possible refactorings depending on the
-    context. The Quick Assistant provides fast access to all of the above refactorings, where applicable.
-    For example, if you are editing an XML value and decide you want to extract it out
-    as a string, place the text cursor in the string and press Ctrl-1 to see the refactoring context
-    menu.</dd>
-  </dl>
diff --git a/docs/html/guide/developing/tools/aidl.jd b/docs/html/guide/developing/tools/aidl.jd
deleted file mode 100644
index 731aef7..0000000
--- a/docs/html/guide/developing/tools/aidl.jd
+++ /dev/null
@@ -1,465 +0,0 @@
-page.title=Android Interface Definition Language (AIDL)
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>In this document</h2>
-<ol>
-  <li><a href="#Defining">Defining an AIDL Interface</a>
-    <ol>
-      <li><a href="#Create">Create the .aidl file</a></li>
-      <li><a href="#Implement">Implement the interface</a></li>
-      <li><a href="#Expose">Expose the interface to clients</a></li>
-    </ol>
-  </li>
-  <li><a href="#PassingObjects">Passing Objects over IPC</a></li>
-  <li><a href="#Calling">Calling an IPC Method</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p>AIDL (Android Interface Definition Language) is similar to other IDLs you might have
-worked with. It allows you to define the programming interface that both
-the client and service agree upon in order to communicate with each other using
-interprocess communication (IPC). On Android, one process cannot normally access the
-memory of another process. So to talk, they need to decompose their objects into primitives that the
-operating system can understand, and marshall the objects across that boundary for you. The code to
-do that marshalling is tedious to write, so Android handles it for you with AIDL.</p>
-
-<p class="note"><strong>Note:</strong> Using AIDL is necessary only if you allow clients from
-different applications to access your service for IPC and want to handle multithreading in your
-service. If you do not need to perform concurrent IPC across
-different applications, you should create your interface by <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html#Binder">implementing a
-Binder</a> or, if you want to perform IPC, but do <em>not</em> need to handle multithreading,
-implement your interface <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html#Messenger">using a Messenger</a>.
-Regardless, be sure that you understand <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a> before
-implementing an AIDL.</p>
-
-<p>Before you begin designing your AIDL interface, be aware that calls to an AIDL interface are
-direct function calls.  You should not make assumptions about the thread in which the call
-occurs.  What happens is different depending on whether the call is from a thread in the
-local process or a remote process. Specifically:</p>
-
-<ul>
-<li>Calls made from the local process are executed in the same thread that is making the call. If
-this is your main UI thread, that thread continues to execute in the AIDL interface.  If it is
-another thread, that is the one that executes your code in the service.  Thus, if only local
-threads are accessing the service, you can completely control which threads are executing in it (but
-if that is the case, then you shouldn't be using AIDL at all, but should instead create the
-interface by <a href="{@docRoot}guide/topics/fundamentals/bound-services.html#Binder">implementing a
-Binder</a>).</li>
-
-<li>Calls from a remote process are dispatched from a thread pool the platform maintains inside of
-your own process.  You must be prepared for incoming calls from unknown threads, with multiple calls
-happening at the same time.  In other words, an implementation of an AIDL interface must be
-completely thread-safe.</li>
-
-<li>The {@code oneway} keyword modifies the behavior of remote calls.  When used, a remote call does
-not block; it simply sends the transaction data and immediately returns.
-The implementation of the interface eventually receives this as a regular call from the {@link
-android.os.Binder} thread pool as a normal remote call. If {@code oneway} is used with a local call,
-there is no impact and the call is still synchronous.</li>
-</ul>
-
-
-<h2 id="Defining">Defining an AIDL Interface</h2>
-
-<p>You must define your AIDL interface in an {@code .aidl} file using the Java
-programming language syntax, then save it in the source code (in the {@code src/} directory) of both
-the application hosting the service and any other application that binds to the service.</p>
-
-<p>When you build each application that contains the {@code .aidl} file, the Android SDK tools
-generate an {@link android.os.IBinder} interface based on the {@code .aidl} file and save it in
-the project's {@code gen/} directory. The service must implement the {@link android.os.IBinder}
-interface as appropriate. The client applications can then bind to the service and call methods from
-the {@link android.os.IBinder} to perform IPC.</p>
-
-<p>To create a bounded service using AIDL, follow these steps:</p>
-<ol>
-    <li><a href="#CreateAidl">Create the .aidl file</a>
-      <p>This file defines the programming interface with method signatures.</p>
-    </li>
-    <li><a href="#ImplementTheInterface">Implement the interface</a>
-      <p>The Android SDK tools generate an interface in the Java programming language, based on your
-{@code .aidl} file. This interface has an inner abstract class named {@code Stub} that extends
-{@link android.os.Binder} and implements methods from your AIDL interface. You must extend the
-{@code Stub} class and implement the methods.</p>
-    </li>
-    <li><a href="#ExposeTheInterface">Expose the interface to clients</a>
-      <p>Implement a {@link android.app.Service Service} and override {@link
-android.app.Service#onBind onBind()} to return your implementation of the {@code Stub}
-class.</p>
-    </li>
-</ol>
-
-<p class="caution"><strong>Caution:</strong> Any changes that you make to your AIDL interface after
-your first release must remain backward compatible in order to avoid breaking other applications
-that use your service. That is, because your {@code .aidl} file must be copied to other applications
-in order for them to access your service's interface, you must maintain support for the original
-interface.</p>
-
-
-<h3 id="Create">1. Create the .aidl file</h3>
-
-<p>AIDL uses a simple syntax that lets you declare an interface with one or more methods that can
-take parameters and return values. The parameters and return values can be of any type, even other
-AIDL-generated interfaces.</p>
-
-<p>You must construct the {@code .aidl} file using the Java programming language. Each {@code .aidl}
-file must define a single interface and requires only the interface declaration and method
-signatures.</p>
-
-<p>By default, AIDL supports the following data types:</p>
-
-<ul>
-  <li>All primitive types in the Java programming language (such as {@code int}, {@code long},
-{@code char}, {@code boolean}, and so on)</li>
-  <li>{@link java.lang.String}</li>
-  <li>{@link java.lang.CharSequence}</li>
-  <li>{@link java.util.List}
-    <p>All elements in the {@link java.util.List} must be one of the supported data types in this
-list or one of the other AIDL-generated interfaces or parcelables you've declared. A {@link
-java.util.List} may optionally be used as a "generic" class (for example,
-<code>List&lt;String&gt;</code>).
-The actual concrete class that the other side receives is always an {@link
-java.util.ArrayList}, although the method is generated to use the {@link
-java.util.List} interface.</p>
-  </li>
-  <li>{@link java.util.Map}
-    <p>All elements in the {@link java.util.Map} must be one of the supported data types in this
-list or one of the other AIDL-generated interfaces or parcelables you've declared.  Generic maps,
-(such as those of the form
-{@code Map&lt;String,Integer&gt;} are not supported. The actual concrete class that the other side
-receives is always a {@link java.util.HashMap}, although the method is generated to
-use the {@link java.util.Map} interface.</p>
-  </li>
-</ul>
-
-<p>You must include an {@code import} statement for each additional type not listed above, even if
-they are defined in the same package as your interface.</p>
-
-<p>When defining your service interface, be aware that:</p>
-<ul>
-  <li>Methods can take zero or more parameters, and return a value or void.</li>
-  <li>All non-primitive parameters require a directional tag indicating which way the data goes.
-Either <code>in</code>, <code>out</code>, or <code>inout</code> (see the example below).
-    <p>Primitives are <code>in</code> by default, and cannot be otherwise.</p>
-    <p class="caution"><strong>Caution:</strong> You should limit the direction to what is truly
-needed, because marshalling parameters is expensive.</p></li>
-  <li>All code comments included in the {@code .aidl} file are included in the generated {@link
-android.os.IBinder} interface (except for comments before the import and package
-statements).</li>
-    <li>Only methods are supported; you cannot expose static fields in AIDL.</li>
-</ul>
-
-<p>Here is an example {@code .aidl} file:</p>
-
-<pre>
-// IRemoteService.aidl
-package com.example.android;
-
-// Declare any non-default types here with import statements
-
-/** Example service interface */
-interface IRemoteService {
-    /** Request the process ID of this service, to do evil things with it. */
-    int getPid();
-
-    /** Demonstrates some basic types that you can use as parameters
-     * and return values in AIDL.
-     */
-    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
-            double aDouble, String aString);
-}
-</pre>
-
-<p>Simply save your {@code .aidl} file in your project's {@code src/} directory and when you
-build your application, the SDK tools generate the {@link android.os.IBinder} interface file in your
-project's {@code gen/} directory. The generated file name matches the {@code .aidl} file name, but
-with a {@code .java} extension (for example, {@code IRemoteService.aidl} results in {@code
-IRemoteService.java}).</p>
-
-<p>If you use Eclipse, the incremental build generates the binder class almost immediately. If you
-do not use Eclipse, then the Ant tool generates the binder class next time you build your
-application&mdash;you should build your project with <code>ant debug</code> (or <code>ant
-release</code>) as soon as you're finished writing the {@code .aidl} file, so that your code can
-link against the generated class.</p>
-
-
-<h3 id="Implement">2. Implement the interface</h3>
-
-<p>When you build your application, the Android SDK tools generate a {@code .java} interface file
-named after your {@code .aidl} file. The generated interface includes a subclass named {@code Stub}
-that is an abstract implementation of its parent interface (for example, {@code
-YourInterface.Stub}) and declares all the methods from the {@code .aidl} file.</p>
-
-<p class="note"><strong>Note:</strong> {@code Stub} also
-defines a few helper methods, most notably {@code asInterface()}, which takes an {@link
-android.os.IBinder} (usually the one passed to a client's {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method) and
-returns an instance of the stub interface. See the section <a href="#calling">Calling an IPC
-Method</a> for more details on how to make this cast.</p>
-
-<p>To implement the interface generated from the {@code .aidl}, extend the generated {@link
-android.os.Binder} interface (for example, {@code YourInterface.Stub}) and implement the methods
-inherited from the {@code .aidl} file.</p>
-
-<p>Here is an example implementation of an interface called {@code IRemoteService} (defined by the
-{@code IRemoteService.aidl} example, above) using an anonymous instance:</p>
-  
-<pre>
-private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
-    public int getPid(){
-        return Process.myPid();
-    }
-    public void basicTypes(int anInt, long aLong, boolean aBoolean,
-        float aFloat, double aDouble, String aString) {
-        // Does nothing
-    }
-};
-</pre>
-
-<p>Now the {@code mBinder} is an instance of the {@code Stub} class (a {@link android.os.Binder}),
-which defines the RPC interface for the service. In the next step, this instance is exposed to
-clients so they can interact with the service.</p>
-
-<p>There are a few rules you should be aware of when implementing your AIDL interface: </p>
-<ul>
-    <li>Incoming calls are not guaranteed to be executed on the main thread, so you need to think
-about multithreading from the start and properly build your service to be thread-safe.</li>
-    <li>By default, RPC calls are synchronous. If you know that the service takes more than a few
-milliseconds to complete a request, you should not call it from the activity's main thread, because
-it might hang the application (Android might display an &quot;Application is Not Responding&quot;
-dialog)&mdash;you should usually call them from a separate thread in the client. </li>
-    <li>No exceptions that you throw are sent back to the caller.</li>
-</ul>
-
-
-<h3 id="Expose">3. Expose the interface to clients</h3>
-
-<p>Once you've implemented the interface for your service, you need to expose it to
-clients so they can bind to it. To expose the interface
-for your service, extend {@link android.app.Service Service} and implement {@link
-android.app.Service#onBind onBind()} to return an instance of your class that implements
-the generated {@code Stub} (as discussed in the previous section). Here's an example
-service that exposes the {@code IRemoteService} example interface to clients. </p>
-
-<pre>
-public class RemoteService extends Service {
-    &#64;Override
-    public void onCreate() {
-        super.onCreate();
-    }
-
-    &#64;Override
-    public IBinder onBind(Intent intent) {
-        // Return the interface
-        return mBinder;
-    }
-
-    private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
-        public int getPid(){
-            return Process.myPid();
-        }
-        public void basicTypes(int anInt, long aLong, boolean aBoolean,
-            float aFloat, double aDouble, String aString) {
-            // Does nothing
-        }
-    };
-}
-</pre>
-
-<p>Now, when a client (such as an activity) calls {@link android.content.Context#bindService
-bindService()} to connect to this service, the client's {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback receives the
-{@code mBinder} instance returned by the service's {@link android.app.Service#onBind onBind()}
-method.</p>
-
-<p>The client must also have access to the interface class, so if the client and service are in
-separate applications, then the client's application must have a copy of the {@code .aidl} file
-in its {@code src/} directory (which generates the {@code android.os.Binder}
-interface&mdash;providing the client access to the AIDL methods).</p>
-
-<p>When the client receives the {@link android.os.IBinder} in the {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback, it must call
-<code><em>YourServiceInterface</em>.Stub.asInterface(service)</code> to cast the returned
-parameter to <code><em>YourServiceInterface</em></code> type. For example:</p>
-
-<pre>
-IRemoteService mIRemoteService;
-private ServiceConnection mConnection = new ServiceConnection() {
-    // Called when the connection with the service is established
-    public void onServiceConnected(ComponentName className, IBinder service) {
-        // Following the example above for an AIDL interface,
-        // this gets an instance of the IRemoteInterface, which we can use to call on the service
-        mIRemoteService = IRemoteService.Stub.asInterface(service);
-    }
-
-    // Called when the connection with the service disconnects unexpectedly
-    public void onServiceDisconnected(ComponentName className) {
-        Log.e(TAG, "Service has unexpectedly disconnected");
-        mIRemoteService = null;
-    }
-};
-</pre>
-
-<p>For more sample code, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
-RemoteService.java}</a> class in <a
-href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
-
-
-
-
-
-
-  
-
-<h2 id="PassingObjects">Passing Objects over IPC</h2>
-
-<p>If you have a class that you would like to send from one process to another through
-an IPC interface, you can do that. However, you must ensure that the code for your class is
-available to the other side of the IPC channel and your class must support the {@link
-android.os.Parcelable} interface. Supporting the {@link android.os.Parcelable} interface is
-important because it allows the Android system to decompose objects into primitives that can be
-marshalled across processes.</p>
-
-<p>To create a class that supports the {@link android.os.Parcelable} protocol, you must do the
-following:</b>
-<ol>
-<li>Make your class implement the {@link android.os.Parcelable} interface.</li>
-<li>Implement {@link android.os.Parcelable#writeToParcel writeToParcel}, which takes the
-current state of the object and writes it to a {@link android.os.Parcel}.</li>
-<li>Add a static field called <code>CREATOR</code> to your class which is an object implementing
-the {@link android.os.Parcelable.Creator Parcelable.Creator} interface.</li>
-<li>Finally, create an {@code .aidl} file that declares your parcelable class (as shown for the
-{@code Rect.aidl} file, below).
-  <p>If you are using a custom build process, do <em>not</em> add the {@code .aidl} file to your
-build. Similar to a header file in the C language, this {@code .aidl} file isn't compiled.</p></li>
-</ol>
-
-<p>AIDL uses these methods and fields in the code it generates to marshall and unmarshall
-your objects.</p>
-
-<p>For example, here is a {@code Rect.aidl} file to create a {@code Rect} class that's
-parcelable:</p>
-
-<pre>
-package android.graphics;
-
-// Declare Rect so AIDL can find it and knows that it implements
-// the parcelable protocol.
-parcelable Rect;
-</pre>
-
-<p>And here is an example of how the {@link android.graphics.Rect} class implements the
-{@link android.os.Parcelable} protocol.</p>
-
-<pre>
-import android.os.Parcel;
-import android.os.Parcelable;
-
-public final class Rect implements Parcelable {
-    public int left;
-    public int top;
-    public int right;
-    public int bottom;
-
-    public static final Parcelable.Creator&lt;Rect&gt; CREATOR = new
-Parcelable.Creator&lt;Rect&gt;() {
-        public Rect createFromParcel(Parcel in) {
-            return new Rect(in);
-        }
-
-        public Rect[] newArray(int size) {
-            return new Rect[size];
-        }
-    };
-
-    public Rect() {
-    }
-
-    private Rect(Parcel in) {
-        readFromParcel(in);
-    }
-
-    public void writeToParcel(Parcel out) {
-        out.writeInt(left);
-        out.writeInt(top);
-        out.writeInt(right);
-        out.writeInt(bottom);
-    }
-
-    public void readFromParcel(Parcel in) {
-        left = in.readInt();
-        top = in.readInt();
-        right = in.readInt();
-        bottom = in.readInt();
-    }
-}
-</pre>
-
-<p>The marshalling in the {@code Rect} class is pretty simple.  Take a look at the other
-methods on {@link android.os.Parcel} to see the other kinds of values you can write
-to a Parcel.</p>
-
-<p class="warning"><strong>Warning:</strong> Don't forget the security implications of receiving
-data from other processes.  In this case, the {@code Rect} reads four numbers from the {@link
-android.os.Parcel}, but it is up to you to ensure that these are within the acceptable range of
-values for whatever the caller is trying to do.  See <a
-href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> for more
-information about how to keep your application secure from malware.</p>
-
-
-
-<h2 id="Calling">Calling an IPC Method</h2>
-
-<p>Here are the steps a calling class must take to call a remote interface defined with AIDL: </p>
-<ol>
-    <li>Include the {@code .aidl} file in the project {@code src/} directory.</li>
-    <li>Declare an instance of the {@link android.os.IBinder} interface (generated based on the
-AIDL). </li>
-    <li>Implement {@link android.content.ServiceConnection ServiceConnection}. </li>
-    <li>Call {@link
-android.content.Context#bindService(android.content.Intent,android.content.ServiceConnection,int)
-        Context.bindService()}, passing in your {@link
-android.content.ServiceConnection} implementation. </li>
-    <li>In your implementation of {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()},
-you will receive an {@link android.os.IBinder} instance (called <code>service</code>). Call
-<code><em>YourInterfaceName</em>.Stub.asInterface((IBinder)<em>service</em>)</code> to
-        cast the returned parameter to <em>YourInterface</em> type.</li>
-    <li>Call the methods that you defined on your interface. You should always trap
-        {@link android.os.DeadObjectException} exceptions, which are thrown when
-        the connection has broken; this will be the only exception thrown by remote
-        methods.</li>
-    <li>To disconnect, call {@link
-android.content.Context#unbindService(android.content.ServiceConnection)
-        Context.unbindService()} with the instance of your interface. </li>
-</ol>
-<p>A few comments on calling an IPC service:</p>
-<ul>
-    <li>Objects are reference counted across processes. </li>
-    <li>You can send anonymous objects
-        as method arguments. </li>
-</ul>
-
-<p>For more information about binding to a service, read the <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html#Binding">Bound Services</a>
-document.</p>
-
-<p>Here is some sample code demonstrating calling an AIDL-created service, taken
-    from the Remote Service sample in the ApiDemos project.</p>
-<p>{@sample development/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
-    calling_a_service}</p>
diff --git a/docs/html/guide/developing/tools/android.jd b/docs/html/guide/developing/tools/android.jd
deleted file mode 100644
index 295a720..0000000
--- a/docs/html/guide/developing/tools/android.jd
+++ /dev/null
@@ -1,393 +0,0 @@
-page.title=android
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<p>{@code android} is an important development tool that lets you:</p>
-
-  <ul>
-    <li>Create, delete, and view Android Virtual Devices (AVDs). See <a href= 
-    "{@docRoot}guide/developing/devices/managing-avds-cmdline.html">Managing AVDs from the Command
-Line</a>.</li>
-
-    <li>Create and update Android projects. See <a href= 
-    "{@docRoot}guide/developing/projects/projects-cmdline.html">Managing Projects from
-    the Command Line</a>.</li>
-
-    <li>Update your Android SDK with new platforms, add-ons, and documentation. See <a href= 
-    "{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>.</li>
-  </ul>If you are using Eclipse, the <code>android</code> tool's features are integrated
-  into ADT, so you should not need to use this tool directly.
-  
-  <p class="note"><strong>Note:</strong> The documentation of options below is not exhaustive
-and may be out of date. For the most current list of options, execute <code>android
---help</code>.</p>
-  
-  
-  
-
-  <h2>Syntax</h2>
-  <pre>android [global options] action [action options]</pre>
-
-  <h3>Global Options</h3>
-
-  <dl>
-    <dt><code>-s</code></dt>
-
-    <dd>Silent mode: only errors are printed out</dd>
-
-    <dt><code>-h</code></dt>
-
-    <dd>Usage help</dd>
-
-    <dt><code>-v</code></dt>
-
-    <dd>Verbose mode: errors, warnings and informational messages are printed.</dd>
-  </dl>
-
-  <h3>AVD actions and options</h3>
-
-  <table>
-    <tr>
-      <th width="15%">Action</th>
-
-      <th width="20%">Option</th>
-
-      <th width="30%">Description</th>
-
-      <th>Comments</th>
-    </tr>
-
-    <tr>
-      <td rowspan="6"><code>avd</code></td>
-
-      <td>None</td>
-
-      <td>Launch the AVD Manager</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td rowspan="6"><code>sdk</code></td>
-
-      <td>None</td>
-
-      <td>Launch the Android SDK Manager</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td rowspan="6"><code>create avd</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name for the AVD.</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-t &lt;targetID&gt;</code></td>
-
-      <td>Target ID of the system image to use with the new AVD. To obtain a list of available
-      targets, use <code>android list targets</code></td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-c &lt;path&gt;|&lt;size&gt;[K|M]</code></td>
-
-      <td>The path to the SD card image to use with this AVD or the size of a new SD card image to
-      create for this AVD. For example, <code>-c path/to/sdcard</code> or <code>-c
-      1000M</code>.</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-f</code></td>
-
-      <td>Force creation of the AVD</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Path to the location at which to create the directory for this AVD's files.</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-s &lt;name&gt;|&lt;width&gt;-&lt;height&gt;</code></td>
-
-      <td>The skin to use for this AVD, identified by name or dimensions. The <code>android</code>
-      tool scans for a matching skin by name or dimension in the <code>skins/</code> directory of
-      the target referenced in the <code>-t &lt;targetID&gt;</code> argument. For example, <code>-s
-      HVGA-L</code></td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>delete avd</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name of the AVD to delete</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td rowspan="3"><code>move avd</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name of the AVD to move</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Path to the location at which to create the directory for this AVD's files.</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-r &lt;new-name&gt;</code></td>
-
-      <td>New name of the AVD if you want to rename it</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>update avd</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name of the AVD to move</td>
-
-      <td>Required</td>
-    </tr>
-  </table>
-
-  <h3>Project actions and options</h3>
-
-  <table>
-    <tr>
-      <th width="15%">Action</th>
-
-      <th width="20%">Option</th>
-
-      <th width="30%">Description</th>
-
-      <th>Comments</th>
-    </tr>
-
-    <tr>
-      <td rowspan="5"><code>create project</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name for the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-t &lt;targetID&gt;</code></td>
-
-      <td>Target ID of the system image to use with the new AVD. To obtain a list of available
-      targets, use <code>android list targets</code></td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-k &lt;path&gt;|&lt;size&gt;[K|M]</code></td>
-
-      <td>Package namespace</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-a</code></td>
-
-      <td>Name for the default Activity class</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Location of your project directory</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td rowspan="5"><code>update project</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name of the project to update</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Location path of the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-l &lt;library path&gt;</code></td>
-
-      <td>Location path of an Android Library to add, relative to the main project</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-s &lt;subprojects&gt;</code></td>
-
-      <td>Update any projects in subfolders such as test projects</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-t &lt;targetID&gt;</code></td>
-
-      <td>Target id to set for the project</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td rowspan="3"><code>create-test-project</code></td>
-
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name of the project</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Location path of the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-m &lt;main&gt;</code></td>
-
-      <td>The name of the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td rowspan="2"><code>update-test-project</code></td>
-
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Location path of the project to test, relative to the new project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-m &lt;main&gt;</code></td>
-
-      <td>The main class of the project to test</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td rowspan="4"><code>create-lib-project</code></td>
-
-      <td><code>-k &lt;packageName&gt;</code></td>
-
-      <td>(Required) Package name of the library project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Location path of the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-t &lt;targetID&gt;</code></td>
-
-      <td>Target ID of the library project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-n &lt;name&gt;</code></td>
-
-      <td>The name of the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td rowspan="3"><code>update-lib-project</code></td>
-
-      <td><code>-p &lt;path&gt;</code></td>
-
-      <td>Location path of the project</td>
-
-      <td>Required</td>
-    </tr>
-
-    <tr>
-      <td><code>-l &lt;libraryPath&gt;</code></td>
-
-      <td>Location path of an Android Library to add, relative to the main project</td>
-
-      <td></td>
-    </tr>
-
-    <tr>
-      <td><code>-t &lt;name&gt;</code></td>
-
-      <td>Target ID of the library project</td>
-
-      <td></td>
-    </tr>
-  </table>
-
-  <h3>Update actions</h3>
-  <dl>
-  <dt><code>update adb</code></dt>
-  <dd>Updates adb to support the USB devices declared in the SDK add-ons.</dd>
-   
-  <dt><code>update sdk</code></dt>
-  <dd>Updates the SDK by suggesting new platforms to install if available.</dd>
diff --git a/docs/html/guide/developing/tools/avd.html b/docs/html/guide/developing/tools/avd.html
deleted file mode 100644
index c8455db..0000000
--- a/docs/html/guide/developing/tools/avd.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/devices/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/devices/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/bmgr.jd b/docs/html/guide/developing/tools/bmgr.jd
deleted file mode 100644
index d63dcf2..0000000
--- a/docs/html/guide/developing/tools/bmgr.jd
+++ /dev/null
@@ -1,193 +0,0 @@
-page.title=bmgr
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<!-- quickview box content here -->
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>bmgr quickview</h2>
-<p><code>bmgr</code> lets you control the backup/restore system on an Android device.
-
-  <h2>In this document</h2>
-  <ol>
-<li><a href="#backup">Forcing a Backup Operation</a></li>
-<li><a href="#restore">Forcing a Restore Operation</a></li>
-<li><a href="#other">Other Commands</a></li>
-  </ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/data/backup.html">Data Backup</a></li>
-  </ol>
-
-</div>
-</div>
-
-<!-- normal page content here -->
-
-<p><code>bmgr</code> is a shell tool you can use to interact with the Backup Manager
-on Android devices supporting API Level 8 or greater.  It provides commands to induce backup
-and restore operations so that you don't need to repeatedly wipe data or take similar
-intrusive steps in order to test your application's backup agent.  These commands are
-accessed via the <a href="{@docRoot}guide/developing/tools/adb.html">adb</a> shell.
-
-<p>For information about adding support for backup in your application, read <a
-href="{@docRoot}guide/topics/data/backup.html">Data Backup</a>, which includes a guide to testing
-your application using {@code bmgr}.</p>
-
-
-<h2 id="backup">Forcing a Backup Operation</h2>
-
-<p>Normally, your application must notify the Backup Manager when its data has changed, via {@link
-android.app.backup.BackupManager#dataChanged()}. The Backup Manager will then invoke your
-backup agent's {@link
-android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor,BackupDataOutput,ParcelFileDescriptor)
-onBackup()} implementation at some time in the future. However, instead of calling {@link
-android.app.backup.BackupManager#dataChanged()}, you can invoke a backup request from the command
-line by running the <code>bmgr backup</code> command:
-
-    <pre class="no-pretty-print">adb shell bmgr backup <em>&lt;package&gt;</em></pre>
-
-<p><code><em>&lt;package&gt;</em></code> is the formal package name of the application you wish to
-schedule for
-backup. When you execute this backup command, your application's backup agent will be invoked to
-perform a backup operation at some time in the future (via your {@link
-android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor,BackupDataOutput,ParcelFileDescriptor)
-onBackup()} method), though there is no guarantee when it will occur. However, you can force all
-pending backup operations to run immediately by using the <code>bmgr run</code> command:
-
-    <pre class="no-pretty-print">adb shell bmgr run</pre>
-
-<p>This causes a backup pass to execute immediately, invoking the backup agents of all applications
-that had previously called {@link android.app.backup.BackupManager#dataChanged()} since the
-last backup operation, plus any applications which had been manually scheduled for
-backup via <code>bmgr backup</code>.
-
-
-
-<h2 id="restore">Forcing a Restore Operation</h2>
-
-<p>Unlike backup operations, which are batched together and run on an occasional basis, restore
-operations execute immediately.  The Backup Manager currently provides two kinds of restore
-operations.  The first kind restores an entire device with the data that has been backed up.  This
-is typically performed only when a device is first provisioned (to replicate settings and other
-saved state from the user's previous device) and is an operation that only the system can
-perform. The second kind of restore operation restores
-a single application to its "active" data set; that is, the application will abandon its current
-data and revert to the last-known-good data that is held in the current backup image. You can
-invoke this second restore operation with the {@link
-android.app.backup.BackupManager#requestRestore(RestoreObserver) requestRestore()} method. The
-Backup Manager will then invoke your backup agent's {@link
-android.app.backup.BackupAgent#onRestore(BackupDataInput,int,ParcelFileDescriptor)
-onRestore()} implementation.
-
-<p>While testing your application, you can immediately invoke the restore operation (bypassing the
-{@link android.app.backup.BackupManager#requestRestore(RestoreObserver) requestRestore()} method)
-for your application by using the <code>bmgr restore</code> command:
-
-    <pre class="no-pretty-print">adb shell bmgr restore <em>&lt;package&gt;</em></pre>
-
-<p><code><em>&lt;package&gt;</em></code> is the formal Java-style package name of the application
-participating in the backup/restore mechanism, which you would like to restore. The Backup
-Manager will immediately instantiate the application's backup agent and invoke it for restore. This
-will happen even if your application is not currently running.
-
-
-
-
-
-<h2 id="other">Other Commands</h2>
-
-<h3>Wiping data</h3>
-
-<p>The data for a single application can be erased from the active data set on demand.  This is
-very useful while you're developing a backup agent, in case bugs lead you to write corrupt data
-or saved state information. You can wipe an application's data with the <code>bmgr wipe</code>
-command:
-
-    <pre class="no-pretty-print">adb shell bmgr wipe <em>&lt;package&gt;</em></pre>
-
-<p><code><em>&lt;package&gt;</em></code> is the formal package name of the application whose data
-you wish to
-erase.  The next backup operation that the application's agent processes will look as
-though the application had never backed anything up before.
-
-
-<h3>Enabling and disabling backup</h3>
-
-<p>You can see whether the Backup Manager is operational at all with the <code>bmgr
-enabled</code> command:
-
-    <pre class="no-pretty-print">adb shell bmgr enabled</pre>
-
-<p>This might be useful if your application's backup agent is never being invoked for backup, to
-verify whether the operating system thinks it should be performing such operations at all.</p>
-
-<p>You can also directly disable or enable the Backup Manager with this command:
-
-    <pre class="no-pretty-print">adb shell bmgr enable <em>&lt;boolean&gt;</em></pre>
-
-<p><code><em>&lt;boolean&gt;</em></code> is either <code>true</code> or <code>false</code>.
-This is equivalent to disabling or enabling backup in the device's main Settings UI.</p>
-
-<p class="warning"><strong>Warning!</strong>  When backup is disabled, the current backup transport
-will explicitly wipe
-the entire active data set from its backend storage.  This is so that when a user says
-they do <em>not</em> want their data backed up, the Backup Manager respects that wish.  No further
-data will be saved from the device, and no restore operations will be possible, unless the Backup
-Manager is re-enabled (either through Settings or through the above <code>bmgr</code> command).
-
-
-
-
-<!-- The following is not useful to applications, but may be some useful information some day...
-
-
-<h2 id="transports">Applying a Backup Transport</h2>
-
-<p>A "backup transport" is the code module responsible for moving backup and restore data
-to and from some storage location.  A device can have multipe transports installed, though only
-one is active at any given time.  Transports are identified by name.  You can see what
-transports are available on your device or emulator by running the
-<code>bmgr list transports</code> command:
-
-    <pre class="no-pretty-print">adb shell bmgr list transports</pre>
-
-<p>The output of this command is a list of the transports available on the device.  The currently
-active transport is flagged with a <code>*</code> character.  Transport names may look like
-component names (for example, <code>android/com.android.internal.backup.LocalTransport</code>),
-but they need not be, and the strings are never used as direct class references.  The use of
-a component-like naming scheme is simply for purposes of preventing name collisions.
-
-<p>You can change which transport is currently active from the command line as well:
-
-    <pre class="no-pretty-print">adb shell bmgr transport <em>&lt;name&gt;</em></pre>
-
-<p><code><em>&lt;name&gt;</em></code> is one of the names as printed by the <code>bmgr list
-transports</code>
-command.  From this point forward, backup and restore operations will be directed through the
-newly-selected transport.  Backup state tracking is managed separately for each transport, so
-switching back and forth between them will not corrupt the saved state.
-
-
-
-
-<h2 id="restoresets">Viewing Restore Sets</h2>
-
-<p>All of the application data that a device has written to its backup transport is tracked
-as a group that is collectively called a "restore set," because each data set is
-most often manipulated during a restore operation. When a device is provisioned for the first
-time, a new restore set is established.  You can get a listing of all the restore sets available to
-the current transport by running the <code>bmgr list sets</code> command:
-
-    <pre class="no-pretty-print">adb shell bmgr list sets</pre>
-
-<p>The output is a listing of available restore sets, one per line.  The first item on each line is
-a token (a hexadecimal value that identifies the restore set to the transport).  Following
-the token is a string that briefly identifies the restore set.
-Only the token is used within the backup and restore mechanism.
-
-
--->
diff --git a/docs/html/guide/developing/tools/ddms.html b/docs/html/guide/developing/tools/ddms.html
deleted file mode 100644
index 052ccc9..0000000
--- a/docs/html/guide/developing/tools/ddms.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/debugging/ddms.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/debugging/ddms.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/dmtracedump.jd b/docs/html/guide/developing/tools/dmtracedump.jd
deleted file mode 100644
index cb9ad26..0000000
--- a/docs/html/guide/developing/tools/dmtracedump.jd
+++ /dev/null
@@ -1,66 +0,0 @@
-page.title=dmtracedump
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-
- <p><code>dmtracedump</code> is a tool that gives you an alternate way of generating
-  graphical call-stack diagrams from trace log files (instead of using Traceview).</p>
-  
-  <p>This document is a reference to the available command line options. For more information on generating trace
-  logs, see <a href="{@docRoot}guide/developing/debugging/debugging-tracing.html">Profiling with
-  Traceview and dmtracedump</a>.</p>
-
-  <p>The usage for <code>dmtracedump</code> is:</p>
-  <pre>
-dmtracedump [-ho] [-s sortable] [-d trace-base-name] [-g outfile] &lt;trace-base-name&gt;
-</pre>
-
-  <p>The tool then loads trace log data from <code>&lt;trace-base-name&gt;.data</code> and
-  &lt;trace-base-name&gt;.key. The table below lists the options for dmtracedump.</p>
-
-  <table>
-    <tr>
-      <th>Option</th>
-
-      <th>Description</th>
-    </tr>
-
-    <tr>
-      <td><nobr><code>-d&nbsp;<em>&lt;trace-base-name&gt;</em></code></nobr></td>
-
-      <td>Diff with this trace name</td>
-    </tr>
-
-    <tr>
-      <td><code>-g&nbsp;<em>&lt;outfile&gt;</em></code></td>
-
-      <td>Generate output to &lt;outfile&gt;</td>
-    </tr>
-
-    <tr>
-      <td><code>-h</code></td>
-
-      <td>Turn on HTML output</td>
-    </tr>
-
-    <tr>
-      <td><code>-o</code></td>
-
-      <td>Dump the trace file instead of profiling</td>
-    </tr>
-
-    <tr>
-      <td><code>-d&nbsp;<em>&lt;trace-base-name&gt;</em></code></td>
-
-      <td>URL base to the location of the sortable javascript file</td>
-    </tr>
-
-    <tr>
-      <td><code>-t&nbsp;&lt;percent&gt;</code></td>
-
-      <td>Minimum threshold for including child nodes in the graph (child's inclusive time as a
-      percentage of parent inclusive time). If this option is not used, the default threshold is
-      20%.</td>
-    </tr>
-  </table>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/emulator.jd b/docs/html/guide/developing/tools/emulator.jd
deleted file mode 100644
index 21d4263..0000000
--- a/docs/html/guide/developing/tools/emulator.jd
+++ /dev/null
@@ -1,581 +0,0 @@
-page.title=Android Emulator
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#KeyMapping">Keyboard Commands</a></li>
-    <li><a href="#startup-options">Command Line Parameters</a></li>
-  </ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/developing/devices/emulator.html">Using the Android Emulator</a></li>
-    <li><a href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a></li>
-  </ol>
-
-</div>
-</div>
-
-
-<p>The Android SDK includes a mobile device emulator &mdash; a virtual mobile device
-that runs on your computer. The emulator lets you develop and test
-Android applications without using a physical device.</p>
-
-<p>This document is a reference to the available command line options and the keyboard mapping to
-device keys.
-For a complete guide to using the Android Emulator, see
-<a href="{@docRoot}guide/developing/devices/emulator.html">Using the Android Emulator</a>.
-
-
-<h2 id="KeyMapping">Keyboard Commands</h2>
-
-<p>Table 1 summarizes the mappings between the emulator keys and the keys of your keyboard.</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Emulator keyboard mapping</p>
-<table  border="0" style="clear:left;">
-  <tr>
-    <th>Emulated Device Key </th>
-    <th>Keyboard Key </th>
-  </tr>
-  <tr>
-    <td>Home</td>
-    <td>HOME</td>
-  </tr>
-  <tr>
-    <td>Menu (left softkey)</td>
-    <td>F2 <em>or</em> Page-up button</td>
-  </tr>
-  <tr>
-    <td>Star (right softkey)</td>
-    <td>Shift-F2 <em>or </em>Page Down</td>
-  </tr>
-  <tr>
-    <td>Back</td>
-    <td>ESC</td>
-  </tr>
-  <tr>
-    <td>Call/dial button </td>
-    <td>F3</td>
-  </tr>
-  <tr>
-    <td>Hangup/end call button</td>
-    <td>F4</td>
-  </tr>
-  <tr>
-    <td>Search</td>
-    <td>F5 </td>
-  </tr>
-  <tr>
-    <td>Power button</td>
-    <td>F7 </td>
-  </tr>
-  <tr>
-    <td>Audio volume up button</td>
-    <td>KEYPAD_PLUS, Ctrl-F5</td>
-  </tr>
-
-  <tr>
-    <td>Audio volume down button</td>
-    <td>KEYPAD_MINUS, Ctrl-F6</td>
-  </tr>
-  <tr>
-    <td>Camera button</td>
-    <td>Ctrl-KEYPAD_5, Ctrl-F3</td>
-  </tr>
-  <tr>
-    <td>Switch to previous layout orientation (for example, portrait, landscape)</td>
-    <td>KEYPAD_7, Ctrl-F11</td>
-  </tr>
-  <tr>
-    <td>Switch to next layout orientation (for example, portrait, landscape)</td>
-    <td>KEYPAD_9, Ctrl-F12</td>
-  </tr>
-  <tr>
-    <td>Toggle cell networking on/off</td>
-    <td>F8</td>
-  </tr>
-  <tr>
-    <td>Toggle code profiling</td>
-    <td>F9 (only with <code>-trace</code> startup option)</td>
-  </tr>
-  <tr>
-    <td>Toggle fullscreen mode</td>
-    <td>Alt-Enter</td>
-  </tr>
-  <tr>
-    <td>Toggle trackball mode</td>
-    <td>F6</td>
-  </tr>
-  <tr>
-    <td>Enter trackball mode temporarily (while key is pressed)</td>
-    <td>Delete</td>
-  </tr>
-  <tr>
-    <td>DPad left/up/right/down</td>
-    <td>KEYPAD_4/8/6/2</td>
-  </tr>
-  <tr>
-    <td>DPad center click</td>
-    <td>KEYPAD_5</td>
-  </tr>
-  <tr>
-    <td>Onion alpha increase/decrease</td>
-    <td>KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/)</td>
-  </tr>
-</table>
-
-
-<h2 id="startup-options">Command Line Parameters</h2>
-
-<p>The emulator supports a variety of options that you can specify
-when launching the emulator, to control its appearance or behavior.
-Here's the command-line syntax of the options available to the {@code emulator} program:</p>
-
-<pre>emulator -avd &lt;avd_name&gt; [-&lt;option&gt; [&lt;value&gt;]] ... [-&lt;qemu args&gt;]</pre>
-
-<p class="table-caption"><strong>Table 2.</strong> Emulator command line parameters</p>
-<table>
-<tr>
-  <th width="10%" >Category</th>
-  <th width="20%" >Option</th>
-    <th width="30%" >Description</th>
-    <th width="40%" >Comments</th>
-</tr>
-
-<tr>
-  <td>AVD</td>
-  <td><code>-avd &lt;avd_name&gt;</code> or <br>
-      <code>@&lt;avd_name&gt;</code></td>
-  <td><strong>Required</strong>. Specifies the AVD to load for this emulator
-      instance.</td>
-  <td>You must create an AVD configuration before launching the emulator. For
-      information, see <a href="{@docRoot}guide/developing/devices/managing-avds.html">Managing
-      AVDs with AVD Manager</a>.</td>
-<tr>
-  <td rowspan="7">Disk Images</td>
-  <td><code>-cache&nbsp;&lt;filepath&gt;</code></td>
-  <td>Use &lt;filepath&gt; as the working cache partition image. </td>
-  <td>An absolute or relative path to the current working directory.
-  If no cache file is specified, the emulator's default behavior is to use a temporary file instead.
-  <p>For more information on disk images, use <code>-help-disk-images</code>.</p>
-</td></tr>
-<tr>
-  <td><code>-data&nbsp;&lt;filepath&gt;</code></td>
-  <td>Use {@code &lt;filepath&gt;} as the working user-data disk image. </td>
-  <td>Optionally, you can specify a path relative to the current working directory.
-  If <code>-data</code> is not used, the emulator looks for a file named {@code userdata-qemu.img}
-  in the storage area of the AVD being used (see <code>-avd</code>).
-</td></tr>
-<!--
-<tr>
-  <td><code>-datadir &lt;dir&gt;</code></td>
-  <td>Search for the user-data disk image specified in <code>-data</code> in &lt;dir&gt;</td>
-  <td><code>&lt;dir&gt;</code> is a path relative to the current working directory.
-
-<p>If you do not specify <code>-datadir</code>, the emulator looks for the user-data image
-in the storage area of the AVD being used (see <code>-avd</code>)</p><p>For more information
-on disk images, use <code>-help-disk-images</code>.</p>
-</td></tr>
--->
-<!--
-<tr>
-  <td><code>-image&nbsp;&lt;filepath&gt;</code></td>
-  <td>Use &lt;filepath&gt; as the system image.</td>
-  <td>Optionally, you can specify a path relative to the current working directory.
-   Default is &lt;system&gt;/system.img.</td>
-</tr>
--->
-<tr>
-  <td><code>-initdata&nbsp;&lt;filepath&gt;</code></td>
-  <td>When resetting the user-data image (through <code>-wipe-data</code>), copy the contents
-  of this file to the new user-data disk image. By default, the emulator copies the <code>&lt;system&gt;/userdata.img</code>.</td>
-  <td>Optionally, you can specify a path relative to the current working directory. See also <code>-wipe-data</code>.
-  <p>For more information on disk images, use <code>-help-disk-images</code>.</p></td>
-</tr>
-<tr>
-  <td><code>-nocache</code></td>
-  <td>Start the emulator without a cache partition.</td>
-  <td>See also <code>-cache &lt;file&gt;</code>.</td>
-</tr>
-<tr>
-  <td><code>-ramdisk&nbsp;&lt;filepath&gt;</code></td>
-  <td>Use &lt;filepath&gt; as the ramdisk image.</td>
-  <td>Default value is <code>&lt;system&gt;/ramdisk.img</code>.
-  <p>Optionally, you can specify a path relative to the current working directory.
-  For more information on disk images, use <code>-help-disk-images</code>.</p>
-</td>
-</tr>
-<tr>
-  <td><code>-sdcard&nbsp;&lt;filepath&gt;</code></td>
-  <td>Use &lt;file&gt; as the SD card image.</td>
-  <td>Default value is <code>&lt;system&gt;/sdcard.img</code>.
-  <p>Optionally, you can specify a path relative to the current working directory. For more information on disk images, use <code>-help-disk-images</code>.</p>
-</td>
-</tr>
-<!--
-<tr>
- <td><code>-system&nbsp;&lt;dirpath&gt;</code></td>
- <td>Search for system, ramdisk and user data images in &lt;dir&gt;.</td>
- <td><code>&lt;dir&gt;</code> is a directory path relative to the current
-  working directory.</td>
-</tr>
--->
-<tr>
-  <td><code>-wipe-data</code></td>
-  <td>Reset the current user-data disk image (that is, the file specified by <code>-datadir</code> and
-  <code>-data</code>, or the default file). The emulator deletes all data from the user data image file,
-  then copies the contents of the file at <code>-inidata</code> data to the image file before starting.
-  </td>
-  <td>See also <code>-initdata</code>.
-  <p>For more information on disk images, use <code>-help-disk-images</code>.</p>
-</td>
-</tr>
-<tr>
-  <td rowspan="9">Debug</td>
-  <td><code>-debug &lt;tags&gt;</code></td>
-  <td>Enable/disable debug messages for the specified debug tags.</td>
-  <td><code>&lt;tags&gt;</code> is a space/comma/column-separated list of debug component names.
-  Use <code>-help-debug-tags</code> to print a list of debug component names that you can use. </td>
-</tr>
-<tr>
-  <td><code>-debug-&lt;tag&gt;</code></td>
-  <td>Enable/disable debug messages for the specified debug tag.</td>
-  <td rowspan="2">Use <code>-help-debug-tags</code> to print a list of debug component names that you can use in <code>&lt;tag&gt;</code>. </td>
-</tr>
-<tr>
-  <td><code>-debug-no-&lt;tag&gt;</code></td>
-  <td>Disable debug messages for the specified debug tag.</td>
-</tr>
-<tr>
-  <td><code>-logcat &lt;logtags&gt;</code></td>
-  <td>Enable logcat output with given tags.</td>
-  <td>If the environment variable ANDROID_LOG_TAGS is defined and not
-    empty, its value will be used to enable logcat output by default.</td>
-</tr>
-<tr>
-  <td><code>-shell</code></td>
-  <td>Create a root shell console on the current terminal.</td>
-  <td>You can use this command even if the adb daemon in the emulated system is broken.
-  Pressing Ctrl-c from the shell stops the emulator instead of the shell.</td>
-</tr>
-<tr>
-  <td><code>-shell-serial&nbsp;&lt;device&gt;</code></td>
-  <td>Enable the root shell (as in <code>-shell</code> and specify the QEMU character
-  device to use for communication with the shell.</td>
-  <td>&lt;device&gt; must be a QEMU device type. See the documentation for '-serial <em>dev</em>' at
-  <a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>
-  for a list of device types.
-
-<p>Here are some examples: </p>
-<ul>
-  <li><code>-shell-serial stdio</code> is identical to <code>-shell</code></li>
-  <li><code>-shell-serial tcp::4444,server,nowait</code> lets you communicate with the shell over TCP port 4444</li>
-  <li><code>-shell-serial fdpair:3:6</code> lets a parent process communicate with the shell using fds 3 (in) and 6 (out)</li>
-  <li><code>-shell-serial fdpair:0:1</code> uses the normal stdin and stdout fds, except that QEMU won't tty-cook the data.</li>
-  </ul>
-</td>
-</tr>
-<tr>
-  <td><code>-show-kernel &lt;name&gt;</code></td>
-  <td>Display kernel messages.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-trace &lt;name&gt;</code></td>
-  <td>Enable code profiling (press F9 to start), written to a specified file.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-verbose</code></td>
-  <td>Enable verbose output.</td>
-  <td>Equivalent to <code>-debug-init</code>.
-<p>You can define the default verbose output options used by emulator instances in the Android environment variable
-ANDROID_VERBOSE. Define the options you want to use in a comma-delimited list, specifying only the stem of each option:
-<code>-debug-&lt;tags&gt;.</code> </p>
-<p>Here's an example showing ANDROID_VERBOSE defined with the <code>-debug-init</code> and <code>-debug-modem</code> options:
-<p><code>ANDROID_VERBOSE=init,modem</code></p>
-<p>For more information about debug tags, use <code>&lt;-help-debug-tags&gt;</code>.</p>
-</td>
-</tr>
-<tr>
-  <td rowspan="6">Media</td>
-  <td><code>-audio &lt;backend&gt;</code></td>
-  <td>Use the specified audio backend.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-audio-in &lt;backend&gt;</code></td>
-  <td>Use the specified audio-input backend.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-audio-out &lt;backend&gt;</code></td>
-  <td>Use the specified audio-output backend.</td>
-  <td>&nbsp;</td>
-</tr>
-<!--<tr>
-  <td><code>-mic &lt;device or file&gt;</code></td>
-  <td>Use device or WAV file for audio input.</td>
-  <td>&nbsp;</td>
-</tr>
--->
-<tr>
-  <td><code>-noaudio</code></td>
-  <td>Disable audio support in the current emulator instance.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-radio &lt;device&gt;</code></td>
-  <td>Redirect radio modem interface to a host character device.</td>
-  <td>&nbsp;</td></tr>
-<tr>
-  <td><code>-useaudio</code></td>
-  <td>Enable audio support in the current emulator instance.</td>
-  <td>Enabled by default. </td>
-</tr>
-
-<tr>
-  <td rowspan="7">Network</td>
-  <td><code>-dns-server &lt;servers&gt;</code></td>
-  <td>Use the specified DNS server(s). </td>
-  <td>The value of <code>&lt;servers&gt;</code> must be a comma-separated list of up to 4 DNS server names or
-  IP addresses.</td>
-</tr>
-<tr>
-  <td><code>-http-proxy &lt;proxy&gt;</code></td>
-  <td>Make all TCP connections through a specified HTTP/HTTPS proxy</td>
-  <td>The value of <code>&lt;proxy&gt;</code> can be one of the following:<br>
-     <code>http://&lt;server&gt;:&lt;port&gt;</code><br>
-     <code>http://&lt;username&gt;:&lt;password&gt;@&lt;server&gt;:&lt;port&gt;</code>
-  <p>The <code>http://</code> prefix can be omitted. If the <code>-http-proxy &lt;proxy&gt;</code> command is not supplied,
-  the emulator looks up the <code>http_proxy</code> environment variable and automatically uses any value matching
-  the <code>&lt;proxy&gt;</code> format described above.</p></td>
-</tr>
-<tr>
-  <td><code>-netdelay &lt;delay&gt;</code></td>
-  <td>Set network latency emulation to &lt;delay&gt;.</td>
-  <td>Default value is <code>none</code>. See the table in
-    <a href="{@docRoot}guide/developing/devices/emulator.html#netdelay">Network Delay Emulation</a>
-    for supported <code>&lt;delay&gt;</code> values. </td>
-</tr>
-<tr>
-  <td><code>-netfast</code></td>
-  <td>Shortcut for <code>-netspeed full -netdelay none</code></td>
-  <td>&nbsp;</td></tr>
-<tr>
-  <td><code>-netspeed &lt;speed&gt;</code></td>
-  <td>Set network speed emulation to &lt;speed&gt;.</td>
-  <td>Default value is <code>full</code>. See the table in
-    <a href="{@docRoot}guide/developing/devices/emulator.html#netspeed">Network Speed Emulation</a> for
-  supported <code>&lt;speed&gt;</code> values. </td>
-</tr>
-<tr>
-  <td><code>-port &lt;port&gt;</code></td>
-  <td>Set the console port number for this emulator instance to <code>&lt;port&gt;</code>.</td>
-  <td>The console port number must be an even integer between 5554 and 5584, inclusive. <code>&lt;port&gt;</code>+1
-  must also be free and will be reserved for ADB.</td>
-</tr>
-<tr>
-  <td><code>-report-console &lt;socket&gt;</code></td>
-  <td>Report the assigned console port for this emulator instance to a remote third party
-  before starting the emulation. </td>
-  <td><code>&lt;socket&gt;</code> must use one of these formats:
-
-<p><code>tcp:&lt;port&gt;[,server][,max=&lt;seconds&gt;]</code></br>
-<code>unix:&lt;port&gt;[,server][,max=&lt;seconds&gt;]</code></p>
-
-<p>Use <code>-help-report-console</code></p> to view more information about this topic. </td>
-</tr>
-<tr>
-  <td rowspan="10">System</td>
-  <td><code>-cpu-delay &lt;delay&gt;</code></td>
-  <td>Slow down emulated CPU speed by &lt;delay&gt; </td>
-  <td>Supported values for &lt;delay&gt; are integers between 0 and 1000.
-
-<p>Note that the &lt;delay&gt; does not correlate to clock speed or other absolute metrics
-&mdash; it simply represents an abstract, relative delay factor applied non-deterministically
-in the emulator. Effective performance does not always
-scale in direct relationship with &lt;delay&gt; values.</p>
-</td>
-</tr>
-<tr>
-  <td><code>-gps &lt;device&gt;</code></td>
-  <td>Redirect NMEA GPS to character device.</td>
-  <td>Use this command to emulate an NMEA-compatible GPS unit connected to
-  an external character device or socket. The format of <code>&lt;device&gt;</code> must be QEMU-specific
-  serial device specification. See the documentation for 'serial -dev' at
-  <a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>.
-</td>
-</tr>
-<tr>
-  <td><code>-nojni</code></td>
-  <td>Disable JNI checks in the Dalvik runtime.</td><td>&nbsp;</td></tr>
-<tr>
-  <td><code>-qemu</code></td>
-  <td>Pass arguments to the qemu emulator software.</td>
-  <td><p class="caution"><strong>Important:</strong> When using this option, make sure it is the
-  <em>last option</em> specified, since all options after it are interpretted as qemu-specific
-  options.</p></td></tr>
-<tr>
-  <td><code>-qemu -enable-kvm</code></td>
-  <td>Enable KVM acceleration of the emulator virtual machine.</td>
-  <td>This option is only effective when your system is set up to use
-  <a href="{@docRoot}guide/developing/devices/emulator.html#vm-linux">KVM-based VM acceleration</a>.
-  You can optionally specify a memory size ({@code -m &lt;size&gt;}) for the VM, which should match
-  your emulator's memory size:</p>
-  {@code -qemu -m 512 -enable-kvm}<br>
-  {@code -qemu -m 1024 -enable-kvm}
-  </td></tr>
-<tr>
-  <td><code>-qemu -h</code></td>
-  <td>Display qemu help.</td>
-  <td></td></tr>
-<tr>
-  <td><code>-gpu on</code></td>
-  <td>Turn on graphics acceleration for the emulator.</td>
-  <td>This option is only available for emulators using a system image with API Level 15, revision 3
-  and higher. For more information, see
-  <a href="{@docRoot}guide/developing/devices/emulator.html#accel-graphics">Using the Android
-  Emulator</a>.</td></tr>
-<tr>
-  <td><code>-radio &lt;device&gt;</code></td>
-  <td>Redirect radio mode to the specified character device.</td>
-  <td>The format of <code>&lt;device&gt;</code> must be QEMU-specific
-  serial device specification. See the documentation for 'serial -dev' at
-<a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>.
-</td>
-</tr>
-<tr>
- <td><code>-timezone &lt;timezone&gt;</code></td>
- <td>Set the timezone for the emulated device to &lt;timezone&gt;, instead of the host's timezone.</td>
- <td><code>&lt;timezone&gt;</code> must be specified in zoneinfo format. For example:
-<p>"America/Los_Angeles"<br>
-"Europe/Paris"</p>
-</td>
-</tr>
-<tr>
- <td><code>-version</code></td>
- <td>Display the emulator's version number.</td>
- <td>&nbsp;</td>
-</tr>
-<tr>
-  <td rowspan="12">UI</td>
-  <td><code>-dpi-device &lt;dpi&gt;</code></td>
-  <td>Scale the resolution of the emulator to match the screen size
-  of a physical device.</td>
-  <td>The default value is 165. See also <code>-scale</code>.</td>
-</tr>
-<tr>
-  <td><code>-no-boot-anim</code></td>
-  <td>Disable the boot animation during emulator startup.</td>
-  <td>Disabling the boot animation can speed the startup time for the emulator.</td>
-</tr>
-<tr>
-  <td><code>-no-window</code></td>
-  <td>Disable the emulator's graphical window display.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-scale &lt;scale&gt;</code></td>
-  <td>Scale the emulator window. </td>
-  <td><code>&lt;scale&gt;</code> is a number between 0.1 and 3 that represents the desired scaling factor. You can
-  also specify scale as a DPI value if you add the suffix "dpi" to the scale value. A value of "auto"
-  tells the emulator to select the best window size.</td>
-</tr>
-<tr>
-  <td><code>-raw-keys</code></td>
-  <td>Disable Unicode keyboard reverse-mapping.</td>
-  <td>&nbsp;</td></tr>
-<tr>
-  <td><code>-noskin</code></td>
-  <td>Don't use any emulator skin.</td>
-  <td>&nbsp;</td></tr>
-<tr>
-  <td><code>-keyset &lt;file&gt;</code></td>
-  <td>Use the specified keyset file instead of the default.</td>
-  <td>The keyset file defines the list of key bindings between the emulator and the host keyboard.
-  For more information, use <code>-help-keyset</code> to print information about this topic.
-</td>
-</tr>
-<tr>
-  <td><code>-onion &lt;image&gt;</code></td>
-  <td>Use overlay image over screen.</td>
-  <td>No support for JPEG. Only PNG is supported.</td></tr>
-<tr>
-  <td><code>-onion-alpha &lt;percent&gt;</code></td>
-  <td>Specify onion skin translucency  value (as percent).
-  <td>Default is 50.</td>
-</tr>
-<tr>
-  <td><code>-onion-rotation &lt;position&gt;</code></td>
-  <td>Specify onion skin rotation.
-  <td><code>&lt;position&gt;</code> must be one of the values 0, 1, 2, 3.</td>
-</tr>
-<tr>
-  <td><code>-skin &lt;skinID&gt;</code></td>
-  <td>This emulator option is deprecated. </td>
-  <td>Please set skin options using AVDs, rather than by using this emulator
-option. Using this option may yield unexpected and in some cases misleading
-results, since the density with which to render the skin may not be defined.
-AVDs let you associate each skin with a default density and override the default
-as needed. For more information, see <a
-href="{@docRoot}guide/developing/devices/managing-avds.html">Managing Virtual Devices
-with AVD Manager</a>.
-</td>
-</tr>
-<tr>
-  <td><code>-skindir &lt;dir&gt;</code></td>
-  <td>This emulator option is deprecated. </td>
-  <td>See comments for <code>-skin</code>, above.</td>
-</tr>
-<tr>
-  <td rowspan="9">Help</td>
-  <td><code>-help</code></td>
-  <td>Print a list of all emulator options.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-help-all</code></td>
-  <td>Print help for all startup options.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-help-&lt;option&gt;</code></td>
-  <td>Print help for a specific startup option.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-help-debug-tags</code></td>
-  <td>Print a list of all tags for <code>-debug &lt;tags&gt;</code>.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-help-disk-images</code></td>
-  <td>Print help for using emulator disk images.</td>
-  <td>&nbsp;</td>
- </tr>
-<tr>
-  <td><code>-help-environment</code></td>
-  <td>Print help for emulator environment variables.</td>
-  <td>&nbsp;</td>s
-</tr><tr>
-  <td><code>-help-keys</code></td>
-  <td>Print the current mapping of keys.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-help-keyset-file</code></td>
-  <td>Print help for defining a custom key mappings file.</td>
-  <td>&nbsp;</td>
-</tr>
-<tr>
-  <td><code>-help-virtual-device</code></td>
-  <td>Print help for Android Virtual Device usage.</td>
-  <td>&nbsp;</td>
-</tr>
-</table>
diff --git a/docs/html/guide/developing/tools/hierarchy-viewer.jd b/docs/html/guide/developing/tools/hierarchy-viewer.jd
deleted file mode 100644
index 3d3191b..0000000
--- a/docs/html/guide/developing/tools/hierarchy-viewer.jd
+++ /dev/null
@@ -1,18 +0,0 @@
-page.title=Hierarchy Viewer
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<p>Hierarchy Viewer allows you to debug and optimize your user 
-interface. It provides a visual representation of the layout's View hierarchy 
-(the Layout View) and a magnified inspector of the display (the Pixel Perfect View). 
-</p>
-
-<p>To start Hierarchy Viewer, enter the following command from the SDK <code>tools/</code> directory:</p>
-  <pre>hierarchyviewer</pre>
-</ol>
-
-<p>For more information on how to use Hierarchy Viewer, see 
-<a href="{@docRoot}guide/developing/debugging/debugging-ui.html">Debugging and Profiling UIs</a>
-</p>
-
diff --git a/docs/html/guide/developing/tools/index.jd b/docs/html/guide/developing/tools/index.jd
deleted file mode 100644
index 5e9f686..0000000
--- a/docs/html/guide/developing/tools/index.jd
+++ /dev/null
@@ -1,85 +0,0 @@
-page.title=Tools
-@jd:body
-
-<img src="{@docRoot}assets/images/android_wrench.png" alt="" align="right">
-
-<p>The Android SDK includes a variety of tools that help you develop mobile
-applications for the Android platform. The tools are classified into two groups: SDK tools
-and platform tools. SDK tools are platform independent and are required no matter which
-Android platform you are developing on. Platform tools are customized to support the features of the
-latest Android platform.</p>
-
-<h2 id="tools-sdk">SDK Tools</h2>
-<p>The SDK tools are installed with the SDK starter package and are periodically updated.
-The SDK tools are required if you are developing Android applications. The most important SDK tools
-include the Android SDK Manager (<code>android sdk</code>), the AVD Manager (<code>android
-avd</code>) the emulator (<code>emulator</code>), and the Dalvik Debug Monitor Server
-(<code>ddms</code>). A short summary of some frequently-used SDK tools is provided below.</p>
-
-<dl>
-  <dt><a href="android.html">android</a></dt>
-    <dd>Lets you manage AVDs, projects, and the installed components of the SDK.</dd>
-  <dt><a href="{@docRoot}guide/developing/debugging/ddms.html">Dalvik Debug Monitor
-Server (ddms)</a></dt>
-    <dd>Lets you debug Android applications.</dd>
-  <dt><a href="dmtracedump.html">dmtracedump</a></dt>
-    <dd>Generates graphical call-stack diagrams from trace log files. The tool uses the
-Graphviz Dot utility to create the graphical output, so you need to install Graphviz before
-running <code>dmtracedump</code>. For more information on using <code>dmtracedump</code>, see <a
-href="{@docRoot}guide/developing/debugging/debugging-tracing.html#dmtracedump">Profiling
-with Traceview and dmtracedump</a></dd>
-  <dt><a href="draw9patch.html">Draw 9-patch</a></dt>
-    <dd>Allows you to easily create a {@link android.graphics.NinePatch} graphic using a
-WYSIWYG editor. It also previews stretched versions of the image, and highlights the area in which
-content is allowed.</dd>
-  <dt><a href="emulator.html">Android Emulator (emulator)</a></dt>
-    <dd>A QEMU-based device-emulation tool that you can use to design, debug, and test
-your applications in an actual Android run-time environment.</dd>
-  <dt><a href="hierarchy-viewer.html">Hierarchy Viewer (hierarchyviewer)</a></dt>
-    <dd>Lets you debug and optimize an Android application's user interface.</dd>
-  <dt><a href="hprof-conv.html">hprof-conv</a></dt>
-    <dd>Converts the HPROF file that is generated by the Android SDK tools to a standard format so
-you can view the file in a profiling tool of your choice.</dd>
-  <dt><a href="layoutopt.html">layoutopt</a></dt>
-    <dd>Lets you quickly analyze your application's layouts in order to optimize them for
-efficiency.</dd>
-  <dt><a href="mksdcard.html">mksdcard</a></dt>
-    <dd>Helps you create a disk image that you can use with the emulator, to simulate the presence
-of an external storage card (such as an SD card).</dd>
-  <dt><a href="monkey.html">Monkey</a></dt>
-    <dd>Runs on your emulator or device and generates pseudo-random streams of user events such
-as clicks, touches, or gestures, as well as a number of  system-level events. You can use the Monkey
-to stress-test applications that you are developing, in a random yet repeatable manner.</dd>
-  <dt><a href="monkeyrunner_concepts.html">monkeyrunner</a></dt>
-    <dd>Provides an API for writing programs that control an Android device or emulator from
-outside of Android code.</dd>
-  <dt><a href="proguard.html">ProGuard</a></dt>
-    <dd>Shrinks, optimizes, and obfuscates your code by removing unused code and renaming
-classes, fields, and methods with semantically obscure names.</dd>
-  <dt><a href="sqlite3.html">sqlite3</a></dt>
-    <dd>Lets you access the SQLite data files created and used by Android applications.</dd>
-  <dt><a href="traceview.html">traceview</a></dt>
-    <dd>Provides a graphical viewer for execution logs saved by your application.</dd>
-  <dt><a href="zipalign.html">zipalign</a></dt>
-    <dd>Optimizes <code>.apk</code> files by ensuring that all uncompressed data starts with a
-particular alignment relative to the start of the file. This should always be used to align .apk
-files after they have been signed.</dd>
- </dl>
-
-<h2 id="tools-platform">Platform Tools</h2>
-
-<p>The platform tools are typically updated every time you install a new SDK platform. Each update
-of the platform tools is backward compatible with older platforms. Usually, you directly use only
-one of the platform tools&mdash;the <a href="adb.html">Android Debug Bridge (<code>adb</code>)</a>.
-Android Debug Bridge is a versatile tool that lets you manage the state of an emulator instance or
-Android-powered device. You can also use it to install an Android application (.apk) file on a
-device.</p>
-
-<p>The other platform tools, such as <a href="{@docRoot}guide/developing/tools/aidl.html">aidl</a>,
-<code>aapt</code>, <code>dexdump</code>, and <code>dx</code>, are typically called by the Android
-build tools or Android Development Tools (ADT), so you rarely need to invoke these tools directly.
-As a general rule, you should rely on the build tools or the ADT plugin to call them as needed.</p>
-
-<p class="note"><strong>Note:</strong> The Android SDK provides additional shell tools that can
-be accessed through <code>adb</code>, such as <a href="bmgr.html">bmgr</a> and
-<a href="logcat.html">logcat</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/layoutopt.jd b/docs/html/guide/developing/tools/layoutopt.jd
deleted file mode 100644
index cb0b505..0000000
--- a/docs/html/guide/developing/tools/layoutopt.jd
+++ /dev/null
@@ -1,24 +0,0 @@
-page.title=layoutopt
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<p><code>layoutopt</code> is a command-line tool that helps you optimize the
-layouts and layout hierarchies of your applications.<p>
-
-<p>This document is a reference to the available command line options. For more information and sample
-output of the tool, see <a
-href="{@docRoot}guide/developing/debugging/debugging-ui.html#layoutopt">Optimizing layouts with
-layoutopt</a>.</p>
-
-<h3>Usage</h3>
-
-<p>To run <code>layoutopt</code> against a given list of layout resources:</p>
-
-<pre>layoutopt &lt;file_or_directory&gt; ...</pre>
-
-<p>For example:</p>
-
-<pre>$ layoutopt res/layout-land</pre>
-<pre>$ layoutopt res/layout/main.xml res/layout-land/main.xml</pre>
-
diff --git a/docs/html/guide/developing/tools/logcat.jd b/docs/html/guide/developing/tools/logcat.jd
deleted file mode 100644
index 546e3ea..0000000
--- a/docs/html/guide/developing/tools/logcat.jd
+++ /dev/null
@@ -1,106 +0,0 @@
-page.title=logcat
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-  <p>The Android logging system provides a mechanism for collecting and viewing system debug
-  output. Logs from various applications and portions of the system are collected in a series of
-  circular buffers, which then can be viewed and filtered by the <code>logcat</code> command. You can use 
-  <code>logcat</code> from an ADB shell to view the log messages.</p>
-
-  <p>This document is a reference to the available command line options. For more information on <code>logcat</code>, see
-  <a href="{@docRoot}guide/developing/debugging/debugging-log.html">Reading and Writing Logs</a>.
-For more
-  information on accessing <code>logcat</code> from DDMS, instead of the command line, see the documentation for the
-  <a href="{@docRoot}guide/developing/debugging/ddms.html">Dalvik Debug Monitor Server</a>.
-  </p>
-
-  <h3>Syntax</h3>
-  <pre>
-[adb] logcat [&lt;option&gt;] ... [&lt;filter-spec&gt;] ...
-</pre>
-
-  <p>You can run <code>logcat</code> as an adb command or directly in a shell prompt
-  of your emulator or connected device. To view log output using adb, navigate to your SDK
-  <code>platform-tools/</code> directory and execute:</p>
-  <pre>
-$ adb logcat
-</pre>
-
-  <p>You can create a shell connection to a device and execute:</p>
-  <pre>
-$ adb shell
-# logcat
-</pre>
-
-  <h3>Options</h3>
-  <p>The following table describes the command line options of <code>logcat</code>.</p>
-  
-  <table>
-    <tr>
-      <th>Option</th>
-
-      <th>Description</th>
-    </tr>
-
-    <tr>
-      <td><code>-b&nbsp;&lt;buffer&gt;</code></td>
-
-      <td>Loads an alternate log buffer for viewing, such as <code>event</code> or
-      <code>radio</code>. The <code>main</code> buffer is used by default. See <a href= 
-      "#alternativebuffers">Viewing Alternative Log Buffers</a>.</td>
-    </tr>
-
-    <tr>
-      <td><code>-c</code></td>
-
-      <td>Clears (flushes) the entire log and exits.</td>
-    </tr>
-
-    <tr>
-      <td><code>-d</code></td>
-
-      <td>Dumps the log to the screen and exits.</td>
-    </tr>
-
-    <tr>
-      <td><code>-f&nbsp;&lt;filename&gt;</code></td>
-
-      <td>Writes log message output to <code>&lt;filename&gt;</code>. The default is
-      <code>stdout</code>.</td>
-    </tr>
-
-    <tr>
-      <td><code>-g</code></td>
-
-      <td>Prints the size of the specified log buffer and exits.</td>
-    </tr>
-
-    <tr>
-      <td><code>-n&nbsp;&lt;count&gt;</code></td>
-
-      <td>Sets the maximum number of rotated logs to <code>&lt;count&gt;</code>. The default value
-      is 4. Requires the <code>-r</code> option.</td>
-    </tr>
-
-    <tr>
-      <td><code>-r&nbsp;&lt;kbytes&gt;</code></td>
-
-      <td>Rotates the log file every <code>&lt;kbytes&gt;</code> of output. The default value is
-      16. Requires the <code>-f</code> option.</td>
-    </tr>
-
-    <tr>
-      <td><code>-s</code></td>
-
-      <td>Sets the default filter spec to silent.</td>
-    </tr>
-
-    <tr>
-      <td><code>-v&nbsp;&lt;format&gt;</code></td>
-
-      <td>Sets the output format for log messages. The default is <code>brief</code> format. For a
-      list of supported formats, see <a href="#outputformat">Controlling Log Output
-      Format</a>.</td>
-    </tr>
-  </table>
diff --git a/docs/html/guide/developing/tools/mksdcard.jd b/docs/html/guide/developing/tools/mksdcard.jd
deleted file mode 100644
index 0a80454..0000000
--- a/docs/html/guide/developing/tools/mksdcard.jd
+++ /dev/null
@@ -1,55 +0,0 @@
-page.title=mksdcard
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
- <p>The <code>mksdcard</code> tool lets you quickly create a FAT32 disk image that you can load in the
-  emulator, to simulate the presence of an SD card in the device. Because you can specify an SD
-  card while creating an AVD in the AVD Manager, you usually use that feature to create an SD card.
-  This tool creates an SD card that is not bundled with an AVD, so it is useful for situations
-  where you need to share a virtual SD card between multiple emulators.</p>
-
-  <h3>Usage</h3>
-  <pre>
-mksdcard -l &lt;label&gt; &lt;size&gt; &lt;file&gt;
-</pre>
-
-  <h3>Options</h3>
-  <p>The following table describes the command-line options of <code>mksdcard</code></p>
-  <table>
-    <tr>
-      <th>Option</th>
-      
-      <th>Description</th>
-    </tr>
-    
-    <tr>
-      <td><code>-l</code></td>
-
-      <td>A volume label for the disk image to create.</td>
-    </tr>
-
-    <tr>
-      <td><code>size</code></td>
-
-      <td>An integer that specifies the size (in bytes) of disk image to create. You can also
-      specify size in kilobytes or megabytes, by appending a "K" or "M" to &lt;size&gt;. For
-      example, <code>1048576K</code>, <code>1024M</code>.</td>
-    </tr>
-
-    <tr>
-      <td><code>file</code></td>
-
-      <td>The path/filename of the disk image to create.</td>
-    </tr>
-  </table>
-
-  <p>Once you have created the disk image file, you can load it in the emulator at startup using
-  the emulator's <code>-sdcard</code> option. For more information, see <a href= 
-  "{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a>.</p>
-  
-  <p>The usage for the <code>-sdcard</code> option is as follows:</p>
-  <pre>emulator -sdcard &lt;file&gt;</pre>
-
-<h3>Example</h3>
-<pre>mksdcard -l mySdCard 1024M mySdCardFile.img</pre>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/monkey.jd b/docs/html/guide/developing/tools/monkey.jd
deleted file mode 100644
index a7e539c..0000000
--- a/docs/html/guide/developing/tools/monkey.jd
+++ /dev/null
@@ -1,242 +0,0 @@
-page.title=UI/Application Exerciser Monkey
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<p>The Monkey is a program that runs on your 
-<a href="{@docRoot}guide/developing/tools/emulator.html">emulator</a> or device and generates pseudo-random
-streams of user events such as clicks, touches, or gestures, as well as a number of system-level 
-events.  You can use the Monkey to stress-test applications that you are developing, in a random 
-yet repeatable manner.</p>
-
-<a name="overview"></a>
-<h2>Overview</h2>
-
-<p>The Monkey is a command-line tool that that you can run on any emulator
-instance or on a device.  It sends a pseudo-random stream of 
-user events into the system, which acts as a stress test on the application software you are 
-developing.</p>
-
-<p>The Monkey includes a number of options, but they break down into four primary
-categories:</p>
-
-<ul>
-  <li>Basic configuration options, such as setting the number of events to attempt.</li>
-  <li>Operational constraints, such as restricting the test to a single package.</li>
-  <li>Event types and frequencies.</li>
-  <li>Debugging options.</li>
-</ul>
-
-<p>When the Monkey runs, it generates events and sends them to the system.  It also <i>watches</i>
-the system under test and looks for three conditions, which it treats specially:</p>
-
-<ul>
-  <li>If you have constrained the Monkey to run in one or more specific packages, it 
-  watches for attempts to navigate to any other packages, and blocks them.</li>
-  <li>If your application crashes or receives any sort of unhandled exception, the Monkey
-  will stop and report the error.</li>
-  <li>If your application generates an <i>application not responding</i> error, the Monkey
-  will stop and report the error.</li>
-</ul>
-
-<p>Depending on the verbosity level you have selected, you will also see reports on the progress
-of the Monkey and the events being generated.</p>
-
-<a name="basics"></a>
-<h2>Basic Use of the Monkey</h2>
-
-<p>You can launch the Monkey using a command line on your development machine or from a script. 
-Because the Monkey runs in the emulator/device environment, you must launch it from a shell in 
-that environment.  You can do this by prefacing <code>adb shell</code> to each command, 
-or by entering the shell and entering Monkey commands directly.</p>
-<p>The basic syntax is: </p>
-
-<pre>$ adb shell monkey [options] &lt;event-count&gt;</pre>
-    
-<p>With no options specified, the Monkey will launch in a quiet (non-verbose) mode, and will send 
-events to any (and all) packages installed on your target.  Here is a more typical command line,
-which will launch your application and send 500 pseudo-random events to it:</p>
-
-<pre>$ adb shell monkey -p your.package.name -v 500</pre>
-
-<a name="reference"></a>
-<h2>Command Options Reference</h2>
-
-<p>The table below lists all options you can include on the Monkey command line.</p>
-
-<table>
-<tr>
-  <th>Category</th>
-  <th>Option</th>
-  <th>Description</th>
-</tr>
-
-<tr>
-<td rowspan="2">General</td>
-<td><code>--help</code></td>
-<td>Prints a simple usage guide.</td>
-</tr>
-
-<tr>
-<td><code>-v</code></td>
-<td>Each -v on the command line will increment the verbosity level.  
-Level 0 (the default) provides little information beyond startup notification, test completion, and
-final results.  
-Level 1 provides more details about the test as it runs, such as individual events being sent to 
-your activities.  
-Level 2 provides more detailed setup information such as activities selected or not selected for 
-testing.</td>
-</tr>
-
-<tr>
-<td rowspan="10">Events</td>
-<td><code>-s &lt;seed&gt;</code></td>
-<td>Seed value for pseudo-random number generator.  If you re-run the Monkey with the same seed 
-value, it will generate the same sequence of events.</td>
-</tr>
-
-<tr>
-<td><code>--throttle &lt;milliseconds&gt;</code></td>
-<td>Inserts a fixed delay between events.  You can use this option to slow down the Monkey.  
-If not specified, there is no delay and the events are generated as rapidly as possible.</td>
-</tr>
-
-<tr>
-<td><code>--pct-touch &lt;percent&gt;</code></td>
-<td>Adjust percentage of touch events.  
-(Touch events are a down-up event in a single place on the screen.)</td>
-</tr>
-
-<tr>
-<td><code>--pct-motion &lt;percent&gt;</code></td>
-<td>Adjust percentage of motion events.
-(Motion events consist of a down event somewhere on the screen, a series of pseudo-random
-movements, and an up event.)</td>
-</tr>
-
-<tr>
-<td><code>--pct-trackball &lt;percent&gt;</code></td>
-<td>Adjust percentage of trackball events.
-(Trackball events consist of one or more random movements, sometimes followed by a click.)</td>
-</tr>
-
-<tr>
-<td><code>--pct-nav &lt;percent&gt;</code></td>
-<td>Adjust percentage of "basic" navigation events.
-(Navigation events consist of up/down/left/right, as input from a directional input device.)</td>
-</tr>
-
-<tr>
-<td><code>--pct-majornav &lt;percent&gt;</code></td>
-<td>Adjust percentage of "major" navigation events.
-(These are navigation events that will typically cause actions within your UI, such as
-the center button in a 5-way pad, the back key, or the menu key.)</td>
-</tr>
-
-<tr>
-<td><code>--pct-syskeys &lt;percent&gt;</code></td>
-<td>Adjust percentage of "system" key events.
-(These are keys that are generally reserved for use by the system, such as Home, Back, Start Call,
-End Call, or Volume controls.)</td>
-</tr>
-
-<tr>
-<td><code>--pct-appswitch &lt;percent&gt;</code></td>
-<td>Adjust percentage of activity launches.  At random intervals, the Monkey will issue a startActivity() call, as a way of maximizing
-coverage of all activities within your package.</td>
-</tr>
-
-<tr>
-<td><code>--pct-anyevent &lt;percent&gt;</code></td>
-<td>Adjust percentage of other types of events.  This is a catch-all for all other types of events such as keypresses, other less-used
-buttons on the device, and so forth.</td>
-</tr>
-
-<tr>
-<td rowspan="2">Constraints</td>
-<td><code>-p &lt;allowed-package-name&gt;</code></td>
-<td>If you specify one or more packages this way, the Monkey will <i>only</i> allow the system
-to visit activities within those packages.  If your application requires access to activities in
-other packages (e.g. to select a contact) you'll need to specify those packages as well.
-If you don't specify any packages, the Monkey will allow the system to launch activities
-in all packages.  To specify multiple packages, use the -p option multiple times &mdash; one -p 
-option per package.</td>
-</tr>
-
-<tr>
-<td><code>-c &lt;main-category&gt;</code></td>
-<td>If you specify one or more categories this way, the Monkey will <i>only</i> allow the 
-system to visit activities that are listed with one of the specified categories.  
-If you don't specify any categories, the Monkey will select activities listed with the category
-Intent.CATEGORY_LAUNCHER or Intent.CATEGORY_MONKEY.  To specify multiple categories, use the -c
-option multiple times &mdash; one -c option per category.</td>
-</tr>
-
-<tr>
-<td rowspan="8">Debugging</td>
-<td><code>--dbg-no-events</code></td>
-<td>When specified, the Monkey will perform the initial launch into a test activity, but
-will not generate any further events.
-For best results, combine with -v, one or more package constraints, and a non-zero throttle to keep the Monkey
-running for 30 seconds or more.  This provides an environment in which you can monitor package
-transitions invoked by your application.</td>
-</tr>
-
-<tr>
-<td><code>--hprof</code></td>
-<td>If set, this option will generate profiling reports immediately before and after
-the Monkey event sequence.
-This will generate large (~5Mb) files in data/misc, so use with care.  See 
-<a href="{@docRoot}guide/developing/debugging/debugging-tracing.html" title="traceview">Traceview</a> for more information
-on trace files.</td>
-</tr>
-
-<tr>
-<td><code>--ignore-crashes</code></td>
-<td>Normally, the Monkey will stop when the application crashes or experiences any type of 
-unhandled exception.  If you specify this option, the Monkey will continue to send events to
-the system, until the count is completed.</td>
-</tr>
-
-<tr>
-<td><code>--ignore-timeouts</code></td>
-<td>Normally, the Monkey will stop when the application experiences any type of timeout error such
-as a "Application Not Responding" dialog.  If you specify this option, the Monkey will continue to 
-send events to the system, until the count is completed.</td>
-</tr>
-
-<tr>
-<td><code>--ignore-security-exceptions</code></td>
-<td>Normally, the Monkey will stop when the application experiences any type of permissions error,
-for example if it attempts to launch an activity that requires certain permissions.  If you specify
-this option, the Monkey will continue to send events to the system, until the count is 
-completed.</td>
-</tr>
-
-<tr>
-<td><code>--kill-process-after-error</code></td>
-<td>Normally, when the Monkey stops due to an error, the application that failed will be left
-running.  When this option is set, it will signal the system to stop the process in which the error
-occurred.
-Note, under a normal (successful) completion, the launched process(es) are not stopped, and
-the device is simply left in the last state after the final event.</td>
-</tr>
-
-<tr>
-<td><code>--monitor-native-crashes</code></td>
-<td>Watches for and reports crashes occurring in the Android system native code. If --kill-process-after-error is set, the system will stop.</td>
-</tr>
-
-<tr>
-<td><code>--wait-dbg</code></td>
-<td>Stops the Monkey from executing until a debugger is attached to it.</td>
-</tr>
-
-</table>
-
-<!-- TODO: add a section called "debugging" that covers ways to use it, 
-need to clear data, use of the seed, etc. -->
-
-<!-- TODO: add a section that lays down a contract for Monkey output so it can be
-scripted safely. -->
-
diff --git a/docs/html/guide/developing/tools/monkeyrunner_concepts.jd b/docs/html/guide/developing/tools/monkeyrunner_concepts.jd
deleted file mode 100644
index 346a0c6..0000000
--- a/docs/html/guide/developing/tools/monkeyrunner_concepts.jd
+++ /dev/null
@@ -1,319 +0,0 @@
-page.title=monkeyrunner
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-        <a href="#SampleProgram">A Simple monkeyrunner Program</a>
-    </li>
-    <li>
-        <a href="#APIClasses">The monkeyrunner API</a>
-    </li>
-    <li>
-        <a href="#RunningMonkeyRunner">Running monkeyrunner</a>
-    </li>
-    <li>
-        <a href="#Help">monkeyrunner Built-in Help</a>
-    </li>
-    <li>
-        <a href="#Plugins">Extending monkeyrunner with Plugins</a>
-    </li>
-  </ol>
-  <h2>See Also</h2>
-      <ol>
-        <li>
-            <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>
-        </li>
-      </ol>
-  </div>
-</div>
-<p>
-    The monkeyrunner tool provides an API for writing programs that control an Android device
-    or emulator from outside of Android code. With monkeyrunner, you can write a Python program
-    that installs an Android application or test package, runs it, sends keystrokes to it,
-    takes screenshots of its user interface, and stores screenshots on the workstation. The
-    monkeyrunner tool is primarily designed to test applications and devices at the
-    functional/framework level and for running unit test suites, but you are free to use it for
-    other purposes.
-</p>
-<p>
-    The monkeyrunner tool is not related to the
-    <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a>,
-    also known as the <code>monkey</code> tool. The <code>monkey</code> tool runs in an
-    <code><a href="{@docRoot}guide/developing/tools/adb.html">adb</a></code> shell directly on the
-    device or emulator and generates pseudo-random streams of user and system events. In comparison,
-    the monkeyrunner tool controls devices and emulators from a workstation by sending specific
-    commands and events from an API.
-</p>
-<p>
-    The monkeyrunner tool provides these unique features for Android testing:
-</p>
-<ul>
-    <li>
-        Multiple device control: The monkeyrunner API can apply one or more
-        test suites across multiple devices or emulators. You can physically attach all the devices
-        or start up all the emulators (or both) at once, connect to each one in turn
-        programmatically, and then run one or more tests. You can also start up an emulator
-        configuration programmatically, run one or more tests, and then shut down the emulator.
-    </li>
-    <li>
-        Functional testing: monkeyrunner can run an automated start-to-finish test of an Android
-        application. You provide input values with keystrokes or touch events, and view the results
-        as screenshots.
-    </li>
-    <li>
-        Regression testing - monkeyrunner can test application stability by running an application
-        and comparing its output screenshots to a set of screenshots that are known to be correct.
-    </li>
-    <li>
-        Extensible automation - Since monkeyrunner is an API toolkit, you can develop an entire
-        system of Python-based modules and programs for controlling Android devices. Besides using
-        the monkeyrunner API itself, you can use the standard Python
-        <code><a href="http://docs.python.org/library/os.html">os</a></code> and
-        <code><a href="http://docs.python.org/library/subprocess.html">subprocess</a></code>
-        modules to call Android tools such as
-        <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>.
-        <p>
-            You can also add your own classes to the monkeyrunner API. This is described
-            in more detail in the section
-            <a href="#Plugins">Extending monkeyrunner with plugins</a>.
-        </p>
-    </li>
-</ul>
-<p>
-    The monkeyrunner tool uses <a href="http://www.jython.org/">Jython</a>, a
-    implementation of Python that uses the Java programming language. Jython allows the
-    monkeyrunner API to interact easily with the Android framework. With Jython you can
-    use Python syntax to access the constants, classes, and methods of the API.
-</p>
-
-<h2 id="SampleProgram">A Simple monkeyrunner Program</h2>
-<p>
-    Here is a simple monkeyrunner program that connects to a device, creating a
-    <code><a href="{@docRoot}guide/developing/tools/MonkeyDevice.html">MonkeyDevice</a></code>
-    object. Using the <code>MonkeyDevice</code> object, the program installs an Android application
-    package, runs one of its activities, and sends key events to the activity.
-    The program then takes a screenshot of the result, creating a
-    <code><a href="{@docRoot}guide/developing/tools/MonkeyImage.html">MonkeyImage</a></code> object.
-    From this object, the program writes out a <code>.png</code> file containing the screenshot.
-</p>
-<pre>
-# Imports the monkeyrunner modules used by this program
-from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
-
-# Connects to the current device, returning a MonkeyDevice object
-device = MonkeyRunner.waitForConnection()
-
-# Installs the Android package. Notice that this method returns a boolean, so you can test
-# to see if the installation worked.
-device.installPackage('myproject/bin/MyApplication.apk')
-
-# sets a variable with the package's internal name
-package = 'com.example.android.myapplication'
-
-# sets a variable with the name of an Activity in the package
-activity = 'com.example.android.myapplication.MainActivity'
-
-# sets the name of the component to start
-runComponent = package + '/' + activity
-
-# Runs the component
-device.startActivity(component=runComponent)
-
-# Presses the Menu button
-device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
-
-# Takes a screenshot
-result = device.takeSnapshot()
-
-# Writes the screenshot to a file
-result.writeToFile('myproject/shot1.png','png')
-</pre>
-
-<h2 id="APIClasses">The monkeyrunner API</h2>
-<p>
-    The monkeyrunner API is contained in three modules in the package
-    <code>com.android.monkeyrunner</code>:
-</p>
-<ul>
-    <li>
-        <code><a href="{@docRoot}guide/developing/tools/MonkeyRunner.html">MonkeyRunner</a></code>:
-        A class of utility methods for monkeyrunner programs. This class provides a method for
-        connecting monkeyrunner to a device or emulator. It also provides methods for
-        creating UIs for a monkeyrunner program and for displaying the built-in help.
-    </li>
-    <li>
-        <code><a href="{@docRoot}guide/developing/tools/MonkeyDevice.html">MonkeyDevice</a></code>:
-        Represents a device or emulator. This class provides methods for installing and
-        uninstalling packages, starting an Activity, and sending keyboard or touch events to an
-        application. You also use this class to run test packages.
-    </li>
-    <li>
-        <code><a href="{@docRoot}guide/developing/tools/MonkeyImage.html">MonkeyImage</a></code>:
-        Represents a screen capture image. This class provides methods for capturing screens,
-        converting bitmap images to various formats, comparing two MonkeyImage objects, and
-        writing an image to a file.
-    </li>
-</ul>
-<p>
-    In a Python program, you access each class as a Python module. The monkeyrunner tool
-    does not import these modules automatically. To import a module, use the
-    Python <code>from</code> statement:
-</p>
-<pre>
-from com.android.monkeyrunner import &lt;module&gt;
-</pre>
-<p>
-    where <code>&lt;module&gt;</code> is the class name you want to import. You can import more
-    than one module in the same <code>from</code> statement by separating the module names with
-    commas.
-</p>
-<h2 id="RunningMonkeyRunner">Running monkeyrunner</h2>
-<p>
-    You can either run monkeyrunner programs from a file, or enter monkeyrunner statements in
-    an interactive session. You do both by invoking the <code>monkeyrunner</code> command
-    which is found in the <code>tools/</code> subdirectory of your SDK directory.
-    If you provide a filename as an argument, the <code>monkeyrunner</code> command
-    runs the file's contents as a Python program; otherwise, it starts an interactive session.
-</p>
-<p>
-    The syntax of the <code>monkeyrunner</code> command is
-</p>
-<pre>
-monkeyrunner -plugin &lt;plugin_jar&gt; &lt;program_filename&gt; &lt;program_options&gt;
-</pre>
-<p>
-Table 1 explains the flags and arguments.
-</p>
-<p class="table-caption" id="table1">
-  <strong>Table 1.</strong> <code>monkeyrunner</code> flags and arguments.</p>
-
-<table>
-    <tr>
-        <th>Argument</th>
-        <th>Description</th>
-    </tr>
-    <tr>
-        <td>
-            <nobr>
-                <code>-plugin &lt;plugin_jar&gt;</code>
-            </nobr>
-        </td>
-        <td>
-            (Optional) Specifies a <code>.jar</code> file containing a plugin for monkeyrunner.
-            To learn more about monkeyrunner plugins, see
-            <a href="#Plugins">Extending monkeyrunner with plugins</a>. To specify more than one
-            file, include the argument multiple times.
-        </td>
-    </tr>
-    <tr>
-        <td>
-            <nobr>
-                <code>&lt;program_filename&gt;</code>
-            </nobr>
-        </td>
-        <td>
-            If you provide this argument, the <code>monkeyrunner</code> command runs the contents
-            of the file as a Python program. If the argument is not provided, the command starts an
-            interactive session.
-        </td>
-    </tr>
-    <tr>
-        <td>
-            <code>&lt;program_options&gt;</code>
-        </td>
-        <td>
-            (Optional) Flags and arguments for the program in &lt;program_file&gt;.
-        </td>
-    </tr>
-</table>
-<h2 id="Help">monkeyrunner Built-in Help</h2>
-<p>
-    You can generate an API reference for monkeyrunner by running:
-</p>
-<pre>
-monkeyrunner help.py &lt;format&gt; &lt;outfile&gt;
-</pre>
-<p>
-The arguments are:
-</p>
-    <ul>
-        <li>
-            <code>&lt;format&gt;</code> is either <code>text</code> for plain text output
-            or <code>html</code> for HTML output.
-        </li>
-        <li>
-            <code>&lt;outfile&gt;</code> is a path-qualified name for the output file.
-        </li>
-    </ul>
-<h2 id="Plugins">Extending monkeyrunner with Plugins</h2>
-<p>
-    You can extend the monkeyrunner API with classes you write in the Java programming language
-    and build into one or more <code>.jar</code> files. You can use this feature to extend the
-    monkeyrunner API with your own classes or to extend the existing classes. You can also use this
-    feature to initialize the monkeyrunner environment.
-</p>
-<p>
-    To provide a plugin to monkeyrunner, invoke the <code>monkeyrunner</code> command with the
-    <code>-plugin &lt;plugin_jar&gt;</code> argument described in
-    <a href="#table1">table 1</a>.
-</p>
-<p>
-    In your plugin code, you can import and extend the the main monkeyrunner classes
-    <code>MonkeyDevice</code>, <code>MonkeyImage</code>, and <code>MonkeyRunner</code> in
-    <code>com.android.monkeyrunner</code> (see <a href="#APIClasses">The monkeyrunner API</a>).
-</p>
-<p>
-    Note that plugins do not give you access to the Android SDK. You can't import packages
-    such as <code>com.android.app</code>. This is because monkeyrunner interacts with the
-    device or emulator below the level of the framework APIs.
-</p>
-<h3>The plugin startup class</h3>
-<p>
-    The <code>.jar</code> file for a plugin can specify a class that is instantiated before
-    script processing starts. To specify this class, add the key
-    <code>MonkeyRunnerStartupRunner</code> to the <code>.jar</code> file's
-    manifest. The value should be the name of the class to run at startup. The following
-    snippet shows how you would do this within an <code>ant</code> build script:
-</p>
-<pre>
-&lt;jar jarfile=&quot;myplugin&quot; basedir="&#36;&#123;build.dir&#125;&quot;&gt;
-&lt;manifest&gt;
-&lt;attribute name=&quot;MonkeyRunnerStartupRunner&quot; value=&quot;com.myapp.myplugin&quot;/&gt;
-&lt;/manifest&gt;
-&lt;/jar&gt;
-
-
-</pre>
-<p>
-    To get access to monkeyrunner's runtime environment, the startup class can implement
-    <code>com.google.common.base.Predicate&lt;PythonInterpreter&gt;</code>. For example, this
-    class sets up some variables in the default namespace:
-</p>
-<pre>
-package com.android.example;
-
-import com.google.common.base.Predicate;
-import org.python.util.PythonInterpreter;
-
-public class Main implements Predicate&lt;PythonInterpreter&gt; {
-    &#64;Override
-    public boolean apply(PythonInterpreter anInterpreter) {
-
-        /*
-        * Examples of creating and initializing variables in the monkeyrunner environment's
-        * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
-        * and "use_emulator"
-        *
-        */
-        anInterpreter.set("newtest", "enabled");
-        anInterpreter.set("use_emulator", 1);
-
-        return true;
-    }
-}
-</pre>
diff --git a/docs/html/guide/developing/tools/othertools.html b/docs/html/guide/developing/tools/othertools.html
deleted file mode 100644
index a074f33..0000000
--- a/docs/html/guide/developing/tools/othertools.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/guide/developing/tools/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/developing/tools/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/proguard.jd b/docs/html/guide/developing/tools/proguard.jd
deleted file mode 100644
index ea8a1ea..0000000
--- a/docs/html/guide/developing/tools/proguard.jd
+++ /dev/null
@@ -1,189 +0,0 @@
-page.title=ProGuard
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#enabling">Enabling ProGuard</a></li>
-
-        <li><a href="#configuring">Configuring ProGuard</a></li>
-
-        <li>
-          <a href="#decoding">Decoding Obfuscated Stack Traces</a>
-
-          <ol>
-            <li><a href="#considerations">Debugging considerations for published
-            applications</a></li>
-          </ol>
-        </li>
-      </ol>
-
-      <h2>See also</h2>
-
-      <ol>
-        <li><a href="http://proguard.sourceforge.net/manual/introduction.html">ProGuard
-        Manual &raquo;</a></li>
-
-        <li><a href="http://proguard.sourceforge.net/manual/retrace/introduction.html">ProGuard
-        ReTrace Manual &raquo;</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>The ProGuard tool shrinks, optimizes, and obfuscates your code by removing unused code and
-  renaming classes, fields, and methods with semantically obscure names. The result is a smaller
-  sized <code>.apk</code> file that is more difficult to reverse engineer. Because ProGuard makes your
-  application harder to reverse engineer, it is important that you use it
-  when your application utilizes features that are sensitive to security like when you are
-  <a href="{@docRoot}guide/market/licensing/index.html">Licensing Your Applications</a>.</p>
-
-  <p>ProGuard is integrated into the Android build system, so you do not have to invoke it
-  manually. ProGuard runs only when you build your application in release mode, so you do not 
-  have to deal with obfuscated code when you build your application in debug mode. 
-  Having ProGuard run is completely optional, but highly recommended.</p>
-  
-  <p>This document describes how to enable and configure ProGuard as well as use the
-  <code>retrace</code> tool to decode obfuscated stack traces.</p>
-
-  <h2 id="enabling">Enabling ProGuard</h2>
-
-  <p>When you create an Android project, a <code>proguard.cfg</code> file is automatically
-  generated in the root directory of the project. This file defines how ProGuard optimizes and
-  obfuscates your code, so it is very important that you understand how to customize it for your
-  needs. The default configuration file only covers general cases, so you most likely have to edit
-  it for your own needs. See the following section about <a href="#configuring">Configuring ProGuard</a> for information on 
-  customizing the ProGuard configuration file.</p>
-
-  <p>To enable ProGuard so that it runs as part of an Ant or Eclipse build, set the
-  <code>proguard.config</code> property in the <code>&lt;project_root&gt;/project.properties</code>
-  file. The path can be an absolute path or a path relative to the project's root.</p>
-<p>If you left the <code>proguard.cfg</code> file in its default location (the project's root directory),
-you can specify its location like this:</p>
-<pre class="no-pretty-print">
-proguard.config=proguard.cfg
-</pre>
-<p>
-You can also move the the file to anywhere you want, and specify the absolute path to it:
-</p>
-<pre class="no-pretty-print">
-proguard.config=/path/to/proguard.cfg
-</pre>
-
-
-  <p>When you build your application in release mode, either by running <code>ant release</code> or
-  by using the <em>Export Wizard</em> in Eclipse, the build system automatically checks to see if
-  the <code>proguard.config</code> property is set. If it is, ProGuard automatically processes
-  the application's bytecode before packaging everything into an <code>.apk</code> file. Building in debug mode
-  does not invoke ProGuard, because it makes debugging more cumbersome.</p>
-
-  <p>ProGuard outputs the following files after it runs:</p>
-
-  <dl>
-    <dt><code>dump.txt</code></dt>
-    <dd>Describes the internal structure of all the class files in the <code>.apk</code> file</dd>
-
-    <dt><code>mapping.txt</code></dt>
-    <dd>Lists the mapping between the original and obfuscated class, method, and field names. 
-    This file is important when you receive a bug report from a release build, because it 
-    translates the obfuscated stack trace back to the original class, method, and member names.
-    See <a href="#decoding">Decoding Obfuscated Stack Traces</a> for more information.</dd>
-
-    <dt><code>seeds.txt</code></dt>
-    <dd>Lists the classes and members that are not obfuscated</dd>
-
-    <dt><code>usage.txt</code></dt>
-    <dd>Lists the code that was stripped from the <code>.apk</code></dd>
-  </ul>
-
-  <p>These files are located in the following directories:</p>
-
-  <ul>
-    <li><code>&lt;project_root&gt;/bin/proguard</code> if you are using Ant.</li>
-
-    <li><code>&lt;project_root&gt;/proguard</code> if you are using Eclipse.</li>
-  </ul>
-
-  
-  <p class="caution"><strong>Caution:</strong> Every time you run a build in release mode, these files are
-  overwritten with the latest files generated by ProGuard. Save a copy of them each time you release your
-  application in order to de-obfuscate bug reports from your release builds. 
-  For more information on why saving these files is important, see 
-  <a href="#considerations">Debugging considerations for published applications</a>.
-  </p>
-
-  <h2 id="configuring">Configuring ProGuard</h2>
-
-  <p>For some situations, the default configurations in the <code>proguard.cfg</code> file will
-  suffice. However, many situations are hard for ProGuard to analyze correctly and it might remove code
-  that it thinks is not used, but your application actually needs. Some examples include:</p>
-
-  <ul>
-    <li>a class that is referenced only in the <code>AndroidManifest.xml</code> file</li>
-
-    <li>a method called from JNI</li>
-
-    <li>dynamically referenced fields and methods</li>
-  </ul>
-
-  <p>The default <code>proguard.cfg</code> file tries to cover general cases, but you might
-  encounter exceptions such as <code>ClassNotFoundException</code>, which happens when ProGuard
-  strips away an entire class that your application calls.</p>
-
-  <p>You can fix errors when ProGuard strips away your code by adding a <code>-keep</code> line in
-  the <code>proguard.cfg</code> file. For example:</p>
-  <pre>
--keep public class &lt;MyClass&gt;
-</pre>
-
-  <p>There are many options and considerations when using the <code>-keep</code> option, so it is
-  highly recommended that you read the <a href="http://proguard.sourceforge.net/manual/introduction.html">ProGuard
-  Manual</a> for more information about customizing your configuration file. The <a href=
-  "http://proguard.sourceforge.net/manual/usage.html#keepoverview">Overview of Keep options</a> and
-  <a href="http://proguard.sourceforge.net/index.html#/manual/examples.html">Examples section</a>
-  are particularly helpful. The <a href=
-  "http://proguard.sourceforge.net/manual/troubleshooting.html">Troubleshooting</a> section of the
-  ProGuard Manual outlines other common problems you might encounter when your code gets stripped
-  away.</p>
-
-  <h2 id="decoding">Decoding Obfuscated Stack Traces</h2>
-
-  <p>When your obfuscated code outputs a stack trace, the method names are obfuscated, which makes
-  debugging hard, if not impossible. Fortunately, whenever ProGuard runs, it outputs a
-  <code>&lt;project_root&gt;/bin/proguard/mapping.txt</code> file, which shows you the original
-  class, method, and field names mapped to their obfuscated names.</p>
-
-  <p>The <code>retrace.bat</code> script on Windows or the <code>retrace.sh</code> script on Linux
-  or Mac OS X can convert an obfuscated stack trace to a readable one. It is located in the
-  <code>&lt;sdk_root&gt;/tools/proguard/</code> directory. The syntax for executing the 
-  <code>retrace</code> tool is:</p>
-  <pre>retrace.bat|retrace.sh [-verbose] mapping.txt [&lt;stacktrace_file&gt;]</pre>
-  <p>For example:</p>
-  
-  <pre>retrace.bat -verbose mapping.txt obfuscated_trace.txt</pre>
-  
-  <p>If you do not specify a value for <em>&lt;stacktrace_file&gt;</em>, the <code>retrace</code> tool reads
-  from standard input.</p>
-
-  <h3 id="considerations">Debugging considerations for published applications</h3>
-
-  <p>Save the <code>mapping.txt</code> file for every release that you publish to your users. 
-  By retaining a copy of the <code>mapping.txt</code> file for each release build, 
-  you ensure that you can debug a problem if a user encounters a bug and submits an obfuscated stack trace.
-  A project's <code>mapping.txt</code> file is overwritten every time you do a release build, so you must be
-  careful about saving the versions that you need.</p>
-
-  <p>For example, say you publish an application and continue developing new features of
-  the application for a new version. You then do a release build using ProGuard soon after. The
-  build overwrites the previous <code>mapping.txt</code> file. A user submits a bug report
-  containing a stack trace from the application that is currently published. You no longer have a way 
-  of debugging the user's stack trace, because the <code>mapping.txt</code> file associated with the version
-  on the user's device is gone. There are other situations where your <code>mapping.txt</code> file can be overwritten, so
-  ensure that you save a copy for every release that you anticipate you have to debug.</p>
-
-  <p>How you save the <code>mapping.txt</code> file is your decision. For example, you can rename them to
-  include a version or build number, or you can version control them along with your source
-  code.</p>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/traceview.jd b/docs/html/guide/developing/tools/traceview.jd
deleted file mode 100644
index aa37481..0000000
--- a/docs/html/guide/developing/tools/traceview.jd
+++ /dev/null
@@ -1,16 +0,0 @@
-page.title=Traceview
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<p>Traceview is a graphical viewer for execution logs saved by your application. 
-Traceview can help you debug your application and profile its performance.</p>
-
-<p>To start Traceview, enter the following command from the SDK <code>tools/</code> directory:</p>
-  <pre>traceview</pre>
-</ol>
-
-<p>For more information on how to use Traceview, see 
-<a href="{@docRoot}guide/developing/debugging/debugging-tracing.html">Profiling with Traceview and dmtracedump</a>
-</p>
-
diff --git a/docs/html/guide/developing/tools/zipalign.jd b/docs/html/guide/developing/tools/zipalign.jd
deleted file mode 100644
index 3216080..0000000
--- a/docs/html/guide/developing/tools/zipalign.jd
+++ /dev/null
@@ -1,67 +0,0 @@
-page.title=zipalign
-parent.title=Tools
-parent.link=index.html
-@jd:body
-
-<p>zipalign is an archive alignment tool that provides important
-optimization to Android application (.apk) files. 
-The purpose is to ensure that all uncompressed data starts
-with a particular alignment relative to the start of the file.  Specifically,
-it causes all uncompressed data within the .apk, such as images or raw files,
-to be aligned on 4-byte boundaries. This
-allows all portions to be accessed directly with {@code mmap()} even if they
-contain binary data with alignment restrictions. 
-The benefit is a reduction in the amount of RAM consumed 
-when running the application.</p>
-
-<p>This tool should always be used to align your .apk file before 
-distributing it to end-users. The Android build tools can handle
-this for you. When using Eclipse with the ADT plugin, the Export Wizard
-will automatically zipalign your .apk after it signs it with your private key. 
-The build scripts used
-when compiling your application with Ant will also zipalign your .apk,
-as long as you have provided the path to your keystore and the key alias in
-your project {@code ant.properties} file, so that the build tools 
-can sign the package first.</p>
-
-<p class="caution"><strong>Caution:</strong> zipalign must only be performed
-<strong>after</strong> the .apk file has been signed with your private key.
-If you perform zipalign before signing, then the signing procedure will undo
-the alignment. Also, do not make alterations to the aligned package.
-Alterations to the archive, such as renaming or deleting entries, will
-potentially disrupt the alignment of the modified entry and all later
-entries. And any files added to an "aligned" archive will not be aligned.</p>
-
-<p>The adjustment is made by altering the size of
-the "extra" field in the zip Local File Header sections.  Existing data
-in the "extra" fields may be altered by this process.</p>
-
-<p>For more information about how to use zipalign when building your 
-application, please read <a href="{@docRoot}guide/publishing/app-signing.html">Signing
-Your Application</a>.</p>
-
-
-<h3>Usage</h3>
-
-<p>To align {@code infile.apk} and save it as {@code outfile.apk}:</p>
-
-<pre>zipalign [-f] [-v] &lt;alignment> infile.apk outfile.apk</pre>
-
-<p>To confirm the alignment of {@code existing.apk}:</p>
-
-<pre>zipalign -c -v &lt;alignment> existing.apk</pre>
-
-<p>The {@code &lt;alignment>} is an integer that defines the byte-alignment boundaries. 
-This must always be 4 (which provides 32-bit alignment) or else it effectively 
-does nothing.</p>
-
-<p>Flags:</p>
-
-<ul>
-  <li>{@code -f} : overwrite existing outfile.zip</li>
-  <li>{@code -v} : verbose output</li>
-  <li>{@code -c} : confirm the alignment of the given file</li>
-</ul>
-
-
-
diff --git a/docs/html/guide/google/index.jd b/docs/html/guide/google/index.jd
new file mode 100644
index 0000000..95c2816
--- /dev/null
+++ b/docs/html/guide/google/index.jd
@@ -0,0 +1,97 @@
+page.title=Google Services
+footer.hide=1
+@jd:body
+
+    
+   <p>Google offers a variety of services that help you build new revenue streams, enhance your app's capabilities, manage distribution and payloads, and track usage and installs. Many of the services use static libraries that you download through the Android SDK Manager and build into your app. Others are configurable directly from Google Play Android Developer Console.</p>
+   
+   <p>The sections below highlight some of the Google Services and link you to more information about how to use them in your Android app. </p>
+  
+
+<h2 id="monetization">Monetize Your App</h2>
+
+<div class="vspace size-1">&nbsp;</div>
+<div class="layout-content-row">
+
+  <div class="layout-content-col span-4">
+	  <h4>In-App Billing</h4>
+  		<p>Keep your users engaged by offering in-app purchases and subscriptions directly in your app.
+  		</p>
+   		<a href="{@docRoot}guide/google/play/billing/index.html">Learn more &raquo;</a>
+  </div>
+
+  <div class="layout-content-col span-4">
+		<h4>Google AdMob Ads</h4>
+		<p>Generate more revenue from your app by
+		displaying ads from multiple ad networks.</p>
+   	<a href="https://developers.google.com/mobile-ads-sdk/docs/android/fundamentals">Learn more &raquo;</a>
+  </div>
+  
+  <div class="layout-content-col span-4">
+			<h4>Application Licensing</h4>
+			<p>Protect your revenue streams and integrate policies for usage into your app.</p>
+			<a href="{@docRoot}guide/google/play/licensing/index.html">Learn more &raquo;</a>
+  </div>
+
+</div>
+
+<h2 id="integration">Manage App Distribution</h2>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+
+<div class="layout-content-col span-4">
+
+<h4>Google Play Filters</h4>
+<p>Make sure your app gets to the right users by
+declaring the hardware and software features needed by your app.</p>
+<a href="{@docRoot}guide/google/play/filters.html">Learn more &raquo;</a>
+</div>
+
+  <div class="layout-content-col span-4">
+<h4>Multiple APK Support</h4>
+<p>Distribute different APKs based on a variety of properties such as platform version, screen size, and GLES texture compression support.</p>
+<a href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Learn more &raquo;</a>
+</div>
+
+  <div class="layout-content-col span-4">
+
+<h4>APK Expansion files</h4>
+<p>Take load off of your servers and utilize APK expansion files
+to deliver up to 4 GB of assets for your Android app, free.</p>
+ 
+<a href="{@docRoot}guide/google/play/expansion-files.html">Learn more &raquo;</a>
+</div>
+
+</div>
+
+<h2 id="integration">Enhance Your App's Capabilities</h2>
+
+<div class="vspace size-1">&nbsp;</div>
+
+<div class="layout-content-row">
+
+<div class="layout-content-col span-4">
+  <h4>Android Cloud-to-Device Messaging </h4>
+  <p>Notify your apps of events with push messages that are lightweight
+   and battery-saving.</p>
+  <a href="https://developers.google.com/android/c2dm/">Learn more &raquo;</a>
+</div>
+
+<div class="layout-content-col span-4">
+	<h4>Google Maps</h4>
+  <p> The Google Maps library for Android lets you add powerful mapping and geo-location capabilities to your app.</p>
+  <a href="https://developers.google.com/maps/documentation/android/">Learn more &raquo;</a>
+</div>
+</div>
+
+
+<h2 id="integration">Track Performance with Analytics</h2>
+<p>Google Analytics gives you powerful insights into how users find your apps
+	and how they use them. <br />Start integrating analytics to measure
+	your app's success.</p>
+	
+	
+<div style="margin-bottom:1.5em;"><a href="https://developers.google.com/analytics/devguides/collection/android/">Learn more &raquo;</a></div>
+   
\ No newline at end of file
diff --git a/docs/html/guide/google/play/billing/billing_about.html b/docs/html/guide/google/play/billing/billing_about.html
new file mode 100644
index 0000000..9f41fa6
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_about.html
@@ -0,0 +1,12 @@
+<html>
+<head>
+<meta http-equiv="refresh"
+content="0;url=http://developer.android.com/guide/google/play/billing/index.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/guide/google/play/billing/index.html">click
+here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/guide/google/play/billing/billing_admin.jd b/docs/html/guide/google/play/billing/billing_admin.jd
new file mode 100755
index 0000000..cb288a5
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_admin.jd
@@ -0,0 +1,530 @@
+page.title=Administering In-app Billing
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#billing-list-setup">Creating a Product List</a></li>
+    <li><a href="#billing-purchase-type">Choosing a Purchase Type</a></li>
+    <li><a href="#billing-testing-setup">Setting up Test Accounts</a></li>
+    <li><a href="#billing-refunds">Handling Refunds</a></li>
+    <li><a href="#billing-support">Where to Get Support</a></li>
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
+    Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+</div>
+</div>
+
+<p>In-app billing frees you from processing financial transactions, but you still need to perform a
+few administrative tasks, including setting up and maintaining your product list on the publisher
+site, registering test accounts, and handling refunds when necessary.</p>
+
+<p>You must have a Google Play publisher account to register test accounts. And you must have a
+Google Wallet merchant account to create a product list and issue refunds to your users. If you
+already have a publisher account on Google Play, you can use your existing account. You do not
+need to register for a new account to support in-app billing. If you do not have a publisher
+account, you can register as a Google Play developer and set up a publisher account at the
+Google Play <a href="http://play.google.com/apps/publish">publisher site</a>. If you do not have a
+Google Wallet merchant account, you can register for one at the <a
+href="http://checkout.google.com">Google Wallet site</a>.</p>
+
+<h2 id="billing-list-setup">Creating a Product List</h2>
+
+<p>The Google Play publisher site provides a product list for each of your published
+applications. You can sell an item using Google Play's in-app billing feature only if the item is
+listed on an application's product list. Each application has its own product list; you cannot sell
+items that are listed in another application's product list.</p>
+
+<p>You can access an application's product list by clicking the <strong>In-App Products</strong>
+link that appears under each of the applications that are listed for your publisher account (see
+figure 1). The <strong>In-App Products</strong> link appears only if you have a Google Wallet
+merchant account and an application's manifest includes the <code>com.android.vending.BILLING</code>
+permission.</p>
+
+<img src="{@docRoot}images/billing_product_list_entry.png" height="548" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> You can access an application's product list by clicking the
+  <strong>In-App Products</strong> link.
+</p>
+
+<p>A product list specifies items you are selling in an application &mdash; in-app products,
+subscriptions, or a combination of both. For each item, the product list contains information such as a product id,
+product description, and price (see figure 2). The product list stores only metadata about the items
+you are selling in your application. It does not store any digital content. You are responsible for
+storing and delivering the digital content that you sell in your applications.</p>
+
+<img src="{@docRoot}images/billing_product_list.png" height="658" id="figure2" />
+<p class="img-caption">
+  <strong>Figure 2.</strong> An application's product list.
+</p>
+
+<p>You can create a product list for any published application or any draft application that's been
+uploaded and saved to the Google Play site. However, you must have a Google Wallet merchant
+account and the application's manifest must include the <code>com.android.vending.BILLING</code>
+permission. If an application's manifest does not include this permission, you will be able to edit
+existing items in the product list but you will not be able to add new items to the list. For more
+information about this permission, see
+<a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-permission">Updating Your
+Application's Manifest</a>.</p>
+
+<p>In addition, an application package can have only one product list. If you create a product
+list for an application, and you use the <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APK feature</a> to distribute
+more than one APK for that application, the product list applies to all APK versions that are
+associated with the application listing. You cannot create individual product lists for each APK if
+you are using the multiple APK feature.</p>
+
+<p>You can add items to a product list two ways: you can add items one at a time by using the In-app
+Products UI (see figure 3), or you can add a batch of items by importing the items from a
+comma-separated values (CSV) file (see figure 2). Adding items one at a time is useful if your
+application has only a few in-app items or you are adding only a few items to a
+product list for testing purposes. The CSV file method is useful if your application has a large
+number of in-app items.</p>
+
+<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.</p>
+
+<h3 id="billing-form-add">Adding items one at a time to a product list</h3>
+
+<p>To add an item to a product list using the In-app Products UI, follow these steps:</p>
+
+<ol>
+  <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
+  <li>In the <strong>All Google Play listings</strong> panel, under the application name, click
+  <strong>In-app Products</strong>.</li>
+  <li>On the In-app Products List page, click <strong>Add in-app product</strong>.</li>
+  <li>On the Create New In-app Product page (see figure 3), provide details about the item you are
+  selling and then click <strong>Save</strong> or <strong>Publish</strong>.</li>
+</ol>
+
+<img src="{@docRoot}images/billing_list_form.png" height="840" id="figure3" />
+<p class="img-caption">
+  <strong>Figure 3.</strong> The Create New In-app Product page lets you add items to an
+  application's product list.
+</p>
+
+<p>You must enter the following information for each item in a product list:</p>
+<ul>
+  <li><strong>In-app Product ID</strong>
+    <p>Product IDs are unique across an application's namespace. A product ID must start with a
+    lowercase letter or a number, and must be composed using only lowercase letters (a-z), numbers
+    (0-9), underlines (_), and dots (.). The product ID "android.test" is reserved, as are all
+    product IDs that start with "android.test."</p>
+    <p>In addition, you cannot modify an item's product ID after it is created, and you cannot reuse
+    a product ID.</p>
+  </li>
+  <li><strong>Purchase Type</strong>
+    <p>The purchase type can be <strong>Managed per user account</strong>, <strong>Unmanaged</strong>,
+    or <strong>Subscription</strong>. You can never change an item's purchase type after you set it. For more
+    information, see <a href="#billing-purchase-type">Choosing a purchase type</a> later in this
+    document.</p>
+  </li>
+  <li><strong>Publishing State</strong>
+    <p>An item's publishing state can be <strong>Published</strong> or <strong>Unpublished
+    </strong>. To be visible to a user during checkout, an item's publishing state must be set to
+    <strong>Published</strong> and the item's application must be published on Google Play.</p>
+    <p class="note"><strong>Note:</strong> This is not true for test accounts. An item is visible to
+    a test account if the application is not published and the item is published. See <a
+    href="{@docRoot}guide/google/play/billing/billing_testing.html#billing-testing-real">Testing In-app
+    Billing</a> for more information.</p>
+  </li>
+  <li><strong>Language</strong>
+    <p>The language setting determines which languages are used to display the item title and
+    item description during checkout. A product list inherits its default language from the
+    parent application. You can add more languages by clicking <strong>add language</strong>. You
+    can also choose to have the title and description automatically translated from the default
+    language by selecting the <strong>Fill fields with auto translation</strong> checkbox (see
+    figure 4). If you do not use the auto translation feature, you must provide the translated
+    versions of the title and description.</p>
+  </li>
+  <li><strong>Title</strong>
+    <p>The title is a short descriptor for the item. For example, "Sleeping potion." Titles must be
+    unique across an application's namespace. Every item must have a title. The title is visible to
+    users during checkout. For optimum appearance, titles should be no longer than 25 characters;
+    however, titles can be up to 55 characters in length.</p>
+  </li>
+  <li><strong>Description</strong>
+    <p>The description is a long descriptor for the item. For example, "Instantly puts creatures to
+    sleep. Does not work on angry elves." Every item must have a description. The description is
+    visible to users during checkout. Descriptions can be up to 80 characters in length.</p>
+  </li>
+  <li><strong>Price</strong>
+    <p>You must provide a default price in your home currency. You can also provide prices in other
+    currencies, but you can do this only if a currency's corresponding country is listed as a
+    target country for your application. You can specify target countries on the Edit Application
+    page in the Google Play developer console.</p>
+    <p>To specify prices in other currencies, you can manually enter the price for each
+    currency or you can click <strong>Auto Fill</strong> and let Google Play do a one-time
+    conversion from your home currency to the currencies you are targeting (see figure 4).</p>
+    <p>For subscription items, note that you can not change the item's price once you have published it. </p>
+  </li>
+</ul>
+<img src="{@docRoot}images/billing_list_form_2.png" height="1226" id="figure4" />
+<p class="img-caption">
+  <strong>Figure 4.</strong> Specifying additional currencies and additional languages for the
+  item title and description.
+</p>
+
+<p>For more information about product IDs and product lists, see <a
+href="http://market.android.com/support/bin/answer.py?answer=1072599">Creating In-App Product
+IDs</a>. For more information about pricing, see <a
+href="http://market.android.com/support/bin/answer.py?answer=1153485">In-App Billing
+Pricing</a>.</p>
+
+<p class="note"><strong>Note</strong>: Be sure to plan your product ID namespace. You cannot reuse
+or modify product IDs after you save them.</p>
+
+<h3 id="billing-bulk-add">Adding a batch of items to a product list</h3>
+
+<p>To add a batch of items to a product list using a CSV file, you first need to create your CSV
+file. The data values that you specify in the CSV file represent the same data values you specify
+manually through the In-app Products UI (see <a href="#billing-form-add">Adding items one at a time
+to a product list</a>). 
+
+<p>If you are importing and exporting CSV files with in-app products, please
+keep tax-inclusive pricing in mind. If you use auto-fill, you can provide a
+tax-exclusive default price and tax-inclusive prices will be auto-filled. If you
+do not use auto-fill, prices you provide must include tax.</p>
+
+<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.</p>
+
+The CSV file uses commas (,) and semi-colons (;) to separate data values.
+Commas are used to separate primary data values, and semi-colons are used to separate subvalues. For
+example, the syntax for the CSV file is as follows:</p>
+
+<p>"<em>product_id</em>","<em>publish_state</em>","<em>purchase_type</em>","<em>autotranslate</em>
+","<em>locale</em>; <em>title</em>; <em>description</em>","<em>autofill</em>","<em>country</em>;
+<em>price</em>"
+</p>
+
+<p>Descriptions and usage details are provided below.</p>
+
+<ul>
+  <li><em>product_id</em>
+    <p>This is equivalent to the In-app Product ID setting in the In-app Products UI. If you specify
+    a <em>product_id</em> that already exists in a product list, and you choose to overwrite
+    the product list while importing the CSV file, the data for the existing item is overwritten with
+    the values specified in the CSV file. The overwrite feature does not delete items that are on a
+    product list but not present in the CSV file.</p>
+  </li>
+  <li><em>publish_state</em>
+    <p>This is equivalent to the Publishing State setting in the In-app Products UI. Can be <code>
+    published</code> or <code>unpublished</code>.</p>
+  </li>
+  <li><em>purchase_type</em>
+    <p>This is equivalent to the Purchase Type setting in the In-app Products UI. Can be <code>
+    managed_by_android</code>, which is equivalent to <strong>Managed per user account
+    </strong> in the In-app Products UI, or <code>managed_by_publisher</code>, which is equivalent
+    to <strong>Unmanaged</strong> in the In-app Products UI.</p>
+  </li>
+  <li><em>autotranslate</em>
+    <p>This is equivalent to selecting the <strong>Fill fields with auto translation</strong>
+    checkbox in the In-app Products UI. Can be <code>true</code> or <code>false</code>.</p>
+  </li>
+  <li><em>locale</em>
+    <p>This is equivalent to the Language setting in the In-app Products UI. You must have an entry
+    for the default locale. The default locale must be the first entry in the list of
+    locales, and it must include a <em>title</em> and <em>description</em>. If you want to provide
+    translated versions of the <em>title</em> and <em>description</em> in addition to the default,
+    you must use the following syntax rules:</p>
+    <p>If <em>autotranslate</em> is <code>true</code>, you must specify the default locale,
+    default title, default description, and other locales using the following format:</p>
+    <p>"true,"<em>default_locale</em>; <em>default_locale_title</em>;
+    <em>default_locale_description</em>; <em>locale_2</em>;    <em>locale_3</em>, ..."</p>
+    <p>If <em>autotranslate</em> is <code>false</code>, you must specify the default locale,
+    default title, and default description as well as the translated titles and descriptions using
+    the following format:</p>
+    <p>"false,"<em>default_locale</em>; <em>default_locale_title</em>;
+    <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_2_title</em>;
+    <em>local_2_description</em>; <em>locale_3</em>; <em>locale_3_title</em>;
+     <em>locale_3_description</em>; ..."</p>
+    <p>See table 1 for a list of the language codes you can use with the <em>locale</em> field.</p>
+  </li>
+  <li><em>title</em>
+    <p>This is equivalent to the Title setting in the In-app Products UI. If the <em>title</em>
+    contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
+    should also be escaped with a backslash (for example, "\\">.</p>
+  </li>
+  <li><em>description</em>
+    <p>This is equivalent to the Description in the In-app Products UI. If the <em>description</em>
+    contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
+    should also be escaped with a backslash (for example, "\\">.</p>
+  </li>
+  <li><em>autofill</em>
+    <p>This is equivalent to clicking <strong>Auto Fill</strong> in the In-app Products UI. Can be
+    <code>true</code> or <code>false</code>. The syntax for specifying the <em>country</em>
+    and <em>price</em> varies depending on which <em>autofill</em> setting you use.</p>
+    <p>If <em>autofill</em> is set to <code>true</code>, you need to specify only the default
+    price in your home currency and you must use this syntax:</p>
+    <p>"true","<em>default_price_in_home_currency</em>"
+    <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em>
+    and a <em>price</em> for each currency and you must use the following syntax:</p>
+    <p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>;
+    <em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p>
+  </li>
+  <li><em>country</em>
+    <p>The country for which you are specifying a price. You can only list countries that your
+    application is targeting. The country codes are two-letter uppercase
+    ISO country codes (such as "US") as defined by
+    <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-2</a>.</p>
+  </li>
+  <li><em>price</em>
+    <p>This is equivalent to the Price in the In-app Products UI. The price must be specified in
+    micro-units. To convert a currency value to micro-units, you multiply the real value by 1,000,000.
+    For example, if you want to sell an in-app item for $1.99 you specify 1990000 in the
+    <em>price</em> field.</p>
+  </li>
+</ul>
+
+<p class="table-caption" id="language-table"><strong>Table 1.</strong> Language codes you can use
+with the <em>locale</em> field.</p>
+
+<table>
+
+<tr>
+<th>Language</th>
+<th>Code</th>
+<th>Language</th>
+<th>Code</th>
+</tr>
+<tr>
+<td>Chinese</td>
+<td>zh_TW</td>
+<td>Italian</td>
+<td>it_IT</td>
+</tr>
+<tr>
+<td>Czech</td>
+<td>cs_CZ</td>
+<td>Japanese</td>
+<td>ja_JP</td>
+</tr>
+<tr>
+<td>Danish</td>
+<td>da_DK</td>
+<td>Korean</td>
+<td>ko_KR</td>
+</tr>
+<tr>
+<td>Dutch</td>
+<td>nl_NL</td>
+<td>Norwegian</td>
+<td>no_NO</td>
+</tr>
+<tr>
+<td>English</td>
+<td>en_US</td>
+<td>Polish</td>
+<td>pl_PL</td>
+</tr>
+<tr>
+<td>French</td>
+<td>fr_FR</td>
+<td>Portuguese</td>
+<td>pt_PT</td>
+</tr>
+<tr>
+<td>Finnish</td>
+<td>fi_FI</td>
+<td>Russian</td>
+<td>ru_RU</td>
+</tr>
+<tr>
+<td>German</td>
+<td>de_DE</td>
+<td>Spanish</td>
+<td>es_ES</td>
+</tr>
+<tr>
+<td>Hebrew</td>
+<td>iw_IL</td>
+<td>Swedish</td>
+<td>sv_SE</td>
+</tr>
+<tr>
+<td>Hindi</td>
+<td>hi_IN</td>
+<td>--</td>
+<td>--</td>
+</tr>
+</table>
+
+<p>To import the items that are specified in your CSV file, do the following:</p>
+
+<ol>
+  <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
+  <li>In the <strong>All Google Play listings</strong> panel, under the application name, click
+  <strong>In-app Products</strong>.</li>
+  <li>On the In-app Products List page, click <strong>Choose File</strong> and select your CSV
+file.
+    <p>The CSV file must be on your local computer or on a local disk that is connected to your
+    computer.</p>
+  </li>
+  <li>Select the <strong>Overwrite</strong> checkbox if you want to overwrite existing items in
+  your product list.
+    <p>This option overwrites values of existing items only if the value of the <em>product_id</em>
+    in the CSV file matches the In-app Product ID for an existing item in the product list.
+    Overwriting does not delete items that are on a product list but not present in the CSV
+    file.</p>
+  </li>
+  <li>On the In-app Products List page, click <strong>Import from CSV</strong>.</li>
+</ol>
+
+<p>You can also export an existing product list to a CSV file by clicking <strong>Export to CSV
+</strong> on the In-app Product List page. This is useful if you have manually added items to
+a product list and you want to start managing the product list through a CSV file.</p>
+
+<h3 id="billing-purchase-type">Choosing a Purchase Type</h3>
+
+<p>An item's purchase type controls how Google Play manages the purchase of the item. There are
+two purchase types: "managed per user account" and "unmanaged."</p>
+
+<p>Items that are managed per user account can be purchased only once per user account. When an item
+is managed per user account, Google Play permanently stores the transaction information for each
+item on a per-user basis. This enables you to query Google Play with the
+<code>RESTORE_TRANSACTIONS</code> request and restore the state of the items a specific user has
+purchased.</p>
+
+<p>If a user attempts to purchase a managed item that has already been purchased, Google Play
+displays an "Item already purchased" error. This occurs during checkout, when Google Play
+displays the price and description information on the checkout page. When the user dismisses the
+error message, the checkout page disappears and the user returns to your user interface. As a best
+practice, your application should prevent the user from seeing this error. The sample application
+demonstrates how you can do this by keeping track of items that are managed and already purchased
+and not allowing users to select those items from the list. Your application should do something
+similar&mdash;either graying out the item or hiding it so that it cannot be selected.</p>
+
+<p>The "manage by user account" purchase type is useful if you are selling items such as game levels
+or application features. These items are not transient and usually need to be restored whenever a
+user reinstalls your application, wipes the data on their device, or installs your application on a
+new device.</p>
+
+<p>Items that are unmanaged do not have their transaction information stored on Google Play,
+which means you cannot query Google Play to retrieve transaction information for items whose
+purchase type is listed as unmanaged. You are responsible for managing the transaction information
+of unmanaged items. Also, unmanaged items can be purchased multiple times as far as Google Play
+is concerned, so it's also up to you to control how many times an unmanaged item can be
+purchased.</p>
+
+<p>The "unmanaged" purchase type is useful if you are selling consumable items, such as fuel or
+magic spells. These items are consumed within your application and are usually purchased multiple
+times.</p>
+
+<h2 id="billing-refunds">Handling Refunds</h2>
+
+<p>In-app billing does not allow users to send a refund request to Google Play. Refunds for
+in-app purchases must be directed to you (the application developer). You can then process the
+refund through your Google Wallet merchant account. When you do this, Google Play receives a
+refund notification from Google Wallet, and Google Play sends a refund message to your
+application. For more information, see <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
+IN_APP_NOTIFY messages</a> and <a
+href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
+Pricing</a>.</p>
+
+<p class="caution"><strong>Important:</strong> You cannot use the Google Wallet API to issue
+refunds or cancel in-app billing transactions. You must do this manually through your Google
+Wallet merchant account. However, you can use the Google Wallet API to retrieve order
+information.</p>
+
+<h2 id="billing-testing-setup">Setting Up Test Accounts</h2>
+
+<p>The Google Play publisher site lets you set up one or more test accounts. A test account is a
+regular Google account that you register on the publisher site as a test account. Test accounts are
+authorized to make in-app purchases from applications that you have uploaded to the Google Play
+site but have not yet published.</p>
+
+<p>You can use any Google account as a test account. Test accounts are useful if you want to let
+multiple people test in-app billing on applications without giving them access to your publisher
+account's sign-in credentials. If you want to own and control the test accounts, you can create the
+accounts yourself and distribute the credentials to your developers or testers.</p>
+
+<p>Test accounts have three limitations:</p>
+
+<ul>
+  <li>Test account users can make purchase requests only within applications that are already
+  uploaded to your publisher account (although the application doesn't need to be published).</li>
+  <li>Test accounts can only be used to purchase items that are listed (and published) in an
+  application's product list.</li>
+  <li>Test account users do not have access to your publisher account and cannot upload applications
+  to your publisher account.</li>
+</ul>
+
+<p>To add test accounts to your publisher account, follow these steps:</p>
+
+<ol>
+  <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
+  <li>On the upper left part of the page, under your name, click <strong>Edit profile</strong>.</li>
+  <li>On the Edit Profile page, scroll down to the Licensing &amp; In-app Billing panel (see figure
+  5).</li>
+  <li>In Test Accounts, add the email addresses for the test accounts you want to register,
+  separating each account with a comma.</li>
+  <li>Click <strong>Save</strong> to save your profile changes.</li>
+</ol>
+
+<img src="{@docRoot}images/billing_public_key.png" height="510" id="figure5" />
+<p class="img-caption">
+  <strong>Figure 5.</strong> The Licensing and In-app Billing panel of your account's Edit Profile
+  page lets you register test accounts.
+</p>
+
+<h2 id="billing-support">Where to Get Support</h2>
+
+<p>If you have questions or encounter problems while implementing in-app billing, contact the
+support resources listed in the following table (see table 2). By directing your queries to the
+correct forum, you can get the support you need more quickly.</p>
+
+<p class="table-caption" id="support-table"><strong>Table 2.</strong> Developer support resources
+for Google Play in-app billing.</p>
+
+<table>
+
+<tr>
+<th>Support Type</th>
+<th>Resource</th>
+<th>Range of Topics</th>
+</tr>
+<tr>
+<td rowspan="2">Development and testing issues</td>
+<td>Google Groups: <a
+href="http://groups.google.com/group/android-developers">android-developers</a> </td>
+<td rowspan="2">In-app billing integration questions, user experience ideas, handling of responses,
+obfuscating code, IPC, test environment setup.</td>
+</tr>
+<tr>
+<td>Stack Overflow: <a
+href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/
+android</a></td>
+</tr>
+<tr>
+<td>Billing issue tracker</td>
+<td><a href="http://code.google.com/p/marketbilling/issues/">Billing
+project issue tracker</a></td>
+<td>Bug and issue reports related specifically to in-app billing sample code.</td>
+</tr>
+</table>
+
+<p>For general information about how to post to the groups listed above, see <a
+href="{@docRoot}resources/community-groups.html">Developer Forums</a> document in the Resources
+tab.</p>
+
+
+
diff --git a/docs/html/guide/google/play/billing/billing_best_practices.jd b/docs/html/guide/google/play/billing/billing_best_practices.jd
new file mode 100755
index 0000000..49d2a29
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_best_practices.jd
@@ -0,0 +1,111 @@
+page.title=Security and Design
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#billing-security">Security Best Practices</a></li>
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
+    Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+</div>
+</div>
+
+<p>As you design your in-app billing implementation, be sure to follow the security and design
+guidelines that are discussed in this document. These guidelines are recommended best practices for
+anyone who is using Google Play's in-app billing service.</p>
+
+<h2>Security Best Practices</h2>
+
+<h4>Perform signature verification tasks on a server</h4>
+<p>If practical, you should perform signature verification on a remote server and not on a device.
+Implementing the verification process on a server makes it difficult for attackers to break the
+verification process by reverse engineering your .apk file. If you do offload security processing to
+a remote server, be sure that the device-server handshake is secure.</p>
+
+<h4>Protect your unlocked content</h4>
+<p>To prevent malicious users from redistributing your unlocked content, do not bundle it in your
+.apk file. Instead, do one of the following:</p>
+  <ul>
+    <li>Use a real-time service to deliver your content, such as a content feed. Delivering content
+    through a real-time service allows you to keep your content fresh.</li>
+    <li>Use a remote server to deliver your content.</li>
+  </ul>
+<p>When you deliver content from a remote server or a real-time service, you can store the unlocked
+content in device memory or store it on the device's SD card. If you store content on an SD card, be
+sure to encrypt the content and use a device-specific encryption key.</p>
+
+<h4>Obfuscate your code</h4>
+<p>You should obfuscate your in-app billing code so it is difficult for an attacker to reverse
+engineer security protocols and other application components. At a minimum, we recommend that you
+run an  obfuscation tool like <a
+href="http://developer.android.com/tools/proguard.html">Proguard</a> on your
+code.</p>
+<p>In addition to running an obfuscation program, we recommend that you use the following techniques
+to obfuscate your in-app billing code.</p>
+<ul>
+  <li>Inline methods into other methods.</li>
+  <li>Construct strings on the fly instead of defining them as constants.</li>
+  <li>Use Java reflection to call methods.</li>
+</ul>
+<p>Using these techniques can help reduce the attack surface of your application and help minimize
+attacks that can compromise your in-app billing implementation.</p>
+<div class="note">
+  <p><strong>Note:</strong> If you use Proguard to obfuscate your code, you must add the following
+  line to your Proguard configuration file:</p>
+  <p><code>-keep class com.android.vending.billing.**</code></p>
+</div>
+  
+<h4>Modify all sample application code</h4>
+<p>The in-app billing sample application is publicly distributed and can be downloaded by anyone,
+which means it is relatively easy for an attacker to reverse engineer your application if you use
+the sample code exactly as it is published. The sample application is intended to be used only as an
+example. If you use any part of the sample application, you must modify it before you publish it or
+release it as part of a production application.</p>
+<p>In particular, attackers look for known entry points and exit points in an application, so it is
+important that you modify these parts of your code that are identical to the sample application.</p>
+
+<h4>Use secure random nonces</h4>
+<p>Nonces must not be predictable or reused. Always use a cryptographically secure random number
+generator (like {@link java.security.SecureRandom}) when you generate nonces. This can help reduce
+replay attacks.</p>
+<p>Also, if you are performing nonce verification on a server, make sure that you generate the
+nonces on the server.</p>
+
+<h4>Take action against trademark and copyright infringement</h4>
+<p>If you see your content being redistributed on Google Play, act quickly and decisively. File a
+<a href="http://market.android.com/support/bin/answer.py?hl=en&amp;answer=141511">trademark notice
+of infringement</a> or a <a href="http://www.google.com/android_dmca.html">copyright notice of
+infringement</a>.</p>
+
+<h4>Implement a revocability scheme for unlocked content</h4>
+<p>If you are using a remote server to deliver or manage content, have your application verify the
+purchase state of the unlocked content whenever a user accesses the content. This allows you to
+revoke use when necessary and minimize piracy.</p>
+
+<h4>Protect your Google Play public key</h4>
+<p>To keep your public key safe from malicious users and hackers, do not embed it in any code as a
+literal string. Instead, construct the string at runtime from pieces or use bit manipulation (for
+example, XOR with some other string) to hide the actual key. The key itself is not secret
+information, but you do not want to make it easy for a hacker or malicious user to replace the
+public key with another key.</p>
+
diff --git a/docs/html/guide/google/play/billing/billing_integrate.jd b/docs/html/guide/google/play/billing/billing_integrate.jd
new file mode 100755
index 0000000..2d1582e
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_integrate.jd
@@ -0,0 +1,1100 @@
+page.title=Implementing In-app Billing
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#billing-download">Downloading the Sample Application</a></li>
+    <li><a href="#billing-add-aidl">Adding the AIDL file to your project</a></li>
+    <li><a href="#billing-permission">Updating Your Application's Manifest</a></li>
+    <li><a href="#billing-service">Creating a Service</a></li>
+    <li><a href="#billing-broadcast-receiver">Creating a BroadcastReceiver</a></li>
+    <li><a href="#billing-signatures">Creating a security processing component</a></li>
+    <li><a href="#billing-implement">Modifying Your Application Code</a></li>
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="#billing-download">Sample Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+</div>
+</div>
+
+<p>In-app Billing on Google Play provides a straightforward, simple interface for sending in-app
+billing requests and managing in-app billing transactions using Google Play. This document helps
+you implement in-app billing by stepping through the primary implementation tasks, using the in-app
+billing sample application as an example.</p>
+
+<p>Before you implement in-app billing in your own application, be sure that you read <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app Billing</a> and <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>. These
+documents provide background information that will make it easier for you to implement in-app
+billing.</p>
+
+<p>To implement in-app billing in your application, you need to do the following:</p>
+<ol>
+  <li><a href="#billing-download">Download the in-app billing sample application</a>.</li>
+  <li><a href="#billing-add-aidl">Add the IMarketBillingService.aidl file</a> to your project.</li>
+  <li><a href="#billing-permission">Update your AndroidManifest.xml file</a>.</li>
+  <li><a href="#billing-service">Create a Service</a> and bind it to the
+  <code>MarketBillingService</code> so your application can send billing requests and receive
+  billing responses from Google Play.</li>
+  <li><a href="#billing-broadcast-receiver">Create a BroadcastReceiver</a> to handle broadcast
+  intents from Google Play.</li>
+  <li><a href="#billing-signatures">Create a security processing component</a> to verify the
+  integrity of the transaction messages that are sent by Google Play.</li>
+  <li><a href="#billing-implement">Modify your application code</a> to support in-app billing.</li>
+</ol>
+
+<h2 id="billing-download">Downloading the Sample Application</h2>
+
+<p>The in-app billing sample application shows you how to perform several tasks that are common to
+all in-app billing implementations, including:</p>
+
+<ul>
+  <li>Sending in-app billing requests to Google Play.</li>
+  <li>Handling synchronous responses from Google Play.</li>
+  <li>Handling broadcast intents (asynchronous responses) from Google Play.</li>
+  <li>Using in-app billing security mechanisms to verify the integrity of billing responses.</li>
+  <li>Creating a user interface that lets users select items for purchase.</li>
+</ul>
+
+<p>The sample application includes an application file (<code>Dungeons.java</code>), the AIDL file
+for the <code>MarketBillingService</code> (<code>IMarketBillingService.aidl</code>), and several
+classes that demonstrate in-app billing messaging. It also includes a class that demonstrates basic
+security tasks, such as signature verification.</p>
+
+<p>Table 1 lists the source files that are included with the sample application.</p>
+<p class="table-caption" id="source-files-table"><strong>Table 1.</strong> In-app billing sample
+application source files.</p>
+
+<table>
+<tr>
+<th>File</th>
+<th>Description</th>
+</tr>
+
+<tr>
+<td>IMarketBillingService.aidl</td>
+<td>Android Interface Definition Library (AIDL) file that defines the IPC interface to Google
+Play's in-app billing service (<code>MarketBillingService</code>).</td>
+</tr>
+
+<tr>
+<td>Dungeons.java</td>
+<td>Sample application file that provides a UI for making purchases and displaying purchase
+history.</td>
+</tr>
+
+<tr>
+<td>PurchaseDatabase.java</td>
+<td>A local database for storing purchase information.</td>
+</tr>
+
+<tr>
+  <td>BillingReceiver.java</td>
+  <td>A {@link android.content.BroadcastReceiver} that receives asynchronous response messages
+  (broadcast intents) from Google Play. Forwards all messages to the
+  <code>BillingService</code>.</td>
+</tr>
+<tr>
+  <td>BillingService.java</td>
+  <td>A {@link android.app.Service} that sends messages to Google Play on behalf of the
+  application by connecting (binding) to the <code>MarketBillingService</code>.</td>
+</tr>
+
+<tr>
+  <td>ResponseHandler.java</td>
+  <td>A {@link android.os.Handler} that contains methods for updating the purchases database and the
+  UI.</td>
+</tr>
+
+<tr>
+  <td>PurchaseObserver.java</td>
+  <td>An abstract class for observing changes related to purchases.</td>
+</tr>
+
+<tr>
+<td>Security.java</td>
+<td>Provides various security-related methods.</td>
+</tr>
+
+<tr>
+<td>Consts.java</td>
+<td>Defines various Google Play constants and sample application constants. All constants that
+are defined by Google Play must be defined the same way in your application.</td>
+</tr>
+
+<tr>
+<td>Base64.java and Base64DecoderException.java</td>
+<td>Provides conversion services from binary to Base64 encoding. The <code>Security</code> class
+relies on these utility classes.</td>
+</tr>
+
+</table>
+
+<p>The in-app billing sample application is available as a downloadable component of the Android
+SDK. To download the sample application component, launch the Android SDK Manager and then
+select the <strong>Google Market Billing package</strong> component (see figure 1), and click <strong>Install
+Selected</strong> to begin the download.</p>
+
+
+<img src="{@docRoot}images/billing_package.png" height="325" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> The Google Market Billing package contains the sample application and
+  the AIDL file.
+</p>
+
+<p>When the download is complete, the Android SDK Manager saves the component into the
+following directory:</p>
+
+<p><code>&lt;sdk&gt;/extras/google/market_billing/</code></p>
+
+<p>If you want to see an end-to-end demonstration of in-app billing before you integrate in-app
+billing into your own application, you can build and run the sample application. Building and
+running the sample application involves three tasks:</p>
+
+<ul>
+  <li>Configuring and building the sample application.</li>
+  <li>Uploading the sample application to Google Play.</li>
+  <li>Setting up test accounts and running the sample application.</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Building and running the sample application is necessary only
+if you want to see a demonstration of in-app billing. If you do not want to run the sample
+application, you can skip to the next section, <a href="#billing-add-aidl">Adding the AIDL file to
+your project</a>.</p>
+
+<h3>Configuring and building the sample application</h3>
+
+<p>Before you can run the sample application, you need to configure it and build it by doing the
+following:</p>
+
+<ol>
+  <li><strong>Add your Google Play public key to the sample application code.</strong>
+    <p>This enables the application to verify the signature of the transaction information that is
+    returned from Google Play. To add your public key to the sample application code, do the
+    following:</p>
+    <ol>
+      <li>Log in to your Google Play <a href="http://play.google.com/apps/publish">publisher
+      account</a>.</li>
+      <li>On the upper left part of the page, under your name, click <strong>Edit
+      Profile</strong>.</li>
+      <li>On the Edit Profile page, scroll down to the <strong>Licensing &amp; In-app
+      Billing</strong> panel.</li>
+      <li>Copy your public key.</li>
+      <li>Open <code>src/com/example/dungeons/Security.java</code> in the editor of your choice.
+        <p>You can find this file in the sample application's project folder.</p>
+      </li>
+      <li>Add your public key to the following line of code:
+        <p><code>String base64EncodedPublicKey = "your public key here";</code></p>
+      </li>
+      <li>Save the file.</li>
+    </ol>
+  </li>
+  <li><strong>Change the package name of the sample application.</strong>
+    <p>The current package name is <code>com.example.dungeons</code>. Google Play does not let
+    you upload applications with package names that contain <code>com.example</code>, so you must
+    change the package name to something else.</p>
+  </li>
+  <li><strong>Build the sample application in release mode and sign it.</strong>
+    <p>To learn how to build and sign applications, see <a
+    href="{@docRoot}tools/building/index.html">Building and Running</a>.</p>
+  </li>
+</ol>
+
+<h3>Uploading the sample application</h3>
+
+<p>After you build a release version of the sample application and sign it, you need to upload it as
+a draft to the Google Play publisher site. You also need to create a product list for the in-app
+items that are available for purchase in the sample application. The following instructions show you
+how to do this.</p>
+<ol>
+  <li><strong>Upload the release version of the sample application to Google Play.</strong>
+    <p>Do not publish the sample application; leave it as an unpublished draft application. The
+    sample application is for demonstration purposes only and should not be made publicly available
+    on Google Play. To learn how to upload an application to Google Play, see <a
+    href="http://market.android.com/support/bin/answer.py?answer=113469">Uploading
+    applications</a>.</p>
+  </li>
+  <li><strong>Create a product list for the sample application.</strong>
+    <p>The sample application lets you purchase two items: a two-handed sword
+    (<code>sword_001</code>) and a potion (<code>potion_001</code>). We recommend that you set up
+    your product list so that <code>sword_001</code> has a purchase type of "Managed per user
+    account" and <code>potion_001</code> has a purchase type of "Unmanaged" so you can see how these
+    two purchase types behave. To learn how to set up a product list, see <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-list-setup">Creating a Product
+    List</a>.</p>
+    <p class="note"><strong>Note:</strong> You must publish the items in your product
+    list (<code>sword_001</code> and <code>potion_001</code>) even though you are not publishing the
+    sample application. Also, you must have a Google Wallet Merchant account to add items to the
+    sample application's product list.</p>
+  </li>
+</ol>
+
+<h3>Running the sample application</h3>
+
+<p>You cannot run the sample application in the emulator. You must install the sample application
+onto a device to run it. To run the sample application, do the following:</p>
+
+<ol>
+  <li><strong>Make sure you have at least one test account registered under your Google Play
+  publisher account.</strong>
+    <p>You cannot purchase items from yourself (Google Wallet prohibits this), so you need to
+    create at least one test account that you can use to purchase items in the sample application.
+    To learn how to set up a test account, see <a
+    href="{@docRoot}guide/google/play/billing/billing_testing.html#billing-testing-setup">Setting up Test
+    Accounts</a>.</p>
+  </li>
+  <li><strong>Verify that your device is running a supported version of the Google Play
+  application or the MyApps application.</strong>
+    <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
+    the MyApps application. If your device is running any other version of Android, in-app billing
+    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
+    version of the Google Play application, see <a
+    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
+    Play</a>.</p>
+  </li>
+  <li><strong>Install the application onto your device.</strong>
+    <p>Even though you uploaded the application to Google Play, the application is not published,
+    so you cannot download it from Google Play to a device. Instead, you must install the
+    application onto your device. To learn how to install an application onto a device, see <a
+    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
+    device</a>.</p>
+ </li>
+ <li><strong>Make one of your test accounts the primary account on your device.</strong>
+    <p>The primary account on your device must be one of the <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
+    that you registered on the Google Play publisher site. If the primary account on your device is not a
+    test account, you must do a factory reset of the device and then sign in with one of your test
+    accounts. To perform a factory reset, do the following:</p>
+    <ol>
+      <li>Open Settings on your device.</li>
+      <li>Touch <strong>Privacy</strong>.</li>
+      <li>Touch <strong>Factory data reset</strong>.</li>
+      <li>Touch <strong>Reset phone</strong>.</li>
+      <li>After the phone resets, be sure to sign in with one of your test accounts during the
+      device setup process.</li>
+    </ol>
+  </li>
+  <li><strong>Run the application and purchase the sword or the potion.</strong>
+    <p>When you use a test account to purchase items, the test account is billed through Google
+    Wallet and your Google Wallet Merchant account receives a payout for the purchase.
+    Therefore, you may want to refund purchases that are made with test accounts, otherwise the
+    purchases will show up as actual payouts to your merchant account.</p>
+</ol>
+
+<p class="note"><strong>Note</strong>: Debug log messages are turned off by default in the
+sample application. You can turn them on by setting the variable <code>DEBUG</code>
+to <code>true</code> in the <code>Consts.java</code> file.</p>
+
+<h2 id="billing-add-aidl">Adding the AIDL file to your project</h2>
+
+<p>The sample application contains an Android Interface Definition Language (AIDL) file,  which
+defines the interface to Google Play's in-app billing service
+(<code>MarketBillingService</code>). When you add this file to your project, the Android build
+environment creates an interface file (<code>IMarketBillingService.java</code>). You can then use
+this interface to make billing requests by invoking IPC method calls.</p>
+
+<p>If you are using the ADT plug-in with Eclipse, you can just add this file to your
+<code>/src</code> directory. Eclipse will automatically generate the interface file when you build
+your project (which should happen immediately). If you are not using the ADT plug-in, you can put
+the AIDL file into your project and use the Ant tool to build your project so that the
+<code>IMarketBillingService.java</code> file gets generated.</p>
+
+<p>To add the <code>IMarketBillingService.aidl</code> file to your project, do the following:</p>
+
+<ol>
+  <li>Create the following directory in your application's <code>/src</code> directory:
+    <p><code>com/android/vending/billing/</code></p>
+  </li>
+  <li>Copy the <code>IMarketBillingService.aidl</code> file into the
+  <code>sample/src/com/android/vending/billing/</code> directory.</li>
+  <li>Build your application.</li>
+</ol>
+
+<p>You should now find a generated interface file named <code>IMarketBillingService.java</code> in
+the <code>gen</code> folder of your project.</p>
+
+<h2 id="billing-permission">Updating Your Application's Manifest</h2>
+
+<p>In-app billing relies on the Google Play application, which handles all communication between
+your application and the Google Play server. To use the Google Play application, your
+application must request the proper permission. You can do this by adding the
+<code>com.android.vending.BILLING</code> permission to your AndroidManifest.xml file. If your
+application does not declare the in-app billing permission, but attempts to send billing requests,
+Google Play will refuse the requests and respond with a <code>RESULT_DEVELOPER_ERROR</code>
+response code.</p>
+
+<p>In addition to the billing permission, you need to declare the {@link
+android.content.BroadcastReceiver} that you will use to receive asynchronous response messages
+(broadcast intents) from Google Play, and you need to declare the {@link android.app.Service}
+that you will use to bind with the <code>IMarketBillingService</code> and send messages to Google
+Play. You must also declare <a
+href="{@docRoot}guide/topics/manifest/intent-filter-element.html">intent filters</a> for the {@link
+android.content.BroadcastReceiver} so that the Android system knows how to handle the broadcast
+intents that are sent from the Google Play application.</p>
+
+<p>For example, here is how the in-app billing sample application declares the billing permission,
+the {@link android.content.BroadcastReceiver}, the {@link android.app.Service}, and the intent
+filters. In the sample application, <code>BillingReceiver</code> is the {@link
+android.content.BroadcastReceiver} that handles broadcast intents from the Google Play
+application and <code>BillingService</code> is the {@link android.app.Service} that sends requests
+to the Google Play application.</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+  package="com.example.dungeons"
+  android:versionCode="1"
+  android:versionName="1.0"&gt;
+
+  &lt;uses-permission android:name="com.android.vending.BILLING" /&gt;
+
+  &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
+    &lt;activity android:name=".Dungeons" android:label="@string/app_name"&gt;
+      &lt;intent-filter&gt;
+        &lt;action android:name="android.intent.action.MAIN" /&gt;
+        &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
+      &lt;/intent-filter&gt;
+    &lt;/activity&gt;
+
+    &lt;service android:name="BillingService" /&gt;
+
+    &lt;receiver android:name="BillingReceiver"&gt;
+      &lt;intent-filter&gt;
+        &lt;action android:name="com.android.vending.billing.IN_APP_NOTIFY" /&gt;
+        &lt;action android:name="com.android.vending.billing.RESPONSE_CODE" /&gt;
+        &lt;action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" /&gt;
+      &lt;/intent-filter&gt;
+    &lt;/receiver&gt;
+
+  &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<h2 id="billing-service">Creating a Local Service</h2>
+
+<p>Your application must have a local {@link android.app.Service} to facilitate messaging between
+your application and Google Play. At a minimum, this service must do the following:</p>
+
+<ul>
+  <li>Bind to the <code>MarketBillingService</code>.
+  <li>Send billing requests (as IPC method calls) to the Google Play application. The five types
+  of billing requests include:
+    <ul>
+      <li><code>CHECK_BILLING_SUPPORTED</code> requests</li>
+      <li><code>REQUEST_PURCHASE</code> requests</li>
+      <li><code>GET_PURCHASE_INFORMATION</code> requests</li>
+      <li><code>CONFIRM_NOTIFICATIONS</code> requests</li>
+      <li><code>RESTORE_TRANSACTIONS</code> requests</li>
+    </ul>
+  </li>
+  <li>Handle the synchronous response messages that are returned with each billing request.</li>
+</ul>
+
+<h3>Binding to the MarketBillingService</h3>
+
+<p>Binding to the <code>MarketBillingService</code> is relatively easy if you've already added the
+<code>IMarketBillingService.aidl</code> file to your project. The following code sample shows how to
+use the {@link android.content.Context#bindService bindService()} method to bind a service to the
+<code>MarketBillingService</code>. You could put this code in your service's {@link
+android.app.Activity#onCreate onCreate()} method.</p>
+
+<pre>
+try {
+  boolean bindResult = mContext.bindService(
+    new Intent("com.android.vending.billing.MarketBillingService.BIND"), this,
+    Context.BIND_AUTO_CREATE);
+  if (bindResult) {
+    Log.i(TAG, "Service bind successful.");
+  } else {
+    Log.e(TAG, "Could not bind to the MarketBillingService.");
+  }
+} catch (SecurityException e) {
+  Log.e(TAG, "Security exception: " + e);
+}
+</pre>
+
+<p>After you bind to the service, you need to create a reference to the
+<code>IMarketBillingService</code> interface so you can make billing requests via IPC method calls.
+The following code shows you how to do this using the {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method.</p>
+
+<pre>
+/**
+  * The Android system calls this when we are connected to the MarketBillingService.
+  */
+  public void onServiceConnected(ComponentName name, IBinder service) {
+    Log.i(TAG, "MarketBillingService connected.");
+    mService = IMarketBillingService.Stub.asInterface(service);
+  }
+</pre>
+
+<p>You can now use the <code>mService</code> reference to invoke the
+<code>sendBillingRequest()</code> method.</p>
+
+<p>For a complete implementation of a service that binds to the <code>MarketBillingService</code>,
+see the <code>BillingService</code> class in the sample application.</p>
+
+<h3>Sending billing requests to the MarketBillingService</h3>
+
+<p>Now that your {@link android.app.Service} has a reference to the
+<code>IMarketBillingService</code> interface, you can use that reference to send billing requests
+(via IPC method calls) to the <code>MarketBillingService</code>. The
+<code>MarketBillingService</code> IPC interface exposes a single public method
+(<code>sendBillingRequest()</code>), which takes a single {@link android.os.Bundle} parameter. The
+Bundle that you deliver with this method specifies the type of request you want to perform, using
+various key-value pairs. For instance, one key indicates the type of request you are making, another
+indicates the item being purchased, and another identifies your application. The
+<code>sendBillingRequest()</code> method immediately returns a Bundle containing an initial response
+code. However, this is not the complete purchase response; the complete response is delivered with
+an asynchronous broadcast intent. For more information about the various Bundle keys that are
+supported by the <code>MarketBillingService</code>, see <a
+href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-interface">In-app Billing
+Service Interface</a>.</p>
+
+<p>You can use the <code>sendBillingRequest()</code> method to send five types of billing requests.
+The five request types are specified using the <code>BILLING_REQUEST</code> Bundle key. This Bundle
+key can have the following five values:</p>
+
+<ul>
+  <li><code>CHECK_BILLING_SUPPORTED</code>&mdash;verifies that the Google Play application
+  supports in-app billing and the version of the In-app Billing API available.</li>
+  <li><code>REQUEST_PURCHASE</code>&mdash;sends a purchase request for an in-app item.</li>
+  <li><code>GET_PURCHASE_INFORMATION</code>&mdash;retrieves transaction information for a purchase
+  or refund.</li>
+  <li><code>CONFIRM_NOTIFICATIONS</code>&mdash;acknowledges that you received the transaction
+  information for a purchase or refund.</li>
+  <li><code>RESTORE_TRANSACTIONS</code>&mdash;retrieves a user's transaction history for <a
+  href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">managed
+  purchases</a>.</li>
+</ul>
+
+<p>To make any of these billing requests, you first need to build an initial {@link
+android.os.Bundle} that contains the three keys that are required for all requests:
+<code>BILLING_REQUEST</code>, <code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The following
+code sample shows you how to create a helper method named <code>makeRequestBundle()</code> that does
+this.</p>
+
+<pre>
+protected Bundle makeRequestBundle(String method) {
+  Bundle request = new Bundle();
+  request.putString(BILLING_REQUEST, method);
+  request.putInt(API_VERSION, 1);
+  request.putString(PACKAGE_NAME, getPackageName());
+  return request;
+</pre>
+
+<p>To use this helper method, you pass in a <code>String</code> that corresponds to one of the five
+types of billing requests. The method returns a Bundle that has the three required keys defined. The
+following sections show you how to use this helper method when you send a billing request.</p>
+
+<p class="caution"><strong>Important</strong>: You must make all in-app billing requests from your
+application's main thread.</p>
+
+<h4>Verifying that in-app billing is supported (CHECK_BILLING_SUPPPORTED)</h4>
+
+<p>The following code sample shows how to verify whether the Google Play application supports
+in-app billing and confirm what version of the API it supports. In the sample, <code>mService</code>
+is an instance of the <code>MarketBillingService</code> interface.</p>
+
+<pre>
+/**
+* Request type is CHECK_BILLING_SUPPORTED
+*/
+  Bundle request = makeRequestBundle("CHECK_BILLING_SUPPORTED");
+  Bundle response = mService.sendBillingRequest(request);
+  // Do something with this response.
+}
+</pre>
+
+<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
+three keys that are required for all requests: <code>BILLING_REQUEST</code>,
+<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. If you are offering subscriptions in
+your app, set the API_VERSION key to a value of "2", to confirm that In-app Billing v2 is
+available. For an examnple, see
+<a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#version">Subscriptions</a>.</p>
+
+<p>The <code>CHECK_BILLING_SUPPORTED</code> request returns a synchronous {@link
+android.os.Bundle} response, which contains only a single key: <code>RESPONSE_CODE</code>. The
+<code>RESPONSE_CODE</code> key can have the following values:</p>
+<ul>
+  <li><code>RESULT_OK</code>&mdash;the spedified version of in-app billing is supported.</li>
+  <li><code>RESULT_BILLING_UNAVAILABLE</code>&mdash;in-app billing is not available because the API
+  version you specified is not recognized or the user is not eligible to make in-app purchases (for
+  example, the user resides in a country that prohibits in-app purchases).</li>
+  <li><code>RESULT_ERROR</code>&mdash;there was an error connecting with the Google Play
+  application.</li>
+  <li><code>RESULT_DEVELOPER_ERROR</code>&mdash;the application is trying to make an in-app billing
+  request but the application has not declared the <code>com.android.vending.BILLING</code>
+  permission in its manifest. Can also indicate that an application is not properly signed, or that
+  you sent a malformed request.</li>
+</ul>
+
+<p>The <code>CHECK_BILLING_SUPPORTED</code> request does not trigger any asynchronous responses
+(broadcast intents).</p>
+
+<p>We recommend that you invoke the <code>CHECK_BILLING_SUPPORTED</code> request within a
+<code>RemoteException</code> block. When your code throws a <code>RemoteException</code> it
+indicates that the remote method call failed, which means that the Google Play application is out
+of date and needs to be updated. In this case, you can provide users with an error message that
+contains a link to the <a
+href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google Play</a>
+Help topic.</p>
+
+<p>The sample application demonstrates how you can handle this error condition (see
+<code>DIALOG_CANNOT_CONNECT_ID</code> in <code>Dungeons.java</code>).</p>
+
+<h4>Making a purchase request (REQUEST_PURCHASE)</h4>
+
+<p>To make a purchase request you must do the following:</p>
+
+<ul>
+  <li>Send the <code>REQUEST_PURCHASE</code> request.</li>
+  <li>Launch the {@link android.app.PendingIntent} that is returned from the Google Play
+  application.</li>
+  <li>Handle the broadcast intents that are sent by the Google Play application.</li>
+</ul>
+
+<h5>Making the request</h5>
+
+<p>You must specify four keys in the request {@link android.os.Bundle}. The following code sample
+shows how to set these keys and make a purchase request for a single in-app item. In the sample,
+<code>mProductId</code> is the Google Play product ID of an in-app item (which is listed in the
+application's <a href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-list-setup">product
+list</a>), and <code>mService</code> is an instance of the <code>MarketBillingService</code>
+interface.</p>
+
+<pre>
+/**
+* Request type is REQUEST_PURCHASE
+*/
+  Bundle request = makeRequestBundle("REQUEST_PURCHASE");
+  request.putString(ITEM_ID, mProductId);
+  // Request is for a standard in-app product
+  request.putString(ITEM_TYPE, "inapp");
+  // Note that the developer payload is optional.
+  if (mDeveloperPayload != null) {
+    request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
+  }
+  Bundle response = mService.sendBillingRequest(request);
+  // Do something with this response.
+</pre>
+<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
+three keys that are required for all requests: <code>BILLING_REQUEST</code>,
+<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The <code>ITEM_ID</code> key is then added
+to the Bundle prior to invoking the <code>sendBillingRequest()</code> method.</p>
+
+<p>The request returns a synchronous {@link android.os.Bundle} response, which contains three keys:
+<code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and <code>REQUEST_ID</code>. The
+<code>RESPONSE_CODE</code> key provides you with the status of the request and the
+<code>REQUEST_ID</code> key provides you with a unique request identifier for the request. The
+<code>PURCHASE_INTENT</code> key provides you with a {@link android.app.PendingIntent}, which you
+can use to launch the checkout UI.</p>
+
+<h5>Using the pending intent</h5>
+
+<p>How you use the pending intent depends on which version of Android a device is running. On
+Android 1.6, you must use the pending intent to launch the checkout UI in its own separate task
+instead of your application's activity stack. On Android 2.0 and higher, you can use the pending
+intent to launch the checkout UI on your application's activity stack. The following code shows you
+how to do this. You can find this code in the <code>PurchaseObserver.java</code> file in the sample
+application.</p>
+
+<pre>
+void startBuyPageActivity(PendingIntent pendingIntent, Intent intent) {
+  if (mStartIntentSender != null) {
+    // This is on Android 2.0 and beyond.  The in-app checkout page activity
+    // will be on the activity stack of the application.
+    try {
+      // This implements the method call:
+      // mActivity.startIntentSender(pendingIntent.getIntentSender(),
+      //     intent, 0, 0, 0);
+      mStartIntentSenderArgs[0] = pendingIntent.getIntentSender();
+      mStartIntentSenderArgs[1] = intent;
+      mStartIntentSenderArgs[2] = Integer.valueOf(0);
+      mStartIntentSenderArgs[3] = Integer.valueOf(0);
+      mStartIntentSenderArgs[4] = Integer.valueOf(0);
+      mStartIntentSender.invoke(mActivity, mStartIntentSenderArgs);
+    } catch (Exception e) {
+      Log.e(TAG, "error starting activity", e);
+      }
+  } else {
+    // This is on Android 1.6. The in-app checkout page activity will be on its
+    // own separate activity stack instead of on the activity stack of
+    // the application.
+    try {
+      pendingIntent.send(mActivity, 0 /* code */, intent);
+    } catch (CanceledException e) {
+      Log.e(TAG, "error starting activity", e);
+      }
+  }
+}
+</pre>
+
+<p class="caution"><strong>Important:</strong> You must launch the pending intent from an activity
+context and not an application context. Also, you cannot use the <code>singleTop</code> <a
+href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launch mode</a> to launch the
+pending intent. If you do either of these, the Android system will not attach the pending intent to
+your application process. Instead, it will bring Google Play to the foreground, disrupting your
+application.</p>
+
+<h5>Handling broadcast intents</h5>
+
+<p>A <code>REQUEST_PURCHASE</code> request also triggers two asynchronous responses (broadcast
+intents). First, the Google Play application sends a <code>RESPONSE_CODE</code> broadcast intent,
+which provides error information about the request. If the request does not generate an
+error, the <code>RESPONSE_CODE</code> broadcast intent returns <code>RESULT_OK</code>, which
+indicates that the request was successfully sent. (To be clear, a <code>RESULT_OK</code> response
+does not indicate that the requested purchase was successful; it indicates that the request was sent
+successfully to Google Play.)</p>
+
+<p>Next, when the requested transaction changes state (for example, the purchase is successfully
+charged to a credit card or the user cancels the purchase), the Google Play application sends an
+<code>IN_APP_NOTIFY</code> broadcast intent. This message contains a notification ID, which you can
+use to retrieve the transaction details for the <code>REQUEST_PURCHASE</code> request.</p>
+
+<p class="note"><strong>Note:</strong> The Google Play application also sends
+an <code>IN_APP_NOTIFY</code> for refunds. For more information, see <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
+IN_APP_NOTIFY messages</a>.</p>
+
+<p>Because the purchase process is not instantaneous and can take several seconds (or more), you
+must assume that a purchase request is pending from the time you receive a <code>RESULT_OK</code>
+message until you receive an <code>IN_APP_NOTIFY</code> message for the transaction. While the
+transaction is pending, the Google Play checkout UI displays an "Authorizing purchase..."
+notification; however, this notification is dismissed after 60 seconds and you should not rely on
+this notification as your primary means of conveying transaction status to users. Instead, we
+recommend that you do the following:</p>
+
+<ul>
+  <li>Add an {@link android.app.Activity} to your application that shows users the status of pending
+and completed in-app purchases.</li>
+  <li>Use a <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">status
+bar notification</a> to keep users informed about the progress of a purchase.</li>
+</ul>
+
+<p>To use these two UI elements, you could invoke a status bar notification with a ticker-text
+message that says "Purchase pending" when your application receives a <code>RESULT_OK</code>
+message. Then, when your application receives an <code>IN_APP_NOTIFY</code> message, you could
+update the notification with a new message that says "Purchase succeeded" or "Purchase failed." When
+a user touches the expanded status bar notification, you could launch the activity that shows the
+status of pending and completed in-app purchases.</p>
+
+<p>If you use some other UI technique to inform users about the state of a pending transaction,
+be sure that your pending status UI does not block your application. For example, you should avoid
+using a hovering progress wheel to convey the status of a pending transaction because a pending
+transaction could last a long time, particularly if a device loses network connectivity and cannot
+receive transaction updates from Google Play.</p>
+
+<p class="caution"><strong>Important:</strong> If a user purchases a managed item, you must prevent
+the user from purchasing the item again while the original transaction is pending. If a user
+attempts to purchase a managed item twice, and the first transaction is still pending, Google
+Play will display an error to the user; however, Google Play will not send an error to your
+application notifying you that the second purchase request was canceled. This might cause your
+application to get stuck in a pending state while it waits for an <code>IN_APP_NOTIFY</code> message
+for the second purchase request.</p>
+
+<h4>Retrieving transaction information for a purchase or refund (GET_PURCHASE_INFORMATION)</h4>
+
+<p>You retrieve transaction information in response to an <code>IN_APP_NOTIFY</code> broadcast
+intent. The <code>IN_APP_NOTIFY</code> message contains a notification ID, which you can use to
+retrieve transaction information.</p>
+
+<p>To retrieve transaction information for a purchase or refund you must specify five keys in the
+request {@link android.os.Bundle}. The following code sample shows how to set these keys and make
+the request. In the sample, <code>mService</code> is an instance of the
+<code>MarketBillingService</code> interface.</p>
+
+<pre>
+/**
+* Request type is GET_PURCHASE_INFORMATION
+*/
+  Bundle request = makeRequestBundle("GET_PURCHASE_INFORMATION");
+  request.putLong(REQUEST_NONCE, mNonce);
+  request.putStringArray(NOTIFY_IDS, mNotifyIds);
+  Bundle response = mService.sendBillingRequest(request);
+  // Do something with this response.
+}
+</pre>
+<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
+three keys that are required for all requests: <code>BILLING_REQUEST</code>,
+<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional keys are then added to the
+bundle prior to invoking the <code>sendBillingRequest()</code> method. The
+<code>REQUEST_NONCE</code> key contains a cryptographically secure nonce (number used once) that you
+must generate. The Google Play application returns this nonce with the
+<code>PURCHASE_STATE_CHANGED</code> broadcast intent so you can verify the integrity of the
+transaction information. The <code>NOTIFY_IDS</code> key contains an array of notification IDs,
+which you received in the <code>IN_APP_NOTIFY</code> broadcast intent.</p>
+
+<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
+<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
+you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
+request identifier for the request.</p>
+
+<p>A <code>GET_PURCHASE_INFORMATION</code> request also triggers two asynchronous responses
+(broadcast intents). First, the Google Play application sends a <code>RESPONSE_CODE</code>
+broadcast intent, which provides status and error information about the request. Next, if the
+request was successful, the Google Play application sends a <code>PURCHASE_STATE_CHANGED</code>
+broadcast intent. This message contains detailed transaction information. The transaction
+information is contained in a signed JSON string (unencrypted). The message includes the signature
+so you can verify the integrity of the signed string.</p>
+
+<h4>Acknowledging transaction information (CONFIRM_NOTIFICATIONS)</h4>
+
+<p>To acknowledge that you received transaction information you send a
+<code>CONFIRM_NOTIFICATIONS</code> request. You must specify four keys in the request {@link
+android.os.Bundle}. The following code sample shows how to set these keys and make the request. In
+the sample, <code>mService</code> is an instance of the <code>MarketBillingService</code>
+interface.</p>
+
+<pre>
+/**
+* Request type is CONFIRM_NOTIFICATIONS
+*/
+  Bundle request = makeRequestBundle("CONFIRM_NOTIFICATIONS");
+  request.putStringArray(NOTIFY_IDS, mNotifyIds);
+  Bundle response = mService.sendBillingRequest(request);
+  // Do something with this response.
+}
+</pre>
+<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
+three keys that are required for all requests: <code>BILLING_REQUEST</code>,
+<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional <code>NOTIFY_IDS</code> key
+is then added to the bundle prior to invoking the <code>sendBillingRequest()</code> method. The
+<code>NOTIFY_IDS</code> key contains an array of notification IDs, which you received in an
+<code>IN_APP_NOTIFY</code> broadcast intent and also used in a <code>GET_PURCHASE_INFORMATION</code>
+request.</p>
+
+<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
+<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
+you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
+request identifier for the request.</p>
+
+<p>A <code>CONFIRM_NOTIFICATIONS</code> request triggers a single asynchronous response&mdash;a
+<code>RESPONSE_CODE</code> broadcast intent. This broadcast intent provides status and error
+information about the request.</p>
+
+<p>You must send a confirmation when you receive transaction information from Google Play. If you
+don't send a confirmation message, Google Play will continue sending
+<code>IN_APP_NOTIFY</code> messages for the transactions you have not confirmed. Also,
+your application must be able to handle <code>IN_APP_NOTIFY</code> messages that contain multiple
+orders.</p>
+
+<p>In addition, as a best practice, you should not send a <code>CONFIRM_NOTIFICATIONS</code> request
+for a purchased item until you have delivered the item to the user. This way, if your application
+crashes or something else prevents your application from delivering the product, your application
+will still receive an <code>IN_APP_NOTIFY</code> broadcast intent from Google Play indicating
+that you need to deliver the product.</p>
+
+<h4>Restoring transaction information (RESTORE_TRANSACTIONS)</h4>
+
+<p>To restore a user's transaction information, you send a <code>RESTORE_TRANSACTIONS</code>
+request. You must specify four keys in the request {@link android.os.Bundle}. The following code
+sample shows how to set these keys and make the request. In the sample, <code>mService</code> is an
+instance of the <code>MarketBillingService</code> interface.</p>
+
+<pre>
+/**
+* Request type is RESTORE_TRANSACTIONS
+*/
+  Bundle request = makeRequestBundle("RESTORE_TRANSACTIONS");
+  request.putLong(REQUEST_NONCE, mNonce);
+  Bundle response = mService.sendBillingRequest(request);
+  // Do something with this response.
+}
+</pre>
+<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
+three keys that are required for all requests: <code>BILLING_REQUEST</code>,
+<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional <code>REQUEST_NONCE</code>
+key is then added to the bundle prior to invoking the <code>sendBillingRequest()</code> method. The
+<code>REQUEST_NONCE</code> key contains a cryptographically secure nonce (number used once) that you
+must generate. The Google Play application returns this nonce with the transactions information
+contained in the <code>PURCHASE_STATE_CHANGED</code> broadcast intent so you can verify the
+integrity of the transaction information.</p>
+
+<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
+<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
+you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
+request identifier for the request.</p>
+
+<p>A <code>RESTORE_TRANSACTIONS</code> request also triggers two asynchronous responses (broadcast
+intents). First, the Google Play application sends a <code>RESPONSE_CODE</code> broadcast intent,
+which provides status and error information about the request. Next, if the request was successful,
+the Google Play application sends a <code>PURCHASE_STATE_CHANGED</code> broadcast intent. This
+message contains the detailed transaction information. The transaction information is contained in a
+signed JSON string (unencrypted). The message includes the signature so you can verify the integrity
+of the signed string.</p>
+
+<p class="note"><strong>Note:</strong> You should use the <code>RESTORE_TRANSACTIONS</code>
+request type only when your application is installed for the first time on a device or when your
+application has been removed from a device and reinstalled.</p>
+
+<h3>Other service tasks</h3>
+
+<p>You may also want your {@link android.app.Service} to receive intent messages from your {@link
+android.content.BroadcastReceiver}. You can use these intent messages to convey the information that
+was sent asynchronously from the Google Play application to your {@link
+android.content.BroadcastReceiver}. To see an example of how you can send and receive these intent
+messages, see the <code>BillingReceiver.java</code> and <code>BillingService.java</code> files in
+the sample application. You can use these samples as a basis for your own implementation. However,
+if you use any of the code from the sample application, be sure you follow the guidelines in <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
+
+<h2 id="billing-broadcast-receiver">Creating a BroadcastReceiver</h2>
+
+<p>The Google Play application uses broadcast intents to send asynchronous billing responses to
+your application. To receive these intent messages, you need to create a {@link
+android.content.BroadcastReceiver} that can handle the following intents:</p>
+
+<ul>
+  <li>com.android.vending.billing.RESPONSE_CODE
+  <p>This broadcast intent contains a Google Play response code, and is sent after you make an
+  in-app billing request. For more information about the response codes that are sent with this
+  response, see <a
+  href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-codes">Google Play Response
+  Codes for In-app Billing</a>.</p>
+  </li>
+  <li>com.android.vending.billing.IN_APP_NOTIFY
+  <p>This response indicates that a purchase has changed state, which means a purchase succeeded,
+  was canceled, or was refunded. For more information about notification messages, see <a
+  href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
+  Broadcast Intents</a></p>
+  </li>
+  <li>com.android.vending.billing.PURCHASE_STATE_CHANGED
+  <p>This broadcast intent contains detailed information about one or more transactions. For more
+  information about purchase state messages, see <a
+  href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
+  Broadcast Intents</a></p>
+  </li>
+</ul>
+
+<p>Each of these broadcast intents provide intent extras, which your {@link
+android.content.BroadcastReceiver} must handle. The intent extras are listed in the following table
+(see table 1).</p>
+
+<p class="table-caption"><strong>Table 1.</strong> Description of broadcast intent extras that are
+sent in response to billing requests.</p>
+
+<table>
+
+<tr>
+<th>Intent</th>
+<th>Extra</th>
+<th>Description</th>
+</tr>
+<tr>
+  <td><code>com.android.vending.billing.RESPONSE_CODE</code></td>
+  <td><code>request_id</code></td>
+  <td>A <code>long</code> representing a request ID. A request ID identifies a specific billing
+  request and is returned by Google Play at the time a request is made.</td>
+</tr>
+<tr>
+  <td><code>com.android.vending.billing.RESPONSE_CODE</code></td>
+  <td><code>response_code</code></td>
+  <td>An <code>int</code> representing the actual Google Play server response code.</td>
+</tr>
+<tr>
+  <td><code>com.android.vending.billing.IN_APP_NOTIFY</code></td>
+  <td><code>notification_id</code></td>
+  <td>A <code>String</code> representing the notification ID for a given purchase state change.
+  Google Play notifies you when there is a purchase state change and the notification includes a
+  unique notification ID. To get the details of the purchase state change, you send the notification
+  ID with the <code>GET_PURCHASE_INFORMATION</code> request.</td>
+</tr>
+<tr>
+  <td><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code></td>
+  <td><code>inapp_signed_data</code></td>
+  <td>A <code>String</code> representing the signed JSON string. The JSON string contains
+  information about the billing transaction, such as order number, amount, and the item that was
+  purchased or refunded.</td>
+</tr>
+<tr>
+  <td><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code></td>
+  <td><code>inapp_signature</code></td>
+  <td>A <code>String</code> representing the signature of the JSON string.</td>
+</tr>
+</table>
+
+<p>The following code sample shows how to handle these broadcast intents and intent extras within a
+{@link android.content.BroadcastReceiver}. The BroadcastReceiver in this case is named
+<code>BillingReceiver</code>, just as it is in the sample application.</p>
+
+<pre>
+public class BillingReceiver extends BroadcastReceiver {
+
+  private static final String TAG = "BillingReceiver";
+
+  // Intent actions that we receive in the BillingReceiver from Google Play.
+  // These are defined by Google Play and cannot be changed.
+  // The sample application defines these in the Consts.java file.
+  public static final String ACTION_NOTIFY = "com.android.vending.billing.IN_APP_NOTIFY";
+  public static final String ACTION_RESPONSE_CODE = "com.android.vending.billing.RESPONSE_CODE";
+  public static final String ACTION_PURCHASE_STATE_CHANGED =
+    "com.android.vending.billing.PURCHASE_STATE_CHANGED";
+
+  // The intent extras that are passed in an intent from Google Play.
+  // These are defined by Google Play and cannot be changed.
+  // The sample application defines these in the Consts.java file.
+  public static final String NOTIFICATION_ID = "notification_id";
+  public static final String INAPP_SIGNED_DATA = "inapp_signed_data";
+  public static final String INAPP_SIGNATURE = "inapp_signature";
+  public static final String INAPP_REQUEST_ID = "request_id";
+  public static final String INAPP_RESPONSE_CODE = "response_code";
+
+
+  &#64;Override
+  public void onReceive(Context context, Intent intent) {
+    String action = intent.getAction();
+    if (ACTION_PURCHASE_STATE_CHANGED.equals(action)) {
+      String signedData = intent.getStringExtra(INAPP_SIGNED_DATA);
+      String signature = intent.getStringExtra(INAPP_SIGNATURE);
+      // Do something with the signedData and the signature.
+    } else if (ACTION_NOTIFY.equals(action)) {
+      String notifyId = intent.getStringExtra(NOTIFICATION_ID);
+      // Do something with the notifyId.
+    } else if (ACTION_RESPONSE_CODE.equals(action)) {
+      long requestId = intent.getLongExtra(INAPP_REQUEST_ID, -1);
+      int responseCodeIndex = intent.getIntExtra(INAPP_RESPONSE_CODE,
+        ResponseCode.RESULT_ERROR.ordinal());
+      // Do something with the requestId and the responseCodeIndex.
+    } else {
+      Log.w(TAG, "unexpected action: " + action);
+    }
+  }
+  // Perform other processing here, such as forwarding intent messages to your local service.
+}
+</pre>
+
+<p>In addition to receiving broadcast intents from the Google Play application, your {@link
+android.content.BroadcastReceiver} must handle the information it received in the broadcast intents.
+Usually, your {@link android.content.BroadcastReceiver} does this by sending the information to a
+local service (discussed in the next section). The <code>BillingReceiver.java</code> file in the
+sample application shows you how to do this. You can use this sample as a basis for your own {@link
+android.content.BroadcastReceiver}. However, if you use any of the code from the sample application,
+be sure you follow the guidelines that are discussed in <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design </a>.</p>
+
+<h2 id="billing-signatures">Verifying Signatures and Nonces</h2>
+
+<p>Google Play's in-app billing service uses two mechanisms to help verify the integrity of the
+transaction information you receive from Google Play: nonces and signatures. A nonce (number used
+once) is a cryptographically secure number that your application generates and sends with every
+<code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code> request. The nonce is
+returned with the <code>PURCHASE_STATE_CHANGED</code> broadcast intent, enabling you to verify that
+any given <code>PURCHASE_STATE_CHANGED</code> response corresponds to an actual request that you
+made. Every <code>PURCHASE_STATE_CHANGED</code> broadcast intent also includes a signed JSON string
+and a signature, which you can use to verify the integrity of the response.</p>
+
+<p>Your application must provide a way to generate, manage, and verify nonces. The following sample
+code shows some simple methods you can use to do this.</p>
+
+<pre>
+  private static final SecureRandom RANDOM = new SecureRandom();
+  private static HashSet&lt;Long&gt; sKnownNonces = new HashSet&lt;Long&gt;();
+
+  public static long generateNonce() {
+    long nonce = RANDOM.nextLong();
+    sKnownNonces.add(nonce);
+    return nonce;
+  }
+
+  public static void removeNonce(long nonce) {
+    sKnownNonces.remove(nonce);
+  }
+
+  public static boolean isNonceKnown(long nonce) {
+    return sKnownNonces.contains(nonce);
+  }
+</pre>
+
+<p>Your application must also provide a way to verify the signatures that accompany every
+<code>PURCHASE_STATE_CHANGED</code> broadcast intent. The <code>Security.java</code> file in the
+sample application shows you how to do this. If you use this file as a basis for your own security
+implementation, be sure to follow the guidelines in <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a> and
+obfuscate your code.</p>
+
+<p>You will need to use your Google Play public key to perform the signature verification. The
+following procedure shows you how to retrieve Base64-encoded public key from the Google Play
+publisher site.</p>
+
+<ol>
+  <li>Log in to your <a href="http://play.google.com/apps/publish">publisher account</a>.</li>
+  <li>On the upper left part of the page, under your name, click <strong>Edit profile</strong>.</li>
+  <li>On the Edit Profile page, scroll down to the Licensing &amp; In-app Billing panel (see figure
+  2).</li>
+  <li>Copy your public key.</li>
+</ol>
+
+<p class="caution"><strong>Important</strong>: To keep your public key safe from malicious users and
+hackers, do not embed your public key as an entire literal string. Instead, construct the string at
+runtime from pieces or use bit manipulation (for example, XOR with some other string) to hide the
+actual key. The key itself is not secret information, but you do not want to make it easy for a
+hacker or malicious user to replace the public key with another key.</p>
+
+<img src="{@docRoot}images/billing_public_key.png" height="510" id="figure2" />
+<p class="img-caption">
+  <strong>Figure 2.</strong> The Licensing and In-app Billing panel of your account's Edit Profile
+  page lets you see your public key.
+</p>
+
+<h2 id="billing-implement">Modifying Your Application Code</h2>
+
+<p>After you finish adding in-app billing components to your project, you are ready to modify your
+application's code. For a typical implementation, like the one that is demonstrated in the sample
+application, this means you need to write code to do the following: </p>
+
+<ul>
+  <li>Create a storage mechanism for storing users' purchase information.</li>
+  <li>Create a user interface that lets users select items for purchase.</li>
+</ul>
+
+<p>The sample code in <code>Dungeons.java</code> shows you how to do both of these tasks.</p>
+
+<h3>Creating a storage mechanism for storing purchase information</h3>
+
+<p>You must set up a database or some other mechanism for storing users' purchase information. The
+sample application provides an example database (PurchaseDatabase.java); however, the example
+database has been simplified for clarity and does not exhibit the security best practices that we
+recommend. If you have a remote server, we recommend that you store purchase information on your
+server instead of in a local database on a device. For more information about security best
+practices, see <a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+Design</a>.</p>
+
+<p class="note"><strong>Note</strong>: If you store any purchase information on a device, be sure to
+encrypt the data and use a device-specific encryption key. Also, if the purchase type for any of
+your items is "unmanaged," we recommend that you back up the purchase information for these items to
+a remote server or use Android's <a href="{@docRoot}guide/topics/data/backup.html">data
+backup</a> framework to back up the purchase information. Backing up purchase information for
+unmanaged items is important because unmanaged items cannot be restored by using the
+<code>RESTORE_TRANSACTIONS</code> request type.</p>
+
+<h3>Creating a user interface for selecting items</h3>
+
+<p>You must provide users with a means for selecting items that they want to purchase. Google
+Play provides the checkout user interface (which is where the user provides a form of payment and
+approves the purchase), but your application must provide a control (widget) that invokes the
+<code>sendBillingRequest()</code> method when a user selects an item for purchase.</p>
+
+<p>You can render the control and trigger the <code>sendBillingRequest()</code> method any way you
+want. The sample application uses a spinner widget and a button to present items to a user and
+trigger a billing request (see <code>Dungeons.java</code>). The user interface also shows a list of
+recently purchased items.</p>
+
diff --git a/docs/html/guide/google/play/billing/billing_overview.jd b/docs/html/guide/google/play/billing/billing_overview.jd
new file mode 100755
index 0000000..280b3cf
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_overview.jd
@@ -0,0 +1,507 @@
+page.title=In-app Billing Overview
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#billing-types">Product and Purchase Types</a></li>
+    <li><a href="#billing-arch">In-app Billing Architecture</a></li>
+    <li><a href="#billing-msgs">In-app Billing Messages</a></li>
+    <ol>
+      <li><a href="#billing-request">Request messages</a></li>
+      <li><a href="#billing-response">Broadcast intents</a></li>
+      <li><a href="#billing-message-sequence">Messaging sequence</a></li>
+      <li><a href="#billing-action-notify">Handling IN_APP_NOTIFY messages</a></li>
+    </ol>
+    <li><a href="#billing-security">Security Controls</a></li>
+    <li><a href="#billing-limitations">Requirements and Limitations</a></li>
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
+    Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+</div>
+</div>
+
+<p>In-app Billing is a Google Play service that provides checkout processing for
+in-app purchases. To use the service, your application sends a billing request for a specific in-app
+product. The service then handles all of the checkout details for the transaction, including
+requesting and validating the form of payment and processing the financial transaction. When the
+checkout process is complete, the service sends your application the purchase details, such as the
+order number, the order date and time, and the price paid. At no point does your application have to
+handle any financial transactions; that role is provided by Google Play's in-app billing
+service.</p>
+
+<h2 id="billing-types">Product and Purchase Types</h2>
+
+<p>In-app Billing supports different product types and purchase types to give you flexibility in how you monetize your app. In all cases, you define your products using the Google Play Developer Console, including product type, purchase type, SKU, price, description, and so on. For more information, see <a href="billing_admin.html">Administering In-app Billing</a>.</p>
+
+<h3 id="producttypes">Product Types</h3>
+
+<p>With In-app Billing, you can sell two types of products &mdash; <em>in-app products</em> and <em>subscriptions</em>. The billing characteristics of the two types are very different, but the In-app Billing API lets you handle the two product types in your app using the same communication model, data structures, and user interactions, as described later in this document.</p>
+
+<ul>
+<li><em>In-app products</em> &mdash; Items that a user would purchase one-at-a-time. For example, typical in-app products would let users purchase digital content, unlock functionality in an app, pay for one-time charges, or add almost anything to the application experience. Unlike with priced applications, once the user has purchased an in-app product there is no refund window. Users desiring refunds must contact the developer directly.
+
+<p>In-app products can be sold using either the "managed per user account" or "unmanaged" purchase type. In-app products are always explicitly associated with one and only one app. That is, one app cannot purchase an in-app product published for another app, even if they are from the same developer. In-app products are supported in all versions of In-app Billing.</p></li>
+
+<li><em>Subscriptions</em> &mdash; Items that are sold with a developer-specified, recurring billing interval. When a user purchases a subscription, Google Play and its payment processor automatically bill the user's account at the specified interval and price, charging the amount to the original payment method. Once the user purchases a subscription, Google Play continues billing the account indefinitely, without requiring approval or action from the user. The user can cancel the subscription at any time. 
+
+<p>Subscriptions can only be sold using the "managed per user account" purchase type. As with in-app products, once the user has purchased an in-app product there is no refund window. Users desiring refunds must contact the developer directly. For more information about subscriptions and how to sell them in your apps, see the <a href="billing-subscriptions.html">Subscriptions</a> document.</p></li>
+</ul>
+
+<h3 id="purchasetypes">Purchase Types</h3>
+
+<p>In-app Billing offers two purchase types that you can use when selling in-app products, "managed per user account" and "unmanaged". The purchase type controls how Google Play handles and tracks purchases for the products. </p>
+
+<ul>
+<li><em>Managed per user account</em> &mdash; Items that can be purchased only once per user account on Google Play. When a user purchases an item that uses the "managed per user account" purchase type, Google Play permanently stores the transaction information for each item on a per-user basis. This enables you to later query Google Play to restore the state of the items a specific user has purchased. If a user attempts to purchase a managed item that has already been purchased, Google Play prevents the user from purchasing the item again and displays an "Item already purchased" error.
+
+<p>The "managed per user account" purchase type is useful if you are selling items such as game levels or application features. These items are not transient and usually need to be restored whenever a user reinstalls your application, wipes the data on their device, or installs your application on a new device.</p>
+
+<li><em>Unmanaged</em> &mdash; Items that do not have their transaction information stored on Google Play. This means that you cannot later query Google Play to retrieve transaction information for those items. For "unmanaged" purchases, you are responsible for managing the transaction information. Also, Google Play does not attempt to prevent the user from purchasing an item multiple times if it uses the "unmanaged" purchase type. It's up to you to control how many times an unmanaged item can be purchased.</p>
+
+<p>The "unmanaged" purchase type is useful if you are selling consumable items, such as fuel or magic spells. These items are consumed within your application and are usually purchased multiple times.</p></li>
+</ul>
+
+<h2 id="billing-arch">In-app Billing Architecture</h2>
+
+<p>Your app accesses the In-app Billing service using an API that is exposed by
+the Google Play app installed on the device. The Google Play app then uses an
+asynchronous message loop to convey billing requests and responses between your
+application and the Google Play server. In practice, your application never
+directly communicates with the Google Play server (see figure 1). Instead, your
+application sends billing requests to the Google Play application over
+interprocess communication (IPC) and receives purchase responses from the Google
+Play application in the form of asynchronous broadcast intents. Your application
+does not manage any network connections between itself and the Google Play
+server or use any special APIs from the Android platform.</p>
+
+<div class="figure" style="width:440px">
+<img src="{@docRoot}images/billing_arch.png" alt="" height="582" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Your application sends and receives billing messages through the
+  Google Play application, which handles all communication with the Google Play server.</p>
+</div>
+
+<p>Some in-app billing implementations may also use a private remote server to deliver content or
+validate transactions, but a remote server is not required to implement in-app billing. A remote
+server can be useful if you are selling digital content that needs to be delivered to a user's
+device, such as media files or photos. You might also use a remote server to store users'
+transaction history or perform various in-app billing security tasks, such as signature
+verification. Although you can handle all security-related tasks in your application, performing
+those tasks on a remote server is recommended because it helps make your application less vulnerable
+to security attacks.</p>
+
+<p>A typical in-app billing implementation relies on three components:</p>
+<ul>
+  <li>A {@link android.app.Service} (named <code>BillingService</code> in the sample application),
+  which processes purchase messages from the application and sends billing requests to the Google
+  Play in-app billing service.</li>
+  <li>A {@link android.content.BroadcastReceiver} (named <code>BillingReceiver</code> in the sample
+  application), which receives all asynchronous billing responses from the Google Play
+  application.</li>
+  <li>A security component (named <code>Security</code> in the sample application), which performs
+  security-related tasks, such as signature verification and nonce generation. For more information
+  about in-app billing security, see <a href="#billing-security">Security controls</a> later in this
+  document.</li>
+</ul>
+
+<p>You may also want to incorporate two other components to support in-app billing:</p>
+<ul>
+  <li>A response {@link android.os.Handler} (named <code>ResponseHandler</code> in the sample
+  application), which provides application-specific processing of purchase notifications, errors,
+  and other status messages.</li>
+  <li>An observer (named <code>PurchaseObserver</code> in the sample application), which is
+  responsible for sending callbacks to your application so you can update your user interface with
+  purchase information and status.</li>
+</ul>
+
+<p>In addition to these components, your application must provide a way to store information about
+users' purchases and some sort of user interface that lets users select items to purchase. You do
+not need to provide a checkout user interface. When a user initiates an in-app purchase, the Google
+Play application presents the checkout user interface to your user. When the user completes the
+checkout process, your application resumes.</p>
+
+<h2 id="billing-msgs">In-app Billing Messages</h2>
+
+<p>When the user initiates a purchase, your application sends billing messages to Google Play's
+in-app billing service (named <code>MarketBillingService</code>) using simple IPC method calls. The
+Google Play application responds to all billing requests synchronously, providing your
+application with status notifications and other information. The Google Play application also
+responds to some billing requests asynchronously, providing your application with error messages and
+detailed transaction information. The following section describes the basic request-response
+messaging that takes place between your application and the Google Play application.</p>
+
+<h3 id="billing-request">In-app billing requests</h3>
+
+<p>Your application sends in-app billing requests by invoking a single IPC method
+(<code>sendBillingRequest()</code>), which is exposed by the <code>MarketBillingService</code>
+interface. This interface is defined in an <a
+href="{@docRoot}tools/aidl.html">Android Interface Definition Language</a> file
+(<code>IMarketBillingService.aidl</code>). You can <a
+href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">download</a> this AIDL
+file with the in-app billing sample application.</p>
+
+<p>The <code>sendBillingRequest()</code> method has a single {@link android.os.Bundle} parameter.
+The Bundle that you deliver must include several key-value pairs that specify various parameters for
+the request, such as the type of billing request you are making, the item that is being purchased and
+its type, and the application that is making the request. For more information about the Bundle keys
+that are sent with a request, see <a
+href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-interface">In-app Billing
+Service Interface</a>.
+
+<p>One of the most important keys that every request Bundle must have is the
+<code>BILLING_REQUEST</code> key. This key lets you specify the type of billing request you are
+making. Google Play's in-app billing service supports the following five types of billing
+requests:</p>
+
+<ul>
+  <li><code>CHECK_BILLING_SUPPORTED</code>
+    <p>This request verifies that the Google Play application supports in-app billing. You
+    usually send this request when your application first starts up. This request is useful if you
+    want to enable or disable certain UI features that are relevant only to in-app billing.</p>
+  </li>
+  <li><code>REQUEST_PURCHASE</code>
+    <p>This request sends a purchase message to the Google Play application and is the foundation
+    of in-app billing. You send this request when a user indicates that he or she wants to purchase
+    an item in your application. Google Play then handles the financial transaction by displaying
+    the checkout user interface.</p>
+  </li>
+  <li><code>GET_PURCHASE_INFORMATION</code>
+    <p>This request retrieves the details of a purchase state change. A purchase changes state when
+    a requested purchase is billed successfully or when a user cancels a transaction during
+    checkout. It can also occur when a previous purchase is refunded. Google Play notifies your
+    application when a purchase changes state, so you only need to send this request when there is
+    transaction information to retrieve.</p>
+  </li>
+  <li><code>CONFIRM_NOTIFICATIONS</code>
+    <p>This request acknowledges that your application received the details of a purchase state
+    change. Google Play sends purchase state change notifications to your application until you
+    confirm that you received them.</p>
+  </li>
+  <li><code>RESTORE_TRANSACTIONS</code>
+    <p>This request retrieves a user's transaction status for <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">managed
+    purchases</a> and <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">subscriptions</a>.
+    You should send this request only when you need to retrieve a user's transaction
+    status, which is usually only when your application is reinstalled or installed for the first
+    time on a device.</p>
+  </li>
+</ul>
+
+<h3 id="billing-response">In-app Billing Responses</h3>
+
+<p>The Google Play application responds to in-app billing requests with both synchronous and
+asynchronous responses. The synchronous response is a {@link android.os.Bundle} with the following
+three keys:</p>
+
+<ul>
+  <li><code>RESPONSE_CODE</code>
+    <p>This key provides status information and error information about a request.</p>
+  </li>
+  <li><code>PURCHASE_INTENT</code>
+    <p>This key provides a {@link android.app.PendingIntent}, which you use to launch the checkout
+    activity.</p>
+  </li>
+  <li><code>REQUEST_ID</code>
+    <p>This key provides you with a request identifier, which you can use to match asynchronous
+    responses with requests.</p>
+  </li>
+</ul>
+<p>Some of these keys are not relevant to every request. For more information, see <a
+href="#billing-message-sequence">Messaging sequence</a> later in this document.</p>
+
+<p>The asynchronous response messages are sent in the form of individual broadcast intents and
+include the following:</p>
+
+<ul>
+    <li><code>com.android.vending.billing.RESPONSE_CODE</code>
+    <p>This response contains a Google Play server response code, and is sent after you make an
+    in-app billing request. A server response code can indicate that a billing request was
+    successfully sent to Google Play or it can indicate that some error occurred during a billing
+    request. This response is <em>not</em> used to report any purchase state changes (such as refund
+    or purchase information). For more information about the response codes that are sent with this
+    response, see <a
+    href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-codes">Server Response Codes
+    for In-app Billing</a>.</p>
+  </li>
+  <li><code>com.android.vending.billing.IN_APP_NOTIFY</code>
+    <p>This response indicates that a purchase has changed state, which means a purchase succeeded,
+    was canceled, or was refunded. This response contains one or more notification IDs. Each
+    notification ID corresponds to a specific server-side message, and each messages contains
+    information about one or more transactions. After your application receives an
+    <code>IN_APP_NOTIFY</code> broadcast intent, you send a <code>GET_PURCHASE_INFORMATION</code>
+    request with the notification IDs to retrieve message details.</p>
+  </li>
+  <li><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code>
+    <p>This response contains detailed information about one or more transactions. The transaction
+    information is contained in a JSON string. The JSON string is signed and the signature is sent
+    to your application along with the JSON string (unencrypted). To help ensure the security of
+    your in-app billing messages, your application can verify the signature of this JSON string.</p>
+  </li>
+</ul>
+
+<p>The JSON string that is returned with the <code>PURCHASE_STATE_CHANGED</code> intent provides
+your application with the details of one or more billing transactions. An example of this JSON
+string for a subscription item is shown below:</p>
+<pre class="no-pretty-print" style="color:black">{ "nonce" : 1836535032137741465,
+  "orders" :
+    [{ "notificationId" : "android.test.purchased",
+       "orderId" : "transactionId.android.test.purchased",
+       "packageName" : "com.example.dungeons",
+       "productId" : "android.test.purchased",
+       "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
+       "purchaseTime" : 1290114783411,
+       "purchaseState" : 0,
+       "purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
+}
+</pre>
+
+<p>For more information about the fields in this JSON string, see <a
+href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-intents">In-app Billing
+Broadcast Intents</a>.</p>
+
+<h3 id="billing-message-sequence">Messaging sequence</h3>
+
+<p>The messaging sequence for a typical purchase request is shown in figure 2. Request types for
+each <code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents
+are shown in <em>italic</em>. For clarity, figure 2 does not show the <code>RESPONSE_CODE</code>
+broadcast intents that are sent for every request.</p>
+
+<p>The basic message sequence for an in-app purchase request is as follows:</p>
+
+<ol>
+  <li>Your application sends a purchase request (<code>REQUEST_PURCHASE</code> type), specifying a
+  product ID and other parameters.</li>
+  <li>The Google Play application sends your application a Bundle with the following keys:
+  <code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and <code>REQUEST_ID</code>. The
+  <code>PURCHASE_INTENT</code> key provides a {@link android.app.PendingIntent}, which your
+  application uses to start the checkout UI for the given product ID.</li>
+  <li>Your application launches the pending intent, which launches the checkout UI.
+    <p class="note"><strong>Note:</strong> You must launch the pending intent from an activity
+    context and not an application context.</p>
+  </li>
+  <li>When the checkout flow finishes (that is, the user successfully purchases the item or cancels
+  the purchase), Google Play sends your application a notification message (an
+  <code>IN_APP_NOTIFY</code> broadcast intent). The notification message includes a notification ID,
+  which references the transaction.</li>
+  <li>Your application requests the transaction information by sending a
+  <code>GET_PURCHASE_STATE_CHANGED</code> request, specifying the notification ID for the
+  transaction.</li>
+  <li>The Google Play application sends a Bundle with a <code>RESPONSE_CODE</code> key and a 
+  <code>REQUEST_ID</code> key.
+  <li>Google Play sends the transaction information to your application in a
+  <code>PURCHASE_STATE_CHANGED</code> broadcast intent.</li>
+  <li>Your application confirms that you received the transaction information for the given
+  notification ID by sending a confirmation message (<code>CONFIRM_NOTIFICATIONS</code> type),
+  specifying the notification ID for which you received transaction information.</li>
+  <li>The Google Play application sends your application a Bundle with a
+  <code>RESPONSE_CODE</code> key and a <code>REQUEST_ID</code> key.</li>
+</ol>
+
+<img src="{@docRoot}images/billing_request_purchase.png" height="231" id="figure2" />
+<p class="img-caption">
+  <strong>Figure 2.</strong> Message sequence for a purchase request.
+</p>
+
+<p>Keep in mind, you must send a confirmation when you receive transaction information from Google
+Play (step 8 in figure 2). If you don't send a confirmation message, Google Play will
+continue sending <code>IN_APP_NOTIFY</code> messages for the transactions you have not
+confirmed. As a best practice, you should not send a <code>CONFIRM_NOTIFICATIONS</code> request for
+a purchased item until you have delivered the item to the user. This way, if your application
+crashes or something else prevents your application from delivering the product, your application
+will still receive an <code>IN_APP_NOTIFY</code> broadcast intent from Google Play indicating
+that you need to deliver the product. Also, as a best practice, your application must be able to
+handle <code>IN_APP_NOTIFY</code> messages that contain multiple orders.</p>
+
+<p>The messaging sequence for a restore transaction request is shown in figure 3. Request types for
+each <code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents
+are shown in <em>italic</em>. For clarity, figure 3 does not show the <code>RESPONSE_CODE</code>
+broadcast intents that are sent for every request.</p>
+
+<div class="figure" style="width:490px">
+<img src="{@docRoot}images/billing_restore_transactions.png" alt="" height="168" />
+<p class="img-caption">
+  <strong>Figure 3.</strong> Message sequence for a restore transactions request.
+</p>
+</div>
+
+<p>The request triggers three responses. The first is a {@link android.os.Bundle} with a
+<code>RESPONSE_CODE</code> key and a <code>REQUEST_ID</code> key. Next, the Google Play
+application sends a <code>RESPONSE_CODE</code> broadcast intent, which provides status information
+or error information about the request. As always, the <code>RESPONSE_CODE</code> message references
+a specific request ID, so you can determine which request a <code>RESPONSE_CODE</code> message
+pertains to.</p>
+
+<p>The <code>RESTORE_TRANSACTIONS</code> request type also triggers a
+<code>PURCHASE_STATE_CHANGED</code> broadcast intent, which contains the same type of transaction
+information that is sent during a purchase request, although you do not need to respond to this
+intent with a <code>CONFIRM_NOTIFICATIONS</code> message.</p>
+
+<p class="note"><strong>Note:</strong> You should use the <code>RESTORE_TRANSACTIONS</code> request
+type only when your application is installed for the first time on a device or when your
+application has been removed from a device and reinstalled.</p>
+
+<p>The messaging sequence for checking whether in-app billing is supported is shown in figure 4. The
+request type for the <code>sendBillingRequest()</code> method is shown in <strong>bold</strong>.</p>
+
+<div class="figure" style="width:454px">
+<img src="{@docRoot}images/billing_check_supported.png" alt="" height="168" />
+<p class="img-caption">
+  <strong>Figure 4.</strong> Message sequence for checking whether in-app billing is supported.
+</p>
+</div>
+
+<p>The synchronous response for a <code>CHECK_BILLING_SUPPORTED</code> request provides a Bundle
+with a server response code.  A <code>RESULT_OK</code> response code indicates that in-app billing
+is supported; a <code>RESULT_BILLING_UNAVAILABLE</code> response code indicates that in-app billing
+is unavailable because the API version you specified is unrecognized or the user is not eligible to
+make in-app purchases (for example, the user resides in a country that does not allow in-app
+billing). A <code>SERVER_ERROR</code> can also be returned, indicating that there was a problem with
+the Google Play server.</p>
+
+<h3 id="billing-action-notify">Handling IN_APP_NOTIFY messages</h3>
+
+<p>Usually, your application receives an <code>IN_APP_NOTIFY</code> broadcast intent from Google
+Play in response to a <code>REQUEST_PURCHASE</code> message (see figure 2). The
+<code>IN_APP_NOTIFY</code> broadcast intent informs your application that the state of a requested
+purchase has changed. To retrieve the details of that purchase, your application sends a
+<code>GET_PURCHASE_INFORMATION</code> request. Google Play responds with a
+<code>PURCHASE_STATE_CHANGED</code> broadcast intent, which contains the details of the purchase
+state change. Your application then sends a <code>CONFIRM_NOTIFICATIONS</code> message, informing
+Google Play that you have received the purchase state change information.</p>
+
+<p>In some special cases, you may receive multiple <code>IN_APP_NOTIFY</code> messages even though
+you have confirmed receipt of the purchase information, or you may receive
+<code>IN_APP_NOTIFY</code> messages for a purchase change even though you never initiated the
+purchase. Your application must handle both of these special cases.</p>
+
+<h4>Handling multiple IN_APP_NOTIFY messages</h4>
+
+<p>When Google Play receives a <code>CONFIRM_NOTIFICATIONS</code> message for a given
+<code>PURCHASE_STATE_CHANGED</code> message, it usually stops sending <code>IN_APP_NOTIFY</code>
+intents for that <code>PURCHASE_STATE_CHANGED</code> message. Sometimes, however, Google
+Play may send repeated <code>IN_APP_NOTIFY</code> intents for a
+<code>PURCHASE_STATE_CHANGED</code> message even though your application has sent a
+<code>CONFIRM_NOTIFICATIONS</code> message. This can occur if a device loses network connectivity
+while you are sending the <code>CONFIRM_NOTIFICATIONS</code> message. In this case, Google Play
+might not receive your <code>CONFIRM_NOTIFICATIONS</code> message and it could send multiple
+<code>IN_APP_NOTIFY</code> messages until it receives acknowledgement that you received the
+transaction message. Therefore, your application must be able to recognize that the subsequent
+<code>IN_APP_NOTIFY</code> messages are for a previously processed transaction. You can do this by
+checking the <code>orderID</code> that's contained in the JSON string because every transaction has
+a unique <code>orderId</code>.</p>
+
+<h4>Handling refunds and other unsolicited IN_APP_NOTIFY messages</h4>
+
+<p>There are two cases where your application may receive <code>IN_APP_NOTIFY</code> broadcast
+intents even though your application has not sent a <code>REQUEST_PURCHASE</code> message. Figure 5
+shows the messaging sequence for both of these cases. Request types for each
+<code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents are
+shown in <em>italic</em>. For clarity, figure 5 does not show the <code>RESPONSE_CODE</code>
+broadcast intents that are sent for every request.</p>
+
+<div class="figure" style="width:481px">
+<img src="{@docRoot}images/billing_refund.png" alt="" height="189" />
+<p class="img-caption">
+  <strong>Figure 5.</strong> Message sequence for refunds and other unsolicited
+IN_APP_NOTIFY messages.</p>
+</div>
+
+<p>In the first case, your application may receive an <code>IN_APP_NOTIFY</code> broadcast intent
+when a user has your application installed on two (or more) devices and the user makes an in-app
+purchase from one of the devices. In this case, Google Play sends an <code>IN_APP_NOTIFY</code>
+message to the second device, informing the application that there is a purchase state change. Your
+application can handle this message the same way it handles the response from an
+application-initiated <code>REQUEST_PURCHASE</code> message, so that ultimately your application
+receives a <code>PURCHASE_STATE_CHANGED</code> broadcast intent message that includes information
+about the item that has been purchased. This applies only to items that have their <a
+href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">purchase type</a> set
+to "managed per user account."</p>
+
+<p>In the second case, your application can receive an <code>IN_APP_NOTIFY</code> broadcast intent
+when Google Play receives a refund notification from Google Wallet. In this case, Google
+Play sends an <code>IN_APP_NOTIFY</code> message to your application. Your application can handle
+this message the same way it handles responses from an application-initiated
+<code>REQUEST_PURCHASE</code> message so that ultimately your application receives a
+<code>PURCHASE_STATE_CHANGED</code> message that includes information about the item that has been
+refunded. The refund information is included in the JSON string that accompanies the
+<code>PURCHASE_STATE_CHANGED</code> broadcast intent. Also, the <code>purchaseState</code> field in
+the JSON string is set to 2.</p>
+
+<p class="caution"><strong>Important:</strong> You cannot use the Google Wallet API to
+issue refunds or cancel in-app billing transactions. You must do this manually through your
+Google Wallet merchant account. However, you can use the Google Wallet API to retrieve order
+information.</p>
+
+<h2 id="billing-security">Security Controls</h2>
+
+<p>To help ensure the integrity of the transaction information that is sent to your application,
+Google Play signs the JSON string that is contained in the <code>PURCHASE_STATE_CHANGED</code>
+broadcast intent. Google Play uses the private key that is associated with your publisher account
+to create this signature. The publisher site generates an RSA key pair for each publisher account.
+You can find the public key portion of this key pair on your account's profile page. It is the same
+public key that is used with Google Play licensing.</p>
+
+<p>When Google Play signs a billing response, it includes the signed JSON string (unencrypted)
+and the signature. When your application receives this signed response you can use the public key
+portion of your RSA key pair to verify the signature. By performing signature verification you can
+help detect responses that have been tampered with or that have been spoofed. You can perform this
+signature verification step in your application; however, if your application connects to a secure
+remote server then we recommend that you perform the signature verification on that server.</p>
+
+<p>In-app billing also uses nonces (a random number used once) to help verify the integrity of the
+purchase information that's returned from Google Play. Your application must generate a nonce and
+send it with a <code>GET_PURCHASE_INFORMATION</code> request and a <code>RESTORE_TRANSACTIONS</code>
+request. When Google Play receives the request, it adds the nonce to the JSON string that
+contains the transaction information. The JSON string is then signed and returned to your
+application. When your application receives the JSON string, you need to verify the nonce as well as
+the signature of the JSON string.</p>
+
+<p>For more information about best practices for security and design, see <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
+
+<h2 id="billing-limitations">In-app Billing Requirements and Limitations</h2>
+
+<p>Before you get started with in-app billing, be sure to review the following requirements and
+limitations.</p>
+
+<ul>
+  <li>In-app billing can be implemented only in applications that you publish through Google
+  Play.</li>
+  <li>You must have a Google Wallet Merchant account to use Google Play In-app Billing.</li>
+  <li>In-app billing requires version 2.3.4 (or higher) of the Android Market application.
+  To support subscriptions, version 3.5 or higher of the Google Play app is required. On devices
+  running Android 3.0, version 5.0.12 (or higher) of the MyApps application is required.</li>
+  <li>An application can use in-app billing only if the device is running Android 1.6 (API level 4)
+  or higher.</li>
+  <li>You can use in-app billing to sell only digital content. You cannot use in-app billing to sell
+  physical goods, personal services, or anything that requires physical delivery.</li>
+  <li>Google Play does not provide any form of content delivery. You are responsible for
+  delivering the digital content that you sell in your applications.</li>
+  <li>You cannot implement in-app billing on a device that never connects to the network. To
+  complete in-app purchase requests, a device must be able to access the Google Play server over
+  the network. </li>
+</ul>
+
+<p>For more information about in-app billing requirements, see <a
+href="https://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153481">In-App
+Billing Availability and Policies</a>.</p>
diff --git a/docs/html/guide/google/play/billing/billing_reference.jd b/docs/html/guide/google/play/billing/billing_reference.jd
new file mode 100755
index 0000000..f8c6967
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_reference.jd
@@ -0,0 +1,491 @@
+page.title=In-app Billing Reference
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#billing-codes">Server Response Codes for In-app Billing</a></li>
+    <li><a href="#billing-interface">In-app Billing Service Interface</a></li>
+    <li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
+    <li><a href="#other-intents">Other Broadcast Intents</a></li>
+    <li><a href="#billing-versions">In-app Billing API Versions</a></li>
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
+    Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+  </ol>
+</div>
+</div>
+
+<p>The following document provides technical reference information for the following:</p>
+
+<ul>
+  <li><a href="#billing-codes">Google Play Server Response Codes for In-app Billing</a></li>
+  <li><a href="#billing-interface">In-app Billing Interface Parameters</a></li>
+  <li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
+  <li><a href="#other-intents">Other Intents</a></li>
+  <li><a href="#billing-versions">In-app Billing API Versions</a></li>
+</ul>
+
+<h2 id="billing-codes">Server Response Codes for In-app Billing</h2>
+
+<p>The following table lists all of the server response codes that are sent from Google Play to
+your application. Google Play sends these response codes asynchronously as
+<code>response_code</code> extras in the <code>com.android.vending.billing.RESPONSE_CODE</code>
+broadcast intent. Your application must handle all of these response codes.</p>
+
+<p class="table-caption" id="response-codes-table"><strong>Table 1.</strong> Summary of response
+codes returned by Google Play.</p>
+
+<table>
+
+<tr>
+<th>Response Code</th>
+<th>Value</th>
+<th>Description</th>
+</tr>
+<tr>
+  <td><code>RESULT_OK</code></td>
+  <td>0</td>
+  <td>Indicates that the request was sent to the server successfully. When this code is returned in
+  response to a <code>CHECK_BILLING_SUPPORTED</code> request, indicates that billing is
+  supported.</td>
+</tr>
+<tr>
+  <td><code>RESULT_USER_CANCELED</code></td>
+  <td>1</td>
+  <td>Indicates that the user pressed the back button on the checkout page instead of buying the
+  item.</td>
+</tr>
+<tr>
+  <td><code>RESULT_SERVICE_UNAVAILABLE</code></td>
+  <td>2</td>
+  <td>Indicates that the network connection is down.</td>
+</tr>
+<tr>
+  <td><code>RESULT_BILLING_UNAVAILABLE</code></td>
+  <td>3</td>
+  <td>Indicates that in-app billing is not available because the <code>API_VERSION</code> that you
+  specified is not recognized by the Google Play application or the user is ineligible for in-app
+  billing (for example, the user resides in a country that prohibits in-app purchases).</td>
+</tr>
+<tr>
+  <td><code>RESULT_ITEM_UNAVAILABLE</code></td>
+  <td>4</td>
+  <td>Indicates that Google Play cannot find the requested item in the application's product
+  list. This can happen if the product ID is misspelled in your <code>REQUEST_PURCHASE</code>
+  request or if an item is unpublished in the application's product list.</td>
+</tr>
+<tr>
+  <td><code>RESULT_DEVELOPER_ERROR</code></td>
+  <td>5</td>
+  <td>Indicates that an application is trying to make an in-app billing request but the application
+  has not declared the com.android.vending.BILLING permission in its manifest. Can also indicate
+  that an application is not properly signed, or that you sent a malformed request, such as a
+  request with missing Bundle keys or a request that uses an unrecognized request type.</td>
+</tr>
+<tr>
+  <td><code>RESULT_ERROR</code></td>
+  <td>6</td>
+  <td>Indicates an unexpected server error. For example, this error is triggered if you try to
+purchase an item from yourself, which is not allowed by Google Wallet.</td>
+</tr>
+</table>
+
+<h2 id="billing-interface">In-app Billing Service Interface</h2>
+
+<p>The following section describes the interface for Google Play's in-app billing service. The
+interface is defined in the <code>IMarketBillingService.aidl</code> file, which is included with the
+in-app billing <a
+href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample
+application</a>.</p>
+<p>The interface consists of a single request method <code>sendBillingRequest()</code>. This method
+takes a single {@link android.os.Bundle} parameter. The Bundle parameter includes several key-value
+pairs, which are summarized in table 2.</p>
+
+<p class="table-caption"><strong>Table 2.</strong> Description of Bundle keys passed in a
+<code>sendBillingRequest()</code> request.</p>
+
+<table>
+
+<tr>
+<th>Key</th>
+<th>Type</th>
+<th>Possible Values</th>
+<th>Required?</th>
+<th>Description</th>
+</tr>
+<tr>
+  <td><code>BILLING_REQUEST</code></td>
+  <td><code>String</code></td>
+  <td><code>CHECK_BILLING_SUPPORTED</code>, <code>REQUEST_PURCHASE</code>,
+  <code>GET_PURCHASE_INFORMATION</code>, <code>CONFIRM_NOTIFICATIONS</code>, or
+  <code>RESTORE_TRANSACTIONS</code></td>
+  <td>Yes</td>
+  <td>The type of billing request you are making with the <code>sendBillingRequest()</code> request.
+  The possible values are discussed more below this table.</td>
+</tr>
+<tr>
+  <td><code>API_VERSION</code></td>
+  <td><code>int</code></td>
+  <td>  <ul>
+  <li><code>"2"</code> [<a href="#version_2">details</a>]</li>
+  <li><code>"1"</code> [<a href="#version_1">details</a>]</li>
+  </ul></td>
+  <td>Yes</td>
+  <td>The version of Google Play's in-app billing service you want to use. The current version is
+  2.</td>
+</tr>
+<tr>
+  <td><code>PACKAGE_NAME</code></td>
+  <td><code>String</code></td>
+  <td>A valid package name.</td>
+  <td>Yes</td>
+  <td>The name of the application that is making the request.</td>
+</tr>
+<tr>
+  <td><code>ITEM_ID</code></td>
+  <td><code>String</code></td>
+  <td>Any valid product identifier.</td>
+  <td>Required for <code>REQUEST_PURCHASE</code> requests.</td>
+  <td>The product ID of the item you are making a billing request for. Every in-app item that you
+  sell using Google Play's in-app billing service must have a unique product ID, which you
+  specify on the Google Play publisher site.</td>
+</tr>
+<tr>
+  <td><code>NONCE</code></td>
+  <td><code>long</code></td>
+  <td>Any valid <code>long</code> value.</td>
+  <td>Required for <code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code>
+  requests.</td>
+  <td>A number used once. Your application must generate and send a nonce with each
+  <code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code> request. The nonce is
+  returned with the <code>PURCHASE_STATE_CHANGED</code> broadcast intent, so you can use this value
+  to verify the integrity of transaction responses form Google Play.</td>
+</tr>
+<tr>
+  <td><code>NOTIFY_IDS</code></td>
+  <td>Array of <code>long</code> values</td>
+  <td>Any valid array of <code>long</code> values</td>
+  <td>Required for <code>GET_PURCHASE_INFORMATION</code> and <code>CONFIRM_NOTIFICATIONS</code>
+  requests.</td>
+  <td>An array of notification identifiers. A notification ID is sent to your application in an
+  <code>IN_APP_NOTIFY</code> broadcast intent every time a purchase changes state. You use the
+  notification to retrieve the details of the purchase state change.</td>
+</tr>
+<tr>
+  <td><code>DEVELOPER_PAYLOAD</code></td>
+  <td><code>String</code></td>
+  <td>Any valid <code>String</code> less than 256 characters long.</td>
+  <td>No</td>
+  <td>A developer-specified string that can be specified when you make a
+  <code>REQUEST_PURCHASE</code> request. This field is returned in the JSON string that contains
+  transaction information for an order. You can use this key to send supplemental information with
+  an order. For example, you can use this key to send index keys with an order, which is useful if
+  you are using a database to store purchase information. We recommend that you do not use this key
+  to send data or content.</td>
+</tr>
+</table>
+
+<p>The <code>BILLING_REQUEST</code> key can have the following values:</p>
+
+<ul>
+  <li><code>CHECK_BILLING_SUPPORTED</code>
+    <p>This request verifies that the Google Play application supports in-app billing. You
+    usually send this request when your application first starts up. This request is useful if you
+    want to enable or disable certain UI features that are relevant only to in-app billing.</p>
+  </li>
+  <li><code>REQUEST_PURCHASE</code>
+    <p>This request sends a purchase message to the Google Play application and is the foundation
+    of in-app billing. You send this request when a user indicates that he or she wants to purchase
+    an item in your application. Google Play then handles the financial transaction by displaying
+    the checkout user interface.</p>
+  </li>
+  <li><code>GET_PURCHASE_INFORMATION</code>
+    <p>This request retrieves the details of a purchase state change. A purchase state change can
+    occur when a purchase request is billed successfully or when a user cancels a transaction during
+    checkout. It can also occur when a previous purchase is refunded. Google Play notifies your
+    application when a purchase changes state, so you only need to send this request when there is
+    transaction information to retrieve.</p>
+  </li>
+  <li><code>CONFIRM_NOTIFICATIONS</code>
+    <p>This request acknowledges that your application received the details of a purchase state
+    change. That is, this message confirms that you sent a <code>GET_PURCHASE_INFORMATION</code>
+    request for a given notification and that you received the purchase information for the
+    notification.</p>
+  </li>
+  <li><code>RESTORE_TRANSACTIONS</code>
+    <p>This request retrieves a user's transaction status for managed purchases (see <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-purchase-type">Choosing a
+    Purchase Type</a> for more information). You should send this message only when you need to
+    retrieve a user's transaction status, which is usually only when your application is reinstalled
+    or installed for the first time on a device.</p>
+  </li>
+</ul>
+
+<p>Every in-app billing request generates a synchronous response. The response is a {@link
+android.os.Bundle} and can include one or more of the following keys:</p>
+
+<ul>
+  <li><code>RESPONSE_CODE</code>
+    <p>This key provides status information and error information about a request.</p>
+  </li>
+  <li><code>PURCHASE_INTENT</code>
+    <p>This key provides a {@link android.app.PendingIntent}, which you use to launch the checkout
+    activity.</p>
+  </li>
+  <li><code>REQUEST_ID</code>
+    <p>This key provides you with a request identifier, which you can use to match asynchronous
+    responses with requests.</p>
+  </li>
+</ul>
+
+<p>Some of these keys are not relevant to certain types of requests. Table 3 shows which keys are
+returned for each request type.</p>
+
+<p class="table-caption"><strong>Table 3.</strong> Description of Bundle keys that are returned with
+each in-app billing request type.</p>
+
+<table>
+
+<tr>
+<th>Request Type</th>
+<th>Keys Returned</th>
+<th>Possible Response Codes</th>
+</tr>
+<tr>
+  <td><code>CHECK_BILLING_SUPPORTED</code></td>
+  <td><code>RESPONSE_CODE</code></td>
+  <td><code>RESULT_OK</code>, <code>RESULT_BILLING_UNAVAILABLE</code>, <code>RESULT_ERROR</code>,
+  <code>RESULT_DEVELOPER_ERROR</code></td>
+</tr>
+<tr>
+  <td><code>REQUEST_PURCHASE</code></td>
+  <td><code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, <code>REQUEST_ID</code></td>
+  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
+</tr>
+<tr>
+  <td><code>GET_PURCHASE_INFORMATION</code></td>
+  <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
+  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
+</tr>
+<tr>
+  <td><code>CONFIRM_NOTIFICATIONS</code></td>
+  <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
+  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
+</tr>
+<tr>
+  <td><code>RESTORE_TRANSACTIONS</code></td>
+  <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
+  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
+</tr>
+</table>
+
+<h2 id="billing-intents">In-app Billing Broadcast Intents</h2>
+
+<p>The following section describes the in-app billing broadcast intents that are sent by the Google
+Play application. These broadcast intents inform your application about in-app billing actions
+that have occurred. Your application must implement a {@link android.content.BroadcastReceiver} to
+receive these broadcast intents, such as the <code>BillingReceiver</code> that's shown in the in-app
+billing <a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample
+application</a>.</p>
+
+<h4>com.android.vending.billing.RESPONSE_CODE</h4>
+
+<p>This broadcast intent contains a Google Play response code, and is sent after you make an
+in-app billing request. A server response code can indicate that a billing request was successfully
+sent to Google Play or it can indicate that some error occurred during a billing request. This
+intent is not used to report any purchase state changes (such as refund or purchase information).
+For more information about the response codes that are sent with this response, see <a
+href="#billing-codes">Google Play Response Codes for In-app Billing</a>. The sample application
+assigns this broadcast intent to a constant named <code>ACTION_RESPONSE_CODE</code>.</p>
+
+<h5>Extras</h5>
+
+<ul type="none">
+  <li><code>request_id</code>&mdash;a <code>long</code> representing a request ID. A request ID
+  identifies a specific billing request and is returned by Google Play at the time a request is
+  made.</li>
+  <li><code>response_code</code>&mdash;an <code>int</code> representing the Google Play server
+  response code.</li>
+</ul>
+
+<h4>com.android.vending.billing.IN_APP_NOTIFY</h4>
+
+<p>This response indicates that a purchase has changed state, which means a purchase succeeded, was
+canceled, or was refunded. This response contains one or more notification IDs. Each notification ID
+corresponds to a specific server-side message, and each messages contains information about one or
+more transactions. After your application receives an <code>IN_APP_NOTIFY</code> broadcast intent,
+you send a <code>GET_PURCHASE_INFORMATION</code> request with the notification IDs to retrieve the
+message details. The sample application assigns this broadcast intent to a constant named
+<code>ACTION_NOTIFY</code>.</p>
+
+<h5>Extras</h5>
+
+<ul type="none">
+  <li><code>notification_id</code>&mdash;a <code>String</code> representing the notification ID for
+  a given purchase state change. Google Play notifies you when there is a purchase state change
+  and the notification includes a unique notification ID. To get the details of the purchase state
+  change, you send the notification ID with the <code>GET_PURCHASE_INFORMATION</code> request.</li>
+</ul>
+
+<h4>com.android.vending.billing.PURCHASE_STATE_CHANGED</h4>
+
+<p>This broadcast intent contains detailed information about one or more transactions. The
+transaction information is contained in a JSON string. The JSON string is signed and the signature
+is sent to your application along with the JSON string (unencrypted). To help ensure the security of
+your in-app billing messages, your application can verify the signature of this JSON string. The
+sample application assigns this broadcast intent to a constant named
+<code>ACTION_PURCHASE_STATE_CHANGED</code>.</p>
+
+<h5>Extras</h5>
+
+<ul type="none">
+  <li><code>inapp_signed_data</code>&mdash;a <code>String</code> representing the signed JSON
+  string.</li>
+  <li><code>inapp_signature</code>&mdash;a <code>String</code> representing the signature.</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Your application should map the broadcast intents and extras
+to constants that are unique to your application. See the <code>Consts.java</code> file in the
+sample application to see how this is done.</p>
+
+<p>The fields in the JSON string are described in the following table (see table 4):</p>
+
+<p class="table-caption"><strong>Table 4.</strong> Description of JSON fields that are returned with
+a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
+
+<table>
+
+<tr>
+<th>Field</th>
+<th>Description</th>
+</tr>
+<tr>
+  <td>nonce</td>
+  <td>A number used once. Your application generates the nonce and sends it with the
+  <code>GET_PURCHASE_INFORMATION</code> request. Google Play sends the nonce back as part of the
+  JSON string so you can verify the integrity of the message.</td>
+</tr>
+<tr>
+  <td>notificationId</td>
+  <td>A unique identifier that is sent with an <code>IN_APP_NOTIFY</code> broadcast intent. Each
+  <code>notificationId</code> corresponds to a specify message that is waiting to be retrieved on
+  the Google Play server. Your application sends back the <code>notificationId</code> with the
+  <code>GET_PURCHASE_INFORMATION</code> message so Google Play can determine which messages you
+  are retrieving.</td>
+</tr>
+<tr>
+  <td>orderId</td>
+  <td>A unique order identifier for the transaction. This corresponds to the Google Wallet Order
+  ID.</td>
+</tr>
+<tr>
+  <td>packageName</td>
+  <td>The application package from which the purchase originated.</td>
+</tr>
+<tr>
+  <td>productId</td>
+  <td>The item's product identifier. Every item has a product ID, which you must specify in the
+  application's product list on the Google Play publisher site.</td>
+</tr>
+<tr>
+  <td>purchaseTime</td>
+  <td>The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).</td>
+</tr>
+
+<tr>
+  <td>purchaseState</td>
+  <td>The purchase state of the order. Possible values are 0 (purchased), 1 (canceled), 2
+  (refunded), or 3 (expired, for subscription purchases only).</td>
+</tr>
+<tr>
+  <td>purchaseToken</td>
+  <td>A token that uniquely identifies a subscription purchase for a given item and user pair.
+  You can use the token to specify the subscription when querying for subscription validity.
+  
+  <p><br><em>Supported only in In-app Billing API version 2 and higher.</em></p></td>
+</tr>
+<tr>
+  <td>developerPayload</td>
+  <td>A developer-specified string that contains supplemental information about an order. You can
+  specify a value for this field when you make a <code>REQUEST_PURCHASE</code> request.</td>
+</tr>
+</table>
+
+<!--<h2 id="other-intents">Other Intents</h2> 
+
+<p>The following Intents related to In-app Billing may be useful in your
+implemention. </p> -->
+
+<h2 id="http-api">HTTP API for verification and cancelation</h2>
+
+<p>Google Play offers an HTTP-based API that you can use to remotely query the
+validity of a specific subscription at any time or cancel a subscription. The
+API is designed to be used from your backend servers as a way of securely
+managing subscriptions, as well as extending and integrating subscriptions with
+other services. See <a
+href="{@docRoot}guide/google/play/billing/billing_subscriptions.html#play-dev-api">
+Google Play Android Developer API</a> for more information.</p>
+
+<h2 id="billing-versions">In-app Billing API Versions</h2>
+
+<p>The In-app Billing API is versioned, with each version offering
+additional features to your app. At run time, your app can query the Google Play app to determine
+what version of the API it supports and what features are available. Typically, the Google Play app
+will be updated and will support the latest version of the API. For a summary of versions see
+<a href="{@docRoot}guide/google/play/billing/billing_reference.html#billing-versions">In-app Billing
+API Versions</a>.</p>
+
+<p>The sections below list the supported versions of the In-app Billing API.
+Versions are specified in the <code>API_VERSION</code> key of the Bundle object
+passed in the <code>sendBillingRequest()</code>, which is defined in the defined
+in the <code>IMarketBillingService.aidl</code> file, which is included with the
+in-app billing <a
+href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">
+sample application</a>. For more information, see <a
+href="#billing-interface">In-app Billing Service Interface</a>.</p>
+<h3 id="version_2">In-app Billing version 2</h3>
+
+<p><em>May 2012</em></p>
+
+<ul>
+<li>Adds support for subscriptions. 
+  <ul>
+  <li>Adds a new supported string value, "2", for the <code>API_VERSION</code> key
+  of the Bundle object passed in the <code>sendBillingRequest()</code>.</li>
+  <li>Adds a new JSON field, <code>purchaseToken</code>, to the
+  <code>orders</code> list returned in a <code>PURCHASE_STATE_CHANGED</code>
+  intent. </li> 
+  <li>Adds a new <code>purchaseState</code> value, <code>3</code> (expired), to the
+  <code>orders</code> list returned in a <code>PURCHASE_STATE_CHANGED</code>
+  intent. The value indicates that a subscription has expired and is no longer valid.</li>
+<li>Requires Google Play (Play Store) version 3.5 or higher.</li>
+</ul>
+
+<h3 id="version_1">In-app Billing version 1</h3>
+
+<p><em>March 2011</em></p>
+
+<ul>
+<li>Initial release.</li>
+<li>Requires Google Play/Android Market 2.3.4 or higher.</li>
+</ul>
+
diff --git a/docs/html/guide/google/play/billing/billing_subscriptions.jd b/docs/html/guide/google/play/billing/billing_subscriptions.jd
new file mode 100755
index 0000000..3cf9777
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_subscriptions.jd
@@ -0,0 +1,859 @@
+page.title=Subscriptions
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#overview">Overview of Subscriptions</a>
+    <!--<ol>
+        <li><a href="#publishing">Subscription publishing and unpublishing</a></li>
+        <li><a href="#pricing">Subscription pricing</a></li>
+        <li><a href="#user-billing">User billing</a></li>
+        <li><a href="#cancellation">Subscription cancellation</a></li>
+        <li><a href="#uninstallation">App uninstallation</a></li>
+        <li><a href="#refunds">Refunds</a></li>
+        <li><a href="#payment">Payment processing and policies</a></li>
+        <li><a href="#requirements">System requirements for subscriptions</a></li>
+        <li><a href="#compatibility">Compatibility considerations</a></li>
+      </ol> -->
+    </li>
+    <li><a href="#implementing">Implementing Subscriptions</a>
+      <!-- <ol>
+        <li><a href="#sample">Sample application</a></li>
+        <li><a href="#model">Application model</a></li>
+        <li><a href="#token">Purchase token</a></li>
+        <li><a href="#version">Checking the In-app Billing API version</a></li>
+        <li><a href="purchase">Requesting purchase of a subscription</a></li>
+        <li><a href="#restore">Restoring transactions</a></li>
+        <li><a href="#validity">Checking subscription validity</a></li>
+        <li><a href="#viewstatus">Launching your product page to let the user cancel or view status</a></li>
+        <li><a href="#purchase-state-changes">Recurring billing and changes in purchase state</a></li>
+        <li><a href="modifying">Modifying your app for subscriptions</a></li>
+      </ol> -->
+    </li>
+    <li><a href="#administering">Administering Subscriptions</a></li>
+    
+    <li><a href="#play-dev-api">Google Play Android Developer API</a>
+      <!-- <ol>
+        <li><a href="#using">Using the API</a></li>
+        <li><a href="#quota">Quota</a></li>
+        <li><a href="#auth">Authorization</a></li>
+        <li><a href="#practices">Using the API efficiently</a></li>
+      </ol> -->
+    </li>
+</ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+</div>
+</div>
+
+<p>Subscriptions let you sell content, services, or features in your app with
+automated, recurring billing. Adding support for subscriptions is
+straightforward and you can easily adapt an existing In-app Billing
+implementation to sell subscriptions. </p>
+
+<p>If you have already implemented In-app Billing for one-time purchase
+products, you will find that you can add support for subscriptions with minimal
+impact on your code. If you are new to In-app Billing, you can implement
+subscriptions using the standard communication model, data structures, and user
+interactions as for other in-app products.subscriptions. Because the
+implementation of subscriptions follows the same path as for other in-app
+products, details are provided outside of this document, starting with the <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
+Overview</a>. </p>
+
+<p>This document is focused on highlighting implementation details that are
+specific to subscriptions, along with some strategies for the associated billing
+and business models.</p>
+
+<h2 id="overview">Overview of Subscriptions</h2>
+
+<p>A <em>subscription</em> is a new product type offered in In-app Billing that lets you
+sell content, services, or features to users from inside your app with recurring
+monthly or annual billing. You can sell subscriptions to almost any type of
+digital content, from any type of app or game.</p>
+
+<p>As with other in-app products, you configure and publish subscriptions using
+the Developer Console and then sell them from inside apps installed on an
+Android-powered devices. In the Developer console, you create subscription
+products and add them to a product list, setting a price for each, choosing a
+billing interval of monthly or annually, and then publishing. In your apps, it’s
+straightforward to add support for subscription purchases. The implementation
+extends the standard In-app Billing API to support a new product type but uses
+the same communication model, data structures, and user interactions as for
+other in-app products.</p>
+
+<p>When users purchase subscriptions in your apps, Google Play handles all
+checkout details so your apps never have to directly process any financial
+transactions. Google Play processes all payments for subscriptions through
+Google Wallet, just as it does for standard in-app products and app purchases.
+This ensures a consistent and familiar purchase flow for your users.</p>
+
+<img src="{@docRoot}images/billing_subscription_flow.png" style="border:4px solid ddd;">
+
+
+<p>After users have purchase subscriptions, they can view the subscriptions and
+cancel them, if necessary, from the My Apps screen in the Play Store app or
+from the app's product details page in the Play Store app.</p>
+
+<!--<img src="{@docRoot}images/billing_subscription_cancel.png" style="border:4px solid ddd;">-->
+
+<p>Once users have purchased a subscription through In-app Billing, you can
+easily give them extended access to additional content on your web site (or
+other service) through the use of a server-side API provided for In-app Billing.
+The server-side API lets you validate the status of a subscription when users
+sign into your other services. For more information about the API, see <a
+href="#play-dev-api">Google Play Android Developer API</a>, below. </p>
+
+<p>You can also build on your existing external subscriber base from inside your
+Android apps. If you sell subscriptions on a web site, for example, you can add
+your own business logic to your Android app to determine whether the user has
+already purchased a subscription elsewhere, then allow access to your content if
+so or offer a subscription purchase from Google Play if not.</p>
+
+<p>With the flexibility of In-app Billing, you can even implement your own
+solution for sharing subscriptions across as many different apps or products as
+you want. For example, you could sell a subscription that gives a subscriber
+access to an entire collection of apps, games, or other content for a monthly or
+annual fee. To implement this solution, you could add your own business logic to
+your app to determine whether the user has already purchased a given
+subscription and if so, allow access to your content. </p>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h2>Subscriptions at a glance</h2>
+  <ul>
+    <li>Subscriptions let you sell products with automated, recurring billing</li>
+    <li>You can set up subscriptions with either monthly or annual billing</li>
+    <li>You can sell multiple subscription items in an app with various billing
+    intervals or prices, such as for promotions</li>
+    <li>Users purchase your subscriptions from inside your apps, rather than
+    directly from Google Play</li>
+    <li>Users manage their purchased subscriptions from the My Apps screen in
+    the Play Store app</li>
+    <li>Google Play uses the original form of payment for recurring billing</li>
+    <li>If a user cancels a subscription, Google Play considers the subscription valid
+    until the end of the current billing cycle. The user continues to enjoy the content
+    for the rest of the cycle and is not granted a refund.</li>
+  </ul>
+</div>
+</div>
+
+<p>In general the same basic policies and terms apply to subscriptions as to
+standard in-app products, however there are some differences. For complete
+information about the current policies and terms, please read the <a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en
+&answer=140504">policies document</a>.</p>
+
+
+<h3 id="publishing">Subscription publishing and unpublishing</h3>
+
+<p>To sell a subscription in an app, you use the tools in the Developer Console
+to set up a product list for the app and then create and configure a new
+subscription. In the subscription, you set the price and billing interval and
+define a subscription ID, title, and description. When you are ready, you can
+then publish the subscription in the app product list.</p>
+
+<p>In the product list, you can add subscriptions, in-app products, or both. You
+can add multiple subscriptions that give access to different content or
+services, or you can add multiple subscriptions that give access to the same
+content but for different intervals or different prices, such as for a
+promotion. For example, a news outlet might decide to offer both monthly and
+annual subscriptions to the same content, with annual having a discount. You can
+also offer in-app purchase equivalents for subscription products, to ensure that
+your content is available to users of older devices that do not support
+subscriptions.</p>
+
+<p>After you add a subscription or in-app product to the product list, you must
+publish the product before Google Play can make it available for purchase. Note
+that you must also publish the app itself before Google Play will make the
+products available for purchase inside the app. </p>
+
+<p class="caution"><strong>Important:</strong> At this time, the capability to
+unpublish a subscription is not available. Support for unpublishing a
+subscription is coming to the Developer Console in the weeks ahead, so this is a
+temporary limitation. In the short term, instead of unpublishing,
+you can remove the subscription product from the product list offered in your
+app to prevent users from seeing or purchasing it.</p>
+
+<h3 id="pricing">Subscription pricing</h3>
+
+<p>When you create a subscription in the Developer Console, you can set a price
+for it in any available currencies. Each subscription must have a non-zero
+price. You can price multiple subscriptions for the same content differently
+&mdash; for example you could offer a discount on an annual subscription
+relative to the monthly equivalent. </p>
+
+<p class="caution"><strong>Important:</strong> At this time, once you publish a
+subscription product, you cannot change its price in any currency. Support for
+changing the price of published subscriptions is coming to the Developer Console
+in the weeks ahead. In the short term, you can work around this limitation by
+publishing a new subscription product ID at a new price, then offer it in your
+app instead of the original product. Users who have already purchased will
+continue to be charged at the original price, but new users will be charged at
+the new price.</p>
+
+<h3 id="user-billing">User billing</h3>
+
+<p>You can sell subscription products with automated recurring billing at
+either of two intervals:</p>
+
+<ul>
+  <li>Monthly &mdash; Google Play bills the customer’s Google Wallet account at
+  the time of purchase and monthly subsequent to the purchase date (exact billing
+  intervals can vary slightly over time)</li>
+  <li>Annually &mdash; Google Play bills the customer's Google Wallet account at
+  the time of purchase and again on the same date in subsequent years.</li>
+</ul>
+
+<p>Billing continues indefinitely at the interval and price specified for the
+subscription. At each subscription renewal, Google Play charges the user account
+automatically, then notifies the user of the charges afterward by email. Billing
+cycles will always match subscription cycles, based on the purchase date.</p>
+
+<p>Over the life of a subscription, the form of payment billed remains the same
+&mdash; Google Play always bills the same form of payment (such as credit card,
+Direct Carrier Billing) that was originally used to purchase the
+subscription.</p>
+
+<p>When the subscription payment is approved by Google Wallet, Google Play
+provides a purchase token back to the purchasing app through the In-app Billing
+API. For details, see <a href="#token">Purchase token</a>, below. Your apps can
+store the token locally or pass it to your backend servers, which can then use
+it to validate or cancel the subscription remotely using the <a
+href="#play-dev-api">Google Play Android Developer API</a>.</p>
+
+<p>In the case of billing errors, such as could happen if the customer’s credit
+card becomes invalid, Google Play notifies your app of the change in purchase
+state.</p>
+
+<p>As a best practice, we recommend that your app includes business logic to
+notify your backend servers of subscription purchases, tokens, and any billing
+errors that may occur. Your backend servers can use the server-side API to query
+and update your records and follow up with customers directly, if needed.</p>
+
+<h3 id="cancellation">Subscription cancellation</h3>
+
+<p>Users can view the status of all of their subscriptions and cancel them if
+necessary from the My Apps screen in the Play Store app. Currently, the In-app
+Billing API does not provide support for canceling subscriptions direct from
+inside the purchasing app, although your app can broadcast an Intent to launch
+the Play Store app directly to the My Apps screen.</p>
+
+<p>When the user cancels a subscription, Google Play does not offer a refund for
+the current billing cycle. Instead, it allows the user to have access to the
+cancelled subscription until the end of the current billing cycle, at which time
+it terminates the subscription. For example, if a user purchases a monthly
+subscription and cancels it on the 15th day of the cycle, Google Play will
+consider the subscription valid until the end of the 30th day (or other day,
+depending on the month).</p>
+
+<p>In some cases, the user may contact you directly to request cancellation of a
+subscription. In this and similar cases, you can use the server-side API to
+query and directly cancel the user’s subscription from your servers.
+
+<p class="caution"><strong>Important:</strong> In all cases, you must continue
+to offer the content that your subscribers have purchased through their
+subscriptions, for as long any users are able to access it. That is, you must
+not remove any subscriber’s content while any user still has an active
+subscription to it, even if that subscription will terminate at the end of the
+current billing cycle. Removing content that a subscriber is entitled to access
+will result in penalties. Please see the <a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=140504">policies document</a> for more information. </p>
+
+<h3 id="uninstall">App uninstallation</h3>
+
+<p>When the user uninstalls an app that includes purchased subscriptions, the Play Store app will notify the user that there are active subscriptions. If the user chooses to continue with the uninstalltion, the app is removed and the subscriptions remain active and recurring billing continues. The user can return to cancel the associated subscriptions at any time in the My Apps screen of the Play Store app. If the user chooses to cancel the uninstallation, the app and subscriptions remain as they were.</p>
+
+<h3 id="refunds">Refunds</h3>
+
+<p>As with other in-app products, Google Play does not provide a refund window
+for subscription purchases. For example, users who purchase an app can ask for a
+refund from Google Play within a 15-minute window. With subscriptions, Google
+Play does not provide a refund window, so users will need to contact you
+directly to request a refund.
+
+<p>If you receive requests for refunds, you can use the server-side API to
+cancel the subscription or verify that it is already cancelled. However, keep in
+mind that Google Play considers cancelled subscriptions valid until the end of
+their current billing cycles, so even if you grant a refund and cancel the
+subscription, the user will still have access to the content.
+
+<p class="note"><strong>Note:</strong> Partial refunds for canceled
+subscriptions are not available at this time.</p>
+
+<h3 id="payment">Payment processing and policies</h3>
+
+<p>In general, the terms of Google Play allow you to sell in-app subscriptions
+only through the standard payment processor, Google Wallet. For purchases of any
+subscription products, just as for other in-app products and apps, the
+transaction fee for subscriptions, just as for other in-app purchases, is the
+same as the transaction fee for application purchases (30%).</p>
+
+<p>Apps published on Google Play that are selling subscriptions must use In-app
+Billing to handle the transaction and may not provide links to a purchase flow
+outside of the app and Google Play (such as to a web site).</p>
+
+<p>For complete details about terms and policies, see the <a
+href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=140504">policies
+document</a>.</p>
+
+<h3 id="requirements">System requirements for subscriptions</h3>
+
+<p>In-app purchases of subscriptions are supported only on devices that meet
+these minimum requirements:</p>
+
+<ul>
+  <li>Must run Android 2.2 or higher</li>
+  <li>Google Play Store app, version 3.5 or higher, must be installed</li>
+</ul>
+
+<p>Google Play 3.5 and later versions include support for the In-app Billing
+v2 API or higher, which is needed to support handling of subscription
+products.</p>
+
+<h3 id="compatibility">Compatibility considerations</h3>
+
+<p>As noted in the previous section, support for subscriptions is available only
+on devices that meet the system requirements. Not all devices will receive or
+install Google Play 3.5, so not all users who install your apps will have access
+to the In-app Billing API and subscriptions.</p>
+
+<p>If you are targeting older devices that run Android 2.1 or earlier, we
+recommend that you offer those users an alternative way buy the content that is
+available through subscriptions. For example, you could create standard in-app
+products (one-time purchases) that give access to similar content as your
+subscriptions, possibly for a longer interval such as a year. </p>
+
+
+<h2 id="implementing">Implementing Subscriptions</h2>
+
+<p>Subscriptions are a standard In-app Billing product type. If you have already
+implemented In-app Billing for one-time purchase products, you will find that
+adding support for subscriptions is straightforward, with minimal impact on your
+code. If you are new to In-app Billing, you can implement subscriptions using
+the standard communication model, data structures, and user interactions as for
+other in-app products.subscriptions. </p>
+
+<p>The full implementation details for In-app Billing are provided outside of
+this document, starting with the <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
+Overview</a>. This document is focused on highlighting implementation details
+that are specific to subscriptions, along with some strategies for the
+associated billing and business models.</p>
+
+
+<h3 id="sample">Sample application</h3>
+
+<p>To help you get started with your In-app Billing implementation and
+subscriptions, an updated version of the In-app Billing sample app is available.
+You can download the sample app from the Android SDK repository using the
+Android SDK Manager. For details, see <a
+href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">
+Downloading the Sample Application</a>.</p>
+
+<h3 id="model">Application model</h3>
+
+<p>With subscriptions, your app uses the standard In-app Billing application
+model, sending billing requests to the Play Store application over interprocess
+communication (IPC) and receiving purchase responses from the Play Store app in
+the form of asynchronous broadcast intents. Your application does not manage any
+network connections between itself and the Google Play server or use any special
+APIs from the Android platform.</p>
+
+<p>Your app also uses the standard In-app Billing components &mdash; a billing
+Service for sending requests, a BroadcastReceiver for receiving the responses,
+and a security component for verifying that the response was sent by Google
+Play. Also recommended are a response Handler for processing notifications,
+errors, and status messages, and an observer for sending callbacks to your
+application as needed. All of these components and their interactions are
+described in full in the <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
+Overview</a> and related documents.</p>
+
+<p>To initiate different types of billing communication with Google Play, your
+app will use the standard set of in-app billing requests and receive the same
+responses. Inside the requests and responses are two new fields described below.
+</p>
+
+<h3 id="token">Purchase token</h3>
+
+<p>Central to the end-to-end architecture for subscriptions is the purchase
+token, a string value that uniquely identifies (and associates) a user ID and a
+subscription ID. Google Play generates the purchase token when the user
+completes the purchase of a subscription product (and payment is approved by
+Google Wallet) and then sends it to the purchasing app on the device through the
+In-app Billing API. </p>
+
+<p>At the conclusion of a <code>PURCHASE_REQUEST</code> message flow, your app
+can retrieve the purchase token and other transaction details by initiating a
+<code>GET_PURCHASE_INFORMATION</code> request. The Bundle returned by the call
+contains an JSON array of order objects. In the order corresponding to the
+subscription purchase, the token is available in the <code>purchaseToken</code>
+field. </p>
+
+<p>An example of a JSON order object that includes a subscription purchase token
+is shown below. </p>
+
+<pre class="no-pretty-print" style="color:black">{ "nonce" : 1836535032137741465,
+  "orders" :
+    [{ "notificationId" : "android.test.purchased",
+       "orderId" : "transactionId.android.test.purchased",
+       "packageName" : "com.example.dungeons",
+       "productId" : "android.test.purchased",
+       "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
+       "purchaseTime" : 1290114783411,
+       "purchaseState" : 0,
+       "purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
+}
+</pre>
+
+<p>After receiving a purchase token, your apps can store the token locally or
+pass it to your backend servers, which can then use it to query the billing
+status or cancel the subscription remotely. If your app will store the token
+locally, please read the <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+Design</a> document for best practices for maintaining the security of your
+data.</p>
+
+<h3 id="version">Checking the In-app Billing API version</h3>
+
+<p>Subscriptions support is available only in versions of Google Play that
+support the In-app Billing v2 API (Google Play 3.5 and higher). For your app,
+an essential first step at launch is to check whether the version of Google Play
+installed on the device supports the In-app Billing v2 API and
+subscriptions.</p>
+
+<p>To do this, create a CHECK_BILLING_SUPPORTED request Bundle that includes the
+required key-value pairs, together with</p>
+
+<ul>
+  <li>The <code>API_VERSION</code> key, assigning a value of 2.</li>
+  <li>The <code>BILLING_REQUEST_ITEM_TYPE</code> key, assigning a value of “subs”</li>
+</ul>
+
+<p>Send the request using <code>sendBillingRequest(Bundle)</code> and receive
+the response Bundle. You can extract the response from the
+<code>BILLING_RESPONSE_RESPONSE_CODE</code> key of the response. RESULT_OK
+indicates that subscriptions are supported.</p>
+
+<p>The sample app declares constants for the accepted
+<code>BILLING_REQUEST_ITEM_TYPE</code> values (from Consts.java):</p>
+
+<pre class="pretty-print">   // These are the types supported in the IAB v2
+   public static final String ITEM_TYPE_INAPP = "inapp";
+   public static final String ITEM_TYPE_SUBSCRIPTION = "subs";
+</pre>
+
+<p>It sets up a convenience method for building the request bundle (from BillingService.java):</p>
+
+<pre class="pretty-print">       protected Bundle makeRequestBundle(String method) {
+           Bundle request = new Bundle();
+           request.putString(Consts.BILLING_REQUEST_METHOD, method);
+           request.putInt(Consts.BILLING_REQUEST_<code>API_VERSION</code>, 2);
+           request.putString(Consts.BILLING_REQUEST_PACKAGE_NAME, getPackageName());
+           return request;
+       }
+</pre>
+
+<p>Here’s an example of how to test support for In-App Billing v2 and subscriptions
+(from BillingService.java):</p>
+
+<pre class="pretty-print">   /**
+    * Wrapper class that checks if in-app billing is supported.
+    */
+   class CheckBillingSupported extends BillingRequest {
+       public String mProductType = null;
+       public CheckBillingSupported() {
+           // This object is never created as a side effect of starting this
+           // service so we pass -1 as the startId to indicate that we should
+           // not stop this service after executing this request.
+           super(-1);
+       }
+
+       public CheckBillingSupported(String type) {
+           super(-1);
+           mProductType = type;
+       }
+
+       &#64;Override
+       protected long run() throws RemoteException {
+           Bundle request = makeRequestBundle("CHECK_BILLING_SUPPORTED");
+           if (mProductType != null) {
+               request.putString(Consts.<code>BILLING_REQUEST_ITEM_TYPE</code>, mProductType);
+           }
+           Bundle response = mService.sendBillingRequest(request);
+           int responseCode = response.getInt(Consts.<code>BILLING_RESPONSE_RESPONSE_CODE</code>);
+           if (Consts.DEBUG) {
+               Log.i(TAG, "CheckBillingSupported response code: " +
+                       ResponseCode.valueOf(responseCode));
+           }
+           boolean billingSupported = (responseCode == ResponseCode.RESULT_OK.ordinal());
+           ResponseHandler.checkBillingSupportedResponse(billingSupported, mProductType);
+           return Consts.BILLING_RESPONSE_INVALID_REQUEST_ID;
+       }
+   }
+</pre>
+
+<h3 id="purchase">Requesting a subscription purchase</h3>
+
+<p>Once you’ve checked the API version as described above and determined that
+subscriptions are supported, you can present subscription products to the user
+for purchase. When the user has selected a subscription product and initiated a
+purchase, your app handles the purchase just as it would for other in-app
+products &mdash; by sending a REQUEST_PURCHASE request. You can then launch
+Google Play to display the checkout user interface and handle the financial
+transaction..  
+
+<p>The REQUEST_PURCHASE includes a Bundle containing the item details, as
+described in the <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html">In-app Billing
+Overview</a>. For a subscription, the Bundle must also specify:</p>
+
+<ul>
+  <li>The <code>ITEM_ID</code> key, with a value that specifies a valid, published
+  subscription product.</li>
+  <li>The <code>ITEM_TYPE</code> key, with a value of “subs”
+  (<code>ITEM_TYPE_SUBSCRIPTION</code> in the sample app). If the request does not
+  specify the subscription's <code>ITEM_TYPE</code>, Google Play attempts to
+  handle the request as a standard in-app purchase (one-time purchase).</li>
+</ul>
+
+<p>Google Play synchronously returns a response bundle that includes
+<code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and
+<code>REQUEST_ID</code>. Your app uses the <code>PURCHASE_INTENT</code> to
+launch the checkout UI and the message flow proceeds exactly as described in <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-message-
+sequence">Messaging sequence</a>.</p>
+
+<p>Here’s how the sample app initiates a purchase for a subscription, where
+<code>mProductType</code> is <code>ITEM_TYPE_SUBSCRIPTION</code> (from
+BillingService.java).</p>
+
+<pre class="pretty-print">   /**
+    * Wrapper class that requests a purchase.
+    */
+   class RequestPurchase extends BillingRequest {
+       public final String mProductId;
+       public final String mDeveloperPayload;
+       public final String mProductType;
+
+. . .
+
+       &#64;Override
+       protected long run() throws RemoteException {
+           Bundle request = makeRequestBundle("REQUEST_PURCHASE");
+           request.putString(Consts.BILLING_REQUEST_ITEM_ID, mProductId);
+           request.putString(Consts.<code>BILLING_REQUEST_ITEM_TYPE</code>, mProductType);
+           // Note that the developer payload is optional.
+           if (mDeveloperPayload != null) {
+               request.putString(Consts.BILLING_REQUEST_DEVELOPER_PAYLOAD, mDeveloperPayload);
+           }
+           Bundle response = mService.sendBillingRequest(request);
+           PendingIntent pendingIntent
+                   = response.getParcelable(Consts.BILLING_RESPONSE_PURCHASE_INTENT);
+           if (pendingIntent == null) {
+               Log.e(TAG, "Error with requestPurchase");
+               return Consts.BILLING_RESPONSE_INVALID_REQUEST_ID;
+           }
+
+           Intent intent = new Intent();
+           ResponseHandler.buyPageIntentResponse(pendingIntent, intent);
+           return response.getLong(Consts.BILLING_RESPONSE_REQUEST_ID,
+                   Consts.BILLING_RESPONSE_INVALID_REQUEST_ID);
+       }
+
+       &#64;Override
+       protected void responseCodeReceived(ResponseCode responseCode) {
+           ResponseHandler.responseCodeReceived(BillingService.this, this, responseCode);
+       }
+   }
+</pre>
+
+<h3 id="restoring">Restoring transactions</h3>
+
+<p>Subscriptions always use  the <em>managed by user account</em> purchase type,
+so that you can restore a record of subscription transactions on the device when
+needed. When a user installs your app onto a new device, or when the user
+uninstalls/reinstalls the app on the original device, your app should restore
+the subscriptions that the user has purchased.</p>
+
+<p>The process for restoring subscriptions transactions is the same as described
+in <a
+href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-message-
+sequence">Messaging sequence</a>. Your app sends a
+<code>RESTORE_TRANSACTIONS</code> request to Google Play. Google Play sends two
+broadcast intents as asynchronous responses &mdash; a <code>RESPONSE_CODE</code>
+intent and a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
+
+<p>The <code>PURCHASE_STATE_CHANGED</code> intent contains a notification ID
+that your app can use to retrieve the purchase details, including the purchase
+token, by sending a standard <code>GET_PURCHASE_INFORMATION</code> request. The
+<code>Bundle</code> returned in the call includes an JSON array of order objects
+corresponding to subscription (and in-app product) purchases that you can
+restore locally.</p>
+
+<p>Your app can store the restored purchase state and other transaction details
+in the way that best meets your needs. Your app can use it later to check the
+subscription validity, although please read the <a
+href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+Design</a> document for best practices for maintaining the security of your
+data.</p>
+
+<h3 id="validity">Checking subscription validity</h3>
+
+<p>Subscriptions are time-bound purchases that require successful billing
+recurrences over time to remain valid. Your app should check the validity of
+purchased subscriptions at launch or prior to granting access to subscriber
+content.</p>
+
+<p>With In-app Billing, you validate a subscription by keeping track of its
+purchase state, such as purchased or cancelled, and then checking the state
+whenever needed. Google Play provides two ways to let you know when the purchase
+state of a subscription changes:</p>
+
+<ul>
+  <li><em>In-app Billing Notifications</em>. Google Play pushes a notification
+  to your app whenever  the purchase state of a subscription changes. Your app can
+  store the most recent purchase state for a given purchase token and then check
+  that state at run time, as needed.</li>
+  <li><em>Google Play Android Developer API</em>. You can use this HTTP-based
+  API to poll Google Play for the current purchase state of a subscription. You
+  can store the purchased state for each <code>purchaseToken</code> on your
+  backend servers. For more information, see <a href="#play-dev-api">Google Play
+  Android Developer API</a>, below.</li>
+</ul>
+
+<p>For most use-cases, especially those where backend servers are already keeping
+track of subscribed users, implementing a combination of both methods is the
+recommended approach. A typical implementation might work like this:</p>
+
+<ul>
+  <li>When the user successfully purchases a new subscription, your app notifies a
+  backend server, which stores the purchase token, user name, and other
+  information in a secure location.</li>
+  <li>Since your app cannot know the expiration date, your server can poll Google
+  Play to get the expiration and store it with the purchase token and other
+  data.</li>
+  <li>Because your server now knows the expiration date, it does not need to poll
+  Google Play again until after the expiration date, at which time it can confirm
+  that the subscription was not cancelled.</li>
+  <li>On the client side, your app can continue to update the server whenever the
+  purchase state changes, storing the state locally.</li>
+</ul>
+
+<p>If you are using both notifications and the Google Play Android Developer API to validate subscriptions, we recommend the following:</p>
+
+<ul>
+  <li>If your app wants to check validity but you can’t reach your server (or
+you don’t have a server), use the latest purchase state received by
+notification.</li>
+  <li>If you have a server and it’s reachable, always give preference to the
+purchase state obtained from your server over the state received in
+notifications.</li>
+</ul>
+
+<p>If necessary, you can also use a <code>RESTORE_TRANSACTIONS</code> request to retrieve a record of all managed and in-app products purchased by the user, which you can then store locally. However, using <code>RESTORE_TRANSACTIONS</code> on a regular basis is not recommended because of performance impacts.</p>
+
+<p>Regardless of the approach you choose, your app should check subscriptions
+and validity at launch, such as prior to accessing subscriber content, game
+levels, and so on.</p>
+
+<p class="table-caption"><strong>Table 1.</strong> Summary of purchaseState
+values for subscription purchases, as received with a
+<code>PURCHASE_STATE_CHANGED</code> intent.</p>
+
+<table>
+<tr>
+<th>State</th><th>purchaseState Value</th><th>Comments</th>
+</tr>
+<tr>
+<td>Purchased successfully</td><td><code>0</code></td><td>Sent at original purchase only (not at recurring billing cycles).</td></tr>
+<td>Cancelled</td><td><code>1</code></td><td>Sent at original purchase only if the purchase has failed for some reason. </td></tr>
+<td>Refunded</td><td><code>2</code></td><td>The purchase was refunded.</code></td></tr>
+<td>Subscription expired</td><td><code>3</code></td><td>Sent if a subscription expires because of non-payment or user cancelation.</td></tr>
+</table>
+
+
+<h3 id="viewstatus">Launching your product page to let the user cancel or view subscriptions</h3>
+
+<p>In-app Billing does not currently provide an API to let users directly view or cancel
+subscriptions from within the purchasing app. Instead, users can launch the Play
+Store app on their devices and go to the My Apps screen to manage subscriptions. In My Apps,
+users can see a list of their subscriptions organized by application. Tapping one of the
+subscriptions loads the app's product page, from which users can see active subscriptions
+and billing status and cancel subscriptions as needed.</p>
+
+<p>To make it easier for users to find and manage their subscriptions from inside your app, 
+we recommend that you offer a "View My Subscriptions" or "Manage Subscriptions" option in
+your UI that directly loads your app's product page in the Play Store app.</p>
+
+<p>To do this, create an intent with the <a 
+href="{@docRoot}reference/android/content/Intent.html#ACTION_VIEW">ACTION_VIEW</a>
+action and include the <code>market://</code> URI (rather than the <code>http://</code>
+URI) of your app's details page. Here’s an example:</p>
+
+<pre style="pretty-print">Intent intent = new Intent(Intent.ACTION_VIEW);
+intent.setData(Uri.parse("market://details?id=com.example.app"));
+startActivity(intent);</pre>
+
+<p>For more information, see 
+  <a href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a>.</p>
+
+<h3 id="purchase-state-changes">Recurring billing and changes in purchase state</h3>
+
+<p>Google Play notifies your app when the user completes the purchase of a
+subscription, but the purchase state does not change over time, provided that
+recurring billing takes place successfully. Google Play does not notify your app
+of a purchase state change <em>until the subscription expires because of
+non-payment or user cancellation</em>. </p>
+
+<p>Over the life of a subscription, your app does not need to initiate any
+recurring billing events &mdash; those are all handled by Google Play and they
+are transparent to your application if billing is successful.</p>
+
+<h3 id="modifying">Modifying your app for subscriptions</h3>
+
+<p>For subscriptions, you make the same types of modifications to your app as
+are described in <a
+href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-implement">
+Modifying your Application Code</a>.</p>
+
+<p>Note that, in your UI that lets users view and select subscriptions for
+purchase, you should add logic to check for purchased subscriptions and validate
+them. Your UI should not present subscriptions if the user has already purchased
+them.</p>
+
+<h2 id="administering">Administering Subscriptions</h2>
+
+<p>To create and manage subscriptions, you use the tools in the Developer
+Console, just as for other in-app products.</p>
+
+<p>At the Developer Console, you can configure these attributes for each
+subscription product:</p>
+
+<ul>
+<li>Purchase Type: always set to “subscription”</li>
+<li>Subscription ID:  An identifier for the subscription</li>
+<li>Publishing State: Unpublished/Published</li>
+<li>Language: The default language for displaying the subscription</li>
+<li>Title: The title of the subscription product</li>
+<li>Description: Details that tell the user about the subscription</li>
+<li>Price: USD price of subscription per recurrence</li>
+<li>Recurrence: monthly or yearly</li>
+<li>Additional currency pricing (can be auto-filled)</li>
+</ul>
+
+<p>For details, please see <a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering
+In-app Billing</a>.</p>
+
+
+<h2 id="play-dev-api">Google Play Android Developer API</h2>
+
+<p>Google Play offers an HTTP-based API that you can use to remotely query the
+validity of a specific subscription at any time or cancel a subscription. The
+API is designed to be used from your backend servers as a way of securely
+managing subscriptions, as well as extending and integrating subscriptions with
+other services.</p>
+
+<h3 id="using">Using the API</h3>
+
+<p>To use the API, you must first register a project at the <a
+href="https://code.google.com/apis/console">Google APIs Console</a> and receive
+a Client ID and shared secret that  your app will present when calling the
+Google Play Android Developer API. All calls to the API are authenticated with
+OAuth 2.0.</p>
+
+<p>Once your app is registered, you can access the API directly, using standard
+HTTP methods to retrieve and manipulate resources, or you can use the Google
+APIs Client Libraries, which are extended to support the API.</p>
+
+<p>The Google Play Android Developer API is built on a RESTful design that uses
+HTTP and JSON, so any standard web stack can send requests and parse the
+responses. However, if you don’t want to send HTTP requests and parse responses
+manually, you can access the API using the client libraries, which provide
+better language integration, improved security, and support for making calls
+that require user authorization.</p>
+
+<p>For more information about the API and how to access it through the Google
+APIs Client Libraries, see the documentation at:</p> 
+
+<p style="margin-left:1.5em;"><a
+href="https://developers.google.com/android-publisher/v1/">https://developers.
+google.com/android-publisher/v1/</a></p>
+
+<h3 id="quota">Quota</h3>
+
+<p>Applications using the Google Play Android Developer API are limited to an
+initial courtesy usage quota of <strong>15000 requests per day</strong> (per
+application). This should provide enough access for normal
+subscription-validation needs, assuming that you follow the recommendation in
+this section.</p>
+
+<p>If you need to request a higher limit for your application, please use the
+“Request more” link in the <a
+href="https://code.google.com/apis/console/#:quotas">Google APIs Console</a>.
+Also, please read the section below on design best practices for minimizing your
+use of the API.</p>
+
+<h3 id="auth">Authorization</h3>
+
+<p>Calls to the Google Play Android Developer API require authorization. Google
+uses the OAuth 2.0 protocol to allow authorized applications to access user
+data. To learn more, see <a
+href="https://developers.google.com/android-publisher/authorization">Authorization</a>
+in the Google Play Android Developer API documentation.</p>
+
+<h3 id="practices">Using the API efficiently</h3>
+
+<p>Access to the Google Play Android Developer API is regulated to help ensure a
+high-performance environment for all applications that use it. While you can
+request a higher daily quota for your application, we highly recommend that you
+minimize your access using the technique(s) below. </p>
+
+<ul>
+  <li><em>Store subscription expiry on your servers</em> &mdash; your servers
+  should use the Google Play Android Developer API to query the expiration date
+  for new subscription tokens, then store the expiration date locally. This allows
+  you to check the status of subscriptions only at or after the expiration (see
+  below). </li>
+  <li><em>Cache expiration and purchaseState</em> &mdash; If your app contacts
+  your backend servers at runtime to verify subscription validity, your server
+  should cache the expiration and purchaseState to ensure the fastest possible
+  response (and best experience) for the user.</li>
+  <li><em>Query for subscription status only at expiration</em> &mdash; Once your
+  server has retrieved the expiration date of subscription tokens, it should not
+  query the Google Play servers for the subscription status again until the
+  subscription is reaching or has passed the expiration date. Typically, your
+  servers would run a batch query each day to check the status of
+  <em>expiring</em> subscriptions, then update the database. Note that: 
+  <ul>
+    <li>Your servers should not query all subscriptions every day</li>
+    <li>Your servers should never query subscription status dynamically, based on
+    individual requests from your Android application. </li>
+  </ul>
+  </li>
+</ul>
+
+<p>By following those general guidelines, your implementation will offer the
+best possible performance for users and minimize use of the Google Play Android
+Developer API.</p>
+
diff --git a/docs/html/guide/google/play/billing/billing_testing.jd b/docs/html/guide/google/play/billing/billing_testing.jd
new file mode 100755
index 0000000..e2d4a01
--- /dev/null
+++ b/docs/html/guide/google/play/billing/billing_testing.jd
@@ -0,0 +1,293 @@
+page.title=Testing In-app Billing
+parent.title=In-app Billing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#billing-testing-static">Testing in-app purchases with static responses</a></li>
+    <li><a href="#billing-testing-real">Testing in-app purchases using your own product IDs</a></li>
+
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
+    Application</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+</div>
+</div>
+
+<p>The Google Play publisher site provides several tools that help you test your in-app billing
+implementation before it is published. You can use these tools to create test accounts and purchase
+special reserved items that send static billing responses to your application.</p>
+
+<p>To test in-app billing in an application you must install the application on an Android-powered
+device. You cannot use the Android emulator to test in-app billing.  The device you use for testing
+must run a standard version of the Android 1.6 or later platform (API level 4 or higher), and have
+the most current version of the Google Play application installed. If a device is not running the
+most current Google Play application, your application won't be able to send in-app billing
+requests to Google Play. For general information about how to set up a device for use in
+developing Android applications, see <a href="{@docRoot}tools/device.html">Using Hardware
+Devices</a>.</p>
+
+<p>The following section shows you how to set up and use the in-app billing test tools.</p>
+
+<h2 id="billing-testing-static">Testing in-app purchases with static responses</h2>
+
+<p>We recommend that you first test your in-app billing implementation using static responses from
+Google Play. This enables you to verify that your application is handling the primary Google
+Play responses correctly and that your application is able to verify signatures correctly.</p>
+
+<p>To test your implementation with static responses, you make an in-app billing request using a
+special item that has a reserved product ID. Each reserved product ID returns a specific static
+response from Google Play. No money is transferred when you make in-app billing requests with the
+reserved product IDs. Also, you cannot specify the form of payment when you make a billing request
+with a reserved product ID. Figure 1 shows the checkout flow for the reserved item that has the
+product ID android.test.purchased.</p>
+
+<img src="{@docRoot}images/billing_test_flow.png" height="381" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Wallet flow for the special reserved item android.test.purchased.
+</p>
+
+<p>You do not need to list the reserved products in your application's product list. Google Play
+already knows about the reserved product IDs. Also, you do not need to upload your application to
+the publisher site to perform static response tests with the reserved product IDs. You can simply
+install your application on a device, log into the device, and make billing requests using the
+reserved product IDs.</p>
+
+<p>There are four reserved product IDs for testing static in-app billing responses:</p>
+
+<ul>
+  <li><strong>android.test.purchased</strong>
+    <p>When you make an in-app billing request with this product ID, Google Play responds as
+    though you successfully purchased an item. The response includes a JSON string, which contains
+    fake purchase information (for example, a fake order ID). In some cases, the JSON string is
+    signed and the response includes the signature so you can test your signature verification
+    implementation using these responses.</p>
+  </li>
+  <li><strong>android.test.canceled</strong>
+    <p>When you make an in-app billing request with this product ID Google Play responds as
+    though the purchase was canceled. This can occur when an error is encountered in the order
+    process, such as an invalid credit card, or when you cancel a user's order before it is
+    charged.</p>
+  </li>
+  <li><strong>android.test.refunded</strong>
+    <p>When you make an in-app billing request with this product ID, Google Play responds as
+    though the purchase was refunded. Refunds cannot be initiated through Google Play's in-app
+    billing service. Refunds must be initiated by you (the merchant). After you process a refund
+    request through your Google Wallet account, a refund message is sent to your application by
+    Google Play. This occurs only when Google Play gets notification from Google Wallet that
+    a refund has been made. For more information about refunds, see <a
+    href="{@docRoot}guide/google/play/billing/billing_overview.html#billing-action-notify">Handling
+    IN_APP_NOTIFY messages</a> and <a
+    href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
+    Pricing</a>.</p>
+  </li>
+  <li><strong>android.test.item_unavailable</strong>
+    <p>When you make an in-app billing request with this product ID, Google Play responds as
+    though the item being purchased was not listed in your application's product list.</p>
+  </li>
+</ul>
+
+<p>In some cases, the reserved items may return signed static responses, which lets you test
+signature verification in your application. To test signature verification with the special reserved
+product IDs, you may need to set up <a
+href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a> or
+upload your application as a unpublished draft application. Table 1 shows you the conditions under
+which static responses are signed.</p>
+
+<p class="table-caption" id="static-responses-table"><strong>Table 1.</strong>
+Conditions under which static responses are signed.</p>
+
+<table>
+<tr>
+<th>Application ever been published?</th>
+<th>Draft application uploaded and unpublished?</th>
+<th>User who is running the application</th>
+<th>Static response signature</th>
+</tr>
+
+<tr>
+<td>No</td>
+<td>No</td>
+<td>Any</td>
+<td>Unsigned</td>
+</tr>
+
+<tr>
+<td>No</td>
+<td>No</td>
+<td>Developer</td>
+<td>Signed</td>
+</tr>
+
+<tr>
+<td>Yes</td>
+<td>No</td>
+<td>Any</td>
+<td>Unsigned</td>
+</tr>
+
+<tr>
+<td>Yes</td>
+<td>No</td>
+<td>Developer</td>
+<td>Signed</td>
+</tr>
+
+<tr>
+<td>Yes</td>
+<td>No</td>
+<td>Test account</td>
+<td>Signed</td>
+</tr>
+
+<tr>
+<td>Yes</td>
+<td>Yes</td>
+<td>Any</td>
+<td>Signed</td>
+</tr>
+
+</table>
+
+<p>To make an in-app billing request with a reserved product ID, you simply construct a normal
+<code>REQUEST_PURCHASE</code> request, but instead of using a real product ID from your
+application's product list you use one of the reserved product IDs.</p>
+
+<p>To test your application using the reserved product IDs, follow these steps:</p>
+
+<ol>
+  <li><strong>Install your application on an Android-powered device.</strong>
+    <p>You cannot use the emulator to test in-app billing; you must install your application on a
+    device to test in-app billing.</p>
+    <p>To learn how to install an application on a device, see <a
+    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
+    device</a>.</p>
+  </li>
+  <li><strong>Sign in to your device with your developer account.</strong>
+    <p>You do not need to use a test account if you are testing only with the reserved product
+    IDs.</p>
+  </li>
+  <li><strong>Verify that your device is running a supported version of the Google Play
+  application or the MyApps application.</strong>
+    <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
+    the MyApps application. If your device is running any other version of Android, in-app billing
+    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
+    version of the Google Play application, see <a
+    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
+    Play</a>.</p>
+  </li>
+  <li><strong>Run your application and purchase the reserved product IDs.</strong></li>
+</ol>
+
+<p class="note"><strong>Note</strong>: Making in-app billing requests with the reserved product IDs
+overrides the usual Google Play production system. When you send an in-app billing request for a
+reserved product ID, the quality of service will not be comparable to the production
+environment.</p>
+
+<h2 id="billing-testing-real">Testing In-app Purchases Using Your Own Product IDs</h2>
+
+<p>After you finish your static response testing, and you verify that signature verification is
+working in your application, you can test your in-app billing implementation by making actual in-app
+purchases. Testing real in-app purchases enables you to test the end-to-end in-app billing
+experience, including the actual responses from Google Play and the actual checkout flow that
+users will experience in your application.</p>
+
+<p class="note"><strong>Note</strong>: You do not need to publish your application to do end-to-end
+testing. You only need to upload your application as a draft application to perform end-to-end
+testing.</p>
+
+<p>To test your in-app billing implementation with actual in-app purchases, you will need to
+register at least one test account on the Google Play publisher site. You cannot use your
+developer account to test the complete in-app purchase process because Google Wallet does not let
+you buy items from yourself. If you have not set up test accounts before, see <a
+href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">Setting up test
+accounts</a>.</p>
+
+<p>Also, a test account can purchase an item in your product list only if the item is published. The
+application does not need to be published, but the item does need to be published.</p>
+
+<p>When you use a test account to purchase items, the test account is billed through Google Wallet
+and your Google Wallet Merchant account receives a payout for the purchase. Therefore, you may
+want to refund purchases that are made with test accounts, otherwise the purchases will show up as
+actual payouts to your merchant account.</p>
+
+<p>To test your in-app billing implementation with actual purchases, follow these steps:</p>
+
+<ol>
+  <li><strong>Upload your application as a draft application to the publisher site.</strong>
+    <p>You do not need to publish your application to perform end-to-end testing with real product
+    IDs; you only need to upload your application as a draft application. However, you must sign
+    your application with your release key before you upload it as a draft application. Also, the
+    version number of the uploaded application must match the version number of the application you
+    load to your device for testing. To learn how to upload an application to Google Play, see
+    <a href="http://market.android.com/support/bin/answer.py?answer=113469">Uploading
+    applications</a>.</p>
+  </li>
+  <li><strong>Add items to the application's product list.</strong>
+    <p>Make sure that you publish the items (the application can remain unpublished). See <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-catalog">Creating a product
+    list</a> to learn how to do this.</p>
+  </li>
+  <li><strong>Install your application on an Android-powered device.</strong>
+    <p>You cannot use the emulator to test in-app billing; you must install your application on a
+    device to test in-app billing.</p>
+    <p>To learn how to install an application on a device, see <a
+    href="{@docRoot}tools/building/building-cmdline.html#RunningOnDevice">Running on a
+    device</a>.</p>
+  </li>
+ <li><strong>Make one of your test accounts the primary account on your device.</strong>
+    <p>To perform end-to-end testing of in-app billing, the primary account on your device must be
+    one of the <a
+    href="{@docRoot}guide/google/play/billing/billing_admin.html#billing-testing-setup">test accounts</a>
+    that you registered on the Google Play site. If the primary account on your device is not a
+    test account, you must do a factory reset of the device and then sign in with one of your test
+    accounts. To perform a factory reset, do the following:</p>
+    <ol>
+      <li>Open Settings on your device.</li>
+      <li>Touch <strong>Privacy</strong>.</li>
+      <li>Touch <strong>Factory data reset</strong>.</li>
+      <li>Touch <strong>Reset phone</strong>.</li>
+      <li>After the phone resets, be sure to sign in with one of your test accounts during the
+      device setup process.</li>
+    </ol>
+  </li>
+  <li><strong>Verify that your device is running a supported version of the Google Play
+  application or the MyApps application.</strong>
+    <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
+    the MyApps application. If your device is running any other version of Android, in-app billing
+    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
+    version of the Google Play application, see <a
+    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
+    Play</a>.</p>
+  </li>
+  <li><strong>Make in-app purchases in your application.</strong></li>
+</ol>
+
+<p class="note"><strong>Note:</strong> The only way to change the primary account on a device is to
+do a factory reset, making sure you log on with your primary account first.</p>
+
+<p>When you are finished testing your in-app billing implementation, you are ready to
+publish your application on Google Play. You can follow the normal steps for <a
+href="{@docRoot}tools/publishing/preparing.html">preparing</a>, <a
+href="{@docRoot}tools/publishing/app-signing.html">signing</a>, and <a
+href="{@docRoot}distribute/googleplay/publish/preparing.html">publishing on Google Play</a>.
+</p>
+
diff --git a/docs/html/guide/google/play/billing/index.jd b/docs/html/guide/google/play/billing/index.jd
new file mode 100755
index 0000000..a33b199
--- /dev/null
+++ b/docs/html/guide/google/play/billing/index.jd
@@ -0,0 +1,116 @@
+page.title=In-app Billing
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>Topics</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and
+    Design</a></li>    <li><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+    Billing</a></li>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering In-app
+    Billing</a></li>
+  </ol>
+  <h2>Reference</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+    Reference</a></li>
+  </ol>
+  <h2>Downloads</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">Sample
+    Application</a></li>
+  </ol>  
+</div>
+</div>
+
+<p>In-app Billing is a Google Play service that lets you sell digital content from inside
+your applications. You can use the service to sell a wide range of content, including downloadable
+content such as media files or photos, virtual content such as game levels or potions, premium services 
+and features, and more. You can use In-app Billing to sell products as</p>
+
+<ul>
+<li>Standard in-app products (one-time billing), or</li>
+<li>Subscriptions, (recurring, automated billing)</li>
+</ul>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h2>Support for subscriptions <span class="new">New!</span></h2>
+  <p>In-app Billing now lets you sell subscriptions in your apps, as well as standard in-app products. 
+  For details on how to sell subscriptions to content, services, and features, see the
+  <a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a> documentation.</p>
+</div>
+</div>
+
+<p>When you use the in-app billing service to sell an item,
+whether it's an in-app product or a subscription, Google Play
+handles all checkout details so your application never has to directly process
+any financial transactions. Google Play uses the same checkout backend service as
+is used for application purchases, so your users experience a consistent and
+familiar purchase flow (see figure 1). Also, the transaction fee for in-app
+purchases is the same as the transaction fee for application purchases
+(30%).</p>
+
+<p>Any application that you publish through Google Play can implement In-app Billing. No special
+account or registration is required other than an Android Market publisher account and a Google
+Wallet Merchant account. Also, because the service uses no dedicated framework APIs, you can add
+in-app billing to any application that uses a minimum API level of 4 or higher.</p>
+
+<p>To help you integrate in-app billing into your application, the Android SDK
+provides a sample application that demonstrates how to sell standard in-app
+products and subscriptions from inside an app. The sample contains examples of
+billing-related classes you can use to implement in-app billing in your
+application. It also contains examples of the database, user interface, and
+business logic you might use to implement in-app billing.</p>
+
+<p class="caution"><strong>Important</strong>: Although the sample application is a working example
+of how you can implement in-app billing, we <em>strongly recommend</em> that you modify and
+obfuscate the sample code before you use it in a production application. For more information, see
+<a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security and Design</a>.</p>
+
+<img src="{@docRoot}images/billing_checkout_flow.png" height="382" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Applications initiate in-app billing requests through their own UI
+  (first screen). Google Play responds to the request by providing the checkout user interface
+  (middle screen). When checkout is complete, the application resumes.
+</p>
+
+<p>To learn more about Google Play's in-app billing service and start integrating it into your
+applications, read the following documents:</p>
+
+<dl>
+  <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Overview of In-app
+  Billing</a></strong></dt>
+    <dd>Learn how the service works and what a typical in-app billing implementation looks
+    like.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_integrate.html">Implementing
+  In-app Billing</a></strong></dt>
+    <dd>Use this step-by-step guide to start incorporating in-app billing into your
+    application. The instructions apply to both one-time and subscription purchases.</dd>
+    
+    <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_subscriptions.html">Subscriptions</a></strong></dt>
+    <dd>Learn how subscriptions work and how to implement support for them in your app.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_best_practices.html">Security
+  and Design</a></strong></dt>
+    <dd>Review these best practices to help ensure that your in-app billing implementation is
+    secure and well designed.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_testing.html">Testing In-app
+  Billing</a></strong></dt>
+    <dd>Understand how the in-app billing test tools work and learn how to test your in-app billing
+    implementation.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_admin.html">Administering
+  In-app Billing</a></strong></dt>
+    <dd>Learn how to set up your product list, register test accounts, and handle refunds.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/billing/billing_reference.html">In-app Billing
+  Reference</a></strong></dt>
+    <dd>Get detailed information about Google Play response codes and the in-app billing
+    interface.</dd>
+</dl>
+
diff --git a/docs/html/guide/google/play/expansion-files.jd b/docs/html/guide/google/play/expansion-files.jd
new file mode 100644
index 0000000..62ca1e2
--- /dev/null
+++ b/docs/html/guide/google/play/expansion-files.jd
@@ -0,0 +1,1270 @@
+page.title=APK Expansion Files
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Quickview</h2>
+<ul>
+  <li>Recommended for most apps that exceed the 50MB APK limit</li>
+  <li>You can provide up to 4GB of additional data for each APK</li>
+  <li>Google Play hosts and serves the expansion files at no charge</li>
+  <li>The files can be any file type you want and are saved to the device's shared storage</li>
+</ul>
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Overview">Overview</a>
+    <ol>
+      <li><a href="#Filename">File name format</a></li>
+      <li><a href="#StorageLocation">Storage location</a></li>
+      <li><a href="#DownloadProcess">Download process</a></li>
+      <li><a href="#Checklist">Development checklist</a></li>
+    </ol>
+  </li>
+  <li><a href="#Rules">Rules and Limitations</a></li>
+  <li><a href="#Downloading">Downloading the Expansion Files</a>
+    <ol>
+      <li><a href="#AboutLibraries">About the Downloader Library</a></li>
+      <li><a href="#Preparing">Preparing to use the Downloader Library</a></li>
+      <li><a href="#Permissions">Declaring user permissions</a></li>
+      <li><a href="#DownloaderService">Implementing the downloader service</a></li>
+      <li><a href="#AlarmReceiver">Implementing the alarm receiver</a></li>
+      <li><a href="#Download">Starting the download</a></li>
+      <li><a href="#Progress">Receiving download progress</a></li>
+    </ol>
+  </li>
+  <li><a href="#ExpansionPolicy">Using APKExpansionPolicy</a></li>
+  <li><a href="#ReadingTheFile">Reading the Expansion File</a>
+    <ol>
+      <li><a href="#GettingFilenames">Getting the file names</a></li>
+      <li><a href="#ZipLib">Using the APK Expansion Zip Library</a></li>
+    </ol>
+  </li>
+  <li><a href="#Testing">Testing Your Expansion Files</a>
+    <ol>
+      <li><a href="#TestingReading">Testing file reads</a></li>
+      <li><a href="#TestingReading">Testing file downloads</a></li>
+    </ol>
+  </li>
+  <li><a href="#Updating">Updating Your Application</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+  <li><a href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a></li>
+  <li><a href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple
+APK Support</a></li>
+</ol>
+</div>
+</div>
+
+
+
+<p>Google Play currently requires that your APK file be no more than 50MB. For most
+applications, this is plenty of space for all the application's code and assets.
+However, some apps need more space for high-fidelity graphics, media files, or other large assets.
+Previously, if your app exceeded 50MB, you had to host and download the additional resources
+yourself when the user opens the app. Hosting and serving the extra files can be costly, and the
+user experience is often less than ideal. To make this process easier for you and more pleasant
+for users, Google Play allows you to attach two large expansion files that supplement your
+APK.</p>
+
+<p>Google Play hosts the expansion files for your application and serves them to the device at
+no cost to you. The expansion files are saved to the device's shared storage location (the
+SD card or USB-mountable partition; also known as the "external" storage) where your app can access
+them. On most devices, Google Play downloads the expansion file(s) at the same time it
+downloads the APK, so your application has everything it needs when the user opens it for the
+first time. In some cases, however, your application must download the files from Google Play
+when your application starts.</p>
+
+
+
+<h2 id="Overview">Overview</h2>
+
+<p>Each time you upload an APK using the Google Play Android Developer Console, you have the option to
+add one or two expansion files to the APK. Each file can be up to 2GB and it can be any format you
+choose, but we recommend you use a compressed file to conserve bandwidth during the download.
+Conceptually, each expansion file plays a different role:</p>
+
+<ul>
+  <li>The <strong>main</strong> expansion file is the
+primary expansion file for additional resources required by your application.</li>
+  <li>The <strong>patch</strong> expansion file is optional and intended for small updates to the
+main expansion file.</li>
+</ul>
+
+<p>While you can use the two expansion files any way you wish, we recommend that the main
+expansion file deliver the primary assets and should rarely if ever updated; the patch expansion
+file should be smaller and serve as a “patch carrier,” getting updated with each major
+release or as necessary.</p>
+
+<p>However, even if your application update requires only a new patch expansion file, you still must
+upload a new APK with an updated <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
+versionCode}</a> in the manifest. (The
+Developer Console does not allow you to upload an expansion file to an existing APK.)</p>
+
+<p class="note"><strong>Note:</strong> The patch expansion file is semantically the same as the
+main expansion file&mdash;you can use each file any way you want. The system does
+not use the patch expansion file to perform patching for your app. You must perform patching
+yourself or be able to distinguish between the two files.</p>
+
+
+
+<h3 id="Filename">File name format</h3>
+
+<p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). Regardless of
+the file type, Google Play considers them opaque binary blobs and renames the files
+using the following scheme:</p>
+
+<pre class="classic no-pretty-print">
+[main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
+</pre>
+
+<p>There are three components to this scheme:</p>
+
+<dl>
+  <dt>{@code main} or {@code patch}</dt>
+    <dd>Specifies whether the file is the main or patch expansion file. There can be
+only one main file and one patch file for each APK.</dd>
+  <dt>{@code &lt;expansion-version&gt;}</dt>
+    <dd>This is an integer that matches the version code of the APK with which the expansion is
+<em>first</em> associated (it matches the application's <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
+value).
+    <p>"First" is emphasized because although the Developer Console allows you to
+re-use an uploaded expansion file with a new APK, the expansion file's name does not change&mdash;it
+retains the version applied to it when you first uploaded the file.</p></dd>
+  <dt>{@code &lt;package-name&gt;}</dt> 
+    <dd>Your application's Java-style package name.</dd>
+</dl>
+
+<p>For example, suppose your APK version is 314159 and your package name is com.example.app. If you
+upload a main expansion file, the file is renamed to:</p>
+<pre class="classic no-pretty-print">main.314159.com.example.app.obb</pre>
+
+
+<h3 id="StorageLocation">Storage location</h3>
+
+<p>When Google Play downloads your expansion files to a device, it saves them to the system's
+shared storage location. To ensure proper behavior, you must not delete, move, or rename the
+expansion files. In the event that your application must perform the download from Google Play
+itself, you must save the files to the exact same location.</p>
+
+<p>The specific location for your expansion files is:</p>
+
+<pre class="classic no-pretty-print">
+&lt;shared-storage&gt;/Android/obb/&lt;package-name&gt;/
+</pre>
+
+<ul>
+  <li>{@code &lt;shared-storage&gt;} is the path to the shared storage space, available from
+{@link android.os.Environment#getExternalStorageDirectory()}.</li>
+  <li>{@code &lt;package-name&gt;} is your application's Java-style package name, available
+from {@link android.content.Context#getPackageName()}.</li>
+</ul>
+
+<p>For each application, there are never more than two expansion files in this directory.
+One is the main expansion file and the other is the patch expansion file (if necessary). Previous
+versions are overwritten when you update your application with new expansion files.</p>
+
+<p>If you must unpack the contents of your expansion files, <strong>do not</strong> delete the
+{@code .obb} expansion files afterwards and <strong>do not</strong> save the unpacked data
+in the same directory. You should save your unpacked files in the directory
+specified by {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}. However,
+if possible, it's best if you use an expansion file format that allows you to read directly from
+the file instead of requiring you to unpack the data. For example, we've provided a library
+project called the <a href="#ZipLib">APK Expansion Zip Library</a> that reads your data directly
+from the ZIP file.</p>
+
+<p class="note"><strong>Note:</strong> Unlike APK files, any files saved on the shared storage can
+be read by the user and other applications.</p>
+
+<p class="note"><strong>Tip:</strong> If you're packaging media files into a ZIP, you can use media
+playback calls on the files with offset and length controls (such as {@link
+android.media.MediaPlayer#setDataSource(FileDescriptor,long,long) MediaPlayer.setDataSource()} and
+{@link android.media.SoundPool#load(FileDescriptor,long,long,int) SoundPool.load()}) without the
+need to unpack your ZIP. In order for this to work, you must not perform additional compression on
+the media files when creating the ZIP packages. For example, when using the <code>zip</code> tool,
+you should use the <code>-n</code> option to specify the file suffixes that should not be
+compressed: <br/>
+<code>zip -n .mp4;.ogg main_expansion media_files</code></p>
+
+
+<h3 id="DownloadProcess">Download process</h3>
+
+<p>Most of the time, Google Play downloads and saves your expansion files at the same time it
+downloads the APK to the device. However, in some cases Google Play
+cannot download the expansion files or the user might have deleted previously downloaded expansion
+files. To handle these situations, your app must be able to download the files
+itself when the main activity starts, using a URL provided by Google Play.</p>
+
+<p>The download process from a high level looks like this:</p>
+
+<ol>
+  <li>User selects to install your app from Google Play.</li>
+  <li>If Google Play is able to download the expansion files (which is the case for most
+devices), it downloads them along with the APK.
+     <p>If Google Play is unable to download the expansion files, it downloads the
+APK only.</p>
+  </li>
+  <li>When the user launches your application, your app must check whether the expansion files are
+already saved on the device.
+    <ol>
+      <li>If yes, your app is ready to go.</li>
+      <li>If no, your app must download the expansion files over HTTP from Google Play. Your app
+must send a request to the Google Play client using the Google Play's <a
+href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service, which
+responds with the name, file size, and URL for each expansion file. With this information, you then
+download the files and save them to the proper <a href="#StorageLocation">storage location</a>.</li>
+    </ol>
+  </li>
+</ol>
+
+<p class="caution"><strong>Caution:</strong> It is critical that you include the necessary code to
+download the expansion files from Google Play in the event that the files are not already on the
+device when your application starts. As discussed in the following section about <a
+href="#Downloading">Downloading the Expansion Files</a>, we've made a library available to you that
+greatly simplifies this process and performs the download from a service with a minimal amount of
+code from you.</p>
+
+
+
+
+<h3 id="Checklist">Development checklist</h3>
+
+<p>Here's a summary of the tasks you should perform to use expansion files with your
+application:</p>
+
+<ol>
+  <li>First determine whether your application absolutely requires more than 50MB per installation.
+Space is precious and you should keep your total application size as small as possible. If your app
+uses more than 50MB in order to provide multiple versions of your graphic assets for multiple screen
+densities, consider instead publishing <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> in which each APK
+contains only the assets required for the screens that it targets.</li>
+  <li>Determine which application resources to separate from your APK and package them in a
+file to use as the main expansion file.
+    <p>Normally, you should only use the second patch expansion file when performing updates to
+the main expansion file. However, if your resources exceed the 2GB limit for the main
+expansion file, you can use the patch file for the rest of your assets.</p>
+  </li>
+  <li>Develop your application such that it uses the resources from your expansion files in the
+device's <a href="#StorageLocation">shared storage location</a>.
+    <p>Remember that you must not delete, move, or rename the expansion files.</p>
+    <p>If your application doesn't demand a specific format, we suggest you create ZIP files for 
+your expansion files, then read them using the <a href="#ZipLib">APK Expansion Zip
+Library</a>.</p>
+  </li>
+  <li>Add logic to your application's main activity that checks whether the expansion files
+are on the device upon start-up. If the files are not on the device, use Google Play's <a
+href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service to request URLs
+for the expansion files, then download and save them.
+    <p>To greatly reduce the amount of code you must write and ensure a good user experience
+during the download, we recommend you use the <a href="AboutLibraries">Downloader
+Library</a> to implement your download behavior.</p>
+    <p>If you build your own download service instead of using the library, be aware that you
+must not change the name of the expansion files and must save them to the proper
+<a href="#StorageLocation">storage location</a>.</p></li>
+</ol>
+
+<p>Once you've finished your application development, follow the guide to <a href="#Testing">Testing
+Your Expansion Files</a>.</p>
+
+
+
+
+
+
+<h2 id="Rules">Rules and Limitations</h2>
+
+<p>Adding APK expansion files is a feature available when you upload your application using the
+Developer Console. When uploading your application for the first time or updating an
+application that uses expansion files, you must be aware of the following rules and limitations:</p>
+
+<ol type="I">
+  <li>Each expansion file can be no more than 2GB.</li>
+  <li>In order to download your expansion files from Google Play, <strong>the user must have
+acquired your application from Google Play</strong>. Google Play will not
+provide the URLs for your expansion files if the application was installed by other means.</li>
+  <li>When performing the download from within your application, the URL that Google Play
+provides for each file is unique for every download and each one expires shortly after it is given
+to your application.</li>
+  <li>If you update your application with a new APK or upload <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> for the same
+application, you can select expansion files that you've uploaded for a previous APK. <strong>The
+expansion file's name does not change</strong>&mdash;it retains the version received by the APK to
+which the file was originally associated.</li>
+  <li>If you use expansion files in combination with <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">multiple APKs</a> in order to
+provide different expansion files for different devices, you still must upload separate APKs
+for each device in order to provide a unique  <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a>
+value and declare different <a href="{@docRoot}guide/google/play/filters.html">filters</a> for
+each APK.</li>
+  <li>You cannot issue an update to your application by changing the expansion files
+alone&mdash;<strong>you must upload a new APK</strong> to update your app. If your changes only
+concern the assets in your expansion files, you can update your APK simply by changing the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a> (and
+perhaps also the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code
+versionName}</a>).</p></li>
+  <li><strong>Do not save other data into your <code>obb/</code>
+directory</strong>. If you must unpack some data, save it into the location specified by {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
+  <li><strong>Do not delete or rename the {@code .obb} expansion file</strong> (unless you're
+performing an update). Doing so will cause Google Play (or your app itself) to repeatedly
+download the expansion file.</li>
+  <li>When updating an expansion file manually, you must delete the previous expansion file.</li>
+</ol>
+
+
+
+
+
+
+
+
+
+<h2 id="Downloading">Downloading the Expansion Files</h2>
+
+<p>In most cases, Google Play downloads and saves your expansion files to the device at the same
+time it installs or updates the APK. This way, the expansion files are available when your
+application launches for the first time. However, in some cases your app must download the
+expansion files itself by requesting them from a URL provided to you in a response
+from Google Play's <a
+href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service.</p>
+
+<p>The basic logic you need to download your expansion files is the following:</p>
+
+<ol>
+  <li>When your application starts, look for the expansion files on the <a
+href="#StorageLocation">shared storage location</a> (in the
+<code>Android/obb/&lt;package-name&gt;/</code> directory).
+    <ol type="a">
+      <li>If the expansion files are there, you're all set and your application can continue.</li>
+      <li>If the expansion files are <em>not</em> there:
+        <ol>
+          <li>Perform a request using Google Play's <a
+href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> to get your
+app's expansion file names, sizes, and URLs.</li> 
+          <li>Use the URLs provided by Google Play to download the expansion files and save
+the expansion files. You <strong>must</strong> save the files to the <a
+href="#StorageLocation">shared storage location</a>
+(<code>Android/obb/&lt;package-name&gt;/</code>) and use the exact file name provided
+by Google Play's response.
+            <p class="note"><strong>Note:</strong> The URL that Google Play provides for your
+expansion files is unique for every download and each one expires shortly after it is given to
+your application.</p>
+          </li>
+        </ol>
+      </li>
+    </ol>
+  </li>
+</ol>
+
+
+<p>If your application is free (not a paid app), then you probably haven't used the <a
+href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a> service. It's primarily
+designed for you to enforce
+licensing policies for your application and ensure that the user has the right to
+use your app (he or she rightfully paid for it on Google Play). In order to facilitate the
+expansion file functionality, the licensing service has been enhanced to provide a response
+to your application that includes the URL of your application's expansion files that are hosted
+on Google Play. So, even if your application is free for users, you need to include the
+License Verification Library (LVL) to use APK expansion files. Of course, if your application
+is free, you don't need to enforce license verification&mdash;you simply need the
+library to perform the request that returns the URL of your expansion files.</p>
+
+<p class="note"><strong>Note:</strong> Whether your application is free or not, Google Play
+returns the expansion file URLs only if the user acquired your application from Google Play.</p>
+
+<p>In addition to the LVL, you need a set of code that downloads the expansion files
+over an HTTP connection and saves them to the proper location on the device's shared storage.
+As you build this procedure into your application, there are several issues you should take into
+consideration:</p>
+
+<ul>
+  <li>The device might not have enough space for the expansion files, so you should check
+before beginning the download and warn the user if there's not enough space.</li>
+  <li>File downloads should occur in a background service in order to avoid blocking the user
+interaction and allow the user to leave your app while the download completes.</li>
+  <li>A variety of errors might occur during the request and download that you must
+gracefully handle.</li>
+  <li>Network connectivity can change during the download, so you should handle such changes and
+if interrupted, resume the download when possible.</li>
+  <li>While the download occurs in the background, you should provide a notification that
+indicates the download progress, notifies the user when it's done, and takes the user back to
+your application when selected.</li>
+</ul>
+
+
+<p>To simplify this work for you, we've built the <a href="#AboutLibraries">Downloader Library</a>,
+which requests the expansion file URLs through the licensing service, downloads the expansion files,
+performs all of the tasks listed above, and even allows your activity to pause and resume the
+download. By adding the Downloader Library and a few code hooks to your application, almost all the
+work to download the expansion files is already coded for you. As such, in order to provide the best
+user experience with minimal effort on your behalf, we recommend you use the Downloader Library to
+download your expansion files. The information in the following sections explain how to integrate
+the library into your application.</p>
+
+<p>If you'd rather develop your own solution to download the expansion files using the Google
+Play URLs, you must follow the <a href="{@docRoot}guide/google/play/licensing/index.html">Application
+Licensing</a> documentation to perform a license request, then retrieve the expansion file names,
+sizes, and URLs from the response extras. You should use the <a href="#ExpansionPolicy">{@code
+APKExpansionPolicy}</a> class (included in the License Verification Library) as your licensing
+policy, which captures the expansion file names, sizes, and URLs from the licensing service..</p>
+
+
+
+<h3 id="AboutLibraries">About the Downloader Library</h3>
+
+<p>To use APK expansion files with your application and provide the best user experience with
+minimal effort on your behalf, we recommend you use the Downloader Library that's included in the
+Google Market Apk Expansion package. This library downloads your expansion files in a
+background service, shows a user notification with the download status, handles network
+connectivity loss, resumes the download when possible, and more.</p>
+
+<p>To implement expansion file downloads using the Downloader Library, all you need to do is:</p>
+
+<ul>
+  <li>Extend a special {@link android.app.Service} subclass and {@link
+android.content.BroadcastReceiver} subclass that each require just a few
+lines of code from you.</li>
+  <li>Add some logic to your main activity that checks whether the expansion files have
+already been downloaded and, if not, invokes the download process and displays a
+progress UI.</li>
+  <li>Implement a callback interface with a few methods in your main activity that
+receives updates about the download progress.</li>
+</ul>
+
+<p>The following sections explain how to set up your app using the Downloader Library.</p>
+
+
+<h3 id="Preparing">Preparing to use the Downloader Library</h3>
+
+<p>To use the Downloader Library, you need to
+download two packages from the SDK Manager and add the appropriate libraries to your
+application.</p>
+
+<p>First, open the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>, expand
+<em>Extras</em> and download:</p>
+<ul>
+  <li><em>Google Market Licensing package</em></li>
+  <li><em>Google Market Apk Expansion package</em></li>
+</ul>
+
+<p>If you're using Eclipse, create a project for each library and add it to your app:</p>
+<ol>
+  <li>Create a new Library Project for the License Verification Library and Downloader
+Library. For each library:
+    <ol>
+      <li>Begin a new Android project.</li>
+      <li>Select <strong>Create project from existing
+source</strong> and choose the library from the {@code &lt;sdk&gt;/extras/google/} directory
+({@code market_licensing/} for the License Verification Library or {@code
+market_apk_expansion/downloader_library/} for the Downloader Library).</li>
+      <li>Specify a <em>Project Name</em> such as "Google Play License Library" and "Google Play
+Downloader
+Library"</li>
+      <li>Click <strong>Finish</strong>.</li>
+    </ol>
+<p class="note"><strong>Note:</strong> The Downloader Library depends on the License
+Verification Library. Be sure to add the License
+Verification Library to the Downloader Library's project properties (same process as
+steps 2 and 3 below).</p>
+  </li>
+  <li>Right-click the Android project in which you want to use APK expansion files and
+select <strong>Properties</strong>.</li>
+  <li>In the <em>Library</em> panel, click <strong>Add</strong> to select and add each of the
+libraries to your application.</li>
+</ol>
+
+<p>Or, from a command line, update your project to include the libraries:</p>
+<ol>
+  <li>Change directories to the <code>&lt;sdk&gt;/tools/</code> directory.</li>
+  <li>Execute <code>android update project</code> with the {@code --library} option to add both the
+LVL and the Downloader Library to your project. For example:
+<pre class="no-pretty-print">
+android update project --path ~/Android/MyApp \
+--library ~/android_sdk/extras/google/market_licensing \
+--library ~/android_sdk/extras/google/market_apk_expansion/downloader_library
+</pre>
+  </li>
+</ol>
+
+<p>With both the License Verification Library and Downloader Library added to your
+application, you'll be able to quickly integrate the ability to download expansion files from
+Google Play. The format that you choose for the expansion files and how you read them
+from the shared storage is a separate implementation that you should consider based on your
+application needs.</p>
+
+<p class="note"><strong>Tip:</strong> The Apk Expansion package includes a sample
+application
+that shows how to use the Downloader Library in an app. The sample uses a third library
+available in the Apk Expansion package called the APK Expansion Zip Library. If
+you plan on
+using ZIP files for your expansion files, we suggest you also add the APK Expansion Zip Library to
+your application. For more information, see the section below
+about <a href="#ZipLib">Using the APK Expansion Zip Library</a>.</p>
+
+
+
+<h3 id="Permissions">Declaring user permissions</h3>
+
+<p>In order to download the expansion files, the Downloader Library
+requires several permissions that you must declare in your application's manifest file. They
+are:</p>
+
+<pre>
+&lt;manifest ...>
+    &lt;!-- Required to access Google Play Licensing -->
+    &lt;uses-permission android:name="com.android.vending.CHECK_LICENSE" />
+
+    &lt;!-- Required to download files from Google Play -->
+    &lt;uses-permission android:name="android.permission.INTERNET" />
+
+    &lt;!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) -->
+    &lt;uses-permission android:name="android.permission.WAKE_LOCK" />
+
+    &lt;!-- Required to poll the state of the network connection and respond to changes -->
+    &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+
+    &lt;!-- Required to check whether Wi-Fi is enabled -->
+    &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
+
+    &lt;!-- Required to read and write the expansion files on shared storage -->
+    &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    ...
+&lt;/manifest>
+</pre>
+
+<p class="note"><strong>Note:</strong> By default, the Downloader Library requires API
+level 4, but the APK Expansion Zip Library requires API level 5.</p>
+
+
+<h3 id="DownloaderService">Implementing the downloader service</h3>
+
+<p>In order to perform downloads in the background, the Downloader Library provides its
+own {@link android.app.Service} subclass called {@code DownloaderService} that you should extend. In
+addition to downloading the expansion files for you, the {@code DownloaderService} also:</p>
+
+<ul>
+  <li>Registers a {@link android.content.BroadcastReceiver} that listens for changes to the
+device's network connectivity (the {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}
+broadcast) in order to pause the download when necessary (such as due to connectivity loss) and
+resume the download when possible (connectivity is acquired).</li>
+  <li>Schedules an {@link android.app.AlarmManager#RTC_WAKEUP} alarm to retry the download for
+cases in which the service gets killed.</li>
+  <li>Builds a custom {@link android.app.Notification} that displays the download progress and
+any errors or state changes.</li>
+  <li>Allows your application to manually pause and resume the download.</li>
+  <li>Verifies that the shared storage is mounted and available, that the files don't already exist,
+and that there is enough space, all before downloading the expansion files. Then notifies the user
+if any of these are not true.</li>
+</ul>
+
+<p>All you need to do is create a class in your application that extends the {@code
+DownloaderService} class and override three methods to provide specific application details:</p>
+
+<dl>
+  <dt>{@code getPublicKey()}</dt>
+    <dd>This must return a string that is the Base64-encoded RSA public key for your publisher
+account, available from the profile page on the Developer Console (see <a
+href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for Licensing</a>).</dd>
+  <dt>{@code getSALT()}</dt>
+    <dd>This must return an array of random bytes that the licensing {@code Policy} uses to
+create an <a
+href="{@docRoot}guide/google/play/licensing/adding-licensing.html#impl-Obfuscator">{@code
+Obfuscator}</a>. The salt ensures that your obfuscated {@link android.content.SharedPreferences}
+file in which your licensing data is saved will be unique and non-discoverable.</dd>
+  <dt>{@code getAlarmReceiverClassName()}</dt>
+    <dd>This must return the class name of the {@link android.content.BroadcastReceiver} in
+your application that should receive the alarm indicating that the download should be
+restarted (which might happen if the downloader service unexpectedly stops).</dd>
+</dl>
+
+<p>For example, here's a complete implementation of {@code DownloaderService}:</p>
+
+<pre>
+public class SampleDownloaderService extends DownloaderService {
+    // You must use the public key belonging to your publisher account
+    public static final String BASE64_PUBLIC_KEY = "YourLVLKey";
+    // You should also modify this salt
+    public static final byte[] SALT = new byte[] { 1, 42, -12, -1, 54, 98,
+            -100, -12, 43, 2, -8, -4, 9, 5, -106, -107, -33, 45, -1, 84
+    };
+
+    &#64;Override
+    public String getPublicKey() {
+        return BASE64_PUBLIC_KEY;
+    }
+
+    &#64;Override
+    public byte[] getSALT() {
+        return SALT;
+    }
+
+    &#64;Override
+    public String getAlarmReceiverClassName() {
+        return SampleAlarmReceiver.class.getName();
+    }
+}
+</pre>
+
+<p class="caution"><strong>Notice:</strong> You must update the {@code BASE64_PUBLIC_KEY} value
+to be the public key belonging to your publisher account. You can find the key in the Developer
+Console under your profile information. This is necessary even when testing
+your downloads.</p>
+
+<p>Remember to declare the service in your manifest file:</p>
+<pre>
+&lt;application ...>
+    &lt;service android:name=".SampleDownloaderService" />
+    ...
+&lt;/application>
+</pre>
+
+
+
+<h3 id="AlarmReceiver">Implementing the alarm receiver</h3>
+
+<p>In order to monitor the progress of the file downloads and restart the download if necessary, the
+{@code DownloaderService} schedules an {@link android.app.AlarmManager#RTC_WAKEUP} alarm that
+delivers an {@link android.content.Intent} to a {@link android.content.BroadcastReceiver} in your
+application. You must define the {@link android.content.BroadcastReceiver} to call an API
+from the Downloader Library that checks the status of the download and restarts
+it if necessary.</p>
+
+<p>You simply need to override the {@link android.content.BroadcastReceiver#onReceive
+onReceive()} method to call {@code
+DownloaderClientMarshaller.startDownloadServiceIfRequired()}.</p>
+
+<p>For example:</p>
+
+<pre>
+public class SampleAlarmReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) {
+        try {
+            DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent,
+                    SampleDownloaderService.class);
+        } catch (NameNotFoundException e) {
+            e.printStackTrace();
+        }      
+    }
+}
+</pre>
+
+<p>Notice that this is the class for which you must return the name
+in your service's {@code getAlarmReceiverClassName()} method (see the previous section).</p>
+
+<p>Remember to declare the receiver in your manifest file:</p>
+<pre>
+&lt;application ...>
+    &lt;receiver android:name=".SampleAlarmReceiver" />
+    ...
+&lt;/application>
+</pre>
+
+
+
+<h3 id="Download">Starting the download</h3>
+
+<p>The main activity in your application (the one started by your launcher icon) is
+responsible for verifying whether the expansion files are already on the device and initiating
+the download if they are not.</p>
+
+<p>Starting the download using the Downloader Library requires the following
+procedures:</p>
+
+<ol>
+  <li>Check whether the files have been downloaded.
+    <p>The Downloader Library includes some APIs in the {@code Helper} class to
+help with this process:</p>
+  <ul>
+    <li>{@code getExtendedAPKFileName(Context, c, boolean mainFile, int
+versionCode)}</li>
+    <li>{@code doesFileExist(Context c, String fileName, long fileSize)}</li>
+  </ul>
+    <p>For example, the sample app provided in the Apk Expansion package calls the
+following method in the activity's {@link android.app.Activity#onCreate onCreate()} method to check
+whether the expansion files already exist on the device:</p>
+<pre>
+boolean expansionFilesDelivered() {
+    for (XAPKFile xf : xAPKS) {
+        String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsBase, xf.mFileVersion);
+        if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))
+            return false;
+    }
+    return true;
+}        
+</pre>
+    <p>In this case, each {@code XAPKFile} object holds the version number and file size of a known
+expansion file and a boolean as to whether it's the main expansion file. (See the sample
+application's {@code SampleDownloaderActivity} class for details.)</p>
+    <p>If this method returns false, then the application must begin the download.</p>
+  </li>
+  <li>Start the download by calling the static method {@code
+DownloaderClientMarshaller.startDownloadServiceIfRequired(Context c, PendingIntent
+notificationClient, Class&lt;?> serviceClass)}.
+    <p>The method takes the following parameters:</p>
+    <ul>
+      <li><code>context</code>: Your application's {@link android.content.Context}.</li>
+      <li><code>notificationClient</code>: A {@link android.app.PendingIntent} to start your main
+activity. This is used in the {@link android.app.Notification} that the {@code DownloaderService}
+creates to show the download progress. When the user selects the notification, the system
+invokes the {@link android.app.PendingIntent} you supply here and should open the activity
+that shows the download progress (usually the same activity that started the download).</li>
+      <li><code>serviceClass</code>: The {@link java.lang.Class} object for your implementation of
+{@code DownloaderService}, required to start the service and begin the download if necessary.</li>
+    </ul>
+    <p>The method returns an integer that indicates
+whether or not the download is required. Possible values are:</p>
+    <ul>
+      <li>{@code NO_DOWNLOAD_REQUIRED}: Returned if the files already
+exist or a download is already in progress.</li>
+      <li>{@code LVL_CHECK_REQUIRED}: Returned if a license verification is
+required in order to acquire the expansion file URLs.</li>
+      <li>{@code DOWNLOAD_REQUIRED}: Returned if the expansion file URLs are already known,
+but have not been downloaded.</li>
+    </ul>
+    <p>The behavior for {@code LVL_CHECK_REQUIRED} and {@code DOWNLOAD_REQUIRED} are essentially the
+same and you normally don't need to be concerned about them. In your main activity that calls {@code
+startDownloadServiceIfRequired()}, you can simply check whether or not the response is {@code
+NO_DOWNLOAD_REQUIRED}. If the response is anything <em>other than</em> {@code NO_DOWNLOAD_REQUIRED},
+the Downloader Library begins the download and you should update your activity UI to
+display the download progress (see the next step). If the response <em>is</em> {@code
+NO_DOWNLOAD_REQUIRED}, then the files are available and your application can start.</p>
+    <p>For example:</p>
+<pre>
+&#64;Override
+public void onCreate(Bundle savedInstanceState) {
+    // Check if expansion files are available before going any further
+    if (!expansionFilesDelivered()) {
+        // Build an Intent to start this activity from the Notification
+        Intent notifierIntent = new Intent(this, MainActivity.getClass());
+        notifierIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
+                                Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        ...
+        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
+                notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
+        
+        // Start the download service (if required)
+        int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
+                        pendingIntent, SampleDownloaderService.class);
+        // If download has started, initialize this activity to show download progress
+        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
+            // This is where you do set up to display the download progress (next step)
+            ...
+            return;
+        } // If the download wasn't necessary, fall through to start the app
+    }
+    startApp(); // Expansion files are available, start the app
+}
+</pre>
+  </li>
+  <li>When the {@code startDownloadServiceIfRequired()} method returns anything <em>other
+than</em> {@code NO_DOWNLOAD_REQUIRED}, create an instance of {@code IStub} by
+calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class&lt;?>
+downloaderService)}. The {@code IStub} provides a binding between your activity to the downloader
+service such that your activity receives callbacks about the download progress.
+    <p>In order to instantiate your {@code IStub} by calling {@code CreateStub()}, you must pass it
+an implementation of the {@code IDownloaderClient} interface and your {@code DownloaderService}
+implementation. The next section about <a href="#Progress">Receiving download progress</a> discusses
+the {@code IDownloaderClient} interface, which you should usually implement in your {@link
+android.app.Activity} class so you can update the activity UI when the download state changes.</p>
+    <p>We recommend that you call {@code
+CreateStub()} to instantiate your {@code IStub} during your activity's {@link
+android.app.Activity#onCreate onCreate()} method, after {@code startDownloadServiceIfRequired()}
+starts the download. </p>
+    <p>For example, in the previous code sample for {@link android.app.Activity#onCreate
+onCreate()}, you can respond to the {@code startDownloadServiceIfRequired()} result like this:</p>
+<pre>
+        // Start the download service (if required)
+        int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
+                        pendingIntent, SampleDownloaderService.class);
+        // If download has started, initialize activity to show progress
+        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
+            // Instantiate a member instance of IStub
+            mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this,
+                    SampleDownloaderService.class);
+            // Inflate layout that shows download progress
+            setContentView(R.layout.downloader_ui);
+            return;
+        }
+</pre>
+
+    <p>After the {@link android.app.Activity#onCreate onCreate()} method returns, your activity
+receives a call to {@link android.app.Activity#onResume onResume()}, which is where you should then
+call {@code connect()} on the {@code IStub}, passing it your application's {@link
+android.content.Context}. Conversely, you should call
+{@code disconnect()} in your activity's {@link android.app.Activity#onStop onStop()} callback.</p>
+<pre>
+&#64;Override
+protected void onResume() {
+    if (null != mDownloaderClientStub) {
+        mDownloaderClientStub.connect(this);
+    }
+    super.onResume();
+}
+
+&#64;Override
+protected void onStop() {
+    if (null != mDownloaderClientStub) {
+        mDownloaderClientStub.disconnect(this);
+    }
+    super.onStop();
+}
+</pre>
+    <p>Calling {@code connect()} on the {@code IStub} binds your activity to the {@code
+DownloaderService} such that your activity receives callbacks regarding changes to the download
+state through the {@code IDownloaderClient} interface.</p>
+  </li>
+</ol>
+
+
+
+<h3 id="Progress">Receiving download progress</h3>
+
+<p>To receive updates regarding the download progress and to interact with the {@code
+DownloaderService}, you must implement the Downloader Library's {@code IDownloaderClient} interface.
+Usually, the activity you use to start the download should implement this interface in order to
+display the download progress and send requests to the service.</p>
+
+<p>The required interface methods for {@code IDownloaderClient} are:</p>
+
+<dl>
+  <dt>{@code onServiceConnected(Messenger m)}</dt>
+    <dd>After you instantiate the {@code IStub} in your activity, you'll receive a call to this
+method, which passes a {@link android.os.Messenger} object that's connected with your instance
+of {@code DownloaderService}. To send requests to the service, such as to pause and resume
+downloads, you must call {@code DownloaderServiceMarshaller.CreateProxy()} to receive the {@code
+IDownloaderService} interface connected to the service.
+    <p>A recommended implementation looks like this:</p>
+<pre>
+private IDownloaderService mRemoteService;
+...
+
+&#64;Override
+public void onServiceConnected(Messenger m) {
+    mRemoteService = DownloaderServiceMarshaller.CreateProxy(m);
+    mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger());
+}
+</pre>
+    <p>With the {@code IDownloaderService} object initialized, you can send commands to the
+downloader service, such as to pause and resume the download ({@code requestPauseDownload()}
+and {@code requestContinueDownload()}).</p>
+</dd>
+  <dt>{@code onDownloadStateChanged(int newState)}</dt>
+    <dd>The download service calls this when a change in download state occurs, such as the
+download begins or completes.
+      <p>The <code>newState</code> value will be one of several possible values specified in
+by one of the {@code IDownloaderClient} class's {@code STATE_*} constants.</p>
+      <p>To provide a useful message to your users, you can request a corresponding string
+for each state by calling {@code Helpers.getDownloaderStringResourceIDFromState()}. This
+returns the resource ID for one of the strings bundled with the Downloader
+Library. For example, the string "Download paused because you are roaming" corresponds to {@code
+STATE_PAUSED_ROAMING}.</p></dd>
+  <dt>{@code onDownloadProgress(DownloadProgressInfo progress)}</dt>
+    <dd>The download service calls this to deliver a {@code DownloadProgressInfo} object,
+which describes various information about the download progress, including estimated time remaining,
+current speed, overall progress, and total so you can update the download progress UI.</dd>
+</dl>
+<p class="note"><strong>Tip:</strong> For examples of these callbacks that update the download
+progress UI, see the {@code SampleDownloaderActivity} in the sample app provided with the
+Apk Expansion package.</p>
+
+<p>Some public methods for the {@code IDownloaderService} interface you might find useful are:</p>
+
+<dl>
+  <dt>{@code requestPauseDownload()}</dt>
+    <dd>Pauses the download.</dd>
+  <dt>{@code requestContinueDownload()}</dt>
+    <dd>Resumes a paused download.</dd>
+  <dt>{@code setDownloadFlags(int flags)}</dt>
+    <dd>Sets user preferences for network types on which its OK to download the files. The
+current implementation supports one flag, {@code FLAGS_DOWNLOAD_OVER_CELLULAR}, but you can add
+others. By default, this flag is <em>not</em> enabled, so the user must be on Wi-Fi to download
+expansion files. You might want to provide a user preference to enable downloads over
+the cellular network. In which case, you can call:
+<pre>
+mRemoteService.setDownloadFlags(IDownloaderService.FLAGS_DOWNLOAD_OVER_CELLULAR);
+</pre>
+</dd>
+</dl>
+
+
+
+
+<h2 id="ExpansionPolicy">Using APKExpansionPolicy</h2>
+
+<p>If you decide to build your own downloader service instead of using the Google Play
+<a href="#AboutLibraries">Downloader Library</a>, you should still use the {@code
+APKExpansionPolicy} that's provided in the License Verification Library. The {@code
+APKExpansionPolicy} class is nearly identical to {@code ServerManagedPolicy} (available in the
+Google Play License Verification Library) but includes additional handling for the APK expansion
+file response extras.</p>
+
+<p class="note"><strong>Note:</strong> If you <em>do use</em> the <a
+href="#AboutLibraries">Downloader Library</a> as discussed in the previous section, the
+library performs all interaction with the {@code APKExpansionPolicy} so you don't have to use
+this class directly.</p>
+
+<p>The class includes methods to help you get the necessary information about the available
+expansion files:</p>
+
+<ul>
+  <li>{@code getExpansionURLCount()}</li>
+  <li>{@code getExpansionURL(int index)}</li>
+  <li>{@code getExpansionFileName(int index)}</li>
+  <li>{@code getExpansionFileSize(int index)}</li>
+</ul>
+
+<p>For more information about how to use the {@code APKExpansionPolicy} when you're <em>not</em>
+using the <a
+href="#AboutLibraries">Downloader Library</a>, see the documentation for <a
+href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding Licensing to Your App</a>,
+which explains how to implement a license policy such as this one.</p>
+
+
+
+
+
+
+
+<h2 id="ReadingTheFile">Reading the Expansion File</h2>
+
+<p>Once your APK expansion files are saved on the device, how you read your files
+depends on the type of file you've used. As discussed in the <a href="#Overview">overview</a>, your
+expansion files can be any kind of file you
+want, but are renamed using a particular <a href="#Filename">file name format</a> and are saved to
+{@code &lt;shared-storage&gt;/Android/obb/&lt;package-name&gt;/}.</p>
+
+<p>Regardless of how you read your files, you should always first check that the external
+storage is available for reading. There's a chance that the user has the storage mounted to a
+computer over USB or has actually removed the SD card.</p>
+
+<p class="note"><strong>Note:</strong> When your application starts, you should always check whether
+the external storage space is available and readable by calling {@link
+android.os.Environment#getExternalStorageState()}. This returns one of several possible strings
+that represent the state of the external storage. In order for it to be readable by your
+application, the return value must be {@link android.os.Environment#MEDIA_MOUNTED}.</p>
+
+
+<h3 id="GettingFilenames">Getting the file names</h3>
+
+<p>As described in the <a href="#Overview">overview</a>, your APK expansion files are saved
+using a specific file name format:</p>
+
+<pre class="classic no-pretty-print">
+[main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
+</pre>
+
+<p>To get the location and names of your expansion files, you should use the
+{@link android.os.Environment#getExternalStorageDirectory()} and {@link
+android.content.Context#getPackageName()} methods to construct the path to your files.</p>
+
+<p>Here's a method you can use in your application to get an array containing the complete path
+to both your expansion files:</p>
+
+<pre>
+// The shared path to all app expansion files
+private final static String EXP_PATH = "/Android/obb/";
+
+static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) {
+    String packageName = ctx.getPackageName();
+    Vector&lt;String> ret = new Vector&lt;String>();
+    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
+        // Build the full path to the app's expansion files
+        File root = Environment.getExternalStorageDirectory();
+        File expPath = new File(root.toString() + EXP_PATH + packageName);
+
+        // Check that expansion file path exists
+        if (expPath.exists()) {
+            if ( mainVersion > 0 ) {
+                String strMainPath = expPath + File.separator + "main." +
+                        mainVersion + "." + packageName + ".obb";
+                File main = new File(strMainPath);
+                if ( main.isFile() ) {
+                        ret.add(strMainPath);
+                }
+            }
+            if ( patchVersion > 0 ) {
+                String strPatchPath = expPath + File.separator + "patch." +
+                        mainVersion + "." + packageName + ".obb";
+                File main = new File(strPatchPath);
+                if ( main.isFile() ) {
+                        ret.add(strPatchPath);
+                }
+            }
+        }
+    }
+    String[] retArray = new String[ret.size()];
+    ret.toArray(retArray);
+    return retArray;
+}
+</pre>
+
+<p>You can call this method by passing it your application {@link android.content.Context}
+and the desired expansion file's version.</p>
+
+<p>There are many ways you could determine the expansion file version number. One simple way is to
+save the version in a {@link android.content.SharedPreferences} file when the download begins, by
+querying the expansion file name with the {@code APKExpansionPolicy} class's {@code
+getExpansionFileName(int index)} method. You can then get the version code by reading the {@link
+android.content.SharedPreferences} file when you want to access the expansion
+file.</p>
+
+<p>For more information about reading from the shared storage, see the <a
+href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Data Storage</a>
+documentation.</p>
+
+
+
+<h3 id="ZipLib">Using the APK Expansion Zip Library</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h3>Reading media files from a ZIP</h3>
+  <p>If you're using your expansion files to store media files, a ZIP file still allows you to
+use Android media playback calls that provide offset and length controls (such as {@link
+android.media.MediaPlayer#setDataSource(FileDescriptor,long,long) MediaPlayer.setDataSource()} and
+{@link android.media.SoundPool#load(FileDescriptor,long,long,int) SoundPool.load()}). In order for
+this to work, you must not perform additional compression on the media files when creating the ZIP
+packages. For example, when using the <code>zip</code> tool, you should use the <code>-n</code>
+option to specify the file suffixes that should not be compressed:</p>
+<p><code>zip -n .mp4;.ogg main_expansion media_files</code></p>
+</div>
+</div>
+
+<p>The Google Market Apk Expansion package includes a library called the APK
+Expansion Zip Library (located in {@code
+&lt;sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
+helps you read your expansion
+files when they're saved as ZIP files. Using this library allows you to easily read resources from
+your ZIP expansion files as a virtual file system.</p>
+
+<p>The APK Expansion Zip Library includes the following classes and APIs:</p>
+
+<dl>
+  <dt>{@code APKExpansionSupport}</dt>
+    <dd>Provides some methods to access expansion file names and ZIP files:
+      
+      <dl style="margin-top:1em">
+        <dt>{@code getAPKExpansionFiles()}</dt> 
+          <dd>The same method shown above that returns the complete file path to both expansion
+files.</dd>
+        <dt>{@code getAPKExpansionZipFile(Context ctx, int mainVersion, int
+patchVersion)}</dt>
+          <dd>Returns a {@code ZipResourceFile} representing the sum of both the main file and
+patch file. That is, if you specify both the <code>mainVersion</code> and the
+<code>patchVersion</code>, this returns a {@code ZipResourceFile} that provides read access to
+all the data, with the patch file's data merged on top of the main file.</dd>
+      </dl>
+    </dd>
+    
+  <dt>{@code ZipResourceFile}</dt>
+    <dd>Represents a ZIP file on the shared storage and performs all the work to provide a virtual
+file system based on your ZIP files. You can get an instance using {@code
+APKExpansionSupport.getAPKExpansionZipFile()} or with the {@code ZipResourceFile} by passing it the
+path to your expansion file. This class includes a variety of useful methods, but you generally
+don't need to access most of them. A couple of important methods are:
+
+      <dl style="margin-top:1em">
+        <dt>{@code getInputStream(String assetPath)}</dt>
+          <dd>Provides an {@link java.io.InputStream} to read a file within the ZIP file. The
+<code>assetPath</code> must be the path to the desired file, relative to
+the root of the ZIP file contents.</dd>
+        <dt>{@code getAssetFileDescriptor(String assetPath)}</dt>
+          <dd>Provides an {@link android.content.res.AssetFileDescriptor} for a file within the
+ZIP file. The <code>assetPath</code> must be the path to the desired file, relative to
+the root of the ZIP file contents. This is useful for certain Android APIs that require  an {@link
+android.content.res.AssetFileDescriptor}, such as some {@link android.media.MediaPlayer} APIs.</dd>
+      </dl>
+    </dd>
+    
+  <dt>{@code APEZProvider}</dt>
+    <dd>Most applications don't need to use this class. This class defines a {@link
+android.content.ContentProvider} that marshals the data from the ZIP files through a content
+provider {@link android.net.Uri} in order to provide file access for certain Android APIs that
+expect {@link android.net.Uri} access to media files. For example, this is useful if you want to
+play a video with {@link android.widget.VideoView#setVideoURI VideoView.setVideoURI()}.</p></dd>
+</dl>
+
+<h4>Reading from a ZIP file</h4>
+
+<p>When using the APK Expansion Zip Library, reading a file from your ZIP usually requires the
+following:</p>
+
+<pre>
+// Get a ZipResourceFile representing a merger of both the main and patch files
+ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,
+        mainVersion, patchVersion);
+        
+// Get an input stream for a known file inside the expansion file ZIPs
+InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
+</pre>
+
+<p>The above code provides access to any file that exists in either your main expansion file or
+patch expansion file, by reading from a merged map of all the files from both files. All you
+need to provide the {@code getAPKExpansionFile()} method is your application {@code
+android.content.Context} and the version number for both the main expansion file and patch
+expansion file.</p>
+
+<p>If you'd rather read from a specific expansion file, you can use the {@code
+ZipResourceFile} constructor with the path to the desired expansion file:</p>
+
+<pre>
+// Get a ZipResourceFile representing a specific expansion file
+ZipResourceFile expansionFile = new ZipResourceFile(filePathToMyZip);
+
+// Get an input stream for a known file inside the expansion file ZIPs
+InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
+</pre>
+
+<p>For more information about using this library for your expansion files, look at
+the sample application's {@code SampleDownloaderActivity} class, which includes additional code to
+verify the downloaded files using CRC. Beware that if you use this sample as the basis for
+your own implementation, it requires that you <strong>declare the byte size of your expansion
+files</strong> in the {@code xAPKS} array.</p>
+
+
+
+
+<h2 id="Testing">Testing Your Expansion Files</h2>
+
+<p>Before publishing your application, there are two things you should test: Reading the
+expansion files and downloading the files.</p>
+
+
+<h3 id="TestingReading">Testing file reads</h3>
+
+<p>Before you upload your application to Google Play, you
+should test your application's ability to read the files from the shared storage. All you need to do
+is add the files to the appropriate location on the device shared storage and launch your
+application:</p>
+
+<ol>
+  <li>On your device, create the appropriate directory on the shared storage where Google
+Play will save your files.
+  <p>For example, if your package name is {@code com.example.android}, you need to create
+the directory {@code Android/obb/com.example.android/} on the shared storage space. (Plug in
+your test device to your computer to mount the shared storage and manually create this
+directory.)</p>
+  </li>
+  <li>Manually add the expansion files to that directory. Be sure that you rename your files to
+match the <a href="#Filename">file name format</a> that Google Play will use.
+  <p>For example, regardless of the file type, the main expansion file for the {@code
+com.example.android} application should be {@code main.0300110.com.example.android.obb}.
+The version code can be whatever value you want. Just remember:</p>
+  <ul>
+    <li>The main expansion file always starts with {@code main} and the patch file starts with
+{@code patch}.</li>
+    <li>The package name always matches that of the APK to which the file is attached on
+Google Play.
+  </ul>
+  </li>
+  <li>Now that the expansion file(s) are on the device, you can install and run your application to
+test your expansion file(s).</li>
+</ol>
+
+<p>Here are some reminders about handling the expansion files:</p>
+<ul>
+  <li><strong>Do not delete or rename</strong> the {@code .obb} expansion files (even if you unpack
+the data to a different location). Doing so will cause Google Play (or your app itself) to
+repeatedly download the expansion file.</li>
+  <li><strong>Do not save other data into your <code>obb/</code>
+directory</strong>. If you must unpack some data, save it into the location specified by {@link
+android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
+</ul>
+
+
+
+<h3 id="TestingReading">Testing file downloads</h3>
+
+<p>Because your application must sometimes manually download the expansion files when it first
+opens, it's important that you test this process to be sure your application can successfully query
+for the URLs, download the files, and save them to the device.</p>
+
+<p>To test your application's implementation of the manual download procedure, you must upload
+your application to Google Play as a "draft" to make your expansion files available for
+download:</p>
+
+<ol>
+  <li>Upload your APK and corresponding expansion files using the Google Play Developer
+Console.</li>
+  <li>Fill in the necessary application details (title, screenshots, etc.). You can come back and
+finalize these details before publishing your application.
+  <p>Click the <strong>Save</strong> button. <em>Do not click Publish.</em> This saves
+the application as a draft, such that your application is not published for Google Play users,
+but the expansion files are available for you to test the download process.</p></li>
+  <li>Install the application on your test device using the Eclipse tools or <a
+href="{@docRoot}tools/help/adb.html">{@code adb}</a>.</li>
+  <li>Launch the app.</li>
+</ol>
+
+<p>If everything works as expected, your application should begin downloading the expansion
+files as soon as the main activity starts.</p>
+
+
+
+
+<h2 id="Updating">Updating Your Application</h2>
+
+<p>One of the great benefits to using expansion files on Google Play is the ability to
+update your application without re-downloading all of the original assets. Because Google Play
+allows you to provide two expansion files with each APK, you can use the second file as a "patch"
+that provides updates and new assets. Doing so avoids the
+need to re-download the main expansion file which could be large and expensive for users.</p>
+
+<p>The patch expansion file is technically the same as the main expansion file and neither
+the Android system nor Google Play perform actual patching between your main and patch expansion
+files. Your application code must perform any necessary patches itself.</p>
+
+<p>If you use ZIP files as your expansion files, the <a href="#ZipLib">APK Expansion Zip
+Library</a> that's included with the Apk Expansion package includes the ability to merge
+your
+patch file with the main expansion file.</p>
+
+<p class="note"><strong>Note:</strong> Even if you only need to make changes to the patch
+expansion file, you must still update the APK in order for Google Play to perform an update.
+If you don't require code changes in the application, you should simply update the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a> in the
+manifest.</p>
+
+<p>As long as you don't change the main expansion file that's associated with the APK
+in the Developer Console, users who previously installed your application will not
+download the main expansion file. Existing users receive only the updated APK and the new patch
+expansion file (retaining the previous main expansion file).</p>
+
+<p>Here are a few issues to keep in mind regarding updates to expansion files:</p>
+
+<ul>
+  <li>There can be only two expansion files for your application at a time. One main expansion
+file and one patch expansion file. During an update to a file, Google Play deletes the
+previous version (and so must your application when performing manual updates).</li>
+  <li>When adding a patch expansion file, the Android system does not actually patch your
+application or main expansion file. You must design your application to support the patch data.
+However, the Apk Expansion package includes a library for using ZIP files
+as expansion files, which merges the data from the patch file into the main expansion file so
+you can easily read all the expansion file data.</li>
+</ul>
+
+
+
+<!-- Tools are not ready.
+     
+<h3>Using OBB tool and APIs</h3>
+
+<pre>
+$ mkobb.sh -d /data/myfiles -k my_secret_key -o /data/data.obb
+$ obbtool a -n com.example.myapp -v 1 -s seed_from_mkobb /data/data.obb
+</pre>
+
+<pre>
+storage = (StorageManager) getSystemService( STORAGE_SERVICE );
+storage.mountObb( obbFilepath, "my_secret_key", myListener );
+obbContentPath = storage.getMountedObbPath( obbFilepath );
+</pre>
+-->
diff --git a/docs/html/guide/google/play/filters.jd b/docs/html/guide/google/play/filters.jd
new file mode 100644
index 0000000..3db9cb6
--- /dev/null
+++ b/docs/html/guide/google/play/filters.jd
@@ -0,0 +1,454 @@
+page.title=Filters on Google Play
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+<ul>
+<li>Google Play applies filters that control which Android-powered devices can access your
+application when the user is visiting the store.</li>
+<li>Filtering is determined by comparing device configurations that you declare in you app's
+manifest file to the configurations defined by the device, as well as other factors.</li> </ul>
+
+<h2>In this document</h2>
+
+<ol>
+  <li><a href="#how-filters-work">How Filters Work on Google Play</a></li>
+  <li><a href="#manifest-filters">Filtering based on Manifest Elements</a>
+    <ol>
+      <li><a href="#advanced-filters">Advanced manifest filters</a></li>
+    </ol>
+  </li>
+  <li><a href="#other-filters">Other Filters</a></li>
+  <li><a href="#MultiApks">Publishing Multiple APKs with Different Filters</a></li>
+</ol>
+
+<h2>See also</h2>
+ <ol>
+<li><a
+href="{@docRoot}guide/practices/compatibility.html">Android Compatibility</a></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">&lt;supports-gl-texture&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></li>
+<li><code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</code></a></li>
+</ol>
+
+<div id="qv-extra">
+  <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
+  <div id="qv-sub-rule">
+    <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0 5px;">
+    <h2 style="color:#669999;padding-top:1em;">Interested in publishing your app on Google Play?</h2>
+    <p><a id="publish-link"
+href="http://play.google.com/apps/publish">Go to Google Play</a> to create a publisher
+account and upload your app.</p></div>
+</div>
+
+</div>
+</div>
+
+
+<p>When a user searches or browses on Google Play on an Android device, the results are filtered
+based on which applications are compatible with that device. For example, if an application
+requires a camera (as specified in the application manifest file), then Google Play will not show
+the app on any device that does not have a camera.</p>
+
+<p>Declarations in the manifest file that are compared to the device's configuration is not the
+only part of how applications are filtered. Filtering might also occur due to the user's country and
+carrier, the presence or absence of a SIM card, and other factors. </p>
+
+<p>Changes to the Google Play filters are independent of changes to the Android platform itself.
+This document is updated periodically to reflect any changes that affect the way Google Play
+filters applications.</p>
+
+
+<h2 id="how-filters-work">How Filters Work on Google Play</h2>
+
+<p>Google Play uses the filter restrictions described below to determine
+whether to show your application to a user who is browsing or searching for
+applications from the Google Play app. When determining whether to display your app,
+Google Play checks the device's hardware and software configuration, as well as it's
+carrier, location, and other characteristics. It then compares those against the
+restrictions and dependencies expressed by the application's
+manifest file and publishing details. If the application is
+compatible with the device according to the filter rules, Google Play displays the
+application to the user. Otherwise, Google Play hides your application from search
+results and category browsing, even if a user specifically requests
+the app by clicking a deep link that points directly to the app's ID within Google Play..</p>
+
+<p class="note"><strong>Note:</strong> When users browse the <a
+href="http://play.google.com/apps">Google Play web site</a>, they can see all published
+applications. The Google Play web site compares the application requirements to each of the
+user's registered devices for compatibility, though, and only allows them to install the application
+if it's compatible with their device.</p>
+
+<p>You can use any combination of the available filters for your app. For example, you can set a
+<code>minSdkVersion</code> requirement of <code>"4"</code> and set <code>smallScreens="false"</code>
+in the app, then when uploading the app to Google Play you could target European countries (carriers)
+only. Google Play's filters will thus prevent the application from being available on any device
+that does not match all three of these requirements. </p>
+
+<p>All filtering restrictions are associated with an application's version and can
+change between versions. For example, if a user has installed your application and you publish an
+update that makes the app invisible to the user, the user will not see that an update is
+available.</p>
+
+
+<h2 id="manifest-filters">Filtering based on Manifest Elements</h2>
+
+<p>Most filters are triggered by elements within an application's
+manifest file, <a
+href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
+(although not everything in the manifest file can trigger filtering).
+Table 1 lists the manifest elements that you should use to trigger
+filtering, and explains how the filtering for each element works.</p>
+
+<p id="table1" class="table-caption"><strong>Table 1.</strong> Manifest elements that
+trigger filtering on Google Play.</p>
+<table>
+  <tr>
+    <th>Manifest Element</th>
+    <th>Filter Name</th>
+    <th>How It Works</th>
+  </tr>
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">Screen Size</td>
+    <td valign="top">
+
+<p>An application indicates the screen sizes that it is capable of supporting by
+setting attributes of the <code>&lt;supports-screens&gt;</code> element. When
+the application is published, Google Play uses those attributes to determine whether
+to show the application to users, based on the screen sizes of their
+devices. </p>
+
+<p>As a general rule, Google Play assumes that the platform on the device can adapt
+smaller layouts to larger screens, but cannot adapt larger layouts to smaller
+screens. Thus, if an application declares support for "normal" screen size only,
+Google Play makes the application available to both normal- and large-screen devices,
+but filters the application so that it is not available to small-screen
+devices.</p>
+
+<p>If an application does not declare attributes for
+<code>&lt;supports-screens&gt;</code>, Google Play uses the default values for those
+attributes, which vary by API Level. Specifically: </p>
+
+<ul>
+<li><p>For applications that set either the <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> or <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> to 3 or lower, the <code>&lt;supports-screens&gt;</code> element itself
+is undefined and no attributes are available. In this case, Google Play assumes that
+the application is designed for normal-size screens and shows the application to
+devices that have normal or larger screens. </p>
+
+<li>When the either the <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">android:
+minSdkVersion</a></code> or <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">android:
+targetSdkVersion</a></code> is set to 4 or higher, the default for all attributes is
+<code>"true"</code>. In this way, the application is considered to support all screen sizes by
+default.</li>
+</ul>
+
+    <p><strong>Example 1</strong><br />
+    The manifest declares <code>&lt;uses-sdk android:minSdkVersion="3"&gt;</code>
+    and does not include a <code>&lt;supports-screens&gt;</code> element.
+    <strong>Result</strong>: Google Play will not show the app to a user of a
+    small-screen device, but will show it to users of normal and large-screen
+    devices, unless  other filters apply. </p>
+    <p><strong>Example 2<br />
+    </strong>The manifest declares <code>&lt;uses-sdk android:minSdkVersion="3"
+    android:targetSdkVersion="4"&gt;</code> and does not include a
+    <code>&lt;supports-screens&gt;</code> element.
+    <strong>Result</strong>: Google Play will show the app to users on all
+    devices, unless other filters apply. </p>
+    <p><strong>Example 3<br />
+    </strong>The manifest declares <code>&lt;uses-sdk android:minSdkVersion="4"&gt;</code>
+    and does not include a <code>&lt;supports-screens&gt;</code> element.
+    <strong>Result</strong>: Google Play will show the app to all users,
+    unless  other filters apply. </p>
+    <p>For more information on how to declare support for screen sizes in your
+    application, see <code><a
+    href="{@docRoot}guide/topics/manifest/supports-screens-element.html">&lt;supports-screens&gt;</a></code>
+    and <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+    Screens</a>.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">&lt;uses-configuration&gt;</a></code>
+      <!-- ##api level 3## --></td>
+    <td valign="top">Device
+    Configuration: <br />
+    keyboard, navigation, touch screen</td>
+    <td valign="top"><p>An application can
+    request certain hardware features, and Google Play will  show the app only on devices that have the required hardware.</p>
+      <p><strong>Example 1<br />
+      </strong>The manifest includes <code>&lt;uses-configuration android:reqFiveWayNav=&quot;true&quot; /&gt;</code>, and a user is searching for apps on a device that does not have a five-way navigational control. <strong>Result</strong>: Google Play will not show the app to the user. </p>
+      <p><strong>Example 2<br />
+      </strong>The manifest does not include a <code>&lt;uses-configuration&gt;</code> element. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply.</p>
+<p>For more details, see  <a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>.</p></td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>
+      <!-- ##api level 4## --></td>
+    <td valign="top">Device Features<br />
+      (<code>name</code>)</td>
+    <td valign="top"><p>An application can require certain device features to be
+present on the device. This functionality was introduced in Android 2.0 (API
+Level 5).</p>
+      <p><strong>Example 1<br />
+      </strong>The manifest includes <code>&lt;uses-feature
+android:name=&quot;android.hardware.sensor.light&quot; /&gt;</code>, and a user
+is searching for apps on a device that does not have a light sensor.
+<strong>Result</strong>: Google Play will not show the app to the user. </p>
+      <p><strong>Example 2<br />
+      </strong>The manifest does not include a <code>&lt;uses-feature&gt;</code>
+element. <strong>Result</strong>: Google Play will show the app to all users,
+unless other filters apply.</p>
+      <p>For complete information, see <code><a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a>
+</code>.</p>
+      <p><em>Filtering based on implied features:</em> In some cases, Google
+Play interprets permissions requested through
+<code>&lt;uses-permission&gt;</code> elements as feature requirements equivalent
+to those declared in <code>&lt;uses-feature&gt;</code> elements. See <a
+href="#uses-permission-filtering"><code>&lt;uses-permission&gt;</code></a>,
+below.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td valign="top">OpenGL-ES
+    Version<br />
+(<code>openGlEsVersion</code>)</td>
+    <td valign="top"><p>An application can require that the device support a specific
+      OpenGL-ES version using the <code>&lt;uses-feature
+        android:openGlEsVersion=&quot;int&quot;&gt;</code> attribute.</p>
+      <p><strong>Example 1<br />
+      </strong>An app
+        requests multiple OpenGL-ES versions by specifying <code>openGlEsVersion</code> multiple times in the
+        manifest.  <strong>Result</strong>: Google Play assumes that the app requires the highest of the indicated versions.</p>
+<p><strong>Example 2<br />
+</strong>An app
+        requests OpenGL-ES version 1.1, and a user is searching for apps on a device that supports OpenGL-ES version 2.0. <strong>Result</strong>: Google Play will show the app to the user, unless other filters apply. If a
+  device reports that it supports OpenGL-ES version <em>X</em>,  Google Play assumes that it
+  also supports any version earlier than <em>X</em>.
+</p>
+<p><strong>Example 3<br />
+</strong>A user is searching for apps on a device that does not
+        report an OpenGL-ES version (for example, a device running Android 1.5 or earlier). <strong>Result</strong>: Google Play assumes that the device
+  supports only OpenGL-ES 1.0. Google Play will only show the user apps that do not specify <code>openGlEsVersion</code>, or apps that do not specify an OpenGL-ES version higher than 1.0. </p>
+      <p><strong>Example 4<br />
+      </strong>The manifest does not specify <code>openGlEsVersion</code>. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply. </p>
+<p>For more details, see <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p></td>
+  </tr>
+
+  <tr>
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code></td>
+    <td valign="top">Software Libraries</td>
+    <td valign="top"><p>An application can require specific
+    shared libraries to be present on the device. </p>
+      <p><strong>Example 1<br />
+      </strong>An app requires the <code>com.google.android.maps</code> library, and a user is searching for apps on a device that does not have the <code>com.google.android.maps</code> library. <strong>Result</strong>: Google Play will not show the app to the user. </p>
+      <p><strong>Example 2</strong><br />
+        The manifest does not include a <code>&lt;uses-library&gt;</code> element. <strong>Result</strong>: Google Play will show the app to all users, unless other filters apply.</p>
+<p>For more details, see <a
+href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>.</p></td>
+  </tr>
+  <tr id="uses-permission-filtering">
+    <td valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></code></td>
+    <td valign="top">&nbsp;</td>
+    <td valign="top">Strictly, Google Play does not filter based on
+<code>&lt;uses-permission&gt;</code> elements. However, it does read the
+elements to determine whether the application has hardware feature requirements
+that may not have been properly declared in <code>&lt;uses-feature&gt;</code>
+elements. For example, if an application requests the <code>CAMERA</code>
+permission but does not declare a <code>&lt;uses-feature&gt;</code> element for
+<code>android.hardware.camera</code>, Google Play considers that the
+application requires a camera and should not be shown to users whose devices do
+not offer a camera.</p>
+    <p>In general, if an application requests hardware-related permissions,
+Google Play assumes that the application requires the underlying hardware
+features, even though there might be no corresponding to
+<code>&lt;uses-feature&gt;</code> declarations. Google Play then sets up
+filtering based on the features implied by the <code>&lt;uses-feature&gt;</code>
+declarations.</p>
+    <p>For a list of permissions that imply hardware features, see
+the documentation for the <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html#permissions-features"><code>&lt;uses-feature&gt;</code></a>
+element.</p>
+</td>
+  </tr>
+
+  <tr>
+    <td rowspan="2" valign="top" style="white-space:nowrap;"><code><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></code></td>
+    <td valign="top">Minimum Framework Version (<code>minSdkVersion</code>)</td>
+    <td valign="top"><p>An application can require a minimum API level.  </p>
+      <p><strong>Example 1</strong><br />
+        The manifest includes <code>&lt;uses-sdk
+      android:minSdkVersion=&quot;3&quot;&gt;</code>, and the app uses APIs that were introduced in API Level 3. A user is searching for apps on a device that has API Level 2. <strong>Result</strong>: Google Play will not show the app to the user. </p>
+      <p><strong>Example 2</strong><br />
+      The manifest does not include <code>minSdkVersion</code>, and the app uses APIs that were introduced in API Level 3. A user is searching for apps on a device that has API Level 2. <strong>Result</strong>: Google Play assumes that <code>minSdkVersion</code> is &quot;1&quot; and that the app is compatible with all versions of Android. Google Play  shows the app to the user and allows the user to download the app. The app crashes at runtime. </p>
+    <p>Because you want to avoid this second scenario, we recommend that you always declare a <code>minSdkVersion</code>. For details, see <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min"><code>android:minSdkVersion</code></a>.</p></td>
+  </tr>
+  <tr>
+    <td valign="top">Maximum Framework Version (<code>maxSdkVersion</code>)</td>
+    <td valign="top"><p><em>Deprecated.</em> Android
+    2.1 and later do not check or enforce the <code>maxSdkVersion</code> attribute, and
+    the SDK will not compile if <code>maxSdkVersion</code> is set in an app's manifest. For devices already
+    compiled with <code>maxSdkVersion</code>, Google Play will respect it and use it for
+    filtering.</p>
+<p> Declaring <code>maxSdkVersion</code> is <em>not</em> recommended. For details, see <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max"><code>android:maxSdkVersion</code></a>.</p></td>
+  </tr>
+</table>
+
+
+
+<h3 id="advanced-filters">Advanced manifest filters</h3>
+
+<p>In addition to the manifest elements in <a href="#table1">table 1</a>, Google Play can also
+filter applications based on the advanced manifest elements in table 2.</p>
+
+<p>These manifest elements and the filtering they trigger are for exceptional use-cases
+only. These are designed for certain types of high-performance games and similar applications that
+require strict controls on application distribution. <strong>Most applications should never use
+these filters</strong>.</p>
+
+<p id="table2" class="table-caption"><strong>Table 2.</strong> Advanced manifest elements for
+Google Play filtering.</p>
+<table>
+  <tr><th>Manifest Element</th><th>Summary</th></tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play filters the application if the device screen size and density does not match
+any of the screen configurations (declared by a {@code &lt;screen&gt;} element) in the {@code
+&lt;compatible-screens&gt;} element.</p>
+      <p class="caution"><strong>Caution:</strong> Normally, <strong>you should not use
+this manifest element</strong>. Using this element can dramatically
+reduce the potential user base for your application, by excluding all combinations of screen size
+and density that you have not listed. You should instead use the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> manifest element (described above in <a href="#table1">table
+1</a>) to enable screen compatibility mode for screen configurations you have not accounted for
+with alternative resources.</p>
+    </td>
+  </tr>
+  <tr>
+    <td><nobr><a href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a></nobr></td>
+    <td>
+      <p>Google Play filters the application unless one or more of the GL texture compression
+formats supported by the application are also supported by the device. </p>
+    </td>
+  </tr>
+</table>
+
+
+
+<h2 id="other-filters">Other Filters</h2>
+
+<p>Google Play uses other application characteristics to determine whether to show or hide an application for a particular user on a given device, as described in the table below. </p>
+
+<p id="table3" class="table-caption"><strong>Table 3.</strong> Application and publishing
+characteristics that affect filtering on Google Play.</p>
+<table> <tr>
+    <th>Filter Name</th> <th>How It Works</th> </tr>
+
+  <tr>
+    <td valign="top">Publishing Status</td> <td valign="top"><p>Only published applications will appear in
+      searches and browsing within Google Play.</p> <p>Even if an app is unpublished, it can
+        be installed if users can see it in their Downloads area among their purchased,
+        installed, or recently uninstalled apps.</p> <p>If an application has been
+  suspended, users will not be able to reinstall or update it, even if it appears in their Downloads.</p> </td></tr>
+  <tr>
+  <td valign="top">Priced
+    Status</td> <td valign="top"><p>Not all users can see paid apps. To show paid apps, a device
+must have a SIM card and be running Android 1.1 or later, and it must be in a
+country (as determined by SIM carrier) in which paid apps are available.</p></td>
+</tr> <tr>
+  <td valign="top">Country / Carrier Targeting</td> <td valign="top"> <p>When you upload your app to
+    Google Play, you can select specific countries to target. The app will only
+    be visible to the countries (carriers) that you select, as follows:</p>
+    <ul><li><p>A device's country is determined based on the carrier, if a carrier is
+      available. If no carrier can be determined, Google Play tries to
+      determine the country based on IP.</p></li> <li><p>Carrier is determined based on
+      the device's SIM (for GSM devices), not the current roaming carrier.</p></li></ul>
+</td> </tr> <tr>
+  <td valign="top">Native Platform</td> <td valign="top"><p>An application that includes native
+    libraries that target a specific platform (ARM EABI v7 or x86, for example) are
+    visible only on devices that support that platform. For details about the NDK and using
+    native libraries, see <a href="{@docRoot}tools/sdk/ndk/index.html#overview">What is the
+      Android NDK?</a></p> </tr> <tr>
+        <td valign="top">Copy-Protected Applications</td> <td valign="top"><p>To
+          copy protect an application, set copy protection to "On" when you configure publishing
+options for your application. Google Play will not show copy-protected applications on
+developer devices or unreleased devices.</p></td> </tr> </table>
+
+
+
+<h2 id="MultiApks">Publishing Multiple APKs with Different Filters</h2>
+
+<p>Some specific Google Play filters allow you to publish multiple APKs for the same
+application in order to provide a different APK to different device configurations. For example, if
+you're creating a video game that uses high-fidelity graphic assets, you might want to create
+two APKs that each support different texture compression formats. This way, you can reduce the
+size of the APK file by including only the textures that are required for each device
+configuration. Depending on each device's support for your texture compression formats, Google
+Play will deliver it the APK that you've declared to support that device.</p>
+
+<p>Currently, Google Play allows you to publish multiple APKs for the same application only
+when each APK provides different filters based on the following configurations:</p>
+<ul>
+  <li>OpenGL texture compression formats
+    <p>By using the <a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a> element.</p>
+  </li>
+  <li>Screen size (and, optionally, screen density)
+    <p>By using the <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> or <a
+href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a> element.</p>
+  </li>
+  <li>API level
+    <p>By using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code
+&lt;uses-sdk&gt;}</a> element.</p>
+  </li>
+</ul>
+
+<p>All other filters still work the same as usual, but these three are the only filters that can
+distinguish one APK from another within the same application listing on Google Play. For example,
+you <em>cannot</em> publish multiple APKs for the same application if the APKs differ only based on
+whether the device has a camera.</p>
+
+<p class="caution"><strong>Caution:</strong> Publishing multiple APKs for the same application is
+considered an advanced feature and <strong>most application should publish only one
+APK that supports a wide range of device configurations</strong>. Publishing multiple APKs
+requires that you follow specific rules within your filters and that you pay extra attention to the
+version codes for each APK to ensure proper update paths for each configuration.</p>
+
+<p>If you need more information about how to publish multiple APKs on Google Play, read <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
diff --git a/docs/html/guide/google/play/index.jd b/docs/html/guide/google/play/index.jd
new file mode 100644
index 0000000..b11bcdc
--- /dev/null
+++ b/docs/html/guide/google/play/index.jd
@@ -0,0 +1,16 @@
+page.title=Google Play APIs
+page.landing=1
+page.landing.intro=When you ditribute your Android app using Google Play you have the opportunity to enhance your app's capabilities with services such as in-app billing and control your app distribution with advanced device filtering.
+@jd:body
+
+
+<div class="distribute-features col-13">
+  <ul>
+    <li><h5>Monetize with in-app billing</h5>Lorem ipsum dolor sit amet, soldum
+consectetur adipiscing elit. <a href="#">Learn more &raquo;</a></li>
+    <li><h5>Control your app distribution</h5>Lorem ipsum dolor sit amet, soldum consectetur
+adipiscing elit. <a href="#">Learn more &raquo;</a></li>
+    <li class="last"><h5>Protect from piracy</h5>Lorem ipsum dolor sit amet, soldum
+consectetur adipiscing elit. <a href="#">Learn more &raquo;</a></li>
+  </ul>
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/google/play/licensing/adding-licensing.jd b/docs/html/guide/google/play/licensing/adding-licensing.jd
new file mode 100644
index 0000000..49375c2
--- /dev/null
+++ b/docs/html/guide/google/play/licensing/adding-licensing.jd
@@ -0,0 +1,1071 @@
+page.title=Adding Licensing to Your App
+parent.title=Application Licensing
+parent.link=index.html
+@jd:body
+
+
+
+<div id="qv-wrapper">
+<div id="qv">
+  
+  <h2>In this document</h2>
+  <ol>
+  <li><a href="#manifest-permission">Adding the Licensing Permission</a></li>
+  <li><a href="#impl-Policy">Implementing a Policy</a>
+    <ol>
+      <li><a href="#custom-policies">Guidelines for custom policies</a></li>
+      <li><a href="#ServerManagedPolicy">ServerManagedPolicy</a></li>
+      <li><a href="#StrictPolicy">StrictPolicy</a></li>
+    </ol>
+  </li>
+  <li><a href="#impl-Obfuscator">Implementing an Obfuscator</a>
+    <ol>
+      <li><a href="#AESObfuscator">AESObfuscator</a></li>
+    </ol>
+  </li>
+  <li><a href="#impl-lc">Checking the License from an Activity</a>
+    <ol>
+      <li><a href="#lc-overview">Overview of license check and response</a></li>
+      <li><a href="#imports">Add imports</a></li>
+      <li><a href="#lc-impl">Implement LicenseCheckerCallback as a private inner class</a></li>
+      <li><a href="#thread-handler">Create a Handler for posting from LicenseCheckerCallback
+to the UI thread</a></li>
+      <li><a href="#lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</a></li>
+      <li><a href="#check-access">Call checkAccess() to initiate the license check</a></li>
+      <li><a href="#account-key">Embed your public key for licensing</a></li>
+      <li><a href="#handler-cleanup">Call your LicenseChecker's onDestroy() method
+to close IPC connections</a></li>
+    </ol>
+  </li>
+  <li><a href="#impl-DeviceLimiter">Implementing a DeviceLimiter</a></li>
+  <li><a href="#app-obfuscation">Obfuscating Your Code</a></li>
+  <li><a href="#app-publishing">Publishing a Licensed Application</a>
+    <ol>
+      <li><a href="#">Removing Copy Protection</a></li>
+    </ol>
+  </li>
+  <li><a href="#support">Where to Get Support</a></li>
+</ol>
+  
+</div>
+</div>
+
+
+
+<p>After you've set up a publisher account and development environment (see <a
+href="setting-up.html">Setting Up for Licensing</a>), you are ready to add license verification to
+your app with the License Verification Library (LVL).</p>
+
+<p>Adding license verification with the LVL involves these tasks:</p>
+
+<ol>
+<li><a href="#manifest-permission">Adding the licensing permission</a> your application's manifest.</li>
+<li><a href="#impl-Policy">Implementing a Policy</a> &mdash; you can choose one of the full implementations provided in the LVL or create your own.</li>
+<li><a href="#impl-Obfuscator">Implementing an Obfuscator</a>, if your {@code Policy} will cache any
+license response data. </li>
+<li><a href="#impl-lc">Adding code to check the license</a> in your application's main
+Activity.</li>
+<li><a href="#impl-DeviceLimiter">Implementing a DeviceLimiter</a> (optional and not recommended for
+most applications).</li>
+</ol>
+
+<p>The sections below describe these tasks. When you are done with the
+integration, you should be able to compile your application successfully and you
+can begin testing, as described in <a
+href="{@docRoot}guide/google/play/licensing/setting-up.html#test-env">Setting Up the Test
+Environment</a>.</p>
+
+<p>For an overview of the full set of source files included in the LVL, see <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#lvl-summary">Summary of LVL Classes
+and Interfaces</a>.</p>
+
+
+<h2 id="manifest-permission">Adding the Licensing Permission</h2>
+
+<p>To use the Google Play application for sending a license check to the
+server, your application must request the proper permission,
+<code>com.android.vending.CHECK_LICENSE</code>. If your application does
+not declare the licensing permission but attempts to initiate a license check,
+the LVL throws a security exception.</p>
+
+<p>To request the licensing permission in your application, declare a <a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><code>&lt;uses-permission&gt;</code></a>
+element as a child of <code>&lt;manifest&gt;</code>, as follows: </p>
+
+<p style="margin-left:2em;"><code>&lt;uses-permission
+android:name="com.android.vending.CHECK_LICENSE"&gt;</code></p>
+
+<p>For example, here's how the LVL sample application declares the permission:
+</p>
+
+<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
+
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" ..."&gt;
+    &lt;!-- Devices &gt;= 3 have version of Google Play that supports licensing. --&gt;
+    &lt;uses-sdk android:minSdkVersion="3" /&gt;
+    &lt;!-- Required permission to check licensing. --&gt;
+    &lt;uses-permission android:name="com.android.vending.CHECK_LICENSE" /&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p class="note"><strong>Note:</strong> Currently, you cannot declare the
+<code>CHECK_LICENSE</code> permission in the LVL library project's manifest,
+because the SDK Tools will not merge it into the manifests of dependent
+applications. Instead, you must declare the permission in each dependent
+application's manifest. </p>
+
+
+<h2 id="impl-Policy">Implementing a Policy</h2>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>ServerManagedPolicy</h2>
+
+<p>The LVL includes a complete {@code Policy} implementation called ServerManagedPolicy
+that makes use of license-management settings provided by the Google Play
+server. </p>
+
+<p style="margin-top:.5em;">Use of ServerManagedPolicy as the basis for your
+Policy is strongly recommended. For more information, see <a
+href="#ServerManagedPolicy">ServerManagedPolicy</a> section, below.</p>
+
+</div>
+</div>
+
+<p>Google Play licensing service does not itself determine whether a
+given user with a given license should be granted access to your application.
+Rather, that responsibility is left to a {@code Policy} implementation that you provide
+in your application.</p>
+
+<p>Policy is an interface declared by the LVL that is designed to hold your
+application's logic for allowing or disallowing user access, based on the result
+of a license check. To use the LVL, your application <em>must</em> provide an
+implementation of {@code Policy}. </p>
+
+<p>The {@code Policy} interface declares two methods, <code>allowAccess()</code> and
+<code>processServerResponse()</code>, which are called by a {@code LicenseChecker}
+instance when processing a response from the license server. It also declares an
+enum called <code>LicenseResponse</code>, which specifies the license response
+value passed in calls to <code>processServerResponse()</code>. </p>
+
+<ul>
+<li><code>processServerResponse()</code> lets you preprocess the raw response
+data received from the licensing server, prior to determining whether to grant
+access.
+
+<p>A typical implementation would extract some or all fields from the license
+response and store the data locally to a persistent store, such as through
+{@link android.content.SharedPreferences} storage, to ensure that the data is
+accessible across application invocations and device power cycles. For example,
+a {@code Policy} would maintain the timestamp of the last successful license check, the
+retry count, the license validity period, and similar information in a
+persistent store, rather than resetting the values each time the application is
+launched.</p>
+
+<p>When storing response data locally, the {@code Policy} must ensure that the data is
+obfuscated (see <a href="#impl-Obfuscator">Implementing an Obfuscator</a>,
+below).</p></li>
+
+<li><code>allowAccess()</code> determines whether to grant the user access to
+your application, based on any available license response data (from the
+licensing server or from cache) or other application-specific information.  For
+example, your implementation of <code>allowAccess()</code> could take into
+account additional criteria, such as usage or other data retrieved from a
+backend server. In all cases, an implementation of <code>allowAccess()</code>
+should only return <code>true</code> if the user is licensed to use the
+application, as determined by the licensing server, or if there is a transient
+network or system problem that prevents the license check from completing. In
+such cases, your implementation can maintain a count of retry responses and
+provisionally allow access until the next license check is complete.</li>
+
+</ul>
+
+<p>To simplify the process of adding licensing to your application and to
+provide an illustration of how a {@code Policy} should be designed, the LVL includes
+two full {@code Policy} implementations that you can use without modification or
+adapt to your needs:</p>
+
+<ul>
+<li><a href="#ServerManagedPolicy">ServerManagedPolicy</a>, a flexible {@code Policy}
+that uses server-provided settings and cached responses to manage access across
+varied network conditions, and</li>
+<li><a href="#StrictPolicy">StrictPolicy</a>, which does not cache any response
+data and allows access <em>only</em> if the server returns a licensed
+response.</li>
+</ul>
+
+<p>For most applications, the use of ServerManagedPolicy is highly
+recommended. ServerManagedPolicy is the LVL default and is integrated with
+the LVL sample application.</p>
+
+
+<h3 id="custom-policies">Guidelines for custom policies</h3>
+
+<p>In your licensing implementation, you can use one of the complete policies
+provided in the LVL (ServerManagedPolicy or StrictPolicy) or you can create a
+custom policy. For any type of custom policy, there are several important design
+points to understand and account for in your implementation.</p>
+
+<p>The licensing server applies general request limits to guard against overuse
+of resources that could result in denial of service. When an application exceeds
+the request limit, the licensing server returns a 503 response, which gets
+passed through to your application as a general server error. This means that no
+license response will be available to the user until the limit is reset, which
+can affect the user for an indefinite period.</p>
+
+<p>If you are designing a custom policy, we recommend that the {@code Policy}:
+<ol>
+<!-- <li>Limits the number of points at which your app calls for a license check
+to the minimum. </li> -->
+<li>Caches (and properly obfuscates) the most recent successful license response
+in local persistent storage.</li>
+<li>Returns the cached response for all license checks, for as long as the
+cached response is valid, rather than making a request to the licensing server.
+Setting the response validity according to the server-provided <code>VT</code>
+extra is highly recommended. See <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response Extras</a>
+for more information.</li>
+<li>Uses an exponential backoff period, if retrying any requests the result in
+errors. Note that the Google Play client automatically retries failed
+requests, so in most cases there is no need for your {@code Policy} to retry them.</li>
+<li>Provides for a "grace period" that allows the user to access your
+application for a limited time or number of uses, while a license check is being
+retried. The grace period benefits the user by allowing access until the next
+license check can be completed successfully and it benefits you by placing a
+hard limit on access to your application when there is no valid license response
+available.</li>
+</ol>
+
+<p>Designing your {@code Policy} according to the guidelines listed above is critical,
+because it ensures the best possible experience for users while giving you
+effective control over your application even in error conditions. </p>
+
+<p>Note that any {@code Policy} can use settings provided by the licensing server to
+help manage validity and caching, retry grace period, and more. Extracting the
+server-provided settings is straightforward and making use of them is highly
+recommended. See the ServerManagedPolicy implementation for an example of how to
+extract and use the extras. For a list of server settings and information about
+how to use them, see  <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response
+Extras</a>.</p>
+
+<h3 id="ServerManagedPolicy">ServerManagedPolicy</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Server Response Extras</h2>
+
+<p>For certain types of licensing responses, the licensing server appends extra
+settings to the responses, to help the application manage licensing effectively.
+</p>
+
+<p style="margin-top:.5em;">See <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response Extras</a>
+for
+a list of settings and <code>ServerManagedPolicy.java</code> for information
+about how a {@code Policy} can use the extras.</p>
+
+</div>
+</div>
+
+<p>The LVL includes a full and recommended implementation of the {@code Policy}
+interface called ServerManagedPolicy. The implementation is integrated with the
+LVL classes and serves as the default {@code Policy} in the library. </p>
+
+<p>ServerManagedPolicy provides all of the handling for license and retry
+responses. It caches all of the response data locally in a
+{@link android.content.SharedPreferences} file, obfuscating it with the
+application's {@code Obfuscator} implementation. This ensures that the license response
+data is secure and persists across device power cycles. ServerManagedPolicy
+provides concrete implementations of the interface methods
+<code>processServerResponse()</code> and <code>allowAccess()</code> and also
+includes a set of supporting methods and types for managing license
+responses.</p>
+
+<p>Importantly, a key feature of ServerMangedPolicy is its use of
+server-provided settings as the basis for managing licensing across an
+application's refund period and through varying network and error conditions.
+When an application contacts the Google Play server for a license check, the
+server appends several settings as key-value pairs in the extras field of certain
+license response types. For example, the server provides recommended values for the
+application's license validity period, retry grace period, and maximum allowable
+retry count, among others. ServerManagedPolicy extracts the values from the
+license response in its <code>processServerResponse()</code> method and checks
+them in its <code>allowAccess()</code> method. For a list of the server-provided
+settings used by ServerManagedPolicy, see <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#extras">Server Response
+Extras</a>.</p>
+
+<p>For convenience, best performance, and the benefit of using license settings
+from the Google Play server, <strong>using ServerManagedPolicy as your
+licensing {@code Policy} is strongly recommended</strong>. </p>
+
+<p>If you are concerned about the security of license response data that is
+stored locally in {@link android.content.SharedPreferences}, you can use a stronger obfuscation
+algorithm or design a stricter {@code Policy} that does not store license data. The LVL
+includes an example of such a {@code Policy} &mdash; see <a
+href="#StrictPolicy">StrictPolicy</a> for more information.</p>
+
+<p>To use ServerManagedPolicy, simply import it to your Activity, create an
+instance, and pass a reference to the instance when constructing your
+{@code LicenseChecker}. See <a href="#lc-lcc">Instantiate LicenseChecker and
+LicenseCheckerCallback</a> for more information. </p>
+
+<h3 id="StrictPolicy">StrictPolicy</h3>
+
+<p>The LVL includes an alternative full implementation of the {@code Policy} interface
+called StrictPolicy. The StrictPolicy implementation provides a more restrictive
+Policy than ServerManagedPolicy, in that it does not allow the user to access
+the application unless a license response is received from the server at the
+time of access that indicates that the user is licensed.</p>
+
+<p>The principal feature of StrictPolicy is that it does not store <em>any</em>
+license response data locally, in a persistent store. Because no data is stored,
+retry requests are not tracked and cached responses can not be used to fulfill
+license checks. The {@code Policy} allows access only if:</p>
+
+<ul>
+<li>The license response is received from the licensing server, and </li>
+<li>The license response indicates that the user is licensed to access the
+application. </li>
+</ul>
+
+<p>Using StrictPolicy is appropriate if your primary concern is to ensure that,
+in all possible cases, no user will be allowed to access the application unless
+the user is confirmed to be licensed at the time of use. Additionally, the
+Policy offers slightly more security than ServerManagedPolicy &mdash; since
+there is no data cached locally, there is no way a malicious user could tamper
+with the cached data and obtain access to the application.</p>
+
+<p>At the same time, this {@code Policy} presents a challenge for normal users, since it
+means that they won't be able to access the application when there is no network
+(cell or Wi-Fi) connection available. Another side-effect is that your
+application will send more license check requests to the server, since using a
+cached response is not possible.</p>
+
+<p>Overall, this policy represents a tradeoff of some degree of user convenience
+for absolute security and control over access. Consider the tradeoff carefully
+before using this {@code Policy}.</p>
+
+<p>To use StrictPolicy, simply import it to your Activity, create an instance,
+and pass a reference to it when constructing your {@code LicenseChecker}. See
+<a href="#lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</a>
+for more information. </p>
+
+<h2 id="impl-Obfuscator">Implementing an Obfuscator</h2>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>AESObfuscator</h2>
+
+<p>The LVL includes a full {@code Obfuscator} implementation in the
+<code>AESObfuscator.java</code> file. The {@code Obfuscator} uses AES encryption to
+obfuscate/unobfuscate data. If you are using a {@code Policy} (such as
+ServerManagedPolicy) that caches license response data, using AESObfuscator as
+basis for your {@code Obfuscator} implementation is highly recommended. </p>
+
+</div>
+</div>
+
+<p>A typical {@code Policy} implementation needs to save the license response data for
+an application to a persistent store, so that it is accessible across
+application invocations and device power cycles.  For example, a {@code Policy} would
+maintain the timestamp of the last successful license check, the retry count,
+the license validity period, and similar information in a persistent store,
+rather than resetting the values each time the application is launched. The
+default {@code Policy} included in the LVL, ServerManagedPolicy, stores license response
+data in a {@link android.content.SharedPreferences} instance, to ensure that the
+data is persistent. </p>
+
+<p>Because the {@code Policy} will use stored license response data to determine whether
+to allow or disallow access to the application, it <em>must</em> ensure that any
+stored data is secure and cannot be reused or manipulated by a root user on a
+device. Specifically, the {@code Policy} must always obfuscate the data before storing
+it, using a key that is unique for the application and device. Obfuscating using
+a key that is both application-specific and device-specific is critical, because
+it prevents the obfuscated data from being shared among applications and
+devices.</p>
+
+<p>The LVL assists the application with storing its license response data in a
+secure, persistent manner. First, it provides an {@code Obfuscator}
+interface that lets your application supply the obfuscation algorithm of its
+choice for stored data. Building on that, the LVL provides the helper class
+PreferenceObfuscator, which handles most of the work of calling the
+application's {@code Obfuscator} class and reading and writing the obfuscated data in a
+{@link android.content.SharedPreferences} instance. </p>
+
+<p>The LVL provides a full {@code Obfuscator} implementation called
+AESObfuscator that uses AES encryption to obfuscate data. You can
+use AESObfuscator in your application without modification or you
+can adapt it to your needs. For more information, see the next section.</p>
+
+
+<h3 id="AESObfuscator">AESObfuscator</h3>
+
+<p>The LVL includes a full and recommended implementation of the {@code Obfuscator}
+interface called AESObfuscator. The implementation is integrated with the
+LVL sample application and serves as the default {@code Obfuscator} in the library. </p>
+
+<p>AESObfuscator provides secure obfuscation of data by using AES to
+encrypt and decrypt the data as it is written to or read from storage.
+The {@code Obfuscator} seeds the encryption using three data fields provided
+by the application: </p>
+
+<ol>
+<li>A salt &mdash; an array of random bytes to use for each (un)obfuscation. </li>
+<li>An application identifier string, typically the package name of the application.</li>
+<li>A device identifier string, derived from as many device-specific sources
+as possible, so as to make it as unique.</li>
+</ol>
+
+<p>To use AESObfuscator, first import it to your Activity. Declare a private
+static final array to hold the salt bytes and initialize it to 20 randomly
+generated bytes.</p>
+
+<pre>    ...
+    // Generate 20 random bytes, and put them here.
+    private static final byte[] SALT = new byte[] {
+     -46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95,
+     -45, 77, -117, -36, -113, -11, 32, -64, 89
+     };
+    ...
+</pre>
+
+<p>Next, declare a variable to hold a device identifier and generate a value for
+it in any way needed. For example, the sample application included in the LVL
+queries the system settings for the
+<code>android.Settings.Secure.ANDROID_ID</code>, which is unique to each device.
+</p>
+
+<p>Note that, depending on the APIs you use, your application might need to
+request additional permissions in order to acquire device-specific information.
+For example, to query the {@link android.telephony.TelephonyManager} to obtain
+the device IMEI or related data, the application will also need to request the
+<code>android.permission.READ_PHONE_STATE</code> permission in its manifest.</p>
+
+<p>Before requesting new permissions for the <em>sole purpose</em> of acquiring
+device-specific information for use in your {@code Obfuscator}, consider
+how doing so might affect your application or its filtering on Google Play
+(since some permissions can cause the SDK build tools to add
+the associated <code>&lt;uses-feature&gt;</code>).</p>
+
+<p>Finally, construct an instance of AESObfuscator, passing the salt,
+application identifier, and device identifier. You can construct the instance
+directly, while constructing your {@code Policy} and {@code LicenseChecker}. For example:</p>
+
+<pre>    ...
+    // Construct the LicenseChecker with a Policy.
+    mChecker = new LicenseChecker(
+        this, new ServerManagedPolicy(this,
+            new AESObfuscator(SALT, getPackageName(), deviceId)),
+        BASE64_PUBLIC_KEY  // Your public licensing key.
+        );
+    ...
+</pre>
+
+<p>For a complete example, see MainActivity in the LVL sample application.</p>
+
+
+<h2 id="impl-lc">Checking the License from an Activity</h2>
+
+<p>Once you've implemented a {@code Policy} for managing access to your application, the
+next step is to add a license check to your application, which initiates a query
+to the licensing server if needed and manages access to the application based on
+the license response. All of the work of adding the license check and handling
+the response takes place in your main {@link android.app.Activity} source file.
+</p>
+
+<p>To add the license check and handle the response, you must:</p>
+
+<ol>
+    <li><a href="#imports">Add imports</a></li>
+    <li><a href="#lc-impl">Implement LicenseCheckerCallback</a> as a private inner class</li>
+    <li><a href="#thread-handler">Create a Handler</a> for posting from LicenseCheckerCallback to the UI thread</li>
+    <li><a href="#lc-lcc">Instantiate LicenseChecker</a> and LicenseCheckerCallback</li>
+    <li><a href="#check-access">Call checkAccess()</a> to initiate the license check</li>
+    <li><a href="#account-key">Embed your public key</a> for licensing</li>
+    <li><a href="#handler-cleanup">Call your LicenseChecker's onDestroy() method</a> to close IPC connections.</li>
+</ol>
+
+<p>The sections below describe these tasks. </p>
+
+<h3 id="lc-overview">Overview of license check and response</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Example: MainActivity</h2>
+
+<p>The sample application included with the LVL provides a full example of how
+to initiate a license check and handle the result, in the
+<code>MainActivity.java</code> file.</p>
+
+</div>
+</div>
+
+<p>In most cases, you should add the license check to your application's main
+{@link android.app.Activity}, in the {@link android.app.Activity#onCreate onCreate()} method. This
+ensures that when the user launches your application directly, the license check
+will be invoked immediately. In some cases, you can add license checks in other
+locations as well. For example, if your application includes multiple Activity
+components that other applications can start by {@link android.content.Intent},
+you could add license checks in those Activities.</p>
+
+<p>A license check consists of two main actions: </p>
+
+<ul>
+<li>A call to a method to initiate the license check &mdash; in the LVL, this is
+a call to the <code>checkAccess()</code> method of a {@code LicenseChecker} object that
+you construct.</li>
+<li>A callback that returns the result of the license check. In the LVL, this is
+a <code>LicenseCheckerCallback</code> interface that you implement. The
+interface declares two methods, <code>allow()</code> and
+<code>dontAllow()</code>, which are invoked by the library based on to the
+result of the license check. You implement these two methods with whatever logic
+you need, to allow or disallow the user access to your application. Note that
+these methods do not determine <em>whether</em> to allow access &mdash; that
+determination is the responsibility of your {@code Policy} implementation. Rather, these
+methods simply provide the application behaviors for <em>how</em> to allow and
+disallow access (and handle application errors).
+  <p>The <code>allow()</code> and <code>dontAllow()</code> methods do provide a "reason"
+for their response, which can be one of the {@code Policy} values, {@code LICENSED},
+{@code NOT_LICENSED}, or {@code RETRY}. In particular, you should handle the case in which
+the method receives the {@code RETRY} response for {@code dontAllow()} and provide the user with an
+"Retry" button, which might have happened because the service was unavailable during the
+request.</p></li>
+</ul>
+
+<div style="margin-bottom:2em;">
+
+<img src="{@docRoot}images/licensing_flow.png" style="text-align:left;margin-bottom:0;margin-left:3em;" />
+<div style="margin:.5em 0 1.5em 2em;padding:0"><strong>Figure 6.</strong> Overview of a
+typical license check interaction.</div>
+</div>
+
+<p>The diagram above illustrates how a typical license check takes place: </p>
+
+<ol>
+<li>Code in the application's main Activity instantiates {@code LicenseCheckerCallback}
+and {@code LicenseChecker} objects. When constructing {@code LicenseChecker}, the code passes in
+{@link android.content.Context}, a {@code Policy} implementation to use, and the
+publisher account's public key for licensing as parameters. </li>
+<li>The code then calls the <code>checkAccess()</code> method on the
+{@code LicenseChecker} object. The method implementation calls the {@code Policy} to determine
+whether there is a valid license response cached locally, in
+{@link android.content.SharedPreferences}.
+  <ul>
+    <li>If so, the <code>checkAccess()</code> implementation calls
+  <code>allow()</code>.</li>
+    <li>Otherwise, the {@code LicenseChecker} initiates a license check request that is sent
+  to the licensing server.</li>
+  </ul>
+
+<p class="note"><strong>Note:</strong> The licensing server always returns
+<code>LICENSED</code> when you perform a license check of a draft application.</p>
+</li>
+<li>When a response is received, {@code LicenseChecker} creates a LicenseValidator that
+verifies the signed license data and extracts the fields of the response, then
+passes them to your {@code Policy} for further evaluation.
+  <ul>
+    <li>If the license is valid, the {@code Policy} caches the response in
+{@link android.content.SharedPreferences} and notifies the validator, which then calls the
+<code>allow()</code> method on the {@code LicenseCheckerCallback} object. </li>
+    <li>If the license not valid, the {@code Policy} notifies the validator, which calls
+the <code>dontAllow()</code> method on {@code LicenseCheckerCallback}. </li>
+  </ul>
+</li>
+<li>In case of a recoverable local or server error, such as when the network is
+not available to send the request, {@code LicenseChecker} passes a {@code RETRY} response to
+your {@code Policy} object's <code>processServerResponse()</code> method. 
+  <p>Also, both the {@code allow()} and {@code dontAllow()} callback methods receive a
+<code>reason</code> argument. The {@code allow()} method's reason is usually {@code
+Policy.LICENSED} or {@code Policy.RETRY} and the {@code dontAllow()} reason is usually {@code
+Policy.NOT_LICENSED} or {@code Policy.RETRY}. These response values are useful so you can show
+an appropriate response for the user, such as by providing a "Retry" button when {@code
+dontAllow()} responds with {@code Policy.RETRY}, which might have been because the service was
+unavailable.</p></li>
+<li>In case of a application error, such as when the application attempts to
+check the license of an invalid package name, {@code LicenseChecker} passes an error
+response to the LicenseCheckerCallback's  <code>applicationError()</code>
+method. </li>
+</ol>
+
+<p>Note that, in addition to initiating the license check and handling the
+result, which are described in the sections below, your application also needs
+to provide a <a href="#impl-Policy">Policy implementation</a> and, if the {@code Policy}
+stores response data (such as ServerManagedPolicy), an <a
+href="#impl-Obfuscator">Obfuscator</a> implementation. </p>
+
+
+<h3 id="imports">Add imports</h3>
+
+<p>First, open the class file of the application's main Activity and import
+{@code LicenseChecker} and {@code LicenseCheckerCallback} from the LVL package.</p>
+
+<pre>    import com.android.vending.licensing.LicenseChecker;
+    import com.android.vending.licensing.LicenseCheckerCallback;</pre>
+
+<p>If you are using the default {@code Policy} implementation provided with the LVL,
+ServerManagedPolicy, import it also, together with the AESObfuscator. If you are
+using a custom {@code Policy} or {@code Obfuscator}, import those instead. </p>
+
+<pre>    import com.android.vending.licensing.ServerManagedPolicy;
+    import com.android.vending.licensing.AESObfuscator;</pre>
+
+<h3 id="lc-impl">Implement LicenseCheckerCallback as a private inner class</h3>
+
+<p>{@code LicenseCheckerCallback} is an interface provided by the LVL for handling
+result of a license check. To support licensing using the LVL, you must
+implement {@code LicenseCheckerCallback} and
+its methods to allow or disallow access to the application.</p>
+
+<p>The result of a license check is always a call to one of the
+{@code LicenseCheckerCallback} methods, made based on the validation of the response
+payload, the server response code itself, and any additional processing provided
+by your {@code Policy}. Your application can implement the methods in any way needed. In
+general, it's best to keep the methods simple, limiting them to managing UI
+state and application access. If you want to add further processing of license
+responses, such as by contacting a backend server or applying custom constraints,
+you should consider incorporating that code into your {@code Policy}, rather than
+putting it in the {@code LicenseCheckerCallback} methods. </p>
+
+<p>In most cases, you should declare your implementation of
+{@code LicenseCheckerCallback} as a private class inside your application's main
+Activity class. </p>
+
+<p>Implement the <code>allow()</code> and <code>dontAllow()</code> methods as
+needed. To start with, you can use simple result-handling behaviors in the
+methods, such as displaying the license result in a dialog. This helps you get
+your application running sooner and can assist with debugging. Later, after you
+have determined the exact behaviors you want, you can add more complex handling.
+</p>
+
+<p>Some suggestions for handling unlicensed responses in
+<code>dontAllow()</code> include: </p>
+
+<ul>
+<li>Display a "Try again" dialog to the user, including a button to initiate a
+new license check if the <code>reason</code> supplied is {@code Policy.RETRY}. </li>
+<li>Display a "Purchase this application" dialog, including a button that
+deep-links the user to the application's details page on Google Play, from which the
+use can purchase the application. For more information on how to set up such
+links, see <a
+href="{@docRoot}distribute/googleplay/promote/linking.html">Linking to Your Products</a>. </li>
+<li>Display a Toast notification that indicates that the features of the
+application are limited because it is not licensed. </li>
+</ul>
+
+<p>The example below shows how the LVL sample application implements
+{@code LicenseCheckerCallback}, with methods that display the license check result in a
+dialog. </p>
+
+<pre>
+private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
+    public void allow(int reason) {
+        if (isFinishing()) {
+            // Don't update UI if Activity is finishing.
+            return;
+        }
+        // Should allow user access.
+        displayResult(getString(R.string.allow));
+    }
+
+    public void dontAllow(int reason) {
+        if (isFinishing()) {
+            // Don't update UI if Activity is finishing.
+            return;
+        }
+        displayResult(getString(R.string.dont_allow));
+        
+        if (reason == Policy.RETRY) {
+            // If the reason received from the policy is RETRY, it was probably
+            // due to a loss of connection with the service, so we should give the
+            // user a chance to retry. So show a dialog to retry.
+            showDialog(DIALOG_RETRY);
+        } else {
+            // Otherwise, the user is not licensed to use this app.
+            // Your response should always inform the user that the application
+            // is not licensed, but your behavior at that point can vary. You might
+            // provide the user a limited access version of your app or you can
+            // take them to Google Play to purchase the app.
+            showDialog(DIALOG_GOTOMARKET);
+        }
+    }
+}
+</pre>
+
+<p>Additionally, you should implement the <code>applicationError()</code>
+method, which the LVL calls to let your application handle errors that are not
+retryable. For a list of such errors, see <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
+Response Codes</a> in the <a
+href="guide/google/play/licensing/licensing-reference.html">Licensing Reference</a>. You can implement
+the method in any way needed. In most cases, the
+method should log the error code and call <code>dontAllow()</code>.</p>
+
+<h3 id="thread-handler">Create a Handler for posting from LicenseCheckerCallback
+to the UI thread</h3>
+
+<p>During a license check, the LVL passes the request to the Google Play
+application, which handles communication with the licensing server. The LVL
+passes the request over asynchronous IPC (using {@link android.os.Binder}) so
+the actual processing and network communication do not take place on a thread
+managed by your application. Similarly, when the Google Play application
+receives the result, it invokes a  callback method over IPC, which in turn
+executes in an IPC thread pool in your application's process.</p>
+
+<p>The {@code LicenseChecker} class manages your application's IPC communication with
+the Google Play application, including the call that sends the request and
+the callback that receives the response. {@code LicenseChecker} also tracks open license
+requests and manages their timeouts. </p>
+
+<p>So that it can handle timeouts properly and also process incoming responses
+without affecting your application's UI thread, {@code LicenseChecker} spawns a
+background thread at instantiation. In the thread it does all processing of
+license check results, whether the result is a response received from the server
+or a timeout error. At the conclusion of processing, the LVL calls your
+{@code LicenseCheckerCallback} methods from the background thread. </p>
+
+<p>To your application, this means that:</p>
+
+<ol>
+<li>Your {@code LicenseCheckerCallback} methods will be invoked, in many cases, from a
+background thread.</li>
+<li>Those methods won't be able to update state or invoke any processing in the
+UI thread, unless you create a Handler in the UI thread and have your callback
+methods post to the Handler.</li>
+</ol>
+
+<p>If you want your {@code LicenseCheckerCallback} methods to update the UI thread,
+instantiate a {@link android.os.Handler} in the main Activity's
+{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method,
+as shown below. In this example, the LVL sample application's
+{@code LicenseCheckerCallback} methods (see above) call <code>displayResult()</code> to
+update the UI thread through the Handler's
+{@link android.os.Handler#post(java.lang.Runnable) post()} method.</p>
+
+<pre>private Handler mHandler;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        ...
+        mHandler = new Handler();
+    }
+</pre>
+
+<p>Then, in your {@code LicenseCheckerCallback} methods, you can use Handler methods to
+post Runnable or Message objects to the Handler. Here's how the sample
+application included in the LVL posts a Runnable to a Handler in the UI thread
+to display the license status.</p>
+
+<pre>    private void displayResult(final String result) {
+        mHandler.post(new Runnable() {
+            public void run() {
+                mStatusText.setText(result);
+                setProgressBarIndeterminateVisibility(false);
+                mCheckLicenseButton.setEnabled(true);
+            }
+        });
+    }
+</pre>
+
+<h3 id="lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</h3>
+
+<p>In the main Activity's
+{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method,
+create private instances of LicenseCheckerCallback and {@code LicenseChecker}. You must
+instantiate {@code LicenseCheckerCallback} first, because you need to pass a reference
+to that instance when you call the constructor for {@code LicenseChecker}. </p>
+
+<p>When you instantiate {@code LicenseChecker}, you need to pass in these parameters:</p>
+
+<ul>
+<li>The application {@link android.content.Context}</li>
+<li>A reference to the {@code Policy} implementation to use for the license check. In
+most cases, you would use the default {@code Policy} implementation provided by the LVL,
+ServerManagedPolicy. </li>
+<li>The String variable holding your publisher account's public key for
+licensing. </li>
+</ul>
+
+<p>If you are using ServerManagedPolicy, you won't need to access the class
+directly, so you can instantiate it in the {@code LicenseChecker} constructor,
+as shown in the example below. Note that you need to pass a reference to a new
+Obfuscator instance when you construct ServerManagedPolicy.</p>
+
+<p>The example below shows the instantiation of {@code LicenseChecker} and
+{@code LicenseCheckerCallback} from the <code>onCreate()</code> method of an Activity
+class. </p>
+
+<pre>public class MainActivity extends Activity {
+    ...
+    private LicenseCheckerCallback mLicenseCheckerCallback;
+    private LicenseChecker mChecker;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        ...
+        // Construct the LicenseCheckerCallback. The library calls this when done.
+        mLicenseCheckerCallback = new MyLicenseCheckerCallback();
+
+        // Construct the LicenseChecker with a Policy.
+        mChecker = new LicenseChecker(
+            this, new ServerManagedPolicy(this,
+                new AESObfuscator(SALT, getPackageName(), deviceId)),
+            BASE64_PUBLIC_KEY  // Your public licensing key.
+            );
+        ...
+    }
+}
+</pre>
+
+
+<p>Note that {@code LicenseChecker} calls the {@code LicenseCheckerCallback} methods from the UI
+thread <em>only</em> if there is valid license response cached locally. If the
+license check is sent to the server, the callbacks always originate from the
+background thread, even for network errors. </p>
+
+
+<h3 id="check-access">Call checkAccess() to initiate the license check</h3>
+
+<p>In your main Activity, add a call to the <code>checkAccess()</code> method of the
+{@code LicenseChecker} instance. In the call, pass a reference to your
+{@code LicenseCheckerCallback} instance as a parameter. If you need to handle any
+special UI effects or state management before the call, you might find it useful
+to call <code>checkAccess()</code> from a wrapper method. For example, the LVL
+sample application calls <code>checkAccess()</code> from a
+<code>doCheck()</code> wrapper method:</p>
+
+<pre>    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        ...
+        // Call a wrapper method that initiates the license check
+        doCheck();
+        ...
+    }
+    ...
+    private void doCheck() {
+        mCheckLicenseButton.setEnabled(false);
+        setProgressBarIndeterminateVisibility(true);
+        mStatusText.setText(R.string.checking_license);
+        mChecker.checkAccess(mLicenseCheckerCallback);
+    }
+</pre>
+
+
+<h3 id="account-key">Embed your public key for licensing</h3>
+
+<p>For each publisher account, the Google Play service automatically
+generates a  2048-bit RSA public/private key pair that is used exclusively for
+licensing. The key pair is uniquely associated with the publisher account and is
+shared across all applications that are published through the account. Although
+associated with a publisher account, the key pair is <em>not</em> the same as
+the key that you use to sign your applications (or derived from it).</p>
+
+<p>The Google Play publisher site exposes the public key for licensing to any
+developer signed in to the publisher account, but it keeps the private key
+hidden from all users in a secure location. When an application requests a
+license check for an application published in your account, the licensing server
+signs the license response using the private key of your account's key pair.
+When the LVL receives the response, it uses the public key provided by the
+application to verify the signature of the license response. </p>
+
+<p>To add licensing to an application, you must obtain your publisher account's
+public key for licensing and copy it into your application. Here's how to find
+your account's public key for licensing:</p>
+
+<ol>
+<li>Go to the Google Play <a
+href="http://play.google.com/apps/publish">publisher site</a> and sign in.
+Make sure that you sign in to the account from which the application you are
+licensing is published (or will be published). </li>
+<li>In the account home page, locate the "Edit profile" link and click it. </li>
+<li>In the Edit Profile page, locate the "Licensing" pane, shown below. Your
+public key for licensing is given in the "Public key" text box. </li>
+</ol>
+
+<p>To add the public key to your application, simply copy/paste the key string
+from the text box into your application as the value of the String variable
+<code>BASE64_PUBLIC_KEY</code>. When you are copying, make sure that you have
+selected the entire key string, without omitting any characters. </p>
+
+<p>Here's an example from the LVL sample application:</p>
+
+<pre>    public class MainActivity extends Activity {
+        private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG ... "; //truncated for this example
+    ...
+    }
+</pre>
+
+<h3 id="handler-cleanup">Call your LicenseChecker's onDestroy() method
+to close IPC connections</h3>
+
+<p>Finally, to let the LVL clean up before your application
+{@link android.content.Context} changes, add a call to the {@code LicenseChecker}'s
+<code>onDestroy()</code> method from your Activity's
+{@link android.app.Activity#onDestroy()} implementation. The call causes the
+{@code LicenseChecker} to properly close any open IPC connection to the Google Play
+application's ILicensingService and removes any local references to the service
+and handler.</p>
+
+<p>Failing to call the {@code LicenseChecker}'s <code>onDestroy()</code> method
+can lead to problems over the lifecycle of your application. For example, if the
+user changes screen orientation while a license check is active, the application
+{@link android.content.Context} is destroyed. If your application does not
+properly close the {@code LicenseChecker}'s IPC connection, your application will crash
+when the response is received. Similarly, if the user exits your application
+while a license check is in progress,  your application will crash when the
+response is received, unless it has properly called the
+{@code LicenseChecker}'s <code>onDestroy()</code> method to disconnect from the service.
+</p>
+
+<p>Here's an example from the sample application included in the LVL, where
+<code>mChecker</code> is the {@code LicenseChecker} instance:</p>
+
+<pre>    &#64;Override
+    protected void onDestroy() {
+        super.onDestroy();
+        mChecker.onDestroy();
+        ...
+    }
+</pre>
+
+<p>If you are extending or modifying {@code LicenseChecker}, you might also need to call
+the {@code LicenseChecker}'s <code>finishCheck()</code> method, to clean up any open IPC
+connections.</p>
+
+<h2 id="impl-DeviceLimiter">Implementing a DeviceLimiter</h2>
+
+<p>In some cases, you might want your {@code Policy} to limit the number of actual
+devices that are permitted to use a single license. This would prevent a user
+from moving a licensed application onto a number of devices and using the
+application on those devices under the same account ID. It would also prevent a
+user from "sharing" the application by providing the account information
+associated with the license to other individuals, who could then sign in to that
+account on their devices and access the license to the application. </p>
+
+<p>The LVL supports per-device licensing by providing a
+<code>DeviceLimiter</code> interface, which declares a single method,
+<code>allowDeviceAccess()</code>. When a LicenseValidator is handling a response
+from the licensing server, it calls <code>allowDeviceAccess()</code>, passing a
+user ID string extracted from the response.</p>
+
+<p>If you do not want to support device limitation, <strong>no work is
+required</strong> &mdash; the {@code LicenseChecker} class automatically uses a default
+implementation called NullDeviceLimiter. As the name suggests, NullDeviceLimiter
+is a "no-op" class whose <code>allowDeviceAccess()</code> method simply returns
+a <code>LICENSED</code> response for all users and devices. </p>
+
+<div style="border-left:4px solid #FFCF00;margin:1em;padding: 0 0 0 .5em">
+<p><strong>Caution:</strong> Per-device licensing is <em>not recommended for
+most applications</em> because:</p>
+<ul>
+<li>It requires that you provide a backend server to manage a users and devices
+mapping, and </li>
+<li>It could inadvertently result in a user being denied access to an
+application that they have legitimately purchased on another device.</li>
+</ul>
+</div>
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="app-obfuscation">Obfuscating Your Code</h2>
+
+<p>To ensure the security of your application, particularly for a paid
+application that uses licensing and/or custom constraints and protections, it's
+very important to obfuscate your application code. Properly obfuscating your
+code makes it more difficult for a malicious user to decompile the application's
+bytecode, modify it &mdash; such as by removing the license check &mdash;
+and then recompile it.</p>
+
+<p>Several obfuscator programs are available for Android applications, including
+<a href="http://proguard.sourceforge.net/">ProGuard</a>, which also offers
+code-optimization features. The use of ProGuard or a similar program to obfuscate
+your code is <em>strongly recommended</em> for all applications that use Google
+Play Licensing. </p>
+
+<h2 id="app-publishing">Publishing a Licensed Application</h2>
+
+<p>When you are finished testing your license implementation, you are ready to
+publish the application on Google Play. Follow the normal steps to <a
+href="{@docRoot}tools/publishing/preparing.html">prepare</a>, <a
+href="{@docRoot}tools/publishing/app-signing.html">sign</a>, and then <a
+href="{@docRoot}distribute/googleplay/publish/preparing.html">publish the application</a>.
+</p>
+
+<h3>Removing Copy Protection</h3>
+
+<p>After uploading your licensed application, remember to remove copy protection
+from the application, if it is currently used. To check and remove copy
+protection, sign in to the publisher site and go the application's upload
+details page. In the Publishing options section, make sure that the Copy
+Protection radio button selection is "Off".</p>
+
+
+<h2 id="support">Where to Get Support</h2>
+
+<p>If you have questions or encounter problems while implementing or deploying
+publishing in your applications, please use the support resources listed in the
+table below. By directing your queries to the correct forum, you can get the
+support you need more quickly. </p>
+
+<p class="table-caption"><strong>Table 2.</strong> Developer support resources
+for Google Play Licensing Service.</p>
+
+<table>
+
+<tr>
+<th>Support Type</th>
+<th>Resource</th>
+<th>Range of Topics</th>
+</tr>
+<tr>
+<td rowspan="2">Development and testing issues</td>
+<td>Google Groups: <a
+href="http://groups.google.com/group/android-developers">android-developers</a>
+</td>
+<td rowspan="2">LVL download and integration, library projects, {@code Policy}
+questions, user experience ideas, handling of responses, {@code Obfuscator}, IPC, test
+environment setup</td>
+</tr>
+<tr>
+<td>Stack Overflow: <a
+href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/android</a></td>
+</tr>
+<tr>
+<td rowspan="2">Accounts, publishing, and deployment issues</td>
+<td><a href="http://www.google.com/support/forum/p/Android+Market">Google Play
+Help Forum</a></td>
+<td rowspan="2">Publisher accounts, licensing key pair, test accounts, server
+responses, test responses, application deployment and results</td>
+</tr>
+<tr>
+<td><a
+href="http://market.android.com/support/bin/answer.py?answer=186113">Market
+Licensing Support FAQ</a></td>
+</tr>
+<tr>
+<td>LVL issue tracker</td>
+<td><a href="http://code.google.com/p/marketlicensing/issues/">Marketlicensing
+project issue tracker</a></td>
+<td>Bug and issue reports related specifically to the LVL source code classes
+and interface implementations</td>
+</tr>
+
+</table>
+
+<p>For general information about how to post to the groups listed above, see <a
+href="{@docRoot}resources/community-groups.html">Developer Forums</a> document
+in the Resources tab.</p>
+
+
diff --git a/docs/html/guide/google/play/licensing/index.jd b/docs/html/guide/google/play/licensing/index.jd
new file mode 100644
index 0000000..d393738
--- /dev/null
+++ b/docs/html/guide/google/play/licensing/index.jd
@@ -0,0 +1,61 @@
+page.title=Application Licensing
+@jd:body
+
+
+<p>Google Play offers a licensing service that lets you enforce licensing policies for
+applications that you publish on Google Play. With Google Play Licensing, your application can
+query Google Play at run time to obtain the licensing status for the current user, then allow or
+disallow further use as appropriate. </p>
+
+<p>Using the service, you can apply a flexible licensing policy on an application-by-application
+basis&mdash;each application can enforce licensing in the way most appropriate for it. If necessary,
+an application can apply custom constraints based on the licensing status obtained from Google Play.
+For example, an application can check the licensing status and then apply custom constraints
+that allow the user to run it unlicensed for a specific validity period. An application can also
+restrict use of the application to a specific device, in addition to any other constraints. </p>
+
+<p>The licensing service is a secure means of controlling access to your applications. When an
+application checks the licensing status, the Google Play server signs the licensing status
+response using a key pair that is uniquely associated with the publisher account. Your application
+stores the public key in its compiled <code>.apk</code> file and uses it to verify the licensing
+status response.</p>
+
+<p>Any application that you publish through Google Play can use the Google Play Licensing
+service. No special account or registration is needed. Additionally, because the service uses no
+dedicated framework APIs, you can add licensing to any application that uses a minimum API level of
+3 or higher.</p>
+
+<p class="note"><strong>Note:</strong> The Google Play Licensing service is primarily intended
+for paid applications that wish to verify that the current user did in fact pay for the application
+on Google Play. However, any application (including free apps) may use the licensing service
+to initiate the download of an APK expansion file. In which case, the request that your application
+sends to the licensing service is not to check whether the user paid for the app, but to request the
+URL of the expansion files. For information about downloading expansion files for your application,
+read the guide to <a href="{@docRoot}guide/google/play/expansion-files.html">APK Expansion Files</a>.</p>
+
+
+<p>To learn more about Google Play's application licensing service and start integrating it into
+your applications, read the following documents:</p>
+
+<dl>
+  <dt><strong><a href="{@docRoot}guide/google/play/licensing/overview.html">Licensing
+Overview</a></strong></dt>
+    <dd>Describes how the service works and what a typical licensing implementation looks
+like.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for
+Licensing</a></strong></dt>
+    <dd>Explains how to set up your Google Play account, development environment, and
+testing environment in order to add licensing to your app.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
+Licensing to Your App</a></strong></dt>
+    <dd>Provides a step-by-step guide to add licensing verification to your application.</dd>
+  <dt><strong><a href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing
+Reference</a></strong></dt>
+    <dd>Provides detailed information about the licensing library's classes and the service response
+codes.</dd>
+</dl>
+
+
+
+
+
diff --git a/docs/html/guide/google/play/licensing/licensing-reference.jd b/docs/html/guide/google/play/licensing/licensing-reference.jd
new file mode 100644
index 0000000..d3d5224
--- /dev/null
+++ b/docs/html/guide/google/play/licensing/licensing-reference.jd
@@ -0,0 +1,439 @@
+page.title=Licensing Reference
+parent.title=Application Licensing
+parent.link=index.html
+@jd:body
+
+
+
+<div id="qv-wrapper">
+<div id="qv">
+  
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#lvl-summary">LVL Classes and Interfaces</a></li>
+    <li><a href="#server-response-codes">Server Response Codes</a></li>
+    <li><a href="#extras">Server Response Extras</a></li>
+  </ol>
+
+</div>
+</div>
+
+
+<h2 id="lvl-summary">LVL Classes and Interfaces</h2>
+
+<p>Table 1 lists all of the source files in the License Verification
+Library (LVL) available through the Android SDK. All of the files are part of
+the <code>com.android.vending.licensing</code> package.</p>
+
+<p class="table-caption"><strong>Table 1.</strong> Summary of LVL library
+classes and interfaces.</p>
+
+<div style="width:99%">
+<table width="100%">
+
+<tr>
+<th width="15%">Category</th>
+<th width="20%">Name</th>
+<th width="100%">Description</th>
+</tr>
+
+<tr>
+<td rowspan="2">License check and result</td>
+<td>LicenseChecker</td>
+<td>Class that you instantiate (or subclass) to initiate a license check.</td>
+</tr>
+<tr>
+<td><em>LicenseCheckerCallback</em></td>
+<td>Interface that you implement to handle result of the license check.</td>
+</tr>
+
+<tr>
+<td rowspan="3" width="15%">Policy</td>
+<td width="20%"><em>Policy</em></td>
+<td width="100%">Interface that you implement to determine whether to allow
+access to the application, based on the license response. </td>
+</tr>
+<tr>
+<td>ServerManagedPolicy</td>
+<td width="100%">Default {@code Policy} implementation. Uses settings provided by the
+licensing server to manage local storage of license data, license validity,
+retry.</td>
+</tr>
+<tr>
+<td>StrictPolicy</td>
+<td>Alternative {@code Policy} implementation. Enforces licensing based on a direct
+license response from the server only. No caching or request retry.</td>
+</tr>
+
+<tr>
+<td rowspan="2" width="15%">Data obfuscation <br><em>(optional)</em></td>
+<td width="20%"><em>Obfuscator</em></td>
+<td width="100%">Interface that you implement if you are using a {@code Policy} (such as
+ServerManagedPolicy) that caches license response data in a persistent store.
+Applies an obfuscation algorithm to encode and decode data being written or
+read.</td>
+</tr>
+<tr>
+<td>AESObfuscator</td>
+<td>Default Obfuscator implementation that uses AES encryption/decryption
+algorithm to obfuscate/unobfuscate data.</td>
+</tr>
+
+<tr>
+<td rowspan="2" width="15%">Device limitation<br><em>(optional)</em></td>
+<td width="20%"><em>DeviceLimiter</em></td>
+<td width="100%">Interface that you implement if you want to restrict use of an
+application to a specific device. Called from LicenseValidator. Implementing
+DeviceLimiter is not recommended for most applications because it requires a
+backend server and may cause the user to lose access to licensed applications,
+unless designed with care.</td>
+</tr>
+<tr>
+<td>NullDeviceLimiter</td>
+<td>Default DeviceLimiter implementation that is a no-op (allows access to all
+devices).</td>
+</tr>
+
+<tr>
+<td rowspan="6" width="15%">Library core, no integration needed</td>
+<td width="20%">ResponseData</td>
+<td width="100%">Class that holds the fields of a license response.</td>
+</tr>
+<tr>
+<td>LicenseValidator</td>
+<td>Class that decrypts and verifies a response received from the licensing
+server.</td>
+</tr>
+<tr>
+<td>ValidationException</td>
+<td>Class that indicates errors that occur when validating the integrity of data
+managed by an Obfuscator.</td>
+</tr>
+<tr>
+<td>PreferenceObfuscator</td>
+<td>Utility class that writes/reads obfuscated data to the system's
+{@link android.content.SharedPreferences} store.</td>
+</tr>
+<tr>
+<td><em>ILicensingService</em></td>
+<td>One-way IPC interface over which a license check request is passed to the
+Google Play client.</td>
+</tr>
+<tr>
+<td><em>ILicenseResultListener</em></td>
+<td>One-way IPC callback implementation over which the application receives an
+asynchronous response from the licensing server.</td>
+</tr>
+
+</table>
+</div>
+
+
+<h2 id="server-response-codes">Server Response Codes</h2>
+
+<p>Table 2 lists all of the license response codes supported by the
+licensing server. In general, an application should handle all of these response
+codes. By default, the LicenseValidator class in the LVL provides all of the
+necessary handling of these response codes for you. </p>
+
+<p class="table-caption"><strong>Table 2.</strong> Summary of response codes
+returned by the Google Play server in a license response.</p>
+
+<table>
+
+<tr>
+<th>Response Code</th>
+<th>Description</th>
+<th>Signed?</th>
+<th>Extras</th>
+<th>Comments</th>
+</tr>
+<tr>
+<td>{@code LICENSED}</td>
+<td>The application is licensed to the user. The user has purchased the
+application or the application only exists as a draft.</td>
+<td>Yes</td>
+<td><code>VT</code>,&nbsp;<code>GT</code>, <code>GR</code></td>
+<td><em>Allow access according to {@code Policy} constraints.</em></td>
+</tr>
+<tr>
+<td>{@code LICENSED_OLD_KEY}</td>
+<td>The application is licensed to the user, but there is an updated application
+version available that is signed with a different key. </td>
+<td>Yes </td>
+<td><code>VT</code>, <code>GT</code>, <code>GR</code>, <code>UT</code></td>
+<td><em>Optionally allow access according to {@code Policy} constraints.</em>
+<p style="margin-top:.5em;">Can indicate that the key pair used by the installed
+application version is invalid or compromised. The application can allow access
+if needed or inform the user that an upgrade is available and limit further use
+until upgrade.</p>
+</td>
+</tr>
+<tr>
+<td>{@code NOT_LICENSED}</td>
+<td>The application is not licensed to the user.</td>
+<td>No</td>
+<td></td>
+<td><em>Do not allow access.</em></td>
+</tr>
+<tr>
+<td>{@code ERROR_CONTACTING_SERVER}</td>
+<td>Local error &mdash; the Google Play application was not able to reach the
+licensing server, possibly because of network availability problems. </td>
+<td>No</td>
+<td></td>
+<td><em>Retry the license check according to {@code Policy} retry limits.</em></td>
+</tr>
+<tr>
+<td>{@code ERROR_SERVER_FAILURE}</td>
+<td>Server error &mdash; the server could not load the publisher account's key
+pair for licensing.</td>
+<td>No</td>
+<td></td>
+<td><em>Retry the license check according to {@code Policy} retry limits.</em>
+</td>
+</tr>
+<tr>
+<td>{@code ERROR_INVALID_PACKAGE_NAME}</td>
+<td>Local error &mdash; the application requested a license check for a package
+that is not installed on the device. </td>
+<td>No </td>
+<td></td>
+<td><em>Do not retry the license check.</em>
+<p style="margin-top:.5em;">Typically caused by a development error.</p>
+</td>
+</tr>
+<tr>
+<td>{@code ERROR_NON_MATCHING_UID}</td>
+<td>Local error &mdash; the application requested a license check for a package
+whose UID (package, user ID pair) does not match that of the requesting
+application. </td>
+<td>No </td>
+<td></td>
+<td><em>Do not retry the license check.</em>
+<p style="margin-top:.5em;">Typically caused by a development error.</p>
+</td>
+</tr>
+<tr>
+<td>{@code ERROR_NOT_MARKET_MANAGED}</td>
+<td>Server error &mdash; the application (package name) was not recognized by
+Google Play. </td>
+<td>No</td>
+<td></td>
+<td><em>Do not retry the license check.</em>
+<p style="margin-top:.5em;">Can indicate that the application was not published
+through Google Play or that there is an development error in the licensing
+implementation.</p>
+</td>
+</tr>
+
+</table>
+
+<p class="note"><strong>Note:</strong> As documented in <a
+href="{@docRoot}guide/google/play/licensing/setting-up.html#test-env">
+Setting Up The Testing Environment</a>, the response code can be manually
+overridden for the application developer and any registered test users via the
+Google Play publisher site.
+<br/><br/>
+Additionally, as noted above, applications that are in draft mode (in other
+words, applications that have been uploaded but have <em>never</em> been
+published) will return {@code LICENSED} for all users, even if not listed as a test
+user. Since the application has never been offered for download, it is assumed
+that any users running it must have obtained it from an authorized channel for
+testing purposes.</p>
+
+
+
+
+<h2 id="extras">Server Response Extras</h2>
+
+<p>To assist your application in managing access to the application across the application refund
+period and provide other information, The licensing server includes several pieces of
+information in the license responses. Specifically, the service provides recommended values for the
+application's license validity period, retry grace period, maximum allowable retry count, and other
+settings. If your application uses <a href="{@docRoot}guide/google/play/expansion-files.html">APK
+expansion files</a>, the response also includes the file names, sizes, and URLs. The server appends
+the settings as key-value pairs in the license response "extras" field. </p>
+
+<p>Any {@code Policy} implementation can extract the extras settings from the license
+response and use them as needed. The LVL default {@code Policy} implementation, <a
+href="{@docRoot}guide/google/play/licensing/adding-licensing.html#ServerManagedPolicy">{@code
+ServerManagedPolicy}</a>, serves as a working
+implementation and an illustration of how to obtain, store, and use the
+settings. </p>
+
+<p class="table-caption"><strong>Table 3.</strong> Summary of
+license-management settings supplied by the Google Play server in a license
+response.</p>
+
+<table>
+<tr>
+<th>Extra</th><th>Description</th>
+</tr>
+
+<tr>
+  <td>{@code VT}</td>
+  <td>License validity timestamp. Specifies the date/time at which the current
+(cached) license response expires and must be rechecked on the licensing server. See the section
+below about <a href="#VT">License validity period</a>.
+ </td>
+</tr>
+<tr>
+  <td>{@code GT}</td>
+  <td>Grace period timestamp. Specifies the end of the period during which a
+Policy may allow access to the application, even though the response status is
+{@code RETRY}. <p>The value is managed by the server, however a typical value would be 5
+or more days. See the section
+below about <a href="#GTGR">Retry period and maximum retry count</a>.</p></td>
+</tr>
+<tr>
+  <td>{@code GR}</td>
+  <td>Maximum retries count. Specifies how many consecutive {@code RETRY} license checks
+the {@code Policy} should allow, before denying the user access to the application.
+<p>The value is managed by the server, however a typical value would be "10" or
+higher. See the section
+below about <a href="#GTGR">Retry period and maximum retry count</a>.</p></td>
+</tr>
+<tr>
+  <td>{@code UT}</td>
+  <td>Update timestamp. Specifies the day/time when the most recent update to
+this application was uploaded and published. <p>The server returns this extra
+only for {@code LICENSED_OLD_KEYS} responses, to allow the {@code Policy} to determine how much
+time has elapsed since an update was published with new licensing keys before
+denying the user access to the application. </p></td>
+</tr>
+
+
+<!-- APK EXPANSION FILE RESPONSES -->
+
+<tr>
+  <td>{@code FILE_URL1} or {@code FILE_URL2}</td>
+  <td>The URL for an expansion file (1 is for the main file, 2 is the patch file). Use this to
+download the file over HTTP.</td>
+</tr>
+<tr>
+  <td>{@code FILE_NAME1} or {@code FILE_NAME2}</td>
+  <td>The expansion file's name (1 is for the main file, 2 is the patch file). You must use this
+name when saving the file on the device.</td>
+</tr>
+<tr>
+  <td>{@code FILE_SIZE1} or {@code FILE_SIZE2}</td>
+  <td>The size of the file in bytes (1 is for the main file, 2 is the patch file). Use this to
+assist with downloading and to ensure that enough space is available on the device's shared
+storage location before downloading.</td>
+</tr>
+
+</table>
+
+
+
+<h4 id="VT">License validity period</h4>
+
+<p>The Google Play licensing server sets a license validity period for all
+downloaded applications. The period expresses the interval of time over which an
+application's license status should be considered as unchanging and cacheable by
+a licensing {@code Policy} in the application. The licensing server includes the
+validity period in its response to all license checks, appending an
+end-of-validity timestamp to the response as an extra under the key {@code VT}. A
+{@code Policy} can extract the VT key value and use it to conditionally allow access to
+the application without rechecking the license, until the validity period
+expires. </p>
+
+<p>The license validity signals to a licensing {@code Policy} when it must recheck the
+licensing status with the licensing server. It is <em>not</em> intended to imply
+whether an application is actually licensed for use. That is, when an
+application's license validity period expires, this does not mean that the
+application is no longer licensed for use &mdash; rather, it indicates only that
+the {@code Policy} must recheck the licensing status with the server. It follows that,
+as long as the license validity period has not expired, it is acceptable for the
+{@code Policy} to cache the initial license status locally and return the cached license
+status instead of sending a new license check to the server.</p>
+
+<p>The licensing server manages the validity period as a means of helping the
+application properly enforce licensing across the refund period offered by
+Google Play for paid applications. It sets the validity period based on
+whether the application was purchased and, if so, how long ago. Specifically,
+the server sets a validity period as follows:</p>
+
+<ul>
+<li>For a paid application, the server sets the initial license validity period
+so that the license response remains valid for as long as the application is
+refundable. A licensing {@code Policy} in the application may cache the
+result of the initial license check and does not need to recheck the license
+until the validity period has expired.</li>
+<li>When an application is no longer refundable, the server
+sets a longer validity period &mdash; typically a number of days. </li>
+
+<!-- TODO: Verify the following behavior is still true w/ OBB: -->
+<li>For a free application, the server sets the validity period to a very high
+value (<code>long.MAX_VALUE</code>). This ensures that, provided the {@code Policy} has
+cached the validity timestamp locally, it will not need to recheck the
+license status of the application in the future.</li>
+</ul>
+
+<p>The {@code ServerManagedPolicy} implementation uses the extracted timestamp
+(<code>mValidityTimestamp</code>) as a primary condition for determining whether
+to recheck the license status with the server before allowing the user access to
+the application. </p>
+
+
+<h4 id="GTGR">Retry period and maximum retry count</h4>
+
+<p>In some cases, system or network conditions can prevent an application's
+license check from reaching the licensing server, or prevent the server's
+response from reaching the Google Play client application. For example, the
+user might launch an application when there is no cell network or data
+connection available&mdash;such as when on an airplane&mdash;or when the
+network connection is unstable or the cell signal is weak. </p>
+
+<p>When network problems prevent or interrupt a license check, the Google
+Play client notifies the application by returning a {@code RETRY} response code to
+the {@code Policy}'s <code>processServerResponse()</code> method. In the case of system
+problems, such as when the application is unable to bind with Google Play's
+{@code ILicensingService} implementation, the {@code LicenseChecker} library itself calls the
+Policy <code>processServerResonse()</code> method with a {@code RETRY} response code.
+</p>
+
+<p>In general, the {@code RETRY} response code is a signal to the application that an
+error has occurred that has prevented a license check from completing.
+
+<p>The Google Play server helps an application to manage licensing under
+error conditions by setting a retry "grace period" and a recommended maximum
+retries count. The server includes these values in all license check responses,
+appending them as extras under the keys {@code GT} and {@code GR}. </p>
+
+<p>The application {@code Policy} can extract the {@code GT} and {@code GR} extras and use them to
+conditionally allow access to the application, as follows:</p>
+
+<ul>
+<li>For a license check that results in a {@code RETRY} response, the {@code Policy} should
+cache the {@code RETRY} response code and increment a count of {@code RETRY} responses.</li>
+<li>The {@code Policy} should allow the user to access the application, provided that
+either the retry grace period is still active or the maximum retries count has
+not been reached.</li>
+</ul>
+
+<p>The {@code ServerManagedPolicy} uses the server-supplied {@code GT} and {@code GR} values as
+described above. The example below shows the conditional handling of the retry
+responses in the <code>allow()</code> method. The count of {@code RETRY} responses is
+maintained in the <code>processServerResponse()</code> method, not shown. </p>
+
+
+<pre>    
+public boolean allowAccess() {
+    long ts = System.currentTimeMillis();
+    if (mLastResponse == LicenseResponse.LICENSED) {
+        // Check if the LICENSED response occurred within the validity timeout.
+        if (ts &lt;= mValidityTimestamp) {
+            // Cached LICENSED response is still valid.
+            return true;
+        }
+    } else if (mLastResponse == LicenseResponse.RETRY &amp;&amp;
+                ts &lt; mLastResponseTime + MILLIS_PER_MINUTE) {
+        // Only allow access if we are within the retry period or we haven't used up our
+        // max retries.
+        return (ts &lt;= mRetryUntil || mRetryCount &lt;= mMaxRetries);
+    }
+    return false;
+}</pre>
+
diff --git a/docs/html/guide/google/play/licensing/overview.jd b/docs/html/guide/google/play/licensing/overview.jd
new file mode 100644
index 0000000..467a3a2
--- /dev/null
+++ b/docs/html/guide/google/play/licensing/overview.jd
@@ -0,0 +1,246 @@
+page.title=Licensing Overview
+parent.title=Application Licensing
+parent.link=index.html
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+  
+  <h2>Quickview</h2>
+  <ul>
+    <li>Licensing allows you to verify your app was purchased from Google Play</li>
+    <li>Your app maintains control of how it enforces its licensing status</li>
+    <li>The service is free for all developers who publish on Google Play</li>
+  </ul>
+  
+  <h2>In this document</h2>
+  <ol>
+  <li><a href="#Secure">License Responses are Secure</a></li>
+  <li><a href="#LVL">Licensing Verification Library</a></li>
+  <li><a href="#Reqs">Requirements and Limitations</a></li>
+  <li><a href="#CopyProtection">Replacement for Copy Protection</a></li>
+</ol>
+  
+</div>
+</div>
+
+
+<p>Google Play Licensing is a network-based service that lets an application query a trusted
+Google Play licensing server to determine whether the application is licensed to the current
+device user. The licensing service is based on the capability of the Google Play licensing server
+to determine whether a given user is licensed to use a given application. Google Play considers a
+user to be licensed if the user is a recorded purchaser of the application.</p>
+
+<p>The request starts when your application makes a request to a service hosted by
+the Google Play client application. The Google Play application then sends a request to
+the licensing server and receives the result. The Google Play application sends
+the result to your application, which can allow or disallow further use of the
+application as needed.</p>
+
+<p class="note"><strong>Note:</strong> If a paid application has been uploaded to Google Play but
+saved only as a draft application (the app is unpublished), the licensing server considers all users
+to be licensed users of the application (because it's not even possible to purchase the app).
+This exception is necessary in order for you to perform testing of your licensing
+implementation.</p>
+
+
+<div class="figure" style="width:469px">
+<img src="{@docRoot}images/licensing_arch.png" alt=""/>
+<p class="img-caption"><strong>Figure 1.</strong> Your application initiates a
+license check through the License Verification Library and the Google Play
+client, which handles communication with the Google Play server.</p>
+</div>
+
+
+<p>To properly identify the user and determine the license status, the licensing server requires
+information about the application and user&mdash;your application and the Google Play client work
+together to assemble the information and the Google Play client passes it to the server. </p>
+
+<p>To help you add licensing to your application, the Android SDK provides a downloadable set of
+library sources that you can include in your application project: the Google Market
+Licensing package. The License Verification Library (LVL) is a library you can add to your
+application that
+handles all of the licensing-related communication with the Google Play licensing service. With
+the LVL added to your application, your application can determine its licensing status for the
+current user by simply calling a method and implementing a callback that receives the status
+response.</p>
+
+<p>Your application does not query the licensing server
+directly, but instead calls the Google Play client over remote IPC to
+initiate a license request. In the license request:</p>
+
+<ul>
+<li>Your application provides: its package name, a nonce that is later used to
+validate any response from the server, and a callback over which the
+response can be returned asynchronously.</li>
+<li>The Google Play client collects the necessary information about the user and the device,
+such as the device's primary Google account username, IMSI, and other
+information. It then sends the license check request to the server on behalf of
+your application.</li>
+<li>The Google Play server evaluates the request using all available information, attempting
+to establish the user's identity to a sufficient level of confidence. The server
+then checks the user identity against purchase records for your application and
+returns a license response, which the Google Play client returns to your
+application over the IPC callback.</li>
+</ul>
+
+<p>You can choose when, and how often, you want your application to check its
+license and you have full control over how it handles the response, verifies the
+signed response data, and enforces access controls.</p>
+
+<p>Notice that during a license check, your application does not manage any
+network connections or use any licensing related APIs in the Android platform.</p>
+
+
+
+
+<h2 id="Secure">License Responses are Secure</h2>
+
+<p>To ensure the integrity of each license query, the server signs the license
+response data using an RSA key pair that is shared exclusively between the Google Play
+server and you.</p>
+
+<p>The licensing service generates a single licensing key pair for each
+publisher account and exposes the public key in your account's profile page. You must copy the
+public key from the web site and embed it in your application source code. The server retains the
+private key internally and uses it to sign license responses for the applications you
+publish with that account.</p>
+
+<p>When your application receives a signed response, it uses the embedded public
+key to verify the data. The use of public key cryptography in the licensing
+service makes it possible for the application to detect responses that have been
+tampered with or that are spoofed.</p>
+
+
+
+
+<h2 id="LVL">Licensing Verification Library</h2>
+
+<p>The Android SDK provides a downloadable package called the Google Market Licensing package,
+which includes the License Verification Library (LVL). The LVL greatly simplifies the process of
+adding licensing to your application and helps ensure a more secure, robust implementation for your
+application. The LVL provides internal classes that handle most of the standard operations of a
+license query, such as contacting the Google Play client to initiate a license request and
+verifying and validating the responses. It also exposes interfaces that let you easily plug in your
+custom code for defining licensing policy and managing access as needed by your application. The key
+LVL interfaces are: </p>
+
+<dl>
+<dt>{@code Policy}</dt>
+  <dd>Your implementation determines whether to allow access to the
+application, based on the license response received from the server and any
+other data available (such as from a backend server associated with your
+application). The implementation can evaluate the various fields of the license
+response and apply other constraints, if needed. The implementation also lets
+you manage the handling of license checks that result in errors, such as network
+errors.</dd>
+
+<dt>{@code LicenseCheckerCallback}</dt>
+  <dd>Your implementation manages access to the
+application, based on the result of the {@code Policy} object's handling of the license
+response. Your implementation can manage access in any way needed, including
+displaying the license result in the UI or directing the user to purchase the
+application (if not currently licensed).</dd>
+</dl>
+
+
+<p>To help you get started with a {@code Policy}, the LVL provides two fully complete
+{@code Policy} implementations that you can use without modification or adapt to your
+needs:</p>
+
+<dl>
+<dt><a href="adding-licensing.html#ServerManagedPolicy">{@code ServerManagedPolicy}</a></dt>
+  <dd>A flexible {@code Policy}
+that uses settings provided by the licensing server to manage response caching
+and access to the application while the device is offline (such as when the
+user is on an airplane). For most applications, the use of
+{@code ServerManagedPolicy} is highly recommended.</dd>
+
+<dt><a href="adding-licensing.html#StrictPolicy">{@code StrictPolicy}</a></dt>
+  <dd>A restrictive {@code Policy} that
+does not cache any response data and allows the application access <em>only</em>
+when the server returns a licensed response.</dd>
+</dl>
+
+<p>The LVL is available as a downloadable package of the Android SDK. The
+package includes both the LVL itself and an example application that shows how
+the library should be integrated with your application and how your application
+should manage response data, UI interaction, and error conditions. </p>
+
+<p>The LVL sources are provided as an Android <em>library project</em>, which
+means that you can maintain a single set of library sources and share them
+across multiple applications. A full test environment is also available through
+the SDK, so you can develop and test the licensing implementation in your
+applications before publishing them, even if you don't have access to a
+physical device.</p>
+
+
+
+
+<h2 id="Reqs">Requirements and Limitations</h2>
+
+<p>Google Play Licensing is designed to let you apply license controls to
+applications that you publish through Google Play. The service is not
+designed to let you control access to applications that are not published
+through Google Play or that are run on devices that do not offer the Google
+Play client. </p>
+
+<p>Here are some points to keep in mind as you implement licensing in your
+application: </p>
+
+<ul>
+<li>An application can use the service only if the Google Play client is
+installed on its host device and the device is running Android 1.5 (API level 3)
+or higher.</li>
+<li>To complete a license check, the licensing server must be accessible over
+the network. You can implement license caching behaviors to manage access to your application when
+there is no network connectivity. </li>
+<li>The security of your application's licensing controls ultimately relies on
+the design of your implementation itself. The service provides the building
+blocks that let you securely check licensing, but the actual enforcement and
+handling of the license are factors are up to you. By following the best
+practices in the following documents, you can help ensure that your implementation will be
+secure.</li>
+<li>Adding licensing to an application does not affect the way the application
+functions when run on a device that does not offer Google Play.</li>
+<li>You can implement licensing controls for a free app, but only if you're using the service to 
+provide <a
+href="{@docRoot}guide/google/play/expansion-files.html">APK expansion files</a>.</li>
+</ul>
+
+
+
+<h2 id="CopyProtection">Replacement for Copy Protection</h2>
+
+<p>Google Play Licensing is a flexible, secure mechanism for controlling
+access to your applications. It effectively replaces the Copy Protection
+mechanism offered on Google Play and gives you wider distribution
+potential for your applications. </p>
+
+<ul>
+<li>A limitation of the legacy Copy Protection mechanism on Google Play is
+that applications using it can be installed only on compatible devices that
+provide a secure internal storage environment. For example, a copy-protected
+application cannot be downloaded from Google Play to a device that provides root
+access, and the application cannot be installed to a device's SD card. </li>
+<li>With Google Play licensing, you can move to a license-based model in
+which access is not bound to the characteristics of the host device, but to your
+publisher account on Google Play and the licensing policy that you define.
+Your application can be installed and controlled on any compatible device on
+any storage, including SD card.</li>
+</ul>
+
+<p>Although no license mechanism can completely prevent all unauthorized use,
+the licensing service lets you control access for most types of normal usage,
+across all compatible devices, locked or unlocked, that run Android 1.5 or
+higher version of the platform.</p>
+
+<p>To begin adding application licensing to your application, continue to <a
+href="{@docRoot}guide/google/play/licensing/setting-up.html">Setting Up for Licensing</a>.</p>
+
+
+
+
+
+
diff --git a/docs/html/guide/google/play/licensing/setting-up.jd b/docs/html/guide/google/play/licensing/setting-up.jd
new file mode 100644
index 0000000..80a4419
--- /dev/null
+++ b/docs/html/guide/google/play/licensing/setting-up.jd
@@ -0,0 +1,701 @@
+page.title=Setting Up for Licensing
+parent.title=Application Licensing
+parent.link=index.html
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+  
+  <h2>In this document</h2>
+  <ol>
+  <li><a href="#account">Setting Up a Publisher Account</a></li>
+  <li><a href="#dev-setup">Setting Up the Development Environment</a>
+    <ol>
+      <li><a href="#runtime-setup">Setting up the runtime environment</a></li>
+      <li><a href="#download-lvl">Downloading the LVL</a></li>
+      <li><a href="#lvl-setup">Setting Up the Licensing Verification Library</a></li>
+      <li><a href="#add-library">Including the LVL library project sources in your
+application</a></li>
+    </ol>
+  </li>
+  <li><a href="#test-env">Setting Up the Testing Environment</a>
+    <ol>
+      <li><a href="#test-response">Setting test responses for license checks</a></li>
+      <li><a href="#test-acct-setup">Setting up test accounts</a></li>
+      <li><a href="#acct-signin">Signing in to an authorized account in the runtime
+environment</a></li>
+    </ol>
+  </li>
+</ol>
+</div>
+</div>
+
+<p>Before you start adding license verification to your application, you need to set up your Google
+Play publishing account, your development environment, and test accounts required to verify
+your implementation.</p>
+
+
+<h2 id="account">Setting Up a Publisher Account</h2>
+
+<p>If you don't already have a publisher account for Google Play, you need to register for one
+using your Google account and agree to the terms of service on the Google Play publisher site:</p>
+
+<p style="margin-left:2em;"><a
+href="http://play.google.com/apps/publish">http://play.google.com/apps/publish</a>
+</p>
+
+<p>For more information, see <a
+href="{@docRoot}distribute/googleplay/publish/register.html">Get Started with Publishing</a>.</p>
+
+<p>If you already have a publisher account on Google Play, use your existing
+account to set up licensing.</p>
+
+<p>Using your publisher account on Google Play, you can:</p>
+
+<ul>
+<li>Obtain a public key for licensing</li>
+<li>Debug and test an application's licensing implementation, prior to
+publishing the application</li>
+<li>Publish the applications to which you have added licensing support</li>
+</ul>
+
+<h4>Administrative settings for licensing</h4>
+
+<p>You can manage several
+administrative controls for Google Play licensing on the publisher site. The controls are available
+in the Edit Profile page, in the "Licensing" panel, shown in figure 1. The controls
+let you: </p>
+
+<ul>
+<li>Set up multiple "test accounts," identified by email address. The licensing
+server allows users signed in to test accounts on a device or emulator to send
+license checks and receive static test responses.</li>
+<li>Obtain the account's public key for licensing. When you are implementing
+licensing in an application, you must copy the public key string into the
+application.</li>
+<li>Configure static test responses that the server sends, when it receives a
+license check for an application uploaded to the publisher account, from a user
+signed in to the publisher account or a test account.</li>
+</ul>
+
+
+<img src="{@docRoot}images/licensing_public_key.png" alt=""/>
+<p class="img-caption"><strong>Figure 1.</strong> The Licensing
+panel of your account's Edit Profile page lets you manage administrative
+settings for licensing.</p>
+
+<p>For more information about how to work with test accounts and static test
+responses, see <a href="#test-env">Setting Up a Testing Environment</a>, below.
+
+
+
+<h2 id="dev-setup">Setting Up the Development Environment</h2>
+
+<p>Setting up your environment for licensing involves these tasks:</p>
+
+<ol>
+<li><a href="#runtime-setup">Setting up the runtime environment</a> for development</li>
+<li><a href="#download-lvl">Downloading the LVL</a> into your SDK </li>
+<li><a href="#lvl-setup">Setting up the Licensing Verification Library</a></li>
+<li><a href="#add-library">Including the LVL library project in your application</a></li>
+</ol>
+
+<p>The sections below describe these tasks. When you are done with setup,
+you can begin <a href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
+Licensing to Your App</a>.</p>
+
+<p>To get started, you need to set up a proper runtime environment on which
+you can run, debug, and test your application's implementation of license
+checking and enforcement. </p>
+
+
+<h3 id="runtime-setup">Setting up the runtime environment</h3>
+
+<p>As described earlier, applications check licensing status not by contacting
+the licensing server directly, but by binding to a service provided by the
+Google Play application and initiating a license check request. The Google
+Play service then handles the direct communication with the licensing server
+and finally routes the response back to your application. To debug and test
+licensing in your application, you need to set up a runtime environment that
+includes the necessary Google Play service, so that your application is able
+to send license check requests to the licensing server. </p>
+
+<p>There are two types of runtime environment that you can use: </p>
+
+<ul>
+<li>An Android-powered device that includes the Google Play application, or</li>
+<li>An Android emulator running the Google APIs Add-on, API level 8 (release 2)
+or higher</li>
+</ul>
+
+<h4 id="runtime-device">Running on a device</h4>
+
+<p>To use an Android-powered device for
+debugging and testing licensing, the device must:</p>
+
+<ul>
+<li>Run a compatible version of Android 1.5 or later (API level
+3 or higher) platform, <em>and</em> </li>
+<li>Run a system image on which the Google Play client application
+is preinstalled. </li>
+</ul>
+
+<p>If Google Play is not preinstalled in the system image, your application won't
+be able to communicate with the Google Play licensing server. </p>
+
+<p>For general information about how to set up a device for use in developing
+Android applications, see <a
+href="{@docRoot}tools/device.html">Using Hardware Devices</a>.</p>
+
+<h4 id="runtime-emulator">Running on an Android emulator</h4>
+
+<p>If you don't have a device available, you can use an Android emulator for debugging and testing
+licensing.</p>
+
+<p>Because the Android platforms provided in the Android SDK <em>do
+not</em> include Google Play, you need to download the Google APIs Add-On
+platform, API level 8 (or higher), from the SDK repository. After downloading
+the add-on, you need to create an AVD configuration that uses that system image.
+</p>
+
+<p>The Google APIs Add-On does not include the full Google Play client.
+However, it does provide: </p>
+
+<ul>
+<li>An Google Play background service that implements the
+<code>ILicensingService</code> remote interface, so that your application can
+send license checks over the network to the licensing server. </li>
+<li>A set of underlying account services that let you add an a Google account on
+the AVD and sign in using your publisher account or test account credentials.
+<p>Signing in using your publisher or test account enables you to debug and test
+your application without having publish it. For more information see <a
+href="#acct-signin">Signing in to an authorized account</a>, below.</p></li>
+</ul>
+
+<p>Several versions of the Google APIs add-on are available through the SDK Manager, but only
+the version for Android 2.2 and higher includes the necessary Google
+Play services.</p>
+
+<p>To set up an emulator for adding licensing to an application, follow
+these steps: </p>
+
+<ol>
+  <li>Launch the Android SDK Manager (available under the Eclipse <strong>Window</strong>
+menu or by executing {@code &lt;sdk>/tools/android sdk}).</li>
+  <li>Select and download <strong>Google APIs</strong> for the Android version you'd like to target
+(must be Android 2.2 or higher).</li>
+  <li>When the download is complete, open the AVD Manager (available under the Eclipse
+<strong>Window</strong>
+menu or by executing {@code &lt;sdk>/tools/android avd}).</li>
+  <li>Click
+<strong>New</strong> and set the configuration details for the new AVD. </li>
+  <li>In the dialog that appears, assign a descriptive name to the AVD and then
+use the Target menu to choose the <strong>Google APIs</strong> as
+the system image to run on the new AVD. Set the other configuration details as
+needed and then click <strong>Create AVD</strong> to finish. The SDK tools
+create the new AVD configuration, which then appears in the list of available
+Android Virtual Devices.</li>
+</ol>
+
+<p>If you are not familiar with AVDs or how to use them, see <a
+href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>.</p>
+
+<h4 id="project-update">Updating your project configuration</h4>
+
+<p>After you set up a runtime environment that meets the requirements described
+above &mdash; either on an actual device or on an emulator &mdash; make sure to
+update your application project or build scripts as needed, so that your compiled
+<code>.apk</code> files that use licensing are deployed into that environment.
+In particular, if you are developing in Eclipse, make sure that you set up a
+Run/Debug Configuration that targets the appropriate device or AVD. </p>
+
+<p>You do not need to make any changes to your application's
+build configuration, provided that the project is already configured to compile
+against a standard Android 1.5 (API level 3) or higher library. For example:
+
+<ul>
+<li>If you have an existing application that is compiled against
+the Android 1.5 library, you do not need to make any changes to your
+build configuration to support licensing. The build target meets the minimum
+requirements for licensing, so you would continue building
+against the same version of the Android platform.</li>
+
+<li>Similarly, if you are building against Android 1.5 (API level 3) but
+are using an emulator running the Google APIs Add-On API 8 as the application's
+runtime environment, there is no need to change your application's build
+configuration. </li>
+</ul>
+
+<p>In general, adding licensing to an application should have no impact
+whatsoever on the application's build configuration.</p>
+
+
+<h3 id="download-lvl">Downloading the LVL</h3>
+
+<p>The License Verification Library (LVL) is a collection of helper classes that
+greatly simplify the work that you need to do to add licensing to your
+application. In all cases, we recommend that you download the LVL and use it as
+the basis for the licensing implementation in your application.</p>
+
+<p>The LVL is available as a downloadable package of the Android SDK. The
+package includes: </p>
+
+<ul>
+<li>The LVL sources, stored inside an Android library project. </li>
+<li>An example application called "sample" that depends on the LVL library
+project. The example illustrates how an application uses the library helper
+classes to check and enforce licensing.</li>
+</ul>
+
+<p>To download the LVL package into your development environment, use the
+Android SDK Manager. Launch the Android SDK Manager and then
+select the <strong>Google Market Licensing</strong> package, as shown in figure 2.
+Accept the terms and click <strong>Install Selected</strong> to begin the download. </p>
+
+<img src="{@docRoot}images/licensing_package.png" alt=""/>
+<p class="img-caption"><strong>Figure 2.</strong> The Licensing package contains the LVL and
+the LVL sample application.</p>
+
+<p>When the download is complete, the Android SDK Manager installs both
+the LVL library project and the example application into these directories: </p>
+
+<p style="margin-left:2em"><code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/library/</code>
+&nbsp;&nbsp;(the LVL library project)<br />
+<code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/sample/</code>&nbsp;&nbsp;(the example
+application)</p>
+
+<p>If you aren't familiar with how to download packess into your SDK, see the
+<a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>
+document. </p>
+
+
+<h3 id="lvl-setup">Setting Up the Licensing Verification Library</h3>
+
+<p>After downloading the LVL to your computer, you need to set it up in your
+development environment, either as an Android library project or by
+copying (or importing) the library sources directly into your existing
+application package. In general, using the LVL as a library project is recommended,
+since it lets you reuse your licensing code across multiple applications and
+maintain it more easily over time. Note that the LVL is not designed to be
+compiled separately and added to an application as a static .jar file. </p>
+
+<h4>Moving the library sources to a new location</h4>
+
+<p>Because you will be customizing the LVL sources to some extent, you should
+make sure to <em>move or copy</em> the library sources (the entire
+directory at <code>&lt;<em>sdk</em>&gt;/market_licensing/library/</code>)
+to a working directory outside of the SDK. You should then use the relocated
+sources as your working set. If you are using a source-code management
+system, add and track the sources that are in the working location rather
+than those in default location in the SDK. </p>
+
+<p>Moving the library sources is important is because, when you later update the
+Licensing package, the SDK installs the new files to the same location as
+the older files. Moving your working library files to a safe location ensures
+that your work won't be inadvertently overwritten should you download a new
+version of the LVL.</p>
+
+<h4>Creating the LVL as a library project</h4>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Working with library projects</h2>
+
+<p>The LVL is provided as an Android library project, which means that you can
+share its code and resources across multiple applications. </p>
+
+<p style="margin-top:.5em;">If you aren't familiar with library projects or how
+to use them, see <a href="{@docRoot}tools/projects/index.html#LibraryProjects">
+Managing Projects</a>.
+</p>
+</div>
+</div>
+
+<p>The recommended way of using the LVL is setting it up as a new Android
+<em>library project</em>. A library project is a type of development project
+that holds shared Android source code and resources. Other Android application
+projects can reference the library project and, at build time, include its
+compiled sources in their <code>.apk</code> files. In the context of licensing,
+this means that you can do most of your licensing development once, in a library
+project, then include the library sources in your various application projects.
+In this way, you can easily maintain a uniform implementation of licensing
+across all of your projects and maintain it centrally. </p>
+
+<p>The LVL is provided as a configured library project &mdash; once you have
+downloaded it, you can start using it right away. </p>
+
+<p>If you are working in Eclipse with ADT, you need to add the LVL to your
+workspace as a new development project, in the same way as you would a new
+application project. </p>
+
+<ol>
+<li>Use the New Project Wizard to create a new
+project from existing sources. Select the LVL's <code>library</code> directory
+(the directory containing the library's AndroidManifest.xml file) as the project
+root.</li>
+<li>When you are creating the library project, you can select any application
+name, package, and set other fields as needed. </li>
+<li>For the library's build target, select Android 1.5 (API level 3) or higher.</li>
+</ol>
+
+<p> When created, the project is
+predefined as a library project in its <code>project.properties</code> file, so
+no further configuration is needed. </p>
+
+<p>For more information about how to create an application project or work with
+library projects in Eclipse, see <a
+href="{@docRoot}tools/projects/projects-eclipse.html">Managing Projects from
+Eclipse with ADT</a>.</p>
+
+
+<h4>Copying the LVL sources to your application</h4>
+
+<p>As an alternative to adding the LVL as a library project, you can copy the
+library sources directly into your application. To do so, copy (or import) the
+LVL's <code>library/src/com</code> directory into your application's
+<code>src/</code> directory.</p>
+
+<p>If you add the LVL sources directly to your application, you can skip the
+next section and start working with the library, as described in <a
+href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding
+Licensing to Your App</a>.</p>
+
+
+<h3 id="add-library">Including the LVL library project sources in your
+application</h3>
+
+<p>If you want to use the LVL sources as a library project, you need to add a
+reference to the LVL library project in your application project properties. This tells
+build tools to include the LVL library project sources in your application at
+compile time. The process for adding a reference to a library project depends
+on your development environment, as described below.</p>
+
+<p> If you are developing in Eclipse with ADT, you should already have added the
+library project to your workspace, as described in the previous section. If you
+haven't done that already, do it now before continuing. </p>
+
+<p>Next, open the application's project properties window, as shown below.
+Select the "Android" properties group and click <strong>Add</strong>, then
+choose the LVL library project (com_android_vending_licensing) and click
+<strong>OK</strong>. For more information, see
+<a href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">
+Managing Projects from Eclipse with ADT</a></p>.
+
+
+<img src="{@docRoot}images/licensing_add_library.png" alt=""/>
+<p class="img-caption"><strong>Figure 3.</strong> If you are
+working in Eclipse with ADT, you can add the LVL library project to your
+application from the application's project properties.</p>
+
+
+<p>If you are developing using the SDK command-line tools, navigate to the
+directory containing your application project and open the
+<code>project.properties</code> file. Add a line to the file that specifies the
+<code>android.library.reference.&lt;n&gt;</code> key and the path to the
+library. For example: </p>
+
+<pre>android.library.reference.1=path/to/library_project</pre>
+
+<p>Alternatively, you can use this command to update the project
+properties, including the reference to the library project:</p>
+
+<pre class="no-pretty-print" style="color:black">android update lib-project
+--target <em>&lt;target_ID&gt;</em> \
+--path <em>path/to/my/app_project</em> \
+--library <em>path/to/my/library_project</em>
+</pre>
+
+<p>For more information about working with library projects,
+see <a href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">
+Setting up a Library Project</a>.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="test-env">Setting Up the Testing Environment</h2>
+
+<p>The Google Play publisher site provides configuration tools that let you
+and others test licensing on your application before it is published. As you are
+implementing licensing, you can make use of the publisher site tools to test
+your application's Policy and handling of different licensing responses and
+error conditions.</p>
+
+<p>The main components of the test environment for licensing include: </p>
+
+<ul>
+<li>A "Test response" configuration in your publisher account that lets you
+set the static licensing response returned, when the server processes a
+license check for an application uploaded to the publisher account, from a user
+signed in to the publisher account or a test account.</li>
+<li>An optional set of test accounts that will receive the static test
+response when they check the license of an application that you have uploaded
+(regardless whether the application is published or not).</li>
+<li>A runtime environment for the application that includes the Google Play
+application or Google APIs Add-On, on which the user is signed in to the
+publisher account or one of the test accounts.</li>
+</ul>
+
+<p>Setting up the test environment properly involves:</p>
+
+<ol>
+<li><a href="#test-response">Setting static test responses</a> that are returned by the licensing server.</li>
+<li><a href="#test-acct-setup">Setting up test accounts</a> as needed.</li>
+<li><a href="#acct-signin">Signing in</a> properly to an emulator or device, before initiating a license check test.</li>
+</ol>
+
+<p>The sections below provide more information.</p>
+
+
+<h3 id="test-response">Setting test responses for license checks</h3>
+
+<p>Google Play provides a configuration setting in your publisher account
+that lets you override the normal processing of a license check and return a
+specified static response code. The setting is for testing only and applies
+<em>only</em> to license checks for applications that you have uploaded, made by
+any user signed in to an emulator or device using the credentials of the
+publisher account or a registered test account. For other users, the server
+always processes license checks according to normal rules.  </p>
+
+<p>To set a test response for your account, sign in to your publisher account
+and click "Edit Profile". In the Edit Profile page, locate the Test Response
+menu in the Licensing panel, shown below. You can select from the full set of
+valid server response codes to control the response or condition you want to
+test in your application.</p>
+
+<p>In general, you should make sure to test your application's licensing
+implementation with every response code available in the Test Response menu.
+For a description of the codes, see <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
+Response Codes</a> in the <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html">Licensing Reference</a>.</p>
+
+<img src="{@docRoot}images/licensing_test_response.png" alt=""/>
+<p class="img-caption"><strong>Figure 4.</strong> The Licensing
+panel of your account's Edit Profile page, showing the Test Accounts field and the
+Test Response menu.</p>
+
+<p>Note that the test response that you configure applies account-wide &mdash;
+that is, it applies not to a single application, but to <em>all</em>
+applications associated with the publisher account. If you are testing multiple
+applications at once, changing the test response will affect all of those
+applications on their next license check (if the user is signed in to
+the emulator or device using the publisher account or a test account).</p>
+
+<p>Before you can successfully receive a test response for a license check,
+you must sign in to the device or emulator on which the application
+is installed, and from which it is querying the server. Specifically, you must
+sign using either your publisher account or one of the test accounts that you
+have set up. For more information about test accounts, see the next section.</p>
+
+<p>See <a
+href="{@docRoot}guide/google/play/licensing/licensing-reference.html#server-response-codes">Server
+Response Codes</a> for a list of
+test responses available and their meanings. </p>
+
+
+<h3 id="test-acct-setup">Setting up test accounts</h3>
+
+<p>In some cases, you might want to let multiple teams of developers test
+licensing on applications that will ultimately be published through your
+publisher account, but without giving them access to your publisher account's
+sign-in credentials. To meet that need, the Google Play publisher site lets
+you set up one or more optional <em>test accounts</em> &mdash; accounts that are
+authorized to query the licensing server and receive static test responses from
+your publisher account.</p>
+
+<p>Test accounts are standard Google accounts that you register on your
+publisher account, such that they will receive the test response for
+applications that you have uploaded. Developers can then sign in to their
+devices or emulators using the test account credentials and initiate license
+checks from installed applications. When the licensing server receives a license
+check from a user of a test account, it returns the static test response
+configured for the publisher account.  </p>
+
+<p>Necessarily, there are limitations on the access and permissions given to
+users signed in through test accounts, including:</p>
+
+<ul>
+<li>Test account users can query the licensing server only for applications that
+are already uploaded to the publisher account. </li>
+<li>Test account users do not have permission to upload applications to your
+publisher account.</li>
+<li>Test account users do not have permission to set the publisher account's
+static test response.</li>
+</ul>
+
+<p>The table below summarizes the differences in capabilities, between the
+publisher account, a test account, and any other account.</p>
+
+<p class="table-caption" id="acct-types-table"><strong>Table 1.</strong>
+Differences in account types for testing licensing.</p>
+
+<table>
+<tr>
+<th>Account Type</th>
+<th>Can check license before upload?</th>
+<th>Can receive test response?</th>
+<th>Can set test response?</th>
+</tr>
+
+<tr>
+<td>Publisher account</td>
+<td>Yes</td>
+<td>Yes</td>
+<td>Yes</td>
+</tr>
+
+<tr>
+<td>Test account</td>
+<td>No</td>
+<td>Yes</td>
+<td>No</td>
+</tr>
+
+<tr>
+<td>Other</td>
+<td>No</td>
+<td>No</td>
+<td>No</td>
+</tr>
+</table>
+
+<h4 id="reg-test-acct">Registering test accounts on the publisher account</h4>
+
+<p>To get started, you need to register each test account in your publisher
+account. As shown in Figure 4, you
+register test accounts in the Licensing panel of your publisher account's Edit
+Profile page. Simply enter the accounts as a comma-delimited list and click
+<strong>Save</strong> to save your profile changes.</p>
+
+<p>You can use any Google account as a test account. If you want to own and
+control the test accounts, you can create the accounts yourself and distribute
+the credentials to your developers or testers.</p>
+
+<h4 id="test-app-upload">Handling application upload and distribution for test
+account users</h4>
+
+<p>As mentioned above, users of test accounts can only receive static test
+responses for applications that are uploaded to the publisher account. Since
+those users do not have permission to upload applications, as the publisher you
+will need to work with those users to collect apps for upload and distribute
+uploaded apps for testing. You can handle collection and distribution in any way
+that is convenient. </p>
+
+<p>Once an application is uploaded and becomes known to the licensing server,
+developers and testers can continue modify the application in their local
+development environment, without having to upload new versions. You only need to
+upload a new version if the local application increments the
+<code>versionCode</code> attribute in the manifest file. </p>
+
+<h4 id="test-key">Distributing your public key to test account users</h4>
+
+<p>The licensing server handles static test responses in the normal way,
+including signing the license response data, adding extras parameters, and so
+on. To support developers who are implementing licensing using test accounts,
+rather than the publisher account, you will need to distribute
+your public key to them. Developers without access to the publisher site do not
+have access to your public key, and without the key they won't be able to
+verify license responses. </p>
+
+<p>Note that if you decide to generate a new licensing key pair for your account
+for some reason, you need to notify all users of test accounts. For
+testers, you can embed the new key in the application package and distribute it
+to users. For developers, you will need to distribute the new key to them
+directly. </p>
+
+
+<h3 id="acct-signin">Signing in to an authorized account in the runtime
+environment</h3>
+
+<p>The licensing service is designed to determine whether a given user is
+licensed to use a given application &mdash; during a license check, the Google
+Play application gathers the user ID from the primary account on the system
+and sends it to the server, together with the package name of the application
+and other information. However, if there is no user information available, the
+license check cannot succeed, so the Google Play application terminates the
+request and returns an error to the application. </p>
+
+<p>During testing, to ensure that your application can successfully query the
+licensing server, you must make sure that you sign in to an account <em>on the
+device or emulator</em> using:</p>
+
+<ul>
+<li>The credentials of a publisher account, or</li>
+<li>The credentials of a test account that is registered with a publisher
+account</li>
+</ul>
+
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+<h2>Signing in to a Google account on an emulator</h2>
+
+<p>If you are testing licensing on an emulator, you need to sign in to a Google
+account on the emulator. If you do not see an option to create a new Google
+account, the problem might be that your AVD is running a standard Android system
+image, rather than the Google APIs Add-On, API 8 (release 2) or higher. </p>
+
+<p style="margin-top:.5em;">For more information, see <a
+href="#runtime-setup">Setting up the runtime environment</a>, above.</p>
+
+</div>
+</div>
+
+<p>Signing in using a publisher account offers the advantage of letting your
+applications receive static test responses even before the applications are
+uploaded to the publisher site.</p>
+
+<p>If you are part of a larger organization or are working with external groups
+on applications that will be published through your site, you will more likely
+want to distribute test accounts instead, then use those to sign in during
+testing. </p>
+
+<p>To sign in on a device or emulator, follow the steps below. The preferred
+approach is to sign in as the primary account &mdash; however, if there are
+other accounts already in use on the device or emulator, you can create an
+additional account and sign in to it using the publisher or test account
+credentials.  </p>
+
+<ol>
+<li>Open Settings &gt; Accounts &amp; sync</li>
+<li>Select <strong>Add Account</strong> and choose to add a Google account.
+</li>
+<li>Select <strong>Next</strong> and then <strong>Sign in</strong>.</li>
+<li>Enter the username and password of either the publisher account or a test
+account that is registered in the publisher account.</li>
+<li>Select <strong>Sign in</strong>. The system signs you in to the new
+account.</li>
+</ol>
+
+<p>Once you are signed in, you can begin testing licensing in your application
+(if you have completed the LVL integration steps above). When your application
+initiates a license check, it will receive a response containing the static test
+response configured on the publisher account. </p>
+
+<p>Note that, if you are using an emulator, you will need to sign in to the
+publisher account or test account each time you wipe data when restarting the
+emulator.</p>
+
+<p>Once you've completed the setup procedures, continue to <a
+href="{@docRoot}guide/google/play/licensing/adding-licensing.html">Adding Licensing to Your App</a>.</p>
+
+
+
diff --git a/docs/html/guide/google/play/publishing/multiple-apks.jd b/docs/html/guide/google/play/publishing/multiple-apks.jd
new file mode 100644
index 0000000..e41817e
--- /dev/null
+++ b/docs/html/guide/google/play/publishing/multiple-apks.jd
@@ -0,0 +1,643 @@
+page.title=Multiple APK Support
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>Quickview</h2>
+  <ul>
+    <li>Simultaneously publish different APKs for different
+device configurations</li>
+    <li>Different APKs are distributed to different devices based on filters declared in the
+manifest file</li>
+    <li>You should publish multiple APKs only when it's not possible or reasonable to
+support all desired devices with a single APK</li>
+  </ul>
+
+  <h2>In this document</h2>
+<ol>
+  <li><a href="#Concepts">Publishing Concepts</a>
+    <ol>
+      <li><a href="#Active">Active APKs</a></li>
+      <li><a href="#SimpleAndAdvanced">Simple mode and advanced mode</a></li>
+    </ol>
+  </li>
+  <li><a href="#HowItWorks">How Multiple APKs Work</a>
+    <ol>
+      <li><a href="#SupportedFilters">Supported filters</a></li>
+      <li><a href="#Rules">Rules for multiple APKs</a></li>
+    </ol>
+  </li>
+  <li><a href="#CreatingApks">Creating Multiple APKs</a>
+    <ol>
+      <li><a href="#VersionCodes">Assigning version codes</a></li>
+    </ol>
+  </li>
+  <li><a href="#SingleAPK">Using a Single APK Instead</a>
+    <ol>
+      <li><a href="#TextureOptions">Supporting multiple GL textures</a></li>
+      <li><a href="#ScreenOptions">Supporting multiple screens</a></li>
+      <li><a href="#ApiLevelOptions">Supporting multiple API levels</a></li>
+    </ol>
+  </li>
+</ol>
+
+  <h2>See also</h2>
+<ol>
+  <li><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></li>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
+  <li><a href="{@docRoot}tools/extras/support-library.html">Compatibility
+Package</a></li>
+  <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Multiple APK support is a feature on Google Play that allows you to publish different APKs
+for your application that are each targeted to different device configurations. Each APK is a
+complete and independent version of your application, but they share the same application listing on
+Google Play and must share the same package name and be signed with the same release key. This
+feature is useful for cases in which your application cannot reach all desired devices with a single
+APK.</p>
+
+<p>Android-powered devices may differ in several ways and it's important
+to the success of your application that you make it available to as many devices as possible.
+Android applications usually run on most compatible devices with a single APK, by supplying
+alternative resources for different configurations (for example, different layouts for different
+screen sizes) and the Android system selects the appropriate resources for the device at runtime. In
+a few cases, however, a single APK is unable to support all device configurations, because
+alternative resources make the APK file too big (greater than 50MB) or other technical challenges
+prevent a single APK from working on all devices.</p>
+
+<p>Although <strong>we encourage you to develop and publish a single APK</strong> that supports as
+many device configurations as possible, doing so is sometimes not possible. To help
+you publish your application for as many devices as possible, Google Play allows you to
+publish multiple APKs under the same application listing. Google Play then supplies each APK to
+the appropriate devices based on configuration support you've declared in the manifest file of each
+APK.</p>
+
+<p>By publishing your application with multiple APKs, you can:</p>
+
+<ul>
+  <li>Support different OpenGL texture compression formats with each APK.</li>
+  <li>Support different screen configurations with each APK.</li>
+  <li>Support different platform versions with each APK.</li>
+</ul>
+
+<p>Currently, these are the only device characteristics that Google Play supports for publishing
+multiple APKs as the same application.</p>
+
+<p class="note"><strong>Note:</strong> You should generally use multiple APKs to support
+different device configurations <strong>only when your APK is too large</strong> (greater than
+50MB). Using a single APK to support different configurations is always the best practice,
+because it makes the path for application updates simple and clear for users (and also makes
+your life simpler by avoiding development and publishing complexity). Read the section below about
+<a href="#SingleAPK">Using a Single APK Instead</a> to
+consider your options before publishing multiple APKs.</p>
+
+
+<h2 id="Concepts">Publishing Concepts</h2>
+
+<p>Before you start publishing multiple APKs on Google Play, you must understand a few
+concepts regarding how the Google Play publisher site works.</p>
+
+<h3 id="Active">Active APKs</h3>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h4>The difference between "Publish" and "Save"</h4>
+  <p>When editing your application, there are two buttons on the top-right side of the page. The
+first button is either <strong>Publish</strong> or <strong>Unpublish</strong> and the second
+button is always <strong>Save</strong> (but its behavior changes).</p>
+  <p>When your application is new or you have unpublished it from Google Play, the first
+button says <strong>Publish</strong>. Clicking it will publish any APKs listed as
+Active, making them available on Google Play. Also while your application is new
+or unpublished, clicking <strong>Save</strong> will save any changes you've made, such
+as information added to the Product details and APKs you've uploaded, but nothing is made visible on
+Google Play&mdash;this allows you to save your changes and sign out of the publisher site before
+deciding to publish.</p>
+ <p>Once you've published your application, the first button changes to
+<strong>Unpublish</strong>. Clicking it in this state unpublishes your application so that none
+of the APKs are available on Google Play. Also while published, the behavior of the
+<strong>Save</strong> button is different. In this state, clicking <strong>Save</strong> not
+only saves all your changes, but also publishes them to Google Play. For example, if you've
+already published your application and then make changes to your product details or activate new
+APKs, clicking <strong>Save</strong> makes all those changes live on Google Play.</p>
+</div>
+</div>
+
+
+<p>Before you can publish your application (whether publishing one or multiple APKs), you
+must "activate" your APK(s) from the <strong>APK files</strong> tab. When you activate an APK, it
+moves into the list of <em>Active</em> APKs. This list allows you to preview which APK(s)
+you're about to publish.</p>
+
+<p>If there are no errors, any "active" APK will be published to
+Google Play when you click the <strong>Publish</strong> button (if the application is
+unpublished) or when you click the <strong>Save</strong> button (if the application is
+already published).</p>
+
+
+<h3 id="SimpleAndAdvanced">Simple mode and advanced mode</h3>
+
+<p>The Google Play publisher site provides two modes for managing the APKs associated with
+your application: <em>simple mode</em> and <em>advanced mode</em>. You can switch between these by
+clicking the
+link at the top-right corner of the <strong>APK files</strong> tab.</p>
+
+<p>Simple mode is the traditional way to publish an application, using one APK at a time. In
+simple mode, only one APK can be activated at a time. If you upload a new APK to update
+the application, clicking "Activate" on the new APK deactivates the currently
+active APK (you must then click <strong>Save</strong> to publish the new APK).</p>
+
+<p>Advanced mode allows you to activate and publish multiple APKs that are each designed for a
+specific set of device configurations. However, there are several rules based on the manifest
+declarations in each APK that determine whether you're allowed to activate each APK along with
+others. When you activate an APK and it violates one of the rules, you will receive an error or
+warning message. If it's an error, you cannot publish until you resolve the problem; if it's a
+warning, you can publish the activated APKs, but there might be unintended consequences as to
+whether your application is available for different devices. These rules are discussed more
+below.</p>
+
+
+<h2 id="HowItWorks">How Multiple APKs Work</h2>
+
+<p>The concept for using multiple APKs on Google Play is that you have just one entry in
+Google Play for your application, but different devices might download a different APK. This
+means that:</p>
+
+<ul>
+  <li>You maintain only one set of product details (app description, icons, screenshots, etc.).
+This also means you <em>cannot</em> charge a different price for different APKs.</li>
+  <li>All users see only one version of your application on Google Play, so they are not
+confused by different versions you may have published that are "for tablets" or
+"for phones."</li>
+  <li>All user reviews are applied to the same application listing, even though users on different
+devices may have different APKs.</li>
+  <li>If you publish different APKs for different versions of Android (for different API levels),
+then when a user's device receives a system update that qualifies them for a different APK you've
+published, Google Play updates the user's application to the APK designed for the higher version
+of Android. Any system data associated with the application is retained (the same as with normal
+application updates when using a single APK).</li>
+</ul>
+
+<p>To publish multiple APKs for the same application, you must enable <strong>Advanced mode</strong>
+in your application's <strong>APK files</strong> tab (as discussed in the previous section). Once
+in advanced mode, you can upload, activate, then publish multiple APKs for the same application. The
+following sections describe more about how it works.</p>
+
+
+<h3 id="SupportedFilters">Supported filters</h3>
+
+<p>Which devices receive each APK is determined by <a
+href="{@docRoot}guide/google/play/filters.html">Google Play filters</a> that are specified by
+elements in the manifest file of each APK. However, Google Play allows you to publish multiple
+APKs only when each APK uses filters to support a variation of the following
+device characteristics:</p>
+
+<ul>
+  <li><strong>OpenGL texture compression formats</strong>
+    <p>This is based on your manifest file's <a
+href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
+&lt;supports-gl-texture&gt;}</a> element(s).</p>
+    <p>For example, when developing a game that uses OpenGL ES, you can provide one APK for
+devices that support ATI texture compression and a separate APK for devices
+that support PowerVR compression (among many others).</p>
+  <br/>
+  </li>
+
+  <li><strong>Screen size (and, optionally, screen density)</strong>
+    <p>This is based on your manifest file's <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> <em>or</em> <a
+href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a> element. You should never use both elements and you should use only
+<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> when possible.</p>
+    <p>For example, you can provide one APK that supports small and normal size screens and another
+APK that supports large and xlarge screens.</p>
+
+    <p class="note"><strong>Note:</strong> The Android system provides strong support for
+applications to support all screen configurations with a single APK. You should avoid creating
+multiple APKs to support different screens unless absolutely necessary and instead follow the guide
+to <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a> so that your application is flexible and can adapt to all screen configurations
+with a single APK.</p>
+    <p class="caution"><strong>Caution:</strong> By default, all screen size attributes in the <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> element are "true" if you do not declare them otherwise. However,
+because the {@code android:xlargeScreens} attribute was added in Android 2.3 (API level
+9), Google Play will assume that it is "false" if your application does not set either <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> or <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
+android:targetSdkVersion}</a> to "9" or higher.</p>
+    <p class="caution"><strong>Caution:</strong> You should not combine both <a
+href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
+&lt;supports-screens&gt;}</a> and <a
+href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
+&lt;compatible-screens&gt;}</a> elements in your manifest file. Using both increases the chances
+that you'll introduce an error due to conflicts between them. For help deciding which to use, read
+<a href="{@docRoot}guide/practices/screens-distribution.html">Distributing to Specific Screens</a>.
+If you can't avoid using both, be aware that for any conflicts in agreement between a given size,
+"false" will win.</p>
+  <br/>
+  </li>
+
+  <li><strong>API level</strong>
+    <p>This is based on your manifest file's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a> element.
+You
+can use both the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> and <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max">{@code android:maxSdkVersion}</a>
+attributes to specify support for different API levels.</p>
+    <p>For example, you can publish your application with one APK that supports API levels 4 - 7
+(Android 1.6 - 2.1)&mdash;using only APIs available since API level 4 or lower&mdash;and another
+APK that supports API levels 8 and above (Android 2.2+)&mdash;using APIs available since API level 8
+or lower.</p>
+    <div class="note">
+      <p><strong>Note:</strong></p>
+      <ul>
+        <li>If you use this characteristic as the factor to distinguish multiple APKs, then the APK
+with a higher <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> value must have a higher <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
+value. This is also true if two APKs overlap their device support based on a different supported
+filter. This ensures that when a device receives a system update, Google Play can offer the user
+an update for your application (because updates are based on an increase in the app version code).
+This requirement is described further in the section below about <a href="#Rules">Rules for
+multiple APKs</a>.</li>
+        <li>You should avoid using <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max">{@code
+android:maxSdkVersion}</a> in general, because as long as you've properly developed your
+application with public APIs, it is always compatible with future versions of Android. If you want
+to publish a different APK for higher API levels, you still do not need to specify the
+maximum version, because if the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
+android:minSdkVersion}</a> is {@code "4"} in one APK and {@code "8"} in another, devices that
+support API level 8 or higher will always receive the second APK (because it's version code is
+higher, as per the previous note).</li>
+    </ul>
+  </div>
+  </li>
+</ul>
+
+<p>Other manifest elements that enable <a
+href="{@docRoot}guide/google/play/filters.html">Google Play filters</a>&mdash;but are not
+listed above&mdash;are still applied for each APK as usual. However, Google Play does not allow
+you to publish multiple APKs based on variations of them. Thus, you cannot publish
+multiple APKs if the above listed filters are the same for each APK (but the APKs differ based on
+other characteristics in the manifest file). For
+example, you cannot provide different APKs that differ purely on the <a
+href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
+&lt;uses-configuration&gt;}</a> characteristics.</p>
+
+
+
+<h3 id="Rules">Rules for multiple APKs</h3>
+
+<p>Before you enable advanced mode to publish multiple APKs for your application, you need to
+understand the following rules that define how publishing multiple APKs works:</p>
+
+<ul>
+  <li>All APKs you publish for the same application <strong>must have the same package
+name and be signed with the same certificate key</strong>.</li>
+
+  <li>Each APK <strong>must have a different version code</strong>, specified by the
+<a href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
+android:versionCode}</a> attribute.</li>
+
+  <li>Each APK <strong>must not exactly match the configuration support of another APK</strong>.
+    <p>That is, each APK must declare slightly different support for at least one of
+the <a href="#SupportedFilters">supported Google Play filters</a> (listed above).</p>
+    <p>Usually, you will differentiate your APKs based on a specific characteristic (such as the
+supported texture compression formats), and thus, each APK will declare support for different
+devices. However, it's OK to publish multiple APKs that overlap their support slightly. When two
+APKs do overlap (they support some of the same device configurations), a device that falls within
+that overlap range will receive the APK with a higher version code (defined by <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
+android:versionCode}</a>).</p></li>
+
+  <li>You cannot activate a new APK that has a version code lower than that of the APK it's
+replacing. For example, say you have an active APK for screen sizes small - normal with version code
+0400, then try to replace it with an APK for the same screen sizes with version code 0300. This
+raises an error, because it means users of the previous APK will not be able to update the
+application.</li>
+
+  <li>An APK that requires a <strong>higher API level</strong> must have a <strong>higher
+version code</strong>.
+    <p>This is true only when either: the APKs differ based <em>only</em> on the
+supported API levels (no other <a href="#SupportedFilters">supported filters</a>
+distinguish the APKs from each other) <em>or</em> when the APKs do use another supported filter, but
+there is an overlap between the APKs within that filter.</p>
+    <p>This is important because a user's device receives an application update from
+Google Play only if the version code for the APK on Google Play is higher than the version
+code of the APK currently on the device. This ensures that if a device receives a system update that
+then qualifies it to install the APK for higher API levels, the device receives an application
+update because the version code increases.</p>
+<p class="note"><strong>Note:</strong> The size of the version code increase is irrelevant; it
+simply needs to be larger in the version that supports higher API levels.</p>
+    <p>Here are some examples:</p>
+    <ul>
+      <li>If an APK you've uploaded for API levels 4 and above (Android 1.6+) has a version code of
+{@code 0400}, then an APK for API levels 8 and above (Android 2.2+) must be {@code 0401} or
+greater. In this case, the API level is the only supported filter used, so the version codes
+<strong>must increase</strong> in correlation with the API level support for each APK, so that users
+get an update when they receive a system update.</li>
+      <li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
+large screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge screens, then
+the version codes <strong>must increase</strong>. In this case, the API level filter is used to
+distinguish each APK, but so is the screen size. Because the screen sizes overlap (both APKs
+support large screens), the version codes must still be in order. This ensures that a large screen
+device that receives a system update to API level 8 will receive an update for the second
+APK.</li>
+      <li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
+normal screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge
+screens, then the version codes <strong>do not need to increase</strong> in correlation with the API
+levels. Because there is no overlap within the screen size filter, there are no devices that
+could potentially move between these two APKs, so there's no need for the version codes to
+increase from the lower API level to the higher API level.</li>
+    </ul>
+  </li>
+
+</ul>
+
+<p>Failure to abide by the above rules results in an error on the Google Play publisher site
+when you activate your APKs&mdash;you will be unable to publish your application until you
+resolve the error.</p>
+
+<p>There are other conflicts that might occur when you activate your APKs, but which will result
+in warnings rather than errors. Warnings can be caused by the following:</p>
+
+<ul>
+  <li>When you modify an APK to "shrink" the support for a device's characteristics and no other
+APKs support the devices that then fall outside the supported range. For example, if an APK
+currently supports small and normal size screens and you change it to support only small screens,
+then you have shrunk the pool of supported devices and some devices will no longer see your
+application on Google Play. You can resolve this by adding another APK that supports normal size
+screens so that all previously-supported devices are still supported.</li>
+
+  <li>When there are "overlaps" between two or more APKs. For example, if an APK supports screen
+sizes small, normal, and large, while another APK supports sizes large and xlarge, there is an
+overlap, because both APKs support large screens. If you do not resolve this, then devices that
+qualify for both APKs (large screen devices in the example) will receive whichever APK has the
+highest version code.</li>
+</ul>
+
+<p>When such conflicts occur, you will see a warning message, but you can still publish your
+application.</p>
+
+
+
+<h2 id="CreatingApks">Creating Multiple APKs</h2>
+
+<p>Once you decide to publish multiple APKs, you probably need to create separate
+Android projects for each APK you intend to publish so that you can appropriately develop them
+separately. You can do this by simply duplicating your existing project and give it a new name.
+(Alternatively, you might use a build system that can output different resources&mdash;such
+as textures&mdash;based on the build configuration.)</p>
+
+<p class="note"><strong>Tip:</strong> One way to avoid duplicating large portions of your
+application code is to use a <a
+href="{@docRoot}tools/projects/index.html#LibraryProjects">library project</a>. A library
+project holds shared code and resources, which you can include in your actual application
+projects.</p>
+
+<p>When creating multiple projects for the same application, it's a good practice to identify each
+one with a name that indicates the device restrictions to be placed on the APK, so you can
+easily identify them. For example, "HelloWorld_8" might be a good name for an
+application designed for API level 8 and above.</p>
+
+<p class="note"><strong>Note:</strong> All APKs you publish for the same application
+<strong>must have the same package name and be signed with the same certificate key</strong>. Be
+sure you also understand each of the <a href="#Rules">Rules for multiple APKs</a>.</p>
+
+
+<h3 id="VersionCodes">Assigning version codes</h3>
+
+<p>Each APK for the same application <strong>must have a unique version code</strong>, specified by
+the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
+android:versionCode}</a> attribute. You must be careful about assigning version codes when
+publishing multiple APKs, because they must each be different, but in some
+cases, must or should be defined in a specific order, based on the configurations that each APK
+supports.</p>
+
+<h4>Ordering version codes</h4>
+
+<p>An APK that requires a higher API level must usually have a higher version code. For example, if
+you create two APKs to support different API levels, the APK for the higher API levels must have the
+higher version code. This ensures that if a device receives a system update that then qualifies it
+to install the APK for higher API levels, the user receives a notification to update the app. For
+more information about how this requirement applies, see the section above about <a
+href="#Rules">Rules for multiple APKs</a>.</p>
+
+<p>You should also consider how the order of version codes might affect which APK your users
+receive either due to overlap between coverage of different APKs or future changes you might make to
+your APKs.</p>
+
+<p>For example, if you have different APKs based on screen size, such as one for small - normal and
+one for large - xlarge, but foresee a time when you will change the APKs to be one for small and one
+for normal - xlarge, then you should make the version code for the large - xlarge APK be higher.
+That way, a normal size device will receive the appropriate update when you make the change, because
+the version code increases from the existing APK to the new APK that now supports the device. </p>
+
+<p>Also, when creating multiple APKs that differ based on support for different OpenGL texture
+compression formats, be aware that many devices support multiple formats. Because a device
+receives the APK with the highest version code when there is an overlap in coverage between two
+APKs, you should order the version codes among your APKs so that the APK with the
+preferred compression format has the highest version code. For example, you might want to perform
+separate builds for your app using PVRTC, ATITC, and ETC1 compression formats. If you prefer these
+formats in this exact order, then the APK that uses PVRTC should have the highest version code, the
+APK that uses ATITC has a lower version code, and the version with ETC1 has the lowest. Thus, if a
+device supports both PVRTC and ETC1, it receives the APK with PVRTC, because it has the highest
+version code.</p>
+
+
+<h4>Using a version code scheme</h4>
+
+<p>In order to allow different APKs to update their version codes independent of others (for
+example, when you fix a bug in only one APK, so don't need to update all APKs), you should use a
+scheme for your version codes that
+provides sufficient room between each APK so that you can increase the code in one without requiring
+an increase in others. You should also include your actual version name in the code (that is, the
+user visible version assigned to <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code android:versionName}</a>),
+so that it's easy for you to associate the version code and version name.</p>
+
+<p class="note"><strong>Note:</strong> When you increase the version code for an APK, Google
+Play will prompt users of the previous version to update the application. Thus, to avoid
+unnecessary updates, you should not increase the version code for APKs that do not actually
+include changes.</p>
+
+<p>We suggest using a version code with at least 7 digits: integers that represent
+the supported configurations are in the higher order bits, and the version name (from <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code
+android:versionName}</a>) is in the lower order bits. For example, when the application version
+name is 3.1.0, version codes for an API level 4
+APK and an API level 11 APK would be something like 0400310 and 1100310, respectively. The first
+two digits are reserved for the API Level (4 and 11, respectively), the middle two digits are for
+either screen sizes or GL texture formats (not used in these examples), and the last three digits
+are for the application's version name (3.1.0). Figure 1 shows two examples that split based on both
+the platform version (API Level) and screen size.</p>
+
+<img src="{@docRoot}images/market/version-codes.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> A suggested scheme for your version codes,
+using the first two digits for the API Level, the second and third digits for the minimum and
+maximum screen size (1 - 4 indicating each of the four sizes) or to denote the texture formats
+and the last three digits for the app version.</p>
+
+<p>This scheme for version codes is just a suggestion for how you should establish a
+pattern that is scalable as your application evolves. In particular, this scheme doesn't
+demonstrate a solution for identifying different texture compression formats. One option might be
+to define your own table that specifies a different integer to each of the different
+compression formats your application supports (for example, 1 might correspond to ETC1 and 2 is
+ATITC, and so on).</p>
+
+<p>You can use any scheme you want, but you should carefully consider how future versions of your
+application will need to increase their version codes and how devices can receive updates when
+either the device configuration changes (for example, due to a system update) or when you modify the
+configuration support for one or several of the APKs.</p>
+
+
+
+
+<h2 id="SingleAPK">Using a Single APK Instead</h2>
+
+<p><strong>Creating multiple APKs for your application is not the normal procedure</strong> for
+publishing an application on Google Play. In most cases, you should be able to publish your
+application to most users with a single APK and we encourage that you do so. When you encounter
+a situation in which using a single APK becomes difficult, you should carefully consider all your
+options before deciding to publish multiple APKs.</p>
+
+<p>First of all, there are a few key benefits to developing a single APK that supports all
+devices:</p>
+
+<ul>
+  <li><strong>Publishing and managing your application is easier.</strong>
+    <p>With only one APK to worry about at any given time, you're less likely to become confused by
+which APK is what. You also don't have to keep track of multiple version codes for each
+APK&mdash;by using only one APK, you can simply increase the version code with each release and
+be done.</p>  </li>
+  <li><strong>You need to manage only a single code base.</strong>
+    <p>Although you can use a <a
+href="{@docRoot}tools/projects/index.html#LibraryProjects">library project</a>
+to share code between multiple Android projects, it's still likely that you'll reproduce some code
+across each project and this could become difficult to manage, especially when resolving
+bugs.</p></li>
+  <li><strong>Your application can adapt to device configuration changes.</strong>
+    <p>By creating a single APK that contains all the resources for each device configuration, your
+application can adapt to configuration changes that occur at runtime. For example, if the user docks
+or otherwise connects a handset device to a larger screen, there's a chance that this will invoke a
+system configuration change to support the larger screen. If you include all resources for different
+screen configurations in the same APK, then your application will load alternative resources and
+optimize the user experience for the new interface.</p>
+  </li>
+  <li><strong>App restore across devices just works.</strong>
+    <p>If a user has enabled data backup on his or her current device and then buys a new device
+that has a different configuration, then when the user's apps are automatically restored during
+setup, the user receives your application and it runs using the resources optimized for that device.
+For example, on a new tablet, the user receives your application and it runs with your
+tablet-optimized resources. This restore
+process does not work across different APKs, because each APK can potentially have different
+permissions that the user has not agreed to, so Google Play may not restore the application at
+all. (If you use multiple APKs, the user receives either the exact same APK if it's compatible or
+nothing at all and must manually download your application to get the APK designed for the new
+device.)</p></li>
+</ul>
+
+<p>The following sections describe some of the other options you should use to support multiple
+device configurations before deciding to publish multiple APKs.</p>
+
+
+
+<h3 id="TextureOptions">Supporting multiple GL textures</h3>
+
+<p>To support multiple types of GL textures with a single APK, your application should query the GL
+texture formats supported on the device and then use the appropriate resources or download
+them from a web server. For example, in order to keep the size of your APK small, you can query the
+device's support for different GL texture formats when the application starts for the first time and
+then download only the textures you need for that device.</p>
+
+<p>For maximum performance and compatibility, your application should use ETC1 textures wherever it
+doesn't impact the visual quality. However, because ETC1 cannot deal with images that have drastic
+chroma changes, such as line art and (most) text, and doesn't support alpha, it may not the best
+format for all textures.</p>
+
+<p>With a single APK, you should try to use ETC1 textures and uncompressed textures whenever
+reasonable, and consider the use of PVRTC, ATITC, or DXTC as a last resort when ETC1 does not
+suffice.</p>
+
+<p>Here's an example query for supported texture compression formats from inside a
+{@link android.opengl.GLSurfaceView.Renderer GLSurfaceView.Renderer}:</p>
+
+<pre>
+public void onSurfaceChanged(GL10 gl, int w, int h) {
+    String extensions = gl.glGetString(GL10.GL_EXTENSIONS);
+    Log.d("ExampleActivity", extensions);
+}
+</pre>
+
+<p>This returns a string that lists each of the supported compression formats.</p>
+
+
+
+<h3 id="ScreenOptions">Supporting multiple screens</h3>
+
+<p>Unless your APK file exceeds the Google Play size limit of 50MB, supporting multiple screens
+should always be done with a single APK. Since Android 1.6, the Android system manages most of the
+work required for your application to run successfully on a variety of screen sizes and
+densities.</p>
+
+<p>To further optimize your application for different screen sizes and densities, you should provide
+<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
+resources</a> such as bitmap drawables at different resolutions and different layout designs for
+different screen sizes.</p>
+
+<p>For more information about how to support multiple screens with a single APK, read <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
+
+<p>Additionally, you should consider using a support library from the <a
+href="{@docRoot}tools/extras/support-library.html">Compatibility Package</a> so that you can add <a
+href="{@docRoot}guide/components/fragments.html">Fragments</a> to your activity designs
+when running on larger screens such as tablets.</p>
+
+
+
+<h3 id="ApiLevelOptions">Supporting multiple API levels</h3>
+
+<p>If you want to support as many versions of the Android platform as possible, you should use
+only APIs available in the lowest reasonable version. For example, your application may not require
+APIs newer than Android 2.1 (API Level 7), which makes an application available to
+over 95% of Android-powered devices (as indicated by the <a
+href="{@docRoot}about/dashboards/index.html">Platform Versions</a> dashboard).</p>
+
+<p>By using a support library from the <a
+href="{@docRoot}tools/extras/support-library.html">Compatibility Package</a>, you can also use APIs
+from some of the latest versions (such as Android 3.0) while
+still supporting versions as low as Android 1.6. The support library includes APIs for <a
+href="{@docRoot}guide/components/fragments.html">Fragments</a>, <a
+href="{@docRoot}guide/components/loaders.html">Loaders</a>, and more. Using the fragment
+APIs is particularly valuable so that you can optimize your user interface for large devices such as
+tablets.</p>
+
+<p>Alternatively, if you want to use some APIs that are available only in newer versions of Android
+(which your application can still function without), then you should consider using reflection. By
+using reflection, you can check whether the current device supports certain APIs. If the APIs are
+not available, your application can gracefully disable and hide the feature.</p>
+
+<p>Another way to use new APIs only when running on a version that supports them is to check the
+API level of the current device. That is, you can query the value of {@link
+android.os.Build.VERSION#SDK_INT} and create different code paths depending on the API level
+supported by the device. For example:</p>
+
+<pre>
+if (android.os.Build.VERSION.SDK_INT >= 11) {
+    // Use APIs supported by API level 11 (Android 3.0) and up
+} else {
+    // Do something different to support older versions
+}
+</pre>
+
diff --git a/docs/html/guide/guide_toc.cs b/docs/html/guide/guide_toc.cs
index 62d18ae..44b977e 100644
--- a/docs/html/guide/guide_toc.cs
+++ b/docs/html/guide/guide_toc.cs
@@ -5,236 +5,80 @@
        Below are template spans for adding localized doc titles. Please ensure that
        localized titles are added in the language order specified below.
 ?>
-<ul>
-
-  <li>
-    <span class="heading">
-      <span class="en">Android Basics</span>
-      <span class="de" style="display:none">Einführung in Android</span>
-      <span class="es" style="display:none">Información básica sobre Android</span>
-      <span class="fr" style="display:none">Présentation d'Android</span>
-      <span class="it" style="display:none">Nozioni di base su Android</span>
-      <span class="ja" style="display:none">Android の基本</span>
-      <span class="zh-CN" style="display:none">Android 基础知识</span>
-      <span class="zh-TW" style="display:none">Android 簡介</span>
-    </span>
+<ul id="nav">
+  <!--  Walkthrough for Developers -- quick overview of what it's like to develop on Android -->
+  <!--<li style="color:red">Overview</li> -->
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/components/index.html">
+        <span class="en">App Components</span>
+      </a></div>
     <ul>
-      <li><a href="<?cs var:toroot ?>guide/basics/what-is-android.html">
-        <span class="en">What Is Android?</span>
-        <span class="de" style="display:none">Was ist Android?</span>
-        <span class="es" style="display:none">¿Qué es Android?</span>
-        <span class="fr" style="display:none">Qu'est-ce qu'Android&nbsp;?</span>
-        <span class="it" style="display:none">Che cos'è Android?</span>
-        <span class="ja" style="display:none">Android とは</span>
-        <span class="zh-CN" style="display:none">Android 是什么？</span>
-        <span class="zh-TW" style="display:none">什麼是 Android？</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/topics/fundamentals.html">
-        <span class="en">Application Fundamentals</span>
-        <span class="de" style="display:none">Anwendungsgrundlagen</span>
-        <span class="es" style="display:none">Fundamentos de las aplicaciones</span>
-        <span class="fr" style="display:none">Principes de base des applications</span>
-        <span class="it" style="display:none">Concetti fondamentali sulle applicazioni</span>
-        <span class="ja" style="display:none">開発の基礎</span>
-        <span class="zh-CN" style="display:none">应用程序基础</span>
-        <span class="zh-TW" style="display:none">應用程式基本原理</span>
-      </a></li>
-
-  <!--  <li><a style="color:gray;">The Android SDK</a></li> -->
-  <!--  <li><a style="color:gray;">Walkthrough for Developers</a></li> -->
-      <!-- quick overview of what it's like to develop on Android -->
-    </ul>
-  </li>
-
-  <li>
-    <span class="heading">
-      <span class="en">Framework Topics</span>
-      <span class="de" style="display:none">Framework-Themen</span>
-      <span class="es" style="display:none">Temas sobre el framework</span>
-      <span class="fr" style="display:none">Thèmes relatifs au framework</span>
-      <span class="it" style="display:none">Argomenti relativi al framework</span>
-      <span class="ja" style="display:none">フレームワーク トピック</span>
-      <span class="zh-CN" style="display:none">框架主题</span>
-      <span class="zh-TW" style="display:none">架構主題</span>
-    </span>
-    <ul>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/fundamentals/activities.html">
-          <span class="en">Activities</span>
-        </a></div>
+      <li><a href="<?cs var:toroot ?>guide/components/fundamentals.html">
+            <span class="en">App Fundamentals</span></a>
+      </li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/components/activities.html">
+            <span class="en">Activities</span>
+          </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/fragments.html">
-            <span class="en">Fragments</span>
-          </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/loaders.html">
-            <span class="en">Loaders</span>
-          </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/tasks-and-back-stack.html">
-            <span class="en">Tasks and Back Stack</span></a></li>
+          <li><a href="<?cs var:toroot ?>guide/components/fragments.html">
+              <span class="en">Fragments</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/components/loaders.html">
+              <span class="en">Loaders</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/components/tasks-and-back-stack.html">
+              <span class="en">Tasks and Back Stack</span>
+            </a></li>
         </ul>
       </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/fundamentals/services.html">
-          <span class="en">Services</span>
-        </a></div>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/components/services.html">
+            <span class="en">Services</span>
+          </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/bound-services.html">
-            <span class="en">Bound Services</span>
-          </a></li>
+          <li><a href="<?cs var:toroot ?>guide/components/bound-services.html">
+              <span class="en">Bound Services</span>
+            </a></li>
         </ul>
       </li>
-      <li class="toggle-list">
-          <div><a href="<?cs var:toroot ?>guide/topics/providers/content-providers.html">
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/providers/content-providers.html">
             <span class="en">Content Providers</span>
           </a></div>
-          <ul>
-            <li>
-                <a href="<?cs var:toroot ?>guide/topics/providers/content-provider-basics.html">
-                    <span class="en">Content Provider Basics<span
-class="new">&nbsp;new!</span></span>
-                </a>
-            </li>
-            <li>
-                <a href="<?cs var:toroot ?>guide/topics/providers/content-provider-creating.html">
-                    <span class="en">Creating a Content Provider<span
-class="new">&nbsp;new!</span></span>
-                </a>
-            </li>
-            <li>
-                <a href="<?cs var:toroot ?>guide/topics/providers/calendar-provider.html">
-                    <span class="en">Calendar Provider<span class="new">&nbsp;new!</span></span>
-                </a>
-            </li>
-          </ul>
-      </li>
-      <li><a href="<?cs var:toroot ?>guide/topics/intents/intents-filters.html">
-            <span class="en">Intents and Intent Filters</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/topics/fundamentals/processes-and-threads.html">
-            <span class="en">Processes and Threads</span>
-          </a></li>
-    </ul>
-
-
-    <ul>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/ui/index.html">
-            <span class="en">User Interface</span>
-          </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/declaring-layout.html">
-               <span class="en">XML Layouts</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/ui-events.html">
-                <span class="en">Input Events</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/menus.html">
-               <span class="en">Menus<span class="new">&nbsp;new!</span></span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/actionbar.html">
-               <span class="en">Action Bar</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/dialogs.html">
-                <span class="en">Dialogs</span>
-              </a></li>
-          <li class="toggle-list">
-            <div><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/index.html">
-                <span class="en">Notifications</span>
-            </a></div>
-            <ul>
-              <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/toasts.html">
-                <span class="en">Toast Notifications</span>
-              </a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/notifications.html">
-                <span class="en">Status Bar Notifications</span>
-              </a></li>
-            </ul>
-          </li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/drag-drop.html">
-                <span class="en">Drag and Drop</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/themes.html">
-                <span class="en">Styles and Themes</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/custom-components.html">
-                <span class="en">Custom Components</span>
-              </a></li>
-          <li class="toggle-list">
-            <div><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/index.html">
-                <span class="en">Accessibility<span class="new">&nbsp;new!</span></span>
-            </a></div>
-            <ul>
-              <li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/apps.html">
-                <span class="en">Making Applications Accessible</span>
-              </a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/services.html">
-                <span class="en">Building Accessibility Services</span>
-              </a></li>
-            </ul>
-          </li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/binding.html">
-                <span class="en">Binding to Data with AdapterView</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout-objects.html">
-                <span class="en">Common Layout Objects</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/ui/how-android-draws.html">
-                <span class="en">How Android Draws Views</span>
-              </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/providers/content-provider-basics.html">
+              <span class="en">Content Provider Basics</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/providers/content-provider-creating.html">
+              <span class="en">Creating a Content Provider</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/providers/calendar-provider.html">
+              <span class="en">Calendar Provider</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/providers/contacts-provider.html">
+              <span class="en">Contacts Provider</span>
+            </a></li>
         </ul>
-      </li><!-- end of User Interface -->
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/resources/index.html">
-               <span class="en">Application Resources</span>
-             </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/resources/providing-resources.html">
-                <span class="en">Providing Resources</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/resources/accessing-resources.html">
-                <span class="en">Accessing Resources</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/resources/runtime-changes.html">
-                <span class="en">Handling Runtime Changes</span>
-              </a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/resources/localization.html">
-                <span class="en">Localization</span>
-              </a></li>
-          <li class="toggle-list">
-            <div><a href="<?cs var:toroot ?>guide/topics/resources/available-resources.html">
-              <span class="en">Resource Types</span>
-            </a></div>
-            <ul>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/animation-resource.html">Animation</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/color-list-resource.html">Color State List</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/drawable-resource.html">Drawable</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/layout-resource.html">Layout</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/menu-resource.html">Menu</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/string-resource.html">String</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/style-resource.html">Style</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/resources/more-resources.html">More Types</a></li>
-            </ul>
-          </li><!-- end of resource types -->
-        </ul>
-      </li><!-- end of app resources -->
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/data/data-storage.html">
-            <span class="en">Data Storage</span>
-          </a></div>
-          <ul>
-            <li><a href="<?cs var:toroot ?>guide/topics/data/backup.html">
-                <span class="en">Data Backup</span>
-              </a>
-            </li>
-          </ul>
       </li>
-      <li><a href="<?cs var:toroot ?>guide/topics/security/security.html">
-            <span class="en">Security and Permissions</span>
+      <li><a href="<?cs var:toroot ?>guide/components/intents-filters.html">
+          <span class="en">Intents and Intent Filters</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>guide/components/processes-and-threads.html">
+          <span class="en">Processes and Threads</span>
+        </a>
+      </li>
+      <li><a href="<?cs var:toroot ?>guide/topics/security/permissions.html">
+          <span class="en">Permissions</span>
+        </a>
+      </li>
+      <li><a href="<?cs var:toroot ?>guide/topics/appwidgets/index.html">
+            <span class="en">App Widgets</span>
           </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/manifest/manifest-intro.html">
-          <span class="en">The AndroidManifest.xml File</span>
+      <li class="nav-section">
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/manifest/manifest-intro.html">
+          <span class="en">Android Manifest</span>
         </a></div>
         <ul>
           <li><a href="<?cs var:toroot ?>guide/topics/manifest/action-element.html">&lt;action&gt;</a></li>
@@ -264,86 +108,260 @@
           <li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a></li>
           <li><a href="<?cs var:toroot ?>guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a></li>
         </ul>
-      </li><!-- end of the manifest file -->
-    </ul>
+   </li><!-- end of the manifest file -->
 
+    </ul>
+  </li>
+
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/ui/index.html">
+        <span class="en">User Interface</span>
+      </a></div>
     <ul>
-    <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/graphics/index.html">
-            <span class="en">Graphics</span>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/overview.html">
+          <span class="en">Overview</span>
+        </a></li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/ui/declaring-layout.html">
+            <span class="en">Layouts</span>
           </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/graphics/2d-graphics.html">
-              <span class="en">Canvas and Drawables</span></a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/graphics/hardware-accel.html">
-              <span class="en">Hardware Acceleration</span></a>
-            </li>
-          <li><a href="<?cs var:toroot ?>guide/topics/graphics/opengl.html">
-              <span class="en">OpenGL</span>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout/linear.html">
+              <span class="en">Linear Layout</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout/relative.html">
+              <span class="en">Relative Layout</span>
+            </a></li>
+       <!--
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout/grid.html">
+              <span class="en">Grid Layout</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout/tabs.html">
+              <span class="en">Tab Layout</span>
+            </a></li>
+       -->
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout/listview.html">
+              <span class="en">List View</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/layout/gridview.html">
+              <span class="en">Grid View</span>
             </a></li>
         </ul>
       </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/graphics/animation.html">
-            <span class="en">Animation</span>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/ui/controls.html">
+            <span class="en">Input Controls</span>
           </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/graphics/prop-animation.html">
-              <span class="en">Property Animation</span></a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/graphics/view-animation.html">
-              <span class="en">View Animation</span></a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/graphics/drawable-animation.html">
-              <span class="en">Drawable Animation</span></a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/button.html">
+              <span class="en">Buttons</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/text.html">
+              <span class="en">Text Fields</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/checkbox.html">
+              <span class="en">Checkboxes</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/radiobutton.html">
+              <span class="en">Radio Buttons</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/togglebutton.html">
+              <span class="en">Toggle Buttons</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/spinner.html">
+              <span class="en">Spinners</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/pickers.html">
+              <span class="en">Pickers</span>
+            </a></li>
+<!--
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/controls/progress.html">
+              <span class="en">Seek and Progress Bars</span>
+            </a></li>
+-->
         </ul>
       </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/renderscript/index.html">
-          <span class="en">Renderscript</span></a>
-        </div>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/ui-events.html">
+          <span class="en">Input Events</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/menus.html">
+          <span class="en">Menus</span></span>
+          </a></li>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/dialogs.html">
+           <span class="en">Dialogs</span>
+          </a></li>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/actionbar.html">
+           <span class="en">Action Bar</span>
+          </a></li>
+      <li class="nav-section">
+          <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/index.html">
+              <span class="en">Notifications</span>
+            </a></div>
+          <ul>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/toasts.html">
+              <span class="en">Toast Notifications</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/notifiers/notifications.html">
+              <span class="en">Status Notifications</span>
+            </a></li>
+          </ul>
+      </li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/search/index.html">
+            <span class="en">Search</span>
+          </a></div>
+          <ul>
+            <li><a href="<?cs var:toroot ?>guide/topics/search/search-dialog.html">Creating a Search Interface</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/search/adding-recent-query-suggestions.html">Adding Recent Query Suggestions</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/search/adding-custom-suggestions.html">Adding Custom Suggestions</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/search/searchable-config.html">Searchable Configuration</a></li>
+          </ul>
+      </li>  
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/drag-drop.html">
+          <span class="en">Drag and Drop</span>
+        </a></li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/index.html">
+            <span class="en">Accessibility</span>
+          </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/renderscript/graphics.html">
-                <span class="en">Graphics</span>
-              </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>guide/topics/renderscript/compute.html">
-                <span class="en">Compute</span>
-              </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>guide/topics/renderscript/reference.html">
-                <span class="en">Runtime API Reference</span>
-              </a>
-          </li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/apps.html">
+              <span class="en">Making Applications Accessible</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/ui/accessibility/services.html">
+              <span class="en">Building Accessibility Services</span>
+            </a></li>
         </ul>
       </li>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/themes.html">
+          <span class="en">Styles and Themes</span>
+        </a></li>
+      <li><a href="<?cs var:toroot ?>guide/topics/ui/custom-components.html">
+          <span class="en">Custom Components</span>
+        </a></li>
+    </ul>
+  </li><!-- end of User Interface -->
 
-      <li class="toggle-list">
-          <div><a href="<?cs var:toroot ?>guide/topics/media/index.html">
-            <span class="en">Multimedia and Camera</span>
+    <li class="nav-section">
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/resources/index.html">
+           <span class="en">App Resources</span>
+         </a></div>
+      <ul>
+        <li><a href="<?cs var:toroot ?>guide/topics/resources/overview.html">
+            <span class="en">Overview</span>
+          </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/resources/providing-resources.html">
+            <span class="en">Providing Resources</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/resources/accessing-resources.html">
+            <span class="en">Accessing Resources</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/resources/runtime-changes.html">
+              <span class="en">Handling Runtime Changes</span>
+            </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/resources/localization.html">
+            <span class="en">Localization</span>
+          </a></li>
+        <li class="nav-section">
+          <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/resources/available-resources.html">
+              <span class="en">Resource Types</span>
+            </a></div>
+          <ul>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/animation-resource.html">Animation</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/color-list-resource.html">Color State List</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/drawable-resource.html">Drawable</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/layout-resource.html">Layout</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/menu-resource.html">Menu</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/string-resource.html">String</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/style-resource.html">Style</a></li>
+            <li><a href="<?cs var:toroot ?>guide/topics/resources/more-resources.html">More Types</a></li>
+          </ul>
+        </li><!-- end of resource types -->
+      </ul>
+    </li><!-- end of app resources -->
+
+   <li class="nav-section">
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/graphics/index.html">
+          <span class="en">Animation and Graphics</span>
+        </a></div>
+      <ul>
+      <li class="nav-section">
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/overview.html">
+            <span class="en">Overview</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/prop-animation.html">
+            <span class="en">Property Animation</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/view-animation.html">
+            <span class="en">View Animation</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/drawable-animation.html">
+            <span class="en">Drawable Animation</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/2d-graphics.html">
+            <span class="en">Canvas and Drawables</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/opengl.html">
+            <span class="en">OpenGL</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/graphics/hardware-accel.html">
+            <span class="en">Hardware Acceleration</span>
+          </a></li>
+        <li class="nav-section">
+            <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/graphics/renderscript/index.html">
+              <span class="en">Renderscript</span>
+            </a></div>
+            <ul>
+              <li><a href="<?cs var:toroot ?>guide/topics/graphics/renderscript/graphics.html">
+                    <span class="en">Graphics</span></a>
+                  </li>
+              <li><a href="<?cs var:toroot ?>guide/topics/graphics/renderscript/compute.html">
+                    <span class="en">Compute</span></a>
+                  </li>
+              <li><a href="<?cs var:toroot ?>guide/topics/graphics/renderscript/reference.html">
+                    <span class="en">Runtime API Reference</span></a>
+                  </li>
+             </ul>
+          </li>
+       </ul>
+    </li><!-- end of graphics and animation-->
+
+            
+      <li class="nav-section">
+          <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/media/index.html">
+            <span class="en">Media and Camera</span>
           </a></div>
           <ul>
             <li><a href="<?cs var:toroot ?>guide/topics/media/mediaplayer.html">
                   <span class="en">Media Playback</span></a>
                 </li>
+            <li><a href="<?cs var:toroot ?>guide/appendix/media-formats.html">
+                   <span class="en">Supported Media Formats</span></a>
+                </li>
+            <li><a href="<?cs var:toroot ?>guide/topics/media/audio-capture.html">
+                  <span class="en">Audio Capture</span></a>
+                </li>
             <li><a href="<?cs var:toroot ?>guide/topics/media/jetplayer.html">
                   <span class="en">JetPlayer</span></a>
                 </li>
             <li><a href="<?cs var:toroot ?>guide/topics/media/camera.html">
                   <span class="en">Camera</span></a>
                 </li>
-            <li><a href="<?cs var:toroot ?>guide/topics/media/audio-capture.html">
-                  <span class="en">Audio Capture</span></a>
-                </li>
           </ul>
-      </li>
-      <li>
-        <a href="<?cs var:toroot ?>guide/topics/clipboard/copy-paste.html">
-            <span class="en">Copy and Paste</span>
-        </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/sensors/index.html">
-              <span class="en">Sensors</span>
+      </li><!-- end of media and camera -->
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/sensors/index.html">
+              <span class="en">Location and Sensors</span>
               </a></div>
         <ul>
+          <li><a href="<?cs var:toroot ?>guide/topics/location/index.html">
+               <span class="en">Location and Maps</span>
+             </a>
+          <li><a href="<?cs var:toroot ?>guide/topics/location/strategies.html">
+               <span class="en">Location Strategies</span>
+             </a></li>
           <li><a href="<?cs var:toroot ?>guide/topics/sensors/sensors_overview.html">
               <span class="en">Sensors Overview</span>
             </a></li>
@@ -357,415 +375,127 @@
               <span class="en">Environment Sensors</span>
             </a></li>
         </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/topics/location/index.html">
-               <span class="en">Location and Maps</span>
+      </li><!-- end of location and sensors -->
+      
+
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/connectivity/index.html">
+               <span class="en">Connectivity</span>
              </a></div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/location/obtaining-user-location.html">
-                <span class="en">Obtaining User Location</span>
-              </a></li>
-        </ul>
-      </li>
-  <!--<li class="toggle-list">
-        <div><a style="color:gray;">Wireless Controls</a></div>
-          <ul>
-            <li><a style="color:gray;">Wi-Fi</a></li>
-          </ul>
-      </li> -->
-  <!--<li><a style="color:gray;">Localization</a></li>  -->
-      <li><a href="<?cs var:toroot ?>guide/topics/appwidgets/index.html">
-            <span class="en">App Widgets</span></a>
+          <li><a href="<?cs var:toroot?>guide/topics/connectivity/bluetooth.html">
+              <span class="en">Bluetooth</span>
+            </a>
           </li>
-      <li><a href="<?cs var:toroot?>guide/topics/wireless/bluetooth.html">
-            <span class="en">Bluetooth</span></a>
-          </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot?>guide/topics/nfc/index.html">
-          <span class="en">Near Field Communication</span></a>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot?>guide/topics/connectivity/nfc/index.html">
+          <span class="en">NFC</span></a>
         </div>
         <ul>
-          <li><a href="<?cs var:toroot ?>guide/topics/nfc/nfc.html">NFC Basics</a></li>
-          <li><a href="<?cs var:toroot ?>guide/topics/nfc/advanced-nfc.html">Advanced NFC</a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/connectivity/nfc/nfc.html">NFC Basics</a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/connectivity/nfc/advanced-nfc.html">Advanced NFC</a></li>
         </ul>
       </li>
-      <li><a href="<?cs var:toroot?>guide/topics/wireless/wifip2p.html">
+      <li><a href="<?cs var:toroot?>guide/topics/connectivity/wifip2p.html">
             <span class="en">Wi-Fi Direct</span></a>
           </li>
-      <li class="toggle-list">
-          <div><a href="<?cs var:toroot?>guide/topics/usb/index.html">
+      <li class="nav-section">
+          <div class="nav-section-header"><a href="<?cs var:toroot?>guide/topics/connectivity/usb/index.html">
             <span class="en">USB</span></a>
           </div>
             <ul>
-              <li><a href="<?cs var:toroot ?>guide/topics/usb/accessory.html">Accessory</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/usb/host.html">Host</a></li>
-              <li><a href="<?cs var:toroot ?>guide/topics/usb/adk.html">Open Accessory Dev Kit</a></li>
+              <li><a href="<?cs var:toroot ?>guide/topics/connectivity/usb/accessory.html">Accessory</a></li>
+              <li><a href="<?cs var:toroot ?>guide/topics/connectivity/usb/host.html">Host</a></li>
+              <li><a href="<?cs var:toroot ?>guide/topics/connectivity/usb/adk.html">Open Accessory Dev Kit</a></li>
             </ul>
-          </li>
-
-       <li><a href="<?cs var:toroot?>guide/topics/network/sip.html">
-            <span class="en">Session Initiation Protocol</span>
+     </li>
+     <li><a href="<?cs var:toroot?>guide/topics/connectivity/sip.html">
+            <span class="en">SIP</span>
+          </a>
+     </li>
+     
+    </ul>
+  </li><!-- end of connectivity -->
+  
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/text/index.html">
+            <span class="en">Text and Input</span>
+        </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>guide/topics/text/copy-paste.html">
+              <span class="en">Copy and Paste</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/text/creating-input-method.html">
+              <span class="en">Creating an IME</span>
+            </a></li>
+          <li><a href="<?cs var:toroot ?>guide/topics/text/spell-checker-framework.html">
+              <span class="en">Spelling Checker</span>
+            </a></li>
+        </ul>
+      </li><!-- end of text and input -->
+      
+     <li class="nav-section">
+      <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/topics/data/index.html">
+          <span class="en">Data Storage</span>
+        </a></div>
+      <ul>
+         <li><a href="<?cs var:toroot ?>guide/topics/data/data-storage.html">
+            <span class="en">Storage Options</span>
+           </a></li>
+        <li><a href="<?cs var:toroot ?>guide/topics/data/backup.html">
+            <span class="en">Data Backup</span>
           </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot?>guide/topics/search/index.html">
-            <span class="en">Search</span>
-          </a></div>
-          <ul>
-            <li><a href="<?cs var:toroot?>guide/topics/search/search-dialog.html">Creating a Search Interface</a></li>
-            <li><a href="<?cs var:toroot?>guide/topics/search/adding-recent-query-suggestions.html">Adding Recent Query Suggestions</a></li>
-            <li><a href="<?cs var:toroot?>guide/topics/search/adding-custom-suggestions.html">Adding Custom Suggestions</a></li>
-            <li><a href="<?cs var:toroot?>guide/topics/search/searchable-config.html">Searchable Configuration</a></li>
-          </ul>
-      </li>
-      <li><a href="<?cs var:toroot?>guide/topics/admin/device-admin.html">
-            <span class="en">Device Administration</span></a>
-      </li>
-      <li class="toggle-list">
-           <div>
-                <a href="<?cs var:toroot?>guide/topics/testing/index.html">
-                   <span class="en">Testing</span>
-               </a>
-           </div>
+        <li><a href="<?cs var:toroot ?>guide/topics/data/install-location.html">
+            <span class="en">App Install Location</span>
+          </a></li>
+      </ul>
+    </li><!-- end of data storage -->
+
+  
+  <li class="nav-section">
+           <div class="nav-section-header"><a href="<?cs var:toroot?>guide/topics/admin/index.html">
+               <span class="en">Administration</span>
+             </a></div>
            <ul>
               <li>
-                <a href="<?cs var:toroot?>guide/topics/testing/testing_android.html">
-                <span class="en">Testing Fundamentals</span></a>
+                <a href="<?cs var:toroot?>guide/topics/admin/device-admin.html">
+                <span class="en">Device Policies</span></a>
               </li>
+            <!--
               <li>
-                <a href="<?cs var:toroot?>guide/topics/testing/activity_testing.html">
-                <span class="en">Activity Testing</span></a>
+                <a href="<?cs var:toroot?>guide/topics/admin/keychain.html">
+                <span class="en">Certificate Store</span></a>
               </li>
-              <li>
-                <a href="<?cs var:toroot?>guide/topics/testing/contentprovider_testing.html">
-                <span class="en">Content Provider Testing</span></a>
-              </li>
-              <li>
-                <a href="<?cs var:toroot?>guide/topics/testing/service_testing.html">
-                <span class="en">Service Testing</span></a>
-              </li>
-              <li>
-                <a href="<?cs var:toroot ?>guide/topics/testing/what_to_test.html">
-                <span class="en">What To Test</span></a>
-              </li>
+            -->
            </ul>
-      </li>
-    </ul>
-  </li>
-
-  <li>
-    <h2>
-      <span class="en">Google Play Topics</span>
-    </h2>
+  </li><!-- end of administration -->
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/webapps/index.html">
+    <span class="en">Web Apps</span>
+    </a></div>
     <ul>
-      <li><a href="<?cs var:toroot ?>guide/publishing/publishing.html">
-          <span class="en">Publishing on Google Play</span>
+      <li><a href="<?cs var:toroot ?>guide/webapps/overview.html">
+            <span class="en">Overview</span>
           </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/market/licensing/index.html">
-          <span class="en">Application Licensing</span></a>
-        </div>
-        <ul>
-          <li><a href="<?cs var:toroot?>guide/market/licensing/overview.html">
-              <span class="en">Licensing Overview</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/licensing/setting-up.html">
-              <span class="en">Setting Up for Licensing</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/licensing/adding-licensing.html">
-              <span class="en">Adding Licensing to Your App</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/licensing/licensing-reference.html">
-              <span class="en">Licensing Reference</span></a>
-          </li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot?>guide/market/billing/index.html">
-            <span class="en">In-app Billing</span></a>
-        </div>
-        <ul>
-          <li><a href="<?cs var:toroot?>guide/market/billing/billing_overview.html">
-              <span class="en">In-app Billing Overview</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/billing/billing_integrate.html">
-              <span class="en">Implementing In-app Billing</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/billing/billing_best_practices.html">
-              <span class="en">Security and Design</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/billing/billing_testing.html">
-              <span class="en">Testing In-app Billing</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/billing/billing_admin.html">
-              <span class="en">Administering In-app Billing</span></a>
-          </li>
-          <li><a href="<?cs var:toroot?>guide/market/billing/billing_reference.html">
-              <span class="en">In-app Billing Reference</span></a>
-          </li>
-        </ul>
-      </li>
-      <li><a href="<?cs var:toroot ?>guide/appendix/market-filters.html">
-          <span class="en">Filters on Google Play</span></a>
-      </li>
-      <li><a href="<?cs var:toroot ?>guide/market/publishing/multiple-apks.html">
-          <span class="en">Multiple APK Support</span></a>
-      </li>
-      <li><a href="<?cs var:toroot ?>guide/market/expansion-files.html">
-          <span class="en">APK Expansion Files<span class="new">&nbsp;new!</span></span></a>
-      </li>
-    </ul>
-  </li>
-
-
-  <li>
-    <span class="heading">
-      <span class="en">Developing</span>
-      <span class="de" style="display:none">Entwicklung</span>
-      <span class="es" style="display:none">Desarrollo</span>
-      <span class="fr" style="display:none">Développement</span>
-      <span class="it" style="display:none">Sviluppo</span>
-      <span class="ja" style="display:none">開発</span>
-      <span class="zh-CN" style="display:none">开发</span>
-      <span class="zh-TW" style="display:none">開發</span>
-    </span>
-    <ul>
-  <!--<li><a href="">Developing for Android</a></li>
-      signing, upgrading, selecting a package name, select device profile, touch, trackball, dpad available, etc. -->
-      <li>
-        <a href="<?cs var:toroot ?>guide/developing/index.html">
-        <span class="en">Introduction</span></a>
-      </li>
-
-      <li class="toggle-list">
-        <div>
-           <a href="<?cs var:toroot ?>guide/developing/devices/index.html">
-                <span class="en">Managing Virtual Devices</span>
-            </a>
-        </div>
-        <ul>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/devices/managing-avds.html">
-              <span class="en">With AVD Manager</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/devices/managing-avds-cmdline.html">
-              <span class="en">From the Command Line</span>
-            </a>
-          </li>
-          <li>
-           <a href="<?cs var:toroot ?>guide/developing/devices/emulator.html">
-                <span class="en">Using the Android Emulator</span>
-            </a>
-          </li>
-        </ul>
-      </li>
-      <li>
-        <a href="<?cs var:toroot ?>guide/developing/device.html">
-          <span class="en">Using Hardware Devices</span>
-        </a>
-      </li>
-
-      <li class="toggle-list">
-        <div>
-          <a href="<?cs var:toroot ?>guide/developing/projects/index.html">
-            <span class="en">Managing Projects</span>
-          </a>
-        </div>
-        <ul>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/projects/projects-eclipse.html">
-              <span class="en">From Eclipse with ADT</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/projects/projects-cmdline.html">
-                <span class="en">From the Command Line</span>
-            </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div>
-          <a href="<?cs var:toroot ?>guide/developing/building/index.html">
-            <span class="en">Building and Running</span>
-          </a>
-        </div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>guide/developing/building/building-eclipse.html">
-            <span class="en">From Eclipse with ADT</span>
+      <li><a href="<?cs var:toroot ?>guide/webapps/targeting.html">
+            <span class="en">Targeting Screens from Web Apps</span>
           </a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/building/building-cmdline.html">
-            <span class="en">From the Command Line</span></a></li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div>
-          <a href="<?cs var:toroot ?>guide/developing/debugging/index.html">
-            <span class="en">Debugging</span>
-          </a>
-        </div>
-        <ul>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/debugging-projects.html">
-                <span class="en">From Eclipse with ADT</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/debugging-projects-cmdline.html">
-                <span class="en">From Other IDEs</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/ddms.html">
-              <span class="en">Using DDMS</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/debugging-log.html">
-                <span class="en">Reading and Writing Logs</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/debugging-ui.html">
-                <span class="en">Debugging and Profiling UIs</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/debugging-tracing.html">
-                <span class="en">Profiling with Traceview and dmtracedump</span>
-            </a>
-          </li>
-          <li>
-            <a href="<?cs var:toroot ?>guide/developing/debugging/debugging-devtools.html">
-                <span class="en">Using the Dev Tools App</span>
-            </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-           <div>
-                <a href="<?cs var:toroot ?>guide/developing/testing/index.html">
-                   <span class="en">Testing</span>
-               </a>
-           </div>
-           <ul>
-              <li>
-                <a href="<?cs var:toroot ?>guide/developing/testing/testing_eclipse.html">
-                  <span class="en">From Eclipse with ADT</span>
-                </a>
-              </li>
-
-              <li>
-                <a href="<?cs var:toroot ?>guide/developing/testing/testing_otheride.html">
-                  <span class="en">From Other IDEs</span>
-                </a>
-              </li>
-           </ul>
-         </li>
-
-         <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/developing/tools/index.html">
-            <span class="en">Tools</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/adb.html">adb</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/adt.html">ADT</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/android.html">android</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/bmgr.html">bmgr</a>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/dmtracedump.html">dmtracedump</a></li>
-          <li><a href="<?cs var:toroot?>guide/developing/tools/draw9patch.html">Draw
-          9-Patch</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/emulator.html">Emulator</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/etc1tool.html">etc1tool</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/hprof-conv.html">hprof-conv</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/layoutopt.html">layoutopt</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/logcat.html">logcat</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/mksdcard.html">mksdcard</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/monkey.html">Monkey</a></li>
-          <li class="toggle-list">
-            <div><a href="<?cs var:toroot ?>guide/developing/tools/monkeyrunner_concepts.html">
-              <span class="en">monkeyrunner</span>
-            </a></div>
-            <ul>
-              <li><a href="<?cs var:toroot ?>guide/developing/tools/MonkeyDevice.html">
-                <span class="en">MonkeyDevice</span>
-                </a></li>
-              <li><a href="<?cs var:toroot ?>guide/developing/tools/MonkeyImage.html">
-                <span class="en">MonkeyImage</span>
-                </a></li>
-              <li><a href="<?cs var:toroot ?>guide/developing/tools/MonkeyRunner.html">
-                <span class="en">MonkeyRunner</span>
-                </a></li>
-            </ul>
-          </li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/proguard.html">ProGuard</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/adb.html#sqlite">sqlite3</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/traceview.html">Traceview</a></li>
-          <li><a href="<?cs var:toroot ?>guide/developing/tools/zipalign.html">zipalign</a></li>
-        </ul>
-      </li>
-    </ul>
-  </li>
-
-  <li>
-    <span class="heading">
-      <span class="en">Publishing</span>
-      <span class="de" style="display:none">Veröffentlichung</span>
-      <span class="es" style="display:none">Publicación</span>
-      <span class="fr" style="display:none">Publication</span>
-      <span class="it" style="display:none">Pubblicazione</span>
-      <span class="ja" style="display:none">公開</span>
-      <span class="zh-CN" style="display:none">发布</span>
-      <span class="zh-TW" style="display:none">發佈</span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>guide/publishing/publishing_overview.html">
-            <span class="en">Publishing Overview</span>
+      <li><a href="<?cs var:toroot ?>guide/webapps/webview.html">
+            <span class="en">Building Web Apps in WebView</span>
           </a></li>
-      <li><a href="<?cs var:toroot ?>guide/publishing/preparing.html">
-            <span class="en">Preparing for Release</span>
-            <span class="de" style="display:none">Vorbereitung auf die Veröffentlichung</span>
-            <span class="es" style="display:none">Publicación de aplicaciones</span>
-            <span class="fr" style="display:none">Préparation à la publication</span>
-            <span class="it" style="display:none">Preparativi per la pubblicazione</span>
-            <span class="ja" style="display:none">公開の準備</span>
-            <span class="zh-CN" style="display:none">准备发布</span>
-            <span class="zh-TW" style="display:none">準備發佈</span>
+      <li><a href="<?cs var:toroot ?>guide/webapps/debugging.html">
+            <span class="en">Debugging Web Apps</span>
           </a></li>
-      <li><a href="<?cs var:toroot ?>guide/publishing/app-signing.html">
-            <span class="en">Signing Your Applications</span>
-            <span class="de" style="display:none">Signieren Ihrer Anwendungen</span>
-            <span class="es" style="display:none">Firma de aplicaciones</span>
-            <span class="fr" style="display:none">Attribution de votre signature <br />à vos
-applications</span>
-            <span class="it" style="display:none">Firma delle applicazioni</span>
-            <span class="ja" style="display:none">アプリケーションへの署名</span>
-            <span class="zh-CN" style="display:none">应用程序签名</span>
-            <span class="zh-TW" style="display:none">簽署應用程式</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/publishing/versioning.html">
-            <span class="en">Versioning Your Applications</span>
-            <span class="de" style="display:none">Versionsverwaltung für Ihre <br
-/>Anwendungen</span>
-            <span class="es" style="display:none">Versiones de las aplicaciones</span>
-            <span class="fr" style="display:none">Attribution d'une version à vos
-applications</span>
-            <span class="it" style="display:none">Controllo versioni delle applicazioni</span>
-            <span class="ja" style="display:none">アプリケーションのバージョニング</span>
-            <span class="zh-CN" style="display:none">应用程序版本控制</span>
-            <span class="zh-TW" style="display:none">應用程式版本設定</span>
+      <li><a href="<?cs var:toroot ?>guide/webapps/best-practices.html">
+            <span class="en">Best Practices for Web Apps</span>
           </a></li>
     </ul>
-  </li>
-
-  <li>
-    <span class="heading">
+  </li><!-- end of web apps -->
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/index.html">
       <span class="en">Best Practices</span>
       <span class="de" style="display:none">Bewährte Verfahren</span>
       <span class="es" style="display:none">Prácticas recomendadas</span>
@@ -774,13 +504,13 @@
       <span class="ja" style="display:none">ベスト プラクティス</span>
       <span class="zh-CN" style="display:none">最佳实践</span>
       <span class="zh-TW" style="display:none">最佳實務</span>
-    </span>
+    </div></a>
     <ul>
       <li><a href="<?cs var:toroot ?>guide/practices/compatibility.html">
             <span class="en">Compatibility</span>
           </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/practices/screens_support.html">
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/screens_support.html">
           <span class="en">Supporting Multiple Screens</span>
         </a></div>
         <ul>
@@ -790,21 +520,114 @@
           <li><a href="<?cs var:toroot ?>guide/practices/screen-compat-mode.html">
             <span class="en">Screen Compatibility Mode</span>
           </a></li>
-          <li><a href="<?cs var:toroot ?>guide/practices/screens-support-1.5.html">
+          <!--<li><a href="<?cs var:toroot ?>guide/practices/screens-support-1.5.html">
             <span class="en">Strategies for Android 1.5</span>
-          </a></li>
+          </a></li> -->
         </ul>
       </li>
       <li><a href="<?cs var:toroot ?>guide/practices/tablets-and-handsets.html">
             <span class="en">Supporting Tablets and Handsets</span>
           </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/performance.html">
+            <span class="en">Designing for Performance</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>guide/practices/jni.html">
+                <span class="en">JNI Tips</span>
+              </a></li>
+        </ul>
+      </li>
+      <li><a href="<?cs var:toroot ?>guide/practices/responsiveness.html">
+            <span class="en">Designing for Responsiveness</span>
+          </a></li>
+      <li><a href="<?cs var:toroot ?>guide/practices/seamlessness.html">
+            <span class="en">Designing for Seamlessness</span>
+          </a></li>
+        <li><a href="<?cs var:toroot ?>guide/practices/security.html">
+            <span class="en">Designing for Security</span>
+          </a></li>
+
+    </ul>
+  </li>
+  
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/index.html">
+        <span class="en">Google Services</span>
+      </a></div>
+    <ul>      
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot?>guide/google/play/billing/index.html">
+            <span class="en">In-app Billing</span></a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_overview.html">
+              <span class="en">In-app Billing Overview</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_integrate.html">
+              <span class="en">Implementing In-app Billing</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_subscriptions.html">
+              <span class="en">Subscriptions</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_best_practices.html">
+              <span class="en">Security and Design</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_testing.html">
+              <span class="en">Testing In-app Billing</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_admin.html">
+              <span class="en">Administering In-app Billing</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/billing/billing_reference.html">
+              <span class="en">In-app Billing Reference</span></a>
+          </li>
+        </ul>
+      </li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/google/play/licensing/index.html">
+          <span class="en">Application Licensing</span></a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot?>guide/google/play/licensing/overview.html">
+              <span class="en">Licensing Overview</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/licensing/setting-up.html">
+              <span class="en">Setting Up for Licensing</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/licensing/adding-licensing.html">
+              <span class="en">Adding Licensing to Your App</span></a>
+          </li>
+          <li><a href="<?cs var:toroot?>guide/google/play/licensing/licensing-reference.html">
+              <span class="en">Licensing Reference</span></a>
+          </li>
+        </ul>
+      </li>       
+      <li><a href="<?cs var:toroot ?>guide/google/play/filters.html">
+          <span class="en">Filters on Google Play</span></a>
+      </li>
+      <li><a href="<?cs var:toroot ?>guide/google/play/publishing/multiple-apks.html">
+          <span class="en">Multiple APK Support</span></a>
+      </li>
+      <li><a href="<?cs var:toroot ?>guide/google/play/expansion-files.html">
+          <span class="en">APK Expansion Files</span></a>
+      </li>
+
+    </ul>
+  </li><!-- end Google Play -->
+  
+  
+  
+      <!-- this needs to move
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/index.html">
                <span class="en">UI Guidelines</span>
              </a></div>
         <ul>
-          <li class="toggle-list">
-            <div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design.html">
+          <li class="nav-section">
+            <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/icon_design.html">
                    <span class="en">Icon Design</span>
                  </a></div>
             <ul>
@@ -831,94 +654,47 @@
                   </a></li>
             </ul>
           </li>
-          <li><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/widget_design.html">
+          <li><div><a href="<?cs var:toroot ?>guide/practices/ui_guidelines/widget_design.html">
                 <span class="en">App Widget Design</span>
-              </a></li>
+              </a></div>
+          </li>
         </ul>
-      </li>
-      </ul>
-      <ul>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>guide/practices/design/performance.html">
-            <span class="en">Designing for Performance</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>guide/practices/design/jni.html">
-                <span class="en">JNI Tips</span>
-              </a></li>
-        </ul>
-      </li>
-      <li><a href="<?cs var:toroot ?>guide/practices/design/responsiveness.html">
-            <span class="en">Designing for Responsiveness</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/practices/design/seamlessness.html">
-            <span class="en">Designing for Seamlessness</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/practices/security.html">
-            <span class="en">Designing for Security</span></a>
-            </li>
-    </ul>
-  </li>
-
-  <li>
-    <span class="heading">
-      <span class="en">Web Applications</span>
-    </span>
+      </li> 
+        </ul> -->
+        
+<!-- Remove
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>guide/appendix/index.html">
+        <span class="en">Appendix</span>
+        <span class="de" style="display:none">Anhang</span>
+        <span class="es" style="display:none">Apéndice</span>
+        <span class="fr" style="display:none">Annexes</span>
+        <span class="it" style="display:none">Appendice</span>
+        <span class="ja" style="display:none">付録</span>
+        <span class="zh-CN" style="display:none">附录</span>
+        <span class="zh-TW" style="display:none">附錄</span>
+      </a></div>
     <ul>
-      <li><a href="<?cs var:toroot ?>guide/webapps/index.html">
-            <span class="en">Web Apps Overview</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/webapps/targeting.html">
-            <span class="en">Targeting Screens from Web Apps</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/webapps/webview.html">
-            <span class="en">Building Web Apps in WebView</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/webapps/debugging.html">
-            <span class="en">Debugging Web Apps</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/webapps/best-practices.html">
-            <span class="en">Best Practices for Web Apps</span>
-          </a></li>
-    </ul>
-  </li>
-
-  <li>
-    <span class="heading">
-      <span class="en">Appendix</span>
-      <span class="de" style="display:none">Anhang</span>
-      <span class="es" style="display:none">Apéndice</span>
-      <span class="fr" style="display:none">Annexes</span>
-      <span class="it" style="display:none">Appendice</span>
-      <span class="ja" style="display:none">付録</span>
-      <span class="zh-CN" style="display:none">附录</span>
-      <span class="zh-TW" style="display:none">附錄</span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>guide/appendix/api-levels.html">
-            <span class="en">Android API Levels</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/appendix/install-location.html">
-            <span class="en">App Install Location</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>guide/appendix/media-formats.html">
-            <span class="en">Supported Media Formats</span>
-          </a></li>
       <li><a href="<?cs var:toroot ?>guide/appendix/g-app-intents.html">
             <span class="en">Intents List: Google Apps</span>
           </a></li>
-      <li><a href="<?cs var:toroot ?>guide/developing/tools/aidl.html">AIDL</a></li>
+       
+
       <li><a href="<?cs var:toroot ?>guide/appendix/glossary.html">
             <span class="en">Glossary</span>
           </a></li>
     </ul>
   </li>
 
+</li>
+-->
 </ul>
 
+
 <script type="text/javascript">
 <!--
     buildToggleLists();
     changeNavLang(getLangPref());
 //-->
 </script>
+
diff --git a/docs/html/guide/index.jd b/docs/html/guide/index.jd
index 8378472..fea7027 100644
--- a/docs/html/guide/index.jd
+++ b/docs/html/guide/index.jd
@@ -1,88 +1,56 @@
-page.title=The Developer's Guide
+page.title=App Components
+page.landing=true
+page.landing.intro=Android's application framework lets you create extremely rich and innovative apps using a set of reusable components. This section explains how Android apps work and how you use components to build them. 
+page.landing.image=images/ui/ui_index.png
+
 @jd:body
 
-<p>
-Welcome to the <i>Android Dev Guide</i>! The Dev Guide provides 
-a practical introduction to developing applications for Android and documentation about major
-platform features. It explores the concepts behind Android, the framework for 
-constructing an application, and the tools for developing, 
-testing, and publishing software for the platform.
-</p>
+<div class="landing-docs">
 
-<p>
-The Dev Guide holds most of the documentation for the Android
-platform, except for reference material on the framework API.  
-For API specifications, go to the 
-<a href="{@docRoot}reference/packages.html">Reference</a>.
-</p>  
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2012/05/using-dialogfragments.html">
+      <h4>Using DialogFragments</h4>
+      <p>In this post, I’ll show how to use DialogFragments with the v4 support library (for backward compatibility on pre-Honeycomb devices) to show a simple edit dialog and return a result to the calling Activity using an interface.</p>
+    </a>
 
-<p>
-As you can see in the panel on the left, the Dev Guide is 
-divided into several sections:
-<p>
+    <a href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">
+      <h4>Fragments For All</h4>
+      <p>Today we’ve released a static library that exposes the same Fragments API (as well as the new LoaderManager and a few other classes) so that applications compatible with Android 1.6 or later can use fragments to create tablet-compatible user interfaces. </p>
+    </a>
+    
+    <a
+href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">
+      <h4>Multithreading for Performance</h4>
+      <p>A good practice in creating responsive applications is to make sure your main UI thread
+does the minimum amount of work. Any potentially long task that may hang your application should be
+handled in a different thread.</p>
+    </a>
+  </div>
 
-<dl>
-<dt><b>Android Basics</b></dt>
-<dd>An initial orientation to Android &mdash; what it is, 
-what it offers, and how your application fits in.</dd>
+  <div class="col-6">
+    <h3>Training</h3>
+    
+    <a href="http://developer.android.com/training/basics/activity-lifecycle/index.html">
+      <h4>Managing the Activity Lifecycle</h4>
+      <p>This class explains important lifecycle callback methods that each Activity
+      instance receives and how you can use them so your activity does what the user expects and does not consume system
+      resources when your activity doesn't need them.</p>
+    </a>
 
-<dt><b>Framework Topics</b></dt>
-<dd>Discussions of particular parts of the Android framework
-and API.  For an introduction to the framework, begin with
-<a href="{@docRoot}guide/topics/fundamentals.html">Application
-Fundamentals</a>.  Then explore other topics &mdash; from 
-designing a user interface and setting up resources to storing 
-data and using permissions &mdash; as needed.</dd>
+    <a href="http://developer.android.com/training/basics/fragments/index.html">
+      <h4>Building a Dynamic UI with Fragments</h4>
+      <p>This class shows you how to create a dynamic user experience with fragments and optimize
+your app's user experience for devices with different screen sizes, all while continuing to support
+devices running versions as old as Android 1.6.</p>
+    </a>
 
-<dt><b>Google Play Topics</b></dt>
-<dd>Documentation for topics that concern publishing and monetizing applications on Google Play,
-such as how to enforce licensing policies and implement in-app billing.</dd>
+    <a href="http://developer.android.com/training/sharing/index.html">
+      <h4>Sharing Content</h4>
+      <p>This class covers some common ways you can send and receive content between
+      applications using Intent APIs and the ActionProvider object.</p>
+    </a>
+  </div>
 
-<dt><b>Developing</b></dt>
-<dd>Directions for using Android's development and debugging tools, 
-and for testing the results.</dd>
-
-<dt><b>Publishing</b></dt>
-<dd>Instructions on how to prepare your application for deployment
-and how to publish it when it's ready.</dd>
-
-<dt><b>Best Practices</b></dt> 
-<dd>Recommendations on preferred techniques for writing  
-applications that perform efficiently and work well for the
-user.</dd>
-
-<dt><b>Web Applications</b></dt> 
-<dd>Documentation about how to create web applications that work seamlessly on Android-powered
-devices and create Android applications that embed web-based content.</dd>
-
-<dt><b>Appendix</b></dt>
-<dd>Reference information and specifications, as well as FAQs, 
-a glossary of terms, and other information.</dd>
-</dl>
-
-<p>
-The first step in programming for Android is downloading the SDK
-(software development kit).  For instructions and information, visit the <a
-href="{@docRoot}sdk/index.html">SDK</a> tab.
-</p>
-
-<p>
-After you have the SDK, begin by looking through the Dev Guide.
-If you want to start by getting a quick look at some code, the 
-<a href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a>
-tutorial walks you through a standard "Hello, World" application to introduce some basics of an
-Android application. The 
-<a href="{@docRoot}guide/topics/fundamentals.html">Application
-Fundamentals</a> document is a good place to start learning the basics about the application
-framework.
-</p>
-
-
-<p>
-For additional help, consider joining one or more of the Android 
-discussion groups.  Go to the 
-<a href="{@docRoot}resources/community-groups.html">Developer Forums</a> page
-for more information.
-</p>
-
-<p>To return to this page later, just click the "Dev Guide" tab while any Dev Guide page is loaded. </p>
\ No newline at end of file
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/market/billing/billing_about.html b/docs/html/guide/market/billing/billing_about.html
deleted file mode 100644
index d8395df..0000000
--- a/docs/html/guide/market/billing/billing_about.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh"
-content="0;url=http://developer.android.com/guide/market/billing/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should be redirected. Please <a
-href="http://developer.android.com/guide/market/billing/index.html">click
-here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/market/billing/billing_admin.jd b/docs/html/guide/market/billing/billing_admin.jd
deleted file mode 100755
index 0f869ab..0000000
--- a/docs/html/guide/market/billing/billing_admin.jd
+++ /dev/null
@@ -1,517 +0,0 @@
-page.title=Administering In-app Billing
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#billing-list-setup">Creating a Product List</a></li>
-    <li><a href="#billing-purchase-type">Choosing a Purchase Type</a></li>
-    <li><a href="#billing-testing-setup">Setting up Test Accounts</a></li>
-    <li><a href="#billing-refunds">Handling Refunds</a></li>
-    <li><a href="#billing-support">Where to Get Support</a></li>
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
-    Application</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-    Design</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-    Reference</a></li>
-  </ol>
-</div>
-</div>
-
-<p>In-app billing frees you from processing financial transactions, but you still need to perform a
-few administrative tasks, including setting up and maintaining your product list on the publisher
-site, registering test accounts, and handling refunds when necessary.</p>
-
-<p>You must have a Google Play publisher account to register test accounts. And you must have a
-Google Checkout merchant account to create a product list and issue refunds to your users. If you
-already have a publisher account on Google Play, you can use your existing account. You do not
-need to register for a new account to support in-app billing. If you do not have a publisher
-account, you can register as a Google Play developer and set up a publisher account at the
-Google Play <a href="http://play.google.com/apps/publish">publisher site</a>. If you do not have a
-Google Checkout merchant account, you can register for one at the <a
-href="http://checkout.google.com">Google Checkout site</a>.</p>
-
-<h2 id="billing-list-setup">Creating a Product List</h2>
-
-<p>The Google Play publisher site provides a product list for each of your published
-applications. You can sell an item using Google Play's in-app billing feature only if the item is
-listed on an application's product list. Each application has its own product list; you cannot sell
-items that are listed in another application's product list.</p>
-
-<p>You can access an application's product list by clicking the <strong>In-App Products</strong>
-link that appears under each of the applications that are listed for your publisher account (see
-figure 1). The <strong>In-App Products</strong> link appears only if you have a Google Checkout
-merchant account and an application's manifest includes the <code>com.android.vending.BILLING</code>
-permission.</p>
-
-<img src="{@docRoot}images/billing_product_list_entry.png" height="548" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> You can access an application's product list by clicking the
-  <strong>In-App Products</strong> link.
-</p>
-
-<p>A product list contains information about the items you are selling, such as a product id,
-product description, and price (see figure 2). The product list stores only metadata about the items
-you are selling in your application. It does not store any digital content. You are responsible for
-storing and delivering the digital content that you sell in your applications.</p>
-
-<img src="{@docRoot}images/billing_product_list.png" height="658" id="figure2" />
-<p class="img-caption">
-  <strong>Figure 2.</strong> An application's product list.
-</p>
-
-<p>You can create a product list for any published application or any draft application that's been
-uploaded and saved to the Google Play site. However, you must have a Google Checkout merchant
-account and the application's manifest must include the <code>com.android.vending.BILLING</code>
-permission. If an application's manifest does not include this permission, you will be able to edit
-existing items in the product list but you will not be able to add new items to the list. For more
-information about this permission, see
-<a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-permission">Updating Your
-Application's Manifest</a>.</p>
-
-<p>In addition, an application package can have only one product list. If you create a product
-list for an application, and you use the <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APK feature</a> to distribute
-more than one APK for that application, the product list applies to all APK versions that are
-associated with the application listing. You cannot create individual product lists for each APK if
-you are using the multiple APK feature.</p>
-
-<p>You can add items to a product list two ways: you can add items one at a time by using the In-app
-Products UI (see figure 3), or you can add a batch of items by importing the items from a
-comma-separated values (CSV) file (see figure 2). Adding items one at a time is useful if your
-application has only a few in-app items or you are adding only a few items to a
-product list for testing purposes. The CSV file method is useful if your application has a large
-number of in-app items.</p>
-
-<h3 id="billing-form-add">Adding items one at a time to a product list</h3>
-
-<p>To add an item to a product list using the In-app Products UI, follow these steps:</p>
-
-<ol>
-  <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
-  <li>In the <strong>All Google Play listings</strong> panel, under the application name, click
-  <strong>In-app Products</strong>.</li>
-  <li>On the In-app Products List page, click <strong>Add in-app product</strong>.</li>
-  <li>On the Create New In-app Product page (see figure 3), provide details about the item you are
-  selling and then click <strong>Save</strong> or <strong>Publish</strong>.</li>
-</ol>
-
-<img src="{@docRoot}images/billing_list_form.png" height="840" id="figure3" />
-<p class="img-caption">
-  <strong>Figure 3.</strong> The Create New In-app Product page lets you add items to an
-  application's product list.
-</p>
-
-<p>You must enter the following information for each item in a product list:</p>
-<ul>
-  <li><strong>In-app Product ID</strong>
-    <p>Product IDs are unique across an application's namespace. A product ID must start with a
-    lowercase letter or a number, and must be composed using only lowercase letters (a-z), numbers
-    (0-9), underlines (_), and dots (.). The product ID "android.test" is reserved, as are all
-    product IDs that start with "android.test."</p>
-    <p>In addition, you cannot modify an item's product ID after it is created, and you cannot reuse
-    a product ID.</p>
-  </li>
-  <li><strong>Purchase Type</strong>
-    <p>The purchase type can be <strong>Managed per user account</strong> or <strong>
-    Unmanaged</strong>. You can never change an item's purchase type after you set it. For more
-    information, see <a href="#billing-purchase-type">Choosing a purchase type</a> later in this
-    document.</p>
-  </li>
-  <li><strong>Publishing State</strong>
-    <p>An item's publishing state can be <strong>Published</strong> or <strong>Unpublished
-    </strong>. To be visible to a user during checkout, an item's publishing state must be set to
-    <strong>Published</strong> and the item's application must be published on Google Play.</p>
-    <p class="note"><strong>Note:</strong> This is not true for test accounts. An item is visible to
-    a test account if the application is not published and the item is published. See <a
-    href="{@docRoot}guide/market/billing/billing_testing.html#billing-testing-real">Testing In-app
-    Billing</a> for more information.</p>
-  </li>
-  <li><strong>Language</strong>
-    <p>The language setting determines which languages are used to display the item title and
-    item description during checkout. A product list inherits its default language from the
-    parent application. You can add more languages by clicking <strong>add language</strong>. You
-    can also choose to have the title and description automatically translated from the default
-    language by selecting the <strong>Fill fields with auto translation</strong> checkbox (see
-    figure 4). If you do not use the auto translation feature, you must provide the translated
-    versions of the title and description.</p>
-  </li>
-  <li><strong>Title</strong>
-    <p>The title is a short descriptor for the item. For example, "Sleeping potion." Titles must be
-    unique across an application's namespace. Every item must have a title. The title is visible to
-    users during checkout. For optimum appearance, titles should be no longer than 25 characters;
-    however, titles can be up to 55 characters in length.</p>
-  </li>
-  <li><strong>Description</strong>
-    <p>The description is a long descriptor for the item. For example, "Instantly puts creatures to
-    sleep. Does not work on angry elves." Every item must have a description. The description is
-    visible to users during checkout. Descriptions can be up to 80 characters in length.</p>
-  </li>
-  <li><strong>Price</strong>
-    <p>You must provide a default price in your home currency. You can also provide prices in other
-    currencies, but you can do this only if a currency's corresponding country is listed as a
-    target country for your application. You can specify target countries on the Edit Application
-    page in the Google Play developer console.</p>
-    <p>To specify prices in other currencies, you can manually enter the price for each
-    currency or you can click <strong>Auto Fill</strong> and let Google Play do a one-time
-    conversion from your home currency to the currencies you are targeting (see figure 4).</p>
-  </li>
-</ul>
-<img src="{@docRoot}images/billing_list_form_2.png" height="1226" id="figure4" />
-<p class="img-caption">
-  <strong>Figure 4.</strong> Specifying additional currencies and additional languages for the
-  item title and description.
-</p>
-
-<p>For more information about product IDs and product lists, see <a
-href="http://market.android.com/support/bin/answer.py?answer=1072599">Creating In-App Product
-IDs</a>. For more information about pricing, see <a
-href="http://market.android.com/support/bin/answer.py?answer=1153485">In-App Billing
-Pricing</a>.</p>
-
-<p class="note"><strong>Note</strong>: Be sure to plan your product ID namespace. You cannot reuse
-or modify product IDs after you save them.</p>
-
-<h3 id="billing-bulk-add">Adding a batch of items to a product list</h3>
-
-<p>To add a batch of items to a product list using a CSV file, you first need to create your CSV
-file. The data values that you specify in the CSV file represent the same data values you specify
-manually through the In-app Products UI (see <a href="#billing-form-add">Adding items one at a time
-to a product list</a>). The CSV file uses commas (,) and semi-colons (;) to separate data values.
-Commas are used to separate primary data values, and semi-colons are used to separate subvalues. For
-example, the syntax for the CSV file is as follows:</p>
-
-<p>"<em>product_id</em>","<em>publish_state</em>","<em>purchase_type</em>","<em>autotranslate</em>
-","<em>locale</em>; <em>title</em>; <em>description</em>","<em>autofill</em>","<em>country</em>;
-<em>price</em>"
-</p>
-
-<p>Descriptions and usage details are provided below.</p>
-
-<ul>
-  <li><em>product_id</em>
-    <p>This is equivalent to the In-app Product ID setting in the In-app Products UI. If you specify
-    a <em>product_id</em> that already exists in a product list, and you choose to overwrite
-    the product list while importing the CSV file, the data for the existing item is overwritten with
-    the values specified in the CSV file. The overwrite feature does not delete items that are on a
-    product list but not present in the CSV file.</p>
-  </li>
-  <li><em>publish_state</em>
-    <p>This is equivalent to the Publishing State setting in the In-app Products UI. Can be <code>
-    published</code> or <code>unpublished</code>.</p>
-  </li>
-  <li><em>purchase_type</em>
-    <p>This is equivalent to the Purchase Type setting in the In-app Products UI. Can be <code>
-    managed_by_android</code>, which is equivalent to <strong>Managed per user account
-    </strong> in the In-app Products UI, or <code>managed_by_publisher</code>, which is equivalent
-    to <strong>Unmanaged</strong> in the In-app Products UI.</p>
-  </li>
-  <li><em>autotranslate</em>
-    <p>This is equivalent to selecting the <strong>Fill fields with auto translation</strong>
-    checkbox in the In-app Products UI. Can be <code>true</code> or <code>false</code>.</p>
-  </li>
-  <li><em>locale</em>
-    <p>This is equivalent to the Language setting in the In-app Products UI. You must have an entry
-    for the default locale. The default locale must be the first entry in the list of
-    locales, and it must include a <em>title</em> and <em>description</em>. If you want to provide
-    translated versions of the <em>title</em> and <em>description</em> in addition to the default,
-    you must use the following syntax rules:</p>
-    <p>If <em>autotranslate</em> is <code>true</code>, you must specify the default locale,
-    default title, default description, and other locales using the following format:</p>
-    <p>"true,"<em>default_locale</em>; <em>default_locale_title</em>;
-    <em>default_locale_description</em>; <em>locale_2</em>;    <em>locale_3</em>, ..."</p>
-    <p>If <em>autotranslate</em> is <code>false</code>, you must specify the default locale,
-    default title, and default description as well as the translated titles and descriptions using
-    the following format:</p>
-    <p>"false,"<em>default_locale</em>; <em>default_locale_title</em>;
-    <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_2_title</em>;
-    <em>local_2_description</em>; <em>locale_3</em>; <em>locale_3_title</em>;
-     <em>locale_3_description</em>; ..."</p>
-    <p>See table 1 for a list of the language codes you can use with the <em>locale</em> field.</p>
-  </li>
-  <li><em>title</em>
-    <p>This is equivalent to the Title setting in the In-app Products UI. If the <em>title</em>
-    contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
-    should also be escaped with a backslash (for example, "\\">.</p>
-  </li>
-  <li><em>description</em>
-    <p>This is equivalent to the Description in the In-app Products UI. If the <em>description</em>
-    contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
-    should also be escaped with a backslash (for example, "\\">.</p>
-  </li>
-  <li><em>autofill</em>
-    <p>This is equivalent to clicking <strong>Auto Fill</strong> in the In-app Products UI. Can be
-    <code>true</code> or <code>false</code>. The syntax for specifying the <em>country</em>
-    and <em>price</em> varies depending on which <em>autofill</em> setting you use.</p>
-    <p>If <em>autofill</em> is set to <code>true</code>, you need to specify only the default
-    price in your home currency and you must use this syntax:</p>
-    <p>"true","<em>default_price_in_home_currency</em>"
-    <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em>
-    and a <em>price</em> for each currency and you must use the following syntax:</p>
-    <p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>;
-    <em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p>
-  </li>
-  <li><em>country</em>
-    <p>The country for which you are specifying a price. You can only list countries that your
-    application is targeting. The country codes are two-letter uppercase
-    ISO country codes (such as "US") as defined by
-    <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-2</a>.</p>
-  </li>
-  <li><em>price</em>
-    <p>This is equivalent to the Price in the In-app Products UI. The price must be specified in
-    micro-units. To convert a currency value to micro-units, you multiply the real value by 1,000,000.
-    For example, if you want to sell an in-app item for $1.99 you specify 1990000 in the
-    <em>price</em> field.</p>
-  </li>
-</ul>
-
-<p class="table-caption" id="language-table"><strong>Table 1.</strong> Language codes you can use
-with the <em>locale</em> field.</p>
-
-<table>
-
-<tr>
-<th>Language</th>
-<th>Code</th>
-<th>Language</th>
-<th>Code</th>
-</tr>
-<tr>
-<td>Chinese</td>
-<td>zh_TW</td>
-<td>Italian</td>
-<td>it_IT</td>
-</tr>
-<tr>
-<td>Czech</td>
-<td>cs_CZ</td>
-<td>Japanese</td>
-<td>ja_JP</td>
-</tr>
-<tr>
-<td>Danish</td>
-<td>da_DK</td>
-<td>Korean</td>
-<td>ko_KR</td>
-</tr>
-<tr>
-<td>Dutch</td>
-<td>nl_NL</td>
-<td>Norwegian</td>
-<td>no_NO</td>
-</tr>
-<tr>
-<td>English</td>
-<td>en_US</td>
-<td>Polish</td>
-<td>pl_PL</td>
-</tr>
-<tr>
-<td>French</td>
-<td>fr_FR</td>
-<td>Portuguese</td>
-<td>pt_PT</td>
-</tr>
-<tr>
-<td>Finnish</td>
-<td>fi_FI</td>
-<td>Russian</td>
-<td>ru_RU</td>
-</tr>
-<tr>
-<td>German</td>
-<td>de_DE</td>
-<td>Spanish</td>
-<td>es_ES</td>
-</tr>
-<tr>
-<td>Hebrew</td>
-<td>iw_IL</td>
-<td>Swedish</td>
-<td>sv_SE</td>
-</tr>
-<tr>
-<td>Hindi</td>
-<td>hi_IN</td>
-<td>--</td>
-<td>--</td>
-</tr>
-</table>
-
-<p>To import the items that are specified in your CSV file, do the following:</p>
-
-<ol>
-  <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
-  <li>In the <strong>All Google Play listings</strong> panel, under the application name, click
-  <strong>In-app Products</strong>.</li>
-  <li>On the In-app Products List page, click <strong>Choose File</strong> and select your CSV
-file.
-    <p>The CSV file must be on your local computer or on a local disk that is connected to your
-    computer.</p>
-  </li>
-  <li>Select the <strong>Overwrite</strong> checkbox if you want to overwrite existing items in
-  your product list.
-    <p>This option overwrites values of existing items only if the value of the <em>product_id</em>
-    in the CSV file matches the In-app Product ID for an existing item in the product list.
-    Overwriting does not delete items that are on a product list but not present in the CSV
-    file.</p>
-  </li>
-  <li>On the In-app Products List page, click <strong>Import from CSV</strong>.</li>
-</ol>
-
-<p>You can also export an existing product list to a CSV file by clicking <strong>Export to CSV
-</strong> on the In-app Product List page. This is useful if you have manually added items to
-a product list and you want to start managing the product list through a CSV file.</p>
-
-<h3 id="billing-purchase-type">Choosing a Purchase Type</h3>
-
-<p>An item's purchase type controls how Google Play manages the purchase of the item. There are
-two purchase types: "managed per user account" and "unmanaged."</p>
-
-<p>Items that are managed per user account can be purchased only once per user account. When an item
-is managed per user account, Google Play permanently stores the transaction information for each
-item on a per-user basis. This enables you to query Google Play with the
-<code>RESTORE_TRANSACTIONS</code> request and restore the state of the items a specific user has
-purchased.</p>
-
-<p>If a user attempts to purchase a managed item that has already been purchased, Google Play
-displays an "Item already purchased" error. This occurs during checkout, when Google Play
-displays the price and description information on the checkout page. When the user dismisses the
-error message, the checkout page disappears and the user returns to your user interface. As a best
-practice, your application should prevent the user from seeing this error. The sample application
-demonstrates how you can do this by keeping track of items that are managed and already purchased
-and not allowing users to select those items from the list. Your application should do something
-similar&mdash;either graying out the item or hiding it so that it cannot be selected.</p>
-
-<p>The "manage by user account" purchase type is useful if you are selling items such as game levels
-or application features. These items are not transient and usually need to be restored whenever a
-user reinstalls your application, wipes the data on their device, or installs your application on a
-new device.</p>
-
-<p>Items that are unmanaged do not have their transaction information stored on Google Play,
-which means you cannot query Google Play to retrieve transaction information for items whose
-purchase type is listed as unmanaged. You are responsible for managing the transaction information
-of unmanaged items. Also, unmanaged items can be purchased multiple times as far as Google Play
-is concerned, so it's also up to you to control how many times an unmanaged item can be
-purchased.</p>
-
-<p>The "unmanaged" purchase type is useful if you are selling consumable items, such as fuel or
-magic spells. These items are consumed within your application and are usually purchased multiple
-times.</p>
-
-<h2 id="billing-refunds">Handling Refunds</h2>
-
-<p>In-app billing does not allow users to send a refund request to Google Play. Refunds for
-in-app purchases must be directed to you (the application developer). You can then process the
-refund through your Google Checkout merchant account. When you do this, Google Play receives a
-refund notification from Google Checkout, and Google Play sends a refund message to your
-application. For more information, see <a
-href="{@docRoot}guide/market/billing/billing_overview.html#billing-action-notify">Handling
-IN_APP_NOTIFY messages</a> and <a
-href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
-Pricing</a>.</p>
-
-<p class="caution"><strong>Important:</strong> You cannot use the Google Checkout API to issue
-refunds or cancel in-app billing transactions. You must do this manually through your Google
-Checkout merchant account. However, you can use the Google Checkout API to retrieve order
-information.</p>
-
-<h2 id="billing-testing-setup">Setting Up Test Accounts</h2>
-
-<p>The Google Play publisher site lets you set up one or more test accounts. A test account is a
-regular Google account that you register on the publisher site as a test account. Test accounts are
-authorized to make in-app purchases from applications that you have uploaded to the Google Play
-site but have not yet published.</p>
-
-<p>You can use any Google account as a test account. Test accounts are useful if you want to let
-multiple people test in-app billing on applications without giving them access to your publisher
-account's sign-in credentials. If you want to own and control the test accounts, you can create the
-accounts yourself and distribute the credentials to your developers or testers.</p>
-
-<p>Test accounts have three limitations:</p>
-
-<ul>
-  <li>Test account users can make purchase requests only within applications that are already
-  uploaded to your publisher account (although the application doesn't need to be published).</li>
-  <li>Test accounts can only be used to purchase items that are listed (and published) in an
-  application's product list.</li>
-  <li>Test account users do not have access to your publisher account and cannot upload applications
-  to your publisher account.</li>
-</ul>
-
-<p>To add test accounts to your publisher account, follow these steps:</p>
-
-<ol>
-  <li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
-  <li>On the upper left part of the page, under your name, click <strong>Edit profile</strong>.</li>
-  <li>On the Edit Profile page, scroll down to the Licensing &amp; In-app Billing panel (see figure
-  5).</li>
-  <li>In Test Accounts, add the email addresses for the test accounts you want to register,
-  separating each account with a comma.</li>
-  <li>Click <strong>Save</strong> to save your profile changes.</li>
-</ol>
-
-<img src="{@docRoot}images/billing_public_key.png" height="510" id="figure5" />
-<p class="img-caption">
-  <strong>Figure 5.</strong> The Licensing and In-app Billing panel of your account's Edit Profile
-  page lets you register test accounts.
-</p>
-
-<h2 id="billing-support">Where to Get Support</h2>
-
-<p>If you have questions or encounter problems while implementing in-app billing, contact the
-support resources listed in the following table (see table 2). By directing your queries to the
-correct forum, you can get the support you need more quickly.</p>
-
-<p class="table-caption" id="support-table"><strong>Table 2.</strong> Developer support resources
-for Google Play in-app billing.</p>
-
-<table>
-
-<tr>
-<th>Support Type</th>
-<th>Resource</th>
-<th>Range of Topics</th>
-</tr>
-<tr>
-<td rowspan="2">Development and testing issues</td>
-<td>Google Groups: <a
-href="http://groups.google.com/group/android-developers">android-developers</a> </td>
-<td rowspan="2">In-app billing integration questions, user experience ideas, handling of responses,
-obfuscating code, IPC, test environment setup.</td>
-</tr>
-<tr>
-<td>Stack Overflow: <a
-href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/
-android</a></td>
-</tr>
-<tr>
-<td>Billing issue tracker</td>
-<td><a href="http://code.google.com/p/marketbilling/issues/">Billing
-project issue tracker</a></td>
-<td>Bug and issue reports related specifically to in-app billing sample code.</td>
-</tr>
-</table>
-
-<p>For general information about how to post to the groups listed above, see <a
-href="{@docRoot}resources/community-groups.html">Developer Forums</a> document in the Resources
-tab.</p>
-
-
-
diff --git a/docs/html/guide/market/billing/billing_best_practices.jd b/docs/html/guide/market/billing/billing_best_practices.jd
deleted file mode 100755
index e100ce5..0000000
--- a/docs/html/guide/market/billing/billing_best_practices.jd
+++ /dev/null
@@ -1,111 +0,0 @@
-page.title=Security and Design
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#billing-security">Security Best Practices</a></li>
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
-    Application</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-    Reference</a></li>
-  </ol>
-</div>
-</div>
-
-<p>As you design your in-app billing implementation, be sure to follow the security and design
-guidelines that are discussed in this document. These guidelines are recommended best practices for
-anyone who is using Google Play's in-app billing service.</p>
-
-<h2>Security Best Practices</h2>
-
-<h4>Perform signature verification tasks on a server</h4>
-<p>If practical, you should perform signature verification on a remote server and not on a device.
-Implementing the verification process on a server makes it difficult for attackers to break the
-verification process by reverse engineering your .apk file. If you do offload security processing to
-a remote server, be sure that the device-server handshake is secure.</p>
-
-<h4>Protect your unlocked content</h4>
-<p>To prevent malicious users from redistributing your unlocked content, do not bundle it in your
-.apk file. Instead, do one of the following:</p>
-  <ul>
-    <li>Use a real-time service to deliver your content, such as a content feed. Delivering content
-    through a real-time service allows you to keep your content fresh.</li>
-    <li>Use a remote server to deliver your content.</li>
-  </ul>
-<p>When you deliver content from a remote server or a real-time service, you can store the unlocked
-content in device memory or store it on the device's SD card. If you store content on an SD card, be
-sure to encrypt the content and use a device-specific encryption key.</p>
-
-<h4>Obfuscate your code</h4>
-<p>You should obfuscate your in-app billing code so it is difficult for an attacker to reverse
-engineer security protocols and other application components. At a minimum, we recommend that you
-run an  obfuscation tool like <a
-href="http://developer.android.com/guide/developing/tools/proguard.html">Proguard</a> on your
-code.</p>
-<p>In addition to running an obfuscation program, we recommend that you use the following techniques
-to obfuscate your in-app billing code.</p>
-<ul>
-  <li>Inline methods into other methods.</li>
-  <li>Construct strings on the fly instead of defining them as constants.</li>
-  <li>Use Java reflection to call methods.</li>
-</ul>
-<p>Using these techniques can help reduce the attack surface of your application and help minimize
-attacks that can compromise your in-app billing implementation.</p>
-<div class="note">
-  <p><strong>Note:</strong> If you use Proguard to obfuscate your code, you must add the following
-  line to your Proguard configuration file:</p>
-  <p><code>-keep class com.android.vending.billing.**</code></p>
-</div>
-  
-<h4>Modify all sample application code</h4>
-<p>The in-app billing sample application is publicly distributed and can be downloaded by anyone,
-which means it is relatively easy for an attacker to reverse engineer your application if you use
-the sample code exactly as it is published. The sample application is intended to be used only as an
-example. If you use any part of the sample application, you must modify it before you publish it or
-release it as part of a production application.</p>
-<p>In particular, attackers look for known entry points and exit points in an application, so it is
-important that you modify these parts of your code that are identical to the sample application.</p>
-
-<h4>Use secure random nonces</h4>
-<p>Nonces must not be predictable or reused. Always use a cryptographically secure random number
-generator (like {@link java.security.SecureRandom}) when you generate nonces. This can help reduce
-replay attacks.</p>
-<p>Also, if you are performing nonce verification on a server, make sure that you generate the
-nonces on the server.</p>
-
-<h4>Take action against trademark and copyright infringement</h4>
-<p>If you see your content being redistributed on Google Play, act quickly and decisively. File a
-<a href="http://market.android.com/support/bin/answer.py?hl=en&amp;answer=141511">trademark notice
-of infringement</a> or a <a href="http://www.google.com/android_dmca.html">copyright notice of
-infringement</a>.</p>
-
-<h4>Implement a revocability scheme for unlocked content</h4>
-<p>If you are using a remote server to deliver or manage content, have your application verify the
-purchase state of the unlocked content whenever a user accesses the content. This allows you to
-revoke use when necessary and minimize piracy.</p>
-
-<h4>Protect your Google Play public key</h4>
-<p>To keep your public key safe from malicious users and hackers, do not embed it in any code as a
-literal string. Instead, construct the string at runtime from pieces or use bit manipulation (for
-example, XOR with some other string) to hide the actual key. The key itself is not secret
-information, but you do not want to make it easy for a hacker or malicious user to replace the
-public key with another key.</p>
-
diff --git a/docs/html/guide/market/billing/billing_integrate.jd b/docs/html/guide/market/billing/billing_integrate.jd
deleted file mode 100755
index 4b3650f..0000000
--- a/docs/html/guide/market/billing/billing_integrate.jd
+++ /dev/null
@@ -1,1092 +0,0 @@
-page.title=Implementing In-app Billing
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#billing-download">Downloading the Sample Application</a></li>
-    <li><a href="#billing-add-aidl">Adding the AIDL file to your project</a></li>
-    <li><a href="#billing-permission">Updating Your Application's Manifest</a></li>
-    <li><a href="#billing-service">Creating a Service</a></li>
-    <li><a href="#billing-broadcast-receiver">Creating a BroadcastReceiver</a></li>
-    <li><a href="#billing-signatures">Creating a security processing component</a></li>
-    <li><a href="#billing-implement">Modifying Your Application Code</a></li>
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="#billing-download">Sample Application</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-    Design</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-    Reference</a></li>
-  </ol>
-</div>
-</div>
-
-<p>In-app Billing on Google Play provides a straightforward, simple interface for sending in-app
-billing requests and managing in-app billing transactions using Google Play. This document helps
-you implement in-app billing by stepping through the primary implementation tasks, using the in-app
-billing sample application as an example.</p>
-
-<p>Before you implement in-app billing in your own application, be sure that you read <a
-href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app Billing</a> and <a
-href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>. These
-documents provide background information that will make it easier for you to implement in-app
-billing.</p>
-
-<p>To implement in-app billing in your application, you need to do the following:</p>
-<ol>
-  <li><a href="#billing-download">Download the in-app billing sample application</a>.</li>
-  <li><a href="#billing-add-aidl">Add the IMarketBillingService.aidl file</a> to your project.</li>
-  <li><a href="#billing-permission">Update your AndroidManifest.xml file</a>.</li>
-  <li><a href="#billing-service">Create a Service</a> and bind it to the
-  <code>MarketBillingService</code> so your application can send billing requests and receive
-  billing responses from Google Play.</li>
-  <li><a href="#billing-broadcast-receiver">Create a BroadcastReceiver</a> to handle broadcast
-  intents from Google Play.</li>
-  <li><a href="#billing-signatures">Create a security processing component</a> to verify the
-  integrity of the transaction messages that are sent by Google Play.</li>
-  <li><a href="#billing-implement">Modify your application code</a> to support in-app billing.</li>
-</ol>
-
-<h2 id="billing-download">Downloading the Sample Application</h2>
-
-<p>The in-app billing sample application shows you how to perform several tasks that are common to
-all in-app billing implementations, including:</p>
-
-<ul>
-  <li>Sending in-app billing requests to Google Play.</li>
-  <li>Handling synchronous responses from Google Play.</li>
-  <li>Handling broadcast intents (asynchronous responses) from Google Play.</li>
-  <li>Using in-app billing security mechanisms to verify the integrity of billing responses.</li>
-  <li>Creating a user interface that lets users select items for purchase.</li>
-</ul>
-
-<p>The sample application includes an application file (<code>Dungeons.java</code>), the AIDL file
-for the <code>MarketBillingService</code> (<code>IMarketBillingService.aidl</code>), and several
-classes that demonstrate in-app billing messaging. It also includes a class that demonstrates basic
-security tasks, such as signature verification.</p>
-
-<p>Table 1 lists the source files that are included with the sample application.</p>
-<p class="table-caption" id="source-files-table"><strong>Table 1.</strong> In-app billing sample
-application source files.</p>
-
-<table>
-<tr>
-<th>File</th>
-<th>Description</th>
-</tr>
-
-<tr>
-<td>IMarketBillingService.aidl</td>
-<td>Android Interface Definition Library (AIDL) file that defines the IPC interface to Google
-Play's in-app billing service (<code>MarketBillingService</code>).</td>
-</tr>
-
-<tr>
-<td>Dungeons.java</td>
-<td>Sample application file that provides a UI for making purchases and displaying purchase
-history.</td>
-</tr>
-
-<tr>
-<td>PurchaseDatabase.java</td>
-<td>A local database for storing purchase information.</td>
-</tr>
-
-<tr>
-  <td>BillingReceiver.java</td>
-  <td>A {@link android.content.BroadcastReceiver} that receives asynchronous response messages
-  (broadcast intents) from Google Play. Forwards all messages to the
-  <code>BillingService</code>.</td>
-</tr>
-<tr>
-  <td>BillingService.java</td>
-  <td>A {@link android.app.Service} that sends messages to Google Play on behalf of the
-  application by connecting (binding) to the <code>MarketBillingService</code>.</td>
-</tr>
-
-<tr>
-  <td>ResponseHandler.java</td>
-  <td>A {@link android.os.Handler} that contains methods for updating the purchases database and the
-  UI.</td>
-</tr>
-
-<tr>
-  <td>PurchaseObserver.java</td>
-  <td>An abstract class for observing changes related to purchases.</td>
-</tr>
-
-<tr>
-<td>Security.java</td>
-<td>Provides various security-related methods.</td>
-</tr>
-
-<tr>
-<td>Consts.java</td>
-<td>Defines various Google Play constants and sample application constants. All constants that
-are defined by Google Play must be defined the same way in your application.</td>
-</tr>
-
-<tr>
-<td>Base64.java and Base64DecoderException.java</td>
-<td>Provides conversion services from binary to Base64 encoding. The <code>Security</code> class
-relies on these utility classes.</td>
-</tr>
-
-</table>
-
-<p>The in-app billing sample application is available as a downloadable component of the Android
-SDK. To download the sample application component, launch the Android SDK Manager and then
-select the <strong>Google Market Billing package</strong> component (see figure 1), and click <strong>Install
-Selected</strong> to begin the download.</p>
-
-
-<img src="{@docRoot}images/billing_package.png" height="325" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> The Google Market Billing package contains the sample application and
-  the AIDL file.
-</p>
-
-<p>When the download is complete, the Android SDK Manager saves the component into the
-following directory:</p>
-
-<p><code>&lt;sdk&gt;/extras/google/market_billing/</code></p>
-
-<p>If you want to see an end-to-end demonstration of in-app billing before you integrate in-app
-billing into your own application, you can build and run the sample application. Building and
-running the sample application involves three tasks:</p>
-
-<ul>
-  <li>Configuring and building the sample application.</li>
-  <li>Uploading the sample application to Google Play.</li>
-  <li>Setting up test accounts and running the sample application.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Building and running the sample application is necessary only
-if you want to see a demonstration of in-app billing. If you do not want to run the sample
-application, you can skip to the next section, <a href="#billing-add-aidl">Adding the AIDL file to
-your project</a>.</p>
-
-<h3>Configuring and building the sample application</h3>
-
-<p>Before you can run the sample application, you need to configure it and build it by doing the
-following:</p>
-
-<ol>
-  <li><strong>Add your Google Play public key to the sample application code.</strong>
-    <p>This enables the application to verify the signature of the transaction information that is
-    returned from Google Play. To add your public key to the sample application code, do the
-    following:</p>
-    <ol>
-      <li>Log in to your Google Play <a href="http://play.google.com/apps/publish">publisher
-      account</a>.</li>
-      <li>On the upper left part of the page, under your name, click <strong>Edit
-      Profile</strong>.</li>
-      <li>On the Edit Profile page, scroll down to the <strong>Licensing &amp; In-app
-      Billing</strong> panel.</li>
-      <li>Copy your public key.</li>
-      <li>Open <code>src/com/example/dungeons/Security.java</code> in the editor of your choice.
-        <p>You can find this file in the sample application's project folder.</p>
-      </li>
-      <li>Add your public key to the following line of code:
-        <p><code>String base64EncodedPublicKey = "your public key here";</code></p>
-      </li>
-      <li>Save the file.</li>
-    </ol>
-  </li>
-  <li><strong>Change the package name of the sample application.</strong>
-    <p>The current package name is <code>com.example.dungeons</code>. Google Play does not let
-    you upload applications with package names that contain <code>com.example</code>, so you must
-    change the package name to something else.</p>
-  </li>
-  <li><strong>Build the sample application in release mode and sign it.</strong>
-    <p>To learn how to build and sign applications, see <a
-    href="{@docRoot}guide/developing/building/index.html">Building and Running</a>.</p>
-  </li>
-</ol>
-
-<h3>Uploading the sample application</h3>
-
-<p>After you build a release version of the sample application and sign it, you need to upload it as
-a draft to the Google Play publisher site. You also need to create a product list for the in-app
-items that are available for purchase in the sample application. The following instructions show you
-how to do this.</p>
-<ol>
-  <li><strong>Upload the release version of the sample application to Google Play.</strong>
-    <p>Do not publish the sample application; leave it as an unpublished draft application. The
-    sample application is for demonstration purposes only and should not be made publicly available
-    on Google Play. To learn how to upload an application to Google Play, see <a
-    href="http://market.android.com/support/bin/answer.py?answer=113469">Uploading
-    applications</a>.</p>
-  </li>
-  <li><strong>Create a product list for the sample application.</strong>
-    <p>The sample application lets you purchase two items: a two-handed sword
-    (<code>sword_001</code>) and a potion (<code>potion_001</code>). We recommend that you set up
-    your product list so that <code>sword_001</code> has a purchase type of "Managed per user
-    account" and <code>potion_001</code> has a purchase type of "Unmanaged" so you can see how these
-    two purchase types behave. To learn how to set up a product list, see <a
-    href="{@docRoot}guide/market/billing/billing_admin.html#billing-list-setup">Creating a Product
-    List</a>.</p>
-    <p class="note"><strong>Note:</strong> You must publish the items in your product
-    list (<code>sword_001</code> and <code>potion_001</code>) even though you are not publishing the
-    sample application. Also, you must have a Google Checkout Merchant account to add items to the
-    sample application's product list.</p>
-  </li>
-</ol>
-
-<h3>Running the sample application</h3>
-
-<p>You cannot run the sample application in the emulator. You must install the sample application
-onto a device to run it. To run the sample application, do the following:</p>
-
-<ol>
-  <li><strong>Make sure you have at least one test account registered under your Google Play
-  publisher account.</strong>
-    <p>You cannot purchase items from yourself (Google Checkout prohibits this), so you need to
-    create at least one test account that you can use to purchase items in the sample application.
-    To learn how to set up a test account, see <a
-    href="{@docRoot}guide/market/billing/billing_testing.html#billing-testing-setup">Setting up Test
-    Accounts</a>.</p>
-  </li>
-  <li><strong>Verify that your device is running a supported version of the Google Play
-  application or the MyApps application.</strong>
-    <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
-    the MyApps application. If your device is running any other version of Android, in-app billing
-    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
-    version of the Google Play application, see <a
-    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
-    Play</a>.</p>
-  </li>
-  <li><strong>Install the application onto your device.</strong>
-    <p>Even though you uploaded the application to Google Play, the application is not published,
-    so you cannot download it from Google Play to a device. Instead, you must install the
-    application onto your device. To learn how to install an application onto a device, see <a
-    href="{@docRoot}guide/developing/building/building-cmdline.html#RunningOnDevice">Running on a
-    device</a>.</p>
- </li>
- <li><strong>Make one of your test accounts the primary account on your device.</strong>
-    <p>The primary account on your device must be one of the <a
-    href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">test accounts</a>
-    that you registered on the Google Play publisher site. If the primary account on your device is not a
-    test account, you must do a factory reset of the device and then sign in with one of your test
-    accounts. To perform a factory reset, do the following:</p>
-    <ol>
-      <li>Open Settings on your device.</li>
-      <li>Touch <strong>Privacy</strong>.</li>
-      <li>Touch <strong>Factory data reset</strong>.</li>
-      <li>Touch <strong>Reset phone</strong>.</li>
-      <li>After the phone resets, be sure to sign in with one of your test accounts during the
-      device setup process.</li>
-    </ol>
-  </li>
-  <li><strong>Run the application and purchase the sword or the potion.</strong>
-    <p>When you use a test account to purchase items, the test account is billed through Google
-    Checkout and your Google Checkout Merchant account receives a payout for the purchase.
-    Therefore, you may want to refund purchases that are made with test accounts, otherwise the
-    purchases will show up as actual payouts to your merchant account.</p>
-</ol>
-
-<p class="note"><strong>Note</strong>: Debug log messages are turned off by default in the
-sample application. You can turn them on by setting the variable <code>DEBUG</code>
-to <code>true</code> in the <code>Consts.java</code> file.</p>
-
-<h2 id="billing-add-aidl">Adding the AIDL file to your project</h2>
-
-<p>The sample application contains an Android Interface Definition Language (AIDL) file,  which
-defines the interface to Google Play's in-app billing service
-(<code>MarketBillingService</code>). When you add this file to your project, the Android build
-environment creates an interface file (<code>IMarketBillingService.java</code>). You can then use
-this interface to make billing requests by invoking IPC method calls.</p>
-
-<p>If you are using the ADT plug-in with Eclipse, you can just add this file to your
-<code>/src</code> directory. Eclipse will automatically generate the interface file when you build
-your project (which should happen immediately). If you are not using the ADT plug-in, you can put
-the AIDL file into your project and use the Ant tool to build your project so that the
-<code>IMarketBillingService.java</code> file gets generated.</p>
-
-<p>To add the <code>IMarketBillingService.aidl</code> file to your project, do the following:</p>
-
-<ol>
-  <li>Create the following directory in your application's <code>/src</code> directory:
-    <p><code>com/android/vending/billing/</code></p>
-  </li>
-  <li>Copy the <code>IMarketBillingService.aidl</code> file into the
-  <code>sample/src/com/android/vending/billing/</code> directory.</li>
-  <li>Build your application.</li>
-</ol>
-
-<p>You should now find a generated interface file named <code>IMarketBillingService.java</code> in
-the <code>gen</code> folder of your project.</p>
-
-<h2 id="billing-permission">Updating Your Application's Manifest</h2>
-
-<p>In-app billing relies on the Google Play application, which handles all communication between
-your application and the Google Play server. To use the Google Play application, your
-application must request the proper permission. You can do this by adding the
-<code>com.android.vending.BILLING</code> permission to your AndroidManifest.xml file. If your
-application does not declare the in-app billing permission, but attempts to send billing requests,
-Google Play will refuse the requests and respond with a <code>RESULT_DEVELOPER_ERROR</code>
-response code.</p>
-
-<p>In addition to the billing permission, you need to declare the {@link
-android.content.BroadcastReceiver} that you will use to receive asynchronous response messages
-(broadcast intents) from Google Play, and you need to declare the {@link android.app.Service}
-that you will use to bind with the <code>IMarketBillingService</code> and send messages to Google
-Play. You must also declare <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">intent filters</a> for the {@link
-android.content.BroadcastReceiver} so that the Android system knows how to handle the broadcast
-intents that are sent from the Google Play application.</p>
-
-<p>For example, here is how the in-app billing sample application declares the billing permission,
-the {@link android.content.BroadcastReceiver}, the {@link android.app.Service}, and the intent
-filters. In the sample application, <code>BillingReceiver</code> is the {@link
-android.content.BroadcastReceiver} that handles broadcast intents from the Google Play
-application and <code>BillingService</code> is the {@link android.app.Service} that sends requests
-to the Google Play application.</p>
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
-  package="com.example.dungeons"
-  android:versionCode="1"
-  android:versionName="1.0"&gt;
-
-  &lt;uses-permission android:name="com.android.vending.BILLING" /&gt;
-
-  &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
-    &lt;activity android:name=".Dungeons" android:label="@string/app_name"&gt;
-      &lt;intent-filter&gt;
-        &lt;action android:name="android.intent.action.MAIN" /&gt;
-        &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
-      &lt;/intent-filter&gt;
-    &lt;/activity&gt;
-
-    &lt;service android:name="BillingService" /&gt;
-
-    &lt;receiver android:name="BillingReceiver"&gt;
-      &lt;intent-filter&gt;
-        &lt;action android:name="com.android.vending.billing.IN_APP_NOTIFY" /&gt;
-        &lt;action android:name="com.android.vending.billing.RESPONSE_CODE" /&gt;
-        &lt;action android:name="com.android.vending.billing.PURCHASE_STATE_CHANGED" /&gt;
-      &lt;/intent-filter&gt;
-    &lt;/receiver&gt;
-
-  &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-<h2 id="billing-service">Creating a Local Service</h2>
-
-<p>Your application must have a local {@link android.app.Service} to facilitate messaging between
-your application and Google Play. At a minimum, this service must do the following:</p>
-
-<ul>
-  <li>Bind to the <code>MarketBillingService</code>.
-  <li>Send billing requests (as IPC method calls) to the Google Play application. The five types
-  of billing requests include:
-    <ul>
-      <li><code>CHECK_BILLING_SUPPORTED</code> requests</li>
-      <li><code>REQUEST_PURCHASE</code> requests</li>
-      <li><code>GET_PURCHASE_INFORMATION</code> requests</li>
-      <li><code>CONFIRM_NOTIFICATIONS</code> requests</li>
-      <li><code>RESTORE_TRANSACTIONS</code> requests</li>
-    </ul>
-  </li>
-  <li>Handle the synchronous response messages that are returned with each billing request.</li>
-</ul>
-
-<h3>Binding to the MarketBillingService</h3>
-
-<p>Binding to the <code>MarketBillingService</code> is relatively easy if you've already added the
-<code>IMarketBillingService.aidl</code> file to your project. The following code sample shows how to
-use the {@link android.content.Context#bindService bindService()} method to bind a service to the
-<code>MarketBillingService</code>. You could put this code in your service's {@link
-android.app.Activity#onCreate onCreate()} method.</p>
-
-<pre>
-try {
-  boolean bindResult = mContext.bindService(
-    new Intent("com.android.vending.billing.MarketBillingService.BIND"), this,
-    Context.BIND_AUTO_CREATE);
-  if (bindResult) {
-    Log.i(TAG, "Service bind successful.");
-  } else {
-    Log.e(TAG, "Could not bind to the MarketBillingService.");
-  }
-} catch (SecurityException e) {
-  Log.e(TAG, "Security exception: " + e);
-}
-</pre>
-
-<p>After you bind to the service, you need to create a reference to the
-<code>IMarketBillingService</code> interface so you can make billing requests via IPC method calls.
-The following code shows you how to do this using the {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method.</p>
-
-<pre>
-/**
-  * The Android system calls this when we are connected to the MarketBillingService.
-  */
-  public void onServiceConnected(ComponentName name, IBinder service) {
-    Log.i(TAG, "MarketBillingService connected.");
-    mService = IMarketBillingService.Stub.asInterface(service);
-  }
-</pre>
-
-<p>You can now use the <code>mService</code> reference to invoke the
-<code>sendBillingRequest()</code> method.</p>
-
-<p>For a complete implementation of a service that binds to the <code>MarketBillingService</code>,
-see the <code>BillingService</code> class in the sample application.</p>
-
-<h3>Sending billing requests to the MarketBillingService</h3>
-
-<p>Now that your {@link android.app.Service} has a reference to the
-<code>IMarketBillingService</code> interface, you can use that reference to send billing requests
-(via IPC method calls) to the <code>MarketBillingService</code>. The
-<code>MarketBillingService</code> IPC interface exposes a single public method
-(<code>sendBillingRequest()</code>), which takes a single {@link android.os.Bundle} parameter. The
-Bundle that you deliver with this method specifies the type of request you want to perform, using
-various key-value pairs. For instance, one key indicates the type of request you are making, another
-indicates the item being purchased, and another identifies your application. The
-<code>sendBillingRequest()</code> method immediately returns a Bundle containing an initial response
-code. However, this is not the complete purchase response; the complete response is delivered with
-an asynchronous broadcast intent. For more information about the various Bundle keys that are
-supported by the <code>MarketBillingService</code>, see <a
-href="{@docRoot}guide/market/billing/billing_reference.html#billing-interface">In-app Billing
-Service Interface</a>.</p>
-
-<p>You can use the <code>sendBillingRequest()</code> method to send five types of billing requests.
-The five request types are specified using the <code>BILLING_REQUEST</code> Bundle key. This Bundle
-key can have the following five values:</p>
-
-<ul>
-  <li><code>CHECK_BILLING_SUPPORTED</code>&mdash;verifies that the Google Play application
-  supports in-app billing.</li>
-  <li><code>REQUEST_PURCHASE</code>&mdash;sends a purchase request for an in-app item.</li>
-  <li><code>GET_PURCHASE_INFORMATION</code>&mdash;retrieves transaction information for a purchase
-  or refund.</li>
-  <li><code>CONFIRM_NOTIFICATIONS</code>&mdash;acknowledges that you received the transaction
-  information for a purchase or refund.</li>
-  <li><code>RESTORE_TRANSACTIONS</code>&mdash;retrieves a user's transaction history for <a
-  href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">managed
-  purchases</a>.</li>
-</ul>
-
-<p>To make any of these billing requests, you first need to build an initial {@link
-android.os.Bundle} that contains the three keys that are required for all requests:
-<code>BILLING_REQUEST</code>, <code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The following
-code sample shows you how to create a helper method named <code>makeRequestBundle()</code> that does
-this.</p>
-
-<pre>
-protected Bundle makeRequestBundle(String method) {
-  Bundle request = new Bundle();
-  request.putString(BILLING_REQUEST, method);
-  request.putInt(API_VERSION, 1);
-  request.putString(PACKAGE_NAME, getPackageName());
-  return request;
-</pre>
-
-<p>To use this helper method, you pass in a <code>String</code> that corresponds to one of the five
-types of billing requests. The method returns a Bundle that has the three required keys defined. The
-following sections show you how to use this helper method when you send a billing request.</p>
-
-<p class="caution"><strong>Important</strong>: You must make all in-app billing requests from your
-application's main thread.</p>
-
-<h4>Verifying that in-app billing is supported (CHECK_BILLING_SUPPPORTED)</h4>
-
-<p>The following code sample shows how to verify whether the Google Play application supports
-in-app billing. In the sample, <code>mService</code> is an instance of the
-<code>MarketBillingService</code> interface.</p>
-
-<pre>
-/**
-* Request type is CHECK_BILLING_SUPPORTED
-*/
-  Bundle request = makeRequestBundle("CHECK_BILLING_SUPPORTED");
-  Bundle response = mService.sendBillingRequest(request);
-  // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The request returns a synchronous {@link
-android.os.Bundle} response, which contains only a single key: <code>RESPONSE_CODE</code>. The
-<code>RESPONSE_CODE</code> key can have the following values:</p>
-<ul>
-  <li><code>RESULT_OK</code>&mdash;in-app billing is supported.</li>
-  <li><code>RESULT_BILLING_UNAVAILABLE</code>&mdash;in-app billing is not available because the API
-  version you specified is not recognized or the user is not eligible to make in-app purchases (for
-  example, the user resides in a country that prohibits in-app purchases).</li>
-  <li><code>RESULT_ERROR</code>&mdash;there was an error connecting with the Google Play
-  application.</li>
-  <li><code>RESULT_DEVELOPER_ERROR</code>&mdash;the application is trying to make an in-app billing
-  request but the application has not declared the <code>com.android.vending.BILLING</code>
-  permission in its manifest. Can also indicate that an application is not properly signed, or that
-  you sent a malformed request.</li>
-</ul>
-
-<p>The <code>CHECK_BILLING_SUPPORTED</code> request does not trigger any asynchronous responses
-(broadcast intents).</p>
-
-<p>We recommend that you invoke the <code>CHECK_BILLING_SUPPORTED</code> request within a
-<code>RemoteException</code> block. When your code throws a <code>RemoteException</code> it
-indicates that the remote method call failed, which means that the Google Play application is out
-of date and needs to be updated. In this case, you can provide users with an error message that
-contains a link to the <a
-href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google Play</a>
-Help topic.</p>
-
-<p>The sample application demonstrates how you can handle this error condition (see
-<code>DIALOG_CANNOT_CONNECT_ID</code> in <code>Dungeons.java</code>).</p>
-
-<h4>Making a purchase request (REQUEST_PURCHASE)</h4>
-
-<p>To make a purchase request you must do the following:</p>
-
-<ul>
-  <li>Send the <code>REQUEST_PURCHASE</code> request.</li>
-  <li>Launch the {@link android.app.PendingIntent} that is returned from the Google Play
-  application.</li>
-  <li>Handle the broadcast intents that are sent by the Google Play application.</li>
-</ul>
-
-<h5>Making the request</h5>
-
-<p>You must specify four keys in the request {@link android.os.Bundle}. The following code sample
-shows how to set these keys and make a purchase request for a single in-app item. In the sample,
-<code>mProductId</code> is the Google Play product ID of an in-app item (which is listed in the
-application's <a href="{@docRoot}guide/market/billing/billing_admin.html#billing-list-setup">product
-list</a>), and <code>mService</code> is an instance of the <code>MarketBillingService</code>
-interface.</p>
-
-<pre>
-/**
-* Request type is REQUEST_PURCHASE
-*/
-  Bundle request = makeRequestBundle("REQUEST_PURCHASE");
-  request.putString(ITEM_ID, mProductId);
-  // Note that the developer payload is optional.
-  if (mDeveloperPayload != null) {
-    request.putString(DEVELOPER_PAYLOAD, mDeveloperPayload);
-  }
-  Bundle response = mService.sendBillingRequest(request);
-  // Do something with this response.
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The <code>ITEM_ID</code> key is then added
-to the Bundle prior to invoking the <code>sendBillingRequest()</code> method.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains three keys:
-<code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and <code>REQUEST_ID</code>. The
-<code>RESPONSE_CODE</code> key provides you with the status of the request and the
-<code>REQUEST_ID</code> key provides you with a unique request identifier for the request. The
-<code>PURCHASE_INTENT</code> key provides you with a {@link android.app.PendingIntent}, which you
-can use to launch the checkout UI.</p>
-
-<h5>Using the pending intent</h5>
-
-<p>How you use the pending intent depends on which version of Android a device is running. On
-Android 1.6, you must use the pending intent to launch the checkout UI in its own separate task
-instead of your application's activity stack. On Android 2.0 and higher, you can use the pending
-intent to launch the checkout UI on your application's activity stack. The following code shows you
-how to do this. You can find this code in the <code>PurchaseObserver.java</code> file in the sample
-application.</p>
-
-<pre>
-void startBuyPageActivity(PendingIntent pendingIntent, Intent intent) {
-  if (mStartIntentSender != null) {
-    // This is on Android 2.0 and beyond.  The in-app checkout page activity
-    // will be on the activity stack of the application.
-    try {
-      // This implements the method call:
-      // mActivity.startIntentSender(pendingIntent.getIntentSender(),
-      //     intent, 0, 0, 0);
-      mStartIntentSenderArgs[0] = pendingIntent.getIntentSender();
-      mStartIntentSenderArgs[1] = intent;
-      mStartIntentSenderArgs[2] = Integer.valueOf(0);
-      mStartIntentSenderArgs[3] = Integer.valueOf(0);
-      mStartIntentSenderArgs[4] = Integer.valueOf(0);
-      mStartIntentSender.invoke(mActivity, mStartIntentSenderArgs);
-    } catch (Exception e) {
-      Log.e(TAG, "error starting activity", e);
-      }
-  } else {
-    // This is on Android 1.6. The in-app checkout page activity will be on its
-    // own separate activity stack instead of on the activity stack of
-    // the application.
-    try {
-      pendingIntent.send(mActivity, 0 /* code */, intent);
-    } catch (CanceledException e) {
-      Log.e(TAG, "error starting activity", e);
-      }
-  }
-}
-</pre>
-
-<p class="caution"><strong>Important:</strong> You must launch the pending intent from an activity
-context and not an application context. Also, you cannot use the <code>singleTop</code> <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launch mode</a> to launch the
-pending intent. If you do either of these, the Android system will not attach the pending intent to
-your application process. Instead, it will bring Google Play to the foreground, disrupting your
-application.</p>
-
-<h5>Handling broadcast intents</h5>
-
-<p>A <code>REQUEST_PURCHASE</code> request also triggers two asynchronous responses (broadcast
-intents). First, the Google Play application sends a <code>RESPONSE_CODE</code> broadcast intent,
-which provides error information about the request. If the request does not generate an
-error, the <code>RESPONSE_CODE</code> broadcast intent returns <code>RESULT_OK</code>, which
-indicates that the request was successfully sent. (To be clear, a <code>RESULT_OK</code> response
-does not indicate that the requested purchase was successful; it indicates that the request was sent
-successfully to Google Play.)</p>
-
-<p>Next, when the requested transaction changes state (for example, the purchase is successfully
-charged to a credit card or the user cancels the purchase), the Google Play application sends an
-<code>IN_APP_NOTIFY</code> broadcast intent. This message contains a notification ID, which you can
-use to retrieve the transaction details for the <code>REQUEST_PURCHASE</code> request.</p>
-
-<p class="note"><strong>Note:</strong> The Google Play application also sends
-an <code>IN_APP_NOTIFY</code> for refunds. For more information, see <a
-href="{@docRoot}guide/market/billing/billing_overview.html#billing-action-notify">Handling
-IN_APP_NOTIFY messages</a>.</p>
-
-<p>Because the purchase process is not instantaneous and can take several seconds (or more), you
-must assume that a purchase request is pending from the time you receive a <code>RESULT_OK</code>
-message until you receive an <code>IN_APP_NOTIFY</code> message for the transaction. While the
-transaction is pending, the Google Play checkout UI displays an "Authorizing purchase..."
-notification; however, this notification is dismissed after 60 seconds and you should not rely on
-this notification as your primary means of conveying transaction status to users. Instead, we
-recommend that you do the following:</p>
-
-<ul>
-  <li>Add an {@link android.app.Activity} to your application that shows users the status of pending
-and completed in-app purchases.</li>
-  <li>Use a <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">status
-bar notification</a> to keep users informed about the progress of a purchase.</li>
-</ul>
-
-<p>To use these two UI elements, you could invoke a status bar notification with a ticker-text
-message that says "Purchase pending" when your application receives a <code>RESULT_OK</code>
-message. Then, when your application receives an <code>IN_APP_NOTIFY</code> message, you could
-update the notification with a new message that says "Purchase succeeded" or "Purchase failed." When
-a user touches the expanded status bar notification, you could launch the activity that shows the
-status of pending and completed in-app purchases.</p>
-
-<p>If you use some other UI technique to inform users about the state of a pending transaction,
-be sure that your pending status UI does not block your application. For example, you should avoid
-using a hovering progress wheel to convey the status of a pending transaction because a pending
-transaction could last a long time, particularly if a device loses network connectivity and cannot
-receive transaction updates from Google Play.</p>
-
-<p class="caution"><strong>Important:</strong> If a user purchases a managed item, you must prevent
-the user from purchasing the item again while the original transaction is pending. If a user
-attempts to purchase a managed item twice, and the first transaction is still pending, Google
-Play will display an error to the user; however, Google Play will not send an error to your
-application notifying you that the second purchase request was canceled. This might cause your
-application to get stuck in a pending state while it waits for an <code>IN_APP_NOTIFY</code> message
-for the second purchase request.</p>
-
-<h4>Retrieving transaction information for a purchase or refund (GET_PURCHASE_INFORMATION)</h4>
-
-<p>You retrieve transaction information in response to an <code>IN_APP_NOTIFY</code> broadcast
-intent. The <code>IN_APP_NOTIFY</code> message contains a notification ID, which you can use to
-retrieve transaction information.</p>
-
-<p>To retrieve transaction information for a purchase or refund you must specify five keys in the
-request {@link android.os.Bundle}. The following code sample shows how to set these keys and make
-the request. In the sample, <code>mService</code> is an instance of the
-<code>MarketBillingService</code> interface.</p>
-
-<pre>
-/**
-* Request type is GET_PURCHASE_INFORMATION
-*/
-  Bundle request = makeRequestBundle("GET_PURCHASE_INFORMATION");
-  request.putLong(REQUEST_NONCE, mNonce);
-  request.putStringArray(NOTIFY_IDS, mNotifyIds);
-  Bundle response = mService.sendBillingRequest(request);
-  // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional keys are then added to the
-bundle prior to invoking the <code>sendBillingRequest()</code> method. The
-<code>REQUEST_NONCE</code> key contains a cryptographically secure nonce (number used once) that you
-must generate. The Google Play application returns this nonce with the
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent so you can verify the integrity of the
-transaction information. The <code>NOTIFY_IDS</code> key contains an array of notification IDs,
-which you received in the <code>IN_APP_NOTIFY</code> broadcast intent.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
-<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
-you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
-request identifier for the request.</p>
-
-<p>A <code>GET_PURCHASE_INFORMATION</code> request also triggers two asynchronous responses
-(broadcast intents). First, the Google Play application sends a <code>RESPONSE_CODE</code>
-broadcast intent, which provides status and error information about the request. Next, if the
-request was successful, the Google Play application sends a <code>PURCHASE_STATE_CHANGED</code>
-broadcast intent. This message contains detailed transaction information. The transaction
-information is contained in a signed JSON string (unencrypted). The message includes the signature
-so you can verify the integrity of the signed string.</p>
-
-<h4>Acknowledging transaction information (CONFIRM_NOTIFICATIONS)</h4>
-
-<p>To acknowledge that you received transaction information you send a
-<code>CONFIRM_NOTIFICATIONS</code> request. You must specify four keys in the request {@link
-android.os.Bundle}. The following code sample shows how to set these keys and make the request. In
-the sample, <code>mService</code> is an instance of the <code>MarketBillingService</code>
-interface.</p>
-
-<pre>
-/**
-* Request type is CONFIRM_NOTIFICATIONS
-*/
-  Bundle request = makeRequestBundle("CONFIRM_NOTIFICATIONS");
-  request.putStringArray(NOTIFY_IDS, mNotifyIds);
-  Bundle response = mService.sendBillingRequest(request);
-  // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional <code>NOTIFY_IDS</code> key
-is then added to the bundle prior to invoking the <code>sendBillingRequest()</code> method. The
-<code>NOTIFY_IDS</code> key contains an array of notification IDs, which you received in an
-<code>IN_APP_NOTIFY</code> broadcast intent and also used in a <code>GET_PURCHASE_INFORMATION</code>
-request.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
-<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
-you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
-request identifier for the request.</p>
-
-<p>A <code>CONFIRM_NOTIFICATIONS</code> request triggers a single asynchronous response&mdash;a
-<code>RESPONSE_CODE</code> broadcast intent. This broadcast intent provides status and error
-information about the request.</p>
-
-<p>You must send a confirmation when you receive transaction information from Google Play. If you
-don't send a confirmation message, Google Play will continue sending
-<code>IN_APP_NOTIFY</code> messages for the transactions you have not confirmed. Also,
-your application must be able to handle <code>IN_APP_NOTIFY</code> messages that contain multiple
-orders.</p>
-
-<p>In addition, as a best practice, you should not send a <code>CONFIRM_NOTIFICATIONS</code> request
-for a purchased item until you have delivered the item to the user. This way, if your application
-crashes or something else prevents your application from delivering the product, your application
-will still receive an <code>IN_APP_NOTIFY</code> broadcast intent from Google Play indicating
-that you need to deliver the product.</p>
-
-<h4>Restoring transaction information (RESTORE_TRANSACTIONS)</h4>
-
-<p>To restore a user's transaction information, you send a <code>RESTORE_TRANSACTIONS</code>
-request. You must specify four keys in the request {@link android.os.Bundle}. The following code
-sample shows how to set these keys and make the request. In the sample, <code>mService</code> is an
-instance of the <code>MarketBillingService</code> interface.</p>
-
-<pre>
-/**
-* Request type is RESTORE_TRANSACTIONS
-*/
-  Bundle request = makeRequestBundle("RESTORE_TRANSACTIONS");
-  request.putLong(REQUEST_NONCE, mNonce);
-  Bundle response = mService.sendBillingRequest(request);
-  // Do something with this response.
-}
-</pre>
-<p>The <code>makeRequestBundle()</code> method constructs an initial Bundle, which contains the
-three keys that are required for all requests: <code>BILLING_REQUEST</code>,
-<code>API_VERSION</code>, and <code>PACKAGE_NAME</code>. The additional <code>REQUEST_NONCE</code>
-key is then added to the bundle prior to invoking the <code>sendBillingRequest()</code> method. The
-<code>REQUEST_NONCE</code> key contains a cryptographically secure nonce (number used once) that you
-must generate. The Google Play application returns this nonce with the transactions information
-contained in the <code>PURCHASE_STATE_CHANGED</code> broadcast intent so you can verify the
-integrity of the transaction information.</p>
-
-<p>The request returns a synchronous {@link android.os.Bundle} response, which contains two keys:
-<code>RESPONSE_CODE</code> and <code>REQUEST_ID</code>. The <code>RESPONSE_CODE</code> key provides
-you with the status of the request and the <code>REQUEST_ID</code> key provides you with a unique
-request identifier for the request.</p>
-
-<p>A <code>RESTORE_TRANSACTIONS</code> request also triggers two asynchronous responses (broadcast
-intents). First, the Google Play application sends a <code>RESPONSE_CODE</code> broadcast intent,
-which provides status and error information about the request. Next, if the request was successful,
-the Google Play application sends a <code>PURCHASE_STATE_CHANGED</code> broadcast intent. This
-message contains the detailed transaction information. The transaction information is contained in a
-signed JSON string (unencrypted). The message includes the signature so you can verify the integrity
-of the signed string.</p>
-
-<p class="note"><strong>Note:</strong> You should use the <code>RESTORE_TRANSACTIONS</code>
-request type only when your application is installed for the first time on a device or when your
-application has been removed from a device and reinstalled.</p>
-
-<h3>Other service tasks</h3>
-
-<p>You may also want your {@link android.app.Service} to receive intent messages from your {@link
-android.content.BroadcastReceiver}. You can use these intent messages to convey the information that
-was sent asynchronously from the Google Play application to your {@link
-android.content.BroadcastReceiver}. To see an example of how you can send and receive these intent
-messages, see the <code>BillingReceiver.java</code> and <code>BillingService.java</code> files in
-the sample application. You can use these samples as a basis for your own implementation. However,
-if you use any of the code from the sample application, be sure you follow the guidelines in <a
-href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>.</p>
-
-<h2 id="billing-broadcast-receiver">Creating a BroadcastReceiver</h2>
-
-<p>The Google Play application uses broadcast intents to send asynchronous billing responses to
-your application. To receive these intent messages, you need to create a {@link
-android.content.BroadcastReceiver} that can handle the following intents:</p>
-
-<ul>
-  <li>com.android.vending.billing.RESPONSE_CODE
-  <p>This broadcast intent contains a Google Play response code, and is sent after you make an
-  in-app billing request. For more information about the response codes that are sent with this
-  response, see <a
-  href="{@docRoot}guide/market/billing/billing_reference.html#billing-codes">Google Play Response
-  Codes for In-app Billing</a>.</p>
-  </li>
-  <li>com.android.vending.billing.IN_APP_NOTIFY
-  <p>This response indicates that a purchase has changed state, which means a purchase succeeded,
-  was canceled, or was refunded. For more information about notification messages, see <a
-  href="{@docRoot}guide/market/billing/billing_reference.html#billing-intents">In-app Billing
-  Broadcast Intents</a></p>
-  </li>
-  <li>com.android.vending.billing.PURCHASE_STATE_CHANGED
-  <p>This broadcast intent contains detailed information about one or more transactions. For more
-  information about purchase state messages, see <a
-  href="{@docRoot}guide/market/billing/billing_reference.html#billing-intents">In-app Billing
-  Broadcast Intents</a></p>
-  </li>
-</ul>
-
-<p>Each of these broadcast intents provide intent extras, which your {@link
-android.content.BroadcastReceiver} must handle. The intent extras are listed in the following table
-(see table 1).</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Description of broadcast intent extras that are
-sent in response to billing requests.</p>
-
-<table>
-
-<tr>
-<th>Intent</th>
-<th>Extra</th>
-<th>Description</th>
-</tr>
-<tr>
-  <td><code>com.android.vending.billing.RESPONSE_CODE</code></td>
-  <td><code>request_id</code></td>
-  <td>A <code>long</code> representing a request ID. A request ID identifies a specific billing
-  request and is returned by Google Play at the time a request is made.</td>
-</tr>
-<tr>
-  <td><code>com.android.vending.billing.RESPONSE_CODE</code></td>
-  <td><code>response_code</code></td>
-  <td>An <code>int</code> representing the actual Google Play server response code.</td>
-</tr>
-<tr>
-  <td><code>com.android.vending.billing.IN_APP_NOTIFY</code></td>
-  <td><code>notification_id</code></td>
-  <td>A <code>String</code> representing the notification ID for a given purchase state change.
-  Google Play notifies you when there is a purchase state change and the notification includes a
-  unique notification ID. To get the details of the purchase state change, you send the notification
-  ID with the <code>GET_PURCHASE_INFORMATION</code> request.</td>
-</tr>
-<tr>
-  <td><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code></td>
-  <td><code>inapp_signed_data</code></td>
-  <td>A <code>String</code> representing the signed JSON string. The JSON string contains
-  information about the billing transaction, such as order number, amount, and the item that was
-  purchased or refunded.</td>
-</tr>
-<tr>
-  <td><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code></td>
-  <td><code>inapp_signature</code></td>
-  <td>A <code>String</code> representing the signature of the JSON string.</td>
-</tr>
-</table>
-
-<p>The following code sample shows how to handle these broadcast intents and intent extras within a
-{@link android.content.BroadcastReceiver}. The BroadcastReceiver in this case is named
-<code>BillingReceiver</code>, just as it is in the sample application.</p>
-
-<pre>
-public class BillingReceiver extends BroadcastReceiver {
-
-  private static final String TAG = "BillingReceiver";
-
-  // Intent actions that we receive in the BillingReceiver from Google Play.
-  // These are defined by Google Play and cannot be changed.
-  // The sample application defines these in the Consts.java file.
-  public static final String ACTION_NOTIFY = "com.android.vending.billing.IN_APP_NOTIFY";
-  public static final String ACTION_RESPONSE_CODE = "com.android.vending.billing.RESPONSE_CODE";
-  public static final String ACTION_PURCHASE_STATE_CHANGED =
-    "com.android.vending.billing.PURCHASE_STATE_CHANGED";
-
-  // The intent extras that are passed in an intent from Google Play.
-  // These are defined by Google Play and cannot be changed.
-  // The sample application defines these in the Consts.java file.
-  public static final String NOTIFICATION_ID = "notification_id";
-  public static final String INAPP_SIGNED_DATA = "inapp_signed_data";
-  public static final String INAPP_SIGNATURE = "inapp_signature";
-  public static final String INAPP_REQUEST_ID = "request_id";
-  public static final String INAPP_RESPONSE_CODE = "response_code";
-
-
-  &#64;Override
-  public void onReceive(Context context, Intent intent) {
-    String action = intent.getAction();
-    if (ACTION_PURCHASE_STATE_CHANGED.equals(action)) {
-      String signedData = intent.getStringExtra(INAPP_SIGNED_DATA);
-      String signature = intent.getStringExtra(INAPP_SIGNATURE);
-      // Do something with the signedData and the signature.
-    } else if (ACTION_NOTIFY.equals(action)) {
-      String notifyId = intent.getStringExtra(NOTIFICATION_ID);
-      // Do something with the notifyId.
-    } else if (ACTION_RESPONSE_CODE.equals(action)) {
-      long requestId = intent.getLongExtra(INAPP_REQUEST_ID, -1);
-      int responseCodeIndex = intent.getIntExtra(INAPP_RESPONSE_CODE,
-        ResponseCode.RESULT_ERROR.ordinal());
-      // Do something with the requestId and the responseCodeIndex.
-    } else {
-      Log.w(TAG, "unexpected action: " + action);
-    }
-  }
-  // Perform other processing here, such as forwarding intent messages to your local service.
-}
-</pre>
-
-<p>In addition to receiving broadcast intents from the Google Play application, your {@link
-android.content.BroadcastReceiver} must handle the information it received in the broadcast intents.
-Usually, your {@link android.content.BroadcastReceiver} does this by sending the information to a
-local service (discussed in the next section). The <code>BillingReceiver.java</code> file in the
-sample application shows you how to do this. You can use this sample as a basis for your own {@link
-android.content.BroadcastReceiver}. However, if you use any of the code from the sample application,
-be sure you follow the guidelines that are discussed in <a
-href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design </a>.</p>
-
-<h2 id="billing-signatures">Verifying Signatures and Nonces</h2>
-
-<p>Google Play's in-app billing service uses two mechanisms to help verify the integrity of the
-transaction information you receive from Google Play: nonces and signatures. A nonce (number used
-once) is a cryptographically secure number that your application generates and sends with every
-<code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code> request. The nonce is
-returned with the <code>PURCHASE_STATE_CHANGED</code> broadcast intent, enabling you to verify that
-any given <code>PURCHASE_STATE_CHANGED</code> response corresponds to an actual request that you
-made. Every <code>PURCHASE_STATE_CHANGED</code> broadcast intent also includes a signed JSON string
-and a signature, which you can use to verify the integrity of the response.</p>
-
-<p>Your application must provide a way to generate, manage, and verify nonces. The following sample
-code shows some simple methods you can use to do this.</p>
-
-<pre>
-  private static final SecureRandom RANDOM = new SecureRandom();
-  private static HashSet&lt;Long&gt; sKnownNonces = new HashSet&lt;Long&gt;();
-
-  public static long generateNonce() {
-    long nonce = RANDOM.nextLong();
-    sKnownNonces.add(nonce);
-    return nonce;
-  }
-
-  public static void removeNonce(long nonce) {
-    sKnownNonces.remove(nonce);
-  }
-
-  public static boolean isNonceKnown(long nonce) {
-    return sKnownNonces.contains(nonce);
-  }
-</pre>
-
-<p>Your application must also provide a way to verify the signatures that accompany every
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent. The <code>Security.java</code> file in the
-sample application shows you how to do this. If you use this file as a basis for your own security
-implementation, be sure to follow the guidelines in <a
-href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a> and
-obfuscate your code.</p>
-
-<p>You will need to use your Google Play public key to perform the signature verification. The
-following procedure shows you how to retrieve Base64-encoded public key from the Google Play
-publisher site.</p>
-
-<ol>
-  <li>Log in to your <a href="http://play.google.com/apps/publish">publisher account</a>.</li>
-  <li>On the upper left part of the page, under your name, click <strong>Edit profile</strong>.</li>
-  <li>On the Edit Profile page, scroll down to the Licensing &amp; In-app Billing panel (see figure
-  2).</li>
-  <li>Copy your public key.</li>
-</ol>
-
-<p class="caution"><strong>Important</strong>: To keep your public key safe from malicious users and
-hackers, do not embed your public key as an entire literal string. Instead, construct the string at
-runtime from pieces or use bit manipulation (for example, XOR with some other string) to hide the
-actual key. The key itself is not secret information, but you do not want to make it easy for a
-hacker or malicious user to replace the public key with another key.</p>
-
-<img src="{@docRoot}images/billing_public_key.png" height="510" id="figure2" />
-<p class="img-caption">
-  <strong>Figure 2.</strong> The Licensing and In-app Billing panel of your account's Edit Profile
-  page lets you see your public key.
-</p>
-
-<h2 id="billing-implement">Modifying Your Application Code</h2>
-
-<p>After you finish adding in-app billing components to your project, you are ready to modify your
-application's code. For a typical implementation, like the one that is demonstrated in the sample
-application, this means you need to write code to do the following: </p>
-
-<ul>
-  <li>Create a storage mechanism for storing users' purchase information.</li>
-  <li>Create a user interface that lets users select items for purchase.</li>
-</ul>
-
-<p>The sample code in <code>Dungeons.java</code> shows you how to do both of these tasks.</p>
-
-<h3>Creating a storage mechanism for storing purchase information</h3>
-
-<p>You must set up a database or some other mechanism for storing users' purchase information. The
-sample application provides an example database (PurchaseDatabase.java); however, the example
-database has been simplified for clarity and does not exhibit the security best practices that we
-recommend. If you have a remote server, we recommend that you store purchase information on your
-server instead of in a local database on a device. For more information about security best
-practices, see <a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-Design</a>.</p>
-
-<p class="note"><strong>Note</strong>: If you store any purchase information on a device, be sure to
-encrypt the data and use a device-specific encryption key. Also, if the purchase type for any of
-your items is "unmanaged," we recommend that you back up the purchase information for these items to
-a remote server or use Android's <a href="{@docRoot}guide/topics/data/backup.html">data
-backup</a> framework to back up the purchase information. Backing up purchase information for
-unmanaged items is important because unmanaged items cannot be restored by using the
-<code>RESTORE_TRANSACTIONS</code> request type.</p>
-
-<h3>Creating a user interface for selecting items</h3>
-
-<p>You must provide users with a means for selecting items that they want to purchase. Google
-Play provides the checkout user interface (which is where the user provides a form of payment and
-approves the purchase), but your application must provide a control (widget) that invokes the
-<code>sendBillingRequest()</code> method when a user selects an item for purchase.</p>
-
-<p>You can render the control and trigger the <code>sendBillingRequest()</code> method any way you
-want. The sample application uses a spinner widget and a button to present items to a user and
-trigger a billing request (see <code>Dungeons.java</code>). The user interface also shows a list of
-recently purchased items.</p>
-
diff --git a/docs/html/guide/market/billing/billing_overview.jd b/docs/html/guide/market/billing/billing_overview.jd
deleted file mode 100755
index b593811..0000000
--- a/docs/html/guide/market/billing/billing_overview.jd
+++ /dev/null
@@ -1,469 +0,0 @@
-page.title=In-app Billing Overview
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#billing-arch">In-app Billing Architecture</a></li>
-    <li><a href="#billing-msgs">In-app Billing Messages</a></li>
-    <ol>
-      <li><a href="#billing-request">Request messages</a></li>
-      <li><a href="#billing-response">Broadcast intents</a></li>
-      <li><a href="#billing-message-sequence">Messaging sequence</a></li>
-      <li><a href="#billing-action-notify">Handling IN_APP_NOTIFY messages</a></li>
-    </ol>
-    <li><a href="#billing-security">Security Controls</a></li>
-    <li><a href="#billing-limitations">Requirements and Limitations</a></li>
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
-    Application</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-    Design</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-    Reference</a></li>
-  </ol>
-</div>
-</div>
-
-<p>In-app Billing is a Google Play service that provides checkout processing for
-in-app purchases. To use the service, your application sends a billing request for a specific in-app
-product. The service then handles all of the checkout details for the transaction, including
-requesting and validating the form of payment and processing the financial transaction. When the
-checkout process is complete, the service sends your application the purchase details, such as the
-order number, the order date and time, and the price paid. At no point does your application have to
-handle any financial transactions; that role is provided by Google Play's in-app billing
-service.</p>
-
-<h2 id="billing-arch">In-app Billing Architecture</h2>
-
-<p>In-app billing uses an asynchronous message loop to convey billing requests and billing responses
-between your application and the Google Play server. In practice, your application never directly
-communicates with the Google Play server (see figure 1). Instead, your application sends billing
-requests to the Google Play application over interprocess communication (IPC) and receives
-purchase responses from the Google Play application in the form of asynchronous broadcast
-intents. Your application does not manage any network connections between itself and the Google
-Play server or use any special APIs from the Android platform.</p>
-
-<p>Some in-app billing implementations may also use a private remote server to deliver content or
-validate transactions, but a remote server is not required to implement in-app billing. A remote
-server can be useful if you are selling digital content that needs to be delivered to a user's
-device, such as media files or photos. You might also use a remote server to store users'
-transaction history or perform various in-app billing security tasks, such as signature
-verification. Although you can handle all security-related tasks in your application, performing
-those tasks on a remote server is recommended because it helps make your application less vulnerable
-to security attacks.</p>
-
-<div class="figure" style="width:440px">
-<img src="{@docRoot}images/billing_arch.png" alt="" height="582" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Your application sends and receives billing messages through the
-  Google Play application, which handles all communication with the Google Play server.</p>
-</div>
-
-<p>A typical in-app billing implementation relies on three components:</p>
-<ul>
-  <li>A {@link android.app.Service} (named <code>BillingService</code> in the sample application),
-  which processes purchase messages from the application and sends billing requests to the Google
-  Play in-app billing service.</li>
-  <li>A {@link android.content.BroadcastReceiver} (named <code>BillingReceiver</code> in the sample
-  application), which receives all asynchronous billing responses from the Google Play
-  application.</li>
-  <li>A security component (named <code>Security</code> in the sample application), which performs
-  security-related tasks, such as signature verification and nonce generation. For more information
-  about in-app billing security, see <a href="#billing-security">Security controls</a> later in this
-  document.</li>
-</ul>
-
-<p>You may also want to incorporate two other components to support in-app billing:</p>
-<ul>
-  <li>A response {@link android.os.Handler} (named <code>ResponseHandler</code> in the sample
-  application), which provides application-specific processing of purchase notifications, errors,
-  and other status messages.</li>
-  <li>An observer (named <code>PurchaseObserver</code> in the sample application), which is
-  responsible for sending callbacks to your application so you can update your user interface with
-  purchase information and status.</li>
-</ul>
-
-<p>In addition to these components, your application must provide a way to store information about
-users' purchases and some sort of user interface that lets users select items to purchase. You do
-not need to provide a checkout user interface. When a user initiates an in-app purchase, the Google
-Play application presents the checkout user interface to your user. When the user completes the
-checkout process, your application resumes.</p>
-
-<h2 id="billing-msgs">In-app Billing Messages</h2>
-
-<p>When the user initiates a purchase, your application sends billing messages to Google Play's
-in-app billing service (named <code>MarketBillingService</code>) using simple IPC method calls. The
-Google Play application responds to all billing requests synchronously, providing your
-application with status notifications and other information. The Google Play application also
-responds to some billing requests asynchronously, providing your application with error messages and
-detailed transaction information. The following section describes the basic request-response
-messaging that takes place between your application and the Google Play application.</p>
-
-<h3 id="billing-request">In-app billing requests</h3>
-
-<p>Your application sends in-app billing requests by invoking a single IPC method
-(<code>sendBillingRequest()</code>), which is exposed by the <code>MarketBillingService</code>
-interface. This interface is defined in an <a
-href="{@docRoot}guide/developing/tools/aidl.html">Android Interface Definition Language</a> file
-(<code>IMarketBillingService.aidl</code>). You can <a
-href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">download</a> this AIDL
-file with the in-app billing sample application.</p>
-
-<p>The <code>sendBillingRequest()</code> method has a single {@link android.os.Bundle} parameter.
-The Bundle that you deliver must include several key-value pairs that specify various parameters for
-the request, such as the type of billing request you are making, the item that is being purchased,
-and the application that is making the request. For more information about the Bundle keys that are
-sent with a request, see <a
-href="{@docRoot}guide/market/billing/billing_reference.html#billing-interface">In-app Billing
-Service Interface</a>.
-
-<p>One of the most important keys that every request Bundle must have is the
-<code>BILLING_REQUEST</code> key. This key lets you specify the type of billing request you are
-making. Google Play's in-app billing service supports the following five types of billing
-requests:</p>
-
-<ul>
-  <li><code>CHECK_BILLING_SUPPORTED</code>
-    <p>This request verifies that the Google Play application supports in-app billing. You
-    usually send this request when your application first starts up. This request is useful if you
-    want to enable or disable certain UI features that are relevant only to in-app billing.</p>
-  </li>
-  <li><code>REQUEST_PURCHASE</code>
-    <p>This request sends a purchase message to the Google Play application and is the foundation
-    of in-app billing. You send this request when a user indicates that he or she wants to purchase
-    an item in your application. Google Play then handles the financial transaction by displaying
-    the checkout user interface.</p>
-  </li>
-  <li><code>GET_PURCHASE_INFORMATION</code>
-    <p>This request retrieves the details of a purchase state change. A purchase changes state when
-    a requested purchase is billed successfully or when a user cancels a transaction during
-    checkout. It can also occur when a previous purchase is refunded. Google Play notifies your
-    application when a purchase changes state, so you only need to send this request when there is
-    transaction information to retrieve.</p>
-  </li>
-  <li><code>CONFIRM_NOTIFICATIONS</code>
-    <p>This request acknowledges that your application received the details of a purchase state
-    change. Google Play sends purchase state change notifications to your application until you
-    confirm that you received them.</p>
-  </li>
-  <li><code>RESTORE_TRANSACTIONS</code>
-    <p>This request retrieves a user's transaction status for <a
-    href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">managed
-    purchases</a>. You should send this request only when you need to retrieve a user's transaction
-    status, which is usually only when your application is reinstalled or installed for the first
-    time on a device.</p>
-  </li>
-</ul>
-
-<h3 id="billing-response">In-app Billing Responses</h3>
-
-<p>The Google Play application responds to in-app billing requests with both synchronous and
-asynchronous responses. The synchronous response is a {@link android.os.Bundle} with the following
-three keys:</p>
-
-<ul>
-  <li><code>RESPONSE_CODE</code>
-    <p>This key provides status information and error information about a request.</p>
-  </li>
-  <li><code>PURCHASE_INTENT</code>
-    <p>This key provides a {@link android.app.PendingIntent}, which you use to launch the checkout
-    activity.</p>
-  </li>
-  <li><code>REQUEST_ID</code>
-    <p>This key provides you with a request identifier, which you can use to match asynchronous
-    responses with requests.</p>
-  </li>
-</ul>
-<p>Some of these keys are not relevant to every request. For more information, see <a
-href="#billing-message-sequence">Messaging sequence</a> later in this document.</p>
-
-<p>The asynchronous response messages are sent in the form of individual broadcast intents and
-include the following:</p>
-
-<ul>
-    <li><code>com.android.vending.billing.RESPONSE_CODE</code>
-    <p>This response contains a Google Play server response code, and is sent after you make an
-    in-app billing request. A server response code can indicate that a billing request was
-    successfully sent to Google Play or it can indicate that some error occurred during a billing
-    request. This response is <em>not</em> used to report any purchase state changes (such as refund
-    or purchase information). For more information about the response codes that are sent with this
-    response, see <a
-    href="{@docRoot}guide/market/billing/billing_reference.html#billing-codes">Server Response Codes
-    for In-app Billing</a>.</p>
-  </li>
-  <li><code>com.android.vending.billing.IN_APP_NOTIFY</code>
-    <p>This response indicates that a purchase has changed state, which means a purchase succeeded,
-    was canceled, or was refunded. This response contains one or more notification IDs. Each
-    notification ID corresponds to a specific server-side message, and each messages contains
-    information about one or more transactions. After your application receives an
-    <code>IN_APP_NOTIFY</code> broadcast intent, you send a <code>GET_PURCHASE_INFORMATION</code>
-    request with the notification IDs to retrieve message details.</p>
-  </li>
-  <li><code>com.android.vending.billing.PURCHASE_STATE_CHANGED</code>
-    <p>This response contains detailed information about one or more transactions. The transaction
-    information is contained in a JSON string. The JSON string is signed and the signature is sent
-    to your application along with the JSON string (unencrypted). To help ensure the security of
-    your in-app billing messages, your application can verify the signature of this JSON string.</p>
-  </li>
-</ul>
-
-<p>The JSON string that is returned with the <code>PURCHASE_STATE_CHANGED</code> intent provides
-your application with the details of one or more billing transactions. An example of this JSON
-string is shown below:</p>
-<pre class="no-pretty-print" style="color:black">
-{ "nonce" : 1836535032137741465,
-  "orders" :
-    { "notificationId" : "android.test.purchased",
-      "orderId" : "transactionId.android.test.purchased",
-      "packageName" : "com.example.dungeons",
-      "productId" : "android.test.purchased",
-      "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
-      "purchaseTime" : 1290114783411,
-      "purchaseState" : 0 }
-}
-</pre>
-
-<p>For more information about the fields in this JSON string, see <a
-href="{@docRoot}guide/market/billing/billing_reference.html#billing-intents">In-app Billing
-Broadcast Intents</a>.</p>
-
-<h3 id="billing-message-sequence">Messaging sequence</h3>
-
-<p>The messaging sequence for a typical purchase request is shown in figure 2. Request types for
-each <code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents
-are shown in <em>italic</em>. For clarity, figure 2 does not show the <code>RESPONSE_CODE</code>
-broadcast intents that are sent for every request.</p>
-
-<p>The basic message sequence for an in-app purchase request is as follows:</p>
-
-<ol>
-  <li>Your application sends a purchase request (<code>REQUEST_PURCHASE</code> type), specifying a
-  product ID and other parameters.</li>
-  <li>The Google Play application sends your application a Bundle with the following keys:
-  <code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, and <code>REQUEST_ID</code>. The
-  <code>PURCHASE_INTENT</code> key provides a {@link android.app.PendingIntent}, which your
-  application uses to start the checkout UI for the given product ID.</li>
-  <li>Your application launches the pending intent, which launches the checkout UI.
-    <p class="note"><strong>Note:</strong> You must launch the pending intent from an activity
-    context and not an application context.</p>
-  </li>
-  <li>When the checkout flow finishes (that is, the user successfully purchases the item or cancels
-  the purchase), Google Play sends your application a notification message (an
-  <code>IN_APP_NOTIFY</code> broadcast intent). The notification message includes a notification ID,
-  which references the transaction.</li>
-  <li>Your application requests the transaction information by sending a
-  <code>GET_PURCHASE_STATE_CHANGED</code> request, specifying the notification ID for the
-  transaction.</li>
-  <li>The Google Play application sends a Bundle with a <code>RESPONSE_CODE</code> key and a 
-  <code>REQUEST_ID</code> key.
-  <li>Google Play sends the transaction information to your application in a
-  <code>PURCHASE_STATE_CHANGED</code> broadcast intent.</li>
-  <li>Your application confirms that you received the transaction information for the given
-  notification ID by sending a confirmation message (<code>CONFIRM_NOTIFICATIONS</code> type),
-  specifying the notification ID for which you received transaction information.</li>
-  <li>The Google Play application sends your application a Bundle with a
-  <code>RESPONSE_CODE</code> key and a <code>REQUEST_ID</code> key.</li>
-</ol>
-
-<img src="{@docRoot}images/billing_request_purchase.png" height="231" id="figure2" />
-<p class="img-caption">
-  <strong>Figure 2.</strong> Message sequence for a purchase request.
-</p>
-
-<p>Keep in mind, you must send a confirmation when you receive transaction information from Google
-Play (step 8 in figure 2). If you don't send a confirmation message, Google Play will
-continue sending <code>IN_APP_NOTIFY</code> messages for the transactions you have not
-confirmed. As a best practice, you should not send a <code>CONFIRM_NOTIFICATIONS</code> request for
-a purchased item until you have delivered the item to the user. This way, if your application
-crashes or something else prevents your application from delivering the product, your application
-will still receive an <code>IN_APP_NOTIFY</code> broadcast intent from Google Play indicating
-that you need to deliver the product. Also, as a best practice, your application must be able to
-handle <code>IN_APP_NOTIFY</code> messages that contain multiple orders.</p>
-
-<p>The messaging sequence for a restore transaction request is shown in figure 3. Request types for
-each <code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents
-are shown in <em>italic</em>. For clarity, figure 3 does not show the <code>RESPONSE_CODE</code>
-broadcast intents that are sent for every request.</p>
-
-<div class="figure" style="width:490px">
-<img src="{@docRoot}images/billing_restore_transactions.png" alt="" height="168" />
-<p class="img-caption">
-  <strong>Figure 3.</strong> Message sequence for a restore transactions request.
-</p>
-</div>
-
-<p>The request triggers three responses. The first is a {@link android.os.Bundle} with a
-<code>RESPONSE_CODE</code> key and a <code>REQUEST_ID</code> key. Next, the Google Play
-application sends a <code>RESPONSE_CODE</code> broadcast intent, which provides status information
-or error information about the request. As always, the <code>RESPONSE_CODE</code> message references
-a specific request ID, so you can determine which request a <code>RESPONSE_CODE</code> message
-pertains to.</p>
-
-<p>The <code>RESTORE_TRANSACTIONS</code> request type also triggers a
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent, which contains the same type of transaction
-information that is sent during a purchase request, although you do not need to respond to this
-intent with a <code>CONFIRM_NOTIFICATIONS</code> message.</p>
-
-<p class="note"><strong>Note:</strong> You should use the <code>RESTORE_TRANSACTIONS</code> request
-type only when your application is installed for the first time on a device or when your
-application has been removed from a device and reinstalled.</p>
-
-<p>The messaging sequence for checking whether in-app billing is supported is shown in figure 4. The
-request type for the <code>sendBillingRequest()</code> method is shown in <strong>bold</strong>.</p>
-
-<div class="figure" style="width:454px">
-<img src="{@docRoot}images/billing_check_supported.png" alt="" height="168" />
-<p class="img-caption">
-  <strong>Figure 4.</strong> Message sequence for checking whether in-app billing is supported.
-</p>
-</div>
-
-<p>The synchronous response for a <code>CHECK_BILLING_SUPPORTED</code> request provides a Bundle
-with a server response code.  A <code>RESULT_OK</code> response code indicates that in-app billing
-is supported; a <code>RESULT_BILLING_UNAVAILABLE</code> response code indicates that in-app billing
-is unavailable because the API version you specified is unrecognized or the user is not eligible to
-make in-app purchases (for example, the user resides in a country that does not allow in-app
-billing). A <code>SERVER_ERROR</code> can also be returned, indicating that there was a problem with
-the Google Play server.</p>
-
-<h3 id="billing-action-notify">Handling IN_APP_NOTIFY messages</h3>
-
-<p>Usually, your application receives an <code>IN_APP_NOTIFY</code> broadcast intent from Google
-Play in response to a <code>REQUEST_PURCHASE</code> message (see figure 2). The
-<code>IN_APP_NOTIFY</code> broadcast intent informs your application that the state of a requested
-purchase has changed. To retrieve the details of that purchase, your application sends a
-<code>GET_PURCHASE_INFORMATION</code> request. Google Play responds with a
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent, which contains the details of the purchase
-state change. Your application then sends a <code>CONFIRM_NOTIFICATIONS</code> message, informing
-Google Play that you have received the purchase state change information.</p>
-
-<p>In some special cases, you may receive multiple <code>IN_APP_NOTIFY</code> messages even though
-you have confirmed receipt of the purchase information, or you may receive
-<code>IN_APP_NOTIFY</code> messages for a purchase change even though you never initiated the
-purchase. Your application must handle both of these special cases.</p>
-
-<h4>Handling multiple IN_APP_NOTIFY messages</h4>
-
-<p>When Google Play receives a <code>CONFIRM_NOTIFICATIONS</code> message for a given
-<code>PURCHASE_STATE_CHANGED</code> message, it usually stops sending <code>IN_APP_NOTIFY</code>
-intents for that <code>PURCHASE_STATE_CHANGED</code> message. Sometimes, however, Google
-Play may send repeated <code>IN_APP_NOTIFY</code> intents for a
-<code>PURCHASE_STATE_CHANGED</code> message even though your application has sent a
-<code>CONFIRM_NOTIFICATIONS</code> message. This can occur if a device loses network connectivity
-while you are sending the <code>CONFIRM_NOTIFICATIONS</code> message. In this case, Google Play
-might not receive your <code>CONFIRM_NOTIFICATIONS</code> message and it could send multiple
-<code>IN_APP_NOTIFY</code> messages until it receives acknowledgement that you received the
-transaction message. Therefore, your application must be able to recognize that the subsequent
-<code>IN_APP_NOTIFY</code> messages are for a previously processed transaction. You can do this by
-checking the <code>orderID</code> that's contained in the JSON string because every transaction has
-a unique <code>orderId</code>.</p>
-
-<h4>Handling refunds and other unsolicited IN_APP_NOTIFY messages</h4>
-
-<p>There are two cases where your application may receive <code>IN_APP_NOTIFY</code> broadcast
-intents even though your application has not sent a <code>REQUEST_PURCHASE</code> message. Figure 5
-shows the messaging sequence for both of these cases. Request types for each
-<code>sendBillingRequest()</code> method are shown in <strong>bold</strong>, broadcast intents are
-shown in <em>italic</em>. For clarity, figure 5 does not show the <code>RESPONSE_CODE</code>
-broadcast intents that are sent for every request.</p>
-
-<div class="figure" style="width:481px">
-<img src="{@docRoot}images/billing_refund.png" alt="" height="189" />
-<p class="img-caption">
-  <strong>Figure 5.</strong> Message sequence for refunds and other unsolicited
-IN_APP_NOTIFY messages.</p>
-</div>
-
-<p>In the first case, your application may receive an <code>IN_APP_NOTIFY</code> broadcast intent
-when a user has your application installed on two (or more) devices and the user makes an in-app
-purchase from one of the devices. In this case, Google Play sends an <code>IN_APP_NOTIFY</code>
-message to the second device, informing the application that there is a purchase state change. Your
-application can handle this message the same way it handles the response from an
-application-initiated <code>REQUEST_PURCHASE</code> message, so that ultimately your application
-receives a <code>PURCHASE_STATE_CHANGED</code> broadcast intent message that includes information
-about the item that has been purchased. This applies only to items that have their <a
-href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">purchase type</a> set
-to "managed per user account."</p>
-
-<p>In the second case, your application can receive an <code>IN_APP_NOTIFY</code> broadcast intent
-when Google Play receives a refund notification from Google Checkout. In this case, Google
-Play sends an <code>IN_APP_NOTIFY</code> message to your application. Your application can handle
-this message the same way it handles responses from an application-initiated
-<code>REQUEST_PURCHASE</code> message so that ultimately your application receives a
-<code>PURCHASE_STATE_CHANGED</code> message that includes information about the item that has been
-refunded. The refund information is included in the JSON string that accompanies the
-<code>PURCHASE_STATE_CHANGED</code> broadcast intent. Also, the <code>purchaseState</code> field in
-the JSON string is set to 2.</p>
-
-<p class="caution"><strong>Important:</strong> You cannot use the Google Checkout API to
-issue refunds or cancel in-app billing transactions. You must do this manually through your
-Google Checkout merchant account. However, you can use the Google Checkout API to retrieve order
-information.</p>
-
-<h2 id="billing-security">Security Controls</h2>
-
-<p>To help ensure the integrity of the transaction information that is sent to your application,
-Google Play signs the JSON string that is contained in the <code>PURCHASE_STATE_CHANGED</code>
-broadcast intent. Google Play uses the private key that is associated with your publisher account
-to create this signature. The publisher site generates an RSA key pair for each publisher account.
-You can find the public key portion of this key pair on your account's profile page. It is the same
-public key that is used with Google Play licensing.</p>
-
-<p>When Google Play signs a billing response, it includes the signed JSON string (unencrypted)
-and the signature. When your application receives this signed response you can use the public key
-portion of your RSA key pair to verify the signature. By performing signature verification you can
-help detect responses that have been tampered with or that have been spoofed. You can perform this
-signature verification step in your application; however, if your application connects to a secure
-remote server then we recommend that you perform the signature verification on that server.</p>
-
-<p>In-app billing also uses nonces (a random number used once) to help verify the integrity of the
-purchase information that's returned from Google Play. Your application must generate a nonce and
-send it with a <code>GET_PURCHASE_INFORMATION</code> request and a <code>RESTORE_TRANSACTIONS</code>
-request. When Google Play receives the request, it adds the nonce to the JSON string that
-contains the transaction information. The JSON string is then signed and returned to your
-application. When your application receives the JSON string, you need to verify the nonce as well as
-the signature of the JSON string.</p>
-
-<p>For more information about best practices for security and design, see <a
-href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>.</p>
-
-<h2 id="billing-limitations">In-app Billing Requirements and Limitations</h2>
-
-<p>Before you get started with in-app billing, be sure to review the following requirements and
-limitations.</p>
-
-<ul>
-  <li>In-app billing can be implemented only in applications that you publish through Google
-  Play.</li>
-  <li>You must have a Google Checkout Merchant account to use Google Play In-app Billing.</li>
-  <li>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
-  the MyApps application. If your device is running any other version of Android, in-app billing
-  requires version 2.3.4 (or higher) of the Google Play application.</li>
-  <li>An application can use in-app billing only if the device is running Android 1.6 (API level 4)
-  or higher.</li>
-  <li>You can use in-app billing to sell only digital content. You cannot use in-app billing to sell
-  physical goods, personal services, or anything that requires physical delivery.</li>
-  <li>Google Play does not provide any form of content delivery. You are responsible for
-  delivering the digital content that you sell in your applications.</li>
-  <li>You cannot implement in-app billing on a device that never connects to the network. To
-  complete in-app purchase requests, a device must be able to access the Google Play server over
-  the network. </li>
-</ul>
-
-<p>For more information about in-app billing requirements, see <a
-href="http://market.android.com/support/bin/answer.py?answer=1153481">In-App Billing Availability
-and Policies</a>.</p>
diff --git a/docs/html/guide/market/billing/billing_reference.jd b/docs/html/guide/market/billing/billing_reference.jd
deleted file mode 100755
index e8cf2ee..0000000
--- a/docs/html/guide/market/billing/billing_reference.jd
+++ /dev/null
@@ -1,418 +0,0 @@
-page.title=In-app Billing Reference
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#billing-codes">Server Response Codes for In-app Billing</a></li>
-    <li><a href="#billing-interface">In-app Billing Service Interface</a></li>
-    <li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
-    
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
-    Application</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-    Design</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
-    Billing</a></li>
-  </ol>
-</div>
-</div>
-
-<p>The following document provides technical reference information for the following:</p>
-
-<ul>
-  <li><a href="#billing-codes">Google Play Server Response Codes for In-app Billing</a></li>
-  <li><a href="#billing-interface">In-app Billing Interface Parameters</a></li>
-  <li><a href="#billing-intents">In-app Billing Broadcast Intents</a></li>
-</ul>
-
-<h2 id="billing-codes">Google Play Server Response Codes for In-app Billing</h2>
-
-<p>The following table lists all of the server response codes that are sent from Google Play to
-your application. Google Play sends these response codes asynchronously as
-<code>response_code</code> extras in the <code>com.android.vending.billing.RESPONSE_CODE</code>
-broadcast intent. Your application must handle all of these response codes.</p>
-
-<p class="table-caption" id="response-codes-table"><strong>Table 1.</strong> Summary of response
-codes returned by Google Play.</p>
-
-<table>
-
-<tr>
-<th>Response Code</th>
-<th>Value</th>
-<th>Description</th>
-</tr>
-<tr>
-  <td><code>RESULT_OK</code></td>
-  <td>0</td>
-  <td>Indicates that the request was sent to the server successfully. When this code is returned in
-  response to a <code>CHECK_BILLING_SUPPORTED</code> request, indicates that billing is
-  supported.</td>
-</tr>
-<tr>
-  <td><code>RESULT_USER_CANCELED</code></td>
-  <td>1</td>
-  <td>Indicates that the user pressed the back button on the checkout page instead of buying the
-  item.</td>
-</tr>
-<tr>
-  <td><code>RESULT_SERVICE_UNAVAILABLE</code></td>
-  <td>2</td>
-  <td>Indicates that the network connection is down.</td>
-</tr>
-<tr>
-  <td><code>RESULT_BILLING_UNAVAILABLE</code></td>
-  <td>3</td>
-  <td>Indicates that in-app billing is not available because the <code>API_VERSION</code> that you
-  specified is not recognized by the Google Play application or the user is ineligible for in-app
-  billing (for example, the user resides in a country that prohibits in-app purchases).</td>
-</tr>
-<tr>
-  <td><code>RESULT_ITEM_UNAVAILABLE</code></td>
-  <td>4</td>
-  <td>Indicates that Google Play cannot find the requested item in the application's product
-  list. This can happen if the product ID is misspelled in your <code>REQUEST_PURCHASE</code>
-  request or if an item is unpublished in the application's product list.</td>
-</tr>
-<tr>
-  <td><code>RESULT_DEVELOPER_ERROR</code></td>
-  <td>5</td>
-  <td>Indicates that an application is trying to make an in-app billing request but the application
-  has not declared the com.android.vending.BILLING permission in its manifest. Can also indicate
-  that an application is not properly signed, or that you sent a malformed request, such as a
-  request with missing Bundle keys or a request that uses an unrecognized request type.</td>
-</tr>
-<tr>
-  <td><code>RESULT_ERROR</code></td>
-  <td>6</td>
-  <td>Indicates an unexpected server error. For example, this error is triggered if you try to
-purchase an item from yourself, which is not allowed by Google Checkout.</td>
-</tr>
-</table>
-
-<h2 id="billing-interface">In-app Billing Service Interface</h2>
-
-<p>The following section describes the interface for Google Play's in-app billing service. The
-interface is defined in the <code>IMarketBillingService.aidl</code> file, which is included with the
-in-app billing <a
-href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">sample
-application</a>.</p>
-<p>The interface consists of a single request method <code>sendBillingRequest()</code>. This method
-takes a single {@link android.os.Bundle} parameter. The Bundle parameter includes several key-value
-pairs, which are summarized in table 2.</p>
-
-<p class="table-caption"><strong>Table 2.</strong> Description of Bundle keys passed in a
-<code>sendBillingRequest()</code> request.</p>
-
-<table>
-
-<tr>
-<th>Key</th>
-<th>Type</th>
-<th>Possible Values</th>
-<th>Required?</th>
-<th>Description</th>
-</tr>
-<tr>
-  <td><code>BILLING_REQUEST</code></td>
-  <td><code>String</code></td>
-  <td><code>CHECK_BILLING_SUPPORTED</code>, <code>REQUEST_PURCHASE</code>,
-  <code>GET_PURCHASE_INFORMATION</code>, <code>CONFIRM_NOTIFICATIONS</code>, or
-  <code>RESTORE_TRANSACTIONS</code></td>
-  <td>Yes</td>
-  <td>The type of billing request you are making with the <code>sendBillingRequest()</code> request.
-  The possible values are discussed more below this table.</td>
-</tr>
-<tr>
-  <td><code>API_VERSION</code></td>
-  <td><code>int</code></td>
-  <td>1</td>
-  <td>Yes</td>
-  <td>The version of Google Play's in-app billing service you are using. The current version is
-  1.</td>
-</tr>
-<tr>
-  <td><code>PACKAGE_NAME</code></td>
-  <td><code>String</code></td>
-  <td>A valid package name.</td>
-  <td>Yes</td>
-  <td>The name of the application that is making the request.</td>
-</tr>
-<tr>
-  <td><code>ITEM_ID</code></td>
-  <td><code>String</code></td>
-  <td>Any valid product identifier.</td>
-  <td>Required for <code>REQUEST_PURCHASE</code> requests.</td>
-  <td>The product ID of the item you are making a billing request for. Every in-app item that you
-  sell using Google Play's in-app billing service must have a unique product ID, which you
-  specify on the Google Play publisher site.</td>
-</tr>
-<tr>
-  <td><code>NONCE</code></td>
-  <td><code>long</code></td>
-  <td>Any valid <code>long</code> value.</td>
-  <td>Required for <code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code>
-  requests.</td>
-  <td>A number used once. Your application must generate and send a nonce with each
-  <code>GET_PURCHASE_INFORMATION</code> and <code>RESTORE_TRANSACTIONS</code> request. The nonce is
-  returned with the <code>PURCHASE_STATE_CHANGED</code> broadcast intent, so you can use this value
-  to verify the integrity of transaction responses form Google Play.</td>
-</tr>
-<tr>
-  <td><code>NOTIFY_IDS</code></td>
-  <td>Array of <code>long</code> values</td>
-  <td>Any valid array of <code>long</code> values</td>
-  <td>Required for <code>GET_PURCHASE_INFORMATION</code> and <code>CONFIRM_NOTIFICATIONS</code>
-  requests.</td>
-  <td>An array of notification identifiers. A notification ID is sent to your application in an
-  <code>IN_APP_NOTIFY</code> broadcast intent every time a purchase changes state. You use the
-  notification to retrieve the details of the purchase state change.</td>
-</tr>
-<tr>
-  <td><code>DEVELOPER_PAYLOAD</code></td>
-  <td><code>String</code></td>
-  <td>Any valid <code>String</code> less than 256 characters long.</td>
-  <td>No</td>
-  <td>A developer-specified string that can be specified when you make a
-  <code>REQUEST_PURCHASE</code> request. This field is returned in the JSON string that contains
-  transaction information for an order. You can use this key to send supplemental information with
-  an order. For example, you can use this key to send index keys with an order, which is useful if
-  you are using a database to store purchase information. We recommend that you do not use this key
-  to send data or content.</td>
-</tr>
-</table>
-
-<p>The <code>BILLING_REQUEST</code> key can have the following values:</p>
-
-<ul>
-  <li><code>CHECK_BILLING_SUPPORTED</code>
-    <p>This request verifies that the Google Play application supports in-app billing. You
-    usually send this request when your application first starts up. This request is useful if you
-    want to enable or disable certain UI features that are relevant only to in-app billing.</p>
-  </li>
-  <li><code>REQUEST_PURCHASE</code>
-    <p>This request sends a purchase message to the Google Play application and is the foundation
-    of in-app billing. You send this request when a user indicates that he or she wants to purchase
-    an item in your application. Google Play then handles the financial transaction by displaying
-    the checkout user interface.</p>
-  </li>
-  <li><code>GET_PURCHASE_INFORMATION</code>
-    <p>This request retrieves the details of a purchase state change. A purchase state change can
-    occur when a purchase request is billed successfully or when a user cancels a transaction during
-    checkout. It can also occur when a previous purchase is refunded. Google Play notifies your
-    application when a purchase changes state, so you only need to send this request when there is
-    transaction information to retrieve.</p>
-  </li>
-  <li><code>CONFIRM_NOTIFICATIONS</code>
-    <p>This request acknowledges that your application received the details of a purchase state
-    change. That is, this message confirms that you sent a <code>GET_PURCHASE_INFORMATION</code>
-    request for a given notification and that you received the purchase information for the
-    notification.</p>
-  </li>
-  <li><code>RESTORE_TRANSACTIONS</code>
-    <p>This request retrieves a user's transaction status for managed purchases (see <a
-    href="{@docRoot}guide/market/billing/billing_admin.html#billing-purchase-type">Choosing a
-    Purchase Type</a> for more information). You should send this message only when you need to
-    retrieve a user's transaction status, which is usually only when your application is reinstalled
-    or installed for the first time on a device.</p>
-  </li>
-</ul>
-
-<p>Every in-app billing request generates a synchronous response. The response is a {@link
-android.os.Bundle} and can include one or more of the following keys:</p>
-
-<ul>
-  <li><code>RESPONSE_CODE</code>
-    <p>This key provides status information and error information about a request.</p>
-  </li>
-  <li><code>PURCHASE_INTENT</code>
-    <p>This key provides a {@link android.app.PendingIntent}, which you use to launch the checkout
-    activity.</p>
-  </li>
-  <li><code>REQUEST_ID</code>
-    <p>This key provides you with a request identifier, which you can use to match asynchronous
-    responses with requests.</p>
-  </li>
-</ul>
-
-<p>Some of these keys are not relevant to certain types of requests. Table 3 shows which keys are
-returned for each request type.</p>
-
-<p class="table-caption"><strong>Table 3.</strong> Description of Bundle keys that are returned with
-each in-app billing request type.</p>
-
-<table>
-
-<tr>
-<th>Request Type</th>
-<th>Keys Returned</th>
-<th>Possible Response Codes</th>
-</tr>
-<tr>
-  <td><code>CHECK_BILLING_SUPPORTED</code></td>
-  <td><code>RESPONSE_CODE</code></td>
-  <td><code>RESULT_OK</code>, <code>RESULT_BILLING_UNAVAILABLE</code>, <code>RESULT_ERROR</code>,
-  <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
-  <td><code>REQUEST_PURCHASE</code></td>
-  <td><code>RESPONSE_CODE</code>, <code>PURCHASE_INTENT</code>, <code>REQUEST_ID</code></td>
-  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
-  <td><code>GET_PURCHASE_INFORMATION</code></td>
-  <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
-  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
-  <td><code>CONFIRM_NOTIFICATIONS</code></td>
-  <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
-  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-<tr>
-  <td><code>RESTORE_TRANSACTIONS</code></td>
-  <td><code>RESPONSE_CODE</code>, <code>REQUEST_ID</code></td>
-  <td><code>RESULT_OK</code>, <code>RESULT_ERROR</code>, <code>RESULT_DEVELOPER_ERROR</code></td>
-</tr>
-</table>
-
-<h2 id="billing-intents">In-app Billing Broadcast Intents</h2>
-
-<p>The following section describes the in-app billing broadcast intents that are sent by the Google
-Play application. These broadcast intents inform your application about in-app billing actions
-that have occurred. Your application must implement a {@link android.content.BroadcastReceiver} to
-receive these broadcast intents, such as the <code>BillingReceiver</code> that's shown in the in-app
-billing <a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">sample
-application</a>.</p>
-
-<h4>com.android.vending.billing.RESPONSE_CODE</h4>
-
-<p>This broadcast intent contains a Google Play response code, and is sent after you make an
-in-app billing request. A server response code can indicate that a billing request was successfully
-sent to Google Play or it can indicate that some error occurred during a billing request. This
-intent is not used to report any purchase state changes (such as refund or purchase information).
-For more information about the response codes that are sent with this response, see <a
-href="#billing-codes">Google Play Response Codes for In-app Billing</a>. The sample application
-assigns this broadcast intent to a constant named <code>ACTION_RESPONSE_CODE</code>.</p>
-
-<h5>Extras</h5>
-
-<ul type="none">
-  <li><code>request_id</code>&mdash;a <code>long</code> representing a request ID. A request ID
-  identifies a specific billing request and is returned by Google Play at the time a request is
-  made.</li>
-  <li><code>response_code</code>&mdash;an <code>int</code> representing the Google Play server
-  response code.</li>
-</ul>
-
-<h4>com.android.vending.billing.IN_APP_NOTIFY</h4>
-
-<p>This response indicates that a purchase has changed state, which means a purchase succeeded, was
-canceled, or was refunded. This response contains one or more notification IDs. Each notification ID
-corresponds to a specific server-side message, and each messages contains information about one or
-more transactions. After your application receives an <code>IN_APP_NOTIFY</code> broadcast intent,
-you send a <code>GET_PURCHASE_INFORMATION</code> request with the notification IDs to retrieve the
-message details. The sample application assigns this broadcast intent to a constant named
-<code>ACTION_NOTIFY</code>.</p>
-
-<h5>Extras</h5>
-
-<ul type="none">
-  <li><code>notification_id</code>&mdash;a <code>String</code> representing the notification ID for
-  a given purchase state change. Google Play notifies you when there is a purchase state change
-  and the notification includes a unique notification ID. To get the details of the purchase state
-  change, you send the notification ID with the <code>GET_PURCHASE_INFORMATION</code> request.</li>
-</ul>
-
-<h4>com.android.vending.billing.PURCHASE_STATE_CHANGED</h4>
-
-<p>This broadcast intent contains detailed information about one or more transactions. The
-transaction information is contained in a JSON string. The JSON string is signed and the signature
-is sent to your application along with the JSON string (unencrypted). To help ensure the security of
-your in-app billing messages, your application can verify the signature of this JSON string. The
-sample application assigns this broadcast intent to a constant named
-<code>ACTION_PURCHASE_STATE_CHANGED</code>.</p>
-
-<h5>Extras</h5>
-
-<ul type="none">
-  <li><code>inapp_signed_data</code>&mdash;a <code>String</code> representing the signed JSON
-  string.</li>
-  <li><code>inapp_signature</code>&mdash;a <code>String</code> representing the signature.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Your application should map the broadcast intents and extras
-to constants that are unique to your application. See the <code>Consts.java</code> file in the
-sample application to see how this is done.</p>
-
-<p>The fields in the JSON string are described in the following table (see table 4):</p>
-
-<p class="table-caption"><strong>Table 4.</strong> Description of JSON fields that are returned with
-a <code>PURCHASE_STATE_CHANGED</code> intent.</p>
-
-<table>
-
-<tr>
-<th>Field</th>
-<th>Description</th>
-</tr>
-<tr>
-  <td>nonce</td>
-  <td>A number used once. Your application generates the nonce and sends it with the
-  <code>GET_PURCHASE_INFORMATION</code> request. Google Play sends the nonce back as part of the
-  JSON string so you can verify the integrity of the message.</td>
-</tr>
-<tr>
-  <td>notificationId</td>
-  <td>A unique identifier that is sent with an <code>IN_APP_NOTIFY</code> broadcast intent. Each
-  <code>notificationId</code> corresponds to a specify message that is waiting to be retrieved on
-  the Google Play server. Your application sends back the <code>notificationId</code> with the
-  <code>GET_PURCHASE_INFORMATION</code> message so Google Play can determine which messages you
-  are retrieving.</td>
-</tr>
-<tr>
-  <td>orderId</td>
-  <td>A unique order identifier for the transaction. This corresponds to the Google Checkout Order
-  ID.</td>
-</tr>
-<tr>
-  <td>packageName</td>
-  <td>The application package from which the purchase originated.</td>
-</tr>
-<tr>
-  <td>productId</td>
-  <td>The item's product identifier. Every item has a product ID, which you must specify in the
-  application's product list on the Google Play publisher site.</td>
-</tr>
-<tr>
-  <td>purchaseTime</td>
-  <td>The time the product was purchased, in milliseconds since the epoch (Jan 1, 1970).</td>
-</tr>
-
-<tr>
-  <td>purchaseState</td>
-  <td>The purchase state of the order. Possible values are 0 (purchased), 1 (canceled), or 2
-  (refunded).</td>
-</tr>
-<tr>
-  <td>developerPayload</td>
-  <td>A developer-specified string that contains supplemental information about an order. You can
-  specify a value for this field when you make a <code>REQUEST_PURCHASE</code> request.</td>
-</tr>
-</table>
diff --git a/docs/html/guide/market/billing/billing_testing.jd b/docs/html/guide/market/billing/billing_testing.jd
deleted file mode 100755
index 77aa3ed..0000000
--- a/docs/html/guide/market/billing/billing_testing.jd
+++ /dev/null
@@ -1,293 +0,0 @@
-page.title=Testing In-app Billing
-parent.title=In-app Billing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#billing-testing-static">Testing in-app purchases with static responses</a></li>
-    <li><a href="#billing-testing-real">Testing in-app purchases using your own product IDs</a></li>
-
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
-    Application</a></li>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-    Design</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-    Reference</a></li>
-  </ol>
-</div>
-</div>
-
-<p>The Google Play publisher site provides several tools that help you test your in-app billing
-implementation before it is published. You can use these tools to create test accounts and purchase
-special reserved items that send static billing responses to your application.</p>
-
-<p>To test in-app billing in an application you must install the application on an Android-powered
-device. You cannot use the Android emulator to test in-app billing.  The device you use for testing
-must run a standard version of the Android 1.6 or later platform (API level 4 or higher), and have
-the most current version of the Google Play application installed. If a device is not running the
-most current Google Play application, your application won't be able to send in-app billing
-requests to Google Play. For general information about how to set up a device for use in
-developing Android applications, see <a href="{@docRoot}guide/developing/device.html">Using Hardware
-Devices</a>.</p>
-
-<p>The following section shows you how to set up and use the in-app billing test tools.</p>
-
-<h2 id="billing-testing-static">Testing in-app purchases with static responses</h2>
-
-<p>We recommend that you first test your in-app billing implementation using static responses from
-Google Play. This enables you to verify that your application is handling the primary Google
-Play responses correctly and that your application is able to verify signatures correctly.</p>
-
-<p>To test your implementation with static responses, you make an in-app billing request using a
-special item that has a reserved product ID. Each reserved product ID returns a specific static
-response from Google Play. No money is transferred when you make in-app billing requests with the
-reserved product IDs. Also, you cannot specify the form of payment when you make a billing request
-with a reserved product ID. Figure 1 shows the checkout flow for the reserved item that has the
-product ID android.test.purchased.</p>
-
-<img src="{@docRoot}images/billing_test_flow.png" height="381" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Checkout flow for the special reserved item android.test.purchased.
-</p>
-
-<p>You do not need to list the reserved products in your application's product list. Google Play
-already knows about the reserved product IDs. Also, you do not need to upload your application to
-the publisher site to perform static response tests with the reserved product IDs. You can simply
-install your application on a device, log into the device, and make billing requests using the
-reserved product IDs.</p>
-
-<p>There are four reserved product IDs for testing static in-app billing responses:</p>
-
-<ul>
-  <li><strong>android.test.purchased</strong>
-    <p>When you make an in-app billing request with this product ID, Google Play responds as
-    though you successfully purchased an item. The response includes a JSON string, which contains
-    fake purchase information (for example, a fake order ID). In some cases, the JSON string is
-    signed and the response includes the signature so you can test your signature verification
-    implementation using these responses.</p>
-  </li>
-  <li><strong>android.test.canceled</strong>
-    <p>When you make an in-app billing request with this product ID Google Play responds as
-    though the purchase was canceled. This can occur when an error is encountered in the order
-    process, such as an invalid credit card, or when you cancel a user's order before it is
-    charged.</p>
-  </li>
-  <li><strong>android.test.refunded</strong>
-    <p>When you make an in-app billing request with this product ID, Google Play responds as
-    though the purchase was refunded. Refunds cannot be initiated through Google Play's in-app
-    billing service. Refunds must be initiated by you (the merchant). After you process a refund
-    request through your Google Checkout account, a refund message is sent to your application by
-    Google Play. This occurs only when Google Play gets notification from Google Checkout that
-    a refund has been made. For more information about refunds, see <a
-    href="{@docRoot}guide/market/billing/billing_overview.html#billing-action-notify">Handling
-    IN_APP_NOTIFY messages</a> and <a
-    href="http://www.google.com/support/androidmarket/bin/answer.py?answer=1153485">In-app Billing
-    Pricing</a>.</p>
-  </li>
-  <li><strong>android.test.item_unavailable</strong>
-    <p>When you make an in-app billing request with this product ID, Google Play responds as
-    though the item being purchased was not listed in your application's product list.</p>
-  </li>
-</ul>
-
-<p>In some cases, the reserved items may return signed static responses, which lets you test
-signature verification in your application. To test signature verification with the special reserved
-product IDs, you may need to set up <a
-href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">test accounts</a> or
-upload your application as a unpublished draft application. Table 1 shows you the conditions under
-which static responses are signed.</p>
-
-<p class="table-caption" id="static-responses-table"><strong>Table 1.</strong>
-Conditions under which static responses are signed.</p>
-
-<table>
-<tr>
-<th>Application ever been published?</th>
-<th>Draft application uploaded and unpublished?</th>
-<th>User who is running the application</th>
-<th>Static response signature</th>
-</tr>
-
-<tr>
-<td>No</td>
-<td>No</td>
-<td>Any</td>
-<td>Unsigned</td>
-</tr>
-
-<tr>
-<td>No</td>
-<td>No</td>
-<td>Developer</td>
-<td>Signed</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>No</td>
-<td>Any</td>
-<td>Unsigned</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>No</td>
-<td>Developer</td>
-<td>Signed</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>No</td>
-<td>Test account</td>
-<td>Signed</td>
-</tr>
-
-<tr>
-<td>Yes</td>
-<td>Yes</td>
-<td>Any</td>
-<td>Signed</td>
-</tr>
-
-</table>
-
-<p>To make an in-app billing request with a reserved product ID, you simply construct a normal
-<code>REQUEST_PURCHASE</code> request, but instead of using a real product ID from your
-application's product list you use one of the reserved product IDs.</p>
-
-<p>To test your application using the reserved product IDs, follow these steps:</p>
-
-<ol>
-  <li><strong>Install your application on an Android-powered device.</strong>
-    <p>You cannot use the emulator to test in-app billing; you must install your application on a
-    device to test in-app billing.</p>
-    <p>To learn how to install an application on a device, see <a
-    href="{@docRoot}guide/developing/building/building-cmdline.html#RunningOnDevice">Running on a
-    device</a>.</p>
-  </li>
-  <li><strong>Sign in to your device with your developer account.</strong>
-    <p>You do not need to use a test account if you are testing only with the reserved product
-    IDs.</p>
-  </li>
-  <li><strong>Verify that your device is running a supported version of the Google Play
-  application or the MyApps application.</strong>
-    <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
-    the MyApps application. If your device is running any other version of Android, in-app billing
-    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
-    version of the Google Play application, see <a
-    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
-    Play</a>.</p>
-  </li>
-  <li><strong>Run your application and purchase the reserved product IDs.</strong></li>
-</ol>
-
-<p class="note"><strong>Note</strong>: Making in-app billing requests with the reserved product IDs
-overrides the usual Google Play production system. When you send an in-app billing request for a
-reserved product ID, the quality of service will not be comparable to the production
-environment.</p>
-
-<h2 id="billing-testing-real">Testing In-app Purchases Using Your Own Product IDs</h2>
-
-<p>After you finish your static response testing, and you verify that signature verification is
-working in your application, you can test your in-app billing implementation by making actual in-app
-purchases. Testing real in-app purchases enables you to test the end-to-end in-app billing
-experience, including the actual responses from Google Play and the actual checkout flow that
-users will experience in your application.</p>
-
-<p class="note"><strong>Note</strong>: You do not need to publish your application to do end-to-end
-testing. You only need to upload your application as a draft application to perform end-to-end
-testing.</p>
-
-<p>To test your in-app billing implementation with actual in-app purchases, you will need to
-register at least one test account on the Google Play publisher site. You cannot use your
-developer account to test the complete in-app purchase process because Google Checkout does not let
-you buy items from yourself. If you have not set up test accounts before, see <a
-href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">Setting up test
-accounts</a>.</p>
-
-<p>Also, a test account can purchase an item in your product list only if the item is published. The
-application does not need to be published, but the item does need to be published.</p>
-
-<p>When you use a test account to purchase items, the test account is billed through Google Checkout
-and your Google Checkout Merchant account receives a payout for the purchase. Therefore, you may
-want to refund purchases that are made with test accounts, otherwise the purchases will show up as
-actual payouts to your merchant account.</p>
-
-<p>To test your in-app billing implementation with actual purchases, follow these steps:</p>
-
-<ol>
-  <li><strong>Upload your application as a draft application to the publisher site.</strong>
-    <p>You do not need to publish your application to perform end-to-end testing with real product
-    IDs; you only need to upload your application as a draft application. However, you must sign
-    your application with your release key before you upload it as a draft application. Also, the
-    version number of the uploaded application must match the version number of the application you
-    load to your device for testing. To learn how to upload an application to Google Play, see
-    <a href="http://market.android.com/support/bin/answer.py?answer=113469">Uploading
-    applications</a>.</p>
-  </li>
-  <li><strong>Add items to the application's product list.</strong>
-    <p>Make sure that you publish the items (the application can remain unpublished). See <a
-    href="{@docRoot}guide/market/billing/billing_admin.html#billing-catalog">Creating a product
-    list</a> to learn how to do this.</p>
-  </li>
-  <li><strong>Install your application on an Android-powered device.</strong>
-    <p>You cannot use the emulator to test in-app billing; you must install your application on a
-    device to test in-app billing.</p>
-    <p>To learn how to install an application on a device, see <a
-    href="{@docRoot}guide/developing/building/building-cmdline.html#RunningOnDevice">Running on a
-    device</a>.</p>
-  </li>
- <li><strong>Make one of your test accounts the primary account on your device.</strong>
-    <p>To perform end-to-end testing of in-app billing, the primary account on your device must be
-    one of the <a
-    href="{@docRoot}guide/market/billing/billing_admin.html#billing-testing-setup">test accounts</a>
-    that you registered on the Google Play site. If the primary account on your device is not a
-    test account, you must do a factory reset of the device and then sign in with one of your test
-    accounts. To perform a factory reset, do the following:</p>
-    <ol>
-      <li>Open Settings on your device.</li>
-      <li>Touch <strong>Privacy</strong>.</li>
-      <li>Touch <strong>Factory data reset</strong>.</li>
-      <li>Touch <strong>Reset phone</strong>.</li>
-      <li>After the phone resets, be sure to sign in with one of your test accounts during the
-      device setup process.</li>
-    </ol>
-  </li>
-  <li><strong>Verify that your device is running a supported version of the Google Play
-  application or the MyApps application.</strong>
-    <p>If your device is running Android 3.0, in-app billing requires version 5.0.12 (or higher) of
-    the MyApps application. If your device is running any other version of Android, in-app billing
-    requires version 2.3.4 (or higher) of the Google Play application. To learn how to check the
-    version of the Google Play application, see <a
-    href="http://market.android.com/support/bin/answer.py?answer=190860">Updating Google
-    Play</a>.</p>
-  </li>
-  <li><strong>Make in-app purchases in your application.</strong></li>
-</ol>
-
-<p class="note"><strong>Note:</strong> The only way to change the primary account on a device is to
-do a factory reset, making sure you log on with your primary account first.</p>
-
-<p>When you are finished testing your in-app billing implementation, you are ready to
-publish your application on Google Play. You can follow the normal steps for <a
-href="{@docRoot}guide/publishing/preparing.html">preparing</a>, <a
-href="{@docRoot}guide/publishing/app-signing.html">signing</a>, and <a
-href="{@docRoot}guide/publishing/publishing.html">publishing your application</a>.
-</p>
-
diff --git a/docs/html/guide/market/billing/index.jd b/docs/html/guide/market/billing/index.jd
deleted file mode 100755
index 036761f..0000000
--- a/docs/html/guide/market/billing/index.jd
+++ /dev/null
@@ -1,94 +0,0 @@
-page.title=In-app Billing
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Topics</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and
-    Design</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
-    Billing</a></li>
-    <li><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering In-app
-    Billing</a></li>
-  </ol>
-  <h2>Reference</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-    Reference</a></li>
-  </ol>
-  <h2>Downloads</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">Sample
-    Application</a></li>
-  </ol>  
-</div>
-</div>
-
-<p>Google Play In-app Billing is a Google Play service that lets you sell digital content in
-your applications. You can use the service to sell a wide range of content, including downloadable
-content such as media files or photos, and virtual content such as game levels or potions.</p>
-
-<p>When you use Google Play's in-app billing service to sell an item, Google Play handles all
-checkout details so your application never has to directly process any financial transactions.
-Google Play uses the same checkout service that is used for application purchases, so your users
-experience a consistent and familiar purchase flow (see figure 1). Also, the transaction fee for
-in-app purchases is the same as the transaction fee for application purchases (30%).</p>
-
-<p>Any application that you publish through Google Play can implement in-app billing. No special
-account or registration is required other than a Google Play app publisher account and a Google
-Checkout Merchant account. Also, because the service uses no dedicated framework APIs, you can add
-in-app billing to any application that uses a minimum API level of 4 or higher.</p>
-
-<p>To help you integrate in-app billing into your application, the Android SDK provides a sample
-application that demonstrates a simple implementation of in-app billing. The sample application
-contains examples of billing-related classes you can use to implement in-app billing in your
-application. It also contains examples of the database, user interface, and business logic you might
-use to implement in-app billing.</p>
-
-<p class="caution"><strong>Important</strong>: Although the sample application is a working example
-of how you can implement in-app billing, we <em>strongly recommend</em> that you modify and
-obfuscate the sample code before you use it in a production application. For more information, see
-<a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security and Design</a>.</p>
-
-<img src="{@docRoot}images/billing_checkout_flow.png" height="382" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Applications initiate in-app billing requests through their own UI
-  (first screen). Google Play responds to the request by providing the checkout user interface
-  (middle screen). When checkout is complete, the application resumes.
-</p>
-
-<p>To learn more about Google Play's in-app billing service and start integrating it into your
-applications, read the following documents:</p>
-
-<dl>
-  <dt><strong><a href="{@docRoot}guide/market/billing/billing_overview.html">Overview of In-app
-  Billing</a></strong></dt>
-    <dd>Learn how the service works and what a typical in-app billing implementation looks
-    like.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/billing/billing_integrate.html">Implementing
-  In-app Billing</a></strong></dt>
-    <dd>Use this step-by-step guide to start incorporating in-app billing into your
-    application.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/billing/billing_best_practices.html">Security
-  and Design</a></strong></dt>
-    <dd>Review these best practices to help ensure that your in-app billing implementation is
-    secure and well designed.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/billing/billing_testing.html">Testing In-app
-  Billing</a></strong></dt>
-    <dd>Understand how the in-app billing test tools work and learn how to test your in-app billing
-    implementation.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/billing/billing_admin.html">Administering
-  In-app Billing</a></strong></dt>
-    <dd>Learn how to set up your product list, register test accounts, and handle refunds.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/billing/billing_reference.html">In-app Billing
-  Reference</a></strong></dt>
-    <dd>Get detailed information about Google Play response codes and the in-app billing
-    interface.</dd>
-</dl>
-
diff --git a/docs/html/guide/market/expansion-files.jd b/docs/html/guide/market/expansion-files.jd
deleted file mode 100644
index 36b8f9c..0000000
--- a/docs/html/guide/market/expansion-files.jd
+++ /dev/null
@@ -1,1270 +0,0 @@
-page.title=APK Expansion Files
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>Recommended for most apps that exceed the 50MB APK limit</li>
-  <li>You can provide up to 4GB of additional data for each APK</li>
-  <li>Google Play hosts and serves the expansion files at no charge</li>
-  <li>The files can be any file type you want and are saved to the device's shared storage</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#Overview">Overview</a>
-    <ol>
-      <li><a href="#Filename">File name format</a></li>
-      <li><a href="#StorageLocation">Storage location</a></li>
-      <li><a href="#DownloadProcess">Download process</a></li>
-      <li><a href="#Checklist">Development checklist</a></li>
-    </ol>
-  </li>
-  <li><a href="#Rules">Rules and Limitations</a></li>
-  <li><a href="#Downloading">Downloading the Expansion Files</a>
-    <ol>
-      <li><a href="#AboutLibraries">About the Downloader Library</a></li>
-      <li><a href="#Preparing">Preparing to use the Downloader Library</a></li>
-      <li><a href="#Permissions">Declaring user permissions</a></li>
-      <li><a href="#DownloaderService">Implementing the downloader service</a></li>
-      <li><a href="#AlarmReceiver">Implementing the alarm receiver</a></li>
-      <li><a href="#Download">Starting the download</a></li>
-      <li><a href="#Progress">Receiving download progress</a></li>
-    </ol>
-  </li>
-  <li><a href="#ExpansionPolicy">Using APKExpansionPolicy</a></li>
-  <li><a href="#ReadingTheFile">Reading the Expansion File</a>
-    <ol>
-      <li><a href="#GettingFilenames">Getting the file names</a></li>
-      <li><a href="#ZipLib">Using the APK Expansion Zip Library</a></li>
-    </ol>
-  </li>
-  <li><a href="#Testing">Testing Your Expansion Files</a>
-    <ol>
-      <li><a href="#TestingReading">Testing file reads</a></li>
-      <li><a href="#TestingReading">Testing file downloads</a></li>
-    </ol>
-  </li>
-  <li><a href="#Updating">Updating Your Application</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a></li>
-  <li><a href="{@docRoot}guide/market/publishing/multiple-apks.html">Multiple
-APK Support</a></li>
-</ol>
-</div>
-</div>
-
-
-
-<p>Google Play currently requires that your APK file be no more than 50MB. For most
-applications, this is plenty of space for all the application's code and assets.
-However, some apps need more space for high-fidelity graphics, media files, or other large assets.
-Previously, if your app exceeded 50MB, you had to host and download the additional resources
-yourself when the user opens the app. Hosting and serving the extra files can be costly, and the
-user experience is often less than ideal. To make this process easier for you and more pleasant
-for users, Google Play allows you to attach two large expansion files that supplement your
-APK.</p>
-
-<p>Google Play hosts the expansion files for your application and serves them to the device at
-no cost to you. The expansion files are saved to the device's shared storage location (the
-SD card or USB-mountable partition; also known as the "external" storage) where your app can access
-them. On most devices, Google Play downloads the expansion file(s) at the same time it
-downloads the APK, so your application has everything it needs when the user opens it for the
-first time. In some cases, however, your application must download the files from Google Play
-when your application starts.</p>
-
-
-
-<h2 id="Overview">Overview</h2>
-
-<p>Each time you upload an APK using the Google Play Android Developer Console, you have the option to
-add one or two expansion files to the APK. Each file can be up to 2GB and it can be any format you
-choose, but we recommend you use a compressed file to conserve bandwidth during the download.
-Conceptually, each expansion file plays a different role:</p>
-
-<ul>
-  <li>The <strong>main</strong> expansion file is the
-primary expansion file for additional resources required by your application.</li>
-  <li>The <strong>patch</strong> expansion file is optional and intended for small updates to the
-main expansion file.</li>
-</ul>
-
-<p>While you can use the two expansion files any way you wish, we recommend that the main
-expansion file deliver the primary assets and should rarely if ever updated; the patch expansion
-file should be smaller and serve as a “patch carrier,” getting updated with each major
-release or as necessary.</p>
-
-<p>However, even if your application update requires only a new patch expansion file, you still must
-upload a new APK with an updated <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-versionCode}</a> in the manifest. (The
-Developer Console does not allow you to upload an expansion file to an existing APK.)</p>
-
-<p class="note"><strong>Note:</strong> The patch expansion file is semantically the same as the
-main expansion file&mdash;you can use each file any way you want. The system does
-not use the patch expansion file to perform patching for your app. You must perform patching
-yourself or be able to distinguish between the two files.</p>
-
-
-
-<h3 id="Filename">File name format</h3>
-
-<p>Each expansion file you upload can be any format you choose (ZIP, PDF, MP4, etc.). Regardless of
-the file type, Google Play considers them opaque binary blobs and renames the files
-using the following scheme:</p>
-
-<pre class="classic no-pretty-print">
-[main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
-</pre>
-
-<p>There are three components to this scheme:</p>
-
-<dl>
-  <dt>{@code main} or {@code patch}</dt>
-    <dd>Specifies whether the file is the main or patch expansion file. There can be
-only one main file and one patch file for each APK.</dd>
-  <dt>{@code &lt;expansion-version&gt;}</dt>
-    <dd>This is an integer that matches the version code of the APK with which the expansion is
-<em>first</em> associated (it matches the application's <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
-value).
-    <p>"First" is emphasized because although the Developer Console allows you to
-re-use an uploaded expansion file with a new APK, the expansion file's name does not change&mdash;it
-retains the version applied to it when you first uploaded the file.</p></dd>
-  <dt>{@code &lt;package-name&gt;}</dt> 
-    <dd>Your application's Java-style package name.</dd>
-</dl>
-
-<p>For example, suppose your APK version is 314159 and your package name is com.example.app. If you
-upload a main expansion file, the file is renamed to:</p>
-<pre class="classic no-pretty-print">main.314159.com.example.app.obb</pre>
-
-
-<h3 id="StorageLocation">Storage location</h3>
-
-<p>When Google Play downloads your expansion files to a device, it saves them to the system's
-shared storage location. To ensure proper behavior, you must not delete, move, or rename the
-expansion files. In the event that your application must perform the download from Google Play
-itself, you must save the files to the exact same location.</p>
-
-<p>The specific location for your expansion files is:</p>
-
-<pre class="classic no-pretty-print">
-&lt;shared-storage&gt;/Android/obb/&lt;package-name&gt;/
-</pre>
-
-<ul>
-  <li>{@code &lt;shared-storage&gt;} is the path to the shared storage space, available from
-{@link android.os.Environment#getExternalStorageDirectory()}.</li>
-  <li>{@code &lt;package-name&gt;} is your application's Java-style package name, available
-from {@link android.content.Context#getPackageName()}.</li>
-</ul>
-
-<p>For each application, there are never more than two expansion files in this directory.
-One is the main expansion file and the other is the patch expansion file (if necessary). Previous
-versions are overwritten when you update your application with new expansion files.</p>
-
-<p>If you must unpack the contents of your expansion files, <strong>do not</strong> delete the
-{@code .obb} expansion files afterwards and <strong>do not</strong> save the unpacked data
-in the same directory. You should save your unpacked files in the directory
-specified by {@link android.content.Context#getExternalFilesDir getExternalFilesDir()}. However,
-if possible, it's best if you use an expansion file format that allows you to read directly from
-the file instead of requiring you to unpack the data. For example, we've provided a library
-project called the <a href="#ZipLib">APK Expansion Zip Library</a> that reads your data directly
-from the ZIP file.</p>
-
-<p class="note"><strong>Note:</strong> Unlike APK files, any files saved on the shared storage can
-be read by the user and other applications.</p>
-
-<p class="note"><strong>Tip:</strong> If you're packaging media files into a ZIP, you can use media
-playback calls on the files with offset and length controls (such as {@link
-android.media.MediaPlayer#setDataSource(FileDescriptor,long,long) MediaPlayer.setDataSource()} and
-{@link android.media.SoundPool#load(FileDescriptor,long,long,int) SoundPool.load()}) without the
-need to unpack your ZIP. In order for this to work, you must not perform additional compression on
-the media files when creating the ZIP packages. For example, when using the <code>zip</code> tool,
-you should use the <code>-n</code> option to specify the file suffixes that should not be
-compressed: <br/>
-<code>zip -n .mp4;.ogg main_expansion media_files</code></p>
-
-
-<h3 id="DownloadProcess">Download process</h3>
-
-<p>Most of the time, Google Play downloads and saves your expansion files at the same time it
-downloads the APK to the device. However, in some cases Google Play
-cannot download the expansion files or the user might have deleted previously downloaded expansion
-files. To handle these situations, your app must be able to download the files
-itself when the main activity starts, using a URL provided by Google Play.</p>
-
-<p>The download process from a high level looks like this:</p>
-
-<ol>
-  <li>User selects to install your app from Google Play.</li>
-  <li>If Google Play is able to download the expansion files (which is the case for most
-devices), it downloads them along with the APK.
-     <p>If Google Play is unable to download the expansion files, it downloads the
-APK only.</p>
-  </li>
-  <li>When the user launches your application, your app must check whether the expansion files are
-already saved on the device.
-    <ol>
-      <li>If yes, your app is ready to go.</li>
-      <li>If no, your app must download the expansion files over HTTP from Google Play. Your app
-must send a request to the Google Play client using the Google Play's <a
-href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service, which
-responds with the name, file size, and URL for each expansion file. With this information, you then
-download the files and save them to the proper <a href="#StorageLocation">storage location</a>.</li>
-    </ol>
-  </li>
-</ol>
-
-<p class="caution"><strong>Caution:</strong> It is critical that you include the necessary code to
-download the expansion files from Google Play in the event that the files are not already on the
-device when your application starts. As discussed in the following section about <a
-href="#Downloading">Downloading the Expansion Files</a>, we've made a library available to you that
-greatly simplifies this process and performs the download from a service with a minimal amount of
-code from you.</p>
-
-
-
-
-<h3 id="Checklist">Development checklist</h3>
-
-<p>Here's a summary of the tasks you should perform to use expansion files with your
-application:</p>
-
-<ol>
-  <li>First determine whether your application absolutely requires more than 50MB per installation.
-Space is precious and you should keep your total application size as small as possible. If your app
-uses more than 50MB in order to provide multiple versions of your graphic assets for multiple screen
-densities, consider instead publishing <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APKs</a> in which each APK
-contains only the assets required for the screens that it targets.</li>
-  <li>Determine which application resources to separate from your APK and package them in a
-file to use as the main expansion file.
-    <p>Normally, you should only use the second patch expansion file when performing updates to
-the main expansion file. However, if your resources exceed the 2GB limit for the main
-expansion file, you can use the patch file for the rest of your assets.</p>
-  </li>
-  <li>Develop your application such that it uses the resources from your expansion files in the
-device's <a href="#StorageLocation">shared storage location</a>.
-    <p>Remember that you must not delete, move, or rename the expansion files.</p>
-    <p>If your application doesn't demand a specific format, we suggest you create ZIP files for 
-your expansion files, then read them using the <a href="#ZipLib">APK Expansion Zip
-Library</a>.</p>
-  </li>
-  <li>Add logic to your application's main activity that checks whether the expansion files
-are on the device upon start-up. If the files are not on the device, use Google Play's <a
-href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service to request URLs
-for the expansion files, then download and save them.
-    <p>To greatly reduce the amount of code you must write and ensure a good user experience
-during the download, we recommend you use the <a href="AboutLibraries">Downloader
-Library</a> to implement your download behavior.</p>
-    <p>If you build your own download service instead of using the library, be aware that you
-must not change the name of the expansion files and must save them to the proper
-<a href="#StorageLocation">storage location</a>.</p></li>
-</ol>
-
-<p>Once you've finished your application development, follow the guide to <a href="#Testing">Testing
-Your Expansion Files</a>.</p>
-
-
-
-
-
-
-<h2 id="Rules">Rules and Limitations</h2>
-
-<p>Adding APK expansion files is a feature available when you upload your application using the
-Developer Console. When uploading your application for the first time or updating an
-application that uses expansion files, you must be aware of the following rules and limitations:</p>
-
-<ol type="I">
-  <li>Each expansion file can be no more than 2GB.</li>
-  <li>In order to download your expansion files from Google Play, <strong>the user must have
-acquired your application from Google Play</strong>. Google Play will not
-provide the URLs for your expansion files if the application was installed by other means.</li>
-  <li>When performing the download from within your application, the URL that Google Play
-provides for each file is unique for every download and each one expires shortly after it is given
-to your application.</li>
-  <li>If you update your application with a new APK or upload <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APKs</a> for the same
-application, you can select expansion files that you've uploaded for a previous APK. <strong>The
-expansion file's name does not change</strong>&mdash;it retains the version received by the APK to
-which the file was originally associated.</li>
-  <li>If you use expansion files in combination with <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">multiple APKs</a> in order to
-provide different expansion files for different devices, you still must upload separate APKs
-for each device in order to provide a unique  <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a>
-value and declare different <a href="{@docRoot}guide/appendix/market-filters.html">filters</a> for
-each APK.</li>
-  <li>You cannot issue an update to your application by changing the expansion files
-alone&mdash;<strong>you must upload a new APK</strong> to update your app. If your changes only
-concern the assets in your expansion files, you can update your APK simply by changing the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a> (and
-perhaps also the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code
-versionName}</a>).</p></li>
-  <li><strong>Do not save other data into your <code>obb/</code>
-directory</strong>. If you must unpack some data, save it into the location specified by {@link
-android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
-  <li><strong>Do not delete or rename the {@code .obb} expansion file</strong> (unless you're
-performing an update). Doing so will cause Google Play (or your app itself) to repeatedly
-download the expansion file.</li>
-  <li>When updating an expansion file manually, you must delete the previous expansion file.</li>
-</ol>
-
-
-
-
-
-
-
-
-
-<h2 id="Downloading">Downloading the Expansion Files</h2>
-
-<p>In most cases, Google Play downloads and saves your expansion files to the device at the same
-time it installs or updates the APK. This way, the expansion files are available when your
-application launches for the first time. However, in some cases your app must download the
-expansion files itself by requesting them from a URL provided to you in a response
-from Google Play's <a
-href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service.</p>
-
-<p>The basic logic you need to download your expansion files is the following:</p>
-
-<ol>
-  <li>When your application starts, look for the expansion files on the <a
-href="#StorageLocation">shared storage location</a> (in the
-<code>Android/obb/&lt;package-name&gt;/</code> directory).
-    <ol type="a">
-      <li>If the expansion files are there, you're all set and your application can continue.</li>
-      <li>If the expansion files are <em>not</em> there:
-        <ol>
-          <li>Perform a request using Google Play's <a
-href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> to get your
-app's expansion file names, sizes, and URLs.</li> 
-          <li>Use the URLs provided by Google Play to download the expansion files and save
-the expansion files. You <strong>must</strong> save the files to the <a
-href="#StorageLocation">shared storage location</a>
-(<code>Android/obb/&lt;package-name&gt;/</code>) and use the exact file name provided
-by Google Play's response.
-            <p class="note"><strong>Note:</strong> The URL that Google Play provides for your
-expansion files is unique for every download and each one expires shortly after it is given to
-your application.</p>
-          </li>
-        </ol>
-      </li>
-    </ol>
-  </li>
-</ol>
-
-
-<p>If your application is free (not a paid app), then you probably haven't used the <a
-href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a> service. It's primarily
-designed for you to enforce
-licensing policies for your application and ensure that the user has the right to
-use your app (he or she rightfully paid for it on Google Play). In order to facilitate the
-expansion file functionality, the licensing service has been enhanced to provide a response
-to your application that includes the URL of your application's expansion files that are hosted
-on Google Play. So, even if your application is free for users, you need to include the
-License Verification Library (LVL) to use APK expansion files. Of course, if your application
-is free, you don't need to enforce license verification&mdash;you simply need the
-library to perform the request that returns the URL of your expansion files.</p>
-
-<p class="note"><strong>Note:</strong> Whether your application is free or not, Google Play
-returns the expansion file URLs only if the user acquired your application from Google Play.</p>
-
-<p>In addition to the LVL, you need a set of code that downloads the expansion files
-over an HTTP connection and saves them to the proper location on the device's shared storage.
-As you build this procedure into your application, there are several issues you should take into
-consideration:</p>
-
-<ul>
-  <li>The device might not have enough space for the expansion files, so you should check
-before beginning the download and warn the user if there's not enough space.</li>
-  <li>File downloads should occur in a background service in order to avoid blocking the user
-interaction and allow the user to leave your app while the download completes.</li>
-  <li>A variety of errors might occur during the request and download that you must
-gracefully handle.</li>
-  <li>Network connectivity can change during the download, so you should handle such changes and
-if interrupted, resume the download when possible.</li>
-  <li>While the download occurs in the background, you should provide a notification that
-indicates the download progress, notifies the user when it's done, and takes the user back to
-your application when selected.</li>
-</ul>
-
-
-<p>To simplify this work for you, we've built the <a href="#AboutLibraries">Downloader Library</a>,
-which requests the expansion file URLs through the licensing service, downloads the expansion files,
-performs all of the tasks listed above, and even allows your activity to pause and resume the
-download. By adding the Downloader Library and a few code hooks to your application, almost all the
-work to download the expansion files is already coded for you. As such, in order to provide the best
-user experience with minimal effort on your behalf, we recommend you use the Downloader Library to
-download your expansion files. The information in the following sections explain how to integrate
-the library into your application.</p>
-
-<p>If you'd rather develop your own solution to download the expansion files using the Google
-Play URLs, you must follow the <a href="{@docRoot}guide/market/licensing/index.html">Application
-Licensing</a> documentation to perform a license request, then retrieve the expansion file names,
-sizes, and URLs from the response extras. You should use the <a href="#ExpansionPolicy">{@code
-APKExpansionPolicy}</a> class (included in the License Verification Library) as your licensing
-policy, which captures the expansion file names, sizes, and URLs from the licensing service..</p>
-
-
-
-<h3 id="AboutLibraries">About the Downloader Library</h3>
-
-<p>To use APK expansion files with your application and provide the best user experience with
-minimal effort on your behalf, we recommend you use the Downloader Library that's included in the
-Google Market Apk Expansion package. This library downloads your expansion files in a
-background service, shows a user notification with the download status, handles network
-connectivity loss, resumes the download when possible, and more.</p>
-
-<p>To implement expansion file downloads using the Downloader Library, all you need to do is:</p>
-
-<ul>
-  <li>Extend a special {@link android.app.Service} subclass and {@link
-android.content.BroadcastReceiver} subclass that each require just a few
-lines of code from you.</li>
-  <li>Add some logic to your main activity that checks whether the expansion files have
-already been downloaded and, if not, invokes the download process and displays a
-progress UI.</li>
-  <li>Implement a callback interface with a few methods in your main activity that
-receives updates about the download progress.</li>
-</ul>
-
-<p>The following sections explain how to set up your app using the Downloader Library.</p>
-
-
-<h3 id="Preparing">Preparing to use the Downloader Library</h3>
-
-<p>To use the Downloader Library, you need to
-download two packages from the SDK Manager and add the appropriate libraries to your
-application.</p>
-
-<p>First, open the <a href="{@docRoot}sdk/adding-components.html">Android SDK Manager</a>, expand
-<em>Extras</em> and download:</p>
-<ul>
-  <li><em>Google Market Licensing package</em></li>
-  <li><em>Google Market Apk Expansion package</em></li>
-</ul>
-
-<p>If you're using Eclipse, create a project for each library and add it to your app:</p>
-<ol>
-  <li>Create a new Library Project for the License Verification Library and Downloader
-Library. For each library:
-    <ol>
-      <li>Begin a new Android project.</li>
-      <li>Select <strong>Create project from existing
-source</strong> and choose the library from the {@code &lt;sdk&gt;/extras/google/} directory
-({@code market_licensing/} for the License Verification Library or {@code
-market_apk_expansion/downloader_library/} for the Downloader Library).</li>
-      <li>Specify a <em>Project Name</em> such as "Google Play License Library" and "Google Play
-Downloader
-Library"</li>
-      <li>Click <strong>Finish</strong>.</li>
-    </ol>
-<p class="note"><strong>Note:</strong> The Downloader Library depends on the License
-Verification Library. Be sure to add the License
-Verification Library to the Downloader Library's project properties (same process as
-steps 2 and 3 below).</p>
-  </li>
-  <li>Right-click the Android project in which you want to use APK expansion files and
-select <strong>Properties</strong>.</li>
-  <li>In the <em>Library</em> panel, click <strong>Add</strong> to select and add each of the
-libraries to your application.</li>
-</ol>
-
-<p>Or, from a command line, update your project to include the libraries:</p>
-<ol>
-  <li>Change directories to the <code>&lt;sdk&gt;/tools/</code> directory.</li>
-  <li>Execute <code>android update project</code> with the {@code --library} option to add both the
-LVL and the Downloader Library to your project. For example:
-<pre class="no-pretty-print">
-android update project --path ~/Android/MyApp \
---library ~/android_sdk/extras/google/market_licensing \
---library ~/android_sdk/extras/google/market_apk_expansion/downloader_library
-</pre>
-  </li>
-</ol>
-
-<p>With both the License Verification Library and Downloader Library added to your
-application, you'll be able to quickly integrate the ability to download expansion files from
-Google Play. The format that you choose for the expansion files and how you read them
-from the shared storage is a separate implementation that you should consider based on your
-application needs.</p>
-
-<p class="note"><strong>Tip:</strong> The Apk Expansion package includes a sample
-application
-that shows how to use the Downloader Library in an app. The sample uses a third library
-available in the Apk Expansion package called the APK Expansion Zip Library. If
-you plan on
-using ZIP files for your expansion files, we suggest you also add the APK Expansion Zip Library to
-your application. For more information, see the section below
-about <a href="#ZipLib">Using the APK Expansion Zip Library</a>.</p>
-
-
-
-<h3 id="Permissions">Declaring user permissions</h3>
-
-<p>In order to download the expansion files, the Downloader Library
-requires several permissions that you must declare in your application's manifest file. They
-are:</p>
-
-<pre>
-&lt;manifest ...>
-    &lt;!-- Required to access Google Play Licensing -->
-    &lt;uses-permission android:name="com.android.vending.CHECK_LICENSE" />
-
-    &lt;!-- Required to download files from Google Play -->
-    &lt;uses-permission android:name="android.permission.INTERNET" />
-
-    &lt;!-- Required to keep CPU alive while downloading files (NOT to keep screen awake) -->
-    &lt;uses-permission android:name="android.permission.WAKE_LOCK" />
-
-    &lt;!-- Required to poll the state of the network connection and respond to changes -->
-    &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
-
-    &lt;!-- Required to check whether Wi-Fi is enabled -->
-    &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-
-    &lt;!-- Required to read and write the expansion files on shared storage -->
-    &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    ...
-&lt;/manifest>
-</pre>
-
-<p class="note"><strong>Note:</strong> By default, the Downloader Library requires API
-level 4, but the APK Expansion Zip Library requires API level 5.</p>
-
-
-<h3 id="DownloaderService">Implementing the downloader service</h3>
-
-<p>In order to perform downloads in the background, the Downloader Library provides its
-own {@link android.app.Service} subclass called {@code DownloaderService} that you should extend. In
-addition to downloading the expansion files for you, the {@code DownloaderService} also:</p>
-
-<ul>
-  <li>Registers a {@link android.content.BroadcastReceiver} that listens for changes to the
-device's network connectivity (the {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}
-broadcast) in order to pause the download when necessary (such as due to connectivity loss) and
-resume the download when possible (connectivity is acquired).</li>
-  <li>Schedules an {@link android.app.AlarmManager#RTC_WAKEUP} alarm to retry the download for
-cases in which the service gets killed.</li>
-  <li>Builds a custom {@link android.app.Notification} that displays the download progress and
-any errors or state changes.</li>
-  <li>Allows your application to manually pause and resume the download.</li>
-  <li>Verifies that the shared storage is mounted and available, that the files don't already exist,
-and that there is enough space, all before downloading the expansion files. Then notifies the user
-if any of these are not true.</li>
-</ul>
-
-<p>All you need to do is create a class in your application that extends the {@code
-DownloaderService} class and override three methods to provide specific application details:</p>
-
-<dl>
-  <dt>{@code getPublicKey()}</dt>
-    <dd>This must return a string that is the Base64-encoded RSA public key for your publisher
-account, available from the profile page on the Developer Console (see <a
-href="{@docRoot}guide/market/licensing/setting-up.html">Setting Up for Licensing</a>).</dd>
-  <dt>{@code getSALT()}</dt>
-    <dd>This must return an array of random bytes that the licensing {@code Policy} uses to
-create an <a
-href="{@docRoot}guide/market/licensing/adding-licensing.html#impl-Obfuscator">{@code
-Obfuscator}</a>. The salt ensures that your obfuscated {@link android.content.SharedPreferences}
-file in which your licensing data is saved will be unique and non-discoverable.</dd>
-  <dt>{@code getAlarmReceiverClassName()}</dt>
-    <dd>This must return the class name of the {@link android.content.BroadcastReceiver} in
-your application that should receive the alarm indicating that the download should be
-restarted (which might happen if the downloader service unexpectedly stops).</dd>
-</dl>
-
-<p>For example, here's a complete implementation of {@code DownloaderService}:</p>
-
-<pre>
-public class SampleDownloaderService extends DownloaderService {
-    // You must use the public key belonging to your publisher account
-    public static final String BASE64_PUBLIC_KEY = "YourLVLKey";
-    // You should also modify this salt
-    public static final byte[] SALT = new byte[] { 1, 42, -12, -1, 54, 98,
-            -100, -12, 43, 2, -8, -4, 9, 5, -106, -107, -33, 45, -1, 84
-    };
-
-    &#64;Override
-    public String getPublicKey() {
-        return BASE64_PUBLIC_KEY;
-    }
-
-    &#64;Override
-    public byte[] getSALT() {
-        return SALT;
-    }
-
-    &#64;Override
-    public String getAlarmReceiverClassName() {
-        return SampleAlarmReceiver.class.getName();
-    }
-}
-</pre>
-
-<p class="caution"><strong>Notice:</strong> You must update the {@code BASE64_PUBLIC_KEY} value
-to be the public key belonging to your publisher account. You can find the key in the Developer
-Console under your profile information. This is necessary even when testing
-your downloads.</p>
-
-<p>Remember to declare the service in your manifest file:</p>
-<pre>
-&lt;application ...>
-    &lt;service android:name=".SampleDownloaderService" />
-    ...
-&lt;/application>
-</pre>
-
-
-
-<h3 id="AlarmReceiver">Implementing the alarm receiver</h3>
-
-<p>In order to monitor the progress of the file downloads and restart the download if necessary, the
-{@code DownloaderService} schedules an {@link android.app.AlarmManager#RTC_WAKEUP} alarm that
-delivers an {@link android.content.Intent} to a {@link android.content.BroadcastReceiver} in your
-application. You must define the {@link android.content.BroadcastReceiver} to call an API
-from the Downloader Library that checks the status of the download and restarts
-it if necessary.</p>
-
-<p>You simply need to override the {@link android.content.BroadcastReceiver#onReceive
-onReceive()} method to call {@code
-DownloaderClientMarshaller.startDownloadServiceIfRequired()}.</p>
-
-<p>For example:</p>
-
-<pre>
-public class SampleAlarmReceiver extends BroadcastReceiver {
-    &#64;Override
-    public void onReceive(Context context, Intent intent) {
-        try {
-            DownloaderClientMarshaller.startDownloadServiceIfRequired(context, intent,
-                    SampleDownloaderService.class);
-        } catch (NameNotFoundException e) {
-            e.printStackTrace();
-        }      
-    }
-}
-</pre>
-
-<p>Notice that this is the class for which you must return the name
-in your service's {@code getAlarmReceiverClassName()} method (see the previous section).</p>
-
-<p>Remember to declare the receiver in your manifest file:</p>
-<pre>
-&lt;application ...>
-    &lt;receiver android:name=".SampleAlarmReceiver" />
-    ...
-&lt;/application>
-</pre>
-
-
-
-<h3 id="Download">Starting the download</h3>
-
-<p>The main activity in your application (the one started by your launcher icon) is
-responsible for verifying whether the expansion files are already on the device and initiating
-the download if they are not.</p>
-
-<p>Starting the download using the Downloader Library requires the following
-procedures:</p>
-
-<ol>
-  <li>Check whether the files have been downloaded.
-    <p>The Downloader Library includes some APIs in the {@code Helper} class to
-help with this process:</p>
-  <ul>
-    <li>{@code getExtendedAPKFileName(Context, c, boolean mainFile, int
-versionCode)}</li>
-    <li>{@code doesFileExist(Context c, String fileName, long fileSize)}</li>
-  </ul>
-    <p>For example, the sample app provided in the Apk Expansion package calls the
-following method in the activity's {@link android.app.Activity#onCreate onCreate()} method to check
-whether the expansion files already exist on the device:</p>
-<pre>
-boolean expansionFilesDelivered() {
-    for (XAPKFile xf : xAPKS) {
-        String fileName = Helpers.getExpansionAPKFileName(this, xf.mIsBase, xf.mFileVersion);
-        if (!Helpers.doesFileExist(this, fileName, xf.mFileSize, false))
-            return false;
-    }
-    return true;
-}        
-</pre>
-    <p>In this case, each {@code XAPKFile} object holds the version number and file size of a known
-expansion file and a boolean as to whether it's the main expansion file. (See the sample
-application's {@code SampleDownloaderActivity} class for details.)</p>
-    <p>If this method returns false, then the application must begin the download.</p>
-  </li>
-  <li>Start the download by calling the static method {@code
-DownloaderClientMarshaller.startDownloadServiceIfRequired(Context c, PendingIntent
-notificationClient, Class&lt;?> serviceClass)}.
-    <p>The method takes the following parameters:</p>
-    <ul>
-      <li><code>context</code>: Your application's {@link android.content.Context}.</li>
-      <li><code>notificationClient</code>: A {@link android.app.PendingIntent} to start your main
-activity. This is used in the {@link android.app.Notification} that the {@code DownloaderService}
-creates to show the download progress. When the user selects the notification, the system
-invokes the {@link android.app.PendingIntent} you supply here and should open the activity
-that shows the download progress (usually the same activity that started the download).</li>
-      <li><code>serviceClass</code>: The {@link java.lang.Class} object for your implementation of
-{@code DownloaderService}, required to start the service and begin the download if necessary.</li>
-    </ul>
-    <p>The method returns an integer that indicates
-whether or not the download is required. Possible values are:</p>
-    <ul>
-      <li>{@code NO_DOWNLOAD_REQUIRED}: Returned if the files already
-exist or a download is already in progress.</li>
-      <li>{@code LVL_CHECK_REQUIRED}: Returned if a license verification is
-required in order to acquire the expansion file URLs.</li>
-      <li>{@code DOWNLOAD_REQUIRED}: Returned if the expansion file URLs are already known,
-but have not been downloaded.</li>
-    </ul>
-    <p>The behavior for {@code LVL_CHECK_REQUIRED} and {@code DOWNLOAD_REQUIRED} are essentially the
-same and you normally don't need to be concerned about them. In your main activity that calls {@code
-startDownloadServiceIfRequired()}, you can simply check whether or not the response is {@code
-NO_DOWNLOAD_REQUIRED}. If the response is anything <em>other than</em> {@code NO_DOWNLOAD_REQUIRED},
-the Downloader Library begins the download and you should update your activity UI to
-display the download progress (see the next step). If the response <em>is</em> {@code
-NO_DOWNLOAD_REQUIRED}, then the files are available and your application can start.</p>
-    <p>For example:</p>
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-    // Check if expansion files are available before going any further
-    if (!expansionFilesDelivered()) {
-        // Build an Intent to start this activity from the Notification
-        Intent notifierIntent = new Intent(this, MainActivity.getClass());
-        notifierIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
-                                Intent.FLAG_ACTIVITY_CLEAR_TOP);
-        ...
-        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
-                notifierIntent, PendingIntent.FLAG_UPDATE_CURRENT);
-        
-        // Start the download service (if required)
-        int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
-                        pendingIntent, SampleDownloaderService.class);
-        // If download has started, initialize this activity to show download progress
-        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
-            // This is where you do set up to display the download progress (next step)
-            ...
-            return;
-        } // If the download wasn't necessary, fall through to start the app
-    }
-    startApp(); // Expansion files are available, start the app
-}
-</pre>
-  </li>
-  <li>When the {@code startDownloadServiceIfRequired()} method returns anything <em>other
-than</em> {@code NO_DOWNLOAD_REQUIRED}, create an instance of {@code IStub} by
-calling {@code DownloaderClientMarshaller.CreateStub(IDownloaderClient client, Class&lt;?>
-downloaderService)}. The {@code IStub} provides a binding between your activity to the downloader
-service such that your activity receives callbacks about the download progress.
-    <p>In order to instantiate your {@code IStub} by calling {@code CreateStub()}, you must pass it
-an implementation of the {@code IDownloaderClient} interface and your {@code DownloaderService}
-implementation. The next section about <a href="#Progress">Receiving download progress</a> discusses
-the {@code IDownloaderClient} interface, which you should usually implement in your {@link
-android.app.Activity} class so you can update the activity UI when the download state changes.</p>
-    <p>We recommend that you call {@code
-CreateStub()} to instantiate your {@code IStub} during your activity's {@link
-android.app.Activity#onCreate onCreate()} method, after {@code startDownloadServiceIfRequired()}
-starts the download. </p>
-    <p>For example, in the previous code sample for {@link android.app.Activity#onCreate
-onCreate()}, you can respond to the {@code startDownloadServiceIfRequired()} result like this:</p>
-<pre>
-        // Start the download service (if required)
-        int startResult = DownloaderClientMarshaller.startDownloadServiceIfRequired(this,
-                        pendingIntent, SampleDownloaderService.class);
-        // If download has started, initialize activity to show progress
-        if (startResult != DownloaderClientMarshaller.NO_DOWNLOAD_REQUIRED) {
-            // Instantiate a member instance of IStub
-            mDownloaderClientStub = DownloaderClientMarshaller.CreateStub(this,
-                    SampleDownloaderService.class);
-            // Inflate layout that shows download progress
-            setContentView(R.layout.downloader_ui);
-            return;
-        }
-</pre>
-
-    <p>After the {@link android.app.Activity#onCreate onCreate()} method returns, your activity
-receives a call to {@link android.app.Activity#onResume onResume()}, which is where you should then
-call {@code connect()} on the {@code IStub}, passing it your application's {@link
-android.content.Context}. Conversely, you should call
-{@code disconnect()} in your activity's {@link android.app.Activity#onStop onStop()} callback.</p>
-<pre>
-&#64;Override
-protected void onResume() {
-    if (null != mDownloaderClientStub) {
-        mDownloaderClientStub.connect(this);
-    }
-    super.onResume();
-}
-
-&#64;Override
-protected void onStop() {
-    if (null != mDownloaderClientStub) {
-        mDownloaderClientStub.disconnect(this);
-    }
-    super.onStop();
-}
-</pre>
-    <p>Calling {@code connect()} on the {@code IStub} binds your activity to the {@code
-DownloaderService} such that your activity receives callbacks regarding changes to the download
-state through the {@code IDownloaderClient} interface.</p>
-  </li>
-</ol>
-
-
-
-<h3 id="Progress">Receiving download progress</h3>
-
-<p>To receive updates regarding the download progress and to interact with the {@code
-DownloaderService}, you must implement the Downloader Library's {@code IDownloaderClient} interface.
-Usually, the activity you use to start the download should implement this interface in order to
-display the download progress and send requests to the service.</p>
-
-<p>The required interface methods for {@code IDownloaderClient} are:</p>
-
-<dl>
-  <dt>{@code onServiceConnected(Messenger m)}</dt>
-    <dd>After you instantiate the {@code IStub} in your activity, you'll receive a call to this
-method, which passes a {@link android.os.Messenger} object that's connected with your instance
-of {@code DownloaderService}. To send requests to the service, such as to pause and resume
-downloads, you must call {@code DownloaderServiceMarshaller.CreateProxy()} to receive the {@code
-IDownloaderService} interface connected to the service.
-    <p>A recommended implementation looks like this:</p>
-<pre>
-private IDownloaderService mRemoteService;
-...
-
-&#64;Override
-public void onServiceConnected(Messenger m) {
-    mRemoteService = DownloaderServiceMarshaller.CreateProxy(m);
-    mRemoteService.onClientUpdated(mDownloaderClientStub.getMessenger());
-}
-</pre>
-    <p>With the {@code IDownloaderService} object initialized, you can send commands to the
-downloader service, such as to pause and resume the download ({@code requestPauseDownload()}
-and {@code requestContinueDownload()}).</p>
-</dd>
-  <dt>{@code onDownloadStateChanged(int newState)}</dt>
-    <dd>The download service calls this when a change in download state occurs, such as the
-download begins or completes.
-      <p>The <code>newState</code> value will be one of several possible values specified in
-by one of the {@code IDownloaderClient} class's {@code STATE_*} constants.</p>
-      <p>To provide a useful message to your users, you can request a corresponding string
-for each state by calling {@code Helpers.getDownloaderStringResourceIDFromState()}. This
-returns the resource ID for one of the strings bundled with the Downloader
-Library. For example, the string "Download paused because you are roaming" corresponds to {@code
-STATE_PAUSED_ROAMING}.</p></dd>
-  <dt>{@code onDownloadProgress(DownloadProgressInfo progress)}</dt>
-    <dd>The download service calls this to deliver a {@code DownloadProgressInfo} object,
-which describes various information about the download progress, including estimated time remaining,
-current speed, overall progress, and total so you can update the download progress UI.</dd>
-</dl>
-<p class="note"><strong>Tip:</strong> For examples of these callbacks that update the download
-progress UI, see the {@code SampleDownloaderActivity} in the sample app provided with the
-Apk Expansion package.</p>
-
-<p>Some public methods for the {@code IDownloaderService} interface you might find useful are:</p>
-
-<dl>
-  <dt>{@code requestPauseDownload()}</dt>
-    <dd>Pauses the download.</dd>
-  <dt>{@code requestContinueDownload()}</dt>
-    <dd>Resumes a paused download.</dd>
-  <dt>{@code setDownloadFlags(int flags)}</dt>
-    <dd>Sets user preferences for network types on which its OK to download the files. The
-current implementation supports one flag, {@code FLAGS_DOWNLOAD_OVER_CELLULAR}, but you can add
-others. By default, this flag is <em>not</em> enabled, so the user must be on Wi-Fi to download
-expansion files. You might want to provide a user preference to enable downloads over
-the cellular network. In which case, you can call:
-<pre>
-mRemoteService.setDownloadFlags(IDownloaderService.FLAGS_DOWNLOAD_OVER_CELLULAR);
-</pre>
-</dd>
-</dl>
-
-
-
-
-<h2 id="ExpansionPolicy">Using APKExpansionPolicy</h2>
-
-<p>If you decide to build your own downloader service instead of using the Google Play
-<a href="#AboutLibraries">Downloader Library</a>, you should still use the {@code
-APKExpansionPolicy} that's provided in the License Verification Library. The {@code
-APKExpansionPolicy} class is nearly identical to {@code ServerManagedPolicy} (available in the
-Google Play License Verification Library) but includes additional handling for the APK expansion
-file response extras.</p>
-
-<p class="note"><strong>Note:</strong> If you <em>do use</em> the <a
-href="#AboutLibraries">Downloader Library</a> as discussed in the previous section, the
-library performs all interaction with the {@code APKExpansionPolicy} so you don't have to use
-this class directly.</p>
-
-<p>The class includes methods to help you get the necessary information about the available
-expansion files:</p>
-
-<ul>
-  <li>{@code getExpansionURLCount()}</li>
-  <li>{@code getExpansionURL(int index)}</li>
-  <li>{@code getExpansionFileName(int index)}</li>
-  <li>{@code getExpansionFileSize(int index)}</li>
-</ul>
-
-<p>For more information about how to use the {@code APKExpansionPolicy} when you're <em>not</em>
-using the <a
-href="#AboutLibraries">Downloader Library</a>, see the documentation for <a
-href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding Licensing to Your App</a>,
-which explains how to implement a license policy such as this one.</p>
-
-
-
-
-
-
-
-<h2 id="ReadingTheFile">Reading the Expansion File</h2>
-
-<p>Once your APK expansion files are saved on the device, how you read your files
-depends on the type of file you've used. As discussed in the <a href="#Overview">overview</a>, your
-expansion files can be any kind of file you
-want, but are renamed using a particular <a href="#Filename">file name format</a> and are saved to
-{@code &lt;shared-storage&gt;/Android/obb/&lt;package-name&gt;/}.</p>
-
-<p>Regardless of how you read your files, you should always first check that the external
-storage is available for reading. There's a chance that the user has the storage mounted to a
-computer over USB or has actually removed the SD card.</p>
-
-<p class="note"><strong>Note:</strong> When your application starts, you should always check whether
-the external storage space is available and readable by calling {@link
-android.os.Environment#getExternalStorageState()}. This returns one of several possible strings
-that represent the state of the external storage. In order for it to be readable by your
-application, the return value must be {@link android.os.Environment#MEDIA_MOUNTED}.</p>
-
-
-<h3 id="GettingFilenames">Getting the file names</h3>
-
-<p>As described in the <a href="#Overview">overview</a>, your APK expansion files are saved
-using a specific file name format:</p>
-
-<pre class="classic no-pretty-print">
-[main|patch].&lt;expansion-version&gt;.&lt;package-name&gt;.obb
-</pre>
-
-<p>To get the location and names of your expansion files, you should use the
-{@link android.os.Environment#getExternalStorageDirectory()} and {@link
-android.content.Context#getPackageName()} methods to construct the path to your files.</p>
-
-<p>Here's a method you can use in your application to get an array containing the complete path
-to both your expansion files:</p>
-
-<pre>
-// The shared path to all app expansion files
-private final static String EXP_PATH = "/Android/obb/";
-
-static String[] getAPKExpansionFiles(Context ctx, int mainVersion, int patchVersion) {
-    String packageName = ctx.getPackageName();
-    Vector&lt;String> ret = new Vector&lt;String>();
-    if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
-        // Build the full path to the app's expansion files
-        File root = Environment.getExternalStorageDirectory();
-        File expPath = new File(root.toString() + EXP_PATH + packageName);
-
-        // Check that expansion file path exists
-        if (expPath.exists()) {
-            if ( mainVersion > 0 ) {
-                String strMainPath = expPath + File.separator + "main." +
-                        mainVersion + "." + packageName + ".obb";
-                File main = new File(strMainPath);
-                if ( main.isFile() ) {
-                        ret.add(strMainPath);
-                }
-            }
-            if ( patchVersion > 0 ) {
-                String strPatchPath = expPath + File.separator + "patch." +
-                        mainVersion + "." + packageName + ".obb";
-                File main = new File(strPatchPath);
-                if ( main.isFile() ) {
-                        ret.add(strPatchPath);
-                }
-            }
-        }
-    }
-    String[] retArray = new String[ret.size()];
-    ret.toArray(retArray);
-    return retArray;
-}
-</pre>
-
-<p>You can call this method by passing it your application {@link android.content.Context}
-and the desired expansion file's version.</p>
-
-<p>There are many ways you could determine the expansion file version number. One simple way is to
-save the version in a {@link android.content.SharedPreferences} file when the download begins, by
-querying the expansion file name with the {@code APKExpansionPolicy} class's {@code
-getExpansionFileName(int index)} method. You can then get the version code by reading the {@link
-android.content.SharedPreferences} file when you want to access the expansion
-file.</p>
-
-<p>For more information about reading from the shared storage, see the <a
-href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">Data Storage</a>
-documentation.</p>
-
-
-
-<h3 id="ZipLib">Using the APK Expansion Zip Library</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h3>Reading media files from a ZIP</h3>
-  <p>If you're using your expansion files to store media files, a ZIP file still allows you to
-use Android media playback calls that provide offset and length controls (such as {@link
-android.media.MediaPlayer#setDataSource(FileDescriptor,long,long) MediaPlayer.setDataSource()} and
-{@link android.media.SoundPool#load(FileDescriptor,long,long,int) SoundPool.load()}). In order for
-this to work, you must not perform additional compression on the media files when creating the ZIP
-packages. For example, when using the <code>zip</code> tool, you should use the <code>-n</code>
-option to specify the file suffixes that should not be compressed:</p>
-<p><code>zip -n .mp4;.ogg main_expansion media_files</code></p>
-</div>
-</div>
-
-<p>The Google Market Apk Expansion package includes a library called the APK
-Expansion Zip Library (located in {@code
-&lt;sdk>/extras/google/google_market_apk_expansion/zip_file/}). This is an optional library that
-helps you read your expansion
-files when they're saved as ZIP files. Using this library allows you to easily read resources from
-your ZIP expansion files as a virtual file system.</p>
-
-<p>The APK Expansion Zip Library includes the following classes and APIs:</p>
-
-<dl>
-  <dt>{@code APKExpansionSupport}</dt>
-    <dd>Provides some methods to access expansion file names and ZIP files:
-      
-      <dl style="margin-top:1em">
-        <dt>{@code getAPKExpansionFiles()}</dt> 
-          <dd>The same method shown above that returns the complete file path to both expansion
-files.</dd>
-        <dt>{@code getAPKExpansionZipFile(Context ctx, int mainVersion, int
-patchVersion)}</dt>
-          <dd>Returns a {@code ZipResourceFile} representing the sum of both the main file and
-patch file. That is, if you specify both the <code>mainVersion</code> and the
-<code>patchVersion</code>, this returns a {@code ZipResourceFile} that provides read access to
-all the data, with the patch file's data merged on top of the main file.</dd>
-      </dl>
-    </dd>
-    
-  <dt>{@code ZipResourceFile}</dt>
-    <dd>Represents a ZIP file on the shared storage and performs all the work to provide a virtual
-file system based on your ZIP files. You can get an instance using {@code
-APKExpansionSupport.getAPKExpansionZipFile()} or with the {@code ZipResourceFile} by passing it the
-path to your expansion file. This class includes a variety of useful methods, but you generally
-don't need to access most of them. A couple of important methods are:
-
-      <dl style="margin-top:1em">
-        <dt>{@code getInputStream(String assetPath)}</dt>
-          <dd>Provides an {@link java.io.InputStream} to read a file within the ZIP file. The
-<code>assetPath</code> must be the path to the desired file, relative to
-the root of the ZIP file contents.</dd>
-        <dt>{@code getAssetFileDescriptor(String assetPath)}</dt>
-          <dd>Provides an {@link android.content.res.AssetFileDescriptor} for a file within the
-ZIP file. The <code>assetPath</code> must be the path to the desired file, relative to
-the root of the ZIP file contents. This is useful for certain Android APIs that require  an {@link
-android.content.res.AssetFileDescriptor}, such as some {@link android.media.MediaPlayer} APIs.</dd>
-      </dl>
-    </dd>
-    
-  <dt>{@code APEZProvider}</dt>
-    <dd>Most applications don't need to use this class. This class defines a {@link
-android.content.ContentProvider} that marshals the data from the ZIP files through a content
-provider {@link android.net.Uri} in order to provide file access for certain Android APIs that
-expect {@link android.net.Uri} access to media files. For example, this is useful if you want to
-play a video with {@link android.widget.VideoView#setVideoURI VideoView.setVideoURI()}.</p></dd>
-</dl>
-
-<h4>Reading from a ZIP file</h4>
-
-<p>When using the APK Expansion Zip Library, reading a file from your ZIP usually requires the
-following:</p>
-
-<pre>
-// Get a ZipResourceFile representing a merger of both the main and patch files
-ZipResourceFile expansionFile = APKExpansionSupport.getAPKExpansionZipFile(appContext,
-        mainVersion, patchVersion);
-        
-// Get an input stream for a known file inside the expansion file ZIPs
-InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
-</pre>
-
-<p>The above code provides access to any file that exists in either your main expansion file or
-patch expansion file, by reading from a merged map of all the files from both files. All you
-need to provide the {@code getAPKExpansionFile()} method is your application {@code
-android.content.Context} and the version number for both the main expansion file and patch
-expansion file.</p>
-
-<p>If you'd rather read from a specific expansion file, you can use the {@code
-ZipResourceFile} constructor with the path to the desired expansion file:</p>
-
-<pre>
-// Get a ZipResourceFile representing a specific expansion file
-ZipResourceFile expansionFile = new ZipResourceFile(filePathToMyZip);
-
-// Get an input stream for a known file inside the expansion file ZIPs
-InputStream fileStream = expansionFile.getInputStream(pathToFileInsideZip);
-</pre>
-
-<p>For more information about using this library for your expansion files, look at
-the sample application's {@code SampleDownloaderActivity} class, which includes additional code to
-verify the downloaded files using CRC. Beware that if you use this sample as the basis for
-your own implementation, it requires that you <strong>declare the byte size of your expansion
-files</strong> in the {@code xAPKS} array.</p>
-
-
-
-
-<h2 id="Testing">Testing Your Expansion Files</h2>
-
-<p>Before publishing your application, there are two things you should test: Reading the
-expansion files and downloading the files.</p>
-
-
-<h3 id="TestingReading">Testing file reads</h3>
-
-<p>Before you upload your application to Google Play, you
-should test your application's ability to read the files from the shared storage. All you need to do
-is add the files to the appropriate location on the device shared storage and launch your
-application:</p>
-
-<ol>
-  <li>On your device, create the appropriate directory on the shared storage where Google
-Play will save your files.
-  <p>For example, if your package name is {@code com.example.android}, you need to create
-the directory {@code Android/obb/com.example.android/} on the shared storage space. (Plug in
-your test device to your computer to mount the shared storage and manually create this
-directory.)</p>
-  </li>
-  <li>Manually add the expansion files to that directory. Be sure that you rename your files to
-match the <a href="#Filename">file name format</a> that Google Play will use.
-  <p>For example, regardless of the file type, the main expansion file for the {@code
-com.example.android} application should be {@code main.0300110.com.example.android.obb}.
-The version code can be whatever value you want. Just remember:</p>
-  <ul>
-    <li>The main expansion file always starts with {@code main} and the patch file starts with
-{@code patch}.</li>
-    <li>The package name always matches that of the APK to which the file is attached on
-Google Play.
-  </ul>
-  </li>
-  <li>Now that the expansion file(s) are on the device, you can install and run your application to
-test your expansion file(s).</li>
-</ol>
-
-<p>Here are some reminders about handling the expansion files:</p>
-<ul>
-  <li><strong>Do not delete or rename</strong> the {@code .obb} expansion files (even if you unpack
-the data to a different location). Doing so will cause Google Play (or your app itself) to
-repeatedly download the expansion file.</li>
-  <li><strong>Do not save other data into your <code>obb/</code>
-directory</strong>. If you must unpack some data, save it into the location specified by {@link
-android.content.Context#getExternalFilesDir getExternalFilesDir()}.</li>
-</ul>
-
-
-
-<h3 id="TestingReading">Testing file downloads</h3>
-
-<p>Because your application must sometimes manually download the expansion files when it first
-opens, it's important that you test this process to be sure your application can successfully query
-for the URLs, download the files, and save them to the device.</p>
-
-<p>To test your application's implementation of the manual download procedure, you must upload
-your application to Google Play as a "draft" to make your expansion files available for
-download:</p>
-
-<ol>
-  <li>Upload your APK and corresponding expansion files using the Google Play Developer
-Console.</li>
-  <li>Fill in the necessary application details (title, screenshots, etc.). You can come back and
-finalize these details before publishing your application.
-  <p>Click the <strong>Save</strong> button. <em>Do not click Publish.</em> This saves
-the application as a draft, such that your application is not published for Google Play users,
-but the expansion files are available for you to test the download process.</p></li>
-  <li>Install the application on your test device using the Eclipse tools or <a
-href="{@docRoot}guide/developing/tools/adb.html">{@code adb}</a>.</li>
-  <li>Launch the app.</li>
-</ol>
-
-<p>If everything works as expected, your application should begin downloading the expansion
-files as soon as the main activity starts.</p>
-
-
-
-
-<h2 id="Updating">Updating Your Application</h2>
-
-<p>One of the great benefits to using expansion files on Google Play is the ability to
-update your application without re-downloading all of the original assets. Because Google Play
-allows you to provide two expansion files with each APK, you can use the second file as a "patch"
-that provides updates and new assets. Doing so avoids the
-need to re-download the main expansion file which could be large and expensive for users.</p>
-
-<p>The patch expansion file is technically the same as the main expansion file and neither
-the Android system nor Google Play perform actual patching between your main and patch expansion
-files. Your application code must perform any necessary patches itself.</p>
-
-<p>If you use ZIP files as your expansion files, the <a href="#ZipLib">APK Expansion Zip
-Library</a> that's included with the Apk Expansion package includes the ability to merge
-your
-patch file with the main expansion file.</p>
-
-<p class="note"><strong>Note:</strong> Even if you only need to make changes to the patch
-expansion file, you must still update the APK in order for Google Play to perform an update.
-If you don't require code changes in the application, you should simply update the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code versionCode}</a> in the
-manifest.</p>
-
-<p>As long as you don't change the main expansion file that's associated with the APK
-in the Developer Console, users who previously installed your application will not
-download the main expansion file. Existing users receive only the updated APK and the new patch
-expansion file (retaining the previous main expansion file).</p>
-
-<p>Here are a few issues to keep in mind regarding updates to expansion files:</p>
-
-<ul>
-  <li>There can be only two expansion files for your application at a time. One main expansion
-file and one patch expansion file. During an update to a file, Google Play deletes the
-previous version (and so must your application when performing manual updates).</li>
-  <li>When adding a patch expansion file, the Android system does not actually patch your
-application or main expansion file. You must design your application to support the patch data.
-However, the Apk Expansion package includes a library for using ZIP files
-as expansion files, which merges the data from the patch file into the main expansion file so
-you can easily read all the expansion file data.</li>
-</ul>
-
-
-
-<!-- Tools are not ready.
-     
-<h3>Using OBB tool and APIs</h3>
-
-<pre>
-$ mkobb.sh -d /data/myfiles -k my_secret_key -o /data/data.obb
-$ obbtool a -n com.example.myapp -v 1 -s seed_from_mkobb /data/data.obb
-</pre>
-
-<pre>
-storage = (StorageManager) getSystemService( STORAGE_SERVICE );
-storage.mountObb( obbFilepath, "my_secret_key", myListener );
-obbContentPath = storage.getMountedObbPath( obbFilepath );
-</pre>
--->
diff --git a/docs/html/guide/market/licensing/adding-licensing.jd b/docs/html/guide/market/licensing/adding-licensing.jd
deleted file mode 100644
index d4dd008..0000000
--- a/docs/html/guide/market/licensing/adding-licensing.jd
+++ /dev/null
@@ -1,1072 +0,0 @@
-page.title=Adding Licensing to Your App
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
-  
-  <h2>In this document</h2>
-  <ol>
-  <li><a href="#manifest-permission">Adding the Licensing Permission</a></li>
-  <li><a href="#impl-Policy">Implementing a Policy</a>
-    <ol>
-      <li><a href="#custom-policies">Guidelines for custom policies</a></li>
-      <li><a href="#ServerManagedPolicy">ServerManagedPolicy</a></li>
-      <li><a href="#StrictPolicy">StrictPolicy</a></li>
-    </ol>
-  </li>
-  <li><a href="#impl-Obfuscator">Implementing an Obfuscator</a>
-    <ol>
-      <li><a href="#AESObfuscator">AESObfuscator</a></li>
-    </ol>
-  </li>
-  <li><a href="#impl-lc">Checking the License from an Activity</a>
-    <ol>
-      <li><a href="#lc-overview">Overview of license check and response</a></li>
-      <li><a href="#imports">Add imports</a></li>
-      <li><a href="#lc-impl">Implement LicenseCheckerCallback as a private inner class</a></li>
-      <li><a href="#thread-handler">Create a Handler for posting from LicenseCheckerCallback
-to the UI thread</a></li>
-      <li><a href="#lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</a></li>
-      <li><a href="#check-access">Call checkAccess() to initiate the license check</a></li>
-      <li><a href="#account-key">Embed your public key for licensing</a></li>
-      <li><a href="#handler-cleanup">Call your LicenseChecker's onDestroy() method
-to close IPC connections</a></li>
-    </ol>
-  </li>
-  <li><a href="#impl-DeviceLimiter">Implementing a DeviceLimiter</a></li>
-  <li><a href="#app-obfuscation">Obfuscating Your Code</a></li>
-  <li><a href="#app-publishing">Publishing a Licensed Application</a>
-    <ol>
-      <li><a href="#">Removing Copy Protection</a></li>
-    </ol>
-  </li>
-  <li><a href="#support">Where to Get Support</a></li>
-</ol>
-  
-</div>
-</div>
-
-
-
-<p>After you've set up a publisher account and development environment (see <a
-href="setting-up.html">Setting Up for Licensing</a>), you are ready to add license verification to
-your app with the License Verification Library (LVL).</p>
-
-<p>Adding license verification with the LVL involves these tasks:</p>
-
-<ol>
-<li><a href="#manifest-permission">Adding the licensing permission</a> your application's manifest.</li>
-<li><a href="#impl-Policy">Implementing a Policy</a> &mdash; you can choose one of the full implementations provided in the LVL or create your own.</li>
-<li><a href="#impl-Obfuscator">Implementing an Obfuscator</a>, if your {@code Policy} will cache any
-license response data. </li>
-<li><a href="#impl-lc">Adding code to check the license</a> in your application's main
-Activity.</li>
-<li><a href="#impl-DeviceLimiter">Implementing a DeviceLimiter</a> (optional and not recommended for
-most applications).</li>
-</ol>
-
-<p>The sections below describe these tasks. When you are done with the
-integration, you should be able to compile your application successfully and you
-can begin testing, as described in <a
-href="{@docRoot}guide/market/licensing/setting-up.html#test-env">Setting Up the Test
-Environment</a>.</p>
-
-<p>For an overview of the full set of source files included in the LVL, see <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#lvl-summary">Summary of LVL Classes
-and Interfaces</a>.</p>
-
-
-<h2 id="manifest-permission">Adding the Licensing Permission</h2>
-
-<p>To use the Google Play application for sending a license check to the
-server, your application must request the proper permission,
-<code>com.android.vending.CHECK_LICENSE</code>. If your application does
-not declare the licensing permission but attempts to initiate a license check,
-the LVL throws a security exception.</p>
-
-<p>To request the licensing permission in your application, declare a <a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><code>&lt;uses-permission&gt;</code></a>
-element as a child of <code>&lt;manifest&gt;</code>, as follows: </p>
-
-<p style="margin-left:2em;"><code>&lt;uses-permission
-android:name="com.android.vending.CHECK_LICENSE"&gt;</code></p>
-
-<p>For example, here's how the LVL sample application declares the permission:
-</p>
-
-<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android" ..."&gt;
-    &lt;!-- Devices &gt;= 3 have version of Google Play that supports licensing. --&gt;
-    &lt;uses-sdk android:minSdkVersion="3" /&gt;
-    &lt;!-- Required permission to check licensing. --&gt;
-    &lt;uses-permission android:name="com.android.vending.CHECK_LICENSE" /&gt;
-    ...
-&lt;/manifest&gt;
-</pre>
-
-<p class="note"><strong>Note:</strong> Currently, you cannot declare the
-<code>CHECK_LICENSE</code> permission in the LVL library project's manifest,
-because the SDK Tools will not merge it into the manifests of dependent
-applications. Instead, you must declare the permission in each dependent
-application's manifest. </p>
-
-
-<h2 id="impl-Policy">Implementing a Policy</h2>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>ServerManagedPolicy</h2>
-
-<p>The LVL includes a complete {@code Policy} implementation called ServerManagedPolicy
-that makes use of license-management settings provided by the Google Play
-server. </p>
-
-<p style="margin-top:.5em;">Use of ServerManagedPolicy as the basis for your
-Policy is strongly recommended. For more information, see <a
-href="#ServerManagedPolicy">ServerManagedPolicy</a> section, below.</p>
-
-</div>
-</div>
-
-<p>Google Play licensing service does not itself determine whether a
-given user with a given license should be granted access to your application.
-Rather, that responsibility is left to a {@code Policy} implementation that you provide
-in your application.</p>
-
-<p>Policy is an interface declared by the LVL that is designed to hold your
-application's logic for allowing or disallowing user access, based on the result
-of a license check. To use the LVL, your application <em>must</em> provide an
-implementation of {@code Policy}. </p>
-
-<p>The {@code Policy} interface declares two methods, <code>allowAccess()</code> and
-<code>processServerResponse()</code>, which are called by a {@code LicenseChecker}
-instance when processing a response from the license server. It also declares an
-enum called <code>LicenseResponse</code>, which specifies the license response
-value passed in calls to <code>processServerResponse()</code>. </p>
-
-<ul>
-<li><code>processServerResponse()</code> lets you preprocess the raw response
-data received from the licensing server, prior to determining whether to grant
-access.
-
-<p>A typical implementation would extract some or all fields from the license
-response and store the data locally to a persistent store, such as through
-{@link android.content.SharedPreferences} storage, to ensure that the data is
-accessible across application invocations and device power cycles. For example,
-a {@code Policy} would maintain the timestamp of the last successful license check, the
-retry count, the license validity period, and similar information in a
-persistent store, rather than resetting the values each time the application is
-launched.</p>
-
-<p>When storing response data locally, the {@code Policy} must ensure that the data is
-obfuscated (see <a href="#impl-Obfuscator">Implementing an Obfuscator</a>,
-below).</p></li>
-
-<li><code>allowAccess()</code> determines whether to grant the user access to
-your application, based on any available license response data (from the
-licensing server or from cache) or other application-specific information.  For
-example, your implementation of <code>allowAccess()</code> could take into
-account additional criteria, such as usage or other data retrieved from a
-backend server. In all cases, an implementation of <code>allowAccess()</code>
-should only return <code>true</code> if the user is licensed to use the
-application, as determined by the licensing server, or if there is a transient
-network or system problem that prevents the license check from completing. In
-such cases, your implementation can maintain a count of retry responses and
-provisionally allow access until the next license check is complete.</li>
-
-</ul>
-
-<p>To simplify the process of adding licensing to your application and to
-provide an illustration of how a {@code Policy} should be designed, the LVL includes
-two full {@code Policy} implementations that you can use without modification or
-adapt to your needs:</p>
-
-<ul>
-<li><a href="#ServerManagedPolicy">ServerManagedPolicy</a>, a flexible {@code Policy}
-that uses server-provided settings and cached responses to manage access across
-varied network conditions, and</li>
-<li><a href="#StrictPolicy">StrictPolicy</a>, which does not cache any response
-data and allows access <em>only</em> if the server returns a licensed
-response.</li>
-</ul>
-
-<p>For most applications, the use of ServerManagedPolicy is highly
-recommended. ServerManagedPolicy is the LVL default and is integrated with
-the LVL sample application.</p>
-
-
-<h3 id="custom-policies">Guidelines for custom policies</h3>
-
-<p>In your licensing implementation, you can use one of the complete policies
-provided in the LVL (ServerManagedPolicy or StrictPolicy) or you can create a
-custom policy. For any type of custom policy, there are several important design
-points to understand and account for in your implementation.</p>
-
-<p>The licensing server applies general request limits to guard against overuse
-of resources that could result in denial of service. When an application exceeds
-the request limit, the licensing server returns a 503 response, which gets
-passed through to your application as a general server error. This means that no
-license response will be available to the user until the limit is reset, which
-can affect the user for an indefinite period.</p>
-
-<p>If you are designing a custom policy, we recommend that the {@code Policy}:
-<ol>
-<!-- <li>Limits the number of points at which your app calls for a license check
-to the minimum. </li> -->
-<li>Caches (and properly obfuscates) the most recent successful license response
-in local persistent storage.</li>
-<li>Returns the cached response for all license checks, for as long as the
-cached response is valid, rather than making a request to the licensing server.
-Setting the response validity according to the server-provided <code>VT</code>
-extra is highly recommended. See <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response Extras</a>
-for more information.</li>
-<li>Uses an exponential backoff period, if retrying any requests the result in
-errors. Note that the Google Play client automatically retries failed
-requests, so in most cases there is no need for your {@code Policy} to retry them.</li>
-<li>Provides for a "grace period" that allows the user to access your
-application for a limited time or number of uses, while a license check is being
-retried. The grace period benefits the user by allowing access until the next
-license check can be completed successfully and it benefits you by placing a
-hard limit on access to your application when there is no valid license response
-available.</li>
-</ol>
-
-<p>Designing your {@code Policy} according to the guidelines listed above is critical,
-because it ensures the best possible experience for users while giving you
-effective control over your application even in error conditions. </p>
-
-<p>Note that any {@code Policy} can use settings provided by the licensing server to
-help manage validity and caching, retry grace period, and more. Extracting the
-server-provided settings is straightforward and making use of them is highly
-recommended. See the ServerManagedPolicy implementation for an example of how to
-extract and use the extras. For a list of server settings and information about
-how to use them, see  <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response
-Extras</a>.</p>
-
-<h3 id="ServerManagedPolicy">ServerManagedPolicy</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Server Response Extras</h2>
-
-<p>For certain types of licensing responses, the licensing server appends extra
-settings to the responses, to help the application manage licensing effectively.
-</p>
-
-<p style="margin-top:.5em;">See <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response Extras</a>
-for
-a list of settings and <code>ServerManagedPolicy.java</code> for information
-about how a {@code Policy} can use the extras.</p>
-
-</div>
-</div>
-
-<p>The LVL includes a full and recommended implementation of the {@code Policy}
-interface called ServerManagedPolicy. The implementation is integrated with the
-LVL classes and serves as the default {@code Policy} in the library. </p>
-
-<p>ServerManagedPolicy provides all of the handling for license and retry
-responses. It caches all of the response data locally in a
-{@link android.content.SharedPreferences} file, obfuscating it with the
-application's {@code Obfuscator} implementation. This ensures that the license response
-data is secure and persists across device power cycles. ServerManagedPolicy
-provides concrete implementations of the interface methods
-<code>processServerResponse()</code> and <code>allowAccess()</code> and also
-includes a set of supporting methods and types for managing license
-responses.</p>
-
-<p>Importantly, a key feature of ServerMangedPolicy is its use of
-server-provided settings as the basis for managing licensing across an
-application's refund period and through varying network and error conditions.
-When an application contacts the Google Play server for a license check, the
-server appends several settings as key-value pairs in the extras field of certain
-license response types. For example, the server provides recommended values for the
-application's license validity period, retry grace period, and maximum allowable
-retry count, among others. ServerManagedPolicy extracts the values from the
-license response in its <code>processServerResponse()</code> method and checks
-them in its <code>allowAccess()</code> method. For a list of the server-provided
-settings used by ServerManagedPolicy, see <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#extras">Server Response
-Extras</a>.</p>
-
-<p>For convenience, best performance, and the benefit of using license settings
-from the Google Play server, <strong>using ServerManagedPolicy as your
-licensing {@code Policy} is strongly recommended</strong>. </p>
-
-<p>If you are concerned about the security of license response data that is
-stored locally in {@link android.content.SharedPreferences}, you can use a stronger obfuscation
-algorithm or design a stricter {@code Policy} that does not store license data. The LVL
-includes an example of such a {@code Policy} &mdash; see <a
-href="#StrictPolicy">StrictPolicy</a> for more information.</p>
-
-<p>To use ServerManagedPolicy, simply import it to your Activity, create an
-instance, and pass a reference to the instance when constructing your
-{@code LicenseChecker}. See <a href="#lc-lcc">Instantiate LicenseChecker and
-LicenseCheckerCallback</a> for more information. </p>
-
-<h3 id="StrictPolicy">StrictPolicy</h3>
-
-<p>The LVL includes an alternative full implementation of the {@code Policy} interface
-called StrictPolicy. The StrictPolicy implementation provides a more restrictive
-Policy than ServerManagedPolicy, in that it does not allow the user to access
-the application unless a license response is received from the server at the
-time of access that indicates that the user is licensed.</p>
-
-<p>The principal feature of StrictPolicy is that it does not store <em>any</em>
-license response data locally, in a persistent store. Because no data is stored,
-retry requests are not tracked and cached responses can not be used to fulfill
-license checks. The {@code Policy} allows access only if:</p>
-
-<ul>
-<li>The license response is received from the licensing server, and </li>
-<li>The license response indicates that the user is licensed to access the
-application. </li>
-</ul>
-
-<p>Using StrictPolicy is appropriate if your primary concern is to ensure that,
-in all possible cases, no user will be allowed to access the application unless
-the user is confirmed to be licensed at the time of use. Additionally, the
-Policy offers slightly more security than ServerManagedPolicy &mdash; since
-there is no data cached locally, there is no way a malicious user could tamper
-with the cached data and obtain access to the application.</p>
-
-<p>At the same time, this {@code Policy} presents a challenge for normal users, since it
-means that they won't be able to access the application when there is no network
-(cell or Wi-Fi) connection available. Another side-effect is that your
-application will send more license check requests to the server, since using a
-cached response is not possible.</p>
-
-<p>Overall, this policy represents a tradeoff of some degree of user convenience
-for absolute security and control over access. Consider the tradeoff carefully
-before using this {@code Policy}.</p>
-
-<p>To use StrictPolicy, simply import it to your Activity, create an instance,
-and pass a reference to it when constructing your {@code LicenseChecker}. See
-<a href="#lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</a>
-for more information. </p>
-
-<h2 id="impl-Obfuscator">Implementing an Obfuscator</h2>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>AESObfuscator</h2>
-
-<p>The LVL includes a full {@code Obfuscator} implementation in the
-<code>AESObfuscator.java</code> file. The {@code Obfuscator} uses AES encryption to
-obfuscate/unobfuscate data. If you are using a {@code Policy} (such as
-ServerManagedPolicy) that caches license response data, using AESObfuscator as
-basis for your {@code Obfuscator} implementation is highly recommended. </p>
-
-</div>
-</div>
-
-<p>A typical {@code Policy} implementation needs to save the license response data for
-an application to a persistent store, so that it is accessible across
-application invocations and device power cycles.  For example, a {@code Policy} would
-maintain the timestamp of the last successful license check, the retry count,
-the license validity period, and similar information in a persistent store,
-rather than resetting the values each time the application is launched. The
-default {@code Policy} included in the LVL, ServerManagedPolicy, stores license response
-data in a {@link android.content.SharedPreferences} instance, to ensure that the
-data is persistent. </p>
-
-<p>Because the {@code Policy} will use stored license response data to determine whether
-to allow or disallow access to the application, it <em>must</em> ensure that any
-stored data is secure and cannot be reused or manipulated by a root user on a
-device. Specifically, the {@code Policy} must always obfuscate the data before storing
-it, using a key that is unique for the application and device. Obfuscating using
-a key that is both application-specific and device-specific is critical, because
-it prevents the obfuscated data from being shared among applications and
-devices.</p>
-
-<p>The LVL assists the application with storing its license response data in a
-secure, persistent manner. First, it provides an {@code Obfuscator}
-interface that lets your application supply the obfuscation algorithm of its
-choice for stored data. Building on that, the LVL provides the helper class
-PreferenceObfuscator, which handles most of the work of calling the
-application's {@code Obfuscator} class and reading and writing the obfuscated data in a
-{@link android.content.SharedPreferences} instance. </p>
-
-<p>The LVL provides a full {@code Obfuscator} implementation called
-AESObfuscator that uses AES encryption to obfuscate data. You can
-use AESObfuscator in your application without modification or you
-can adapt it to your needs. For more information, see the next section.</p>
-
-
-<h3 id="AESObfuscator">AESObfuscator</h3>
-
-<p>The LVL includes a full and recommended implementation of the {@code Obfuscator}
-interface called AESObfuscator. The implementation is integrated with the
-LVL sample application and serves as the default {@code Obfuscator} in the library. </p>
-
-<p>AESObfuscator provides secure obfuscation of data by using AES to
-encrypt and decrypt the data as it is written to or read from storage.
-The {@code Obfuscator} seeds the encryption using three data fields provided
-by the application: </p>
-
-<ol>
-<li>A salt &mdash; an array of random bytes to use for each (un)obfuscation. </li>
-<li>An application identifier string, typically the package name of the application.</li>
-<li>A device identifier string, derived from as many device-specific sources
-as possible, so as to make it as unique.</li>
-</ol>
-
-<p>To use AESObfuscator, first import it to your Activity. Declare a private
-static final array to hold the salt bytes and initialize it to 20 randomly
-generated bytes.</p>
-
-<pre>    ...
-    // Generate 20 random bytes, and put them here.
-    private static final byte[] SALT = new byte[] {
-     -46, 65, 30, -128, -103, -57, 74, -64, 51, 88, -95,
-     -45, 77, -117, -36, -113, -11, 32, -64, 89
-     };
-    ...
-</pre>
-
-<p>Next, declare a variable to hold a device identifier and generate a value for
-it in any way needed. For example, the sample application included in the LVL
-queries the system settings for the
-<code>android.Settings.Secure.ANDROID_ID</code>, which is unique to each device.
-</p>
-
-<p>Note that, depending on the APIs you use, your application might need to
-request additional permissions in order to acquire device-specific information.
-For example, to query the {@link android.telephony.TelephonyManager} to obtain
-the device IMEI or related data, the application will also need to request the
-<code>android.permission.READ_PHONE_STATE</code> permission in its manifest.</p>
-
-<p>Before requesting new permissions for the <em>sole purpose</em> of acquiring
-device-specific information for use in your {@code Obfuscator}, consider
-how doing so might affect your application or its filtering on Google Play
-(since some permissions can cause the SDK build tools to add
-the associated <code>&lt;uses-feature&gt;</code>).</p>
-
-<p>Finally, construct an instance of AESObfuscator, passing the salt,
-application identifier, and device identifier. You can construct the instance
-directly, while constructing your {@code Policy} and {@code LicenseChecker}. For example:</p>
-
-<pre>    ...
-    // Construct the LicenseChecker with a Policy.
-    mChecker = new LicenseChecker(
-        this, new ServerManagedPolicy(this,
-            new AESObfuscator(SALT, getPackageName(), deviceId)),
-        BASE64_PUBLIC_KEY  // Your public licensing key.
-        );
-    ...
-</pre>
-
-<p>For a complete example, see MainActivity in the LVL sample application.</p>
-
-
-<h2 id="impl-lc">Checking the License from an Activity</h2>
-
-<p>Once you've implemented a {@code Policy} for managing access to your application, the
-next step is to add a license check to your application, which initiates a query
-to the licensing server if needed and manages access to the application based on
-the license response. All of the work of adding the license check and handling
-the response takes place in your main {@link android.app.Activity} source file.
-</p>
-
-<p>To add the license check and handle the response, you must:</p>
-
-<ol>
-    <li><a href="#imports">Add imports</a></li>
-    <li><a href="#lc-impl">Implement LicenseCheckerCallback</a> as a private inner class</li>
-    <li><a href="#thread-handler">Create a Handler</a> for posting from LicenseCheckerCallback to the UI thread</li>
-    <li><a href="#lc-lcc">Instantiate LicenseChecker</a> and LicenseCheckerCallback</li>
-    <li><a href="#check-access">Call checkAccess()</a> to initiate the license check</li>
-    <li><a href="#account-key">Embed your public key</a> for licensing</li>
-    <li><a href="#handler-cleanup">Call your LicenseChecker's onDestroy() method</a> to close IPC connections.</li>
-</ol>
-
-<p>The sections below describe these tasks. </p>
-
-<h3 id="lc-overview">Overview of license check and response</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Example: MainActivity</h2>
-
-<p>The sample application included with the LVL provides a full example of how
-to initiate a license check and handle the result, in the
-<code>MainActivity.java</code> file.</p>
-
-</div>
-</div>
-
-<p>In most cases, you should add the license check to your application's main
-{@link android.app.Activity}, in the {@link android.app.Activity#onCreate onCreate()} method. This
-ensures that when the user launches your application directly, the license check
-will be invoked immediately. In some cases, you can add license checks in other
-locations as well. For example, if your application includes multiple Activity
-components that other applications can start by {@link android.content.Intent},
-you could add license checks in those Activities.</p>
-
-<p>A license check consists of two main actions: </p>
-
-<ul>
-<li>A call to a method to initiate the license check &mdash; in the LVL, this is
-a call to the <code>checkAccess()</code> method of a {@code LicenseChecker} object that
-you construct.</li>
-<li>A callback that returns the result of the license check. In the LVL, this is
-a <code>LicenseCheckerCallback</code> interface that you implement. The
-interface declares two methods, <code>allow()</code> and
-<code>dontAllow()</code>, which are invoked by the library based on to the
-result of the license check. You implement these two methods with whatever logic
-you need, to allow or disallow the user access to your application. Note that
-these methods do not determine <em>whether</em> to allow access &mdash; that
-determination is the responsibility of your {@code Policy} implementation. Rather, these
-methods simply provide the application behaviors for <em>how</em> to allow and
-disallow access (and handle application errors).
-  <p>The <code>allow()</code> and <code>dontAllow()</code> methods do provide a "reason"
-for their response, which can be one of the {@code Policy} values, {@code LICENSED},
-{@code NOT_LICENSED}, or {@code RETRY}. In particular, you should handle the case in which
-the method receives the {@code RETRY} response for {@code dontAllow()} and provide the user with an
-"Retry" button, which might have happened because the service was unavailable during the
-request.</p></li>
-</ul>
-
-<div style="margin-bottom:2em;">
-
-<img src="{@docRoot}images/licensing_flow.png" style="text-align:left;margin-bottom:0;margin-left:3em;" />
-<div style="margin:.5em 0 1.5em 2em;padding:0"><strong>Figure 6.</strong> Overview of a
-typical license check interaction.</div>
-</div>
-
-<p>The diagram above illustrates how a typical license check takes place: </p>
-
-<ol>
-<li>Code in the application's main Activity instantiates {@code LicenseCheckerCallback}
-and {@code LicenseChecker} objects. When constructing {@code LicenseChecker}, the code passes in
-{@link android.content.Context}, a {@code Policy} implementation to use, and the
-publisher account's public key for licensing as parameters. </li>
-<li>The code then calls the <code>checkAccess()</code> method on the
-{@code LicenseChecker} object. The method implementation calls the {@code Policy} to determine
-whether there is a valid license response cached locally, in
-{@link android.content.SharedPreferences}.
-  <ul>
-    <li>If so, the <code>checkAccess()</code> implementation calls
-  <code>allow()</code>.</li>
-    <li>Otherwise, the {@code LicenseChecker} initiates a license check request that is sent
-  to the licensing server.</li>
-  </ul>
-
-<p class="note"><strong>Note:</strong> The licensing server always returns
-<code>LICENSED</code> when you perform a license check of a draft application.</p>
-</li>
-<li>When a response is received, {@code LicenseChecker} creates a LicenseValidator that
-verifies the signed license data and extracts the fields of the response, then
-passes them to your {@code Policy} for further evaluation.
-  <ul>
-    <li>If the license is valid, the {@code Policy} caches the response in
-{@link android.content.SharedPreferences} and notifies the validator, which then calls the
-<code>allow()</code> method on the {@code LicenseCheckerCallback} object. </li>
-    <li>If the license not valid, the {@code Policy} notifies the validator, which calls
-the <code>dontAllow()</code> method on {@code LicenseCheckerCallback}. </li>
-  </ul>
-</li>
-<li>In case of a recoverable local or server error, such as when the network is
-not available to send the request, {@code LicenseChecker} passes a {@code RETRY} response to
-your {@code Policy} object's <code>processServerResponse()</code> method. 
-  <p>Also, both the {@code allow()} and {@code dontAllow()} callback methods receive a
-<code>reason</code> argument. The {@code allow()} method's reason is usually {@code
-Policy.LICENSED} or {@code Policy.RETRY} and the {@code dontAllow()} reason is usually {@code
-Policy.NOT_LICENSED} or {@code Policy.RETRY}. These response values are useful so you can show
-an appropriate response for the user, such as by providing a "Retry" button when {@code
-dontAllow()} responds with {@code Policy.RETRY}, which might have been because the service was
-unavailable.</p></li>
-<li>In case of a application error, such as when the application attempts to
-check the license of an invalid package name, {@code LicenseChecker} passes an error
-response to the LicenseCheckerCallback's  <code>applicationError()</code>
-method. </li>
-</ol>
-
-<p>Note that, in addition to initiating the license check and handling the
-result, which are described in the sections below, your application also needs
-to provide a <a href="#impl-Policy">Policy implementation</a> and, if the {@code Policy}
-stores response data (such as ServerManagedPolicy), an <a
-href="#impl-Obfuscator">Obfuscator</a> implementation. </p>
-
-
-<h3 id="imports">Add imports</h3>
-
-<p>First, open the class file of the application's main Activity and import
-{@code LicenseChecker} and {@code LicenseCheckerCallback} from the LVL package.</p>
-
-<pre>    import com.android.vending.licensing.LicenseChecker;
-    import com.android.vending.licensing.LicenseCheckerCallback;</pre>
-
-<p>If you are using the default {@code Policy} implementation provided with the LVL,
-ServerManagedPolicy, import it also, together with the AESObfuscator. If you are
-using a custom {@code Policy} or {@code Obfuscator}, import those instead. </p>
-
-<pre>    import com.android.vending.licensing.ServerManagedPolicy;
-    import com.android.vending.licensing.AESObfuscator;</pre>
-
-<h3 id="lc-impl">Implement LicenseCheckerCallback as a private inner class</h3>
-
-<p>{@code LicenseCheckerCallback} is an interface provided by the LVL for handling
-result of a license check. To support licensing using the LVL, you must
-implement {@code LicenseCheckerCallback} and
-its methods to allow or disallow access to the application.</p>
-
-<p>The result of a license check is always a call to one of the
-{@code LicenseCheckerCallback} methods, made based on the validation of the response
-payload, the server response code itself, and any additional processing provided
-by your {@code Policy}. Your application can implement the methods in any way needed. In
-general, it's best to keep the methods simple, limiting them to managing UI
-state and application access. If you want to add further processing of license
-responses, such as by contacting a backend server or applying custom constraints,
-you should consider incorporating that code into your {@code Policy}, rather than
-putting it in the {@code LicenseCheckerCallback} methods. </p>
-
-<p>In most cases, you should declare your implementation of
-{@code LicenseCheckerCallback} as a private class inside your application's main
-Activity class. </p>
-
-<p>Implement the <code>allow()</code> and <code>dontAllow()</code> methods as
-needed. To start with, you can use simple result-handling behaviors in the
-methods, such as displaying the license result in a dialog. This helps you get
-your application running sooner and can assist with debugging. Later, after you
-have determined the exact behaviors you want, you can add more complex handling.
-</p>
-
-<p>Some suggestions for handling unlicensed responses in
-<code>dontAllow()</code> include: </p>
-
-<ul>
-<li>Display a "Try again" dialog to the user, including a button to initiate a
-new license check if the <code>reason</code> supplied is {@code Policy.RETRY}. </li>
-<li>Display a "Purchase this application" dialog, including a button that
-deep-links the user to the application's details page on Google Play, from which the
-use can purchase the application. For more information on how to set up such
-links, see <a
-href="{@docRoot}guide/publishing/publishing.html#marketintent">Linking to your apps
-on Google Play</a>. </li>
-<li>Display a Toast notification that indicates that the features of the
-application are limited because it is not licensed. </li>
-</ul>
-
-<p>The example below shows how the LVL sample application implements
-{@code LicenseCheckerCallback}, with methods that display the license check result in a
-dialog. </p>
-
-<pre>
-private class MyLicenseCheckerCallback implements LicenseCheckerCallback {
-    public void allow(int reason) {
-        if (isFinishing()) {
-            // Don't update UI if Activity is finishing.
-            return;
-        }
-        // Should allow user access.
-        displayResult(getString(R.string.allow));
-    }
-
-    public void dontAllow(int reason) {
-        if (isFinishing()) {
-            // Don't update UI if Activity is finishing.
-            return;
-        }
-        displayResult(getString(R.string.dont_allow));
-        
-        if (reason == Policy.RETRY) {
-            // If the reason received from the policy is RETRY, it was probably
-            // due to a loss of connection with the service, so we should give the
-            // user a chance to retry. So show a dialog to retry.
-            showDialog(DIALOG_RETRY);
-        } else {
-            // Otherwise, the user is not licensed to use this app.
-            // Your response should always inform the user that the application
-            // is not licensed, but your behavior at that point can vary. You might
-            // provide the user a limited access version of your app or you can
-            // take them to Google Play to purchase the app.
-            showDialog(DIALOG_GOTOMARKET);
-        }
-    }
-}
-</pre>
-
-<p>Additionally, you should implement the <code>applicationError()</code>
-method, which the LVL calls to let your application handle errors that are not
-retryable. For a list of such errors, see <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#server-response-codes">Server
-Response Codes</a> in the <a
-href="guide/market/licensing/licensing-reference.html">Licensing Reference</a>. You can implement
-the method in any way needed. In most cases, the
-method should log the error code and call <code>dontAllow()</code>.</p>
-
-<h3 id="thread-handler">Create a Handler for posting from LicenseCheckerCallback
-to the UI thread</h3>
-
-<p>During a license check, the LVL passes the request to the Google Play
-application, which handles communication with the licensing server. The LVL
-passes the request over asynchronous IPC (using {@link android.os.Binder}) so
-the actual processing and network communication do not take place on a thread
-managed by your application. Similarly, when the Google Play application
-receives the result, it invokes a  callback method over IPC, which in turn
-executes in an IPC thread pool in your application's process.</p>
-
-<p>The {@code LicenseChecker} class manages your application's IPC communication with
-the Google Play application, including the call that sends the request and
-the callback that receives the response. {@code LicenseChecker} also tracks open license
-requests and manages their timeouts. </p>
-
-<p>So that it can handle timeouts properly and also process incoming responses
-without affecting your application's UI thread, {@code LicenseChecker} spawns a
-background thread at instantiation. In the thread it does all processing of
-license check results, whether the result is a response received from the server
-or a timeout error. At the conclusion of processing, the LVL calls your
-{@code LicenseCheckerCallback} methods from the background thread. </p>
-
-<p>To your application, this means that:</p>
-
-<ol>
-<li>Your {@code LicenseCheckerCallback} methods will be invoked, in many cases, from a
-background thread.</li>
-<li>Those methods won't be able to update state or invoke any processing in the
-UI thread, unless you create a Handler in the UI thread and have your callback
-methods post to the Handler.</li>
-</ol>
-
-<p>If you want your {@code LicenseCheckerCallback} methods to update the UI thread,
-instantiate a {@link android.os.Handler} in the main Activity's
-{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method,
-as shown below. In this example, the LVL sample application's
-{@code LicenseCheckerCallback} methods (see above) call <code>displayResult()</code> to
-update the UI thread through the Handler's
-{@link android.os.Handler#post(java.lang.Runnable) post()} method.</p>
-
-<pre>private Handler mHandler;
-
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        ...
-        mHandler = new Handler();
-    }
-</pre>
-
-<p>Then, in your {@code LicenseCheckerCallback} methods, you can use Handler methods to
-post Runnable or Message objects to the Handler. Here's how the sample
-application included in the LVL posts a Runnable to a Handler in the UI thread
-to display the license status.</p>
-
-<pre>    private void displayResult(final String result) {
-        mHandler.post(new Runnable() {
-            public void run() {
-                mStatusText.setText(result);
-                setProgressBarIndeterminateVisibility(false);
-                mCheckLicenseButton.setEnabled(true);
-            }
-        });
-    }
-</pre>
-
-<h3 id="lc-lcc">Instantiate LicenseChecker and LicenseCheckerCallback</h3>
-
-<p>In the main Activity's
-{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method,
-create private instances of LicenseCheckerCallback and {@code LicenseChecker}. You must
-instantiate {@code LicenseCheckerCallback} first, because you need to pass a reference
-to that instance when you call the constructor for {@code LicenseChecker}. </p>
-
-<p>When you instantiate {@code LicenseChecker}, you need to pass in these parameters:</p>
-
-<ul>
-<li>The application {@link android.content.Context}</li>
-<li>A reference to the {@code Policy} implementation to use for the license check. In
-most cases, you would use the default {@code Policy} implementation provided by the LVL,
-ServerManagedPolicy. </li>
-<li>The String variable holding your publisher account's public key for
-licensing. </li>
-</ul>
-
-<p>If you are using ServerManagedPolicy, you won't need to access the class
-directly, so you can instantiate it in the {@code LicenseChecker} constructor,
-as shown in the example below. Note that you need to pass a reference to a new
-Obfuscator instance when you construct ServerManagedPolicy.</p>
-
-<p>The example below shows the instantiation of {@code LicenseChecker} and
-{@code LicenseCheckerCallback} from the <code>onCreate()</code> method of an Activity
-class. </p>
-
-<pre>public class MainActivity extends Activity {
-    ...
-    private LicenseCheckerCallback mLicenseCheckerCallback;
-    private LicenseChecker mChecker;
-
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        ...
-        // Construct the LicenseCheckerCallback. The library calls this when done.
-        mLicenseCheckerCallback = new MyLicenseCheckerCallback();
-
-        // Construct the LicenseChecker with a Policy.
-        mChecker = new LicenseChecker(
-            this, new ServerManagedPolicy(this,
-                new AESObfuscator(SALT, getPackageName(), deviceId)),
-            BASE64_PUBLIC_KEY  // Your public licensing key.
-            );
-        ...
-    }
-}
-</pre>
-
-
-<p>Note that {@code LicenseChecker} calls the {@code LicenseCheckerCallback} methods from the UI
-thread <em>only</em> if there is valid license response cached locally. If the
-license check is sent to the server, the callbacks always originate from the
-background thread, even for network errors. </p>
-
-
-<h3 id="check-access">Call checkAccess() to initiate the license check</h3>
-
-<p>In your main Activity, add a call to the <code>checkAccess()</code> method of the
-{@code LicenseChecker} instance. In the call, pass a reference to your
-{@code LicenseCheckerCallback} instance as a parameter. If you need to handle any
-special UI effects or state management before the call, you might find it useful
-to call <code>checkAccess()</code> from a wrapper method. For example, the LVL
-sample application calls <code>checkAccess()</code> from a
-<code>doCheck()</code> wrapper method:</p>
-
-<pre>    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        ...
-        // Call a wrapper method that initiates the license check
-        doCheck();
-        ...
-    }
-    ...
-    private void doCheck() {
-        mCheckLicenseButton.setEnabled(false);
-        setProgressBarIndeterminateVisibility(true);
-        mStatusText.setText(R.string.checking_license);
-        mChecker.checkAccess(mLicenseCheckerCallback);
-    }
-</pre>
-
-
-<h3 id="account-key">Embed your public key for licensing</h3>
-
-<p>For each publisher account, the Google Play service automatically
-generates a  2048-bit RSA public/private key pair that is used exclusively for
-licensing. The key pair is uniquely associated with the publisher account and is
-shared across all applications that are published through the account. Although
-associated with a publisher account, the key pair is <em>not</em> the same as
-the key that you use to sign your applications (or derived from it).</p>
-
-<p>The Google Play publisher site exposes the public key for licensing to any
-developer signed in to the publisher account, but it keeps the private key
-hidden from all users in a secure location. When an application requests a
-license check for an application published in your account, the licensing server
-signs the license response using the private key of your account's key pair.
-When the LVL receives the response, it uses the public key provided by the
-application to verify the signature of the license response. </p>
-
-<p>To add licensing to an application, you must obtain your publisher account's
-public key for licensing and copy it into your application. Here's how to find
-your account's public key for licensing:</p>
-
-<ol>
-<li>Go to the Google Play <a
-href="http://play.google.com/apps/publish">publisher site</a> and sign in.
-Make sure that you sign in to the account from which the application you are
-licensing is published (or will be published). </li>
-<li>In the account home page, locate the "Edit profile" link and click it. </li>
-<li>In the Edit Profile page, locate the "Licensing" pane, shown below. Your
-public key for licensing is given in the "Public key" text box. </li>
-</ol>
-
-<p>To add the public key to your application, simply copy/paste the key string
-from the text box into your application as the value of the String variable
-<code>BASE64_PUBLIC_KEY</code>. When you are copying, make sure that you have
-selected the entire key string, without omitting any characters. </p>
-
-<p>Here's an example from the LVL sample application:</p>
-
-<pre>    public class MainActivity extends Activity {
-        private static final String BASE64_PUBLIC_KEY = "MIIBIjANBgkqhkiG ... "; //truncated for this example
-    ...
-    }
-</pre>
-
-<h3 id="handler-cleanup">Call your LicenseChecker's onDestroy() method
-to close IPC connections</h3>
-
-<p>Finally, to let the LVL clean up before your application
-{@link android.content.Context} changes, add a call to the {@code LicenseChecker}'s
-<code>onDestroy()</code> method from your Activity's
-{@link android.app.Activity#onDestroy()} implementation. The call causes the
-{@code LicenseChecker} to properly close any open IPC connection to the Google Play
-application's ILicensingService and removes any local references to the service
-and handler.</p>
-
-<p>Failing to call the {@code LicenseChecker}'s <code>onDestroy()</code> method
-can lead to problems over the lifecycle of your application. For example, if the
-user changes screen orientation while a license check is active, the application
-{@link android.content.Context} is destroyed. If your application does not
-properly close the {@code LicenseChecker}'s IPC connection, your application will crash
-when the response is received. Similarly, if the user exits your application
-while a license check is in progress,  your application will crash when the
-response is received, unless it has properly called the
-{@code LicenseChecker}'s <code>onDestroy()</code> method to disconnect from the service.
-</p>
-
-<p>Here's an example from the sample application included in the LVL, where
-<code>mChecker</code> is the {@code LicenseChecker} instance:</p>
-
-<pre>    &#64;Override
-    protected void onDestroy() {
-        super.onDestroy();
-        mChecker.onDestroy();
-        ...
-    }
-</pre>
-
-<p>If you are extending or modifying {@code LicenseChecker}, you might also need to call
-the {@code LicenseChecker}'s <code>finishCheck()</code> method, to clean up any open IPC
-connections.</p>
-
-<h2 id="impl-DeviceLimiter">Implementing a DeviceLimiter</h2>
-
-<p>In some cases, you might want your {@code Policy} to limit the number of actual
-devices that are permitted to use a single license. This would prevent a user
-from moving a licensed application onto a number of devices and using the
-application on those devices under the same account ID. It would also prevent a
-user from "sharing" the application by providing the account information
-associated with the license to other individuals, who could then sign in to that
-account on their devices and access the license to the application. </p>
-
-<p>The LVL supports per-device licensing by providing a
-<code>DeviceLimiter</code> interface, which declares a single method,
-<code>allowDeviceAccess()</code>. When a LicenseValidator is handling a response
-from the licensing server, it calls <code>allowDeviceAccess()</code>, passing a
-user ID string extracted from the response.</p>
-
-<p>If you do not want to support device limitation, <strong>no work is
-required</strong> &mdash; the {@code LicenseChecker} class automatically uses a default
-implementation called NullDeviceLimiter. As the name suggests, NullDeviceLimiter
-is a "no-op" class whose <code>allowDeviceAccess()</code> method simply returns
-a <code>LICENSED</code> response for all users and devices. </p>
-
-<div style="border-left:4px solid #FFCF00;margin:1em;padding: 0 0 0 .5em">
-<p><strong>Caution:</strong> Per-device licensing is <em>not recommended for
-most applications</em> because:</p>
-<ul>
-<li>It requires that you provide a backend server to manage a users and devices
-mapping, and </li>
-<li>It could inadvertently result in a user being denied access to an
-application that they have legitimately purchased on another device.</li>
-</ul>
-</div>
-
-
-
-
-
-
-
-
-
-
-
-<h2 id="app-obfuscation">Obfuscating Your Code</h2>
-
-<p>To ensure the security of your application, particularly for a paid
-application that uses licensing and/or custom constraints and protections, it's
-very important to obfuscate your application code. Properly obfuscating your
-code makes it more difficult for a malicious user to decompile the application's
-bytecode, modify it &mdash; such as by removing the license check &mdash;
-and then recompile it.</p>
-
-<p>Several obfuscator programs are available for Android applications, including
-<a href="http://proguard.sourceforge.net/">ProGuard</a>, which also offers
-code-optimization features. The use of ProGuard or a similar program to obfuscate
-your code is <em>strongly recommended</em> for all applications that use Google
-Play Licensing. </p>
-
-<h2 id="app-publishing">Publishing a Licensed Application</h2>
-
-<p>When you are finished testing your license implementation, you are ready to
-publish the application on Google Play. Follow the normal steps to <a
-href="{@docRoot}guide/publishing/preparing.html">prepare</a>, <a
-href="{@docRoot}guide/publishing/app-signing.html">sign</a>, and then <a
-href="{@docRoot}guide/publishing/publishing.html">publish the application</a>.
-</p>
-
-<h3>Removing Copy Protection</h3>
-
-<p>After uploading your licensed application, remember to remove copy protection
-from the application, if it is currently used. To check and remove copy
-protection, sign in to the publisher site and go the application's upload
-details page. In the Publishing options section, make sure that the Copy
-Protection radio button selection is "Off".</p>
-
-
-<h2 id="support">Where to Get Support</h2>
-
-<p>If you have questions or encounter problems while implementing or deploying
-publishing in your applications, please use the support resources listed in the
-table below. By directing your queries to the correct forum, you can get the
-support you need more quickly. </p>
-
-<p class="table-caption"><strong>Table 2.</strong> Developer support resources
-for Google Play Licensing Service.</p>
-
-<table>
-
-<tr>
-<th>Support Type</th>
-<th>Resource</th>
-<th>Range of Topics</th>
-</tr>
-<tr>
-<td rowspan="2">Development and testing issues</td>
-<td>Google Groups: <a
-href="http://groups.google.com/group/android-developers">android-developers</a>
-</td>
-<td rowspan="2">LVL download and integration, library projects, {@code Policy}
-questions, user experience ideas, handling of responses, {@code Obfuscator}, IPC, test
-environment setup</td>
-</tr>
-<tr>
-<td>Stack Overflow: <a
-href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/android</a></td>
-</tr>
-<tr>
-<td rowspan="2">Accounts, publishing, and deployment issues</td>
-<td><a href="http://www.google.com/support/forum/p/Android+Market">Google Play
-Help Forum</a></td>
-<td rowspan="2">Publisher accounts, licensing key pair, test accounts, server
-responses, test responses, application deployment and results</td>
-</tr>
-<tr>
-<td><a
-href="http://market.android.com/support/bin/answer.py?answer=186113">Market
-Licensing Support FAQ</a></td>
-</tr>
-<tr>
-<td>LVL issue tracker</td>
-<td><a href="http://code.google.com/p/marketlicensing/issues/">Marketlicensing
-project issue tracker</a></td>
-<td>Bug and issue reports related specifically to the LVL source code classes
-and interface implementations</td>
-</tr>
-
-</table>
-
-<p>For general information about how to post to the groups listed above, see <a
-href="{@docRoot}resources/community-groups.html">Developer Forums</a> document
-in the Resources tab.</p>
-
-
diff --git a/docs/html/guide/market/licensing/index.jd b/docs/html/guide/market/licensing/index.jd
deleted file mode 100644
index 1f15303..0000000
--- a/docs/html/guide/market/licensing/index.jd
+++ /dev/null
@@ -1,61 +0,0 @@
-page.title=Application Licensing
-@jd:body
-
-
-<p>Google Play offers a licensing service that lets you enforce licensing policies for
-applications that you publish on Google Play. With Google Play Licensing, your application can
-query Google Play at run time to obtain the licensing status for the current user, then allow or
-disallow further use as appropriate. </p>
-
-<p>Using the service, you can apply a flexible licensing policy on an application-by-application
-basis&mdash;each application can enforce licensing in the way most appropriate for it. If necessary,
-an application can apply custom constraints based on the licensing status obtained from Google Play.
-For example, an application can check the licensing status and then apply custom constraints
-that allow the user to run it unlicensed for a specific validity period. An application can also
-restrict use of the application to a specific device, in addition to any other constraints. </p>
-
-<p>The licensing service is a secure means of controlling access to your applications. When an
-application checks the licensing status, the Google Play server signs the licensing status
-response using a key pair that is uniquely associated with the publisher account. Your application
-stores the public key in its compiled <code>.apk</code> file and uses it to verify the licensing
-status response.</p>
-
-<p>Any application that you publish through Google Play can use the Google Play Licensing
-service. No special account or registration is needed. Additionally, because the service uses no
-dedicated framework APIs, you can add licensing to any application that uses a minimum API level of
-3 or higher.</p>
-
-<p class="note"><strong>Note:</strong> The Google Play Licensing service is primarily intended
-for paid applications that wish to verify that the current user did in fact pay for the application
-on Google Play. However, any application (including free apps) may use the licensing service
-to initiate the download of an APK expansion file. In which case, the request that your application
-sends to the licensing service is not to check whether the user paid for the app, but to request the
-URL of the expansion files. For information about downloading expansion files for your application,
-read the guide to <a href="{@docRoot}guide/market/expansion-files.html">APK Expansion Files</a>.</p>
-
-
-<p>To learn more about Google Play's application licensing service and start integrating it into
-your applications, read the following documents:</p>
-
-<dl>
-  <dt><strong><a href="{@docRoot}guide/market/licensing/overview.html">Licensing
-Overview</a></strong></dt>
-    <dd>Describes how the service works and what a typical licensing implementation looks
-like.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/licensing/setting-up.html">Setting Up for
-Licensing</a></strong></dt>
-    <dd>Explains how to set up your Google Play account, development environment, and
-testing environment in order to add licensing to your app.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding
-Licensing to Your App</a></strong></dt>
-    <dd>Provides a step-by-step guide to add licensing verification to your application.</dd>
-  <dt><strong><a href="{@docRoot}guide/market/licensing/licensing-reference.html">Licensing
-Reference</a></strong></dt>
-    <dd>Provides detailed information about the licensing library's classes and the service response
-codes.</dd>
-</dl>
-
-
-
-
-
diff --git a/docs/html/guide/market/licensing/licensing-reference.jd b/docs/html/guide/market/licensing/licensing-reference.jd
deleted file mode 100644
index 0a7e033..0000000
--- a/docs/html/guide/market/licensing/licensing-reference.jd
+++ /dev/null
@@ -1,439 +0,0 @@
-page.title=Licensing Reference
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-
-<div id="qv-wrapper">
-<div id="qv">
-  
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#lvl-summary">LVL Classes and Interfaces</a></li>
-    <li><a href="#server-response-codes">Server Response Codes</a></li>
-    <li><a href="#extras">Server Response Extras</a></li>
-  </ol>
-
-</div>
-</div>
-
-
-<h2 id="lvl-summary">LVL Classes and Interfaces</h2>
-
-<p>Table 1 lists all of the source files in the License Verification
-Library (LVL) available through the Android SDK. All of the files are part of
-the <code>com.android.vending.licensing</code> package.</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Summary of LVL library
-classes and interfaces.</p>
-
-<div style="width:99%">
-<table width="100%">
-
-<tr>
-<th width="15%">Category</th>
-<th width="20%">Name</th>
-<th width="100%">Description</th>
-</tr>
-
-<tr>
-<td rowspan="2">License check and result</td>
-<td>LicenseChecker</td>
-<td>Class that you instantiate (or subclass) to initiate a license check.</td>
-</tr>
-<tr>
-<td><em>LicenseCheckerCallback</em></td>
-<td>Interface that you implement to handle result of the license check.</td>
-</tr>
-
-<tr>
-<td rowspan="3" width="15%">Policy</td>
-<td width="20%"><em>Policy</em></td>
-<td width="100%">Interface that you implement to determine whether to allow
-access to the application, based on the license response. </td>
-</tr>
-<tr>
-<td>ServerManagedPolicy</td>
-<td width="100%">Default {@code Policy} implementation. Uses settings provided by the
-licensing server to manage local storage of license data, license validity,
-retry.</td>
-</tr>
-<tr>
-<td>StrictPolicy</td>
-<td>Alternative {@code Policy} implementation. Enforces licensing based on a direct
-license response from the server only. No caching or request retry.</td>
-</tr>
-
-<tr>
-<td rowspan="2" width="15%">Data obfuscation <br><em>(optional)</em></td>
-<td width="20%"><em>Obfuscator</em></td>
-<td width="100%">Interface that you implement if you are using a {@code Policy} (such as
-ServerManagedPolicy) that caches license response data in a persistent store.
-Applies an obfuscation algorithm to encode and decode data being written or
-read.</td>
-</tr>
-<tr>
-<td>AESObfuscator</td>
-<td>Default Obfuscator implementation that uses AES encryption/decryption
-algorithm to obfuscate/unobfuscate data.</td>
-</tr>
-
-<tr>
-<td rowspan="2" width="15%">Device limitation<br><em>(optional)</em></td>
-<td width="20%"><em>DeviceLimiter</em></td>
-<td width="100%">Interface that you implement if you want to restrict use of an
-application to a specific device. Called from LicenseValidator. Implementing
-DeviceLimiter is not recommended for most applications because it requires a
-backend server and may cause the user to lose access to licensed applications,
-unless designed with care.</td>
-</tr>
-<tr>
-<td>NullDeviceLimiter</td>
-<td>Default DeviceLimiter implementation that is a no-op (allows access to all
-devices).</td>
-</tr>
-
-<tr>
-<td rowspan="6" width="15%">Library core, no integration needed</td>
-<td width="20%">ResponseData</td>
-<td width="100%">Class that holds the fields of a license response.</td>
-</tr>
-<tr>
-<td>LicenseValidator</td>
-<td>Class that decrypts and verifies a response received from the licensing
-server.</td>
-</tr>
-<tr>
-<td>ValidationException</td>
-<td>Class that indicates errors that occur when validating the integrity of data
-managed by an Obfuscator.</td>
-</tr>
-<tr>
-<td>PreferenceObfuscator</td>
-<td>Utility class that writes/reads obfuscated data to the system's
-{@link android.content.SharedPreferences} store.</td>
-</tr>
-<tr>
-<td><em>ILicensingService</em></td>
-<td>One-way IPC interface over which a license check request is passed to the
-Google Play client.</td>
-</tr>
-<tr>
-<td><em>ILicenseResultListener</em></td>
-<td>One-way IPC callback implementation over which the application receives an
-asynchronous response from the licensing server.</td>
-</tr>
-
-</table>
-</div>
-
-
-<h2 id="server-response-codes">Server Response Codes</h2>
-
-<p>Table 2 lists all of the license response codes supported by the
-licensing server. In general, an application should handle all of these response
-codes. By default, the LicenseValidator class in the LVL provides all of the
-necessary handling of these response codes for you. </p>
-
-<p class="table-caption"><strong>Table 2.</strong> Summary of response codes
-returned by the Google Play server in a license response.</p>
-
-<table>
-
-<tr>
-<th>Response Code</th>
-<th>Description</th>
-<th>Signed?</th>
-<th>Extras</th>
-<th>Comments</th>
-</tr>
-<tr>
-<td>{@code LICENSED}</td>
-<td>The application is licensed to the user. The user has purchased the
-application or the application only exists as a draft.</td>
-<td>Yes</td>
-<td><code>VT</code>,&nbsp;<code>GT</code>, <code>GR</code></td>
-<td><em>Allow access according to {@code Policy} constraints.</em></td>
-</tr>
-<tr>
-<td>{@code LICENSED_OLD_KEY}</td>
-<td>The application is licensed to the user, but there is an updated application
-version available that is signed with a different key. </td>
-<td>Yes </td>
-<td><code>VT</code>, <code>GT</code>, <code>GR</code>, <code>UT</code></td>
-<td><em>Optionally allow access according to {@code Policy} constraints.</em>
-<p style="margin-top:.5em;">Can indicate that the key pair used by the installed
-application version is invalid or compromised. The application can allow access
-if needed or inform the user that an upgrade is available and limit further use
-until upgrade.</p>
-</td>
-</tr>
-<tr>
-<td>{@code NOT_LICENSED}</td>
-<td>The application is not licensed to the user.</td>
-<td>No</td>
-<td></td>
-<td><em>Do not allow access.</em></td>
-</tr>
-<tr>
-<td>{@code ERROR_CONTACTING_SERVER}</td>
-<td>Local error &mdash; the Google Play application was not able to reach the
-licensing server, possibly because of network availability problems. </td>
-<td>No</td>
-<td></td>
-<td><em>Retry the license check according to {@code Policy} retry limits.</em></td>
-</tr>
-<tr>
-<td>{@code ERROR_SERVER_FAILURE}</td>
-<td>Server error &mdash; the server could not load the publisher account's key
-pair for licensing.</td>
-<td>No</td>
-<td></td>
-<td><em>Retry the license check according to {@code Policy} retry limits.</em>
-</td>
-</tr>
-<tr>
-<td>{@code ERROR_INVALID_PACKAGE_NAME}</td>
-<td>Local error &mdash; the application requested a license check for a package
-that is not installed on the device. </td>
-<td>No </td>
-<td></td>
-<td><em>Do not retry the license check.</em>
-<p style="margin-top:.5em;">Typically caused by a development error.</p>
-</td>
-</tr>
-<tr>
-<td>{@code ERROR_NON_MATCHING_UID}</td>
-<td>Local error &mdash; the application requested a license check for a package
-whose UID (package, user ID pair) does not match that of the requesting
-application. </td>
-<td>No </td>
-<td></td>
-<td><em>Do not retry the license check.</em>
-<p style="margin-top:.5em;">Typically caused by a development error.</p>
-</td>
-</tr>
-<tr>
-<td>{@code ERROR_NOT_MARKET_MANAGED}</td>
-<td>Server error &mdash; the application (package name) was not recognized by
-Google Play. </td>
-<td>No</td>
-<td></td>
-<td><em>Do not retry the license check.</em>
-<p style="margin-top:.5em;">Can indicate that the application was not published
-through Google Play or that there is an development error in the licensing
-implementation.</p>
-</td>
-</tr>
-
-</table>
-
-<p class="note"><strong>Note:</strong> As documented in <a
-href="{@docRoot}guide/market/licensing/setting-up.html#test-env">
-Setting Up The Testing Environment</a>, the response code can be manually
-overridden for the application developer and any registered test users via the
-Google Play publisher site.
-<br/><br/>
-Additionally, as noted above, applications that are in draft mode (in other
-words, applications that have been uploaded but have <em>never</em> been
-published) will return {@code LICENSED} for all users, even if not listed as a test
-user. Since the application has never been offered for download, it is assumed
-that any users running it must have obtained it from an authorized channel for
-testing purposes.</p>
-
-
-
-
-<h2 id="extras">Server Response Extras</h2>
-
-<p>To assist your application in managing access to the application across the application refund
-period and provide other information, The licensing server includes several pieces of
-information in the license responses. Specifically, the service provides recommended values for the
-application's license validity period, retry grace period, maximum allowable retry count, and other
-settings. If your application uses <a href="{@docRoot}guide/market/expansion-files.html">APK
-expansion files</a>, the response also includes the file names, sizes, and URLs. The server appends
-the settings as key-value pairs in the license response "extras" field. </p>
-
-<p>Any {@code Policy} implementation can extract the extras settings from the license
-response and use them as needed. The LVL default {@code Policy} implementation, <a
-href="{@docRoot}guide/market/licensing/adding-licensing.html#ServerManagedPolicy">{@code
-ServerManagedPolicy}</a>, serves as a working
-implementation and an illustration of how to obtain, store, and use the
-settings. </p>
-
-<p class="table-caption"><strong>Table 3.</strong> Summary of
-license-management settings supplied by the Google Play server in a license
-response.</p>
-
-<table>
-<tr>
-<th>Extra</th><th>Description</th>
-</tr>
-
-<tr>
-  <td>{@code VT}</td>
-  <td>License validity timestamp. Specifies the date/time at which the current
-(cached) license response expires and must be rechecked on the licensing server. See the section
-below about <a href="#VT">License validity period</a>.
- </td>
-</tr>
-<tr>
-  <td>{@code GT}</td>
-  <td>Grace period timestamp. Specifies the end of the period during which a
-Policy may allow access to the application, even though the response status is
-{@code RETRY}. <p>The value is managed by the server, however a typical value would be 5
-or more days. See the section
-below about <a href="#GTGR">Retry period and maximum retry count</a>.</p></td>
-</tr>
-<tr>
-  <td>{@code GR}</td>
-  <td>Maximum retries count. Specifies how many consecutive {@code RETRY} license checks
-the {@code Policy} should allow, before denying the user access to the application.
-<p>The value is managed by the server, however a typical value would be "10" or
-higher. See the section
-below about <a href="#GTGR">Retry period and maximum retry count</a>.</p></td>
-</tr>
-<tr>
-  <td>{@code UT}</td>
-  <td>Update timestamp. Specifies the day/time when the most recent update to
-this application was uploaded and published. <p>The server returns this extra
-only for {@code LICENSED_OLD_KEYS} responses, to allow the {@code Policy} to determine how much
-time has elapsed since an update was published with new licensing keys before
-denying the user access to the application. </p></td>
-</tr>
-
-
-<!-- APK EXPANSION FILE RESPONSES -->
-
-<tr>
-  <td>{@code FILE_URL1} or {@code FILE_URL2}</td>
-  <td>The URL for an expansion file (1 is for the main file, 2 is the patch file). Use this to
-download the file over HTTP.</td>
-</tr>
-<tr>
-  <td>{@code FILE_NAME1} or {@code FILE_NAME2}</td>
-  <td>The expansion file's name (1 is for the main file, 2 is the patch file). You must use this
-name when saving the file on the device.</td>
-</tr>
-<tr>
-  <td>{@code FILE_SIZE1} or {@code FILE_SIZE2}</td>
-  <td>The size of the file in bytes (1 is for the main file, 2 is the patch file). Use this to
-assist with downloading and to ensure that enough space is available on the device's shared
-storage location before downloading.</td>
-</tr>
-
-</table>
-
-
-
-<h4 id="VT">License validity period</h4>
-
-<p>The Google Play licensing server sets a license validity period for all
-downloaded applications. The period expresses the interval of time over which an
-application's license status should be considered as unchanging and cacheable by
-a licensing {@code Policy} in the application. The licensing server includes the
-validity period in its response to all license checks, appending an
-end-of-validity timestamp to the response as an extra under the key {@code VT}. A
-{@code Policy} can extract the VT key value and use it to conditionally allow access to
-the application without rechecking the license, until the validity period
-expires. </p>
-
-<p>The license validity signals to a licensing {@code Policy} when it must recheck the
-licensing status with the licensing server. It is <em>not</em> intended to imply
-whether an application is actually licensed for use. That is, when an
-application's license validity period expires, this does not mean that the
-application is no longer licensed for use &mdash; rather, it indicates only that
-the {@code Policy} must recheck the licensing status with the server. It follows that,
-as long as the license validity period has not expired, it is acceptable for the
-{@code Policy} to cache the initial license status locally and return the cached license
-status instead of sending a new license check to the server.</p>
-
-<p>The licensing server manages the validity period as a means of helping the
-application properly enforce licensing across the refund period offered by
-Google Play for paid applications. It sets the validity period based on
-whether the application was purchased and, if so, how long ago. Specifically,
-the server sets a validity period as follows:</p>
-
-<ul>
-<li>For a paid application, the server sets the initial license validity period
-so that the license response remains valid for as long as the application is
-refundable. A licensing {@code Policy} in the application may cache the
-result of the initial license check and does not need to recheck the license
-until the validity period has expired.</li>
-<li>When an application is no longer refundable, the server
-sets a longer validity period &mdash; typically a number of days. </li>
-
-<!-- TODO: Verify the following behavior is still true w/ OBB: -->
-<li>For a free application, the server sets the validity period to a very high
-value (<code>long.MAX_VALUE</code>). This ensures that, provided the {@code Policy} has
-cached the validity timestamp locally, it will not need to recheck the
-license status of the application in the future.</li>
-</ul>
-
-<p>The {@code ServerManagedPolicy} implementation uses the extracted timestamp
-(<code>mValidityTimestamp</code>) as a primary condition for determining whether
-to recheck the license status with the server before allowing the user access to
-the application. </p>
-
-
-<h4 id="GTGR">Retry period and maximum retry count</h4>
-
-<p>In some cases, system or network conditions can prevent an application's
-license check from reaching the licensing server, or prevent the server's
-response from reaching the Google Play client application. For example, the
-user might launch an application when there is no cell network or data
-connection available&mdash;such as when on an airplane&mdash;or when the
-network connection is unstable or the cell signal is weak. </p>
-
-<p>When network problems prevent or interrupt a license check, the Google
-Play client notifies the application by returning a {@code RETRY} response code to
-the {@code Policy}'s <code>processServerResponse()</code> method. In the case of system
-problems, such as when the application is unable to bind with Google Play's
-{@code ILicensingService} implementation, the {@code LicenseChecker} library itself calls the
-Policy <code>processServerResonse()</code> method with a {@code RETRY} response code.
-</p>
-
-<p>In general, the {@code RETRY} response code is a signal to the application that an
-error has occurred that has prevented a license check from completing.
-
-<p>The Google Play server helps an application to manage licensing under
-error conditions by setting a retry "grace period" and a recommended maximum
-retries count. The server includes these values in all license check responses,
-appending them as extras under the keys {@code GT} and {@code GR}. </p>
-
-<p>The application {@code Policy} can extract the {@code GT} and {@code GR} extras and use them to
-conditionally allow access to the application, as follows:</p>
-
-<ul>
-<li>For a license check that results in a {@code RETRY} response, the {@code Policy} should
-cache the {@code RETRY} response code and increment a count of {@code RETRY} responses.</li>
-<li>The {@code Policy} should allow the user to access the application, provided that
-either the retry grace period is still active or the maximum retries count has
-not been reached.</li>
-</ul>
-
-<p>The {@code ServerManagedPolicy} uses the server-supplied {@code GT} and {@code GR} values as
-described above. The example below shows the conditional handling of the retry
-responses in the <code>allow()</code> method. The count of {@code RETRY} responses is
-maintained in the <code>processServerResponse()</code> method, not shown. </p>
-
-
-<pre>    
-public boolean allowAccess() {
-    long ts = System.currentTimeMillis();
-    if (mLastResponse == LicenseResponse.LICENSED) {
-        // Check if the LICENSED response occurred within the validity timeout.
-        if (ts &lt;= mValidityTimestamp) {
-            // Cached LICENSED response is still valid.
-            return true;
-        }
-    } else if (mLastResponse == LicenseResponse.RETRY &amp;&amp;
-                ts &lt; mLastResponseTime + MILLIS_PER_MINUTE) {
-        // Only allow access if we are within the retry period or we haven't used up our
-        // max retries.
-        return (ts &lt;= mRetryUntil || mRetryCount &lt;= mMaxRetries);
-    }
-    return false;
-}</pre>
-
diff --git a/docs/html/guide/market/licensing/overview.jd b/docs/html/guide/market/licensing/overview.jd
deleted file mode 100644
index e7e23f8..0000000
--- a/docs/html/guide/market/licensing/overview.jd
+++ /dev/null
@@ -1,246 +0,0 @@
-page.title=Licensing Overview
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-  
-  <h2>Quickview</h2>
-  <ul>
-    <li>Licensing allows you to verify your app was purchased from Google Play</li>
-    <li>Your app maintains control of how it enforces its licensing status</li>
-    <li>The service is free for all developers who publish on Google Play</li>
-  </ul>
-  
-  <h2>In this document</h2>
-  <ol>
-  <li><a href="#Secure">License Responses are Secure</a></li>
-  <li><a href="#LVL">Licensing Verification Library</a></li>
-  <li><a href="#Reqs">Requirements and Limitations</a></li>
-  <li><a href="#CopyProtection">Replacement for Copy Protection</a></li>
-</ol>
-  
-</div>
-</div>
-
-
-<p>Google Play Licensing is a network-based service that lets an application query a trusted
-Google Play licensing server to determine whether the application is licensed to the current
-device user. The licensing service is based on the capability of the Google Play licensing server
-to determine whether a given user is licensed to use a given application. Google Play considers a
-user to be licensed if the user is a recorded purchaser of the application.</p>
-
-<p>The request starts when your application makes a request to a service hosted by
-the Google Play client application. The Google Play application then sends a request to
-the licensing server and receives the result. The Google Play application sends
-the result to your application, which can allow or disallow further use of the
-application as needed.</p>
-
-<p class="note"><strong>Note:</strong> If a paid application has been uploaded to Google Play but
-saved only as a draft application (the app is unpublished), the licensing server considers all users
-to be licensed users of the application (because it's not even possible to purchase the app).
-This exception is necessary in order for you to perform testing of your licensing
-implementation.</p>
-
-
-<div class="figure" style="width:469px">
-<img src="{@docRoot}images/licensing_arch.png" alt=""/>
-<p class="img-caption"><strong>Figure 1.</strong> Your application initiates a
-license check through the License Verification Library and the Google Play
-client, which handles communication with the Google Play server.</p>
-</div>
-
-
-<p>To properly identify the user and determine the license status, the licensing server requires
-information about the application and user&mdash;your application and the Google Play client work
-together to assemble the information and the Google Play client passes it to the server. </p>
-
-<p>To help you add licensing to your application, the Android SDK provides a downloadable set of
-library sources that you can include in your application project: the Google Market
-Licensing package. The License Verification Library (LVL) is a library you can add to your
-application that
-handles all of the licensing-related communication with the Google Play licensing service. With
-the LVL added to your application, your application can determine its licensing status for the
-current user by simply calling a method and implementing a callback that receives the status
-response.</p>
-
-<p>Your application does not query the licensing server
-directly, but instead calls the Google Play client over remote IPC to
-initiate a license request. In the license request:</p>
-
-<ul>
-<li>Your application provides: its package name, a nonce that is later used to
-validate any response from the server, and a callback over which the
-response can be returned asynchronously.</li>
-<li>The Google Play client collects the necessary information about the user and the device,
-such as the device's primary Google account username, IMSI, and other
-information. It then sends the license check request to the server on behalf of
-your application.</li>
-<li>The Google Play server evaluates the request using all available information, attempting
-to establish the user's identity to a sufficient level of confidence. The server
-then checks the user identity against purchase records for your application and
-returns a license response, which the Google Play client returns to your
-application over the IPC callback.</li>
-</ul>
-
-<p>You can choose when, and how often, you want your application to check its
-license and you have full control over how it handles the response, verifies the
-signed response data, and enforces access controls.</p>
-
-<p>Notice that during a license check, your application does not manage any
-network connections or use any licensing related APIs in the Android platform.</p>
-
-
-
-
-<h2 id="Secure">License Responses are Secure</h2>
-
-<p>To ensure the integrity of each license query, the server signs the license
-response data using an RSA key pair that is shared exclusively between the Google Play
-server and you.</p>
-
-<p>The licensing service generates a single licensing key pair for each
-publisher account and exposes the public key in your account's profile page. You must copy the
-public key from the web site and embed it in your application source code. The server retains the
-private key internally and uses it to sign license responses for the applications you
-publish with that account.</p>
-
-<p>When your application receives a signed response, it uses the embedded public
-key to verify the data. The use of public key cryptography in the licensing
-service makes it possible for the application to detect responses that have been
-tampered with or that are spoofed.</p>
-
-
-
-
-<h2 id="LVL">Licensing Verification Library</h2>
-
-<p>The Android SDK provides a downloadable package called the Google Market Licensing package,
-which includes the License Verification Library (LVL). The LVL greatly simplifies the process of
-adding licensing to your application and helps ensure a more secure, robust implementation for your
-application. The LVL provides internal classes that handle most of the standard operations of a
-license query, such as contacting the Google Play client to initiate a license request and
-verifying and validating the responses. It also exposes interfaces that let you easily plug in your
-custom code for defining licensing policy and managing access as needed by your application. The key
-LVL interfaces are: </p>
-
-<dl>
-<dt>{@code Policy}</dt>
-  <dd>Your implementation determines whether to allow access to the
-application, based on the license response received from the server and any
-other data available (such as from a backend server associated with your
-application). The implementation can evaluate the various fields of the license
-response and apply other constraints, if needed. The implementation also lets
-you manage the handling of license checks that result in errors, such as network
-errors.</dd>
-
-<dt>{@code LicenseCheckerCallback}</dt>
-  <dd>Your implementation manages access to the
-application, based on the result of the {@code Policy} object's handling of the license
-response. Your implementation can manage access in any way needed, including
-displaying the license result in the UI or directing the user to purchase the
-application (if not currently licensed).</dd>
-</dl>
-
-
-<p>To help you get started with a {@code Policy}, the LVL provides two fully complete
-{@code Policy} implementations that you can use without modification or adapt to your
-needs:</p>
-
-<dl>
-<dt><a href="adding-licensing.html#ServerManagedPolicy">{@code ServerManagedPolicy}</a></dt>
-  <dd>A flexible {@code Policy}
-that uses settings provided by the licensing server to manage response caching
-and access to the application while the device is offline (such as when the
-user is on an airplane). For most applications, the use of
-{@code ServerManagedPolicy} is highly recommended.</dd>
-
-<dt><a href="adding-licensing.html#StrictPolicy">{@code StrictPolicy}</a></dt>
-  <dd>A restrictive {@code Policy} that
-does not cache any response data and allows the application access <em>only</em>
-when the server returns a licensed response.</dd>
-</dl>
-
-<p>The LVL is available as a downloadable package of the Android SDK. The
-package includes both the LVL itself and an example application that shows how
-the library should be integrated with your application and how your application
-should manage response data, UI interaction, and error conditions. </p>
-
-<p>The LVL sources are provided as an Android <em>library project</em>, which
-means that you can maintain a single set of library sources and share them
-across multiple applications. A full test environment is also available through
-the SDK, so you can develop and test the licensing implementation in your
-applications before publishing them, even if you don't have access to a
-physical device.</p>
-
-
-
-
-<h2 id="Reqs">Requirements and Limitations</h2>
-
-<p>Google Play Licensing is designed to let you apply license controls to
-applications that you publish through Google Play. The service is not
-designed to let you control access to applications that are not published
-through Google Play or that are run on devices that do not offer the Google
-Play client. </p>
-
-<p>Here are some points to keep in mind as you implement licensing in your
-application: </p>
-
-<ul>
-<li>An application can use the service only if the Google Play client is
-installed on its host device and the device is running Android 1.5 (API level 3)
-or higher.</li>
-<li>To complete a license check, the licensing server must be accessible over
-the network. You can implement license caching behaviors to manage access to your application when
-there is no network connectivity. </li>
-<li>The security of your application's licensing controls ultimately relies on
-the design of your implementation itself. The service provides the building
-blocks that let you securely check licensing, but the actual enforcement and
-handling of the license are factors are up to you. By following the best
-practices in the following documents, you can help ensure that your implementation will be
-secure.</li>
-<li>Adding licensing to an application does not affect the way the application
-functions when run on a device that does not offer Google Play.</li>
-<li>You can implement licensing controls for a free app, but only if you're using the service to 
-provide <a
-href="{@docRoot}guide/market/expansion-files.html">APK expansion files</a>.</li>
-</ul>
-
-
-
-<h2 id="CopyProtection">Replacement for Copy Protection</h2>
-
-<p>Google Play Licensing is a flexible, secure mechanism for controlling
-access to your applications. It effectively replaces the Copy Protection
-mechanism offered on Google Play and gives you wider distribution
-potential for your applications. </p>
-
-<ul>
-<li>A limitation of the legacy Copy Protection mechanism on Google Play is
-that applications using it can be installed only on compatible devices that
-provide a secure internal storage environment. For example, a copy-protected
-application cannot be downloaded from Google Play to a device that provides root
-access, and the application cannot be installed to a device's SD card. </li>
-<li>With Google Play licensing, you can move to a license-based model in
-which access is not bound to the characteristics of the host device, but to your
-publisher account on Google Play and the licensing policy that you define.
-Your application can be installed and controlled on any compatible device on
-any storage, including SD card.</li>
-</ul>
-
-<p>Although no license mechanism can completely prevent all unauthorized use,
-the licensing service lets you control access for most types of normal usage,
-across all compatible devices, locked or unlocked, that run Android 1.5 or
-higher version of the platform.</p>
-
-<p>To begin adding application licensing to your application, continue to <a
-href="{@docRoot}guide/market/licensing/setting-up.html">Setting Up for Licensing</a>.</p>
-
-
-
-
-
-
diff --git a/docs/html/guide/market/licensing/setting-up.jd b/docs/html/guide/market/licensing/setting-up.jd
deleted file mode 100644
index 0de7819..0000000
--- a/docs/html/guide/market/licensing/setting-up.jd
+++ /dev/null
@@ -1,701 +0,0 @@
-page.title=Setting Up for Licensing
-parent.title=Application Licensing
-parent.link=index.html
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-  
-  <h2>In this document</h2>
-  <ol>
-  <li><a href="#account">Setting Up a Publisher Account</a></li>
-  <li><a href="#dev-setup">Setting Up the Development Environment</a>
-    <ol>
-      <li><a href="#runtime-setup">Setting up the runtime environment</a></li>
-      <li><a href="#download-lvl">Downloading the LVL</a></li>
-      <li><a href="#lvl-setup">Setting Up the Licensing Verification Library</a></li>
-      <li><a href="#add-library">Including the LVL library project sources in your
-application</a></li>
-    </ol>
-  </li>
-  <li><a href="#test-env">Setting Up the Testing Environment</a>
-    <ol>
-      <li><a href="#test-response">Setting test responses for license checks</a></li>
-      <li><a href="#test-acct-setup">Setting up test accounts</a></li>
-      <li><a href="#acct-signin">Signing in to an authorized account in the runtime
-environment</a></li>
-    </ol>
-  </li>
-</ol>
-</div>
-</div>
-
-<p>Before you start adding license verification to your application, you need to set up your Google
-Play publishing account, your development environment, and test accounts required to verify
-your implementation.</p>
-
-
-<h2 id="account">Setting Up a Publisher Account</h2>
-
-<p>If you don't already have a publisher account for Google Play, you need to register for one
-using your Google account and agree to the terms of service on the Google Play publisher site:</p>
-
-<p style="margin-left:2em;"><a
-href="http://play.google.com/apps/publish">http://play.google.com/apps/publish</a>
-</p>
-
-<p>For more information, see <a
-href="{@docRoot}guide/publishing/publishing.html">Publishing on Google Play</a>.</p>
-
-<p>If you already have a publisher account on Google Play, use your existing
-account to set up licensing.</p>
-
-<p>Using your publisher account on Google Play, you can:</p>
-
-<ul>
-<li>Obtain a public key for licensing</li>
-<li>Debug and test an application's licensing implementation, prior to
-publishing the application</li>
-<li>Publish the applications to which you have added licensing support</li>
-</ul>
-
-<h4>Administrative settings for licensing</h4>
-
-<p>You can manage several
-administrative controls for Google Play licensing on the publisher site. The controls are available
-in the Edit Profile page, in the "Licensing" panel, shown in figure 1. The controls
-let you: </p>
-
-<ul>
-<li>Set up multiple "test accounts," identified by email address. The licensing
-server allows users signed in to test accounts on a device or emulator to send
-license checks and receive static test responses.</li>
-<li>Obtain the account's public key for licensing. When you are implementing
-licensing in an application, you must copy the public key string into the
-application.</li>
-<li>Configure static test responses that the server sends, when it receives a
-license check for an application uploaded to the publisher account, from a user
-signed in to the publisher account or a test account.</li>
-</ul>
-
-
-<img src="{@docRoot}images/licensing_public_key.png" alt=""/>
-<p class="img-caption"><strong>Figure 1.</strong> The Licensing
-panel of your account's Edit Profile page lets you manage administrative
-settings for licensing.</p>
-
-<p>For more information about how to work with test accounts and static test
-responses, see <a href="#test-env">Setting Up a Testing Environment</a>, below.
-
-
-
-<h2 id="dev-setup">Setting Up the Development Environment</h2>
-
-<p>Setting up your environment for licensing involves these tasks:</p>
-
-<ol>
-<li><a href="#runtime-setup">Setting up the runtime environment</a> for development</li>
-<li><a href="#download-lvl">Downloading the LVL</a> into your SDK </li>
-<li><a href="#lvl-setup">Setting up the Licensing Verification Library</a></li>
-<li><a href="#add-library">Including the LVL library project in your application</a></li>
-</ol>
-
-<p>The sections below describe these tasks. When you are done with setup,
-you can begin <a href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding
-Licensing to Your App</a>.</p>
-
-<p>To get started, you need to set up a proper runtime environment on which
-you can run, debug, and test your application's implementation of license
-checking and enforcement. </p>
-
-
-<h3 id="runtime-setup">Setting up the runtime environment</h3>
-
-<p>As described earlier, applications check licensing status not by contacting
-the licensing server directly, but by binding to a service provided by the
-Google Play application and initiating a license check request. The Google
-Play service then handles the direct communication with the licensing server
-and finally routes the response back to your application. To debug and test
-licensing in your application, you need to set up a runtime environment that
-includes the necessary Google Play service, so that your application is able
-to send license check requests to the licensing server. </p>
-
-<p>There are two types of runtime environment that you can use: </p>
-
-<ul>
-<li>An Android-powered device that includes the Google Play application, or</li>
-<li>An Android emulator running the Google APIs Add-on, API level 8 (release 2)
-or higher</li>
-</ul>
-
-<h4 id="runtime-device">Running on a device</h4>
-
-<p>To use an Android-powered device for
-debugging and testing licensing, the device must:</p>
-
-<ul>
-<li>Run a compatible version of Android 1.5 or later (API level
-3 or higher) platform, <em>and</em> </li>
-<li>Run a system image on which the Google Play client application
-is preinstalled. </li>
-</ul>
-
-<p>If Google Play is not preinstalled in the system image, your application won't
-be able to communicate with the Google Play licensing server. </p>
-
-<p>For general information about how to set up a device for use in developing
-Android applications, see <a
-href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a>.</p>
-
-<h4 id="runtime-emulator">Running on an Android emulator</h4>
-
-<p>If you don't have a device available, you can use an Android emulator for debugging and testing
-licensing.</p>
-
-<p>Because the Android platforms provided in the Android SDK <em>do
-not</em> include Google Play, you need to download the Google APIs Add-On
-platform, API level 8 (or higher), from the SDK repository. After downloading
-the add-on, you need to create an AVD configuration that uses that system image.
-</p>
-
-<p>The Google APIs Add-On does not include the full Google Play client.
-However, it does provide: </p>
-
-<ul>
-<li>An Google Play background service that implements the
-<code>ILicensingService</code> remote interface, so that your application can
-send license checks over the network to the licensing server. </li>
-<li>A set of underlying account services that let you add an a Google account on
-the AVD and sign in using your publisher account or test account credentials.
-<p>Signing in using your publisher or test account enables you to debug and test
-your application without having publish it. For more information see <a
-href="#acct-signin">Signing in to an authorized account</a>, below.</p></li>
-</ul>
-
-<p>Several versions of the Google APIs add-on are available through the SDK Manager, but only
-the version for Android 2.2 and higher includes the necessary Google
-Play services.</p>
-
-<p>To set up an emulator for adding licensing to an application, follow
-these steps: </p>
-
-<ol>
-  <li>Launch the Android SDK Manager (available under the Eclipse <strong>Window</strong>
-menu or by executing {@code &lt;sdk>/tools/android sdk}).</li>
-  <li>Select and download <strong>Google APIs</strong> for the Android version you'd like to target
-(must be Android 2.2 or higher).</li>
-  <li>When the download is complete, open the AVD Manager (available under the Eclipse
-<strong>Window</strong>
-menu or by executing {@code &lt;sdk>/tools/android avd}).</li>
-  <li>Click
-<strong>New</strong> and set the configuration details for the new AVD. </li>
-  <li>In the dialog that appears, assign a descriptive name to the AVD and then
-use the Target menu to choose the <strong>Google APIs</strong> as
-the system image to run on the new AVD. Set the other configuration details as
-needed and then click <strong>Create AVD</strong> to finish. The SDK tools
-create the new AVD configuration, which then appears in the list of available
-Android Virtual Devices.</li>
-</ol>
-
-<p>If you are not familiar with AVDs or how to use them, see <a
-href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a>.</p>
-
-<h4 id="project-update">Updating your project configuration</h4>
-
-<p>After you set up a runtime environment that meets the requirements described
-above &mdash; either on an actual device or on an emulator &mdash; make sure to
-update your application project or build scripts as needed, so that your compiled
-<code>.apk</code> files that use licensing are deployed into that environment.
-In particular, if you are developing in Eclipse, make sure that you set up a
-Run/Debug Configuration that targets the appropriate device or AVD. </p>
-
-<p>You do not need to make any changes to your application's
-build configuration, provided that the project is already configured to compile
-against a standard Android 1.5 (API level 3) or higher library. For example:
-
-<ul>
-<li>If you have an existing application that is compiled against
-the Android 1.5 library, you do not need to make any changes to your
-build configuration to support licensing. The build target meets the minimum
-requirements for licensing, so you would continue building
-against the same version of the Android platform.</li>
-
-<li>Similarly, if you are building against Android 1.5 (API level 3) but
-are using an emulator running the Google APIs Add-On API 8 as the application's
-runtime environment, there is no need to change your application's build
-configuration. </li>
-</ul>
-
-<p>In general, adding licensing to an application should have no impact
-whatsoever on the application's build configuration.</p>
-
-
-<h3 id="download-lvl">Downloading the LVL</h3>
-
-<p>The License Verification Library (LVL) is a collection of helper classes that
-greatly simplify the work that you need to do to add licensing to your
-application. In all cases, we recommend that you download the LVL and use it as
-the basis for the licensing implementation in your application.</p>
-
-<p>The LVL is available as a downloadable package of the Android SDK. The
-package includes: </p>
-
-<ul>
-<li>The LVL sources, stored inside an Android library project. </li>
-<li>An example application called "sample" that depends on the LVL library
-project. The example illustrates how an application uses the library helper
-classes to check and enforce licensing.</li>
-</ul>
-
-<p>To download the LVL package into your development environment, use the
-Android SDK Manager. Launch the Android SDK Manager and then
-select the <strong>Google Market Licensing</strong> package, as shown in figure 2.
-Accept the terms and click <strong>Install Selected</strong> to begin the download. </p>
-
-<img src="{@docRoot}images/licensing_package.png" alt=""/>
-<p class="img-caption"><strong>Figure 2.</strong> The Licensing package contains the LVL and
-the LVL sample application.</p>
-
-<p>When the download is complete, the Android SDK Manager installs both
-the LVL library project and the example application into these directories: </p>
-
-<p style="margin-left:2em"><code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/library/</code>
-&nbsp;&nbsp;(the LVL library project)<br />
-<code>&lt;<em>sdk</em>&gt;/extras/google/market_licensing/sample/</code>&nbsp;&nbsp;(the example
-application)</p>
-
-<p>If you aren't familiar with how to download packess into your SDK, see the
-<a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>
-document. </p>
-
-
-<h3 id="lvl-setup">Setting Up the Licensing Verification Library</h3>
-
-<p>After downloading the LVL to your computer, you need to set it up in your
-development environment, either as an Android library project or by
-copying (or importing) the library sources directly into your existing
-application package. In general, using the LVL as a library project is recommended,
-since it lets you reuse your licensing code across multiple applications and
-maintain it more easily over time. Note that the LVL is not designed to be
-compiled separately and added to an application as a static .jar file. </p>
-
-<h4>Moving the library sources to a new location</h4>
-
-<p>Because you will be customizing the LVL sources to some extent, you should
-make sure to <em>move or copy</em> the library sources (the entire
-directory at <code>&lt;<em>sdk</em>&gt;/market_licensing/library/</code>)
-to a working directory outside of the SDK. You should then use the relocated
-sources as your working set. If you are using a source-code management
-system, add and track the sources that are in the working location rather
-than those in default location in the SDK. </p>
-
-<p>Moving the library sources is important is because, when you later update the
-Licensing package, the SDK installs the new files to the same location as
-the older files. Moving your working library files to a safe location ensures
-that your work won't be inadvertently overwritten should you download a new
-version of the LVL.</p>
-
-<h4>Creating the LVL as a library project</h4>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Working with library projects</h2>
-
-<p>The LVL is provided as an Android library project, which means that you can
-share its code and resources across multiple applications. </p>
-
-<p style="margin-top:.5em;">If you aren't familiar with library projects or how
-to use them, see <a href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">
-Managing Projects</a>.
-</p>
-</div>
-</div>
-
-<p>The recommended way of using the LVL is setting it up as a new Android
-<em>library project</em>. A library project is a type of development project
-that holds shared Android source code and resources. Other Android application
-projects can reference the library project and, at build time, include its
-compiled sources in their <code>.apk</code> files. In the context of licensing,
-this means that you can do most of your licensing development once, in a library
-project, then include the library sources in your various application projects.
-In this way, you can easily maintain a uniform implementation of licensing
-across all of your projects and maintain it centrally. </p>
-
-<p>The LVL is provided as a configured library project &mdash; once you have
-downloaded it, you can start using it right away. </p>
-
-<p>If you are working in Eclipse with ADT, you need to add the LVL to your
-workspace as a new development project, in the same way as you would a new
-application project. </p>
-
-<ol>
-<li>Use the New Project Wizard to create a new
-project from existing sources. Select the LVL's <code>library</code> directory
-(the directory containing the library's AndroidManifest.xml file) as the project
-root.</li>
-<li>When you are creating the library project, you can select any application
-name, package, and set other fields as needed. </li>
-<li>For the library's build target, select Android 1.5 (API level 3) or higher.</li>
-</ol>
-
-<p> When created, the project is
-predefined as a library project in its <code>project.properties</code> file, so
-no further configuration is needed. </p>
-
-<p>For more information about how to create an application project or work with
-library projects in Eclipse, see <a
-href="{@docRoot}guide/developing/projects/projects-eclipse.html">Managing Projects from
-Eclipse with ADT</a>.</p>
-
-
-<h4>Copying the LVL sources to your application</h4>
-
-<p>As an alternative to adding the LVL as a library project, you can copy the
-library sources directly into your application. To do so, copy (or import) the
-LVL's <code>library/src/com</code> directory into your application's
-<code>src/</code> directory.</p>
-
-<p>If you add the LVL sources directly to your application, you can skip the
-next section and start working with the library, as described in <a
-href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding
-Licensing to Your App</a>.</p>
-
-
-<h3 id="add-library">Including the LVL library project sources in your
-application</h3>
-
-<p>If you want to use the LVL sources as a library project, you need to add a
-reference to the LVL library project in your application project properties. This tells
-build tools to include the LVL library project sources in your application at
-compile time. The process for adding a reference to a library project depends
-on your development environment, as described below.</p>
-
-<p> If you are developing in Eclipse with ADT, you should already have added the
-library project to your workspace, as described in the previous section. If you
-haven't done that already, do it now before continuing. </p>
-
-<p>Next, open the application's project properties window, as shown below.
-Select the "Android" properties group and click <strong>Add</strong>, then
-choose the LVL library project (com_android_vending_licensing) and click
-<strong>OK</strong>. For more information, see
-<a href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">
-Managing Projects from Eclipse with ADT</a></p>.
-
-
-<img src="{@docRoot}images/licensing_add_library.png" alt=""/>
-<p class="img-caption"><strong>Figure 3.</strong> If you are
-working in Eclipse with ADT, you can add the LVL library project to your
-application from the application's project properties.</p>
-
-
-<p>If you are developing using the SDK command-line tools, navigate to the
-directory containing your application project and open the
-<code>project.properties</code> file. Add a line to the file that specifies the
-<code>android.library.reference.&lt;n&gt;</code> key and the path to the
-library. For example: </p>
-
-<pre>android.library.reference.1=path/to/library_project</pre>
-
-<p>Alternatively, you can use this command to update the project
-properties, including the reference to the library project:</p>
-
-<pre class="no-pretty-print" style="color:black">android update lib-project
---target <em>&lt;target_ID&gt;</em> \
---path <em>path/to/my/app_project</em> \
---library <em>path/to/my/library_project</em>
-</pre>
-
-<p>For more information about working with library projects,
-see <a href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">
-Setting up a Library Project</a>.</p>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<h2 id="test-env">Setting Up the Testing Environment</h2>
-
-<p>The Google Play publisher site provides configuration tools that let you
-and others test licensing on your application before it is published. As you are
-implementing licensing, you can make use of the publisher site tools to test
-your application's Policy and handling of different licensing responses and
-error conditions.</p>
-
-<p>The main components of the test environment for licensing include: </p>
-
-<ul>
-<li>A "Test response" configuration in your publisher account that lets you
-set the static licensing response returned, when the server processes a
-license check for an application uploaded to the publisher account, from a user
-signed in to the publisher account or a test account.</li>
-<li>An optional set of test accounts that will receive the static test
-response when they check the license of an application that you have uploaded
-(regardless whether the application is published or not).</li>
-<li>A runtime environment for the application that includes the Google Play
-application or Google APIs Add-On, on which the user is signed in to the
-publisher account or one of the test accounts.</li>
-</ul>
-
-<p>Setting up the test environment properly involves:</p>
-
-<ol>
-<li><a href="#test-response">Setting static test responses</a> that are returned by the licensing server.</li>
-<li><a href="#test-acct-setup">Setting up test accounts</a> as needed.</li>
-<li><a href="#acct-signin">Signing in</a> properly to an emulator or device, before initiating a license check test.</li>
-</ol>
-
-<p>The sections below provide more information.</p>
-
-
-<h3 id="test-response">Setting test responses for license checks</h3>
-
-<p>Google Play provides a configuration setting in your publisher account
-that lets you override the normal processing of a license check and return a
-specified static response code. The setting is for testing only and applies
-<em>only</em> to license checks for applications that you have uploaded, made by
-any user signed in to an emulator or device using the credentials of the
-publisher account or a registered test account. For other users, the server
-always processes license checks according to normal rules.  </p>
-
-<p>To set a test response for your account, sign in to your publisher account
-and click "Edit Profile". In the Edit Profile page, locate the Test Response
-menu in the Licensing panel, shown below. You can select from the full set of
-valid server response codes to control the response or condition you want to
-test in your application.</p>
-
-<p>In general, you should make sure to test your application's licensing
-implementation with every response code available in the Test Response menu.
-For a description of the codes, see <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#server-response-codes">Server
-Response Codes</a> in the <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html">Licensing Reference</a>.</p>
-
-<img src="{@docRoot}images/licensing_test_response.png" alt=""/>
-<p class="img-caption"><strong>Figure 4.</strong> The Licensing
-panel of your account's Edit Profile page, showing the Test Accounts field and the
-Test Response menu.</p>
-
-<p>Note that the test response that you configure applies account-wide &mdash;
-that is, it applies not to a single application, but to <em>all</em>
-applications associated with the publisher account. If you are testing multiple
-applications at once, changing the test response will affect all of those
-applications on their next license check (if the user is signed in to
-the emulator or device using the publisher account or a test account).</p>
-
-<p>Before you can successfully receive a test response for a license check,
-you must sign in to the device or emulator on which the application
-is installed, and from which it is querying the server. Specifically, you must
-sign using either your publisher account or one of the test accounts that you
-have set up. For more information about test accounts, see the next section.</p>
-
-<p>See <a
-href="{@docRoot}guide/market/licensing/licensing-reference.html#server-response-codes">Server
-Response Codes</a> for a list of
-test responses available and their meanings. </p>
-
-
-<h3 id="test-acct-setup">Setting up test accounts</h3>
-
-<p>In some cases, you might want to let multiple teams of developers test
-licensing on applications that will ultimately be published through your
-publisher account, but without giving them access to your publisher account's
-sign-in credentials. To meet that need, the Google Play publisher site lets
-you set up one or more optional <em>test accounts</em> &mdash; accounts that are
-authorized to query the licensing server and receive static test responses from
-your publisher account.</p>
-
-<p>Test accounts are standard Google accounts that you register on your
-publisher account, such that they will receive the test response for
-applications that you have uploaded. Developers can then sign in to their
-devices or emulators using the test account credentials and initiate license
-checks from installed applications. When the licensing server receives a license
-check from a user of a test account, it returns the static test response
-configured for the publisher account.  </p>
-
-<p>Necessarily, there are limitations on the access and permissions given to
-users signed in through test accounts, including:</p>
-
-<ul>
-<li>Test account users can query the licensing server only for applications that
-are already uploaded to the publisher account. </li>
-<li>Test account users do not have permission to upload applications to your
-publisher account.</li>
-<li>Test account users do not have permission to set the publisher account's
-static test response.</li>
-</ul>
-
-<p>The table below summarizes the differences in capabilities, between the
-publisher account, a test account, and any other account.</p>
-
-<p class="table-caption" id="acct-types-table"><strong>Table 1.</strong>
-Differences in account types for testing licensing.</p>
-
-<table>
-<tr>
-<th>Account Type</th>
-<th>Can check license before upload?</th>
-<th>Can receive test response?</th>
-<th>Can set test response?</th>
-</tr>
-
-<tr>
-<td>Publisher account</td>
-<td>Yes</td>
-<td>Yes</td>
-<td>Yes</td>
-</tr>
-
-<tr>
-<td>Test account</td>
-<td>No</td>
-<td>Yes</td>
-<td>No</td>
-</tr>
-
-<tr>
-<td>Other</td>
-<td>No</td>
-<td>No</td>
-<td>No</td>
-</tr>
-</table>
-
-<h4 id="reg-test-acct">Registering test accounts on the publisher account</h4>
-
-<p>To get started, you need to register each test account in your publisher
-account. As shown in Figure 4, you
-register test accounts in the Licensing panel of your publisher account's Edit
-Profile page. Simply enter the accounts as a comma-delimited list and click
-<strong>Save</strong> to save your profile changes.</p>
-
-<p>You can use any Google account as a test account. If you want to own and
-control the test accounts, you can create the accounts yourself and distribute
-the credentials to your developers or testers.</p>
-
-<h4 id="test-app-upload">Handling application upload and distribution for test
-account users</h4>
-
-<p>As mentioned above, users of test accounts can only receive static test
-responses for applications that are uploaded to the publisher account. Since
-those users do not have permission to upload applications, as the publisher you
-will need to work with those users to collect apps for upload and distribute
-uploaded apps for testing. You can handle collection and distribution in any way
-that is convenient. </p>
-
-<p>Once an application is uploaded and becomes known to the licensing server,
-developers and testers can continue modify the application in their local
-development environment, without having to upload new versions. You only need to
-upload a new version if the local application increments the
-<code>versionCode</code> attribute in the manifest file. </p>
-
-<h4 id="test-key">Distributing your public key to test account users</h4>
-
-<p>The licensing server handles static test responses in the normal way,
-including signing the license response data, adding extras parameters, and so
-on. To support developers who are implementing licensing using test accounts,
-rather than the publisher account, you will need to distribute
-your public key to them. Developers without access to the publisher site do not
-have access to your public key, and without the key they won't be able to
-verify license responses. </p>
-
-<p>Note that if you decide to generate a new licensing key pair for your account
-for some reason, you need to notify all users of test accounts. For
-testers, you can embed the new key in the application package and distribute it
-to users. For developers, you will need to distribute the new key to them
-directly. </p>
-
-
-<h3 id="acct-signin">Signing in to an authorized account in the runtime
-environment</h3>
-
-<p>The licensing service is designed to determine whether a given user is
-licensed to use a given application &mdash; during a license check, the Google
-Play application gathers the user ID from the primary account on the system
-and sends it to the server, together with the package name of the application
-and other information. However, if there is no user information available, the
-license check cannot succeed, so the Google Play application terminates the
-request and returns an error to the application. </p>
-
-<p>During testing, to ensure that your application can successfully query the
-licensing server, you must make sure that you sign in to an account <em>on the
-device or emulator</em> using:</p>
-
-<ul>
-<li>The credentials of a publisher account, or</li>
-<li>The credentials of a test account that is registered with a publisher
-account</li>
-</ul>
-
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Signing in to a Google account on an emulator</h2>
-
-<p>If you are testing licensing on an emulator, you need to sign in to a Google
-account on the emulator. If you do not see an option to create a new Google
-account, the problem might be that your AVD is running a standard Android system
-image, rather than the Google APIs Add-On, API 8 (release 2) or higher. </p>
-
-<p style="margin-top:.5em;">For more information, see <a
-href="#runtime-setup">Setting up the runtime environment</a>, above.</p>
-
-</div>
-</div>
-
-<p>Signing in using a publisher account offers the advantage of letting your
-applications receive static test responses even before the applications are
-uploaded to the publisher site.</p>
-
-<p>If you are part of a larger organization or are working with external groups
-on applications that will be published through your site, you will more likely
-want to distribute test accounts instead, then use those to sign in during
-testing. </p>
-
-<p>To sign in on a device or emulator, follow the steps below. The preferred
-approach is to sign in as the primary account &mdash; however, if there are
-other accounts already in use on the device or emulator, you can create an
-additional account and sign in to it using the publisher or test account
-credentials.  </p>
-
-<ol>
-<li>Open Settings &gt; Accounts &amp; sync</li>
-<li>Select <strong>Add Account</strong> and choose to add a Google account.
-</li>
-<li>Select <strong>Next</strong> and then <strong>Sign in</strong>.</li>
-<li>Enter the username and password of either the publisher account or a test
-account that is registered in the publisher account.</li>
-<li>Select <strong>Sign in</strong>. The system signs you in to the new
-account.</li>
-</ol>
-
-<p>Once you are signed in, you can begin testing licensing in your application
-(if you have completed the LVL integration steps above). When your application
-initiates a license check, it will receive a response containing the static test
-response configured on the publisher account. </p>
-
-<p>Note that, if you are using an emulator, you will need to sign in to the
-publisher account or test account each time you wipe data when restarting the
-emulator.</p>
-
-<p>Once you've completed the setup procedures, continue to <a
-href="{@docRoot}guide/market/licensing/adding-licensing.html">Adding Licensing to Your App</a>.</p>
-
-
-
diff --git a/docs/html/guide/market/publishing/multiple-apks.jd b/docs/html/guide/market/publishing/multiple-apks.jd
deleted file mode 100644
index e7cfa33..0000000
--- a/docs/html/guide/market/publishing/multiple-apks.jd
+++ /dev/null
@@ -1,643 +0,0 @@
-page.title=Multiple APK Support
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Quickview</h2>
-  <ul>
-    <li>Simultaneously publish different APKs for different
-device configurations</li>
-    <li>Different APKs are distributed to different devices based on filters declared in the
-manifest file</li>
-    <li>You should publish multiple APKs only when it's not possible or reasonable to
-support all desired devices with a single APK</li>
-  </ul>
-
-  <h2>In this document</h2>
-<ol>
-  <li><a href="#Concepts">Publishing Concepts</a>
-    <ol>
-      <li><a href="#Active">Active APKs</a></li>
-      <li><a href="#SimpleAndAdvanced">Simple mode and advanced mode</a></li>
-    </ol>
-  </li>
-  <li><a href="#HowItWorks">How Multiple APKs Work</a>
-    <ol>
-      <li><a href="#SupportedFilters">Supported filters</a></li>
-      <li><a href="#Rules">Rules for multiple APKs</a></li>
-    </ol>
-  </li>
-  <li><a href="#CreatingApks">Creating Multiple APKs</a>
-    <ol>
-      <li><a href="#VersionCodes">Assigning version codes</a></li>
-    </ol>
-  </li>
-  <li><a href="#SingleAPK">Using a Single APK Instead</a>
-    <ol>
-      <li><a href="#TextureOptions">Supporting multiple GL textures</a></li>
-      <li><a href="#ScreenOptions">Supporting multiple screens</a></li>
-      <li><a href="#ApiLevelOptions">Supporting multiple API levels</a></li>
-    </ol>
-  </li>
-</ol>
-
-  <h2>See also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a></li>
-  <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
-  <li><a href="{@docRoot}sdk/compatibility-library.html">Compatibility
-Package</a></li>
-  <li><a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Multiple APK support is a feature on Google Play that allows you to publish different APKs
-for your application that are each targeted to different device configurations. Each APK is a
-complete and independent version of your application, but they share the same application listing on
-Google Play and must share the same package name and be signed with the same release key. This
-feature is useful for cases in which your application cannot reach all desired devices with a single
-APK.</p>
-
-<p>Android-powered devices may differ in several ways and it's important
-to the success of your application that you make it available to as many devices as possible.
-Android applications usually run on most compatible devices with a single APK, by supplying
-alternative resources for different configurations (for example, different layouts for different
-screen sizes) and the Android system selects the appropriate resources for the device at runtime. In
-a few cases, however, a single APK is unable to support all device configurations, because
-alternative resources make the APK file too big (greater than 50MB) or other technical challenges
-prevent a single APK from working on all devices.</p>
-
-<p>Although <strong>we encourage you to develop and publish a single APK</strong> that supports as
-many device configurations as possible, doing so is sometimes not possible. To help
-you publish your application for as many devices as possible, Google Play allows you to
-publish multiple APKs under the same application listing. Google Play then supplies each APK to
-the appropriate devices based on configuration support you've declared in the manifest file of each
-APK.</p>
-
-<p>By publishing your application with multiple APKs, you can:</p>
-
-<ul>
-  <li>Support different OpenGL texture compression formats with each APK.</li>
-  <li>Support different screen configurations with each APK.</li>
-  <li>Support different platform versions with each APK.</li>
-</ul>
-
-<p>Currently, these are the only device characteristics that Google Play supports for publishing
-multiple APKs as the same application.</p>
-
-<p class="note"><strong>Note:</strong> You should generally use multiple APKs to support
-different device configurations <strong>only when your APK is too large</strong> (greater than
-50MB). Using a single APK to support different configurations is always the best practice,
-because it makes the path for application updates simple and clear for users (and also makes
-your life simpler by avoiding development and publishing complexity). Read the section below about
-<a href="#SingleAPK">Using a Single APK Instead</a> to
-consider your options before publishing multiple APKs.</p>
-
-
-<h2 id="Concepts">Publishing Concepts</h2>
-
-<p>Before you start publishing multiple APKs on Google Play, you must understand a few
-concepts regarding how the Google Play publisher site works.</p>
-
-<h3 id="Active">Active APKs</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h4>The difference between "Publish" and "Save"</h4>
-  <p>When editing your application, there are two buttons on the top-right side of the page. The
-first button is either <strong>Publish</strong> or <strong>Unpublish</strong> and the second
-button is always <strong>Save</strong> (but its behavior changes).</p>
-  <p>When your application is new or you have unpublished it from Google Play, the first
-button says <strong>Publish</strong>. Clicking it will publish any APKs listed as
-Active, making them available on Google Play. Also while your application is new
-or unpublished, clicking <strong>Save</strong> will save any changes you've made, such
-as information added to the Product details and APKs you've uploaded, but nothing is made visible on
-Google Play&mdash;this allows you to save your changes and sign out of the publisher site before
-deciding to publish.</p>
- <p>Once you've published your application, the first button changes to
-<strong>Unpublish</strong>. Clicking it in this state unpublishes your application so that none
-of the APKs are available on Google Play. Also while published, the behavior of the
-<strong>Save</strong> button is different. In this state, clicking <strong>Save</strong> not
-only saves all your changes, but also publishes them to Google Play. For example, if you've
-already published your application and then make changes to your product details or activate new
-APKs, clicking <strong>Save</strong> makes all those changes live on Google Play.</p>
-</div>
-</div>
-
-
-<p>Before you can publish your application (whether publishing one or multiple APKs), you
-must "activate" your APK(s) from the <strong>APK files</strong> tab. When you activate an APK, it
-moves into the list of <em>Active</em> APKs. This list allows you to preview which APK(s)
-you're about to publish.</p>
-
-<p>If there are no errors, any "active" APK will be published to
-Google Play when you click the <strong>Publish</strong> button (if the application is
-unpublished) or when you click the <strong>Save</strong> button (if the application is
-already published).</p>
-
-
-<h3 id="SimpleAndAdvanced">Simple mode and advanced mode</h3>
-
-<p>The Google Play publisher site provides two modes for managing the APKs associated with
-your application: <em>simple mode</em> and <em>advanced mode</em>. You can switch between these by
-clicking the
-link at the top-right corner of the <strong>APK files</strong> tab.</p>
-
-<p>Simple mode is the traditional way to publish an application, using one APK at a time. In
-simple mode, only one APK can be activated at a time. If you upload a new APK to update
-the application, clicking "Activate" on the new APK deactivates the currently
-active APK (you must then click <strong>Save</strong> to publish the new APK).</p>
-
-<p>Advanced mode allows you to activate and publish multiple APKs that are each designed for a
-specific set of device configurations. However, there are several rules based on the manifest
-declarations in each APK that determine whether you're allowed to activate each APK along with
-others. When you activate an APK and it violates one of the rules, you will receive an error or
-warning message. If it's an error, you cannot publish until you resolve the problem; if it's a
-warning, you can publish the activated APKs, but there might be unintended consequences as to
-whether your application is available for different devices. These rules are discussed more
-below.</p>
-
-
-<h2 id="HowItWorks">How Multiple APKs Work</h2>
-
-<p>The concept for using multiple APKs on Google Play is that you have just one entry in
-Google Play for your application, but different devices might download a different APK. This
-means that:</p>
-
-<ul>
-  <li>You maintain only one set of product details (app description, icons, screenshots, etc.).
-This also means you <em>cannot</em> charge a different price for different APKs.</li>
-  <li>All users see only one version of your application on Google Play, so they are not
-confused by different versions you may have published that are "for tablets" or
-"for phones."</li>
-  <li>All user reviews are applied to the same application listing, even though users on different
-devices may have different APKs.</li>
-  <li>If you publish different APKs for different versions of Android (for different API levels),
-then when a user's device receives a system update that qualifies them for a different APK you've
-published, Google Play updates the user's application to the APK designed for the higher version
-of Android. Any system data associated with the application is retained (the same as with normal
-application updates when using a single APK).</li>
-</ul>
-
-<p>To publish multiple APKs for the same application, you must enable <strong>Advanced mode</strong>
-in your application's <strong>APK files</strong> tab (as discussed in the previous section). Once
-in advanced mode, you can upload, activate, then publish multiple APKs for the same application. The
-following sections describe more about how it works.</p>
-
-
-<h3 id="SupportedFilters">Supported filters</h3>
-
-<p>Which devices receive each APK is determined by <a
-href="{@docRoot}guide/appendix/market-filters.html">Google Play filters</a> that are specified by
-elements in the manifest file of each APK. However, Google Play allows you to publish multiple
-APKs only when each APK uses filters to support a variation of the following
-device characteristics:</p>
-
-<ul>
-  <li><strong>OpenGL texture compression formats</strong>
-    <p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a> element(s).</p>
-    <p>For example, when developing a game that uses OpenGL ES, you can provide one APK for
-devices that support ATI texture compression and a separate APK for devices
-that support PowerVR compression (among many others).</p>
-  <br/>
-  </li>
-
-  <li><strong>Screen size (and, optionally, screen density)</strong>
-    <p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> <em>or</em> <a
-href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a> element. You should never use both elements and you should use only
-<a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> when possible.</p>
-    <p>For example, you can provide one APK that supports small and normal size screens and another
-APK that supports large and xlarge screens.</p>
-
-    <p class="note"><strong>Note:</strong> The Android system provides strong support for
-applications to support all screen configurations with a single APK. You should avoid creating
-multiple APKs to support different screens unless absolutely necessary and instead follow the guide
-to <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a> so that your application is flexible and can adapt to all screen configurations
-with a single APK.</p>
-    <p class="caution"><strong>Caution:</strong> By default, all screen size attributes in the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> element are "true" if you do not declare them otherwise. However,
-because the {@code android:xlargeScreens} attribute was added in Android 2.3 (API level
-9), Google Play will assume that it is "false" if your application does not set either <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> or <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-android:targetSdkVersion}</a> to "9" or higher.</p>
-    <p class="caution"><strong>Caution:</strong> You should not combine both <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> and <a
-href="{@docRoot}guide/topics/manifest/compatible-screens-element.html">{@code
-&lt;compatible-screens&gt;}</a> elements in your manifest file. Using both increases the chances
-that you'll introduce an error due to conflicts between them. For help deciding which to use, read
-<a href="{@docRoot}guide/practices/screens-distribution.html">Distributing to Specific Screens</a>.
-If you can't avoid using both, be aware that for any conflicts in agreement between a given size,
-"false" will win.</p>
-  <br/>
-  </li>
-
-  <li><strong>API level</strong>
-    <p>This is based on your manifest file's <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a> element.
-You
-can use both the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> and <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max">{@code android:maxSdkVersion}</a>
-attributes to specify support for different API levels.</p>
-    <p>For example, you can publish your application with one APK that supports API levels 4 - 7
-(Android 1.6 - 2.1)&mdash;using only APIs available since API level 4 or lower&mdash;and another
-APK that supports API levels 8 and above (Android 2.2+)&mdash;using APIs available since API level 8
-or lower.</p>
-    <div class="note">
-      <p><strong>Note:</strong></p>
-      <ul>
-        <li>If you use this characteristic as the factor to distinguish multiple APKs, then the APK
-with a higher <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> value must have a higher <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code android:versionCode}</a>
-value. This is also true if two APKs overlap their device support based on a different supported
-filter. This ensures that when a device receives a system update, Google Play can offer the user
-an update for your application (because updates are based on an increase in the app version code).
-This requirement is described further in the section below about <a href="#Rules">Rules for
-multiple APKs</a>.</li>
-        <li>You should avoid using <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#max">{@code
-android:maxSdkVersion}</a> in general, because as long as you've properly developed your
-application with public APIs, it is always compatible with future versions of Android. If you want
-to publish a different APK for higher API levels, you still do not need to specify the
-maximum version, because if the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> is {@code "4"} in one APK and {@code "8"} in another, devices that
-support API level 8 or higher will always receive the second APK (because it's version code is
-higher, as per the previous note).</li>
-    </ul>
-  </div>
-  </li>
-</ul>
-
-<p>Other manifest elements that enable <a
-href="{@docRoot}guide/appendix/market-filters.html">Google Play filters</a>&mdash;but are not
-listed above&mdash;are still applied for each APK as usual. However, Google Play does not allow
-you to publish multiple APKs based on variations of them. Thus, you cannot publish
-multiple APKs if the above listed filters are the same for each APK (but the APKs differ based on
-other characteristics in the manifest file). For
-example, you cannot provide different APKs that differ purely on the <a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
-&lt;uses-configuration&gt;}</a> characteristics.</p>
-
-
-
-<h3 id="Rules">Rules for multiple APKs</h3>
-
-<p>Before you enable advanced mode to publish multiple APKs for your application, you need to
-understand the following rules that define how publishing multiple APKs works:</p>
-
-<ul>
-  <li>All APKs you publish for the same application <strong>must have the same package
-name and be signed with the same certificate key</strong>.</li>
-
-  <li>Each APK <strong>must have a different version code</strong>, specified by the
-<a href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-android:versionCode}</a> attribute.</li>
-
-  <li>Each APK <strong>must not exactly match the configuration support of another APK</strong>.
-    <p>That is, each APK must declare slightly different support for at least one of
-the <a href="#SupportedFilters">supported Google Play filters</a> (listed above).</p>
-    <p>Usually, you will differentiate your APKs based on a specific characteristic (such as the
-supported texture compression formats), and thus, each APK will declare support for different
-devices. However, it's OK to publish multiple APKs that overlap their support slightly. When two
-APKs do overlap (they support some of the same device configurations), a device that falls within
-that overlap range will receive the APK with a higher version code (defined by <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-android:versionCode}</a>).</p></li>
-
-  <li>You cannot activate a new APK that has a version code lower than that of the APK it's
-replacing. For example, say you have an active APK for screen sizes small - normal with version code
-0400, then try to replace it with an APK for the same screen sizes with version code 0300. This
-raises an error, because it means users of the previous APK will not be able to update the
-application.</li>
-
-  <li>An APK that requires a <strong>higher API level</strong> must have a <strong>higher
-version code</strong>.
-    <p>This is true only when either: the APKs differ based <em>only</em> on the
-supported API levels (no other <a href="#SupportedFilters">supported filters</a>
-distinguish the APKs from each other) <em>or</em> when the APKs do use another supported filter, but
-there is an overlap between the APKs within that filter.</p>
-    <p>This is important because a user's device receives an application update from
-Google Play only if the version code for the APK on Google Play is higher than the version
-code of the APK currently on the device. This ensures that if a device receives a system update that
-then qualifies it to install the APK for higher API levels, the device receives an application
-update because the version code increases.</p>
-<p class="note"><strong>Note:</strong> The size of the version code increase is irrelevant; it
-simply needs to be larger in the version that supports higher API levels.</p>
-    <p>Here are some examples:</p>
-    <ul>
-      <li>If an APK you've uploaded for API levels 4 and above (Android 1.6+) has a version code of
-{@code 0400}, then an APK for API levels 8 and above (Android 2.2+) must be {@code 0401} or
-greater. In this case, the API level is the only supported filter used, so the version codes
-<strong>must increase</strong> in correlation with the API level support for each APK, so that users
-get an update when they receive a system update.</li>
-      <li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
-large screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge screens, then
-the version codes <strong>must increase</strong>. In this case, the API level filter is used to
-distinguish each APK, but so is the screen size. Because the screen sizes overlap (both APKs
-support large screens), the version codes must still be in order. This ensures that a large screen
-device that receives a system update to API level 8 will receive an update for the second
-APK.</li>
-      <li>If you have one APK that's for API level 4 (and above) <em>and</em> small -
-normal screens, and another APK for API level 8 (and above) <em>and</em> large - xlarge
-screens, then the version codes <strong>do not need to increase</strong> in correlation with the API
-levels. Because there is no overlap within the screen size filter, there are no devices that
-could potentially move between these two APKs, so there's no need for the version codes to
-increase from the lower API level to the higher API level.</li>
-    </ul>
-  </li>
-
-</ul>
-
-<p>Failure to abide by the above rules results in an error on the Google Play publisher site
-when you activate your APKs&mdash;you will be unable to publish your application until you
-resolve the error.</p>
-
-<p>There are other conflicts that might occur when you activate your APKs, but which will result
-in warnings rather than errors. Warnings can be caused by the following:</p>
-
-<ul>
-  <li>When you modify an APK to "shrink" the support for a device's characteristics and no other
-APKs support the devices that then fall outside the supported range. For example, if an APK
-currently supports small and normal size screens and you change it to support only small screens,
-then you have shrunk the pool of supported devices and some devices will no longer see your
-application on Google Play. You can resolve this by adding another APK that supports normal size
-screens so that all previously-supported devices are still supported.</li>
-
-  <li>When there are "overlaps" between two or more APKs. For example, if an APK supports screen
-sizes small, normal, and large, while another APK supports sizes large and xlarge, there is an
-overlap, because both APKs support large screens. If you do not resolve this, then devices that
-qualify for both APKs (large screen devices in the example) will receive whichever APK has the
-highest version code.</li>
-</ul>
-
-<p>When such conflicts occur, you will see a warning message, but you can still publish your
-application.</p>
-
-
-
-<h2 id="CreatingApks">Creating Multiple APKs</h2>
-
-<p>Once you decide to publish multiple APKs, you probably need to create separate
-Android projects for each APK you intend to publish so that you can appropriately develop them
-separately. You can do this by simply duplicating your existing project and give it a new name.
-(Alternatively, you might use a build system that can output different resources&mdash;such
-as textures&mdash;based on the build configuration.)</p>
-
-<p class="note"><strong>Tip:</strong> One way to avoid duplicating large portions of your
-application code is to use a <a
-href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">library project</a>. A library
-project holds shared code and resources, which you can include in your actual application
-projects.</p>
-
-<p>When creating multiple projects for the same application, it's a good practice to identify each
-one with a name that indicates the device restrictions to be placed on the APK, so you can
-easily identify them. For example, "HelloWorld_8" might be a good name for an
-application designed for API level 8 and above.</p>
-
-<p class="note"><strong>Note:</strong> All APKs you publish for the same application
-<strong>must have the same package name and be signed with the same certificate key</strong>. Be
-sure you also understand each of the <a href="#Rules">Rules for multiple APKs</a>.</p>
-
-
-<h3 id="VersionCodes">Assigning version codes</h3>
-
-<p>Each APK for the same application <strong>must have a unique version code</strong>, specified by
-the <a href="{@docRoot}guide/topics/manifest/manifest-element.html#vcode">{@code
-android:versionCode}</a> attribute. You must be careful about assigning version codes when
-publishing multiple APKs, because they must each be different, but in some
-cases, must or should be defined in a specific order, based on the configurations that each APK
-supports.</p>
-
-<h4>Ordering version codes</h4>
-
-<p>An APK that requires a higher API level must usually have a higher version code. For example, if
-you create two APKs to support different API levels, the APK for the higher API levels must have the
-higher version code. This ensures that if a device receives a system update that then qualifies it
-to install the APK for higher API levels, the user receives a notification to update the app. For
-more information about how this requirement applies, see the section above about <a
-href="#Rules">Rules for multiple APKs</a>.</p>
-
-<p>You should also consider how the order of version codes might affect which APK your users
-receive either due to overlap between coverage of different APKs or future changes you might make to
-your APKs.</p>
-
-<p>For example, if you have different APKs based on screen size, such as one for small - normal and
-one for large - xlarge, but foresee a time when you will change the APKs to be one for small and one
-for normal - xlarge, then you should make the version code for the large - xlarge APK be higher.
-That way, a normal size device will receive the appropriate update when you make the change, because
-the version code increases from the existing APK to the new APK that now supports the device. </p>
-
-<p>Also, when creating multiple APKs that differ based on support for different OpenGL texture
-compression formats, be aware that many devices support multiple formats. Because a device
-receives the APK with the highest version code when there is an overlap in coverage between two
-APKs, you should order the version codes among your APKs so that the APK with the
-preferred compression format has the highest version code. For example, you might want to perform
-separate builds for your app using PVRTC, ATITC, and ETC1 compression formats. If you prefer these
-formats in this exact order, then the APK that uses PVRTC should have the highest version code, the
-APK that uses ATITC has a lower version code, and the version with ETC1 has the lowest. Thus, if a
-device supports both PVRTC and ETC1, it receives the APK with PVRTC, because it has the highest
-version code.</p>
-
-
-<h4>Using a version code scheme</h4>
-
-<p>In order to allow different APKs to update their version codes independent of others (for
-example, when you fix a bug in only one APK, so don't need to update all APKs), you should use a
-scheme for your version codes that
-provides sufficient room between each APK so that you can increase the code in one without requiring
-an increase in others. You should also include your actual version name in the code (that is, the
-user visible version assigned to <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code android:versionName}</a>),
-so that it's easy for you to associate the version code and version name.</p>
-
-<p class="note"><strong>Note:</strong> When you increase the version code for an APK, Google
-Play will prompt users of the previous version to update the application. Thus, to avoid
-unnecessary updates, you should not increase the version code for APKs that do not actually
-include changes.</p>
-
-<p>We suggest using a version code with at least 7 digits: integers that represent
-the supported configurations are in the higher order bits, and the version name (from <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#vname">{@code
-android:versionName}</a>) is in the lower order bits. For example, when the application version
-name is 3.1.0, version codes for an API level 4
-APK and an API level 11 APK would be something like 0400310 and 1100310, respectively. The first
-two digits are reserved for the API Level (4 and 11, respectively), the middle two digits are for
-either screen sizes or GL texture formats (not used in these examples), and the last three digits
-are for the application's version name (3.1.0). Figure 1 shows two examples that split based on both
-the platform version (API Level) and screen size.</p>
-
-<img src="{@docRoot}images/market/version-codes.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> A suggested scheme for your version codes,
-using the first two digits for the API Level, the second and third digits for the minimum and
-maximum screen size (1 - 4 indicating each of the four sizes) or to denote the texture formats
-and the last three digits for the app version.</p>
-
-<p>This scheme for version codes is just a suggestion for how you should establish a
-pattern that is scalable as your application evolves. In particular, this scheme doesn't
-demonstrate a solution for identifying different texture compression formats. One option might be
-to define your own table that specifies a different integer to each of the different
-compression formats your application supports (for example, 1 might correspond to ETC1 and 2 is
-ATITC, and so on).</p>
-
-<p>You can use any scheme you want, but you should carefully consider how future versions of your
-application will need to increase their version codes and how devices can receive updates when
-either the device configuration changes (for example, due to a system update) or when you modify the
-configuration support for one or several of the APKs.</p>
-
-
-
-
-<h2 id="SingleAPK">Using a Single APK Instead</h2>
-
-<p><strong>Creating multiple APKs for your application is not the normal procedure</strong> for
-publishing an application on Google Play. In most cases, you should be able to publish your
-application to most users with a single APK and we encourage that you do so. When you encounter
-a situation in which using a single APK becomes difficult, you should carefully consider all your
-options before deciding to publish multiple APKs.</p>
-
-<p>First of all, there are a few key benefits to developing a single APK that supports all
-devices:</p>
-
-<ul>
-  <li><strong>Publishing and managing your application is easier.</strong>
-    <p>With only one APK to worry about at any given time, you're less likely to become confused by
-which APK is what. You also don't have to keep track of multiple version codes for each
-APK&mdash;by using only one APK, you can simply increase the version code with each release and
-be done.</p>  </li>
-  <li><strong>You need to manage only a single code base.</strong>
-    <p>Although you can use a <a
-href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">library project</a>
-to share code between multiple Android projects, it's still likely that you'll reproduce some code
-across each project and this could become difficult to manage, especially when resolving
-bugs.</p></li>
-  <li><strong>Your application can adapt to device configuration changes.</strong>
-    <p>By creating a single APK that contains all the resources for each device configuration, your
-application can adapt to configuration changes that occur at runtime. For example, if the user docks
-or otherwise connects a handset device to a larger screen, there's a chance that this will invoke a
-system configuration change to support the larger screen. If you include all resources for different
-screen configurations in the same APK, then your application will load alternative resources and
-optimize the user experience for the new interface.</p>
-  </li>
-  <li><strong>App restore across devices just works.</strong>
-    <p>If a user has enabled data backup on his or her current device and then buys a new device
-that has a different configuration, then when the user's apps are automatically restored during
-setup, the user receives your application and it runs using the resources optimized for that device.
-For example, on a new tablet, the user receives your application and it runs with your
-tablet-optimized resources. This restore
-process does not work across different APKs, because each APK can potentially have different
-permissions that the user has not agreed to, so Google Play may not restore the application at
-all. (If you use multiple APKs, the user receives either the exact same APK if it's compatible or
-nothing at all and must manually download your application to get the APK designed for the new
-device.)</p></li>
-</ul>
-
-<p>The following sections describe some of the other options you should use to support multiple
-device configurations before deciding to publish multiple APKs.</p>
-
-
-
-<h3 id="TextureOptions">Supporting multiple GL textures</h3>
-
-<p>To support multiple types of GL textures with a single APK, your application should query the GL
-texture formats supported on the device and then use the appropriate resources or download
-them from a web server. For example, in order to keep the size of your APK small, you can query the
-device's support for different GL texture formats when the application starts for the first time and
-then download only the textures you need for that device.</p>
-
-<p>For maximum performance and compatibility, your application should use ETC1 textures wherever it
-doesn't impact the visual quality. However, because ETC1 cannot deal with images that have drastic
-chroma changes, such as line art and (most) text, and doesn't support alpha, it may not the best
-format for all textures.</p>
-
-<p>With a single APK, you should try to use ETC1 textures and uncompressed textures whenever
-reasonable, and consider the use of PVRTC, ATITC, or DXTC as a last resort when ETC1 does not
-suffice.</p>
-
-<p>Here's an example query for supported texture compression formats from inside a
-{@link android.opengl.GLSurfaceView.Renderer GLSurfaceView.Renderer}:</p>
-
-<pre>
-public void onSurfaceChanged(GL10 gl, int w, int h) {
-    String extensions = gl.glGetString(GL10.GL_EXTENSIONS);
-    Log.d("ExampleActivity", extensions);
-}
-</pre>
-
-<p>This returns a string that lists each of the supported compression formats.</p>
-
-
-
-<h3 id="ScreenOptions">Supporting multiple screens</h3>
-
-<p>Unless your APK file exceeds the Google Play size limit of 50MB, supporting multiple screens
-should always be done with a single APK. Since Android 1.6, the Android system manages most of the
-work required for your application to run successfully on a variety of screen sizes and
-densities.</p>
-
-<p>To further optimize your application for different screen sizes and densities, you should provide
-<a href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">alternative
-resources</a> such as bitmap drawables at different resolutions and different layout designs for
-different screen sizes.</p>
-
-<p>For more information about how to support multiple screens with a single APK, read <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
-
-<p>Additionally, you should consider using a support library from the <a
-href="{@docRoot}sdk/compatibility-library.html">Compatibility Package</a> so that you can add <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> to your activity designs
-when running on larger screens such as tablets.</p>
-
-
-
-<h3 id="ApiLevelOptions">Supporting multiple API levels</h3>
-
-<p>If you want to support as many versions of the Android platform as possible, you should use
-only APIs available in the lowest reasonable version. For example, your application may not require
-APIs newer than Android 2.1 (API Level 7), which makes an application available to
-over 95% of Android-powered devices (as indicated by the <a
-href="{@docRoot}resources/dashboard/platform-versions.html">Platform Versions</a> dashboard).</p>
-
-<p>By using a support library from the <a
-href="{@docRoot}sdk/compatibility-library.html">Compatibility Package</a>, you can also use APIs
-from some of the latest versions (such as Android 3.0) while
-still supporting versions as low as Android 1.6. The support library includes APIs for <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>, <a
-href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a>, and more. Using the fragment
-APIs is particularly valuable so that you can optimize your user interface for large devices such as
-tablets.</p>
-
-<p>Alternatively, if you want to use some APIs that are available only in newer versions of Android
-(which your application can still function without), then you should consider using reflection. By
-using reflection, you can check whether the current device supports certain APIs. If the APIs are
-not available, your application can gracefully disable and hide the feature.</p>
-
-<p>Another way to use new APIs only when running on a version that supports them is to check the
-API level of the current device. That is, you can query the value of {@link
-android.os.Build.VERSION#SDK_INT} and create different code paths depending on the API level
-supported by the device. For example:</p>
-
-<pre>
-if (android.os.Build.VERSION.SDK_INT >= 11) {
-    // Use APIs supported by API level 11 (Android 3.0) and up
-} else {
-    // Do something different to support older versions
-}
-</pre>
-
diff --git a/docs/html/guide/practices/design/accessibility.html b/docs/html/guide/practices/app-design/accessibility.html
similarity index 100%
rename from docs/html/guide/practices/design/accessibility.html
rename to docs/html/guide/practices/app-design/accessibility.html
diff --git a/docs/html/guide/practices/design/index.jd b/docs/html/guide/practices/app-design/index.jd
similarity index 100%
rename from docs/html/guide/practices/design/index.jd
rename to docs/html/guide/practices/app-design/index.jd
diff --git a/docs/html/guide/practices/design/jni.jd b/docs/html/guide/practices/app-design/jni.jd
similarity index 100%
rename from docs/html/guide/practices/design/jni.jd
rename to docs/html/guide/practices/app-design/jni.jd
diff --git a/docs/html/guide/practices/app-design/performance.jd b/docs/html/guide/practices/app-design/performance.jd
new file mode 100644
index 0000000..078999b
--- /dev/null
+++ b/docs/html/guide/practices/app-design/performance.jd
@@ -0,0 +1,410 @@
+page.title=Designing for Performance
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#intro">Introduction</a></li>
+  <li><a href="#optimize_judiciously">Optimize Judiciously</a></li>
+  <li><a href="#object_creation">Avoid Creating Unnecessary Objects</a></li>
+  <li><a href="#myths">Performance Myths</a></li>
+  <li><a href="#prefer_static">Prefer Static Over Virtual</a></li>
+  <li><a href="#internal_get_set">Avoid Internal Getters/Setters</a></li>
+  <li><a href="#use_final">Use Static Final For Constants</a></li>
+  <li><a href="#foreach">Use Enhanced For Loop Syntax</a></li>
+  <li><a href="#package_inner">Consider Package Instead of Private Access with Inner Classes</a></li>
+  <li><a href="#avoidfloat">Use Floating-Point Judiciously</a> </li>
+  <li><a href="#library">Know And Use The Libraries</a></li>
+  <li><a href="#native_methods">Use Native Methods Judiciously</a></li>
+  <li><a href="#closing_notes">Closing Notes</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>An Android application will run on a mobile device with limited computing
+power and storage, and constrained battery life. Because of
+this, it should be <em>efficient</em>. Battery life is one reason you might
+want to optimize your app even if it already seems to run "fast enough".
+Battery life is important to users, and Android's battery usage breakdown
+means users will know if your app is responsible draining their battery.</p>
+
+<p>Note that although this document primarily covers micro-optimizations,
+these will almost never make or break your software. Choosing the right
+algorithms and data structures should always be your priority, but is
+outside the scope of this document.</p>
+
+<a name="intro" id="intro"></a>
+<h2>Introduction</h2>
+
+<p>There are two basic rules for writing efficient code:</p>
+<ul>
+    <li>Don't do work that you don't need to do.</li>
+    <li>Don't allocate memory if you can avoid it.</li>
+</ul>
+
+<h2 id="optimize_judiciously">Optimize Judiciously</h2>
+
+<p>This document is about Android-specific micro-optimization, so it assumes
+that you've already used profiling to work out exactly what code needs to be
+optimized, and that you already have a way to measure the effect (good or bad)
+of any changes you make. You only have so much engineering time to invest, so
+it's important to know you're spending it wisely.
+
+<p>(See <a href="#closing_notes">Closing Notes</a> for more on profiling and
+writing effective benchmarks.)
+
+<p>This document also assumes that you made the best decisions about data
+structures and algorithms, and that you've also considered the future
+performance consequences of your API decisions. Using the right data
+structures and algorithms will make more difference than any of the advice
+here, and considering the performance consequences of your API decisions will
+make it easier to switch to better implementations later (this is more
+important for library code than for application code).
+
+<p>(If you need that kind of advice, see Josh Bloch's <em>Effective Java</em>,
+item 47.)</p>
+
+<p>One of the trickiest problems you'll face when micro-optimizing an Android
+app is that your app is pretty much guaranteed to be running on multiple
+hardware platforms. Different versions of the VM running on different
+processors running at different speeds. It's not even generally the case
+that you can simply say "device X is a factor F faster/slower than device Y",
+and scale your results from one device to others. In particular, measurement
+on the emulator tells you very little about performance on any device. There
+are also huge differences between devices with and without a JIT: the "best"
+code for a device with a JIT is not always the best code for a device
+without.</p>
+
+<p>If you want to know how your app performs on a given device, you need to
+test on that device.</p>
+
+<a name="object_creation"></a>
+<h2>Avoid Creating Unnecessary Objects</h2>
+
+<p>Object creation is never free. A generational GC with per-thread allocation
+pools for temporary objects can make allocation cheaper, but allocating memory
+is always more expensive than not allocating memory.</p>
+
+<p>If you allocate objects in a user interface loop, you will force a periodic
+garbage collection, creating little "hiccups" in the user experience. The
+concurrent collector introduced in Gingerbread helps, but unnecessary work
+should always be avoided.</p>
+
+<p>Thus, you should avoid creating object instances you don't need to.  Some
+examples of things that can help:</p>
+
+<ul>
+    <li>If you have a method returning a string, and you know that its result
+    will always be appended to a StringBuffer anyway, change your signature
+    and implementation so that the function does the append directly,
+    instead of creating a short-lived temporary object.</li>
+    <li>When extracting strings from a set of input data, try
+    to return a substring of the original data, instead of creating a copy.
+    You will create a new String object, but it will share the char[]
+    with the data. (The trade-off being that if you're only using a small
+    part of the original input, you'll be keeping it all around in memory
+    anyway if you go this route.)</li>
+</ul>
+
+<p>A somewhat more radical idea is to slice up multidimensional arrays into
+parallel single one-dimension arrays:</p>
+
+<ul>
+    <li>An array of ints is a much better than an array of Integers,
+    but this also generalizes to the fact that two parallel arrays of ints
+    are also a <strong>lot</strong> more efficient than an array of (int,int)
+    objects.  The same goes for any combination of primitive types.</li>
+    <li>If you need to implement a container that stores tuples of (Foo,Bar)
+    objects, try to remember that two parallel Foo[] and Bar[] arrays are
+    generally much better than a single array of custom (Foo,Bar) objects.
+    (The exception to this, of course, is when you're designing an API for
+    other code to access;  in those cases, it's usually better to trade
+    good API design for a small hit in speed. But in your own internal
+    code, you should try and be as efficient as possible.)</li>
+</ul>
+
+<p>Generally speaking, avoid creating short-term temporary objects if you
+can.  Fewer objects created mean less-frequent garbage collection, which has
+a direct impact on user experience.</p>
+
+<a name="avoid_enums" id="avoid_enums"></a>
+<a name="myths" id="myths"></a>
+<h2>Performance Myths</h2>
+
+<p>Previous versions of this document made various misleading claims. We
+address some of them here.</p>
+
+<p>On devices without a JIT, it is true that invoking methods via a
+variable with an exact type rather than an interface is slightly more
+efficient. (So, for example, it was cheaper to invoke methods on a
+<code>HashMap map</code> than a <code>Map map</code>, even though in both
+cases the map was a <code>HashMap</code>.) It was not the case that this
+was 2x slower; the actual difference was more like 6% slower. Furthermore,
+the JIT makes the two effectively indistinguishable.</p>
+
+<p>On devices without a JIT, caching field accesses is about 20% faster than
+repeatedly accesssing the field. With a JIT, field access costs about the same
+as local access, so this isn't a worthwhile optimization unless you feel it
+makes your code easier to read. (This is true of final, static, and static
+final fields too.)
+
+<a name="prefer_static" id="prefer_static"></a>
+<h2>Prefer Static Over Virtual</h2>
+
+<p>If you don't need to access an object's fields, make your method static.
+Invocations will be about 15%-20% faster.
+It's also good practice, because you can tell from the method
+signature that calling the method can't alter the object's state.</p>
+
+<a name="internal_get_set" id="internal_get_set"></a>
+<h2>Avoid Internal Getters/Setters</h2>
+
+<p>In native languages like C++ it's common practice to use getters (e.g.
+<code>i = getCount()</code>) instead of accessing the field directly (<code>i
+= mCount</code>). This is an excellent habit for C++, because the compiler can
+usually inline the access, and if you need to restrict or debug field access
+you can add the code at any time.</p>
+
+<p>On Android, this is a bad idea.  Virtual method calls are expensive,
+much more so than instance field lookups.  It's reasonable to follow
+common object-oriented programming practices and have getters and setters
+in the public interface, but within a class you should always access
+fields directly.</p>
+
+<p>Without a JIT, direct field access is about 3x faster than invoking a
+trivial getter. With the JIT (where direct field access is as cheap as
+accessing a local), direct field access is about 7x faster than invoking a
+trivial getter. This is true in Froyo, but will improve in the future when
+the JIT inlines getter methods.</p>
+
+<p>Note that if you're using ProGuard, you can have the best
+of both worlds because ProGuard can inline accessors for you.</p>
+
+<a name="use_final" id="use_final"></a>
+<h2>Use Static Final For Constants</h2>
+
+<p>Consider the following declaration at the top of a class:</p>
+
+<pre>static int intVal = 42;
+static String strVal = "Hello, world!";</pre>
+
+<p>The compiler generates a class initializer method, called
+<code>&lt;clinit&gt;</code>, that is executed when the class is first used.
+The method stores the value 42 into <code>intVal</code>, and extracts a
+reference from the classfile string constant table for <code>strVal</code>.
+When these values are referenced later on, they are accessed with field
+lookups.</p>
+
+<p>We can improve matters with the "final" keyword:</p>
+
+<pre>static final int intVal = 42;
+static final String strVal = "Hello, world!";</pre>
+
+<p>The class no longer requires a <code>&lt;clinit&gt;</code> method,
+because the constants go into static field initializers in the dex file.
+Code that refers to <code>intVal</code> will use
+the integer value 42 directly, and accesses to <code>strVal</code> will
+use a relatively inexpensive "string constant" instruction instead of a
+field lookup. (Note that this optimization only applies to primitive types and
+<code>String</code> constants, not arbitrary reference types. Still, it's good
+practice to declare constants <code>static final</code> whenever possible.)</p>
+
+<a name="foreach" id="foreach"></a>
+<h2>Use Enhanced For Loop Syntax</h2>
+
+<p>The enhanced for loop (also sometimes known as "for-each" loop) can be used
+for collections that implement the Iterable interface and for arrays.
+With collections, an iterator is allocated to make interface calls
+to hasNext() and next(). With an ArrayList, a hand-written counted loop is
+about 3x faster (with or without JIT), but for other collections the enhanced
+for loop syntax will be exactly equivalent to explicit iterator usage.</p>
+
+<p>There are several alternatives for iterating through an array:</p>
+
+<pre>    static class Foo {
+        int mSplat;
+    }
+    Foo[] mArray = ...
+
+    public void zero() {
+        int sum = 0;
+        for (int i = 0; i &lt; mArray.length; ++i) {
+            sum += mArray[i].mSplat;
+        }
+    }
+
+    public void one() {
+        int sum = 0;
+        Foo[] localArray = mArray;
+        int len = localArray.length;
+
+        for (int i = 0; i &lt; len; ++i) {
+            sum += localArray[i].mSplat;
+        }
+    }
+
+    public void two() {
+        int sum = 0;
+        for (Foo a : mArray) {
+            sum += a.mSplat;
+        }
+    }
+</pre>
+
+<p><strong>zero()</strong> is slowest, because the JIT can't yet optimize away
+the cost of getting the array length once for every iteration through the
+loop.</p>
+
+<p><strong>one()</strong> is faster. It pulls everything out into local
+variables, avoiding the lookups. Only the array length offers a performance
+benefit.</p>
+
+<p><strong>two()</strong> is fastest for devices without a JIT, and
+indistinguishable from <strong>one()</strong> for devices with a JIT.
+It uses the enhanced for loop syntax introduced in version 1.5 of the Java
+programming language.</p>
+
+<p>To summarize: use the enhanced for loop by default, but consider a
+hand-written counted loop for performance-critical ArrayList iteration.</p>
+
+<p>(See also <em>Effective Java</em> item 46.)</p>
+
+<a name="package_inner" id="package_inner"></a>
+<h2>Consider Package Instead of Private Access with Private Inner Classes</h2>
+
+<p>Consider the following class definition:</p>
+
+<pre>public class Foo {
+    private class Inner {
+        void stuff() {
+            Foo.this.doStuff(Foo.this.mValue);
+        }
+    }
+
+    private int mValue;
+
+    public void run() {
+        Inner in = new Inner();
+        mValue = 27;
+        in.stuff();
+    }
+
+    private void doStuff(int value) {
+        System.out.println("Value is " + value);
+    }
+}</pre>
+
+<p>The key things to note here are that we define a private inner class
+(<code>Foo$Inner</code>) that directly accesses a private method and a private
+instance field in the outer class. This is legal, and the code prints "Value is
+27" as expected.</p>
+
+<p>The problem is that the VM considers direct access to <code>Foo</code>'s
+private members from <code>Foo$Inner</code> to be illegal because
+<code>Foo</code> and <code>Foo$Inner</code> are different classes, even though
+the Java language allows an inner class to access an outer class' private
+members. To bridge the gap, the compiler generates a couple of synthetic
+methods:</p>
+
+<pre>/*package*/ static int Foo.access$100(Foo foo) {
+    return foo.mValue;
+}
+/*package*/ static void Foo.access$200(Foo foo, int value) {
+    foo.doStuff(value);
+}</pre>
+
+<p>The inner class code calls these static methods whenever it needs to
+access the <code>mValue</code> field or invoke the <code>doStuff</code> method
+in the outer class. What this means is that the code above really boils down to
+a case where you're accessing member fields through accessor methods.
+Earlier we talked about how accessors are slower than direct field
+accesses, so this is an example of a certain language idiom resulting in an
+"invisible" performance hit.</p>
+
+<p>If you're using code like this in a performance hotspot, you can avoid the
+overhead by declaring fields and methods accessed by inner classes to have
+package access, rather than private access. Unfortunately this means the fields
+can be accessed directly by other classes in the same package, so you shouldn't
+use this in public API.</p>
+
+<a name="avoidfloat" id="avoidfloat"></a>
+<h2>Use Floating-Point Judiciously</h2>
+
+<p>As a rule of thumb, floating-point is about 2x slower than integer on
+Android devices. This is true on a FPU-less, JIT-less G1 and a Nexus One with
+an FPU and the JIT. (Of course, absolute speed difference between those two
+devices is about 10x for arithmetic operations.)</p>
+
+<p>In speed terms, there's no difference between <code>float</code> and
+<code>double</code> on the more modern hardware. Space-wise, <code>double</code>
+is 2x larger. As with desktop machines, assuming space isn't an issue, you
+should prefer <code>double</code> to <code>float</code>.</p>
+
+<p>Also, even for integers, some chips have hardware multiply but lack
+hardware divide. In such cases, integer division and modulus operations are
+performed in software &mdash; something to think about if you're designing a
+hash table or doing lots of math.</p>
+
+<a name="library" id="library"></a>
+<h2>Know And Use The Libraries</h2>
+
+<p>In addition to all the usual reasons to prefer library code over rolling
+your own, bear in mind that the system is at liberty to replace calls
+to library methods with hand-coded assembler, which may be better than the
+best code the JIT can produce for the equivalent Java. The typical example
+here is <code>String.indexOf</code> and friends, which Dalvik replaces with
+an inlined intrinsic. Similarly, the <code>System.arraycopy</code> method
+is about 9x faster than a hand-coded loop on a Nexus One with the JIT.</p>
+
+<p>(See also <em>Effective Java</em> item 47.)</p>
+
+<a name="native_methods" id="native_methods"></a>
+<h2>Use Native Methods Judiciously</h2>
+
+<p>Native code isn't necessarily more efficient than Java. For one thing,
+there's a cost associated with the Java-native transition, and the JIT can't
+optimize across these boundaries. If you're allocating native resources (memory
+on the native heap, file descriptors, or whatever), it can be significantly
+more difficult to arrange timely collection of these resources. You also
+need to compile your code for each architecture you wish to run on (rather
+than rely on it having a JIT). You may even have to compile multiple versions
+for what you consider the same architecture: native code compiled for the ARM
+processor in the G1 can't take full advantage of the ARM in the Nexus One, and
+code compiled for the ARM in the Nexus One won't run on the ARM in the G1.</p>
+
+<p>Native code is primarily useful when you have an existing native codebase
+that you want to port to Android, not for "speeding up" parts of a Java app.</p>
+
+<p>If you do need to use native code, you should read our
+<a href="{@docRoot}guide/practices/jni.html">JNI Tips</a>.</p>
+
+<p>(See also <em>Effective Java</em> item 54.)</p>
+
+<a name="closing_notes" id="closing_notes"></a>
+<h2>Closing Notes</h2>
+
+<p>One last thing: always measure. Before you start optimizing, make sure you
+have a problem. Make sure you can accurately measure your existing performance,
+or you won't be able to measure the benefit of the alternatives you try.</p>
+
+<p>Every claim made in this document is backed up by a benchmark. The source
+to these benchmarks can be found in the <a href="http://code.google.com/p/dalvik/source/browse/#svn/trunk/benchmarks">code.google.com "dalvik" project</a>.</p>
+
+<p>The benchmarks are built with the
+<a href="http://code.google.com/p/caliper/">Caliper</a> microbenchmarking
+framework for Java. Microbenchmarks are hard to get right, so Caliper goes out
+of its way to do the hard work for you, and even detect some cases where you're
+not measuring what you think you're measuring (because, say, the VM has
+managed to optimize all your code away). We highly recommend you use Caliper
+to run your own microbenchmarks.</p>
+
+<p>You may also find
+<a href="{@docRoot}tools/debugging/debugging-tracing.html">Traceview</a> useful
+for profiling, but it's important to realize that it currently disables the JIT,
+which may cause it to misattribute time to code that the JIT may be able to win
+back. It's especially important after making changes suggested by Traceview
+data to ensure that the resulting code actually runs faster when run without
+Traceview.
diff --git a/docs/html/guide/practices/design/responsiveness.jd b/docs/html/guide/practices/app-design/responsiveness.jd
similarity index 100%
rename from docs/html/guide/practices/design/responsiveness.jd
rename to docs/html/guide/practices/app-design/responsiveness.jd
diff --git a/docs/html/guide/practices/app-design/seamlessness.jd b/docs/html/guide/practices/app-design/seamlessness.jd
new file mode 100644
index 0000000..ec6b7fd
--- /dev/null
+++ b/docs/html/guide/practices/app-design/seamlessness.jd
@@ -0,0 +1,249 @@
+page.title=Designing for Seamlessness
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#drop">Don't Drop Data</a></li>
+  <li><a href="#expose">Don't Expose Raw Data</a></li>
+  <li><a href="#interrupt">Don't Interrupt the User</a></li>
+  <li><a href="#threads">Got a Lot to Do? Do it in a Thread</a></li>
+  <li><a href="#multiple-activities">Don't Overload a Single Activity Screen</a></li>
+  <li><a href="#themes">Extend System Themes</a></li>
+  <li><a href="#flexui">Design Your UI to Work with Multiple Screen Resolutions</a></li>
+  <li><a href="#network">Assume the Network is Slow</a></li>
+  <li><a href="#keyboard">Don't Assume Touchscreen or Keyboard</a></li>
+  <li><a href="#battery">Do Conserve the Device Battery</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Even if your application is fast and responsive, certain design decisions can
+still cause problems for users &mdash; because of unplanned interactions with
+other applications or dialogs, inadvertent loss of data, unintended blocking,
+and so on. To avoid these problems, it helps to understand the context in which
+your applications run and the system interactions that can affect your
+application. In short, you should strive to develop an application that
+interacts seamlessly with the system and with other applications. </p>
+
+<p>A common seamlessness problem is when an application's background process
+&mdash; for example, a service or broadcast receiver &mdash; pops up a dialog in
+response to some event. This may seem like harmless behavior, especially when
+you are building and testing your application in isolation, on the emulator.
+However, when your application is run on an actual device, your application may
+not have user focus at the time your background process displays the dialog. So
+it could end up that your application would display it's dialog behind the
+active application, or it could take focus from the current application and
+display the dialog in front of whatever the user was doing (such as dialing a
+phone call, for example). That behavior would not work for your application or
+for the user. </p>
+
+<p>To avoid these problems, your application should use the proper system 
+facility for notifying the user &mdash; the 
+{@link android.app.Notification Notification} classes. Using
+notifications, your application can signal the user that an event has 
+taken place, by displaying an icon in the status bar rather than taking
+focus and interrupting the user.</p>
+
+<p>Another example of a seamlessness problem is when an activity inadvertently
+loses state or user data because it doesn't correctly implement the onPause()
+and other lifecycle methods. Or, if your application exposes data intended to be
+used by other applications, you should expose it via a ContentProvider, rather
+than (for example) doing so through a world-readable raw file or database.</p>
+
+<p>What those examples have in common is that they involve cooperating nicely
+with the system and other applications. The Android system is designed to treat
+applications as a sort of federation of loosely-coupled components, rather than
+chunks of black-box code. This allows you as the developer to view the entire
+system as just an even-larger federation of these components. This benefits you
+by allowing you to integrate cleanly and seamlessly with other applications, and
+so you should design your own code to return the favor.</p>
+
+<p>This document discusses common seamlessness problems and how to avoid them.</p>
+
+<h2 id="drop">Don't Drop Data</h2>
+
+<p>Always keep in mind that Android is a mobile platform. It may seem obvious to
+say it, but it's important to remember that another Activity (such as the
+"Incoming Phone Call" app) can pop up over your own Activity at any moment.
+This will fire the onSaveInstanceState() and onPause() methods, and will likely result in
+your application being killed.</p>
+
+<p>If the user was editing data in your application when the other Activity
+appeared, your application will likely lose that data when your application is
+killed. Unless, of course, you save the work in progress first. The "Android
+Way" is to do just that: Android applications that accept or edit input should
+override the onSaveInstanceState() method and save their state in some appropriate
+fashion. When the user revisits the application, she should be able to
+retrieve her data.</p>
+
+<p>A classic example of a good use of this behavior is a mail application. If the
+user was composing an email when another Activity started up, the application
+should save the in-process email as a draft.</p>
+
+<h2 id="expose">Don't Expose Raw Data</h2>
+
+<p>If you wouldn't walk down the street in your underwear, neither should your
+data. While it's possible to expose certain kinds of application to the world
+to read, this is usually not the best idea. Exposing raw data requires other
+applications to understand your data format; if you change that format, you'll
+break any other applications that aren't similarly updated.</p>
+
+<p>The "Android Way" is to create a ContentProvider to expose your data to other
+applications via a clean, well-thought-out, and maintainable API. Using a
+ContentProvider is much like inserting a Java language interface to split up and
+componentize two tightly-coupled pieces of code. This means you'll be able to
+modify the internal format of your data without changing the interface exposed
+by the ContentProvider, and this without affecting other applications.</p>
+
+<h2 id="interrupt">Don't Interrupt the User</h2>
+
+<p>If the user is running an application (such as the Phone application during a
+call) it's a pretty safe bet he did it on purpose. That's why you should avoid
+spawning activities except in direct response to user input from the current
+Activity.</p>
+
+<p>That is, don't call startActivity() from BroadcastReceivers or Services running in
+the background. Doing so will interrupt whatever application is currently
+running, and result in an annoyed user. Perhaps even worse, your Activity may
+become a "keystroke bandit" and receive some of the input the user was in the
+middle of providing to the previous Activity. Depending on what your
+application does, this could be bad news.</p>
+
+<p>Instead of spawning Activity UIs directly from the background, you should
+instead use the NotificationManager to set Notifications. These will appear in
+the status bar, and the user can then click on them at his leisure, to see
+what your application has to show him.</p>
+
+<p>(Note that all this doesn't apply to cases where your own Activity is already
+in the foreground: in that case, the user expects to see your next Activity in
+response to input.)</p>
+
+<h2 id="threads">Got a Lot to Do? Do it in a Thread</h2>
+
+<p>If your application needs to perform some expensive or long-running
+computation, you should probably move it to a thread. This will prevent the
+dreaded "Application Not Responding" dialog from being displayed to the user,
+with the ultimate result being the fiery demise of your application.</p>
+
+<p>By default, all code in an Activity as well as all its Views run in the same
+thread. This is the same thread that also handles UI events. For example, when
+the user presses a key, a key-down event is added to the Activity's main
+thread's queue. The event handler system needs to dequeue and handle that
+event quickly; if it doesn't, the system concludes after a few seconds that
+the application is hung and offers to kill it for the user.</p>
+
+<p>If you have long-running code, running it inline in your Activity will run it
+on the event handler thread, effectively blocking the event handler. This will
+delay input processing, and result in the ANR dialogs. To avoid this, move
+your computations to a thread. This <a
+href="responsiveness.html">Design for Responsiveness</a> document 
+discusses how to do that..</p>
+
+<h2 id="multiple-activities">Don't Overload a Single Activity Screen</h2>
+
+<p>Any application worth using will probably have several different screens.
+When designing the screens of your UI, be sure to make use of multiple Activity
+object instances.</p>
+
+<p>Depending on your development background, you may interpret an Activity as
+similar to something like a Java Applet, in that it is the entry point for
+your application. However, that's not quite accurate: where an Applet subclass
+is the single entry point for a Java Applet, an Activity should be thought of
+as one of potentially several entry points to your application. The only
+difference between your "main" Activity and any others you might have is that
+the "main" one just happens to be the only one that expressed an interest in
+the "android.intent.action.MAIN" action in your AndroidManifest..xml file.</p>
+
+<p>So, when designing your application, think of your application as a federation
+of Activity objects. This will make your code a lot more maintainable in the long
+run, and as a nice side effect also plays nicely with Android's application
+history and "backstack" model.</p>
+
+<h2 id="themes">Extend System Themes</h2>
+
+<p>When it comes to the look-and-feel of the user interface, it's important to
+blend in nicely. Users are jarred by applications which contrast with the user
+interface they've come to expect. When designing your UIs, you should try and
+avoid rolling your own as much as possible. Instead, use a Theme. You
+can override or extend those parts of the theme that you need to, but at least
+you're starting from the same UI base as all the other applications. For all
+the details, read <a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
+
+<h2 id="flexui">Design Your UI to Work with Multiple Screen Resolutions</h2>
+
+<p>Different Android-powered devices will support different screen resolutions. 
+Some will even be able to change resolutions on the fly, such as by switching 
+to landscape mode. It's important to make sure your layouts and drawables 
+are flexible enough to display properly on a variety of device screens.</p>
+
+<p>Fortunately, this is very easy to do. In brief, what you must do is 
+provide different versions of your artwork (if you use any) for the key 
+resolutions, and then design your layout to accommodate various dimensions. 
+(For example, avoid using hard-coded positions and instead use relative 
+layouts.) If you do that much, the system handles the rest, and your 
+application looks great on any device.</p>
+
+<h2 id="network">Assume the Network is Slow</h2>
+
+<p>Android devices will come with a variety of network-connectivity options. All
+will have some data-access provision, though some will be faster than others.
+The lowest common denominator, however, is GPRS, the non-3G data service for
+GSM networks. Even 3G-capable devices will spend lots of time on non-3G
+networks, so slow networks will remain a reality for quite a long time to
+come.</p>
+
+<p>That's why you should always code your applications to minimize network
+accesses and bandwidth. You can't assume the network is fast, so you should
+always plan for it to be slow. If your users happen to be on faster networks,
+then that's great &mdash; their experience will only improve. You want to avoid the
+inverse case though: applications that are usable some of the time, but
+frustratingly slow the rest based on where the user is at any given moment are
+likely to be unpopular.</p>
+
+<p>One potential gotcha here is that it's very easy to fall into this trap if
+you're using the emulator, since the emulator uses your desktop computer's
+network connection. That's almost guaranteed to be much faster than a cell
+network, so you'll want to change the settings on the emulator that simulate
+slower network speeds. You can do this in Eclipse, in the "Emulator Settings"
+tab of your launch configuration or via a <a
+href="{@docRoot}tools/help/emulator.html#netspeed">command-line 
+option</a> when starting the emulator.</p>
+
+<h2 id="keyboard">Don't Assume Touchscreen or Keyboard</h2>
+
+<p>
+Android will support a variety of handset form-factors.  That's a fancy way of
+saying that some Android devices will have full "QWERTY" keyboards, while
+others will have 40-key, 12-key, or even other key configurations.  Similarly,
+some devices will have touch-screens, but many won't.
+</p><p>
+When building your applications, keep that in mind.  Don't make assumptions
+about specific keyboard layouts -- unless, of course, you're really interested
+in restricting your application so that it can only be used on those devices.
+</p>
+
+<h2 id="battery">Do Conserve the Device Battery</h2>
+<p>
+A mobile device isn't very mobile if it's constantly plugged into the
+wall.  Mobile devices are battery-powered, and the longer we can make that
+battery last on a charge, the happier everyone is &mdash; especially the user.
+Two of the biggest consumers of battery power are the processor, and the
+radio;  that's why it's important to write your applications to do as little
+work as possible, and use the network as infrequently as possible.
+</p><p>
+Minimizing the amount of processor time your application uses really comes
+down to <a href="performance.html">writing efficient
+code</a>.  To minimize the power drain from using the radio, be sure to handle
+error conditions gracefully, and only fetch what you need.  For example, don't
+constantly retry a network operation if one failed.  If it failed once, it's
+likely because the user has no reception, so it's probably going to fail again
+if you try right away; all you'll do is waste battery power.
+</p><p>
+Users are pretty smart:  if your program is power-hungry, you can count on
+them noticing.  The only thing you can be sure of at that point is that your
+program won't stay installed very long.
+</p>
diff --git a/docs/html/guide/practices/compatibility.jd b/docs/html/guide/practices/compatibility.jd
index 5e514c4..a2284bd 100644
--- a/docs/html/guide/practices/compatibility.jd
+++ b/docs/html/guide/practices/compatibility.jd
@@ -7,7 +7,7 @@
 <h2>See also</h2>
  <ol>
 <li><a
-href="{@docRoot}guide/appendix/market-filters.html">Filtering on Google Play</a></li>
+href="{@docRoot}guide/google/play/filters.html">Filtering on Google Play</a></li>
 <li><a
 href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">Providing Alternative Resources</a></li>
 <li><a
@@ -54,7 +54,7 @@
 ability to install and correctly run an Android <code>.apk</code> file.</p>
 
 <p>There is exactly one Android API for each <a
-href="{@docRoot}guide/appendix/api-levels.html">API level</a>, and it’s the same
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level</a>, and it’s the same
 API no matter what kind of device it’s installed on. No parts of the API are
 optional, and you never have to worry about parts of the API missing on some
 devices. Every compatible Android device your app will land on will include
@@ -119,7 +119,7 @@
 
 <p style="margin-top:1em;">For information about other filters that you can
 use to control the availability of your apps, see the 
-<a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>
+<a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>
 document.</p>
   </div> 
 </div>
diff --git a/docs/html/guide/practices/design/performance.jd b/docs/html/guide/practices/design/performance.jd
deleted file mode 100644
index dd9b554..0000000
--- a/docs/html/guide/practices/design/performance.jd
+++ /dev/null
@@ -1,410 +0,0 @@
-page.title=Designing for Performance
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#intro">Introduction</a></li>
-  <li><a href="#optimize_judiciously">Optimize Judiciously</a></li>
-  <li><a href="#object_creation">Avoid Creating Unnecessary Objects</a></li>
-  <li><a href="#myths">Performance Myths</a></li>
-  <li><a href="#prefer_static">Prefer Static Over Virtual</a></li>
-  <li><a href="#internal_get_set">Avoid Internal Getters/Setters</a></li>
-  <li><a href="#use_final">Use Static Final For Constants</a></li>
-  <li><a href="#foreach">Use Enhanced For Loop Syntax</a></li>
-  <li><a href="#package_inner">Consider Package Instead of Private Access with Inner Classes</a></li>
-  <li><a href="#avoidfloat">Use Floating-Point Judiciously</a> </li>
-  <li><a href="#library">Know And Use The Libraries</a></li>
-  <li><a href="#native_methods">Use Native Methods Judiciously</a></li>
-  <li><a href="#closing_notes">Closing Notes</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>An Android application will run on a mobile device with limited computing
-power and storage, and constrained battery life. Because of
-this, it should be <em>efficient</em>. Battery life is one reason you might
-want to optimize your app even if it already seems to run "fast enough".
-Battery life is important to users, and Android's battery usage breakdown
-means users will know if your app is responsible draining their battery.</p>
-
-<p>Note that although this document primarily covers micro-optimizations,
-these will almost never make or break your software. Choosing the right
-algorithms and data structures should always be your priority, but is
-outside the scope of this document.</p>
-
-<a name="intro" id="intro"></a>
-<h2>Introduction</h2>
-
-<p>There are two basic rules for writing efficient code:</p>
-<ul>
-    <li>Don't do work that you don't need to do.</li>
-    <li>Don't allocate memory if you can avoid it.</li>
-</ul>
-
-<h2 id="optimize_judiciously">Optimize Judiciously</h2>
-
-<p>This document is about Android-specific micro-optimization, so it assumes
-that you've already used profiling to work out exactly what code needs to be
-optimized, and that you already have a way to measure the effect (good or bad)
-of any changes you make. You only have so much engineering time to invest, so
-it's important to know you're spending it wisely.
-
-<p>(See <a href="#closing_notes">Closing Notes</a> for more on profiling and
-writing effective benchmarks.)
-
-<p>This document also assumes that you made the best decisions about data
-structures and algorithms, and that you've also considered the future
-performance consequences of your API decisions. Using the right data
-structures and algorithms will make more difference than any of the advice
-here, and considering the performance consequences of your API decisions will
-make it easier to switch to better implementations later (this is more
-important for library code than for application code).
-
-<p>(If you need that kind of advice, see Josh Bloch's <em>Effective Java</em>,
-item 47.)</p>
-
-<p>One of the trickiest problems you'll face when micro-optimizing an Android
-app is that your app is pretty much guaranteed to be running on multiple
-hardware platforms. Different versions of the VM running on different
-processors running at different speeds. It's not even generally the case
-that you can simply say "device X is a factor F faster/slower than device Y",
-and scale your results from one device to others. In particular, measurement
-on the emulator tells you very little about performance on any device. There
-are also huge differences between devices with and without a JIT: the "best"
-code for a device with a JIT is not always the best code for a device
-without.</p>
-
-<p>If you want to know how your app performs on a given device, you need to
-test on that device.</p>
-
-<a name="object_creation"></a>
-<h2>Avoid Creating Unnecessary Objects</h2>
-
-<p>Object creation is never free. A generational GC with per-thread allocation
-pools for temporary objects can make allocation cheaper, but allocating memory
-is always more expensive than not allocating memory.</p>
-
-<p>If you allocate objects in a user interface loop, you will force a periodic
-garbage collection, creating little "hiccups" in the user experience. The
-concurrent collector introduced in Gingerbread helps, but unnecessary work
-should always be avoided.</p>
-
-<p>Thus, you should avoid creating object instances you don't need to.  Some
-examples of things that can help:</p>
-
-<ul>
-    <li>If you have a method returning a string, and you know that its result
-    will always be appended to a StringBuffer anyway, change your signature
-    and implementation so that the function does the append directly,
-    instead of creating a short-lived temporary object.</li>
-    <li>When extracting strings from a set of input data, try
-    to return a substring of the original data, instead of creating a copy.
-    You will create a new String object, but it will share the char[]
-    with the data. (The trade-off being that if you're only using a small
-    part of the original input, you'll be keeping it all around in memory
-    anyway if you go this route.)</li>
-</ul>
-
-<p>A somewhat more radical idea is to slice up multidimensional arrays into
-parallel single one-dimension arrays:</p>
-
-<ul>
-    <li>An array of ints is a much better than an array of Integers,
-    but this also generalizes to the fact that two parallel arrays of ints
-    are also a <strong>lot</strong> more efficient than an array of (int,int)
-    objects.  The same goes for any combination of primitive types.</li>
-    <li>If you need to implement a container that stores tuples of (Foo,Bar)
-    objects, try to remember that two parallel Foo[] and Bar[] arrays are
-    generally much better than a single array of custom (Foo,Bar) objects.
-    (The exception to this, of course, is when you're designing an API for
-    other code to access;  in those cases, it's usually better to trade
-    good API design for a small hit in speed. But in your own internal
-    code, you should try and be as efficient as possible.)</li>
-</ul>
-
-<p>Generally speaking, avoid creating short-term temporary objects if you
-can.  Fewer objects created mean less-frequent garbage collection, which has
-a direct impact on user experience.</p>
-
-<a name="avoid_enums" id="avoid_enums"></a>
-<a name="myths" id="myths"></a>
-<h2>Performance Myths</h2>
-
-<p>Previous versions of this document made various misleading claims. We
-address some of them here.</p>
-
-<p>On devices without a JIT, it is true that invoking methods via a
-variable with an exact type rather than an interface is slightly more
-efficient. (So, for example, it was cheaper to invoke methods on a
-<code>HashMap map</code> than a <code>Map map</code>, even though in both
-cases the map was a <code>HashMap</code>.) It was not the case that this
-was 2x slower; the actual difference was more like 6% slower. Furthermore,
-the JIT makes the two effectively indistinguishable.</p>
-
-<p>On devices without a JIT, caching field accesses is about 20% faster than
-repeatedly accesssing the field. With a JIT, field access costs about the same
-as local access, so this isn't a worthwhile optimization unless you feel it
-makes your code easier to read. (This is true of final, static, and static
-final fields too.)
-
-<a name="prefer_static" id="prefer_static"></a>
-<h2>Prefer Static Over Virtual</h2>
-
-<p>If you don't need to access an object's fields, make your method static.
-Invocations will be about 15%-20% faster.
-It's also good practice, because you can tell from the method
-signature that calling the method can't alter the object's state.</p>
-
-<a name="internal_get_set" id="internal_get_set"></a>
-<h2>Avoid Internal Getters/Setters</h2>
-
-<p>In native languages like C++ it's common practice to use getters (e.g.
-<code>i = getCount()</code>) instead of accessing the field directly (<code>i
-= mCount</code>). This is an excellent habit for C++, because the compiler can
-usually inline the access, and if you need to restrict or debug field access
-you can add the code at any time.</p>
-
-<p>On Android, this is a bad idea.  Virtual method calls are expensive,
-much more so than instance field lookups.  It's reasonable to follow
-common object-oriented programming practices and have getters and setters
-in the public interface, but within a class you should always access
-fields directly.</p>
-
-<p>Without a JIT, direct field access is about 3x faster than invoking a
-trivial getter. With the JIT (where direct field access is as cheap as
-accessing a local), direct field access is about 7x faster than invoking a
-trivial getter. This is true in Froyo, but will improve in the future when
-the JIT inlines getter methods.</p>
-
-<p>Note that if you're using ProGuard, you can have the best
-of both worlds because ProGuard can inline accessors for you.</p>
-
-<a name="use_final" id="use_final"></a>
-<h2>Use Static Final For Constants</h2>
-
-<p>Consider the following declaration at the top of a class:</p>
-
-<pre>static int intVal = 42;
-static String strVal = "Hello, world!";</pre>
-
-<p>The compiler generates a class initializer method, called
-<code>&lt;clinit&gt;</code>, that is executed when the class is first used.
-The method stores the value 42 into <code>intVal</code>, and extracts a
-reference from the classfile string constant table for <code>strVal</code>.
-When these values are referenced later on, they are accessed with field
-lookups.</p>
-
-<p>We can improve matters with the "final" keyword:</p>
-
-<pre>static final int intVal = 42;
-static final String strVal = "Hello, world!";</pre>
-
-<p>The class no longer requires a <code>&lt;clinit&gt;</code> method,
-because the constants go into static field initializers in the dex file.
-Code that refers to <code>intVal</code> will use
-the integer value 42 directly, and accesses to <code>strVal</code> will
-use a relatively inexpensive "string constant" instruction instead of a
-field lookup. (Note that this optimization only applies to primitive types and
-<code>String</code> constants, not arbitrary reference types. Still, it's good
-practice to declare constants <code>static final</code> whenever possible.)</p>
-
-<a name="foreach" id="foreach"></a>
-<h2>Use Enhanced For Loop Syntax</h2>
-
-<p>The enhanced for loop (also sometimes known as "for-each" loop) can be used
-for collections that implement the Iterable interface and for arrays.
-With collections, an iterator is allocated to make interface calls
-to hasNext() and next(). With an ArrayList, a hand-written counted loop is
-about 3x faster (with or without JIT), but for other collections the enhanced
-for loop syntax will be exactly equivalent to explicit iterator usage.</p>
-
-<p>There are several alternatives for iterating through an array:</p>
-
-<pre>    static class Foo {
-        int mSplat;
-    }
-    Foo[] mArray = ...
-
-    public void zero() {
-        int sum = 0;
-        for (int i = 0; i &lt; mArray.length; ++i) {
-            sum += mArray[i].mSplat;
-        }
-    }
-
-    public void one() {
-        int sum = 0;
-        Foo[] localArray = mArray;
-        int len = localArray.length;
-
-        for (int i = 0; i &lt; len; ++i) {
-            sum += localArray[i].mSplat;
-        }
-    }
-
-    public void two() {
-        int sum = 0;
-        for (Foo a : mArray) {
-            sum += a.mSplat;
-        }
-    }
-</pre>
-
-<p><strong>zero()</strong> is slowest, because the JIT can't yet optimize away
-the cost of getting the array length once for every iteration through the
-loop.</p>
-
-<p><strong>one()</strong> is faster. It pulls everything out into local
-variables, avoiding the lookups. Only the array length offers a performance
-benefit.</p>
-
-<p><strong>two()</strong> is fastest for devices without a JIT, and
-indistinguishable from <strong>one()</strong> for devices with a JIT.
-It uses the enhanced for loop syntax introduced in version 1.5 of the Java
-programming language.</p>
-
-<p>To summarize: use the enhanced for loop by default, but consider a
-hand-written counted loop for performance-critical ArrayList iteration.</p>
-
-<p>(See also <em>Effective Java</em> item 46.)</p>
-
-<a name="package_inner" id="package_inner"></a>
-<h2>Consider Package Instead of Private Access with Private Inner Classes</h2>
-
-<p>Consider the following class definition:</p>
-
-<pre>public class Foo {
-    private class Inner {
-        void stuff() {
-            Foo.this.doStuff(Foo.this.mValue);
-        }
-    }
-
-    private int mValue;
-
-    public void run() {
-        Inner in = new Inner();
-        mValue = 27;
-        in.stuff();
-    }
-
-    private void doStuff(int value) {
-        System.out.println("Value is " + value);
-    }
-}</pre>
-
-<p>The key things to note here are that we define a private inner class
-(<code>Foo$Inner</code>) that directly accesses a private method and a private
-instance field in the outer class. This is legal, and the code prints "Value is
-27" as expected.</p>
-
-<p>The problem is that the VM considers direct access to <code>Foo</code>'s
-private members from <code>Foo$Inner</code> to be illegal because
-<code>Foo</code> and <code>Foo$Inner</code> are different classes, even though
-the Java language allows an inner class to access an outer class' private
-members. To bridge the gap, the compiler generates a couple of synthetic
-methods:</p>
-
-<pre>/*package*/ static int Foo.access$100(Foo foo) {
-    return foo.mValue;
-}
-/*package*/ static void Foo.access$200(Foo foo, int value) {
-    foo.doStuff(value);
-}</pre>
-
-<p>The inner class code calls these static methods whenever it needs to
-access the <code>mValue</code> field or invoke the <code>doStuff</code> method
-in the outer class. What this means is that the code above really boils down to
-a case where you're accessing member fields through accessor methods.
-Earlier we talked about how accessors are slower than direct field
-accesses, so this is an example of a certain language idiom resulting in an
-"invisible" performance hit.</p>
-
-<p>If you're using code like this in a performance hotspot, you can avoid the
-overhead by declaring fields and methods accessed by inner classes to have
-package access, rather than private access. Unfortunately this means the fields
-can be accessed directly by other classes in the same package, so you shouldn't
-use this in public API.</p>
-
-<a name="avoidfloat" id="avoidfloat"></a>
-<h2>Use Floating-Point Judiciously</h2>
-
-<p>As a rule of thumb, floating-point is about 2x slower than integer on
-Android devices. This is true on a FPU-less, JIT-less G1 and a Nexus One with
-an FPU and the JIT. (Of course, absolute speed difference between those two
-devices is about 10x for arithmetic operations.)</p>
-
-<p>In speed terms, there's no difference between <code>float</code> and
-<code>double</code> on the more modern hardware. Space-wise, <code>double</code>
-is 2x larger. As with desktop machines, assuming space isn't an issue, you
-should prefer <code>double</code> to <code>float</code>.</p>
-
-<p>Also, even for integers, some chips have hardware multiply but lack
-hardware divide. In such cases, integer division and modulus operations are
-performed in software &mdash; something to think about if you're designing a
-hash table or doing lots of math.</p>
-
-<a name="library" id="library"></a>
-<h2>Know And Use The Libraries</h2>
-
-<p>In addition to all the usual reasons to prefer library code over rolling
-your own, bear in mind that the system is at liberty to replace calls
-to library methods with hand-coded assembler, which may be better than the
-best code the JIT can produce for the equivalent Java. The typical example
-here is <code>String.indexOf</code> and friends, which Dalvik replaces with
-an inlined intrinsic. Similarly, the <code>System.arraycopy</code> method
-is about 9x faster than a hand-coded loop on a Nexus One with the JIT.</p>
-
-<p>(See also <em>Effective Java</em> item 47.)</p>
-
-<a name="native_methods" id="native_methods"></a>
-<h2>Use Native Methods Judiciously</h2>
-
-<p>Native code isn't necessarily more efficient than Java. For one thing,
-there's a cost associated with the Java-native transition, and the JIT can't
-optimize across these boundaries. If you're allocating native resources (memory
-on the native heap, file descriptors, or whatever), it can be significantly
-more difficult to arrange timely collection of these resources. You also
-need to compile your code for each architecture you wish to run on (rather
-than rely on it having a JIT). You may even have to compile multiple versions
-for what you consider the same architecture: native code compiled for the ARM
-processor in the G1 can't take full advantage of the ARM in the Nexus One, and
-code compiled for the ARM in the Nexus One won't run on the ARM in the G1.</p>
-
-<p>Native code is primarily useful when you have an existing native codebase
-that you want to port to Android, not for "speeding up" parts of a Java app.</p>
-
-<p>If you do need to use native code, you should read our
-<a href="{@docRoot}guide/practices/design/jni.html">JNI Tips</a>.</p>
-
-<p>(See also <em>Effective Java</em> item 54.)</p>
-
-<a name="closing_notes" id="closing_notes"></a>
-<h2>Closing Notes</h2>
-
-<p>One last thing: always measure. Before you start optimizing, make sure you
-have a problem. Make sure you can accurately measure your existing performance,
-or you won't be able to measure the benefit of the alternatives you try.</p>
-
-<p>Every claim made in this document is backed up by a benchmark. The source
-to these benchmarks can be found in the <a href="http://code.google.com/p/dalvik/source/browse/#svn/trunk/benchmarks">code.google.com "dalvik" project</a>.</p>
-
-<p>The benchmarks are built with the
-<a href="http://code.google.com/p/caliper/">Caliper</a> microbenchmarking
-framework for Java. Microbenchmarks are hard to get right, so Caliper goes out
-of its way to do the hard work for you, and even detect some cases where you're
-not measuring what you think you're measuring (because, say, the VM has
-managed to optimize all your code away). We highly recommend you use Caliper
-to run your own microbenchmarks.</p>
-
-<p>You may also find
-<a href="{@docRoot}guide/developing/debugging/debugging-tracing.html">Traceview</a> useful
-for profiling, but it's important to realize that it currently disables the JIT,
-which may cause it to misattribute time to code that the JIT may be able to win
-back. It's especially important after making changes suggested by Traceview
-data to ensure that the resulting code actually runs faster when run without
-Traceview.
diff --git a/docs/html/guide/practices/design/seamlessness.jd b/docs/html/guide/practices/design/seamlessness.jd
deleted file mode 100644
index 6c73426..0000000
--- a/docs/html/guide/practices/design/seamlessness.jd
+++ /dev/null
@@ -1,249 +0,0 @@
-page.title=Designing for Seamlessness
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#drop">Don't Drop Data</a></li>
-  <li><a href="#expose">Don't Expose Raw Data</a></li>
-  <li><a href="#interrupt">Don't Interrupt the User</a></li>
-  <li><a href="#threads">Got a Lot to Do? Do it in a Thread</a></li>
-  <li><a href="#multiple-activities">Don't Overload a Single Activity Screen</a></li>
-  <li><a href="#themes">Extend System Themes</a></li>
-  <li><a href="#flexui">Design Your UI to Work with Multiple Screen Resolutions</a></li>
-  <li><a href="#network">Assume the Network is Slow</a></li>
-  <li><a href="#keyboard">Don't Assume Touchscreen or Keyboard</a></li>
-  <li><a href="#battery">Do Conserve the Device Battery</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Even if your application is fast and responsive, certain design decisions can
-still cause problems for users &mdash; because of unplanned interactions with
-other applications or dialogs, inadvertent loss of data, unintended blocking,
-and so on. To avoid these problems, it helps to understand the context in which
-your applications run and the system interactions that can affect your
-application. In short, you should strive to develop an application that
-interacts seamlessly with the system and with other applications. </p>
-
-<p>A common seamlessness problem is when an application's background process
-&mdash; for example, a service or broadcast receiver &mdash; pops up a dialog in
-response to some event. This may seem like harmless behavior, especially when
-you are building and testing your application in isolation, on the emulator.
-However, when your application is run on an actual device, your application may
-not have user focus at the time your background process displays the dialog. So
-it could end up that your application would display it's dialog behind the
-active application, or it could take focus from the current application and
-display the dialog in front of whatever the user was doing (such as dialing a
-phone call, for example). That behavior would not work for your application or
-for the user. </p>
-
-<p>To avoid these problems, your application should use the proper system 
-facility for notifying the user &mdash; the 
-{@link android.app.Notification Notification} classes. Using
-notifications, your application can signal the user that an event has 
-taken place, by displaying an icon in the status bar rather than taking
-focus and interrupting the user.</p>
-
-<p>Another example of a seamlessness problem is when an activity inadvertently
-loses state or user data because it doesn't correctly implement the onPause()
-and other lifecycle methods. Or, if your application exposes data intended to be
-used by other applications, you should expose it via a ContentProvider, rather
-than (for example) doing so through a world-readable raw file or database.</p>
-
-<p>What those examples have in common is that they involve cooperating nicely
-with the system and other applications. The Android system is designed to treat
-applications as a sort of federation of loosely-coupled components, rather than
-chunks of black-box code. This allows you as the developer to view the entire
-system as just an even-larger federation of these components. This benefits you
-by allowing you to integrate cleanly and seamlessly with other applications, and
-so you should design your own code to return the favor.</p>
-
-<p>This document discusses common seamlessness problems and how to avoid them.</p>
-
-<h2 id="drop">Don't Drop Data</h2>
-
-<p>Always keep in mind that Android is a mobile platform. It may seem obvious to
-say it, but it's important to remember that another Activity (such as the
-"Incoming Phone Call" app) can pop up over your own Activity at any moment.
-This will fire the onSaveInstanceState() and onPause() methods, and will likely result in
-your application being killed.</p>
-
-<p>If the user was editing data in your application when the other Activity
-appeared, your application will likely lose that data when your application is
-killed. Unless, of course, you save the work in progress first. The "Android
-Way" is to do just that: Android applications that accept or edit input should
-override the onSaveInstanceState() method and save their state in some appropriate
-fashion. When the user revisits the application, she should be able to
-retrieve her data.</p>
-
-<p>A classic example of a good use of this behavior is a mail application. If the
-user was composing an email when another Activity started up, the application
-should save the in-process email as a draft.</p>
-
-<h2 id="expose">Don't Expose Raw Data</h2>
-
-<p>If you wouldn't walk down the street in your underwear, neither should your
-data. While it's possible to expose certain kinds of application to the world
-to read, this is usually not the best idea. Exposing raw data requires other
-applications to understand your data format; if you change that format, you'll
-break any other applications that aren't similarly updated.</p>
-
-<p>The "Android Way" is to create a ContentProvider to expose your data to other
-applications via a clean, well-thought-out, and maintainable API. Using a
-ContentProvider is much like inserting a Java language interface to split up and
-componentize two tightly-coupled pieces of code. This means you'll be able to
-modify the internal format of your data without changing the interface exposed
-by the ContentProvider, and this without affecting other applications.</p>
-
-<h2 id="interrupt">Don't Interrupt the User</h2>
-
-<p>If the user is running an application (such as the Phone application during a
-call) it's a pretty safe bet he did it on purpose. That's why you should avoid
-spawning activities except in direct response to user input from the current
-Activity.</p>
-
-<p>That is, don't call startActivity() from BroadcastReceivers or Services running in
-the background. Doing so will interrupt whatever application is currently
-running, and result in an annoyed user. Perhaps even worse, your Activity may
-become a "keystroke bandit" and receive some of the input the user was in the
-middle of providing to the previous Activity. Depending on what your
-application does, this could be bad news.</p>
-
-<p>Instead of spawning Activity UIs directly from the background, you should
-instead use the NotificationManager to set Notifications. These will appear in
-the status bar, and the user can then click on them at his leisure, to see
-what your application has to show him.</p>
-
-<p>(Note that all this doesn't apply to cases where your own Activity is already
-in the foreground: in that case, the user expects to see your next Activity in
-response to input.)</p>
-
-<h2 id="threads">Got a Lot to Do? Do it in a Thread</h2>
-
-<p>If your application needs to perform some expensive or long-running
-computation, you should probably move it to a thread. This will prevent the
-dreaded "Application Not Responding" dialog from being displayed to the user,
-with the ultimate result being the fiery demise of your application.</p>
-
-<p>By default, all code in an Activity as well as all its Views run in the same
-thread. This is the same thread that also handles UI events. For example, when
-the user presses a key, a key-down event is added to the Activity's main
-thread's queue. The event handler system needs to dequeue and handle that
-event quickly; if it doesn't, the system concludes after a few seconds that
-the application is hung and offers to kill it for the user.</p>
-
-<p>If you have long-running code, running it inline in your Activity will run it
-on the event handler thread, effectively blocking the event handler. This will
-delay input processing, and result in the ANR dialogs. To avoid this, move
-your computations to a thread. This <a
-href="responsiveness.html">Design for Responsiveness</a> document 
-discusses how to do that..</p>
-
-<h2 id="multiple-activities">Don't Overload a Single Activity Screen</h2>
-
-<p>Any application worth using will probably have several different screens.
-When designing the screens of your UI, be sure to make use of multiple Activity
-object instances.</p>
-
-<p>Depending on your development background, you may interpret an Activity as
-similar to something like a Java Applet, in that it is the entry point for
-your application. However, that's not quite accurate: where an Applet subclass
-is the single entry point for a Java Applet, an Activity should be thought of
-as one of potentially several entry points to your application. The only
-difference between your "main" Activity and any others you might have is that
-the "main" one just happens to be the only one that expressed an interest in
-the "android.intent.action.MAIN" action in your AndroidManifest..xml file.</p>
-
-<p>So, when designing your application, think of your application as a federation
-of Activity objects. This will make your code a lot more maintainable in the long
-run, and as a nice side effect also plays nicely with Android's application
-history and "backstack" model.</p>
-
-<h2 id="themes">Extend System Themes</h2>
-
-<p>When it comes to the look-and-feel of the user interface, it's important to
-blend in nicely. Users are jarred by applications which contrast with the user
-interface they've come to expect. When designing your UIs, you should try and
-avoid rolling your own as much as possible. Instead, use a Theme. You
-can override or extend those parts of the theme that you need to, but at least
-you're starting from the same UI base as all the other applications. For all
-the details, read <a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
-
-<h2 id="flexui">Design Your UI to Work with Multiple Screen Resolutions</h2>
-
-<p>Different Android-powered devices will support different screen resolutions. 
-Some will even be able to change resolutions on the fly, such as by switching 
-to landscape mode. It's important to make sure your layouts and drawables 
-are flexible enough to display properly on a variety of device screens.</p>
-
-<p>Fortunately, this is very easy to do. In brief, what you must do is 
-provide different versions of your artwork (if you use any) for the key 
-resolutions, and then design your layout to accommodate various dimensions. 
-(For example, avoid using hard-coded positions and instead use relative 
-layouts.) If you do that much, the system handles the rest, and your 
-application looks great on any device.</p>
-
-<h2 id="network">Assume the Network is Slow</h2>
-
-<p>Android devices will come with a variety of network-connectivity options. All
-will have some data-access provision, though some will be faster than others.
-The lowest common denominator, however, is GPRS, the non-3G data service for
-GSM networks. Even 3G-capable devices will spend lots of time on non-3G
-networks, so slow networks will remain a reality for quite a long time to
-come.</p>
-
-<p>That's why you should always code your applications to minimize network
-accesses and bandwidth. You can't assume the network is fast, so you should
-always plan for it to be slow. If your users happen to be on faster networks,
-then that's great &mdash; their experience will only improve. You want to avoid the
-inverse case though: applications that are usable some of the time, but
-frustratingly slow the rest based on where the user is at any given moment are
-likely to be unpopular.</p>
-
-<p>One potential gotcha here is that it's very easy to fall into this trap if
-you're using the emulator, since the emulator uses your desktop computer's
-network connection. That's almost guaranteed to be much faster than a cell
-network, so you'll want to change the settings on the emulator that simulate
-slower network speeds. You can do this in Eclipse, in the "Emulator Settings"
-tab of your launch configuration or via a <a
-href="{@docRoot}guide/developing/tools/emulator.html#netspeed">command-line 
-option</a> when starting the emulator.</p>
-
-<h2 id="keyboard">Don't Assume Touchscreen or Keyboard</h2>
-
-<p>
-Android will support a variety of handset form-factors.  That's a fancy way of
-saying that some Android devices will have full "QWERTY" keyboards, while
-others will have 40-key, 12-key, or even other key configurations.  Similarly,
-some devices will have touch-screens, but many won't.
-</p><p>
-When building your applications, keep that in mind.  Don't make assumptions
-about specific keyboard layouts -- unless, of course, you're really interested
-in restricting your application so that it can only be used on those devices.
-</p>
-
-<h2 id="battery">Do Conserve the Device Battery</h2>
-<p>
-A mobile device isn't very mobile if it's constantly plugged into the
-wall.  Mobile devices are battery-powered, and the longer we can make that
-battery last on a charge, the happier everyone is &mdash; especially the user.
-Two of the biggest consumers of battery power are the processor, and the
-radio;  that's why it's important to write your applications to do as little
-work as possible, and use the network as infrequently as possible.
-</p><p>
-Minimizing the amount of processor time your application uses really comes
-down to <a href="performance.html">writing efficient
-code</a>.  To minimize the power drain from using the radio, be sure to handle
-error conditions gracefully, and only fetch what you need.  For example, don't
-constantly retry a network operation if one failed.  If it failed once, it's
-likely because the user has no reception, so it's probably going to fail again
-if you try right away; all you'll do is waste battery power.
-</p><p>
-Users are pretty smart:  if your program is power-hungry, you can count on
-them noticing.  The only thing you can be sure of at that point is that your
-program won't stay installed very long.
-</p>
diff --git a/docs/html/guide/practices/index.html b/docs/html/guide/practices/index.html
deleted file mode 100644
index 4881acf..0000000
--- a/docs/html/guide/practices/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=../index.html">
-</head>
-<body>
-<a href="../index.html">click here</a> if you are not redirected.
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/practices/index.jd b/docs/html/guide/practices/index.jd
new file mode 100644
index 0000000..e218b50
--- /dev/null
+++ b/docs/html/guide/practices/index.jd
@@ -0,0 +1,52 @@
+page.title=Best Practices
+page.landing=true
+page.landing.intro=Design and build apps the right way. Learn how to create apps that look great and perform well on as many devices as possible, from phones to tablets and more.  
+page.landing.image=
+
+@jd:body
+
+<div class="landing-docs">
+
+  <div class="col-12">
+    <h3>Blog Articles</h3>
+    
+    <a href="android-developers.blogspot.com/2010/10/improving-app-quality.html">
+      <h4>Improving App Quality</h4>
+      <p>One way of improving your app’s visibility in the ecosystem is by deploying well-targeted
+mobile advertising campaigns and cross-app promotions. However, there’s another time-tested method
+of fueling the impression-install-ranking cycle: improve the product!</p>
+    </a>
+    
+    <a href="http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html">
+      <h4>Say Goodbye to the Menu Button</h4>
+      <p>As Ice Cream Sandwich rolls out to more devices, it?s important that you begin to migrate
+your designs to the action bar in order to promote a consistent Android user experience.</p>
+    </a>
+    
+    <a href="android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
+      <h4>New Tools For Managing Screen Sizes</h4>
+      <p>Android 3.2 includes new tools for supporting devices with a wide range of screen sizes.
+One important result is better support for a new size of screen; what is typically called a “7-inch”
+tablet. This release also offers several new APIs to simplify developers’ work in adjusting to
+different screen sizes.</p>
+    </a>
+    
+    <a href="android-developers.blogspot.com/2011/03/identifying-app-installations.html">
+      <h4>Identifying App Installations</h4>
+      <p>It is very common, and perfectly reasonable, for a developer to want to track individual
+installations of their apps. It sounds plausible just to call TelephonyManager.getDeviceId() and use
+that value to identify the installation. There are problems with this</p>
+    </a>
+    
+    <a
+href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">
+      <h4>Making Android Games that Play Nice</h4>
+      <p>Making a game on Android is easy. Making a <em>great</em> game for a mobile, multitasking,
+often multi-core, multi-purpose system like Android is trickier. Even the best developers frequently
+make mistakes in the way they interact with the Android system and with other applications</p>
+    </a>
+    
+  </div>
+
+
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/practices/design/jni.jd b/docs/html/guide/practices/jni.jd
similarity index 100%
copy from docs/html/guide/practices/design/jni.jd
copy to docs/html/guide/practices/jni.jd
diff --git a/docs/html/guide/practices/optimizing-for-3.0.jd b/docs/html/guide/practices/optimizing-for-3.0.jd
index d6c621e..65c5674 100644
--- a/docs/html/guide/practices/optimizing-for-3.0.jd
+++ b/docs/html/guide/practices/optimizing-for-3.0.jd
@@ -53,7 +53,7 @@
   <li><a href="tablets-and-handsets.html">Supporting Tablets
 and Handsets</a></li>
   <li><a
-href="{@docRoot}sdk/compatibility-library.html">Compatibility Library</a></li>
+href="{@docRoot}tools/extras/support-library.html">Compatibility Library</a></li>
   <li><a href="http://code.google.com/p/iosched/">Google I/O App source code</a></li>
 </ol>
 
@@ -108,7 +108,7 @@
 SDK starter package now</a>.)</p>
 
 <ol>
-  <li><a href="{@docRoot}sdk/adding-components.html#launching">Launch the Android SDK
+  <li><a href="{@docRoot}sdk/exploring.html#launching">Launch the Android SDK
 Manager</a> and install the following:
     <ul>
       <li>SDK Platform Android 3.0</li>
@@ -280,15 +280,15 @@
 to help you add features from Android 3.0 without requiring you to change your <a
 href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
 or build target, we're providing a static library called the <a
-href="{@docRoot}sdk/compatibility-library.html">Compatibility Library</a>
+href="{@docRoot}tools/extras/support-library.html">Compatibility Library</a>
 (downloadable from the Android SDK Manager).</p>
 <p>This library includes APIs for <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">fragments</a>, <a
-href="{@docRoot}guide/topics/fundamentals/loaders.html">loaders</a>, and some updated classes. By
+href="{@docRoot}guide/components/fragments.html">fragments</a>, <a
+href="{@docRoot}guide/components/loaders.html">loaders</a>, and some updated classes. By
 simply adding this library to your Android project, you can use these APIs in your application and
 remain compatible with Android 1.6. For information about how to get the library and start
 using it in your application, see the <a
-href="{@docRoot}sdk/compatibility-library.html">Compatibility Library</a> document.</p>
+href="{@docRoot}tools/extras/support-library.html">Compatibility Library</a> document.</p>
 </div>
 </div>
 
@@ -357,7 +357,7 @@
 read the article, the user can select an article and read it all within the same activity.</p>
 
 <p>For more information, read the <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> document.</p>
+href="{@docRoot}guide/components/fragments.html">Fragments</a> document.</p>
 
 
 <h3>Use new animation APIs for transitions</h3>
@@ -374,7 +374,7 @@
 position, orientation, transparency and more.</p>
 
 <p>For more information, read the <a
-href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> document.</p>
+href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a> document.</p>
 
 
 <h3>Enable hardware acceleration</h3>
@@ -412,15 +412,15 @@
 new graphics engine called Renderscript, and more.</p>
 
 <p>To learn more about the APIs mentioned above and more, see the <a
-href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
+href="{@docRoot}about/versions/android-3.0.html">Android 3.0 Platform</a> document.</p>
 
 
 <h3>Look at some samples</h3>
 
 <p>Many of the new features and APIs that are described above and in the <a
-href="{@docRoot}sdk/android-3.0.html#api">Android 3.0 Platform</a> document also have accompanying
+href="{@docRoot}about/versions/android-3.0.html#api">Android 3.0 Platform</a> document also have accompanying
 samples that allow you to preview the effects and can help you understand how to use them. To get
-the samples, download them from the SDK repository <a href="{@docRoot}sdk/adding-components.html"
+the samples, download them from the SDK repository <a href="{@docRoot}sdk/exploring.html"
 >using the Android SDK Manager</a>. After downloading the samples ("Samples for SDK API
 11"), you can find them in <code>&lt;sdk_root&gt;/samples/android-11/</code>. The following list
 provides links to the browsable source code for some of the samples:</p>
@@ -474,7 +474,7 @@
 application's layout and assets to fit the current device screen, whether the device screen is
 smaller or larger than the one for which you originally designed your application. As such, you
 should always test your application on real or <a
-href="{@docRoot}guide/developing/devices/index.html">virtual devices</a> with various screen sizes
+href="{@docRoot}tools/devices/index.html">virtual devices</a> with various screen sizes
 and densities.</p>
 
 <p>Although we recommend that you design your application to function properly on multiple
@@ -641,7 +641,7 @@
 onCreate()}) in immediate succession. You should design your activity to account for these changes
 in the lifecycle, so the activity can save and restore its state. You can learn about the
 necessary lifecycle callback methods and how to save and restore the activity state in the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activities</a>
+href="{@docRoot}guide/components/activities.html#Lifecycle">Activities</a>
 document. If your activity state is more complex and cannot retain it using the normal
 lifecycle callback methods, you can use alternative techniques described in <a
 href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime Changes</a>.</p>
diff --git a/docs/html/guide/practices/performance.jd b/docs/html/guide/practices/performance.jd
new file mode 100644
index 0000000..078999b
--- /dev/null
+++ b/docs/html/guide/practices/performance.jd
@@ -0,0 +1,410 @@
+page.title=Designing for Performance
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#intro">Introduction</a></li>
+  <li><a href="#optimize_judiciously">Optimize Judiciously</a></li>
+  <li><a href="#object_creation">Avoid Creating Unnecessary Objects</a></li>
+  <li><a href="#myths">Performance Myths</a></li>
+  <li><a href="#prefer_static">Prefer Static Over Virtual</a></li>
+  <li><a href="#internal_get_set">Avoid Internal Getters/Setters</a></li>
+  <li><a href="#use_final">Use Static Final For Constants</a></li>
+  <li><a href="#foreach">Use Enhanced For Loop Syntax</a></li>
+  <li><a href="#package_inner">Consider Package Instead of Private Access with Inner Classes</a></li>
+  <li><a href="#avoidfloat">Use Floating-Point Judiciously</a> </li>
+  <li><a href="#library">Know And Use The Libraries</a></li>
+  <li><a href="#native_methods">Use Native Methods Judiciously</a></li>
+  <li><a href="#closing_notes">Closing Notes</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>An Android application will run on a mobile device with limited computing
+power and storage, and constrained battery life. Because of
+this, it should be <em>efficient</em>. Battery life is one reason you might
+want to optimize your app even if it already seems to run "fast enough".
+Battery life is important to users, and Android's battery usage breakdown
+means users will know if your app is responsible draining their battery.</p>
+
+<p>Note that although this document primarily covers micro-optimizations,
+these will almost never make or break your software. Choosing the right
+algorithms and data structures should always be your priority, but is
+outside the scope of this document.</p>
+
+<a name="intro" id="intro"></a>
+<h2>Introduction</h2>
+
+<p>There are two basic rules for writing efficient code:</p>
+<ul>
+    <li>Don't do work that you don't need to do.</li>
+    <li>Don't allocate memory if you can avoid it.</li>
+</ul>
+
+<h2 id="optimize_judiciously">Optimize Judiciously</h2>
+
+<p>This document is about Android-specific micro-optimization, so it assumes
+that you've already used profiling to work out exactly what code needs to be
+optimized, and that you already have a way to measure the effect (good or bad)
+of any changes you make. You only have so much engineering time to invest, so
+it's important to know you're spending it wisely.
+
+<p>(See <a href="#closing_notes">Closing Notes</a> for more on profiling and
+writing effective benchmarks.)
+
+<p>This document also assumes that you made the best decisions about data
+structures and algorithms, and that you've also considered the future
+performance consequences of your API decisions. Using the right data
+structures and algorithms will make more difference than any of the advice
+here, and considering the performance consequences of your API decisions will
+make it easier to switch to better implementations later (this is more
+important for library code than for application code).
+
+<p>(If you need that kind of advice, see Josh Bloch's <em>Effective Java</em>,
+item 47.)</p>
+
+<p>One of the trickiest problems you'll face when micro-optimizing an Android
+app is that your app is pretty much guaranteed to be running on multiple
+hardware platforms. Different versions of the VM running on different
+processors running at different speeds. It's not even generally the case
+that you can simply say "device X is a factor F faster/slower than device Y",
+and scale your results from one device to others. In particular, measurement
+on the emulator tells you very little about performance on any device. There
+are also huge differences between devices with and without a JIT: the "best"
+code for a device with a JIT is not always the best code for a device
+without.</p>
+
+<p>If you want to know how your app performs on a given device, you need to
+test on that device.</p>
+
+<a name="object_creation"></a>
+<h2>Avoid Creating Unnecessary Objects</h2>
+
+<p>Object creation is never free. A generational GC with per-thread allocation
+pools for temporary objects can make allocation cheaper, but allocating memory
+is always more expensive than not allocating memory.</p>
+
+<p>If you allocate objects in a user interface loop, you will force a periodic
+garbage collection, creating little "hiccups" in the user experience. The
+concurrent collector introduced in Gingerbread helps, but unnecessary work
+should always be avoided.</p>
+
+<p>Thus, you should avoid creating object instances you don't need to.  Some
+examples of things that can help:</p>
+
+<ul>
+    <li>If you have a method returning a string, and you know that its result
+    will always be appended to a StringBuffer anyway, change your signature
+    and implementation so that the function does the append directly,
+    instead of creating a short-lived temporary object.</li>
+    <li>When extracting strings from a set of input data, try
+    to return a substring of the original data, instead of creating a copy.
+    You will create a new String object, but it will share the char[]
+    with the data. (The trade-off being that if you're only using a small
+    part of the original input, you'll be keeping it all around in memory
+    anyway if you go this route.)</li>
+</ul>
+
+<p>A somewhat more radical idea is to slice up multidimensional arrays into
+parallel single one-dimension arrays:</p>
+
+<ul>
+    <li>An array of ints is a much better than an array of Integers,
+    but this also generalizes to the fact that two parallel arrays of ints
+    are also a <strong>lot</strong> more efficient than an array of (int,int)
+    objects.  The same goes for any combination of primitive types.</li>
+    <li>If you need to implement a container that stores tuples of (Foo,Bar)
+    objects, try to remember that two parallel Foo[] and Bar[] arrays are
+    generally much better than a single array of custom (Foo,Bar) objects.
+    (The exception to this, of course, is when you're designing an API for
+    other code to access;  in those cases, it's usually better to trade
+    good API design for a small hit in speed. But in your own internal
+    code, you should try and be as efficient as possible.)</li>
+</ul>
+
+<p>Generally speaking, avoid creating short-term temporary objects if you
+can.  Fewer objects created mean less-frequent garbage collection, which has
+a direct impact on user experience.</p>
+
+<a name="avoid_enums" id="avoid_enums"></a>
+<a name="myths" id="myths"></a>
+<h2>Performance Myths</h2>
+
+<p>Previous versions of this document made various misleading claims. We
+address some of them here.</p>
+
+<p>On devices without a JIT, it is true that invoking methods via a
+variable with an exact type rather than an interface is slightly more
+efficient. (So, for example, it was cheaper to invoke methods on a
+<code>HashMap map</code> than a <code>Map map</code>, even though in both
+cases the map was a <code>HashMap</code>.) It was not the case that this
+was 2x slower; the actual difference was more like 6% slower. Furthermore,
+the JIT makes the two effectively indistinguishable.</p>
+
+<p>On devices without a JIT, caching field accesses is about 20% faster than
+repeatedly accesssing the field. With a JIT, field access costs about the same
+as local access, so this isn't a worthwhile optimization unless you feel it
+makes your code easier to read. (This is true of final, static, and static
+final fields too.)
+
+<a name="prefer_static" id="prefer_static"></a>
+<h2>Prefer Static Over Virtual</h2>
+
+<p>If you don't need to access an object's fields, make your method static.
+Invocations will be about 15%-20% faster.
+It's also good practice, because you can tell from the method
+signature that calling the method can't alter the object's state.</p>
+
+<a name="internal_get_set" id="internal_get_set"></a>
+<h2>Avoid Internal Getters/Setters</h2>
+
+<p>In native languages like C++ it's common practice to use getters (e.g.
+<code>i = getCount()</code>) instead of accessing the field directly (<code>i
+= mCount</code>). This is an excellent habit for C++, because the compiler can
+usually inline the access, and if you need to restrict or debug field access
+you can add the code at any time.</p>
+
+<p>On Android, this is a bad idea.  Virtual method calls are expensive,
+much more so than instance field lookups.  It's reasonable to follow
+common object-oriented programming practices and have getters and setters
+in the public interface, but within a class you should always access
+fields directly.</p>
+
+<p>Without a JIT, direct field access is about 3x faster than invoking a
+trivial getter. With the JIT (where direct field access is as cheap as
+accessing a local), direct field access is about 7x faster than invoking a
+trivial getter. This is true in Froyo, but will improve in the future when
+the JIT inlines getter methods.</p>
+
+<p>Note that if you're using ProGuard, you can have the best
+of both worlds because ProGuard can inline accessors for you.</p>
+
+<a name="use_final" id="use_final"></a>
+<h2>Use Static Final For Constants</h2>
+
+<p>Consider the following declaration at the top of a class:</p>
+
+<pre>static int intVal = 42;
+static String strVal = "Hello, world!";</pre>
+
+<p>The compiler generates a class initializer method, called
+<code>&lt;clinit&gt;</code>, that is executed when the class is first used.
+The method stores the value 42 into <code>intVal</code>, and extracts a
+reference from the classfile string constant table for <code>strVal</code>.
+When these values are referenced later on, they are accessed with field
+lookups.</p>
+
+<p>We can improve matters with the "final" keyword:</p>
+
+<pre>static final int intVal = 42;
+static final String strVal = "Hello, world!";</pre>
+
+<p>The class no longer requires a <code>&lt;clinit&gt;</code> method,
+because the constants go into static field initializers in the dex file.
+Code that refers to <code>intVal</code> will use
+the integer value 42 directly, and accesses to <code>strVal</code> will
+use a relatively inexpensive "string constant" instruction instead of a
+field lookup. (Note that this optimization only applies to primitive types and
+<code>String</code> constants, not arbitrary reference types. Still, it's good
+practice to declare constants <code>static final</code> whenever possible.)</p>
+
+<a name="foreach" id="foreach"></a>
+<h2>Use Enhanced For Loop Syntax</h2>
+
+<p>The enhanced for loop (also sometimes known as "for-each" loop) can be used
+for collections that implement the Iterable interface and for arrays.
+With collections, an iterator is allocated to make interface calls
+to hasNext() and next(). With an ArrayList, a hand-written counted loop is
+about 3x faster (with or without JIT), but for other collections the enhanced
+for loop syntax will be exactly equivalent to explicit iterator usage.</p>
+
+<p>There are several alternatives for iterating through an array:</p>
+
+<pre>    static class Foo {
+        int mSplat;
+    }
+    Foo[] mArray = ...
+
+    public void zero() {
+        int sum = 0;
+        for (int i = 0; i &lt; mArray.length; ++i) {
+            sum += mArray[i].mSplat;
+        }
+    }
+
+    public void one() {
+        int sum = 0;
+        Foo[] localArray = mArray;
+        int len = localArray.length;
+
+        for (int i = 0; i &lt; len; ++i) {
+            sum += localArray[i].mSplat;
+        }
+    }
+
+    public void two() {
+        int sum = 0;
+        for (Foo a : mArray) {
+            sum += a.mSplat;
+        }
+    }
+</pre>
+
+<p><strong>zero()</strong> is slowest, because the JIT can't yet optimize away
+the cost of getting the array length once for every iteration through the
+loop.</p>
+
+<p><strong>one()</strong> is faster. It pulls everything out into local
+variables, avoiding the lookups. Only the array length offers a performance
+benefit.</p>
+
+<p><strong>two()</strong> is fastest for devices without a JIT, and
+indistinguishable from <strong>one()</strong> for devices with a JIT.
+It uses the enhanced for loop syntax introduced in version 1.5 of the Java
+programming language.</p>
+
+<p>To summarize: use the enhanced for loop by default, but consider a
+hand-written counted loop for performance-critical ArrayList iteration.</p>
+
+<p>(See also <em>Effective Java</em> item 46.)</p>
+
+<a name="package_inner" id="package_inner"></a>
+<h2>Consider Package Instead of Private Access with Private Inner Classes</h2>
+
+<p>Consider the following class definition:</p>
+
+<pre>public class Foo {
+    private class Inner {
+        void stuff() {
+            Foo.this.doStuff(Foo.this.mValue);
+        }
+    }
+
+    private int mValue;
+
+    public void run() {
+        Inner in = new Inner();
+        mValue = 27;
+        in.stuff();
+    }
+
+    private void doStuff(int value) {
+        System.out.println("Value is " + value);
+    }
+}</pre>
+
+<p>The key things to note here are that we define a private inner class
+(<code>Foo$Inner</code>) that directly accesses a private method and a private
+instance field in the outer class. This is legal, and the code prints "Value is
+27" as expected.</p>
+
+<p>The problem is that the VM considers direct access to <code>Foo</code>'s
+private members from <code>Foo$Inner</code> to be illegal because
+<code>Foo</code> and <code>Foo$Inner</code> are different classes, even though
+the Java language allows an inner class to access an outer class' private
+members. To bridge the gap, the compiler generates a couple of synthetic
+methods:</p>
+
+<pre>/*package*/ static int Foo.access$100(Foo foo) {
+    return foo.mValue;
+}
+/*package*/ static void Foo.access$200(Foo foo, int value) {
+    foo.doStuff(value);
+}</pre>
+
+<p>The inner class code calls these static methods whenever it needs to
+access the <code>mValue</code> field or invoke the <code>doStuff</code> method
+in the outer class. What this means is that the code above really boils down to
+a case where you're accessing member fields through accessor methods.
+Earlier we talked about how accessors are slower than direct field
+accesses, so this is an example of a certain language idiom resulting in an
+"invisible" performance hit.</p>
+
+<p>If you're using code like this in a performance hotspot, you can avoid the
+overhead by declaring fields and methods accessed by inner classes to have
+package access, rather than private access. Unfortunately this means the fields
+can be accessed directly by other classes in the same package, so you shouldn't
+use this in public API.</p>
+
+<a name="avoidfloat" id="avoidfloat"></a>
+<h2>Use Floating-Point Judiciously</h2>
+
+<p>As a rule of thumb, floating-point is about 2x slower than integer on
+Android devices. This is true on a FPU-less, JIT-less G1 and a Nexus One with
+an FPU and the JIT. (Of course, absolute speed difference between those two
+devices is about 10x for arithmetic operations.)</p>
+
+<p>In speed terms, there's no difference between <code>float</code> and
+<code>double</code> on the more modern hardware. Space-wise, <code>double</code>
+is 2x larger. As with desktop machines, assuming space isn't an issue, you
+should prefer <code>double</code> to <code>float</code>.</p>
+
+<p>Also, even for integers, some chips have hardware multiply but lack
+hardware divide. In such cases, integer division and modulus operations are
+performed in software &mdash; something to think about if you're designing a
+hash table or doing lots of math.</p>
+
+<a name="library" id="library"></a>
+<h2>Know And Use The Libraries</h2>
+
+<p>In addition to all the usual reasons to prefer library code over rolling
+your own, bear in mind that the system is at liberty to replace calls
+to library methods with hand-coded assembler, which may be better than the
+best code the JIT can produce for the equivalent Java. The typical example
+here is <code>String.indexOf</code> and friends, which Dalvik replaces with
+an inlined intrinsic. Similarly, the <code>System.arraycopy</code> method
+is about 9x faster than a hand-coded loop on a Nexus One with the JIT.</p>
+
+<p>(See also <em>Effective Java</em> item 47.)</p>
+
+<a name="native_methods" id="native_methods"></a>
+<h2>Use Native Methods Judiciously</h2>
+
+<p>Native code isn't necessarily more efficient than Java. For one thing,
+there's a cost associated with the Java-native transition, and the JIT can't
+optimize across these boundaries. If you're allocating native resources (memory
+on the native heap, file descriptors, or whatever), it can be significantly
+more difficult to arrange timely collection of these resources. You also
+need to compile your code for each architecture you wish to run on (rather
+than rely on it having a JIT). You may even have to compile multiple versions
+for what you consider the same architecture: native code compiled for the ARM
+processor in the G1 can't take full advantage of the ARM in the Nexus One, and
+code compiled for the ARM in the Nexus One won't run on the ARM in the G1.</p>
+
+<p>Native code is primarily useful when you have an existing native codebase
+that you want to port to Android, not for "speeding up" parts of a Java app.</p>
+
+<p>If you do need to use native code, you should read our
+<a href="{@docRoot}guide/practices/jni.html">JNI Tips</a>.</p>
+
+<p>(See also <em>Effective Java</em> item 54.)</p>
+
+<a name="closing_notes" id="closing_notes"></a>
+<h2>Closing Notes</h2>
+
+<p>One last thing: always measure. Before you start optimizing, make sure you
+have a problem. Make sure you can accurately measure your existing performance,
+or you won't be able to measure the benefit of the alternatives you try.</p>
+
+<p>Every claim made in this document is backed up by a benchmark. The source
+to these benchmarks can be found in the <a href="http://code.google.com/p/dalvik/source/browse/#svn/trunk/benchmarks">code.google.com "dalvik" project</a>.</p>
+
+<p>The benchmarks are built with the
+<a href="http://code.google.com/p/caliper/">Caliper</a> microbenchmarking
+framework for Java. Microbenchmarks are hard to get right, so Caliper goes out
+of its way to do the hard work for you, and even detect some cases where you're
+not measuring what you think you're measuring (because, say, the VM has
+managed to optimize all your code away). We highly recommend you use Caliper
+to run your own microbenchmarks.</p>
+
+<p>You may also find
+<a href="{@docRoot}tools/debugging/debugging-tracing.html">Traceview</a> useful
+for profiling, but it's important to realize that it currently disables the JIT,
+which may cause it to misattribute time to code that the JIT may be able to win
+back. It's especially important after making changes suggested by Traceview
+data to ensure that the resulting code actually runs faster when run without
+Traceview.
diff --git a/docs/html/guide/practices/design/responsiveness.jd b/docs/html/guide/practices/responsiveness.jd
similarity index 100%
copy from docs/html/guide/practices/design/responsiveness.jd
copy to docs/html/guide/practices/responsiveness.jd
diff --git a/docs/html/guide/practices/screens-distribution.jd b/docs/html/guide/practices/screens-distribution.jd
index a7c4a8e..90ac752 100644
--- a/docs/html/guide/practices/screens-distribution.jd
+++ b/docs/html/guide/practices/screens-distribution.jd
@@ -213,4 +213,4 @@
 <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
 
 <p>If you need more information about how to publish multiple APKs on Google Play, read <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
diff --git a/docs/html/guide/practices/screens-support-1.5.jd b/docs/html/guide/practices/screens-support-1.5.jd
index 4c6fb99..15f0695 100644
--- a/docs/html/guide/practices/screens-support-1.5.jd
+++ b/docs/html/guide/practices/screens-support-1.5.jd
@@ -59,7 +59,7 @@
 <p class="note"><strong>Note:</strong> Before you begin, you should first decide whether it's even
 necessary to support Android 1.5. To see the relative number of devices that are still running
 Android 1.5, see the <a
-href="http://developer.android.com/resources/dashboard/platform-versions.html">Platform Versions
+href="http://developer.android.com/about/dashboards/index.html">Platform Versions
 Dashboard</a>.</p>
 
 
diff --git a/docs/html/guide/practices/screens_support.jd b/docs/html/guide/practices/screens_support.jd
index a870b22..ca29589 100644
--- a/docs/html/guide/practices/screens_support.jd
+++ b/docs/html/guide/practices/screens_support.jd
@@ -57,7 +57,7 @@
 Providing Alternative Resources</a></li>
     <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Icon Design
 Guidelines</a></li>
-    <li><a href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a></li>
+    <li><a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a></li>
   </ol>
 
 </div>
@@ -1253,7 +1253,7 @@
 to emulate some of the most common screen configurations.</p>
 
 <p>For more information about creating and using AVDs to test your application, see <a
-href="{@docRoot}guide/developing/devices/managing-avds.html">Managing AVDs with AVD
+href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD
 Manager</a>.</p>
 
 
@@ -1366,5 +1366,5 @@
 between 0.1 and 3 that represents the desired scaling factor.</p>
 
 <p>For more information about creating AVDs from the command line, see <a
-href="{@docRoot}guide/developing/devices/managing-avds-cmdline.html">Managing AVDs from the
+href="{@docRoot}tools/devices/managing-avds-cmdline.html">Managing AVDs from the
 Command Line</a></p>
diff --git a/docs/html/guide/practices/seamlessness.jd b/docs/html/guide/practices/seamlessness.jd
new file mode 100644
index 0000000..ec6b7fd
--- /dev/null
+++ b/docs/html/guide/practices/seamlessness.jd
@@ -0,0 +1,249 @@
+page.title=Designing for Seamlessness
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#drop">Don't Drop Data</a></li>
+  <li><a href="#expose">Don't Expose Raw Data</a></li>
+  <li><a href="#interrupt">Don't Interrupt the User</a></li>
+  <li><a href="#threads">Got a Lot to Do? Do it in a Thread</a></li>
+  <li><a href="#multiple-activities">Don't Overload a Single Activity Screen</a></li>
+  <li><a href="#themes">Extend System Themes</a></li>
+  <li><a href="#flexui">Design Your UI to Work with Multiple Screen Resolutions</a></li>
+  <li><a href="#network">Assume the Network is Slow</a></li>
+  <li><a href="#keyboard">Don't Assume Touchscreen or Keyboard</a></li>
+  <li><a href="#battery">Do Conserve the Device Battery</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Even if your application is fast and responsive, certain design decisions can
+still cause problems for users &mdash; because of unplanned interactions with
+other applications or dialogs, inadvertent loss of data, unintended blocking,
+and so on. To avoid these problems, it helps to understand the context in which
+your applications run and the system interactions that can affect your
+application. In short, you should strive to develop an application that
+interacts seamlessly with the system and with other applications. </p>
+
+<p>A common seamlessness problem is when an application's background process
+&mdash; for example, a service or broadcast receiver &mdash; pops up a dialog in
+response to some event. This may seem like harmless behavior, especially when
+you are building and testing your application in isolation, on the emulator.
+However, when your application is run on an actual device, your application may
+not have user focus at the time your background process displays the dialog. So
+it could end up that your application would display it's dialog behind the
+active application, or it could take focus from the current application and
+display the dialog in front of whatever the user was doing (such as dialing a
+phone call, for example). That behavior would not work for your application or
+for the user. </p>
+
+<p>To avoid these problems, your application should use the proper system 
+facility for notifying the user &mdash; the 
+{@link android.app.Notification Notification} classes. Using
+notifications, your application can signal the user that an event has 
+taken place, by displaying an icon in the status bar rather than taking
+focus and interrupting the user.</p>
+
+<p>Another example of a seamlessness problem is when an activity inadvertently
+loses state or user data because it doesn't correctly implement the onPause()
+and other lifecycle methods. Or, if your application exposes data intended to be
+used by other applications, you should expose it via a ContentProvider, rather
+than (for example) doing so through a world-readable raw file or database.</p>
+
+<p>What those examples have in common is that they involve cooperating nicely
+with the system and other applications. The Android system is designed to treat
+applications as a sort of federation of loosely-coupled components, rather than
+chunks of black-box code. This allows you as the developer to view the entire
+system as just an even-larger federation of these components. This benefits you
+by allowing you to integrate cleanly and seamlessly with other applications, and
+so you should design your own code to return the favor.</p>
+
+<p>This document discusses common seamlessness problems and how to avoid them.</p>
+
+<h2 id="drop">Don't Drop Data</h2>
+
+<p>Always keep in mind that Android is a mobile platform. It may seem obvious to
+say it, but it's important to remember that another Activity (such as the
+"Incoming Phone Call" app) can pop up over your own Activity at any moment.
+This will fire the onSaveInstanceState() and onPause() methods, and will likely result in
+your application being killed.</p>
+
+<p>If the user was editing data in your application when the other Activity
+appeared, your application will likely lose that data when your application is
+killed. Unless, of course, you save the work in progress first. The "Android
+Way" is to do just that: Android applications that accept or edit input should
+override the onSaveInstanceState() method and save their state in some appropriate
+fashion. When the user revisits the application, she should be able to
+retrieve her data.</p>
+
+<p>A classic example of a good use of this behavior is a mail application. If the
+user was composing an email when another Activity started up, the application
+should save the in-process email as a draft.</p>
+
+<h2 id="expose">Don't Expose Raw Data</h2>
+
+<p>If you wouldn't walk down the street in your underwear, neither should your
+data. While it's possible to expose certain kinds of application to the world
+to read, this is usually not the best idea. Exposing raw data requires other
+applications to understand your data format; if you change that format, you'll
+break any other applications that aren't similarly updated.</p>
+
+<p>The "Android Way" is to create a ContentProvider to expose your data to other
+applications via a clean, well-thought-out, and maintainable API. Using a
+ContentProvider is much like inserting a Java language interface to split up and
+componentize two tightly-coupled pieces of code. This means you'll be able to
+modify the internal format of your data without changing the interface exposed
+by the ContentProvider, and this without affecting other applications.</p>
+
+<h2 id="interrupt">Don't Interrupt the User</h2>
+
+<p>If the user is running an application (such as the Phone application during a
+call) it's a pretty safe bet he did it on purpose. That's why you should avoid
+spawning activities except in direct response to user input from the current
+Activity.</p>
+
+<p>That is, don't call startActivity() from BroadcastReceivers or Services running in
+the background. Doing so will interrupt whatever application is currently
+running, and result in an annoyed user. Perhaps even worse, your Activity may
+become a "keystroke bandit" and receive some of the input the user was in the
+middle of providing to the previous Activity. Depending on what your
+application does, this could be bad news.</p>
+
+<p>Instead of spawning Activity UIs directly from the background, you should
+instead use the NotificationManager to set Notifications. These will appear in
+the status bar, and the user can then click on them at his leisure, to see
+what your application has to show him.</p>
+
+<p>(Note that all this doesn't apply to cases where your own Activity is already
+in the foreground: in that case, the user expects to see your next Activity in
+response to input.)</p>
+
+<h2 id="threads">Got a Lot to Do? Do it in a Thread</h2>
+
+<p>If your application needs to perform some expensive or long-running
+computation, you should probably move it to a thread. This will prevent the
+dreaded "Application Not Responding" dialog from being displayed to the user,
+with the ultimate result being the fiery demise of your application.</p>
+
+<p>By default, all code in an Activity as well as all its Views run in the same
+thread. This is the same thread that also handles UI events. For example, when
+the user presses a key, a key-down event is added to the Activity's main
+thread's queue. The event handler system needs to dequeue and handle that
+event quickly; if it doesn't, the system concludes after a few seconds that
+the application is hung and offers to kill it for the user.</p>
+
+<p>If you have long-running code, running it inline in your Activity will run it
+on the event handler thread, effectively blocking the event handler. This will
+delay input processing, and result in the ANR dialogs. To avoid this, move
+your computations to a thread. This <a
+href="responsiveness.html">Design for Responsiveness</a> document 
+discusses how to do that..</p>
+
+<h2 id="multiple-activities">Don't Overload a Single Activity Screen</h2>
+
+<p>Any application worth using will probably have several different screens.
+When designing the screens of your UI, be sure to make use of multiple Activity
+object instances.</p>
+
+<p>Depending on your development background, you may interpret an Activity as
+similar to something like a Java Applet, in that it is the entry point for
+your application. However, that's not quite accurate: where an Applet subclass
+is the single entry point for a Java Applet, an Activity should be thought of
+as one of potentially several entry points to your application. The only
+difference between your "main" Activity and any others you might have is that
+the "main" one just happens to be the only one that expressed an interest in
+the "android.intent.action.MAIN" action in your AndroidManifest..xml file.</p>
+
+<p>So, when designing your application, think of your application as a federation
+of Activity objects. This will make your code a lot more maintainable in the long
+run, and as a nice side effect also plays nicely with Android's application
+history and "backstack" model.</p>
+
+<h2 id="themes">Extend System Themes</h2>
+
+<p>When it comes to the look-and-feel of the user interface, it's important to
+blend in nicely. Users are jarred by applications which contrast with the user
+interface they've come to expect. When designing your UIs, you should try and
+avoid rolling your own as much as possible. Instead, use a Theme. You
+can override or extend those parts of the theme that you need to, but at least
+you're starting from the same UI base as all the other applications. For all
+the details, read <a href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
+
+<h2 id="flexui">Design Your UI to Work with Multiple Screen Resolutions</h2>
+
+<p>Different Android-powered devices will support different screen resolutions. 
+Some will even be able to change resolutions on the fly, such as by switching 
+to landscape mode. It's important to make sure your layouts and drawables 
+are flexible enough to display properly on a variety of device screens.</p>
+
+<p>Fortunately, this is very easy to do. In brief, what you must do is 
+provide different versions of your artwork (if you use any) for the key 
+resolutions, and then design your layout to accommodate various dimensions. 
+(For example, avoid using hard-coded positions and instead use relative 
+layouts.) If you do that much, the system handles the rest, and your 
+application looks great on any device.</p>
+
+<h2 id="network">Assume the Network is Slow</h2>
+
+<p>Android devices will come with a variety of network-connectivity options. All
+will have some data-access provision, though some will be faster than others.
+The lowest common denominator, however, is GPRS, the non-3G data service for
+GSM networks. Even 3G-capable devices will spend lots of time on non-3G
+networks, so slow networks will remain a reality for quite a long time to
+come.</p>
+
+<p>That's why you should always code your applications to minimize network
+accesses and bandwidth. You can't assume the network is fast, so you should
+always plan for it to be slow. If your users happen to be on faster networks,
+then that's great &mdash; their experience will only improve. You want to avoid the
+inverse case though: applications that are usable some of the time, but
+frustratingly slow the rest based on where the user is at any given moment are
+likely to be unpopular.</p>
+
+<p>One potential gotcha here is that it's very easy to fall into this trap if
+you're using the emulator, since the emulator uses your desktop computer's
+network connection. That's almost guaranteed to be much faster than a cell
+network, so you'll want to change the settings on the emulator that simulate
+slower network speeds. You can do this in Eclipse, in the "Emulator Settings"
+tab of your launch configuration or via a <a
+href="{@docRoot}tools/help/emulator.html#netspeed">command-line 
+option</a> when starting the emulator.</p>
+
+<h2 id="keyboard">Don't Assume Touchscreen or Keyboard</h2>
+
+<p>
+Android will support a variety of handset form-factors.  That's a fancy way of
+saying that some Android devices will have full "QWERTY" keyboards, while
+others will have 40-key, 12-key, or even other key configurations.  Similarly,
+some devices will have touch-screens, but many won't.
+</p><p>
+When building your applications, keep that in mind.  Don't make assumptions
+about specific keyboard layouts -- unless, of course, you're really interested
+in restricting your application so that it can only be used on those devices.
+</p>
+
+<h2 id="battery">Do Conserve the Device Battery</h2>
+<p>
+A mobile device isn't very mobile if it's constantly plugged into the
+wall.  Mobile devices are battery-powered, and the longer we can make that
+battery last on a charge, the happier everyone is &mdash; especially the user.
+Two of the biggest consumers of battery power are the processor, and the
+radio;  that's why it's important to write your applications to do as little
+work as possible, and use the network as infrequently as possible.
+</p><p>
+Minimizing the amount of processor time your application uses really comes
+down to <a href="performance.html">writing efficient
+code</a>.  To minimize the power drain from using the radio, be sure to handle
+error conditions gracefully, and only fetch what you need.  For example, don't
+constantly retry a network operation if one failed.  If it failed once, it's
+likely because the user has no reception, so it's probably going to fail again
+if you try right away; all you'll do is waste battery power.
+</p><p>
+Users are pretty smart:  if your program is power-hungry, you can count on
+them noticing.  The only thing you can be sure of at that point is that your
+program won't stay installed very long.
+</p>
diff --git a/docs/html/guide/practices/security.jd b/docs/html/guide/practices/security.jd
index eeaac44..48ccdeb 100644
--- a/docs/html/guide/practices/security.jd
+++ b/docs/html/guide/practices/security.jd
@@ -20,8 +20,7 @@
 <ol>
 <li><a href="http://source.android.com/tech/security/index.html">Android
 Security Overview</a></li>
-<li><a href="{@docRoot}guide/topics/security/security.html">Android Security
-And Permissions</a></li>
+<li><a href="{@docRoot}guide/topics/security/permissions.html">Permissions</a></li>
 </ol>
 </div></div>
 <p>Android was designed so that most developers will be able to build
@@ -136,7 +135,7 @@
 <p>To provide additional protection for sensitive data, some applications
 choose to encrypt local files using a key that is not accessible to the
 application. (For example, a key can be placed in a <code><a
-href={@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> and
+href="{@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> and
 protected with a user password that is not stored on the device).  While this
 does not protect data from a root compromise that can monitor the user
 inputting the password,  it can provide protection for a lost device without <a
diff --git a/docs/html/guide/practices/tablets-and-handsets.jd b/docs/html/guide/practices/tablets-and-handsets.jd
index 8e07a08..8d6d3dd 100644
--- a/docs/html/guide/practices/tablets-and-handsets.jd
+++ b/docs/html/guide/practices/tablets-and-handsets.jd
@@ -26,7 +26,7 @@
 
 <h2>See also</h2>
 <ol>
-  <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+  <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
   <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a></li>
   <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
 </ol>
@@ -85,7 +85,7 @@
 running.</p>
 
 <p>If you haven't used fragments yet, start by reading the <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</p>
 </li>
 
 
@@ -141,16 +141,16 @@
   <h3>Remaining backward-compatible</h3>
 <p>If you want to use fragments in your application <em>and</em> remain compatible with
 versions of Android older than 3.0, you can do so by using the Android <a
-href="{@docRoot}sdk/compatibility-library.html">Support Library</a> (downloadable from the
+href="{@docRoot}tools/extras/support-library.html">Support Library</a> (downloadable from the
 SDK Manager).</p>
 <p>The support library includes APIs for <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">fragments</a>, <a
-href="{@docRoot}guide/topics/fundamentals/loaders.html">loaders</a>, and other APIs added in newer
+href="{@docRoot}guide/components/fragments.html">fragments</a>, <a
+href="{@docRoot}guide/components/loaders.html">loaders</a>, and other APIs added in newer
 versions of Android. By simply adding this library to your Android project, you can use
 backward-compatible versions of these APIs in your application and remain compatible with Android
 1.6 (your <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
 android:minSdkVersion}</a> value can be as low as {@code "4"}). For information about how to get the
-library and start using it, see the <a href="{@docRoot}sdk/compatibility-library.html">Support
+library and start using it, see the <a href="{@docRoot}tools/extras/support-library.html">Support
 Library</a> document.</p>
 
 <p>The support library <em>does not</em> provide APIs for the action bar, but you can use
diff --git a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd
index 8e4528e..cb2bc37 100644
--- a/docs/html/guide/practices/ui_guidelines/activity_task_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/activity_task_design.jd
@@ -19,7 +19,7 @@
 for <a href="{@docRoot}design/patterns/app-structure.html">App Structure</a> and
 <a href="{@docRoot}design/patterns/navigation.html">Navigation</a>, or the developer guide
 about <a
-href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>.</p>
+href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>.</p>
 
  <input style="margin-top:1em;padding:5px" type="button"
         value="That's nice, but I still want to read this document"
@@ -88,7 +88,7 @@
 <h2>See also</h2>
 
 <ol>
-  <li><a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a></li>
+  <li><a href="{@docRoot}guide/components/fundamentals.html">Application Fundamentals</a></li>
 </ol>
 
 </div>
@@ -121,9 +121,9 @@
 <p>
   Be sure to look at the <a href="#design_tips">Design Tips</a> section
   for guidelines, tips, and things to avoid. This document is a
-  complement to the <a href="{@docRoot}guide/topics/fundamentals.html">Application
+  complement to the <a href="{@docRoot}guide/components/fundamentals.html">Application
 Fundamentals</a> documentation (particularly the <a
-href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
+href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>
 document),
   which covers the underlying mechanics for programmers.
 </p>
@@ -189,7 +189,7 @@
 <p>
   An activity handles a particular type of content (data) and accepts a
   set of related user actions. Each activity has a 
-  <a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">lifecycle</a> that is
+  <a href="{@docRoot}guide/components/activities.html#Lifecycle">lifecycle</a> that is
 independent of the other
   activities in its application or task &mdash; each activity is
   launched (started) independently, and the user or system can start,
@@ -268,7 +268,7 @@
   An activity is the most prominent of four <em>components</em> of an
   application. The other components are service, content provider and
   broadcast receiver. For more details on activities, see the
-  <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a> document.
+  <a href="{@docRoot}guide/components/activities.html">Activities</a> document.
 </p>
 
 
@@ -750,7 +750,7 @@
 
     <p>
       For more about intents, see <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>.
+href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>.
     </p>
 
 
@@ -947,7 +947,7 @@
         Home screen), or from a shortcut icon on the Home screen, or
         from the task switcher.  (The mechanism for this is for the
         activity to have an 
-        <a href={@docRoot}guide/topics/intents/intents-filters.html>intent filter</a> with action
+        <a href={@docRoot}guide/components/intents-filters.html>intent filter</a> with action
 MAIN and
         category LAUNCHER.)
       </li>
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
index 4b6768f..28817fd 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher.jd
@@ -241,8 +241,8 @@
 
 <h3 id="icons_in_market">Application Icons on Google Play</h3>
 
-<p>If you are <a href="{@docRoot}guide/publishing/publishing.html">publishing your application on
-Google Play</a>, you will also need to provide a 512 x 512 pixel, high-resolution application icon
+<p>If you are publishing your app on
+Google Play, you will also need to provide a 512 x 512 pixel, high-resolution application icon
 in the <a href="http://play.google.com/apps/publish">developer console</a> at upload time. This icon
 will be used in various locations on Google Play and does not replace your launcher icon.</p>
 
diff --git a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
index 85a3cc8..f6c2247 100644
--- a/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
+++ b/docs/html/guide/practices/ui_guidelines/icon_design_launcher_archive.jd
@@ -58,7 +58,7 @@
 
 <h2 id="market">Application Icons on Google Play</h2>
 
-<p>If you are <a href="{@docRoot}guide/publishing/publishing.html">publishing
+<p>If you are <a href="{@docRoot}tools/publishing/publishing.html">publishing
 your application on Google Play</a>, you will also need to provide a 512x512
 pixel, high-resolution application icon in the <a
 href="http://play.google.com/apps/publish">developer console</a> at upload-time.
diff --git a/docs/html/guide/practices/ui_guidelines/widget_design.jd b/docs/html/guide/practices/ui_guidelines/widget_design.jd
index d789407..616f9ae 100644
--- a/docs/html/guide/practices/ui_guidelines/widget_design.jd
+++ b/docs/html/guide/practices/ui_guidelines/widget_design.jd
@@ -229,7 +229,7 @@
 practice to define this shape using nine patches; one for each screen density (see <a
 href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a> for details).
 Nine-patches can be created with the <a
-href="{@docRoot}guide/developing/tools/draw9patch.html">draw9patch</a> tool, or simply with a
+href="{@docRoot}tools/help/draw9patch.html">draw9patch</a> tool, or simply with a
 graphics editing program such as Adobe&reg; Photoshop. This will allow the widget background shape
 to take up the entire available space. The nine-patch should be edge-to-edge with no transparent
 pixels providing extra margins, save for perhaps a few border pixels for <strong>subtle</strong>
diff --git a/docs/html/guide/publishing/app-signing.jd b/docs/html/guide/publishing/app-signing.jd
deleted file mode 100644
index 5bd9be55..0000000
--- a/docs/html/guide/publishing/app-signing.jd
+++ /dev/null
@@ -1,618 +0,0 @@
-page.title=Signing Your Applications
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>All Android apps <em>must</em> be signed</li>
-<li>You can sign with a self-signed key</li>
-<li>How you sign your apps is critical &mdash; read this document carefully</li>
-<li>Determine your signing strategy early in the development process</li>
-</ul>
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#signing">Signing Process</a></li>
-<li><a href="#strategies">Signing Strategies</a></li>
-<li><a href="#setup">Basic Setup for Signing</a></li>
-<li><a href="#debugmode">Signing in Debug Mode</a></li>
-<li><a href="#releasemode">Signing Release Mode</a>
-    <ol>
-    <li><a href="#cert">Obtain a suitable private key</a></li>
-    <li><a href="#releasecompile">Compile the application in release mode</a></li>
-    <li><a href="#signapp">Sign your application with your private key</a></li>
-    <li><a href="#align">Align the final APK package</a></li>
-    <li><a href="#ExportWizard">Compile and sign with Eclipse ADT</a></li>
-    </ol>
-</li>
-<li><a href="#secure-key">Securing Your Private Key</a></li>
-
-</ol>
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}guide/publishing/versioning.html">Versioning Your Applications</a></li>
-<li><a href="{@docRoot}guide/publishing/preparing.html">Preparing to Publish</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>The Android system requires that all installed applications be digitally signed with a
-certificate whose private key is held by the application's developer. The Android system uses the
-certificate as a means of identifying the author of an application and establishing trust
-relationships between applications. The certificate is not used to control which applications the
-user can install. The certificate does not need to be signed by a certificate authority: it is
-perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
-
-<p>The important points to understand about signing Android applications are:</p>
-
-<ul>
-  <li>All applications <em>must</em> be signed. The system will not install an application
-on an emulator or a device if it is not signed.</li>
-  <li>To test and debug your application, the build tools sign your application with a special debug
-    key that is created by the Android SDK build tools.</li>
-  <li>When you are ready to release your application for end-users, you must sign it with a suitable
-    private key. You cannot publish an application that is signed with the debug key generated
-    by the SDK tools.</li>
-  <li>You can use self-signed certificates to sign your applications. No certificate authority is
-    needed.</li>
-  <li>The system tests a signer certificate's expiration date only at install time. If an
-application's signer certificate expires after the application is installed, the application
-will continue to function normally.</li>
-  <li>You can use standard tools &mdash; Keytool and Jarsigner &mdash; to generate keys and
-sign your application {@code .apk} files.</li>
-  <li>After you sign your application for release, we recommend that you use the
-    <code>zipalign</code> tool to optimize the final APK package.</li>
-</ul>
-
-<p>The Android system will not install or run an application that is not signed appropriately. This
-applies wherever the Android system is run, whether on an actual device or on the emulator.
-For this reason, you must <a href="#setup">set up signing</a> for your application before you can
-run it or debug it on an emulator or device.</p>
-
-<h2 id="signing">Signing Process</h3>
-
-<p>The Android build process signs your application differently depending on which build mode you
-use to build your application. There are two build modes: <em>debug mode</em> and <em>release
-mode</em>. You use debug mode when you are developing and testing your application. You use
-release mode when you want to build a release version of your application that you can
-distribute directly to users or publish on an application marketplace such as Google Play.</p>
-
-<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
-(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
-they know the debug key's alias and password. Each time you compile your application in debug mode,
-the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
-sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
-build tools, the tools don't need to prompt you for the debug key's alias and password each time
-you compile.</p>
-
-<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
-you don't have a private key, you can use the Keytool utility to create one for you. When you
-compile your application in release mode, the build tools use your private key along with the
-Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
-private key you use are your own, you will have to provide the password for the keystore and key
-alias.</p>
-
-<p>The debug signing process happens automatically when you run or debug your application using
-Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
-script with the <code>debug</code> option. You can automate the release signing process by using the
-Eclipse Export Wizard or by modifying the Ant build script and building with the
-<code>release</code> option.</p>
-
-<h2 id="strategies">Signing Strategies</h2>
-
-<p>Some aspects of application signing may affect how you approach the development
-of your application, especially if you are planning to release multiple
-applications. </p>
-
-<p>In general, the recommended strategy for all developers is to sign
-all of your applications with the same certificate, throughout the expected
-lifespan of your applications. There are several reasons why you should do so: </p>
-
-<ul>
-<li>Application upgrade &ndash; As you release updates to your application, you
-will want to continue to sign the updates with the same certificate or set of
-certificates, if you want users to upgrade seamlessly to the new version. When
-the system is installing an update to an application, it compares the
-certificate(s) in the new version with those in the existing version. If the
-certificates match exactly, including both the certificate data and order, then
-the system allows the update. If you sign the new version without using matching
-certificates, you will also need to assign a different package name to the
-application &mdash; in this case, the user installs the new version as a
-completely new application. </li>
-
-<li>Application modularity &ndash; The Android system allows applications that
-are signed by the same certificate to run in the same process, if the
-applications so requests, so that the system treats them as a single application.
-In this way you can deploy your application in modules, and users can update
-each of the modules independently if needed.</li>
-
-<li>Code/data sharing through permissions &ndash; The Android system provides
-signature-based permissions enforcement, so that an application can expose
-functionality to another application that is signed with a specified
-certificate. By signing multiple applications with the same certificate and
-using signature-based permissions checks, your applications can share code and
-data in a secure manner. </li>
-
-</ul>
-
-<p>Another important consideration in determining your signing strategy is
-how to set the validity period of the key that you will use to sign your
-applications.</p>
-
-<ul>
-<li>If you plan to support upgrades for a single application, you should ensure
-that your key has a validity period that exceeds the expected lifespan of
-that application. A validity period of 25 years or more is recommended.
-When your key's validity period expires, users will no longer be
-able to seamlessly upgrade to new versions of your application.</li>
-
-<li>If you will sign multiple distinct applications with the same key,
-you should ensure that your key's validity period exceeds the expected
-lifespan of <em>all versions of all of the applications</em>, including
-dependent applications that may be added to the suite in the future. </li>
-
-<li>If you plan to publish your application(s) on Google Play, the
-key you use to sign the application(s) must have a validity period
-ending after 22 October 2033. Google Play enforces this requirement
-to ensure that users can seamlessly upgrade applications when
-new versions are available. </li>
-</ul>
-
-<p>As you design your application, keep these points in mind and make sure to
-use a <a href="#cert">suitable certificate</a> to sign your applications. </p>
-
-<h2 id="setup">Basic Setup for Signing</h2>
-
-<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
-the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
-the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
-variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
-Jarsigner to your <code>PATH</code> variable.</p>
-
-<p>If you are developing on a version of Linux that originally came with GNU Compiler for
-Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
-version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
-<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
-to the Keytool in the JDK.</p>
-
-<h2 id="debugmode">Signing in Debug Mode</h2>
-
-<p>The Android build tools provide a debug signing mode that makes it easier for you
-to develop and debug your application, while still meeting the Android system
-requirement for signing your APK.
-When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
-a debug keystore and key. This debug key is then used to automatically sign the APK, so
-you do not need to sign the package with your own key.</p>
-
-<p>The SDK tools create the debug keystore/key with predetermined names/passwords:</p>
-<ul>
-<li>Keystore name: "debug.keystore"</li>
-<li>Keystore password: "android"</li>
-<li>Key alias: "androiddebugkey"</li>
-<li>Key password: "android"</li>
-<li>CN: "CN=Android Debug,O=Android,C=US"</li>
-</ul>
-
-<p>If necessary, you can change the location/name of the debug keystore/key or
-supply a custom debug keystore/key to use. However, any custom debug
-keystore/key must use the same keystore/key names and passwords as the default
-debug key (as described above). (To do so in Eclipse/ADT, go to
-<strong>Windows</strong> &gt; <strong>Preferences</strong> &gt;
-<strong>Android</strong> &gt; <strong>Build</strong>.) </p>
-
-<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
-to the public when signed with the debug certificate.</p>
-
-<h3>Eclipse Users</h3>
-
-<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
-<a href="#setup">Basic Setup for Signing</a>),
-signing in debug mode is enabled by default. When you run or debug your
-application, ADT signs the {@code .apk} file with the debug certificate, runs {@code zipalign} on
-the package, then installs it on
-the selected emulator or connected device. No specific action on your part is needed,
-provided ADT has access to Keytool.</p>
-
-<h3>Ant Users</h3>
-
-<p>If you are using Ant to build your {@code .apk} file, debug signing mode
-is enabled by using the <code>debug</code> option with the <code>ant</code> command
-(assuming that you are using a <code>build.xml</code> file generated by the
-<code>android</code> tool). When you run <code>ant debug</code> to
-compile your app, the build script generates a keystore/key and signs the APK for you.
-The script then also aligns the APK with the <code>zipalign</code> tool.
-No other action on your part is needed. Read
-<a href="{@docRoot}guide/developing/building/building-cmdline.html#DebugMode">Building and Running Apps
-on the Command Line</a> for more information.</p>
-
-
-<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
-
-<p>The self-signed certificate used to sign your application in debug mode (the default on
-Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
-
-<p>When the certificate expires, you will get a build error. On Ant builds, the error
-looks like this:</p>
-
-<pre>debug:
-[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
-[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
-
-<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
-
-<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
-The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
-in <code>C:\Documents and Settings\&lt;user>\.android\</code> on Windows XP, and in
-<code>C:\Users\&lt;user>\.android\</code> on Windows Vista and Windows 7.</p>
-
-
-<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
-
-<p>Note that, if your development machine is using a non-Gregorian locale, the build
-tools may erroneously generate an already-expired debug certificate, so that you get an
-error when trying to compile your application. For workaround information, see the
-troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
-I&nbsp;can't&nbsp;compile my app because the build tools generated an expired debug
-certificate</a>. </p>
-
-
-<h2 id="releasemode">Signing in Release Mode</h2>
-
-<p>When your application is ready for release to other users, you must:</p>
-<ol>
-  <li><a href="#cert">Obtain a suitable private key</a></li>
-  <li><a href="#releasecompile">Compile the application in release mode</a></li>
-  <li><a href="#signapp">Sign your application with your private key</a></li>
-  <li><a href="#align">Align the final APK package</a></li>
-</ol>
-
-<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
-to perform the compile, sign, and align procedures. The Export Wizard even allows you to
-generate a new keystore and private key in the process. So if you use Eclipse, you can
-skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
-
-
-
-<h3 id="cert">1. Obtain a suitable private key</h3>
-
-<p>In preparation for signing your application, you must first ensure that
-you have a suitable private key with which to sign. A suitable private
-key is one that:</p>
-
-<ul>
-<li>Is in your possession</li>
-<li>Represents the personal, corporate, or organizational entity to be identified
-with the application</li>
-<li>Has a validity period that exceeds the expected lifespan of the application
-or application suite. A validity period of more than 25 years is recommended.
-<p>If you plan to publish your application(s) on Google Play, note that a
-validity period ending after 22 October 2033 is a requirement. You can not upload an
-application if it is signed with a key whose validity expires before that date.
-</p></li>
-<li>Is not the debug key generated by the Android SDK tools. </li>
-</ul>
-
-<p>The key may be self-signed. If you do not have a suitable key, you must
-generate one using Keytool. Make sure that you have Keytool available, as described
-in <a href="#setup">Basic Setup</a>.</p>
-
-<p>To generate a self-signed key with Keytool, use the <code>keytool</code>
-command and pass any of the options listed below (and any others, as
-needed). </p>
-
-<p class="warning"><strong>Warning:</strong> Keep your private key secure.
-Before you run Keytool, make sure to read
-<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
-your key secure and why doing so is critically important to you and to users. In
-particular, when you are generating your key, you should select strong passwords
-for both the keystore and key.</p>
-
-<table>
-<tr>
-<th>Keytool Option</th>
-<th>Description</th>
-</tr>
-<tr>
-<td><code>-genkey</code></td><td>Generate a key pair (public and private
-keys)</td>
-</tr>
-<tr>
-<td><code>-v</code></td><td>Enable verbose output.</td>
-</tr>
-<tr>
-<td><code>-alias &lt;alias_name&gt;</code></td><td>An alias for the key. Only
-the first 8 characters of the alias are used.</td>
-</tr>
-<tr>
-<td><code>-keyalg &lt;alg&gt;</code></td><td>The encryption algorithm to use
-when generating the key. Both DSA and RSA are supported.</td>
-</tr>
-<tr>
-<td><code>-keysize &lt;size&gt;</code></td><td>The size of each generated key
-(bits). If not supplied, Keytool uses a default key size of 1024 bits. In
-general, we recommend using a key size of 2048 bits or higher. </td>
-</tr>
-<tr>
-<td><code>-dname &lt;name&gt;</code></td><td><p>A Distinguished Name that describes
-who created the key. The value is used as the issuer and subject fields in the
-self-signed certificate. </p><p>Note that you do not need to specify this option
-in the command line. If not supplied, Jarsigner prompts you to enter each
-of the Distinguished Name fields (CN, OU, and so on).</p></td>
-</tr>
-<tr>
-<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the
-key.</p> <p>As a security precaution, do not include this option in your command
-line. If not supplied, Keytool prompts you to enter the password. In this way,
-your password is not stored in your shell history.</p></td>
-</tr>
-<tr>
-<td><code>-validity &lt;valdays&gt;</code></td><td><p>The validity period for the
-key, in days. </p><p><strong>Note:</strong> A value of 10000 or greater is recommended.</p></td>
-</tr>
-<tr>
-<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>A name
-for the keystore containing the private key.</td>
-</tr>
-<tr>
-<td><code>-storepass &lt;password&gt;</code></td><td><p>A password for the
-keystore.</p><p>As a security precaution, do not include this option in your
-command line. If not supplied, Keytool prompts you to enter the password. In
-this way, your password is not stored in your shell history.</p></td>
-</tr>
-</table>
-
-<p>Here's an example of a Keytool command that generates a private key:</p>
-
-<pre>$ keytool -genkey -v -keystore my-release-key.keystore
--alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
-
-<p>Running the example command above, Keytool prompts you to provide
-passwords for the keystore and key, and to provide the Distinguished
-Name fields for your key. It then generates the keystore as a file called
-<code>my-release-key.keystore</code>. The keystore and key are
-protected by the passwords you entered. The keystore contains
-a single key, valid for 10000 days. The alias is a name that you &mdash;
-will use later, to refer to this keystore when signing your application. </p>
-
-<p>For more information about Keytool, see the documentation at
-<a
-href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html">
-http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html</a></p>
-
-
-
-<h3 id="releasecompile">2. Compile the application in release mode</h3>
-
-<p>In order to release your application to users, you must compile it in release mode.
-In release mode, the compiled application is not signed by default and you will need
-to sign it with your private key.</p>
-
-<p class="caution"><strong>Caution:</strong>
-You can not release your application unsigned, or signed with the debug key.</p>
-
-<h4>With Eclipse</h4>
-
-<p>To export an <em>unsigned</em> APK from Eclipse, right-click the project in the Package
-Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
-Package</strong>. Then specify the file location for the unsigned APK.
-(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, select
-the <strong>Manifest</strong> tab, and click <strong>Export an unsigned APK</strong>.)</p>
-
-<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
-<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
-
-<h4>With Ant</h4>
-
-<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
-with the <code>ant</code> command. For example, if you are running Ant from the
-directory containing your {@code build.xml} file, the command would look like this:</p>
-
-<pre>$ ant release</pre>
-
-<p>By default, the build script compiles the application APK without signing it. The output file
-in your project {@code bin/} will be <code><em>&lt;your_project_name></em>-unsigned.apk</code>.
-Because the application APK is still unsigned, you must manually sign it with your private
-key and then align it using {@code zipalign}.</p>
-
-<p>However, the Ant build script can also perform the signing
-and aligning for you, if you have provided the path to your keystore and the name of
-your key alias in the project's {@code ant.properties} file. With this information provided,
-the build script will prompt you for your keystore and alias password when you perform
-<code>ant release</code>, it will sign the package and then align it. The final output
-file in {@code bin/} will instead be
-<code><em>&lt;your_project_name></em>-release.apk</code>. With these steps
-automated for you, you're able to skip the manual procedures below (steps 3 and 4).
-To learn how to specify your keystore and alias in the {@code ant.properties} file,
-see <a href="{@docRoot}guide/developing/building/building-cmdline.html#ReleaseMode">
-Building and Running Apps on the Command Line</a>.</p>
-
-
-
-<h3 id="signapp">3. Sign your application with your private key</h3>
-
-<p>When you have an application package that is ready to be signed, you can do sign it
-using the Jarsigner tool. Make sure that you have Jarsigner available on your
-machine, as described in <a href="#setup">Basic Setup</a>. Also, make sure that
-the keystore containing your private key is  available.</p>
-
-<p>To sign your application, you run Jarsigner, referencing both the
-application's APK and the keystore containing the private key with which to
-sign the APK. The table below shows the options you could use. </p>
-
-<table>
-<tr>
-<th>Jarsigner Option</th>
-<th>Description</th>
-</tr>
-<tr>
-<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>The name of
-the keystore containing your private key.</td>
-</tr>
-<tr>
-<td><code>-verbose</code></td><td>Enable verbose output.</td>
-</tr>
-<tr>
-<td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
-Use the value {@code MD5withRSA}.</td>
-</tr>
-<tr>
-<td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
-of an APK. Use the value {@code SHA1}.</td>
-</tr>
-<tr>
-<td><code>-storepass &lt;password&gt;</code></td><td><p>The password for the
-keystore. </p><p>As a security precaution, do not include this option
-in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
-way, your password is not stored in your shell history.</p></td>
-</tr>
-<tr>
-<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the private
-key. </p><p>As a security precaution, do not include this option
-in your command line unless you are working at a secure computer.
-If not supplied, Jarsigner prompts you to enter the password. In this
-way, your password is not stored in your shell history.</p></td>
-</tr>
-</table>
-
-<p>Here's how you would use Jarsigner to sign an application package called
-<code>my_application.apk</code>, using the example keystore created above.
-</p>
-
-<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
-my_application.apk alias_name</pre>
-
-<p>Running the example command above, Jarsigner prompts you to provide
-passwords for the keystore and key. It then modifies the APK
-in-place, meaning the APK is now signed. Note that you can sign an
-APK multiple times with different keys.</p>
-
-<p class="caution"><strong>Caution:</strong> As of JDK 7, the default signing algorithim has
-changed, requiring you to specify the signature and digest algorithims ({@code -sigalg} and {@code
--digestalg}) when you sign an APK.</p>
-
-<p>To verify that your APK is signed, you can use a command like this:</p>
-
-<pre>$ jarsigner -verify my_signed.apk</pre>
-
-<p>If the APK is signed properly, Jarsigner prints "jar verified".
-If you want more details, you can try one of these commands:</p>
-
-<pre>$ jarsigner -verify -verbose my_application.apk</pre>
-
-<p>or</p>
-
-<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
-
-<p>The command above, with the <code>-certs</code> option added, will show you the
-"CN=" line that describes who created the key.</p>
-
-<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the APK was
-signed with the debug key generated by the Android SDK. If you intend to release
-your application, you must sign it with your private key instead of the debug
-key.</p>
-
-<p>For more information about Jarsigner, see the documentation at
-<a href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html">
-http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html</a></p>
-
-
-<h3 id="align">4. Align the final APK package</h3>
-
-<p>Once you have signed the APK with your private key, run <code>zipalign</code> on the file.
-This tool ensures that all uncompressed data starts with a particular byte alignment,
-relative to the start of the file. Ensuring alignment at 4-byte boundaries provides
-a performance optimization when installed on a device. When aligned, the Android
-system is able to read files with {@code mmap()}, even if
-they contain binary data with alignment restrictions, rather than copying all
-of the data from the package. The benefit is a reduction in the amount of
-RAM consumed by the running application.</p>
-
-<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
-<code>tools/</code> directory. To align your signed APK, execute:</p>
-
-<pre>$ zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
-
-<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
-byte-alignment (don't use anything other than 4). The first file argument is
-your signed {@code .apk} file (the input) and the second file is the destination {@code .apk} file
-(the output). If you're overriding an existing APK, add the {@code -f} flag.</p>
-
-<p class="caution"><strong>Caution:</strong> Your input APK must be signed with your
-private key <strong>before</strong> you optimize the package with {@code zipalign}.
-If you sign it after using {@code zipalign}, it will undo the alignment.</p>
-
-<p>For more information, read about the
-<a href="{@docRoot}guide/developing/tools/zipalign.html">zipalign</a> tool.
-
-
-<h3 id="ExportWizard">Compile and sign with Eclipse ADT</h3>
-
-<p>If you are using Eclipse with the ADT plugin, you can use the Export Wizard to
-export a <em>signed</em> APK (and even create a new keystore,
-if necessary). The Export Wizard performs all the interaction with
-the Keytool and Jarsigner for you, which allows you to sign the package using a GUI
-instead of performing the manual procedures to compile, sign,
-and align, as discussed above. Once the wizard has compiled and signed your package,
-it will also perfom package alignment with {@code zipalign}.
-Because the Export Wizard uses both Keytool and Jarsigner, you should
-ensure that they are accessible on your computer, as described above
-in the <a href="#setup">Basic Setup for Signing</a>.</p>
-
-<p>To create a signed and aligned APK in Eclipse:</p>
-
-<ol>
-  <li>Select the project in the Package
-Explorer and select <strong>File > Export</strong>.</li>
-  <li>Open the Android folder, select Export Android Application,
-  and click <strong>Next</strong>.
-  <p>The Export Android Application wizard now starts, which will
-  guide you through the process of signing your application,
-  including steps for selecting the private key with which to sign the APK
-  (or creating a new keystore and private key).</p>
-  <li>Complete the Export Wizard and your application will be compiled,
-  signed, aligned, and ready for distribution.</li>
-</ol>
-
-
-
-<h2 id="secure-key">Securing Your Private Key</h2>
-
-<p>Maintaining the security of your private key is of critical importance, both
-to you and to the user. If you allow someone to use your key, or if you leave
-your keystore and passwords in an unsecured location such that a third-party
-could find and use them, your authoring identity and the trust of the user
-are compromised. </p>
-
-<p>If a third party should manage to take your key without your knowledge or
-permission, that person could sign and distribute applications that maliciously
-replace your authentic applications or corrupt them. Such a person could also
-sign and distribute applications under your identity that attack other
-applications or the system itself, or corrupt or steal user data. </p>
-
-<p>Your reputation as a developer entity depends on your securing your private
-key properly, at all times, until the key is expired. Here are some tips for
-keeping your key secure: </p>
-
-<ul>
-<li>Select strong passwords for the keystore and key.</li>
-<li>When you generate your key with Keytool, <em>do not</em> supply the
-<code>-storepass</code> and <code>-keypass</code> options at the command line.
-If you do so, your passwords will be available in your shell history,
-which any user on your computer could access.</li>
-<li>Similarly, when signing your applications with Jarsigner,
-<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
-options at the command line. </li>
-<li>Do not give or lend anyone your private key, and do not let unauthorized
-persons know your keystore and key passwords.</li>
-</ul>
-
-<p>In general, if you follow common-sense precautions when generating, using,
-and storing your key, it will remain secure. </p>
\ No newline at end of file
diff --git a/docs/html/guide/publishing/licensing.html b/docs/html/guide/publishing/licensing.html
deleted file mode 100644
index 8e97f32..0000000
--- a/docs/html/guide/publishing/licensing.html
+++ /dev/null
@@ -1,11 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh"
-content="0;url=http://developer.android.com/guide/market/licensing/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/guide/market/licensing/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/publishing/preparing.jd b/docs/html/guide/publishing/preparing.jd
deleted file mode 100644
index 8e75728..0000000
--- a/docs/html/guide/publishing/preparing.jd
+++ /dev/null
@@ -1,358 +0,0 @@
-page.title=Preparing for Release
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-    <h2>Quickview</h2>
-    <ul>
-      <li>Learn which resources you'll need to release your app.</li>
-      <li>Find out how to configure and build your app for release.</li>
-      <li>Learn best practices for releasing your app.</li>
-    </ul>
-    <h2>In this document</h2>
-    <ol>
-      <li><a href="#publishing-intro">Introduction</a></li>
-      <li><a href="#publishing-gather">Gathering Materials and Resources</a></li>
-      <li><a href="#publishing-configure">Configuring Your Application</a></li>
-      <li><a href="#publishing-build">Building Your Application</a></li>
-      <li><a href="#publishing-resources">Preparing External Servers and Resources</a></li>
-      <li><a href="#publishing-test">Testing Your Application for Release</a></li>
-    </ol>
-    <h2>See also</h2>
-    <ol>
-      <li><a href="{@docRoot}guide/publishing/publishing_overview.html">Publishing Overview</a></li>
-      <li><a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a></li>
-      <li><a href="{@docRoot}guide/publishing/publishing.html">Publishing on Google Play</a></li>
-    </ol>
-  </div>
-</div>
-
-<p>Before you distribute your Android application to users you need to prepare it for release. The
-preparation process is a required <a href="{@docRoot}guide/developing/index.html">development
-task</a> for all Android applications and is the first step in the publishing process (see figure
-1).</p>
-
-<p>When you prepare your application for release, you configure, build, and test a release
-version of your application. The configuration tasks are straightforward, involving basic code
-cleanup and code modification tasks that help optimize your application. The build process is
-similar to the debug build process and can be done using JDK and Android SDK tools. The testing
-tasks serve as a final check, ensuring that your application performs as expected under real-world
-conditions. When you are finished preparing your application for release you have a signed
-<code>.apk</code> file, which you can distribute directly to users or distribute through an
-application marketplace such as Google Play.</p>
-
-<p>This document summarizes the main tasks you need to perform to prepare your application for
-release. The tasks that are described in this document apply to all Android applications regardless
-how they are released or distributed to users. If you are releasing your application through Google
-Play, you should also read <a href="{@docRoot}guide/publishing/publishing.html">Publishing on
-Google Play</a> to be sure your release-ready application satisfies all Google Play
-requirements.</p>
-
-<p class="note"><strong>Note:</strong> As a best practice, your application should meet all of your
-release criteria for functionality, performance, and stability before you perform the tasks outlined
-in this document.</p>
-
-<img src="{@docRoot}images/publishing/publishing_overview_prep.png"
-     alt="Shows how the preparation process fits into the development process"
-     height="190"
-     id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Preparing for release is a required <a
-href="{@docRoot}guide/developing/index.html">development
-task</a> and is the first step in the publishing process.
-</p>
-
-<h2 id="publishing-intro">Introduction</h2>
-
-<p>To release your application to users you need to create a release-ready package that users can
-install and run on their Android-powered devices. The release-ready package contains the same
-components as the debug <code>.apk</code> file &mdash; compiled source code, resources, manifest
-file, and so on &mdash; and it is built using the same build tools. However, unlike the debug
-<code>.apk</code> file, the release-ready <code>.apk</code> file is signed with your own certificate
-and it is optimized with the zipalign tool.</p>
-
-<div class="figure" style="width:331px">
-  <img src="{@docRoot}images/publishing/publishing_preparing.png"
-       alt="Shows the five tasks you perform to prepare your app for release"
-       height="450" />
-  <p class="img-caption">
-    <strong>Figure 2.</strong> You perform five main tasks to prepare your application for
-    release.
-  </p>
-</div>
-
-<p>The signing and optimization tasks are usually seamless if you are building your application with
-Eclipse and the ADT plugin or with the Ant build script (included with the Android SDK). For
-example, you can use the Eclipse Export Wizard to compile, sign, and optimize your application all
-at once. You can also configure the Ant build script to do the same when you build from the command
-line.</p>
-
-<p>To prepare your application for release you typically perform five main tasks (see figure 2).
-Each main task may include one or more smaller tasks depending on how you are releasing your
-application. For example, if you are releasing your application through Google Play you may want
-to add special filtering rules to your manifest while you are configuring your application for
-release. Similarly, to meet Google Play publishing guidelines you may have to prepare screenshots
-and create promotional text while you are gathering materials for release.</p>
-
-<p>You usually perform the tasks listed in figure 2 after you have throroughly debugged and tested
-your application. The Android SDK contains several tools to help you test and debug your Android
-applications. For more information, see the <a
-href="{@docRoot}guide/developing/debugging/index.html">Debugging</a> and <a
-href="{@docRoot}guide/developing/testing/index.html">Testing</a> sections in the Dev Guide.</p>
-
-<h2 id="publishing-gather">Gathering Materials and Resources</h2>
-
-<p>To begin preparing your application for release you need to gather several supporting items. At a
-minimum this includes cryptographic keys for signing your application and an application icon. You
-might also want to include an end-user license agreement.</p>
-
-<h4 id="publishing-keys">Cryptographic keys</h4>
-
-<p>The Android system requires that each installed application be digitally signed with a
-certificate that is owned by the application's developer (that is, a certificate for which the
-developer holds the private key). The Android system uses the certificate as a means of identifying
-the author of an application and establishing trust relationships between applications. The
-certificate that you use for signing does not need to be signed by a certificate authority; the
-Android system allows you to sign your applications with a self-signed certificate. To learn about
-certificate requirements, see <a href="{@docRoot}guide/publishing/app-signing.html#cert">Obtain a
-suitable private key</a>.</p>
-
-<p class="caution"><strong>Important:</strong> Your application must be signed with a cryptographic
-key whose validity period ends after 22 October 2033.</p>
-
-<p>You may also have to obtain other release keys if your application accesses a service or uses a
-third-party library that requires you to use a key that is based on your private key. For example,
-if your application uses the <a
-href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html">MapView</a>
-class, which is part of the <a
-href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
-library</a>, you will need to register your application with the Google Maps service and obtain
-a Maps API key. For information about getting a Maps API key, see <a
-href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API
-key</a>.</p>
-
-<h4>Application Icon</h4>
-
-<p>Be sure you have an application icon and that it meets the recommended <a
-href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html">icon guidelines</a>. Your
-application's icon helps users identify your application on a device's Home
-screen and in the Launcher window. It also appears in Manage Applications, My Downloads, and
-elsewhere. In addition, publishing services such as Google Play display your icon to users.</p>
-
-<p class="note"><strong>Note:</strong> If you are releasing your application on Google Play, you
-need to create a high resolution
-  version of your icon. See <a
-href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">Graphic
-Assets for your Application</a> for more information.</p>
-
-<h4>End-user License Agreement</h4>
-
-<p>Consider preparing an End User License Agreement (EULA) for your application. A EULA can help
-protect your person, organization, and intellectual property, and we recommend that you provide one
-with your application.</p>
-
-<h4>Miscellaneous Materials</h4>
-
-<p>You might also have to prepare promotional and marketing materials to publicize your application.
-For example, if you are releasing your application on Google Play you will need to prepare some
-promotional text and you will need to create screenshots of your application. For more
-information, see
-<a href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">
-Graphic Assets for your Application</a></p>
-
-<h2 id="publishing-configure">Configuring Your Application for Release</h2>
-
-<p>After you gather all of your supporting materials you can start configuring your application
-for release. This section provides a summary of the configuration changes we recommend that you make
-to your source code, resource files, and application manifest prior to releasing your application.
-Although most of the configuration changes listed in this section are optional, they are
-considered good coding practices and we encourage you to implement them. In some cases,
-you may have already made these configuration changes as part of your development process.</p>
-
-<h4>Choose a good package name</h4>
-
-<p>Make sure you choose a package name that is suitable over the life of your application. You
-cannot change the package name after you distribute your application to users. You can set the
-package name in application's manifest file. For more information, see the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a> attribute
-documentation.</p>
-
-<h4>Turn off logging and debugging</h4>
-
-<p>Make sure you deactivate logging and disable the debugging option before you build your
-application for release. You can deactivate logging by removing calls to
-{@link android.util.Log} methods in your source files. You can disable debugging by removing the
-<code>android:debuggable</code> attribute from the <code>&lt;application&gt;</code> tag in your
-manifest file, or by setting the <code>android:debuggable</code> attribute to
-<code>false</code> in your manifest file. Also, remove any log files or static test files that
-were created in your project.</p>
-
-<p>Also, you should remove all {@link android.os.Debug} tracing calls that you
-added to your code, such as {@link android.os.Debug#startMethodTracing()} and
-{@link android.os.Debug#stopMethodTracing()} method calls.</p>
-
-<h4>Clean up your project directories</h4>
-
-<p>Clean up your project and make sure it conforms to the directory structure described in <a
-href="{@docRoot}guide/developing/projects/index.html#ApplicationProjects">Android Projects</a>.
-Leaving stray or orphaned files in your project can prevent your application from compiling and
-cause your application to behave unpredictably. At a minimum you should do the following cleanup
-tasks:</p>
-
-<ul>
-  <li>Review the contents of your <code>jni/</code>, <code>lib/</code>, and <code>src/</code>
-  directories.  The <code>jni/</code> directory should contain only source files associated with the
-  <a href="{@docRoot}sdk/ndk/index.html">Android NDK</a>, such as
-  <code>.c</code>, <code>.cpp</code>, <code>.h</code>, and <code>.mk</code> files. The
-  <code>lib/</code> directory should contain only third-party library files or private library
-  files, including prebuilt shared and static libraries (for example, <code>.so</code> files). The
-  <code>src/</code> directory should contain only the source files for your application
-  (<code>.java</code> and <code>.aidl</code> files). The <code>src/</code> directory should not
-  contain any <code>.jar</code> files.</li>
-  <li>Check your project for private or proprietary data files that your application does not use
-  and remove them. For example, look in your project's <code>res/</code> directory for old
-  drawable files, layout files, and values files that you are no longer using and delete them.</li>
-  <li>Check your <code>lib/</code> directory for test libraries and remove them if they are no
-  longer being used by your application.</li>
-  <li>Review the contents of your <code>assets/</code> directory and your <code>res/raw/</code>
-    directory for raw asset files and static files that you need to update or remove prior to
-    release.</li>
-</ul>
-
-<h4>Review and update your manifest settings</h4>
-
-<p>Verify that the following manifest items are set correctly:</p>
-
-<ul>
-  <li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
-  &lt;uses-permission&gt;</a> element
-    <p>You should specify only those permissions that are relevant and required for your application.</p>
-  </li>
-  <li><code>android:icon</code> and <code>android:label</code> attributes
-    <p>You must specify values for these attributes, which are located in the
-    <a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a>
-    element.</p>
-  </li>
-  <li><code>android:versionCode</code> and <code>android:versionName</code> attributes.
-    <p>We recommend that you specify values for these attributes, which are located in the
-      <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
-      element. For more information see
-      <a href="{@docRoot}guide/publishing/versioning.html">Versioning your Application</a>.</p>
-  </li>
-</ul>
-
-<p>There are several additional manifest elements that you can set if you are releasing your
-application on Google Play. For example, the <code>android:minSdkVersion</code> and
-<code>android:targetSdkVersion</code> attributes, which are located in the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"> &lt;uses-sdk&gt;</a> element. For more
-information about these and other Google Play settings, see <a
-href="{@docRoot}/guide//appendix/market-filters.html">Filters on Google Play</a>.</p>
-
-<h4>Address compatibility issues</h4>
-
-<p>Android provides several tools and techniques to make your application compatible with a wide
-range of devices. To make your application available to the largest number of users, consider
-doing the following:</p>
-
-<ul>
-  <li><strong>Add support for multiple screen configurations</strong>
-    <p>Make sure you meet the
-    <a href="{@docRoot}guide/practices/screens_support.html#screen-independence">
-    best practices for supporting multiple screens</a>. By supporting multiple screen configurations
-    you can create an application that functions properly and looks good on any of the screen sizes
-    supported by Android.</p>
-  </li>
-  <li><strong>Optimize your application for Android 3.0 devices.</strong>
-    <p>If your application is designed for devices older than Android 3.0, make it compatible
-    with Android 3.0 devices by following the guidelines and best practices described in
-    <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0
-    </a>.</p>
-  </li>
-  <li><strong>Consider using the Support Library</strong>
-    <p>If your application is designed for devices running Android 3.x, make your application
-    compatible with older versions of Android by adding the
-    <a href="{@docRoot}sdk/compatibility-library.html">Support Library</a> to your
-    application project. The Support Library provides static support libraries that you can add to
-    your Android application, which enables you to use APIs that are either not available on
-    older platform versions or use utility APIs that are not part of the framework APIs.</p>
-  </li>
-</ul>
-
-<h4>Update URLs for servers and services</h4>
-
-<p>If your application accesses remote servers or services, make sure you are using the production
-URL or path for the server or service and not a test URL or path.</p>
-
-<h4>Implement Licensing (if you are releasing on Google Play)</h4>
-
-<p>If you are releasing a paid application through Google Play, consider adding support for
-Google Play Licensing. Licensing lets you control access to your application based on whether the
-current user has purchased it. Using Google Play Licensing is optional even if you are
-releasing your app through Google Play.</p>
-
-<p>For more information about Google Play Licensing Service and how to use it in your
-application, see <a href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a>.</p>
-
-<h2 id="publishing-build">Building Your Application for Release</h2>
-
-<p>After you finish configuring your application you can build it into a release-ready
-<code>.apk</code> fle that is signed and optimized. The JDK includes the tools for signing the
-<code>.apk</code> file (Keytool and Jarsigner); the Android SDK includes the tools for compiling and
-optimizing the <code>.apk</code> file. If you are using Eclipse with the ADT plugin or you are using
-the Ant build script from the command line, you can automate the entire build process.</p>
-
-<h3>Building with Eclipse</h3>
-
-<p>You can use the Eclipse Export Wizard to build a release-ready <code>.apk</code> file that is
-signed with your private key and optimized. To learn how to run the Export Wizard, see
-<a href="{@docRoot}guide/publishing/app-signing.html#ExportWizard">Compile and sign with Eclipse
-ADT</a>. The Export Wizard compiles your application for release, signs your application with your
-private key, and optimizes your application with the zipalign tool. The Export Wizard should run
-successfully if you have run or debugged your application from Eclipse and you have no errors in
-your application (see <a href="{@docRoot}guide/developing/building/building-eclipse.html">Building
-and Running from Eclipse with ADT</a> for more information.</p>
-
-<p>The Export Wizard assumes that you have a <a href="#billing-keys">certificate and private key</a>
-suitable for signing your application. If you do not have a suitable certificate and private key,
-the Export Wizard will help you generate one (see
-<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a> for more
-information about the signing process and signing guidelines.</p>
-
-<h3>Building with Ant</h3>
-
-<p>You can use the Ant build script (included in the Android SDK) to build a release-ready
-<code>.apk</code> file that is signed with your private key and optimized. To learn how to do this,
-see <a href="{@docRoot}guide/developing/building/building-cmdline.html#ReleaseMode">Building in
-Release Mode</a>. This build method assumes you have a <a href="#billing-keys">certificate and
-private key</a> suitable for signing your application. If you do not have a suitable certificate and
-private key, the Export Wizard will help you generate one (see
-<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Applications</a> for more
-information about the signing process and signing guidelines.</p>
-
-<h2 id="publishing-resources">Preparing External Servers and Resources</h2>
-
-<p>If your application relies on a remote server, make sure the server is secure and that it is
-configured for production use. This is particularly important if you are implementing <a
-href="{@docRoot}guide/market/billing/index.html">in-app billing</a> in your application and you are
-performing the signature verification step on a remote server.</p>
-
-<p>Also, if your application fetches content from a remote server or a real-time service (such as a
-content feed), be sure the content you are providing is up to date and production-ready.</p>
-
-<h2 id="publishing-test">Testing Your Application for Release</h2>
-
-<p>Testing the release version of your application helps ensure that your application runs properly
-under realistic device and network conditions. Ideally, you should test your application on at least
-one handset-sized device and one tablet-sized device to verify that your user interface elements are
-sized correctly and that your application's performance and battery efficiency are acceptable.</p>
-
-<p>As a starting point for testing, see
-<a href="{@docRoot}guide/topics/testing/what_to_test.html">What to Test</a>. This article provides
-a summary of common Android situations that you should consider when you are testing. When you are
-done testing and you are satisfied that the release version of your application
-behaves correctly, you can release your application to users. For more information, see
-<a href="{@docRoot}guide/publishing/publishing_overview.html#publishing-release">Releasing Your
-Application to Users</a>. If you are publishing your application on Google Play, see
-<a href="{@docRoot}guide/publishing/publishing.html">Publishing on Google Play</a>.</p>
-
-
diff --git a/docs/html/guide/publishing/publishing.jd b/docs/html/guide/publishing/publishing.jd
deleted file mode 100644
index b9513ab..0000000
--- a/docs/html/guide/publishing/publishing.jd
+++ /dev/null
@@ -1,703 +0,0 @@
-page.title=Publishing on Google Play
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Learn how to publish and update apps on Google Play.</li>
-<li>Find out how to create links to apps that are published on Google Play.</li>
-<li>Learn about Google Play features.</li>
-</ul>
-
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#overview">About Google Play</a>
-<li><A href="#marketpublish">Publishing Apps on Google Play</a></li>
-<li><a href="#marketupgrade">Publishing Updates on Google Play</a></li>
-<li><a href="#marketLicensing">Using Google Play Licensing Service</a></li>
-<li><a href="#marketinappbilling">Using Google Play In-app Billing</a></li>
-<li><a href="#marketintent">Linking to Your Apps on Google Play</a>
-  <ol>
-    <li><a href="#OpeningDetails">Opening an app's details page</a></li>
-    <li><a href="#PerformingSearch">Performing a search</a></li>
-    <li><a href="#BuildaButton">Build a Google Play button</a></li>
-    <li><a href="#UriSummary">Summary of URI formats</a></li>
-  </ol>
-</li>
-</ol>
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}guide/publishing/publishing_overview.html">Publishing Overview</a></li>
-<li><a href="{@docRoot}guide/publishing/preparing.html">Preparing for Release</a></li>
-</ol>
-
-<div id="qv-extra">
-  <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
-  <div id="qv-sub-rule">
-    <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0 5px;">
-    <h2 style="color:#669999;">Already know about Google Play and want to get started?</h2>
-    <p>Go to <a href="http://play.google.com/apps/publish">Google Play</a>, create a developer
-account, and upload your application. For more information about required assets, listing details,
-and publishing options, see <a
-href="http://market.android.com/support/bin/answer.py?answer=113469">Upload
-Applications</a>.</p>
-  </div>
-</div>
-
-</div>
-</div>
-
-<p>One of the most effective ways to get your application into users' hands is to
-publish it on an application marketplace like Google Play. Publishing on Google Play is a
-straightforward process that you can do in just a few simple steps&mdash;register, configure,
-upload, and publish. Registration takes only a few minutes and needs to be done only once.
-The configuration and publishing steps can all be done through the Google Play Android Developer Console
-after you register as a Google Play developer.</p>
-
-<p>To start publishing on Google Play, first read this topic and then go to the <a
-href="https://play.google.com/apps/publish">Google Play Android Developer Console</a> and register as
-a Google Play developer.</p>
-
-
-<h2 id="overview">About Google Play</h2>
-
-<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
-your Android applications to users around the world. When you release your applications through
-Google Play you have access to a suite of developer tools that let you analyze your sales,
-identify market trends, and control who your applications are being distributed to. You also have
-access to several revenue-enhancing features, such as <a
-href="{@docRoot}guide/market/billing/index.html">in-app billing</a> and
-<a href="{@docRoot}guide/market/licensing/index.html">application licensing</a>.</p>
-
-<p>Before you can publish applications on Google Play, you need to <a
-href="http://play.google.com/apps/publish">register</a> as a Google Play developer. During the
-registration process you will need to create a developer profile, pay a registration fee, and agree
-to the <a href="http://www.android.com/us/developer-distribution-agreement.html">Google Play
-Developer Distribution Agreement</a>. After you register you can access the Developer
-Console, where you can upload applications, configure publishing options, and monitor publishing
-data. If you want to sell your applications or use the in-app billing feature, you will also need
-to set up a Google Checkout merchant account. For more information about the registration process,
-see <a href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113468">
-Developer Registration</a>.</p>
-
-<h2 id="marketpublish">Publishing Apps on Google Play</h2>
-
-<p>Publishing your application on Google Play is a simple process that involves three basic
-tasks (see figure 1):</p>
-
-<ul>
-  <li>Creating various graphical assets that
-accompany your app on Google Play.</li>
-  <li>Using the Google Play <a
-href="http://play.google.com/apps/publish">Developer Console</a> to configure publishing options,
-specify listing details, and upload your app and graphical assets to Google Play.</li>
-  <li>Reviewing your publishing settings and changing the release
-status of your app from Unpublished to Published.</li>
-</ul>
-
-<img src="{@docRoot}images/publishing/publishing_android_market.png"
-     alt="Shows the three steps that are required to publish on Google Play"
-     height="168"
-     id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> To publish apps on Google Play you must first <a
-href="{@docRoot}guide/publishing/preparing.html">prepare your app for release</a> and then perform
-three simple tasks.
-</p>
-
-<p class="caution"><strong>Important:</strong> You must <a
-href="{@docRoot}guide/publishing/preparing.html">prepare your application for release</a> before you
-can publish it on Google Play. When you prepare your application for release you configure it for
-release and build it in release mode. Building in release mode signs your application's {@code .apk}
-file with your private release key. You cannot publish an application on Google Play unless it is
-signed with your own private release key.</p>
-
-<h3>Preparing promotional materials</h3>
-
-<p>To fully leverage the marketing and publicity capabilities of Google Play, you need to create
-several graphical assets that accompany your app on Google Play, such as screenshots, videos,
-promotional graphics, and promotional text. At a minimum you must provide two screenshots of your
-application and a high resolution application icon. The screenshots are displayed on the details
-page for your application on Google Play, and the high resolution application icon is displayed
-in various locations throughout Google Play. The high resolution icon does not replace the
-launcher icon for your application, rather, it serves as a supplemental icon and should look
-the same as your launcher icon. Promotional video,
-graphics, and text are optional, although we strongly recommended that you prepare these for your
-app. For more information about the graphic assets that accompany your application, see <a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=1078870">Graphic
-Assets for your Application</a>.</p>
-
-<h3>Configuring options and uploading assets</h3>
-
-<p>Google Play lets you target your application to a worldwide pool of users and devices. To
-reach these users you can use the Developer Console to configure various publishing
-options and listing details for your app. For example, you can choose the <a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=138294&topic=
-2365624&ctx=topic">countries</a> you want to reach, the listing languages you want to use, and the
-<a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=138412&topic=
-15867&ctx=topic">price</a> you want to charge in each country. You can also configure listing
-details such as the application type, <a
-href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113475&topic=
-2365760&ctx=topic">category</a>, and <a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=188189&topic=
-2364761&ctx=topic">content rating</a>. In addition, if you want to sell items within your app using
-the in-app billing feature, you can use the Developer Console to <a
-href="http://grendel.sea.corp.google.com:48014/guide/market/billing/billing_admin.html#billing-list
-- setup">create a product list</a> and control which items are available for purchase in your
-app.</p>
-
-<p>When you are finished setting publishing options and listing details, you can upload your assets
-and your application to Google Play. You can also upload your application as a draft
-(unpublished) application, which lets you do final testing before you publish it for final
-release.</p>
-
-<p>To learn more about Google Play publishing settings, see the following resources:</p>
-
-<ul>
-  <li><a
-href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113469&topic=
-236562&ctx=topic">Upload Applications</a>&mdash;provides a summary of the publishing settings
-you can configure for an app.</li>
-  <li><a
-href="http://support.google.com/androidmarket/developer/bin/topic.py?hl=en&topic=15867">Selling
-Your Apps</a>&mdash;provides guidance about pricing, supported currencies, tax rates, and many
-other topics related to selling apps.</li>
-  <li><a
-href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=1169947&topic=
-15867&ctx=topic">Selling Apps in Multiple Currencies</a>&mdash;provides a description of how
-pricing, payouts, and exchange rates work.</li>
-</ul>
-
-<h3>Publishing your application</h3>
-
-<p>When you are satisfied that your publishing settings are correctly configured and your uploaded
-application is ready to be released to the public, you can simply click <strong>Publish</strong> in
-the Developer Console to make your app available for download
-around the world. Keep in mind, it can take several hours for your app to appear on Google
-Play after you click <strong>Publish</strong> in the Developer Console.</p>
-
-<h3>Controlling Distribution to Devices</h3>
-
-<p>If your application targets different device configurations, you can control which Android-powered
-devices have access to your application on Google Play by
-using Google Play filters. Filtering compares device configurations that you declare in your
-app's manifest file to the configuration defined by a device. For example, if you declare the camera
-filter in your manifest, only those devices that have a camera will see your app on Google
-Play. Filters must be configured in your application's manifest file when you are <a
-href="{@docRoot}guide/publishing/preparing.html">preparing your app for release</a> (that is, before
-you upload your app to Google Play). For more information, see <a
-href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>.</p>
-
-<p>You can also use the multiple APK feature to distribute different {@code .apk} files under the same
-application listing and the same package name; however, you should use this option only as a last
-resort. Android applications usually run on most compatible devices with a single APK, by supplying
-alternative resources for different configurations (for example, different layouts for different screen
-sizes) and the Android system selects the appropriate resources for the device at runtime. In a
-few cases, however, a single APK is unable to support all device configurations, because alternative
-resources make the APK file too big (greater than 50MB) or other technical challenges prevent a
-single APK from working on all devices. Although we encourage you to develop and publish a single
-APK that supports as many device configurations as possible, doing so is sometimes
-not possible. To help you publish your application for as many devices as possible, Google Play
-allows you to publish multiple APKs under the same application listing. Google Play then supplies
-each APK to the appropriate devices based on configuration support you've declared in the manifest
-file of each APK. To use this feature, you need to build your separate {@code .apk} files when you are <a
-href="{@docRoot}guide/publishing/preparing.html">preparing your app for release</a> (that is, before
-you upload your app to Google Play). For more information, see <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
-
-<h2 id="marketupgrade">Publishing Updates on Google Play</h2>
-
-<p>At any time after publishing an application on Google Play, you can upload
-and publish an update to the same application package. When you publish an
-update to an application, users who have already installed the
-application may receive a notification that an update is
-available for the application. They can then choose to update the application
-to the latest version.</p>
-
-<p>Before uploading the updated application, be sure that you have incremented
-the <code>android:versionCode</code> and <code>android:versionName</code>
-attributes in the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html"><code>&lt;manifest&gt;</code></a>
-element of the manifest file. Also, the package name must be the same as the existing version and
-the {@code .apk} file must be signed with the same private key. If the package name and signing
-certificate do <em>not</em> match those of the existing version, Google Play will
-consider it a new application, publish it as such, and will not offer it to existing users as an
-update.</p>
-
-<p>If you plan to publish your application on Google Play, you must make sure
-  that it meets the requirements listed below, which are enforced by Google Play
-  when you upload the application.</p>
-
-<h2 id="marketLicensing">Using Google Play Licensing Service</h2>
-
-<p>Google Play offers a licensing service that lets you enforce licensing
-policies for paid applications that you publish through Google Play. With
-Google Play Licensing, your applications can query Google Play at runtime
-to obtain the licensing status for the current user, then allow or disallow
-further use of the application as appropriate. Using the service, you can apply a flexible
-licensing policy on an application-by-application basis&mdash;each
-application can enforce its licensing status in the way most appropriate
-for it. </p>
-
-<p>Any application that you publish through Google Play can use the Google
-Play Licensing Service. The service uses no dedicated framework APIs, so you can
-add licensing to any application that uses a minimum API Level of 3 or
-higher.</p>
-
-<p>For complete information about Google Play Licensing Service and how to
-use it in your application, read <a
-href="{@docRoot}guide/market/licensing/index.html">Application Licensing</a>.</p>
-
-<h2 id="marketinappbilling">Using Google Play In-app Billing</h2>
-
-<p><a href="{@docRoot}guide/market/billing/billing_overview.html">Google Play In-app Billing</a>
-is a Google Play service that lets you sell digital content in your applications. You can use
-the service to sell a wide range of content, including downloadable  content such as media files or
-photos, and virtual content such as game levels or potions.</p>
-
-<p>When you use Google Play's in-app billing service to sell an item, Google Play handles all
-billing details so your application never has to directly process any financial transactions.
-Google Play uses the same checkout service that is used for application purchases, so your users
-experience a consistent and familiar purchase flow (see figure 1). Also, the transaction fee for
-in-app purchases is the same as the transaction fee for application purchases (30%).</p>
-
-<p>Any application that you publish through Google Play can implement in-app billing. No special
-account or registration is required other than a Google Play publisher account and a Google
-Checkout Merchant account. Also, because the service uses no dedicated framework APIs, you can add
-in-app billing to any application that uses a minimum API level of 4 or higher.</p>
-
-<p>To help you integrate in-app billing into your application, the Android SDK provides a <a
-href="{@docRoot}guide/market/billing/billing_integrate.html#billing-download">sample application</a>
-that demonstrates a simple implementation of in-app billing. The sample application contains
-examples of billing-related classes you can use to implement in-app billing in your application. It
-also contains examples of the database, user interface, and business logic you might use to
-implement in-app billing. For more information about the in-app billing feature, see the
-<a href="{@docRoot}guide/market/billing/index.html">In-app Billing documentation</a>.</p>
-
-<h2 id="marketintent">Linking to Your Apps on Google Play</h2>
-
-<p>To help users discover your published applications, you can use two special Google Play URIs
-that direct users to your application's details page or perform a search for all of your published
-applications on Google Play. You can use these URIs to create a button in your application or a
-link on a web page that:</p>
-
-<ul>
-  <li>Opens your application's details page in the Google Play application or web site.</li>
-  <li>Searches for all your published applications in the Google Play application or web
-site.</li>
-</ul>
-
-<p>You can launch the Google Play application or web site in the following ways:</p>
-<ul>
-  <li>Initiate an {@link android.content.Intent} from your application that launches the
-Google Play application on the user's device.</li>
-  <li>Provide a link on a web page that opens the Google Play web site (but will also
-open the Google Play application if clicked from a device).</li>
-</ul>
-
-<p>In both cases, whether you want to initiate the action from your application or from a web
-page, the URIs are quite similar. The only difference is the URI prefix.</p>
-
-<p>To open the Google Play application from your application, the prefix for the intent's data
-URI is:</p>
-
-<p style="margin-left:2em"><code>market://</code></p>
-
-<p>To open Google Play store from your web site, the prefix for the link URI is:</p>
-
-<p style="margin-left:2em"><code>http://play.google.com/store/</code></p>
-
-<p>The following sections describe how to create a complete URI for each action.</p>
-
-<p class="note"><strong>Note:</strong> If you create a link to open Google Play from your web
-site and the user selects it from an Android-powered device, the device's Google Play application will
-resolve the link so the user can use the Google Play application on the device instead of opening the web
-site. As such, you should always use {@code http://play.google.com/store/apps/...} URIs when
-creating a link on
-a web page. When pointing to your apps from within your Android app, use the
-{@code market://} URIs in an intent, so that the Google Play application always opens.</p>
-
-
-<h3 id="OpeningDetails">Opening an app's details page</h3>
-
-<p>As described above, you can open the details page for a specific application either on the
-Google Play application or the Google Play web site. The details page allows the user to see
-the application description, screenshots, reviews and more, and choose to install it.</p>
-
-<p>The format for the URI that opens the details page is:</p>
-
-<p style="margin-left:2em"><code>&lt;URI_prefix&gt;<b>apps/details?id=</b>&lt;package_name&gt;</code></p>
-
-<p>The <code>&lt;package_name&gt;</code> is a placeholder for the target application's
-fully-qualified package name, as declared in the <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#package">{@code
-package}</a> attribute of the <a href="{@docRoot}guide/topics/manifest/manifest-element.html">{@code
-&lt;manifest&gt;}</a> element.</p>
-
-<p>For example: <code>http://play.google.com/store/apps/details?id=com.example.myapp</code></p>
-
-
-<h4>Opening the app details page from your Android app</h4>
-
-<p>To open the Google Play details page from your application,
-create an intent with the {@link android.content.Intent#ACTION_VIEW} action and include a data URI
-in this format:</p>
-
-<p style="margin-left:2em"><code>market://details?id=&lt;package_name&gt;</code></p>
-
-<p>For example, here's how you can create an intent and open an application's details page in
-Google Play:</p>
-
-<pre>
-Intent intent = new Intent(Intent.ACTION_VIEW);
-intent.setData(Uri.parse("market://details?id=com.example.android"));
-startActivity(intent);
-</pre>
-
-<p>This will open the Google Play application on the device to view the {@code
-com.example.android} application.</p>
-
-
-<h4>Opening the app details page from a web site</h4>
-
-<p>To open the details page from your web site, create a link with a URI in this
-format:</p>
-
-<p style="margin-left:2em">
-  <code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
-</p>
-
-<p>For example, here's a link that opens an application's details page on Google Play:</p>
-
-<pre>
-&lt;a href="http://play.google.com/store/apps/details?id=com.example.android">App Link&lt;/a>
-</pre>
-
-<p>When clicked from a desktop web browser, this opens the Google Play web site to view the
-{@code com.example.android} application. When clicked from an Android-powered device, users are
-given the option to use either their web browser or the Google Play application to view the
-application.</p>
-
-
-
-<h3 id="PerformingSearch">Performing a search</h3>
-
-<p>To initiate a search on Google Play, the format for the URI is:</p>
-
-<p style="margin-left:2em">
-  <code>&lt;URI_prefix&gt;<b>search?q=</b>&lt;query&gt;</code>
-</p>
-
-<p>The <code>&lt;query&gt;</code> is a placeholder for the search query to execute in Google
-Play. The query can be a raw text string or you can include a parameter that performs a search
-based on the publisher name:</p>
-
-<ul>
-  <li>To perform a raw text search, append the query string:
-  <p><code>&lt;URI_prefix&gt;<b>search?q=</b>&lt;search_query&gt;</code></p></li>
-
-  <li>To search based on the publisher name, use the {@code pub:} parameter in the query, followed
-by the publisher name:
-  <p><code>&lt;URI_prefix&gt;<b>search?q=pub:</b>&lt;publisher_name&gt;</code></p>
-  <p>You can use this type of search to show all of your published applications.</p></li>
-</ul>
-
-
-<h4>Searching from your Android app</h4>
-
-<p>To initiate a search on Google Play from your application, create an intent with the
-{@link android.content.Intent#ACTION_VIEW} action and include a data URI in this format:</p>
-
-<p style="margin-left:2em"><code>market://search?q=&lt;query&gt;</code></p>
-
-<p>The query may include the {@code pub:} parameter described above.</p>
-
-<p>For example, here's how you can initiate a search in the Google Play application, based on the
-publisher name:</p>
-
-<pre>
-Intent intent = new Intent(Intent.ACTION_VIEW);
-intent.setData(Uri.parse("market://search?q=pub:Your Publisher Name"));
-startActivity(intent);
-</pre>
-
-<p>This opens the Google Play application to perform the search. The search result shows all
-applications published by the publisher that are compatible with the current device.</p>
-
-
-<h4>Searching from a web site</h4>
-
-<p>To initiate a search on Google Play from your web site, create a link with a URI in this
-format:</p>
-
-<p style="margin-left:2em">
-  <code>http://play.google.com/store/search?q=&lt;query&gt;</code>
-</p>
-
-<p>The query may include the {@code pub:} parameter described above.</p>
-
-<p>For example, here's a link that initiates a search on Google Play, based on the
-publisher name:</p>
-
-<pre>
-&lt;a href="http://play.google.com/store/search?q=pub:Your Publisher Name">Search Link&lt;/a>
-</pre>
-
-<p>When clicked from a desktop web browser, this opens the Google Play web site and performs the
-search. When clicked from an Android-powered device, users are given the option to use either their
-web browser or the Google Play application to perform the search.</p>
-
-
-
-<h3 id="BuildaButton">Build a Google Play button</h3>
-
-<p>Use the following form to create a button for your web site that takes users to your application
-on Google Play. Input either your application's package name or your publisher name and the button
-will take users to Google Play to either view your application's information or view a list of your
-published apps. If users click the button while on an Android-powered device, the Google Play
-application will respond to show users your application(s).</p>
-
-<p>This form offers two styles of the official brand badge each at recommended sizes. You can pick
-between either "Get it on Google Play" or "Android app on Google Play." You should not modify the
-badge images in any way. For more usage guidelines,
-see the <a href="http://www.android.com/branding.html">Android Brand Guidelines</a>.</p>
-
-<style type="text/css">
-
-form.button-form {
-  margin-top:2em;
-}
-
-/* the label and input elements are blocks that float left in order to
-   keep the left edgets of the input aligned, and IE 6/7 do not fully support "inline-block" */
-label.block {
-  display: block;
-  float: left;
-  width: 100px;
-  padding-right: 10px;
-}
-
-input.text {
-  display: block;
-  float: left;
-  width: 250px;
-}
-
-div.button-row {
-  white-space:nowrap;
-  min-height:80px;
-}
-
-div.button-row input {
-  vertical-align:120%;
-}
-
-#jd-content div.button-row img {
-  margin: 0;
-}
-
-</style>
-
-<script type="text/javascript">
-
-// variables for creating 'try it out' demo button
-var imagePath = "http://www.android.com/images/brand/"
-var linkStart = "<a href=\"http://play.google.com/store/";
-var imageStart = "\">\n"
-        + "  <img alt=\"";
-  // leaves opening for the alt text value
-var imageSrc = "\"\n       src=\"" + imagePath;
-  // leaves opening for the image file name
-var imageEnd = ".png\" />\n</a>";
-
-// variables for creating code snippet
-var linkStartCode = "&lt;a href=\"http://play.google.com/store/";
-var imageStartCode = "\"&gt;\n"
-        + "  &lt;img alt=\"";
-  // leaves opening for the alt text value
-var imageSrcCode = "\"\n       src=\"" + imagePath;
-  // leaves opening for the image file name
-var imageEndCode = ".png\" />\n&lt;/a>";
-
-/** Generate the HTML snippet and demo based on form values */
-function buildButton(form) {
-  var selectedValue = $('form input[type=radio]:checked').val();
-  var altText = selectedValue.indexOf("get_it") != -1 ? "Get it on Google Play" : "Android app on Google Play";
-
-  if (form["package"].value != "com.example.android") {
-    $("#preview").show();
-    $("#snippet").show().html(linkStartCode + "apps/details?id=" + form["package"].value
-            + imageStartCode + altText + imageSrcCode
-            + selectedValue + imageEndCode);
-    $("#button-preview").html(linkStart + "apps/details?id=" + form["package"].value
-            + imageStart + altText + imageSrc
-            + selectedValue + imageEnd);
-  } else if (form["publisher"].value != "Example, Inc.") {
-    $("#preview").show();
-    $("#snippet").show().html(linkStartCode + "search?q=pub:" + form["publisher"].value
-            + imageStartCode + altText + imageSrcCode
-            + selectedValue + imageEndCode);
-    $("#button-preview").html(linkStart + "search?q=pub:" + form["publisher"].value
-            + imageStart + altText + imageSrc
-            + selectedValue + imageEnd);
-  } else {
-    alert("Please enter your package name or publisher name");
-  }
-  return false;
-}
-
-/** Listen for Enter key */
-function onTextEntered(event, form, me) {
-  // 13 = enter
-  if (event.keyCode == 13) {
-    buildButton(form);
-  }
-}
-
-/** When input is focused, remove example text and disable other input */
-function onInputFocus(object, example) {
-  if (object.value == example) {
-    $(object).val('').css({'color' : '#000'});
-  }
-  $('input[type="text"]:not(input[name='+object.name+'])',
-          object.parentNode).attr('disabled','true');
-  $('#'+object.name+'-clear').show();
-}
-
-/** When input is blured, restore example text if appropriate and enable other input */
-function onInputBlur(object, example) {
-  if (object.value.length < 1) {
-    $(object).attr('value',example).css({'color':'#ccc'});
-    $('input[type="text"]', object.parentNode).removeAttr('disabled');
-    $('#'+object.name+'-clear').hide();
-  }
-}
-
-/** Clear the form to start over */
-function clearLabel(id, example) {
-  $("#preview").hide();
-  $('#'+id+'').html('').attr('value',example).css({'color':'#ccc'});
-  $('input[type="text"]', $('#'+id+'').parent()).removeAttr('disabled');
-  $('#'+id+'-clear').hide();
-  return false;
-}
-
-/** When the doc is ready, find the inputs and color the input grey if the value is the example
-    text. This is necessary to handle back-navigation, which can auto-fill the form with previous
-    values (and text should not be grey) */
-$(document).ready(function() {
-  $(".button-form input.text").each(function(index) {
-    if ($(this).val() == $(this).attr("default")) {
-      $(this).css("color","#ccc");
-    } else {
-      /* This is necessary to handle back-navigation to the page after form was filled */
-      $('input[type="text"]:not(input[name='+this.name+'])',
-              this.parentNode).attr('disabled','true');
-      $('#'+this.name+'-clear').show();
-    }
-  });
-});
-
-</script>
-
-<form class="button-form">
-  <label class="block" for="package">Package name:</label>
-  <input class="text" type="text" id="package" name="package"
-         value="com.example.android"
-         default="com.example.android"
-         onfocus="onInputFocus(this, 'com.example.android')"
-         onblur="onInputBlur(this, 'com.example.android')"
-         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
-         <a id="package-clear" style="display:none" href="#"
-            onclick="return clearLabel('package','com.example.android');">clear</a>
-  <p style="clear:both;margin:0">&nbsp;<em>or</em></p>
-  <label class="block" style="margin-top:5px" for="publisher">Publisher name:</label>
-  <input class="text" type="text" id="publisher" name="publisher"
-         value="Example, Inc."
-         default="Example, Inc."
-         onfocus="onInputFocus(this, 'Example, Inc.')"
-         onblur="onInputBlur(this, 'Example, Inc.')"
-         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
-         <a id="publisher-clear" style="display:none" href="#"
-            onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
-         <br/><br/>
-
-<div class="button-row">
-  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
-    <label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
-alt="Get it on Google Play (small)" /></label>
-    &nbsp;&nbsp;&nbsp;&nbsp;
-  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
-    <label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
-alt="Get it on Google Play (large)" /></label>
-</div>
-
-<div class="button-row">
-  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
-    <label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
-alt="Android app on Google Play (small)" /></label>
-    &nbsp;&nbsp;&nbsp;&nbsp;
-  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
-    <label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
-alt="Android app on Google Play (large)" /></label>
-</div>
-
-  <input type="button" onclick="return buildButton(this.parentNode)" value="Build my button"
-style="padding:5px" />
-  <br/>
-</form>
-
-<div id="preview" style="display:none">
-  <p>Copy and paste this HTML into your web site:</p>
-  <textarea id="snippet" cols="100" rows="5" onclick="this.select()"
-style="font-family:monospace;background-color:#efefef;padding:5px;display:none;margin-bottom:1em">
-  </textarea >
-
-<p>Try it out:</p>
-<div id="button-preview" style="margin-top:1em"></div>
-</div>
-
-
-
-
-
-
-<h3 id="UriSummary">Summary of URI formats</h3>
-
-<p>The table below provides a summary of the URIs currently supported by the Google Play (both on
-the web and in the Android application), as discussed in the previous sections.</p>
-
-<table>
-<tr>
-<th>For this result</th>
-<th>Use this URI in a web page link</th>
-<th>Or this URI in an {@link android.content.Intent#ACTION_VIEW} intent</th>
-</tr>
-
-<tr>
-<td>Display the details screen for a specific application</td>
-<td><code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
-<td><code>market://details?id=&lt;package_name&gt;</code></td>
-</tr>
-
-<tr>
-<td>Search for applications using a general string query.</td>
-<td><code>http://play.google.com/store/search?q=&lt;query&gt;</code></td>
-<td><code>market://search?q=&lt;query&gt;</code></td>
-</tr>
-
-<tr>
-<td>Search for applications by publisher name</td>
-<td><nobr><code>http://play.google.com/store/search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
-<td><nobr><code>market://search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
-</tr>
-
-</table>
diff --git a/docs/html/guide/publishing/publishing_overview.jd b/docs/html/guide/publishing/publishing_overview.jd
deleted file mode 100755
index 6fb77e1..0000000
--- a/docs/html/guide/publishing/publishing_overview.jd
+++ /dev/null
@@ -1,231 +0,0 @@
-page.title=Publishing Overview
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>Quickview</h2>
-  <ul>
-    <li>Learn how to publish Android apps.</li>
-    <li>Find out how to prepare apps for release.</li>
-    <li>Learn how to release apps to users.</li>
-  </ul>
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
-    <li><a href="#publishing-release">Releasing Your Application to Users</a>
-    <ol>
-      <li><a href="#publishing-market">Releasing on Google Play</a></li>
-      <li><a href="#publishing-website">Releasing on your own website</a></li>
-      <li><a href="#publishing-email">Releasing through email</a></li>
-    </ol>
-  </ol>
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/publishing/preparing.html">Preparing for
-    Release</a></li>
-    <li><a href="{@docRoot}guide/publishing/publishing.html">Publishing on Google Play</a></li>
-  </ol>
-</div>
-</div>
-
-<p>Publishing is the process that makes your Android applications available to users. When you
-publish an Android application you perform two main tasks:</p>
-
-<ul>
-  <li>You prepare the application for release.
-    <p>During the preparation step you build a release version of your application, which users can
-      download and install on their Android-powered devices.</p>
-  </li>
-  <li>You release the application to users.
-    <p>During the release step you publicize, sell, and distribute the release version of your
-      application to users.</p>
-  </li>
-</ul>
-
-<p>Usually, you release your application through an application marketplace, such as Google Play.
-However, you can also release applications by sending them directly to users or by letting users
-download them from your own website.</p>
-
-<p>Figure 1 shows how the publishing process fits into the overall Android <a
-href="{@docRoot}guide/developing/index.html">application development process</a>.
-The publishing process is typically performed after you finish testing your application in a debug
-environment. Also, as a best practice, your application should meet all of your release criteria for
-functionality, performance, and stability before you begin the publishing process.</p>
-
-<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
-       process fits into the overall development process" height="86" id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
-href="{@docRoot}guide/developing/index.html">application development process</a>.
-</p>
-
-<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
-
-<p>Preparing your application for release is a multi-step process that involves the following
-tasks:</p>
-
-<ul>
-
-  <li>Configuring your application for release.
-    <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
-    <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
-    attribute from your manifest file. You should also provide values for the
-    <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
-    located in the
-    <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
-    element. You may also have to configure several other settings to meet Google Play
-    requirements or accomodate whatever method you're using to release your application.</p>
-  </li>
-  <li>Building and signing a release version of your application.
-    <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
-    with the Android SDK tools provide everything you need to build and sign a release version of
-    your application.</p>
-  </li>
-  <li>Testing the release version of your application.
-    <p>Before you distribute your application, you should thoroughly test the release version on at
-    least one target handset device and one target tablet device.</p>
-  </li>
-  <li>Updating application resources for release.
-    <p>You need to be sure that all application resources such as multimedia files and graphics
-    are updated and included with your application or staged on the proper production servers.</p>
-  </li>
-  <li>Preparing remote servers and services that your application depends on.
-    <p>If your application depends on external servers or services, you need to be sure they
-    are secure and production ready.</p>
-  </li>
-</ul>
-
-<p>You may have to perform several other tasks as part of the preparation process. For example, you
-will need to get a private key for signing your application, and you may need to get a Maps API
-release key if you are using the <a
-href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
-library</a>. You will also need to create an icon for your application, and you may want to prepare
-an End User License Agreement (EULA) to protect your person, organization, and intellectual
-property.</p>
-
-<p>When you are finished preparing your application for release you will have a signed
-<code>.apk</code> file that you can distribute to users.</p>
-
-<p>To learn how to prepare your application for release, see <a
-href="{@docRoot}guide/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
-topic provides step-by-step instructions for configuring and building a release version of your
-application.</p>
-
-<h2 id="publishing-release">Releasing Your Application to Users</h2>
-
-<p>You can release your Android applications several ways. Usually, you release applications
-through an application marketplace, such as Google Play, but you can also release applications
-on your own website or by sending an application directly to a user. Google Play is the
-recommended marketplace for Android applications and is particularly useful if you want to
-distribute your applications to a large global audience. The other two release methods&mdash;server
-distribution and email distribution&mdash;are useful if you are releasing an application to a small
-group of users (for example, a work group in an enterprise environment), or if you do not want to
-make your application available to the general public.</p>
-
-<h3 id="publishing-market">Releasing Your Applications on Google Play</h3>
-
-<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
-your Android applications to users around the world. When you release your applications through
-Google Play you have access to a suite of developer tools that let you analyze your sales,
-identify market trends, and control who your applications are being distributed to. You also have
-access to several revenue-enhancing features that are not available anywhere else, such as <a
-href="{@docRoot}guide/market/billing/index.html">in-app billing</a> and <a
-href="{@docRoot}guide/market/licensing.html">application licensing</a>. This rich array of tools
-and features, coupled with numerous end-user community features, makes Google Play the premier
-marketplace for selling and buying Android applications.</p>
-
-<p>Releasing your application on Google Play is a simple process that involves three basic
-  steps:</p>
-
-<div class="figure" style="width:275px">
-  <img src="{@docRoot}images/publishing/publishing_unknown_sources.png"
-       alt="Screenshot showing the graphical user interface element that allows unknown sources
-       to be installed" />
-  <p class="img-caption">
-    <strong>Figure 2.</strong> The <strong>Unknown sources</strong> setting lets you install
-    applications that are not published on Google Play .
-  </p>
-</div>
-
-<ul>
-  <li>Preparing promotional materials.
-    <p>To fully leverage the marketing and publicity capabilities of Google Play, you need to
-    create promotional materials for your application, such as screenshots, videos, graphics, and
-    promotional text.</p>
-  </li>
-  <li>Configuring options and uploading assets.
-    <p>Google Play lets you target your application to a worldwide pool of users and devices.
-    By configuring various Google Play settings, you can choose the countries you want to
-    reach, the listing languages you want to use, and the price you want to charge in each
-    country. You can also configure listing details such as the application type, category, and
-    content rating. When you are done configuring options you can upload your promotional materials
-    and your application as a draft (unpublished) application.</p>
-  </li>
-  <li>Publishing the release version of your application.
-    <p>If you are satisfied that your publishing settings are correctly configured and your
-    uploaded application is ready to be released to the public, you can simply click
-    <strong>Publish</strong > in the developer console and within minutes your application will be
-    live and available for download around the world.</p>
-  </li>
-</ul>
-
-<p>For information about Google Play, see <a
-href="{@docRoot}guide/publishing/publishing.html#market">Publishing on Google Play</a>. This
-topic provides an introduction to Google Play features and provides a step-by-step guide for
-distributing your applications on Google Play.</p>
-
-<h3 id="publishing-website">Releasing your application on your own website</h3>
-
-<p>If you do not want to release your application on an application marketplace like Google Play,
-you can release your application by making it available for download on your own website or server.
-To do this, you must first prepare your application for release (that is, you must build it for
-release and sign it). Then all you need to do is host the release-ready application on your website
-and provide a download link for the application. When users browse to your website with their
-Android-powered devices and download your application, the Android system will automatically start
-installing the application on the device. However, the installation process will start automatically
-only if the user has configured their device to allow the installation of non-Google Play
-applications.</p>
-
-<div class="figure" style="width:275px">
-  <img src="{@docRoot}images/publishing/publishing_via_email.png"
-       alt="Screenshot showing the graphical user interface users see when you send them an app"
-       height="453" />
-  <p class="img-caption">
-    <strong>Figure 3.</strong> Users can simply click <strong>Install</strong> when you send them
-    an application via email.
-  </p>
-</div>
-
-<p>By default, Android-powered devices allow users to install applications only if the applications
-have been downloaded from Google Play. To allow the installation of applications from other
-sources, users need to enable the <strong>Unknown sources</strong> setting on their devices, and
-they need to make this configuration change before they download your application to their
-device (see figure 2).</p>
-
-<p class="note"><strong>Note:</strong> Some network providers do not allow users to install
-applications from unknown sources.</p>
-
-<p>Although it is relatively easy to release your application on your own website, it can be
-inefficient and cumbersome. For example, if you want to monetize your application you will
-have to process and track all financial transactions yourself and you will not be able to use
-Google Play's in-app billing feature to sell in-app products. In addition, you will not be
-able to use the licensing feature to help prevent unauthorized installation and use of your
-application.</p>
-
-<h3 id="publishing-email">Releasing your application through email</h3>
-
-<p>The easiest and quickest way to release your application is to send it to a user through
-email. To do this, you prepare your application for release and then attach it to an email
-and send it to a user. When the user opens your email message on their Android-powered device
-the Android system will recognize the <code>.apk</code> and display an <strong>Install Now</strong>
-button in the email message (see figure 3). Users can install your application by touching the
-button.</p>
-
-<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button appears only if a
-user has configured their device to allow the installation of non-Google Play applications and
-they open your email with the native Gmail application.</p>
-
-<p>Releasing applications through email is convenient if you are sending your application to
-only a few trusted users, but it provides few protections from piracy and unauthorized
-distribution; that is, anyone you send your application to can simply forward it to someone else.
-else.
diff --git a/docs/html/guide/publishing/versioning.jd b/docs/html/guide/publishing/versioning.jd
deleted file mode 100644
index da57e3e..0000000
--- a/docs/html/guide/publishing/versioning.jd
+++ /dev/null
@@ -1,174 +0,0 @@
-page.title=Versioning Your Applications
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-
-<ul>
-<li>Your application <em>must</em> be versioned</a></li>
-<li>You set the version in the application's manifest file</li>
-<li>How you version your applications affects how users upgrade </li>
-<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
-</ul>
-
-<h2>In this document</h2>
-
-<ol>
-<li><a href="#appversioning">Setting Application Version</a></li>
-<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
-</ol>
-
-
-<h2>See also</h2>
-
-<ol>
-<li><a href="{@docRoot}guide/publishing/preparing.html">Preparing to Publish Your Application</a></li>
-<li><a href="{@docRoot}guide/publishing/publishing.html#market">Publishing On Google Play</a></li>
-<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Versioning is a critical component of your application upgrade and maintenance
-strategy. Versioning is important because:</p>
-
-<ul>
-<li>Users need to have specific information about the application version that
-is installed on their devices and the upgrade versions available for
-installation. </li>
-<li>Other applications &mdash; including other applications that you publish as
-a suite &mdash; need to query the system for your application's version, to
-determine compatibility and identify dependencies.</li>
-<li>Services through which you will publish your application(s) may also need to
-query your application for its version, so that they can display the version to
-users. A publishing service may also need to check the application version to
-determine compatibility and establish upgrade/downgrade relationships.</li>
-</ul>
-
-<p>The Android system does not use app version information to enforce
-restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
-developer) are responsible for enforcing version restrictions within your application or by
-informing users of the version restrictions and limitations. The Android system does, however,
-enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
-manifest. This attribute allows an application to specify the minimum system API with which it is
-compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
-Version</a>.</p>
-
-<h2 id="appversioning">Setting Application Version</h2>
-<p>To define the version information for your application, you set attributes in
-the application's manifest file. Two attributes are available, and you should
-always define values for both of them: </p>
-
-<ul>
-<li><code>android:versionCode</code> &mdash; An integer value that represents
-the version of the application code, relative to other versions.
-
-<p>The value is an integer so that other applications can programmatically
-evaluate it, for example to check an upgrade or downgrade relationship. You can
-set the value to any integer you want, however you should make sure that each
-successive release of your application uses a greater value. The system does not
-enforce this behavior, but increasing the value with successive releases is
-normative. </p>
-
-<p>Typically, you would release the first version of your application with
-versionCode set to 1, then monotonically increase the value with each release,
-regardless whether the release constitutes a major or minor release. This means
-that the <code>android:versionCode</code> value does not necessarily have a
-strong resemblance to the application release version that is visible to the
-user (see <code>android:versionName</code>, below). Applications and publishing
-services should not display this version value to users.</p>
-</li>
-<li><code>android:versionName</code> &mdash; A string value that represents the
-release version of the application code, as it should be shown to users.
-<p>The value is a string so that you can describe the application version as a
-&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
-absolute or relative version identifier. </p>
-
-<p>As with <code>android:versionCode</code>, the system does not use this value
-for any internal purpose, other than to enable applications to display it to
-users. Publishing services may also extract the <code>android:versionName</code>
-value for display to users.</p>
-</li>
-</ul>
-
-<p>You define both of these version attributes in the
-<code>&lt;manifest&gt;</code> element of the manifest file. </p>
-
-<p>Here's an example manifest that shows the <code>android:versionCode</code>
-and <code>android:versionName</code> attributes in the
-<code>&lt;manifest&gt;</code> element. </p>
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.example.package.name"
-      android:versionCode="2"
-      android:versionName="1.1"&gt;
-    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
-        ...
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-<p>In this example, note that <code>android:versionCode</code> value indicates
-that the current .apk contains the second release of the application code, which
-corresponds to a minor follow-on release, as shown by the
-<code>android:versionName</code> string. </p>
-
-<p>The Android framework provides an API to let applications query the system
-for version information about your application. To obtain version information,
-applications use the
-{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
-method of {@link android.content.pm.PackageManager PackageManager}. </p>
-
-<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
-
-<p>If your application requires a specific minimum version of the Android
-platform, or is designed only to support a certain range of Android platform
-versions, you can specify those version requirements as API Level identifiers
-in the application's manifest file. Doing so ensures that your
-application can only be installed on devices that
-are running a compatible version of the Android system. </p>
-
-<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
-element in the application's manifest, with one or more of these attributes: </p>
-
-<ul>
-<li><code>android:minSdkVersion</code> &mdash; The minimum version
-of the Android platform on which the application will run, specified
-by the platform's API Level identifier. </li>
-<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
-on which the application is designed to run. In some cases, this allows the
-application to use manifest elements or behaviors defined in the target
-API Level, rather than being restricted to using only those defined
-for the minimum API Level.</li>
-<li><code>android:maxSdkVersion</code> &mdash; The maximum version
-of the Android platform on which the application is designed to run,
-specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-documentation before using this attribute. </li>
-</ul>
-
-<p>When preparing to install your application, the system checks the value of this
-attribute and compares it to the system version. If the
-<code>android:minSdkVersion</code> value is greater than the system version, the
-system aborts the installation of the application. Similarly, the system
-installs your application only if its <code>android:maxSdkVersion</code>
-is compatible with the platform version.</p>
-
-<p>If you do not specify these attributes in your manifest, the system assumes
-that your application is compatible with all platform versions, with no
-maximum API Level. </p>
-
-<p>To specify a minimum platform version for your application, add a
-<code>&lt;uses-sdk&gt;</code> element as a child of
-<code>&lt;manifest&gt;</code>, then define the
-<code>android:minSdkVersion</code> as an attribute. </p>
-
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-manifest element documentation and the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document.</p>
diff --git a/docs/html/guide/topics/admin/index.jd b/docs/html/guide/topics/admin/index.jd
new file mode 100644
index 0000000..b2a896f
--- /dev/null
+++ b/docs/html/guide/topics/admin/index.jd
@@ -0,0 +1,22 @@
+page.title=Administration
+page.landing=true
+page.landing.intro=If you are an enterprise administrator, you can take advantage of APIs and system capabilities to manage Android devices and control access.
+page.landing.image=
+
+@jd:body
+
+<div class="landing-docs">
+
+  <div class="col-12">
+    <h3>Blog Articles</h3>
+    <a
+href="http://android-developers.blogspot.com/2012/03/unifying-key-store-access-in-ics.html">
+      <h4>Unifying Key Store Access in ICS</h4>
+      <p>Android 4.0 (ICS) comes with a number of enhancements that make it easier for people to
+bring their personal Android devices to work. In this post, we’re going to have a look at the key
+store functionality.</p>
+    </a>
+  </div>
+
+
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/admin/keychain.jd b/docs/html/guide/topics/admin/keychain.jd
new file mode 100644
index 0000000..2ea2408
--- /dev/null
+++ b/docs/html/guide/topics/admin/keychain.jd
@@ -0,0 +1,4 @@
+page.title=Text and Input
+@jd:body
+
+<p>Add contnet here</p>
diff --git a/docs/html/guide/topics/appwidgets/index.jd b/docs/html/guide/topics/appwidgets/index.jd
index ba7b67c..a46f9a7 100644
--- a/docs/html/guide/topics/appwidgets/index.jd
+++ b/docs/html/guide/topics/appwidgets/index.jd
@@ -295,7 +295,7 @@
 
 <p>Creating the App Widget layout is simple if you're
 familiar with <a
-href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a>.
+href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a>.
 However, you must be aware that App Widget layouts are based on {@link
 android.widget.RemoteViews},
 which do not support every kind of layout or view widget.</p>
@@ -516,7 +516,7 @@
 {@link android.appwidget.AppWidgetProvider#onUpdate(Context,AppWidgetManager,int[]) onUpdate()} 
 method. From within the Service, you can perform your own updates
 to the App Widget without worrying about the AppWidgetProvider closing down due
-to an <a href="{@docRoot}guide/practices/design/responsiveness.html">Application
+to an <a href="{@docRoot}guide/practices/responsiveness.html">Application
 Not Responding</a> (ANR) error. See the <a
 href="http://code.google.com/p/wiktionary-android/source/browse/trunk/Wiktionary/src/com/example/android/wiktionary/WordWidget.java">Wiktionary sample's AppWidgetProvider</a> for an example of an App Widget running a {@link
 android.app.Service}.</p>
diff --git a/docs/html/guide/topics/connectivity/bluetooth.jd b/docs/html/guide/topics/connectivity/bluetooth.jd
new file mode 100644
index 0000000..832b850
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/bluetooth.jd
@@ -0,0 +1,1086 @@
+page.title=Bluetooth
+@jd:body
+
+<div id="qv-wrapper"> 
+<div id="qv"> 
+ 
+  <h2>Quickview</h2> 
+  <ul> 
+    <li>Android's bluetooth APIs allow your application to perform wireless data transactions with
+other devices</li> 
+  </ul> 
+ 
+  <h2>In this document</h2> 
+  <ol> 
+    <li><a href="#TheBasics">The Basics</a></li> 
+    <li><a href="#Permissions">Bluetooth Permissions</a></li> 
+    <li><a href="#SettingUp">Setting Up Bluetooth</a></li> 
+    <li><a href="#FindingDevices">Finding Devices</a> 
+      <ol> 
+        <li><a href="#QueryingPairedDevices">Querying paired devices</a></li> 
+        <li><a href="#DiscoveringDevices">Discovering devices</a></li> 
+      </ol></li> 
+    <li><a href="#ConnectingDevices">Connecting Devices</a> 
+      <ol> 
+        <li><a href="#ConnectingAsAServer">Connecting as a server</a></li> 
+        <li><a href="#ConnectingAsAClient">Connecting as a client</a></li> 
+      </ol></li> 
+    <li><a href="#ManagingAConnection">Managing a Connection</a></li>
+    <li><a href="#Profiles">Working with Profiles</a> 
+      <ol>
+        <li><a href="#AT-Commands">Vendor-specific AT commands</a>
+        <li><a href="#HDP">Health Device Profile</a>
+      </ol></li>
+  </ol> 
+ 
+  <h2>Key classes</h2> 
+  <ol> 
+    <li>{@link android.bluetooth.BluetoothAdapter}</li> 
+    <li>{@link android.bluetooth.BluetoothDevice}</li> 
+    <li>{@link android.bluetooth.BluetoothSocket}</li> 
+    <li>{@link android.bluetooth.BluetoothServerSocket}</li> 
+  </ol> 
+ 
+  <h2>Related samples</h2> 
+  <ol> 
+    <li><a href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat</a></li> 
+    <li><a href="{@docRoot}resources/samples/BluetoothHDP/index.html">Bluetooth HDP (Health Device Profile)</a></li>
+  </ol> 
+ 
+</div> 
+</div> 
+ 
+ 
+<p>The Android platform includes support for the Bluetooth network stack,
+which allows a device to wirelessly exchange data with other Bluetooth devices.
+The application framework provides access to the Bluetooth functionality through
+the Android Bluetooth APIs. These APIs let applications wirelessly
+connect to other Bluetooth devices, enabling point-to-point and multipoint
+wireless features.</p> 
+ 
+<p>Using the Bluetooth APIs, an Android application can perform the
+following:</p>
+<ul>
+  <li>Scan for other Bluetooth devices</li>
+  <li>Query the local Bluetooth adapter for paired Bluetooth devices</li>
+  <li>Establish RFCOMM channels</li>
+  <li>Connect to other devices through service discovery</li>
+  <li>Transfer data to and from other devices</li>
+  <li>Manage multiple connections</li>
+</ul>
+
+
+<h2 id="TheBasics">The Basics</h2>
+
+<p>This document describes how to use the Android Bluetooth APIs to accomplish
+the four major tasks necessary to communicate using Bluetooth: setting up
+Bluetooth, finding devices that are either paired or available in the local
+area, connecting devices, and transferring data between devices.</p> 
+ 
+<p>All of the Bluetooth APIs are available in the {@link android.bluetooth}
+package. Here's a summary of the classes and interfaces you will need to create Bluetooth
+connections:</p> 
+ 
+<dl> 
+<dt>{@link android.bluetooth.BluetoothAdapter}</dt> 
+<dd>Represents the local Bluetooth adapter (Bluetooth radio). The
+{@link android.bluetooth.BluetoothAdapter} is the entry-point for all Bluetooth
+interaction. Using this,
+you can discover other Bluetooth devices, query a list of bonded (paired)
+devices, instantiate a {@link android.bluetooth.BluetoothDevice} using a known
+MAC address, and create a {@link android.bluetooth.BluetoothServerSocket} to
+listen for communications
+from other devices.</dd> 
+ 
+<dt>{@link android.bluetooth.BluetoothDevice}</dt> 
+<dd>Represents a remote Bluetooth device. Use this to request a connection
+with a remote device through a {@link android.bluetooth.BluetoothSocket} or
+query information about the
+device such as its name, address, class, and bonding state.</dd> 
+ 
+<dt>{@link android.bluetooth.BluetoothSocket}</dt> 
+<dd>Represents the interface for a Bluetooth socket (similar to a TCP
+{@link java.net.Socket}). This is the connection point that allows
+an application to exchange data with another Bluetooth device via InputStream
+and OutputStream.</dd> 
+ 
+<dt>{@link android.bluetooth.BluetoothServerSocket}</dt> 
+<dd>Represents an open server socket that listens for incoming requests
+(similar to a TCP {@link java.net.ServerSocket}). In order to connect two
+Android devices, one device must open a server socket with this class. When a
+remote Bluetooth device makes a connection request to the this device, the
+{@link android.bluetooth.BluetoothServerSocket} will return a connected {@link
+android.bluetooth.BluetoothSocket} when the
+connection is accepted.</dd> 
+ 
+<dt>{@link android.bluetooth.BluetoothClass}</dt> 
+<dd>Describes the general characteristics and capabilities of a Bluetooth
+device. This is a read-only set of properties that define the device's major and
+minor device classes and its services. However, this does not reliably describe
+all Bluetooth profiles and services supported by the device, but is useful as a
+hint to the device type.</dd> 
+ 
+<dt>{@link android.bluetooth.BluetoothProfile}</dt> <dd>An interface that
+represents a Bluetooth profile. A <em>Bluetooth profile</em> is a wireless
+interface specification for Bluetooth-based communication between devices. An
+example is the Hands-Free profile.  For more discussion of profiles, see <a
+href="#Profiles">Working with Profiles</a></dd> 
+
+<dt>{@link android.bluetooth.BluetoothHeadset}</dt> <dd>Provides support for
+Bluetooth headsets to be used with mobile phones. This includes both  Bluetooth
+Headset and Hands-Free (v1.5) profiles.</dd> 
+
+<dt>{@link android.bluetooth.BluetoothA2dp}</dt> <dd> Defines how high quality
+audio can be streamed from one device to another over a Bluetooth connection.
+"A2DP" stands for Advanced Audio Distribution Profile.</dd> 
+
+<dt>{@link android.bluetooth.BluetoothHealth}</dt>
+<dd> Represents a Health Device Profile proxy that controls the Bluetooth service.</dd>
+
+<dt>{@link android.bluetooth.BluetoothHealthCallback}</dt>
+
+<dd>An abstract class that you use to implement {@link
+android.bluetooth.BluetoothHealth} callbacks. You must extend this class and
+implement the callback methods to receive updates about changes in the
+application’s registration state and Bluetooth channel state.</dd>
+
+<dt>{@link android.bluetooth.BluetoothHealthAppConfiguration}</dt>
+
+<dd>Represents an application configuration that the Bluetooth Health third-party 
+application registers to communicate with a remote Bluetooth health
+device.</dd> 
+
+<dt>{@link android.bluetooth.BluetoothProfile.ServiceListener}</dt>
+
+<dd>An interface that notifies {@link android.bluetooth.BluetoothProfile} IPC
+clients when they have  been connected to or disconnected from the service (that
+is, the internal service that runs a particular profile). </dd>
+ 
+</dl> 
+ 
+ 
+ 
+ 
+<h2 id="Permissions">Bluetooth Permissions</h2> 
+ 
+<p>In order to use Bluetooth features in your application, you need to declare
+at least one of two Bluetooth permissions: {@link
+android.Manifest.permission#BLUETOOTH} and {@link
+android.Manifest.permission#BLUETOOTH_ADMIN}.</p> 
+ 
+<p>You must request the {@link android.Manifest.permission#BLUETOOTH} permission
+in order to perform any Bluetooth communication, such as requesting a
+connection, accepting a connection, and transferring data.</p> 
+ 
+<p>You must request the {@link android.Manifest.permission#BLUETOOTH_ADMIN}
+permission in order to initiate device discovery or manipulate Bluetooth
+settings. Most applications need this permission solely for the
+ability to discover local Bluetooth devices. The other abilities granted by this
+permission should not be used, unless the application is a "power manager" that
+will modify Bluetooth settings upon user request. <strong>Note:</strong> If you
+use {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission, then must
+also have the {@link android.Manifest.permission#BLUETOOTH} permission.</p> 
+ 
+<p>Declare the Bluetooth permission(s) in your application manifest file. For
+example:</p> 
+ 
+<pre> 
+&lt;manifest ... >
+  &lt;uses-permission android:name="android.permission.BLUETOOTH" />
+  ...
+&lt;/manifest>
+</pre> 
+ 
+<p>See the <a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission></a> 
+reference for more information about declaring application permissions.</p> 
+ 
+ 
+<h2 id="SettingUp">Setting Up Bluetooth</h2> 
+ 
+<div class="figure" style="width:200px"> 
+<img src="{@docRoot}images/bt_enable_request.png" /> 
+<strong>Figure 1:</strong> The enabling Bluetooth dialog.
+</div> 
+ 
+<p>Before your application can communicate over Bluetooth, you need to verify
+that Bluetooth is supported on the device, and if so, ensure that it is enabled.</p> 
+ 
+<p>If Bluetooth is not supported, then you should gracefully disable any
+Bluetooth features. If Bluetooth is supported, but disabled, then you can request that the
+user enable Bluetooth without leaving your application. This setup is
+accomplished in two steps, using the {@link android.bluetooth.BluetoothAdapter}.</p> 
+ 
+ 
+<ol> 
+<li>Get the {@link android.bluetooth.BluetoothAdapter}
+<p>The {@link android.bluetooth.BluetoothAdapter} is required for any and all Bluetooth
+activity. To get the {@link android.bluetooth.BluetoothAdapter}, call the static {@link
+android.bluetooth.BluetoothAdapter#getDefaultAdapter()} method. This returns a
+{@link android.bluetooth.BluetoothAdapter} that represents the device's own
+Bluetooth adapter (the Bluetooth radio). There's one Bluetooth adapter for the
+entire system, and your application can interact with it using this object. If
+{@link android.bluetooth.BluetoothAdapter#getDefaultAdapter()} returns null,
+then the device does not support Bluetooth and your story ends here. For example:</p> 
+<pre> 
+BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+if (mBluetoothAdapter == null) {
+    // Device does not support Bluetooth
+}
+</pre> 
+</li> 
+ 
+<li>Enable Bluetooth
+<p>Next, you need to ensure that Bluetooth is enabled. Call {@link
+android.bluetooth.BluetoothAdapter#isEnabled()} to check whether Bluetooth is
+currently enable. If this method returns false, then Bluetooth is disabled. To
+request that Bluetooth be enabled, call {@link
+android.app.Activity#startActivityForResult(Intent,int) startActivityForResult()}
+with the {@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} action Intent.
+This will issue a request to enable Bluetooth through the system settings (without
+stopping your application). For example:</p> 
+<pre> 
+if (!mBluetoothAdapter.isEnabled()) {
+    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
+    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
+}
+</pre> 
+ 
+<p>A dialog will appear requesting user permission to enable Bluetooth, as shown
+in Figure 1. If the user responds "Yes," the system will begin to enable Bluetooth
+and focus will return to your application once the process completes (or fails).</p> 
+
+<p>The {@code REQUEST_ENABLE_BT} constant passed to {@link
+android.app.Activity#startActivityForResult(Intent,int) startActivityForResult()} is a locally
+defined integer (which must be greater than 0), that the system passes back to you in your
+{@link
+android.app.Activity#onActivityResult(int,int,Intent) onActivityResult()} implementation as the
+<code>requestCode</code> parameter.</p>
+
+<p>If enabling Bluetooth succeeds, your activity receives the {@link
+android.app.Activity#RESULT_OK} result code in the {@link
+android.app.Activity#onActivityResult(int,int,Intent) onActivityResult()}
+callback. If Bluetooth was not enabled
+due to an error (or the user responded "No") then the result code is {@link
+android.app.Activity#RESULT_CANCELED}.</p>
+</li> 
+</ol> 
+ 
+<p>Optionally, your application can also listen for the
+{@link android.bluetooth.BluetoothAdapter#ACTION_STATE_CHANGED} broadcast Intent, which
+the system will broadcast whenever the Bluetooth state has changed. This broadcast contains
+the extra fields {@link android.bluetooth.BluetoothAdapter#EXTRA_STATE} and {@link
+android.bluetooth.BluetoothAdapter#EXTRA_PREVIOUS_STATE}, containing the new and old
+Bluetooth states, respectively. Possible values for these extra fields are
+{@link android.bluetooth.BluetoothAdapter#STATE_TURNING_ON}, {@link
+android.bluetooth.BluetoothAdapter#STATE_ON}, {@link
+android.bluetooth.BluetoothAdapter#STATE_TURNING_OFF}, and {@link
+android.bluetooth.BluetoothAdapter#STATE_OFF}. Listening for this
+broadcast can be useful to detect changes made to the Bluetooth state while your
+app is running.</p> 
+ 
+<p class="note"><strong>Tip:</strong> Enabling discoverability will automatically
+enable Bluetooth. If you plan to consistently enable device discoverability before
+performing Bluetooth activity, you can skip
+step 2 above. Read about <a href="#EnablingDiscoverability">enabling discoverability</a>,
+below.</p> 
+ 
+ 
+<h2 id="FindingDevices">Finding Devices</h2> 
+ 
+<p>Using the {@link android.bluetooth.BluetoothAdapter}, you can find remote Bluetooth
+devices either through device discovery or by querying the list of paired (bonded)
+devices.</p> 
+ 
+<p>Device discovery is a scanning procedure that searches the local area for
+Bluetooth enabled devices and then requesting some information about each one
+(this is sometimes referred to as "discovering," "inquiring" or "scanning").
+However, a Bluetooth device within the local area will respond to a discovery
+request only if it is currently enabled to be discoverable. If a device is
+discoverable, it will respond to the discovery request by sharing some
+information, such as the device name, class, and its unique MAC address. Using
+this information, the device performing discovery can then choose to initiate a
+connection to the discovered device.</p> 
+ 
+<p>Once a connection is made with a remote device for the first time, a pairing
+request is automatically presented to the user. When a device is
+paired, the basic information about that device (such as the device name, class,
+and MAC address) is saved and can be read using the Bluetooth APIs. Using the
+known MAC address for a remote device, a connection can be initiated with it at
+any time without performing discovery (assuming the device is within range).</p> 
+ 
+<p>Remember there is a difference between being paired and being connected. To
+be paired means that two devices are aware of each other's existence, have a
+shared link-key that can be used for authentication, and are capable of
+establishing an encrypted connection with each other. To be connected means that
+the devices currently share an RFCOMM channel and are able to transmit data with
+each other. The current Android Bluetooth API's require devices to be paired
+before an RFCOMM connection can be established. (Pairing is automatically performed
+when you initiate an encrypted connection with the Bluetooth APIs.)</p> 
+ 
+<p>The following sections describe how to find devices that have been paired, or
+discover new devices using device discovery.</p> 
+ 
+<p class="note"><strong>Note:</strong> Android-powered devices are not
+discoverable by default. A user can make
+the device discoverable for a limited time through the system settings, or an
+application can request that the user enable discoverability without leaving the
+application. How to <a href="#EnablingDiscoverability">enable discoverability</a> 
+is discussed below.</p> 
+ 
+ 
+<h3 id="QueryingPairedDevices">Querying paired devices</h3> 
+ 
+<p>Before performing device discovery, its worth querying the set
+of paired devices to see if the desired device is already known. To do so,
+call {@link android.bluetooth.BluetoothAdapter#getBondedDevices()}. This
+will return a Set of {@link android.bluetooth.BluetoothDevice}s representing
+paired devices. For example, you can query all paired devices and then
+show the name of each device to the user, using an ArrayAdapter:</p> 
+<pre> 
+Set&lt;BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
+// If there are paired devices
+if (pairedDevices.size() > 0) {
+    // Loop through paired devices
+    for (BluetoothDevice device : pairedDevices) {
+        // Add the name and address to an array adapter to show in a ListView
+        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
+    }
+}
+</pre> 
+ 
+<p>All that's needed from the {@link android.bluetooth.BluetoothDevice} object
+in order to initiate a connection is the MAC address. In this example, it's saved
+as a part of an ArrayAdapter that's shown to the user. The MAC address can later
+be extracted in order to initiate the connection. You can learn more about creating
+a connection in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> 
+ 
+ 
+<h3 id="DiscoveringDevices">Discovering devices</h3> 
+ 
+<p>To start discovering devices, simply call {@link
+android.bluetooth.BluetoothAdapter#startDiscovery()}. The
+process is asynchronous and the method will immediately return with a boolean
+indicating whether discovery has successfully started. The discovery process
+usually involves an inquiry scan of about 12 seconds, followed by a page scan of
+each found device to retrieve its Bluetooth name.</p> 
+ 
+<p>Your application must register a BroadcastReceiver for the
+{@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent in
+order to receive information about each
+device discovered. For each device, the system will broadcast the
+{@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent. This
+Intent carries the extra fields
+{@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} and
+{@link android.bluetooth.BluetoothDevice#EXTRA_CLASS}, containing a
+{@link android.bluetooth.BluetoothDevice} and a {@link
+android.bluetooth.BluetoothClass}, respectively. For example, here's how you can
+register to handle the broadcast when devices are discovered:</p> 
+<pre> 
+// Create a BroadcastReceiver for ACTION_FOUND
+private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction();
+        // When discovery finds a device
+        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
+            // Get the BluetoothDevice object from the Intent
+            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+            // Add the name and address to an array adapter to show in a ListView
+            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
+        }
+    }
+};
+// Register the BroadcastReceiver
+IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
+registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
+</pre> 
+ 
+<p>All that's needed from the {@link android.bluetooth.BluetoothDevice} object
+in order to initiate a
+connection is the MAC address. In this example, it's saved as a part of an
+ArrayAdapter that's shown to the user. The MAC address can later be extracted in
+order to initiate the connection. You can learn more about creating a connection
+in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> 
+ 
+<p class="caution"><strong>Caution:</strong> Performing device discovery is
+a heavy procedure for the Bluetooth
+adapter and will consume a lot of its resources. Once you have found a device to
+connect, be certain that you always stop discovery with
+{@link android.bluetooth.BluetoothAdapter#cancelDiscovery()} before
+attempting a connection. Also, if you
+already hold a connection with a device, then performing discovery can
+significantly reduce the bandwidth available for the connection, so you should
+not perform discovery while connected.</p> 
+ 
+<h4 id="EnablingDiscoverability">Enabling discoverability</h4> 
+ 
+<p>If you would like to make the local device discoverable to other devices,
+call {@link android.app.Activity#startActivityForResult(Intent,int)} with the
+{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE} action
+Intent. This will issue a request to enable discoverable mode through the system
+settings (without stopping your application). By default, the device will become
+discoverable for 120 seconds. You can define a different duration by adding the
+{@link android.bluetooth.BluetoothAdapter#EXTRA_DISCOVERABLE_DURATION} Intent
+extra. The maximum duration an app can set is 3600 seconds, and a value of 0
+means the device is always discoverable. Any value below 0 or above 3600 is
+automatically set to 120 secs). For example, this snippet sets the duration to
+300:</p> 
+
+<pre>Intent discoverableIntent = new
+Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
+discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
+startActivity(discoverableIntent);
+</pre> 
+ 
+<div class="figure" style="width:200px"> 
+<img src="{@docRoot}images/bt_enable_discoverable.png" /> 
+<strong>Figure 2:</strong> The enabling discoverability dialog.
+</div> 
+ 
+<p>A dialog will be displayed, requesting user permission to make the device
+discoverable, as shown in Figure 2. If the user responds "Yes," then the device
+will become discoverable for the specified amount of time. Your activity will
+then receive a call to the {@link android.app.Activity#onActivityResult(int,int,Intent)
+onActivityResult())} callback, with the result code equal to the duration that the device
+is discoverable. If the user responded "No" or if an error occurred, the result code will
+be {@link android.app.Activity#RESULT_CANCELED}.</p> 
+ 
+<p class="note"><strong>Note:</strong> If Bluetooth has not been enabled on the device,
+then enabling device discoverability will automatically enable Bluetooth.</p> 
+ 
+<p>The device will silently remain in discoverable mode for the allotted time.
+If you would like to be notified when the discoverable mode has changed, you can
+register a BroadcastReceiver for the {@link
+android.bluetooth.BluetoothAdapter#ACTION_SCAN_MODE_CHANGED}
+Intent. This will contain the extra fields {@link
+android.bluetooth.BluetoothAdapter#EXTRA_SCAN_MODE} and
+{@link android.bluetooth.BluetoothAdapter#EXTRA_PREVIOUS_SCAN_MODE}, which tell you the
+new and old scan mode, respectively. Possible values for each are
+{@link android.bluetooth.BluetoothAdapter#SCAN_MODE_CONNECTABLE_DISCOVERABLE},
+{@link android.bluetooth.BluetoothAdapter#SCAN_MODE_CONNECTABLE}, or {@link
+android.bluetooth.BluetoothAdapter#SCAN_MODE_NONE},
+which indicate that the device is either in discoverable mode, not in
+discoverable mode but still able to receive connections, or not in discoverable
+mode and unable to receive connections, respectively.</p> 
+ 
+<p>You do not need to enable device discoverability if you will be initiating
+the connection to a remote device. Enabling discoverability is only necessary when
+you want your application to host a server socket that will accept incoming
+connections, because the remote devices must be able to discover the device
+before it can initiate the connection.</p> 
+ 
+ 
+ 
+<h2 id="ConnectingDevices">Connecting Devices</h2> 
+ 
+<p>In order to create a connection between your application on two devices, you
+must implement both the server-side and client-side mechanisms, because one
+device must open a server socket and the other one must initiate the connection
+(using the server device's MAC address to initiate a connection). The server and
+client are considered connected to each other when they each have a connected
+{@link android.bluetooth.BluetoothSocket} on the same RFCOMM channel. At this
+point, each device can obtain input and output streams and data transfer can
+begin, which is discussed in the section about <a
+href="#ManagingAConnection">Managing a Connection</a>. This section describes how
+to initiate the connection between two devices.</p> 
+ 
+<p>The server device and the client device each obtain the required {@link
+android.bluetooth.BluetoothSocket} in different ways. The server will receive it
+when an incoming connection is accepted. The client will receive it when it
+opens an RFCOMM channel to the server.</p> 
+ 
+<div class="figure" style="width:200px"> 
+<img src="{@docRoot}images/bt_pairing_request.png" /> 
+<strong>Figure 3:</strong> The Bluetooth pairing dialog.
+</div> 
+ 
+<p>One implementation technique is to automatically prepare each device as a
+server, so that each one has a server socket open and listening for connections.
+Then either device can initiate a connection with the other and become the
+client. Alternatively, one device can explicitly "host" the connection and open
+a server socket on demand and the other device can simply initiate the
+connection.</p> 
+ 
+<p class="note"><strong>Note:</strong> If the two devices have not been previously paired,
+then the Android framework will automatically show a pairing request notification or
+dialog to the user during the connection procedure, as shown in Figure 3. So
+when attempting to connect devices,
+your application does not need to be concerned about whether or not the devices are
+paired. Your RFCOMM connection attempt will block until the user has successfully paired,
+or will fail if the user rejects pairing, or if pairing fails or times out. </p> 
+ 
+ 
+<h3 id="ConnectingAsAServer">Connecting as a server</h3> 
+ 
+<p>When you want to connect two devices, one must act as a server by holding an
+open {@link android.bluetooth.BluetoothServerSocket}. The purpose of the server
+socket is to listen for incoming connection requests and when one is accepted,
+provide a connected {@link android.bluetooth.BluetoothSocket}. When the {@link
+android.bluetooth.BluetoothSocket} is acquired from the {@link
+android.bluetooth.BluetoothServerSocket},
+the {@link android.bluetooth.BluetoothServerSocket} can (and should) be
+discarded, unless you want to accept more connections.</p> 
+ 
+<div class="sidebox-wrapper"> 
+<div class="sidebox"> 
+<h2>About UUID</h2> 
+ 
+<p>A Universally Unique Identifier (UUID) is a standardized 128-bit format for a string
+ID used to uniquely identify information. The point of a UUID is that it's big
+enough that you can select any random and it won't clash. In this case, it's
+used to uniquely identify your application's Bluetooth service. To get a UUID to
+use with your application, you can use one of the many random UUID generators on
+the web, then initialize a {@link java.util.UUID} with {@link
+java.util.UUID#fromString(String)}.</p> 
+</div> 
+</div> 
+ 
+<p>Here's the basic procedure to set up a server socket and accept a
+connection:</p> 
+ 
+<ol> 
+<li>Get a {@link android.bluetooth.BluetoothServerSocket} by calling the
+{@link
+android.bluetooth.BluetoothAdapter#listenUsingRfcommWithServiceRecord(String,
+UUID)}.
+<p>The string is an identifiable name of your service, which the system will
+automatically write to a new Service Discovery Protocol (SDP) database entry on
+the device (the name is arbitrary and can simply be your application name). The
+UUID is also included in the SDP entry and will be the basis for the connection
+agreement with the client device. That is, when the client attempts to connect
+with this device, it will carry a UUID that uniquely identifies the service with
+which it wants to connect. These UUIDs must match in order for the connection to
+be accepted (in the next step).</p> 
+</li> 
+ 
+<li>Start listening for connection requests by calling
+{@link android.bluetooth.BluetoothServerSocket#accept()}.
+<p>This is a blocking call. It will return when either a connection has been
+accepted or an exception has occurred. A connection is accepted only when a
+remote device has sent a connection request with a UUID matching the one
+registered with this listening server socket. When successful, {@link
+android.bluetooth.BluetoothServerSocket#accept()} will
+return a connected {@link android.bluetooth.BluetoothSocket}.</p> 
+</li> 
+ 
+<li>Unless you want to accept additional connections, call
+{@link android.bluetooth.BluetoothServerSocket#close()}.
+<p>This releases the server socket and all its resources, but does <em>not</em> close the
+connected {@link android.bluetooth.BluetoothSocket} that's been returned by {@link
+android.bluetooth.BluetoothServerSocket#accept()}. Unlike TCP/IP, RFCOMM only allows one
+connected client per channel at a time, so in most cases it makes sense to call {@link
+android.bluetooth.BluetoothServerSocket#close()} on the {@link
+android.bluetooth.BluetoothServerSocket} immediately after accepting a connected
+socket.</p> 
+</li> 
+</ol> 
+ 
+<p>The {@link android.bluetooth.BluetoothServerSocket#accept()} call should not
+be executed in the main activity UI thread because it is a blocking call and
+will prevent any other interaction with the application. It usually makes
+sense to do all work with a {@link android.bluetooth.BluetoothServerSocket} or {@link
+android.bluetooth.BluetoothSocket} in a new
+thread managed by your application. To abort a blocked call such as {@link
+android.bluetooth.BluetoothServerSocket#accept()}, call {@link
+android.bluetooth.BluetoothServerSocket#close()} on the {@link
+android.bluetooth.BluetoothServerSocket} (or {@link
+android.bluetooth.BluetoothSocket}) from another thread and the blocked call will
+immediately return. Note that all methods on a {@link
+android.bluetooth.BluetoothServerSocket} or {@link android.bluetooth.BluetoothSocket}
+are thread-safe.</p> 
+ 
+<h4>Example</h4> 
+ 
+<p>Here's a simplified thread for the server component that accepts incoming
+connections:</p> 
+<pre> 
+private class AcceptThread extends Thread {
+    private final BluetoothServerSocket mmServerSocket;
+ 
+    public AcceptThread() {
+        // Use a temporary object that is later assigned to mmServerSocket,
+        // because mmServerSocket is final
+        BluetoothServerSocket tmp = null;
+        try {
+            // MY_UUID is the app's UUID string, also used by the client code
+            tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
+        } catch (IOException e) { }
+        mmServerSocket = tmp;
+    }
+ 
+    public void run() {
+        BluetoothSocket socket = null;
+        // Keep listening until exception occurs or a socket is returned
+        while (true) {
+            try {
+                socket = mmServerSocket.accept();
+            } catch (IOException e) {
+                break;
+            }
+            // If a connection was accepted
+            if (socket != null) {
+                // Do work to manage the connection (in a separate thread)
+                manageConnectedSocket(socket);
+                mmServerSocket.close();
+                break;
+            }
+        }
+    }
+ 
+    /** Will cancel the listening socket, and cause the thread to finish */
+    public void cancel() {
+        try {
+            mmServerSocket.close();
+        } catch (IOException e) { }
+    }
+}
+</pre> 
+ 
+<p>In this example, only one incoming connection is desired, so as soon as a
+connection is accepted and the {@link android.bluetooth.BluetoothSocket} is
+acquired, the application
+sends the acquired {@link android.bluetooth.BluetoothSocket} to a separate
+thread, closes the
+{@link android.bluetooth.BluetoothServerSocket} and breaks the loop.</p> 
+ 
+<p>Note that when {@link android.bluetooth.BluetoothServerSocket#accept()}
+returns the {@link android.bluetooth.BluetoothSocket}, the socket is already
+connected, so you should <em>not</em> call {@link
+android.bluetooth.BluetoothSocket#connect()} (as you do from the
+client-side).</p> 
+ 
+<p><code>manageConnectedSocket()</code> is a fictional method in the application
+that will
+initiate the thread for transferring data, which is discussed in the section
+about <a href="#ManagingAConnection">Managing a Connection</a>.</p> 
+ 
+<p>You should usually close your {@link android.bluetooth.BluetoothServerSocket}
+as soon as you are done listening for incoming connections. In this example, {@link
+android.bluetooth.BluetoothServerSocket#close()} is called as soon
+as the {@link android.bluetooth.BluetoothSocket} is acquired. You may also want
+to provide a public method in your thread that can close the private {@link
+android.bluetooth.BluetoothSocket} in the event that you need to stop listening on the
+server socket.</p> 
+ 
+ 
+<h3 id="ConnectingAsAClient">Connecting as a client</h3> 
+ 
+<p>In order to initiate a connection with a remote device (a device holding an
+open
+server socket), you must first obtain a {@link
+android.bluetooth.BluetoothDevice} object that represents the remote device.
+(Getting a {@link android.bluetooth.BluetoothDevice} is covered in the above
+section about <a
+href="#FindingDevices">Finding Devices</a>.) You must then use the
+{@link android.bluetooth.BluetoothDevice} to acquire a {@link
+android.bluetooth.BluetoothSocket} and initiate the connection.</p> 
+ 
+<p>Here's the basic procedure:</p> 
+ 
+<ol> 
+<li>Using the {@link android.bluetooth.BluetoothDevice}, get a {@link
+android.bluetooth.BluetoothSocket} by calling {@link
+android.bluetooth.BluetoothDevice#createRfcommSocketToServiceRecord(UUID)}.
+<p>This initializes a {@link android.bluetooth.BluetoothSocket} that will
+connect to the {@link android.bluetooth.BluetoothDevice}. The UUID passed here
+must match the UUID used by the server device when it opened its
+{@link android.bluetooth.BluetoothServerSocket} (with {@link
+android.bluetooth.BluetoothAdapter#listenUsingRfcommWithServiceRecord(String,
+UUID)}). Using the same UUID is simply a matter of hard-coding the UUID string
+into your application and then referencing it from both the server and client
+code.</p> 
+</li> 
+ 
+<li>Initiate the connection by calling {@link
+android.bluetooth.BluetoothSocket#connect()}.
+<p>Upon this call, the system will perform an SDP lookup on the remote device in
+order to match the UUID. If the lookup is successful and the remote device
+accepts the connection, it will share the RFCOMM channel to use during the
+connection and {@link
+android.bluetooth.BluetoothSocket#connect()} will return. This method is a
+blocking call. If, for
+any reason, the connection fails or the {@link
+android.bluetooth.BluetoothSocket#connect()} method times out (after about
+12 seconds), then it will throw an exception.</p> 
+<p>Because {@link
+android.bluetooth.BluetoothSocket#connect()} is a blocking call, this connection
+procedure should always be performed in a thread separate from the main activity
+thread.</p> 
+<p class="note">Note: You should always ensure that the device is not performing
+device discovery when you call {@link
+android.bluetooth.BluetoothSocket#connect()}. If discovery is in progress, then
+the
+connection attempt will be significantly slowed and is more likely to fail.</p> 
+</li> 
+</ol> 
+ 
+<h4>Example</h4> 
+ 
+<p>Here is a basic example of a thread that initiates a Bluetooth
+connection:</p> 
+<pre> 
+private class ConnectThread extends Thread {
+    private final BluetoothSocket mmSocket;
+    private final BluetoothDevice mmDevice;
+ 
+    public ConnectThread(BluetoothDevice device) {
+        // Use a temporary object that is later assigned to mmSocket,
+        // because mmSocket is final
+        BluetoothSocket tmp = null;
+        mmDevice = device;
+ 
+        // Get a BluetoothSocket to connect with the given BluetoothDevice
+        try {
+            // MY_UUID is the app's UUID string, also used by the server code
+            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
+        } catch (IOException e) { }
+        mmSocket = tmp;
+    }
+ 
+    public void run() {
+        // Cancel discovery because it will slow down the connection
+        mBluetoothAdapter.cancelDiscovery();
+ 
+        try {
+            // Connect the device through the socket. This will block
+            // until it succeeds or throws an exception
+            mmSocket.connect();
+        } catch (IOException connectException) {
+            // Unable to connect; close the socket and get out
+            try {
+                mmSocket.close();
+            } catch (IOException closeException) { }
+            return;
+        }
+ 
+        // Do work to manage the connection (in a separate thread)
+        manageConnectedSocket(mmSocket);
+    }
+ 
+    /** Will cancel an in-progress connection, and close the socket */
+    public void cancel() {
+        try {
+            mmSocket.close();
+        } catch (IOException e) { }
+    }
+}
+</pre> 
+ 
+<p>Notice that {@link android.bluetooth.BluetoothAdapter#cancelDiscovery()} is called
+before the connection is made. You should always do this before connecting and it is safe
+to call without actually checking whether it is running or not (but if you do want to
+check, call {@link android.bluetooth.BluetoothAdapter#isDiscovering()}).</p> 
+ 
+<p><code>manageConnectedSocket()</code> is a fictional method in the application
+that will initiate the thread for transferring data, which is discussed in the section
+about <a href="#ManagingAConnection">Managing a Connection</a>.</p> 
+ 
+<p>When you're done with your {@link android.bluetooth.BluetoothSocket}, always
+call {@link android.bluetooth.BluetoothSocket#close()} to clean up.
+Doing so will immediately close the connected socket and clean up all internal
+resources.</p> 
+ 
+ 
+<h2 id="ManagingAConnection">Managing a Connection</h2> 
+ 
+<p>When you have successfully connected two (or more) devices, each one will
+have a connected {@link android.bluetooth.BluetoothSocket}. This is where the fun
+begins because you can share data between devices. Using the {@link
+android.bluetooth.BluetoothSocket}, the general procedure to transfer arbitrary data is
+simple:</p> 
+<ol> 
+<li>Get the {@link java.io.InputStream} and {@link java.io.OutputStream} that
+handle transmissions through the socket, via {@link
+android.bluetooth.BluetoothSocket#getInputStream()} and
+{@link android.bluetooth.BluetoothSocket#getOutputStream}, respectively.</li> 
+ 
+<li>Read and write data to the streams with {@link
+java.io.InputStream#read(byte[])} and {@link java.io.OutputStream#write(byte[])}.</li> 
+</ol> 
+ 
+<p>That's it.</p> 
+ 
+<p>There are, of course, implementation details to consider. First and foremost,
+you should use a dedicated thread for all stream reading and writing. This is
+important because both {@link java.io.InputStream#read(byte[])} and {@link
+java.io.OutputStream#write(byte[])} methods are blocking calls. {@link
+java.io.InputStream#read(byte[])} will block until there is something to read
+from the stream. {@link java.io.OutputStream#write(byte[])} does not usually
+block, but can block for flow control if the remote device is not calling {@link
+java.io.InputStream#read(byte[])} quickly enough and the intermediate buffers are full.
+So, your main loop in the thread should be dedicated to reading from the {@link
+java.io.InputStream}. A separate public method in the thread can be used to initiate
+writes to the {@link java.io.OutputStream}.</p> 
+ 
+<h4>Example</h4> 
+ 
+<p>Here's an example of how this might look:</p> 
+<pre> 
+private class ConnectedThread extends Thread {
+    private final BluetoothSocket mmSocket;
+    private final InputStream mmInStream;
+    private final OutputStream mmOutStream;
+ 
+    public ConnectedThread(BluetoothSocket socket) {
+        mmSocket = socket;
+        InputStream tmpIn = null;
+        OutputStream tmpOut = null;
+ 
+        // Get the input and output streams, using temp objects because
+        // member streams are final
+        try {
+            tmpIn = socket.getInputStream();
+            tmpOut = socket.getOutputStream();
+        } catch (IOException e) { }
+ 
+        mmInStream = tmpIn;
+        mmOutStream = tmpOut;
+    }
+ 
+    public void run() {
+        byte[] buffer = new byte[1024];  // buffer store for the stream
+        int bytes; // bytes returned from read()
+ 
+        // Keep listening to the InputStream until an exception occurs
+        while (true) {
+            try {
+                // Read from the InputStream
+                bytes = mmInStream.read(buffer);
+                // Send the obtained bytes to the UI activity
+                mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
+                        .sendToTarget();
+            } catch (IOException e) {
+                break;
+            }
+        }
+    }
+ 
+    /* Call this from the main activity to send data to the remote device */
+    public void write(byte[] bytes) {
+        try {
+            mmOutStream.write(bytes);
+        } catch (IOException e) { }
+    }
+ 
+    /* Call this from the main activity to shutdown the connection */
+    public void cancel() {
+        try {
+            mmSocket.close();
+        } catch (IOException e) { }
+    }
+}
+</pre> 
+ 
+<p>The constructor acquires the necessary streams and once executed, the thread
+will wait for data to come through the InputStream. When {@link
+java.io.InputStream#read(byte[])} returns with
+bytes from the stream, the data is sent to the main activity using a member
+Handler from the parent class. Then it goes back and waits for more bytes from
+the stream.</p> 
+ 
+<p>Sending outgoing data is as simple as calling the thread's
+<code>write()</code> method from the main activity and passing in the bytes to
+be sent. This method then simply calls {@link
+java.io.OutputStream#write(byte[])} to send the data to the remote device.</p> 
+ 
+<p>The thread's <code>cancel()</code> method is important so that the connection
+can be
+terminated at any time by closing the {@link android.bluetooth.BluetoothSocket}.
+This should always be called when you're done using the Bluetooth
+connection.</p> 
+ 
+<div class="special"> 
+<p>For a  demonstration of using the Bluetooth APIs, see the <a
+href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat sample app</a>.</p> 
+</div> 
+
+<h2 id="Profiles">Working with Profiles</h2> 
+
+<p>Starting in Android 3.0, the Bluetooth API includes support for working with
+Bluetooth profiles. A <em>Bluetooth profile</em> is a wireless interface
+specification for Bluetooth-based communication between devices. An example
+is the Hands-Free profile. For a mobile phone to connect to a wireless headset,
+both devices must support the Hands-Free profile. </p> 
+
+<p>You can implement the interface {@link android.bluetooth.BluetoothProfile} to write
+your own classes to support a particular Bluetooth profile. The Android
+Bluetooth API provides implementations for the following Bluetooth
+profiles:</p> 
+<ul> 
+
+  <li><strong>Headset</strong>. The Headset profile provides support for
+Bluetooth headsets to be used with mobile phones. Android provides the {@link
+android.bluetooth.BluetoothHeadset} class, which is a proxy for controlling the
+Bluetooth Headset Service via interprocess communication (<a
+href="{@docRoot}guide/components/processes-and-threads.html#IPC">IPC</a
+>). This includes both  Bluetooth Headset and Hands-Free (v1.5) profiles. The
+{@link android.bluetooth.BluetoothHeadset} class includes support for AT commands.
+For more discussion of this topic, see <a href="#AT-Commands">Vendor-specific AT commands</a></li>
+
+  <li><strong>A2DP</strong>. The Advanced Audio Distribution Profile (A2DP)
+profile defines how high quality audio can be streamed from one device to
+another over a Bluetooth connection. Android provides the {@link
+android.bluetooth.BluetoothA2dp} class, which is a proxy for controlling
+the Bluetooth A2DP  Service via IPC.</li> 
+
+ <li><strong>Health Device</strong>. Android 4.0 (API level 14) introduces
+support for the Bluetooth Health Device Profile (HDP). This lets you create
+applications that use Bluetooth to communicate with health devices that support
+Bluetooth, such as heart-rate monitors, blood meters, thermometers, scales, and
+so on. For a list of supported devices and their corresponding device data
+specialization codes, refer to <strong>Bluetooth Assigned Numbers</strong> at <a
+href="http://www.bluetooth.org">www.bluetooth.org</a>. Note that these values
+are also referenced in the ISO/IEEE 11073-20601 [7] specification as
+MDC_DEV_SPEC_PROFILE_* in the Nomenclature Codes Annex. For more discussion of
+HDP, see <a href="#HDP">Health Device Profile</a>.</li> 
+
+</ul> 
+
+<p>Here are the basic steps for working with a profile:</p> 
+<ol> 
+
+  <li>Get the default adapter, as described in
+    <a href="{@docRoot}guide/topics/connectivity/bluetooth.html#SettingUp">Setting Up
+      Bluetooth</a>.</li> 
+
+  <li>Use {@link
+android.bluetooth.BluetoothAdapter#getProfileProxy(android.content.Context,
+android.bluetooth.BluetoothProfile.ServiceListener, int) getProfileProxy()} to
+establish a connection to the profile proxy object associated with the profile.
+In the example below, the profile proxy object is an instance of {@link
+android.bluetooth.BluetoothHeadset}. </li> 
+
+  <li>Set up a  {@link android.bluetooth.BluetoothProfile.ServiceListener}. This
+listener notifies {@link android.bluetooth.BluetoothProfile} IPC clients when
+they have been connected to or disconnected from the service.</li> 
+
+  <li>In {@link
+android.bluetooth.BluetoothProfile.ServiceListener#onServiceConnected(int,
+android.bluetooth.BluetoothProfile) onServiceConnected()}, get a handle
+to the profile proxy object.</li> 
+
+  <li>Once you have the profile proxy object, you can use it to monitor the
+state of the connection and perform other operations that are relevant to that
+profile.</li> 
+</ol> 
+
+<p> For example, this code snippet shows how to connect to a {@link
+android.bluetooth.BluetoothHeadset} proxy object so that you can control the
+Headset profile:</p> 
+
+<pre>BluetoothHeadset mBluetoothHeadset;
+ 
+// Get the default adapter
+BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+ 
+// Establish connection to the proxy.
+mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.HEADSET);
+ 
+private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
+    public void onServiceConnected(int profile, BluetoothProfile proxy) {
+        if (profile == BluetoothProfile.HEADSET) {
+            mBluetoothHeadset = (BluetoothHeadset) proxy;
+        }
+    }
+    public void onServiceDisconnected(int profile) {
+        if (profile == BluetoothProfile.HEADSET) {
+            mBluetoothHeadset = null;
+        }
+    }
+};
+ 
+// ... call functions on mBluetoothHeadset
+ 
+// Close proxy connection after use.
+mBluetoothAdapter.closeProfileProxy(mBluetoothHeadset);
+</pre> 
+
+
+
+<h3 id="AT-Commands">Vendor-specific AT commands</h3> 
+
+<p>Starting in Android 3.0, applications can register to receive system
+broadcasts of pre-defined vendor-specific AT commands sent by headsets (such as
+a Plantronics +XEVENT command). For example, an application could receive
+broadcasts that indicate a connected device's battery level and could notify the
+user or take other action as needed. Create a broadcast receiver for the {@link
+android.bluetooth.BluetoothHeadset#ACTION_VENDOR_SPECIFIC_HEADSET_EVENT} intent
+to handle vendor-specific AT commands for the headset.</p>
+
+<h3 id="HDP">Health Device Profile</h3>
+
+<p>Android 4.0 (API level 14) introduces support for the Bluetooth Health Device
+Profile (HDP). This lets you create applications that use Bluetooth to
+communicate with health devices that support Bluetooth, such as heart-rate
+monitors, blood meters, thermometers, and scales. The Bluetooth Health API
+includes the classes {@link android.bluetooth.BluetoothHealth}, {@link
+android.bluetooth.BluetoothHealthCallback}, and {@link
+android.bluetooth.BluetoothHealthAppConfiguration}, which are described in <a
+href="#TheBasics">The Basics</a>. </p>
+
+<p>In using the Bluetooth Health API, it's helpful to understand these key HDP concepts:</p>
+<table>
+  <tr>
+    <th>Concept</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td><strong>Source</strong></td>
+
+    <td>A role defined in HDP. A <em>source</em> is a  health device that
+transmits medical data (weight scale, glucose meter, thermometer, etc.) to a
+smart device such as an Android phone or tablet. </td>
+  </tr>
+  <tr>
+    <td><strong>Sink</strong></td>
+
+    <td>A role defined in HDP. In HDP, a <em>sink</em> is the smart device that
+receives the medical data. In an Android HDP application, the sink is
+represented by a {@link android.bluetooth.BluetoothHealthAppConfiguration}
+object.</td>
+  </tr>
+  <tr>
+    <td><strong>Registration</strong></td>
+    <td>Refers to registering a sink for a particular health device.</td>
+  </tr>
+  <tr>
+    <td><strong>Connection</strong></td>
+
+    <td>Refers to opening a channel between a health device and a smart device
+such as an Android phone or tablet.</td>
+  </tr>
+</table>
+
+<h4>Creating an HDP Application</h4>
+
+<p>Here are the basic steps involved in creating an Android HDP application:</p>
+<ol>
+
+  <li>Get a reference to the {@link android.bluetooth.BluetoothHealth} proxy
+object. <p>Similar to regular headset and A2DP profile devices, you must call
+{@link android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()}
+with a {@link android.bluetooth.BluetoothProfile.ServiceListener} and the {@link
+android.bluetooth.BluetoothProfile.ServiceListener#HEALTH} profile type to
+establish a connection with the profile proxy object.</p> </li>
+
+  <li>Create a {@link android.bluetooth.BluetoothHealthCallback} and register an
+application configuration 
+({@link android.bluetooth.BluetoothHealthAppConfiguration})
+that acts as a health
+sink.</li>
+
+  <li>Establish a connection to a health device.  Some devices will initiate the
+connection.  It is unnecessary to carry out this step for those devices.</li>
+
+  <li>When connected successfully to a health device, read/write to the health
+device using the file descriptor. <p>The received data needs to be interpreted
+using a health manager which implements the IEEE 11073-xxxxx
+specifications.</p></li>
+
+  <li>When done, close the health channel and unregister the application.  The
+channel also closes when there is extended inactivity.</li>
+</ol>
+
+<p>For a complete code sample that illustrates these steps, see <a
+href="{@docRoot}resources/samples/BluetoothHDP/index.html">Bluetooth HDP (Health
+Device Profile)</a>. </p>
diff --git a/docs/html/guide/topics/connectivity/index.jd b/docs/html/guide/topics/connectivity/index.jd
new file mode 100644
index 0000000..322518e
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/index.jd
@@ -0,0 +1,42 @@
+page.title=Connectivity
+page.landing=true
+page.landing.intro=Android provides rich APIs to let your app connect and interact with other devices over Bluetooth, NFC, Wi-Fi Direct, USB, and SIP, in addition to standard network connections.
+page.landing.image=images/develop/connectivity.png
+
+@jd:body
+
+<div class="landing-docs">
+
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html">
+      <h4>Android’s HTTP Clients</h4>
+      <p>Most network-connected Android apps will use HTTP to send and receive data. Android
+includes two HTTP clients: HttpURLConnection and Apache HTTP Client. Both support HTTPS, streaming
+uploads and downloads, configurable timeouts, IPv6 and connection pooling.</p>
+    </a>
+    
+  </div>
+
+  <div class="col-6">
+    <h3>Training</h3>
+    
+    <a href="http://developer.android.com/training/efficient-downloads/index.html">
+      <h4>Transferring Data Without Draining the Battery</h4>
+      <p>This class demonstrates the best practices for scheduling and executing downloads using
+techniques such as caching, polling, and prefetching. You will learn how the power-use profile of
+the wireless radio can affect your choices on when, what, and how to transfer data in order to
+minimize impact on battery life.</p>
+    </a>
+    
+    <a href="http://developer.android.com/training/cloudsync/index.html">
+      <h4>Syncing to the Cloud</h4>
+      <p>This class covers different strategies for cloud enabled applications. It covers syncing
+data with the cloud using your own back-end web application, and backing up data using the cloud so
+that users can restore their data when installing your application on a new device.</p>
+    </a>
+    
+  </div>
+
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/connectivity/nfc/advanced-nfc.jd b/docs/html/guide/topics/connectivity/nfc/advanced-nfc.jd
new file mode 100644
index 0000000..9d6cda5
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/nfc/advanced-nfc.jd
@@ -0,0 +1,300 @@
+page.title=Advanced NFC
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#tag-tech">Working with Supported Tag Technologies</a>
+      <ol>
+        <li><a href="#tech-intent">Working with tag technologies and the ACTION_TECH_DISCOVERED
+        intent</a></li>
+        <li><a href="#read-write">Reading and writing to tags</a></li>
+      </ol></li>
+    <li><a href="#foreground-dispatch">Using the Foreground Dispatch System</a></li>
+  </ol>
+</div>
+</div>
+
+<p>This document describes advanced NFC topics, such as working with various tag technologies,
+writing to NFC tags, and foreground dispatching, which allows an application in the foreground to
+handle intents even when other applications filter for the same ones.</p>
+
+<h2 id="tag-tech">Working with Supported Tag Technologies</h2>
+<p>When working with NFC tags and Android-powered devices, the main format you use to read
+and write data on tags is NDEF. When a device scans a tag with NDEF data, Android provides support
+in parsing the message and delivering it in an {@link android.nfc.NdefMessage} when
+possible. There are cases, however, when you scan a tag that does not contain
+NDEF data or when the NDEF data could not be mapped to a MIME type or URI.
+In these cases, you need to open communication directly with the tag and read and write to it with
+your own protocol (in raw bytes). Android provides generic support for these use cases with the
+{@link android.nfc.tech} package, which is described in <a href="#tech-table">Table 1</a>. You can
+use the {@link android.nfc.Tag#getTechList getTechList()} method to determine the technologies
+supported by the tag and create the corresponding {@link android.nfc.tech.TagTechnology}
+object with one of classes provided by {@link android.nfc.tech} </p>
+
+<p class="table-caption" id="table1">
+<strong>Table 1.</strong> Supported tag technologies</p>
+<table id="tech-table">
+
+    <tr>
+      <th>Class</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.TagTechnology}</td>
+
+      <td>The interface that all tag technology classes must implement.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.NfcA}</td>
+
+      <td>Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.NfcB}</td>
+
+      <td>Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.NfcF}</td>
+
+      <td>Provides access to NFC-F (JIS 6319-4) properties and I/O operations.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.NfcV}</td>
+
+      <td>Provides access to NFC-V (ISO 15693) properties and I/O operations.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.IsoDep}</td>
+
+      <td>Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.Ndef}</td>
+
+      <td>Provides access to NDEF data and operations on NFC tags that have been formatted as
+      NDEF.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.NdefFormatable}</td>
+
+      <td>Provides a format operations for tags that may be NDEF formattable.</td>
+    </tr>
+  </table>
+<p>The following tag technlogies are not required to be supported by Android-powered devices.</p>
+  <p class="table-caption" id="table2">
+<strong>Table 2.</strong> Optional supported tag technologies</p>
+  <table>
+    <tr>
+      <th>Class</th>
+
+      <th>Description</th>
+    </tr>
+    <tr>
+      <td>{@link android.nfc.tech.MifareClassic}</td>
+
+      <td>Provides access to MIFARE Classic properties and I/O operations, if this Android device
+      supports MIFARE.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.nfc.tech.MifareUltralight}</td>
+
+      <td>Provides access to MIFARE Ultralight properties and I/O operations, if this Android
+      device supports MIFARE.</td>
+    </tr>
+  </table>
+
+<h3 id="tech-intent">Working with tag technologies and the ACTION_TECH_DISCOVERED intent</h3>
+<p>When a device scans a tag that has NDEF data on it, but could not be mapped to a MIME or URI,
+the tag dispatch system tries to start an activity with the {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}
+intent. The {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} is also used when a tag
+with non-NDEF data is scanned. Having this fallback allows you to work with the data on the tag
+directly if the tag dispatch system could not parse it for you. The basic steps when working with
+tag technologies are as follows:</p>
+
+<ol>
+  <li>Filter for an {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent specifying the
+tag technologies that you want to handle. See <a
+href="{@docRoot}guide/topics/connectivity/nfc/nfc.html#tech-disc">Filtering for NFC
+intents</a> for more information. In general, the tag dispatch system tries to start a {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent when an NDEF message
+cannot be mapped to a MIME type or URI, or if the tag scanned did not contain NDEF data. For
+more information on how this is determined, see <a
+href="{@docRoot}guide/topics/connectivity/nfc/nfc.html#tag-dispatch">The Tag Dispatch System</a>.</li>
+  <li>When your application receives the intent, obtain the {@link android.nfc.Tag} object from
+the intent:
+<pre>Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);</pre></li>
+<li>Obtain an instance of a {@link android.nfc.tech.TagTechnology}, by calling one of the
+<code>get</code> factory methods of the classes in the {@link android.nfc.tech} package. You can
+enumerate the supported technologies of the tag by calling {@link android.nfc.Tag#getTechList
+getTechList()} before calling a <code>get</code> factory method. For example, to obtain an instance
+of {@link android.nfc.tech.MifareUltralight} from a {@link android.nfc.Tag}, do the following:
+
+<pre>
+MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
+</pre>
+</li>
+</ol>
+
+
+
+<h3 id="read-write">Reading and writing to tags</h3>
+
+<p>Reading and writing to an NFC tag involves obtaining the tag from the intent and
+opening communication with the tag. You must define your own protocol stack to read and write data
+to the tag. Keep in mind, however, that you can still read and write NDEF data when working
+directly with a tag. It is up to you how you want to structure things. The
+following example shows how to work with a MIFARE Ultralight tag.</p>
+
+<pre>
+package com.example.android.nfc;
+
+import android.nfc.Tag;
+import android.nfc.tech.MifareUltralight;
+import android.util.Log;
+import java.io.IOException;
+import java.nio.charset.Charset;
+
+public class MifareUltralightTagTester {
+
+    private static final String TAG = MifareUltralightTagTester.class.getSimpleName();
+
+    public void writeTag(Tag tag, String tagText) {
+        MifareUltralight ultralight = MifareUltralight.get(tag);
+        try {
+            ultralight.connect();
+            ultralight.writePage(4, "abcd".getBytes(Charset.forName("US-ASCII")));
+            ultralight.writePage(5, "efgh".getBytes(Charset.forName("US-ASCII")));
+            ultralight.writePage(6, "ijkl".getBytes(Charset.forName("US-ASCII")));
+            ultralight.writePage(7, "mnop".getBytes(Charset.forName("US-ASCII")));
+        } catch (IOException e) {
+            Log.e(TAG, "IOException while closing MifareUltralight...", e);
+        } finally {
+            try {
+                ultralight.close();
+            } catch (IOException e) {
+                Log.e(TAG, "IOException while closing MifareUltralight...", e);
+            }
+        }
+    }
+
+    public String readTag(Tag tag) {
+        MifareUltralight mifare = MifareUltralight.get(tag);
+        try {
+            mifare.connect();
+            byte[] payload = mifare.readPages(4);
+            return new String(payload, Charset.forName("US-ASCII"));
+        } catch (IOException e) {
+            Log.e(TAG, "IOException while writing MifareUltralight
+            message...", e);
+        } finally {
+            if (mifare != null) {
+               try {
+                   mifare.close();
+               }
+               catch (IOException e) {
+                   Log.e(TAG, "Error closing tag...", e);
+               }
+            }
+        }
+        return null;
+    }
+}
+</pre>
+
+</pre>
+
+  <h2 id="foreground-dispatch">Using the Foreground Dispatch System</h2>
+
+  <p>The foreground dispatch system allows an activity to intercept an intent and claim
+priority over other activities that handle the same intent. Using this system involves
+  constructing a few data structures for the Android system to be able to send the appropriate
+  intents to your application. To enable the foreground dispatch system:</p>
+
+  <ol>
+    <li>Add the following code in the <code>onCreate()</code> method of your activity:
+
+      <ol>
+        <li>Create a {@link android.app.PendingIntent} object so the Android system can populate it
+        with the details of the tag when it is scanned.
+          <pre>
+PendingIntent pendingIntent = PendingIntent.getActivity(
+    this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
+</pre>
+        </li>
+
+        <li>Declare intent filters to handle the intents that you want to intercept. The foreground
+        dispatch system checks the specified intent filters with the intent that is received when
+        the device scans a tag. If it matches, then your application handles the intent. If it does
+        not match, the foreground dispatch system falls back to the intent dispatch system.
+        Specifying a <code>null</code> array of intent filters and technology filters, specifies
+        that you want to filter for all tags that fallback to the <code>TAG_DISCOVERED</code>
+        intent. The code snippet below handles all MIME types for <code>NDEF_DISCOVERED</code>. You
+        should only handle the ones that you need.
+<pre>
+IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
+    try {
+        ndef.addDataType("*/*");    /* Handles all MIME based dispatches.
+                                       You should specify only the ones that you need. */
+    }
+    catch (MalformedMimeTypeException e) {
+        throw new RuntimeException("fail", e);
+    }
+   intentFiltersArray = new IntentFilter[] {ndef, };
+</pre>
+        </li>
+
+        <li>Set up an array of tag technologies that your application wants to handle. Call the
+        <code>Object.class.getName()</code> method to obtain the class of the technology that you
+        want to support.
+<pre>
+techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
+</pre>
+        </li>
+      </ol>
+    </li>
+
+    <li>Override the following activity lifecycle callbacks and add logic to enable and disable the
+    foreground dispatch when the activity loses ({@link android.app.Activity#onPause onPause()})
+    and regains ({@link android.app.Activity#onResume onResume()}) focus. {@link
+    android.nfc.NfcAdapter#enableForegroundDispatch enableForegroundDispatch()} must be called from
+the main thread and only  when the activity is in the foreground (calling in {@link
+android.app.Activity#onResume onResume()} guarantees this). You also need to implement the {@link
+    android.app.Activity#onNewIntent onNewIntent} callback to process the data from the scanned NFC
+    tag.</li>
+
+<pre>
+public void onPause() {
+    super.onPause();
+    mAdapter.disableForegroundDispatch(this);
+}
+
+public void onResume() {
+    super.onResume();
+    mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
+}
+
+public void onNewIntent(Intent intent) {
+    Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
+    //do something with tagFromIntent
+}
+</pre>
+    </li>
+  </ol>
+
+  <p>See the <a href=
+"{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">
+ForegroundDispatch</a> sample from API Demos for the complete sample.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/connectivity/nfc/index.jd b/docs/html/guide/topics/connectivity/nfc/index.jd
new file mode 100644
index 0000000..88c206f
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/nfc/index.jd
@@ -0,0 +1,33 @@
+page.title=Near Field Communication
+@jd:body
+
+  <p>Near Field Communication (NFC) is a set of short-range wireless technologies, typically
+  requiring a distance of 4cm or less to initiate a connection. NFC allows you to share small
+  payloads of data between an NFC tag and an Android-powered device, or between two Android-powered
+  devices.
+
+  <p>Tags can range in complexity. Simple tags offer just read and write semantics, sometimes with
+  one-time-programmable areas to make the card read-only. More complex tags offer math operations,
+  and have cryptographic hardware to authenticate access to a sector. The most sophisticated tags
+  contain operating environments, allowing complex interactions with code executing on the tag.
+  The data stored in the tag can also be written in a variety of formats, but many of the Android
+  framework APIs are based around a <a href="http://www.nfc-forum.org/">NFC Forum</a> standard
+  called NDEF (NFC Data Exchange Format).</p>
+
+  <dl>
+    <dt><strong><a href="{@docRoot}guide/topics/connectivity/nfc/nfc.html">NFC Basics</a></strong></dt>
+    <dd>This document describes how Android handles discovered NFC tags and how it notifies
+applications of data that is relevant to the application. It also goes over how to work with the
+NDEF data in your applications and gives an overview of the framework APIs that support the basic
+NFC feature set of Android.</dd>
+
+    <dt><strong><a href="{@docRoot}guide/topics/connectivity/nfc/advanced-nfc.html">Advanced
+    NFC</a></strong></dt>
+    <dd>This document goes over the APIs that enable use of the various tag technologies that
+    Android supports. When you are not working with NDEF data, or when you are working with NDEF
+    data that Android cannot fully understand, you have to manually read or write to the tag in raw
+    bytes using your own protocol stack. In these cases, Android provides support to detect
+    certain tag technologies and to open communication with the tag using your own protocol
+    stack.</dd>
+  </dl>
+</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/connectivity/nfc/nfc.jd b/docs/html/guide/topics/connectivity/nfc/nfc.jd
new file mode 100644
index 0000000..51c7bee
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/nfc/nfc.jd
@@ -0,0 +1,923 @@
+page.title=NFC Basics
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#tag-dispatch">The Tag Dispatch System</a>
+      <ol>
+        <li><a href="#ndef">How NFC tags are mapped to MIME types and URIs</a></li>
+        <li><a href="#dispatching">How NFC Tags are Dispatched to Applications</a></li>
+      </ol>
+    </li>
+    <li><a href="#manifest">Requesting NFC Access in the Android Manifest</a></li>
+    <li><a href="#filtering-intents">Filtering for Intents</a>
+      <ol>
+        <li><a href="#ndef-disc">ACTION_NDEF_DISCOVERED</a></li>
+        <li><a href="#tech-disc">ACTION_TECH_DISCOVERED</a></li>
+        <li><a href="#tag-disc">ACTION_TAG_DISCOVERED</a></li>
+        <li><a href="#obtain-info">Obtaining information from intents</a></li>
+      </ol>
+    </li>
+    <li><a href="#creating-records">Creating Common Types of NDEF Records</a>
+      <ol>
+        <li><a href="#abs-uri">TNF_ABSOLUTE_URI</a></li>
+        <li><a href="#mime">TNF_MIME_MEDIA</a></li>
+        <li><a href="#well-known-text">TNF_WELL_KNOWN with RTD_TEXT</a></li>
+        <li><a href="#well-known-uri">TNF_WELL_KNOWN with RTD_URI</a></li>
+        <li><a href="#ext-type">TNF_EXTERNAL_TYPE</a></li>
+        <li><a href="#aar">Android Application Records</a></li>
+      </ol>
+    </li>
+    <li><a href="#p2p">Beaming NDEF Messages to Other Devices</a></li>
+  </ol>
+</div>
+</div>
+
+<p>This document describes the basic NFC tasks you perform in Android. It explains how to send and
+receive NFC data in the form of NDEF messages and describes the Android framework APIs that support
+these features. For more advanced topics, including a discussion of working with non-NDEF data,
+see <a href="{@docRoot}guide/topics/connectivity/nfc/advanced-nfc.html">Advanced NFC</a>.</p>
+
+
+<p>There are two major uses cases when working with NDEF data and Android:</p>
+
+<ul>
+  <li>Reading NDEF data from an NFC tag</li>
+  <li>Beaming NDEF messages from one device to another with <a href="#p2p">Android
+Beam&trade;</a></li>
+</ul>
+
+
+<p>Reading NDEF data from an NFC tag is handled with the <a href="#tag-dispatch">tag dispatch
+system</a>, which analyzes discovered NFC tags, appropriately categorizes the data, and starts
+an application that is interested in the categorized data. An application that wants to handle the
+scanned NFC tag can <a href="#filtering-intents">declare an intent filter</a> and
+request to handle the data.</p>
+
+<p>The Android Beam&trade; feature allows a device to push an NDEF message onto
+another device by physically tapping the devices together. This interaction provides an easier way
+to send data than other wireless technologies like Bluetooth, because with NFC, no manual device
+discovery or pairing is required. The connection is automatically started when two devices come
+into range. Android Beam is available through a set of NFC APIs, so any application can transmit
+information between devices. For example, the Contacts, Browser, and YouTube applications use
+Android Beam to share contacts, web pages, and videos with other devices.
+</p>
+
+
+<h2 id="tag-dispatch">The Tag Dispatch System</h2>
+
+<p>Android-powered devices are usually looking for NFC tags when the screen
+is unlocked, unless NFC is disabled in the device's Settings menu.
+When an Android-powered device discovers an NFC tag, the desired behavior
+is to have the most appropriate activity handle the intent without asking the user what application
+to use. Because devices scan NFC tags at a very short range, it is likely that making users manually
+select an activity would force them to move the device away from the tag and break the connection.
+You should develop your activity to only handle the NFC tags that your activity cares about to
+prevent the Activity Chooser from appearing.</p>
+
+<p>To help you with this goal, Android provides a special tag dispatch system that analyzes scanned
+NFC tags, parses them, and tries to locate applications that are interested in the scanned data. It
+does this by:</p>
+
+<ol>
+  <li>Parsing the NFC tag and figuring out the MIME type or a URI that identifies the data payload
+  in the tag.</li>
+  <li>Encapsulating the MIME type or URI and the payload into an intent. These first two
+  steps are described in <a href="#ndef">How NFC tags are mapped to MIME types and URIs</a>.</li>
+  <li>Starts an activity based on the intent. This is described in
+  <a href="#dispatching">How NFC Tags are Dispatched to Applications</a>.</li>
+</ol>
+
+<h3 id="ndef">How NFC tags are mapped to MIME types and URIs</h3>
+<p>Before you begin writing your NFC applications, it is important to understand the different
+types of NFC tags, how the tag dispatch system parses NFC tags, and the special work that the tag
+dispatch system does when it detects an NDEF message. NFC tags come in a
+wide array of technologies and can also have data written to them in many different ways.
+Android has the most support for the NDEF standard, which is defined by the <a
+href="http://www.nfc-forum.org/home">NFC Forum</a>.
+</p>
+
+<p>NDEF data is encapsulated inside a message ({@link android.nfc.NdefMessage}) that contains one
+or more records ({@link android.nfc.NdefRecord}). Each NDEF record must be well-formed according to
+the specification of the type of record that you want to create. Android
+also supports other types of tags that do not contain NDEF data, which you can work with by using
+the classes in the {@link android.nfc.tech} package. To learn more
+about these technologies, see the <a href="{@docRoot}guide/topics/connectivity/nfc/advanced-nfc.html">Advanced
+NFC</a> topic. Working with these other types of tags involves
+writing your own protocol stack to communicate with the tags, so we recommend using NDEF when
+possible for ease of development and maximum support for Android-powered devices.
+</p>
+
+<p class="note"><strong>Note:</strong>
+To download complete NDEF specifications, go to the <a
+href="http://www.nfc-forum.org/specs/spec_license">NFC Forum Specification Download</a> site and see
+<a href="#creating-records">Creating common types of NDEF records</a> for examples of how to
+construct NDEF records. </p>
+
+<p>Now that you have some background in NFC tags, the following sections describe in more detail how
+Android handles NDEF formatted tags. When an Android-powered device scans an NFC tag containing NDEF
+formatted data, it parses the message and tries to figure out the data's MIME type or identifying
+URI. To do this, the system reads the first {@link android.nfc.NdefRecord} inside the {@link
+android.nfc.NdefMessage} to determine how to interpret the entire NDEF message (an NDEF message can
+have multiple NDEF records). In a well-formed NDEF message, the first {@link android.nfc.NdefRecord}
+contains the following fields:
+<dl>
+  <dt><strong>3-bit TNF (Type Name Format)</strong></dt>
+  <dd>Indicates how to interpret the variable length type field. Valid values are described in
+described in <a href="#table1">Table 1</a>.</dd>
+
+  <dt><strong>Variable length type</strong></dt>
+  <dd>Describes the type of the record. If using {@link android.nfc.NdefRecord#TNF_WELL_KNOWN}, use
+this field to specify the Record Type Definition (RTD). Valid RTD values are described in <a
+href="#table2">Table 2</a>.</dd>
+
+<dt><strong>Variable length ID</strong></dt>
+<dd>A unique identifier for the record. This field is not used often, but
+if you need to uniquely identify a tag, you can create an ID for it.</dd>
+
+<dt><strong>Variable length payload</strong></dt>
+<dd>The actual data payload that you want to read or write. An NDEF
+message can contain multiple NDEF records, so don't assume the full payload is in the first NDEF
+record of the NDEF message.</dd>
+
+</dl>
+
+<p>The tag dispatch system uses the TNF and type fields to try to map a MIME type or URI to the
+NDEF message. If successful, it encapsulates that information inside of a {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent along with the actual payload. However, there
+are cases when the tag dispatch system cannot determine the type of data based on the first NDEF
+record. This happens when the NDEF data cannot be mapped to a MIME type or URI, or when the
+NFC tag does not contain NDEF data to begin with. In such cases, a {@link
+android.nfc.Tag} object that has information about the tag's technologies and the payload are
+encapsulated inside of a {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent instead.</p>
+
+<p>
+<a href="#table1">Table 1.</a> describes how the tag dispatch system maps TNF and type
+fields to MIME types or URIs. It also describes which TNFs cannot be mapped to a MIME type or URI.
+In these cases, the tag dispatch system falls back to
+{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.
+
+<p>For example, if the tag dispatch system encounters a record of type {@link
+android.nfc.NdefRecord#TNF_ABSOLUTE_URI}, it maps the variable length type field of that record
+into a URI. The tag dispatch system encapsulates that URI in the data field of an {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent along with other information about the tag,
+such as the payload. On the other hand, if it encounters a record of type {@link
+android.nfc.NdefRecord#TNF_UNKNOWN}, it creates an intent that encapsulates the tag's technologies
+instead.</p>
+
+
+<p class="table-caption" id="table1">
+  <strong>Table 1.</strong> Supported TNFs and their mappings</p>
+<table id="mappings">
+  <tr>
+    <th>Type Name Format (TNF)</th>
+    <th>Mapping</th>
+  </tr>
+  <tr>
+    <td>{@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI}</td>
+    <td>URI based on the type field.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#TNF_EMPTY}</td>
+    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE}</td>
+    <td>URI based on the URN in the type field. The URN is encoded into the NDEF type field in
+        a shortened form: <code><em>&lt;domain_name&gt;:&lt;service_name&gt;</em></code>.
+        Android maps this to a URI in the form:
+        <code>vnd.android.nfc://ext/<em>&lt;domain_name&gt;:&lt;service_name&gt;</em></code>.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#TNF_MIME_MEDIA}</td>
+    <td>MIME type based on the type field.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#TNF_UNCHANGED}</td>
+    <td>Invalid in the first record, so falls back to
+        {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#TNF_UNKNOWN}</td>
+    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#TNF_WELL_KNOWN}</td>
+    <td>MIME type or URI depending on the Record Type Definition (RTD), which you set in the
+type field. See <a  href="#well_known">Table 2.</a> for more information on
+available RTDs and their mappings.</td>
+  </tr>
+</table>
+
+<p class="table-caption" id="table2">
+  <strong>Table 2.</strong> Supported RTDs for TNF_WELL_KNOWN and their
+mappings</p>
+<table id="well-known">
+  <tr>
+    <th>Record Type Definition (RTD)</th>
+    <th>Mapping</th>
+  </tr>
+  <tr>
+    <td>{@link android.nfc.NdefRecord#RTD_ALTERNATIVE_CARRIER}</td>
+    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_CARRIER}</td>
+    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_REQUEST}</td>
+    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_SELECT}</td>
+    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#RTD_SMART_POSTER}</td>
+    <td>URI based on parsing the payload.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#RTD_TEXT}</td>
+    <td>MIME type of <code>text/plain</code>.</td>
+  </tr>
+    <td>{@link android.nfc.NdefRecord#RTD_URI}</td>
+    <td>URI based on payload.</td>
+  </tr>
+</table>
+
+<h3 id="dispatching">How NFC Tags are Dispatched to Applications</h3>
+
+<p>When the tag dispatch system is done creating an intent that encapsulates the NFC tag and its
+identifying information, it sends the intent to an interested application that
+filters for the intent. If more than one application can handle the intent, the Activity Chooser
+is presented so the user can select the Activity. The tag dispatch system defines three intents,
+which are listed in order of highest to lowest priority:</p>
+
+<ol>
+  <li>
+      {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}: This intent is used to start an
+Activity when a tag that contains an NDEF payload is scanned and is of a recognized type. This is
+the highest priority intent, and the tag dispatch system tries to start an Activity with this
+intent before any other intent, whenever possible.
+  </li>
+
+    <li>{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}: If no activities register to
+handle the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+intent, the tag dispatch system tries to start an application with this intent. This
+intent is also directly started (without starting {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} first) if the tag that is scanned
+contains NDEF data that cannot be mapped to a MIME type or URI, or if the tag does not contain NDEF
+data but is of a known tag technology.
+</li>
+
+    <li>{@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}: This intent is started
+    if no activities handle the {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}
+    intents.</li>
+  </ol>
+
+<p>The basic way the tag dispatch system works is as follows:</p>
+
+<ol>
+  <li>Try to start an Activity with the intent that was created by the tag dispatch system
+when parsing the NFC tag (either
+{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}).</li>
+  <li>If no activities filter for that intent, try to start an Activity with the next
+  lowest priority intent (either {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}) until an application filters for the
+  intent or until the tag dispatch system tries all possible intents.</li>
+  <li>If no applications filter for any of the intents, do nothing.</li>
+</ol>
+
+<img src="{@docRoot}images/nfc_tag_dispatch.png" />
+
+<p class="figure"><strong>Figure 1. </strong> Tag Dispatch System</p>
+
+
+<p>Whenever possible, work with NDEF messages and the {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent, because it is the most specific out of
+the three. This intent allows you to start your application at a more appropriate time than the
+other two intents, giving the user a better experience.</p>
+
+<h2 id="manifest">Requesting NFC Access in the Android Manifest</h2>
+
+  <p>Before you can access a device's NFC hardware and properly handle NFC intents, declare these
+  items in your <code>AndroidManifest.xml</code> file:</p>
+
+  <ul>
+    <li>The NFC <code>&lt;uses-permission&gt;</code> element to access the NFC hardware:
+      <pre>
+&lt;uses-permission android:name="android.permission.NFC" /&gt;
+</pre>
+    </li>
+
+    <li>The minimum SDK version that your application can support. API level 9 only supports
+    limited tag dispatch via {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, and only gives
+    access to NDEF messages via the {@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} extra. No
+    other tag properties or I/O operations are accessible. API level 10
+    includes comprehensive reader/writer support as well as foreground NDEF pushing, and API level
+    14 provides an easier way to push NDEF messages to other devices with Android Beam and extra
+    convenience methods to create NDEF records.
+<pre class="pretty-print">
+&lt;uses-sdk android:minSdkVersion="10"/&gt;
+</pre>
+    </li>
+
+    <li>The <code>uses-feature</code> element so that your application shows up in Google
+Play only for devices that have NFC hardware:
+      <pre>
+&lt;uses-feature android:name="android.hardware.nfc" android:required="true" /&gt;
+</pre>
+<p>If your application uses NFC functionality, but that functionality is not crucial to your
+application, you can omit the <code>uses-feature</code> element and check for NFC avalailbility at
+runtime by checking to see if {@link android.nfc.NfcAdapter#getDefaultAdapter getDefaultAdapter()}
+is <code>null</code>.</p>
+    </li>
+  </ul>
+
+  <h2 id="filtering-intents">Filtering for NFC Intents</h2>
+
+  <p>To start your application when an NFC tag that you want to handle is scanned, your application
+can filter for one, two, or all three of the NFC intents in the Android manifest. However, you
+usually want to filter for the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent for the
+most control of when your application starts. The {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent is a fallback for {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} when no applications filter for
+ {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or for when the payload is not
+NDEF. Filtering for {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} is usually too general of a
+category to filter on.  Many applications will filter for {@link
+android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} before {@link
+android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, so your application has a low probability of
+starting. {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} is only available as a last resort
+for applications to filter for in the cases where no other applications are installed to handle the
+{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}intent.</p>
+
+<p>Because NFC tag deployments vary and are many times not under your control, this is not always
+possible, which is why you can fallback to the other two intents when necessary. When you have
+control over the types of tags and data written, it is recommended that you use NDEF to format your
+tags. The following sections describe how to filter for each type of intent.</p>
+
+
+<h3 id="ndef-disc">ACTION_NDEF_DISCOVERED</h3>
+<p>
+To filter for {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intents, declare the
+intent filter along with the type of data that you want to filter for. The
+following example filters for {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+intents with a MIME type of <code>text/plain</code>:
+</p>
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
+    &lt;category android:name="android.intent.category.DEFAULT"/&gt;
+    &lt;data android:mimeType="text/plain" /&gt;
+&lt;/intent-filter&gt;
+</pre>
+<p>The following example filters for a URI in the form of
+<code>http://developer.android.com/index.html</code>.
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
+    &lt;category android:name="android.intent.category.DEFAULT"/&gt;
+   &lt;data android:scheme="http"
+              android:host="developer.android.com"
+              android:pathPrefix="/index.html" />
+&lt;/intent-filter&gt;
+</pre>
+
+
+  <h3 id="tech-disc">ACTION_TECH_DISCOVERED</h3>
+
+  <p>If your activity filters for the {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent,
+you must create an XML resource file that specifies the technologies that your activity supports
+within a <code>tech-list</code> set. Your activity is
+  considered a match if a <code>tech-list</code> set is a subset of the technologies that are
+  supported by the tag, which you can obtain by calling {@link android.nfc.Tag#getTechList
+  getTechList()}.</p>
+
+  <p>For example, if the tag that is scanned supports MifareClassic, NdefFormatable, and NfcA, your
+  <code>tech-list</code> set must specify all three, two, or one of the technologies (and nothing
+  else) in order for your activity to be matched.</p>
+
+  <p>The following sample defines all of the technologies. You can remove the ones that you do not
+  need. Save this file (you can name it anything you wish) in the
+  <code>&lt;project-root&gt;/res/xml</code> folder.</p>
+  <pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+    &lt;tech-list&gt;
+        &lt;tech&gt;android.nfc.tech.IsoDep&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.NfcA&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.NfcB&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.NfcF&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.NfcV&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.NdefFormatable&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.MifareClassic&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.MifareUltralight&lt;/tech&gt;
+    &lt;/tech-list&gt;
+&lt;/resources&gt;
+</pre>
+
+  <p>You can also specify multiple <code>tech-list</code> sets. Each of the <code>tech-list</code>
+  sets is considered independently, and your activity is considered a match if any single
+  <code>tech-list</code> set is a subset of the technologies that are returned by {@link
+  android.nfc.Tag#getTechList getTechList()}. This provides <code>AND</code> and <code>OR</code>
+  semantics for matching technologies. The following example matches tags that can support the
+  NfcA and Ndef technologies or can support the NfcB and Ndef technologies:</p>
+  <pre>
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+    &lt;tech-list&gt;
+        &lt;tech&gt;android.nfc.tech.NfcA&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
+    &lt;/tech-list&gt;
+&lt;/resources&gt;
+
+&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
+    &lt;tech-list&gt;
+        &lt;tech&gt;android.nfc.tech.NfcB&lt;/tech&gt;
+        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
+    &lt;/tech-list&gt;
+&lt;/resources&gt;
+</pre>
+
+  <p>In your <code>AndroidManifest.xml</code> file, specify the resource file that you just created
+  in the <code>&lt;meta-data&gt;</code> element inside the <code>&lt;activity&gt;</code>
+  element like in the following example:</p>
+  <pre>
+&lt;activity&gt;
+...
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.TECH_DISCOVERED"/&gt;
+&lt;/intent-filter&gt;
+
+&lt;meta-data android:name="android.nfc.action.TECH_DISCOVERED"
+    android:resource="@xml/nfc_tech_filter" /&gt;
+...
+&lt;/activity&gt;
+</pre>
+
+<p>For more information about working with tag technologies and the {@link
+android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent, see <a
+href="{@docRoot}guide/topics/connectivity/nfc/advanced-nfc.html#tag-tech">Working with Supported Tag
+Technologies</a> in the Advanced NFC document.</p>
+<h3 id="tag-disc">ACTION_TAG_DISCOVERED</h3>
+<p>To filter for {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} use the following intent
+filter:</p>
+
+
+<pre>&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.TAG_DISCOVERED"/&gt;
+&lt;/intent-filter&gt;
+</pre>
+
+
+
+<h3 id="obtain-info">Obtaining information from intents</h3>
+
+<p>If an activity starts because of an NFC intent, you can obtain information about the scanned NFC
+tag from the intent. Intents can contain the following extras depending on the tag that was scanned:
+
+<ul>
+  <li>{@link android.nfc.NfcAdapter#EXTRA_TAG} (required): A {@link android.nfc.Tag} object
+representing the scanned tag.</li>
+  <li>{@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} (optional): An array of NDEF messages
+parsed from the tag. This extra is mandatory on {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED
+intents.</li>
+  <li>{@link android.nfc.NfcAdapter#EXTRA_ID} (optional): The low-level ID of the tag.</li></ul>
+
+<p>To obtain these extras, check to see if your activity was launched with one of
+the NFC intents to ensure that a tag was scanned, and then obtain the extras out of the
+intent. The following example checks for the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
+intent and gets the NDEF messages from an intent extra.</p>
+
+<pre>
+public void onResume() {
+    super.onResume();
+    ...
+    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
+        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
+        if (rawMsgs != null) {
+            msgs = new NdefMessage[rawMsgs.length];
+            for (int i = 0; i &lt; rawMsgs.length; i++) {
+                msgs[i] = (NdefMessage) rawMsgs[i];
+            }
+        }
+    }
+    //process the msgs array
+}
+</pre>
+
+<p>Alternatively, you can obtain a {@link android.nfc.Tag} object from the intent, which will
+contain the payload and allow you to enumerate the tag's technologies:</p>
+
+<pre>Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);</pre>
+
+
+<h2 id="creating-records">Creating Common Types of NDEF Records</h2>
+<p>This section describes how to create common types of NDEF records to help you when writing to
+NFC tags or sending data with Android Beam. It also describes how to create the corresponding
+intent filter for the record. All of these NDEF record examples should be in the first NDEF
+record of the NDEF message that you are writing to a tag or beaming.</p>
+
+<h3 id="abs-uri">TNF_ABSOLUTE_URI</h3>
+<p>Given the following {@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI} NDEF record, which is
+stored as the first record inside of an {@link android.nfc.NdefMessage}:</p>
+
+<pre>
+NdefRecord uriRecord = new NdefRecord(
+    NdefRecord.TNF_ABSOLUTE_URI ,
+    "http://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")),
+    new byte[0], new byte[0]);
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
+    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+    &lt;data android:scheme="http"
+        android:host="developer.android.com"
+        android:pathPrefix="/index.html" /&gt;
+&lt;/intent-filter&gt;
+</pre>
+
+
+<h3 id="mime">TNF_MIME_MEDIA</h3>
+<p>Given the following {@link android.nfc.NdefRecord#TNF_MIME_MEDIA} NDEF record, which is stored as
+the first record inside
+of an {@link android.nfc.NdefMessage}:</p>
+<pre>
+NdefRecord mimeRecord = new NdefRecord(
+    NdefRecord.TNF_MIME_MEDIA ,
+    "application/com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
+    new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
+    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+    &lt;data android:mimeType="application/com.example.android.beam" /&gt;
+&lt;/intent-filter&gt;
+</pre>
+
+
+<h3 id="well-known-text">TNF_WELL_KNOWN with RTD_TEXT</h3>
+
+<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
+the first record inside of an {@link android.nfc.NdefMessage}:</p>
+<pre>
+public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
+    byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
+    Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
+    byte[] textBytes = payload.getBytes(utfEncoding);
+    int utfBit = encodeInUtf8 ? 0 : (1 &lt;&lt; 7);
+    char status = (char) (utfBit + langBytes.length);
+    byte[] data = new byte[1 + langBytes.length + textBytes.length];
+    data[0] = (byte) status;
+    System.arraycopy(langBytes, 0, data, 1, langBytes.length);
+    System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
+    NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
+    NdefRecord.RTD_TEXT, new byte[0], data);
+    return record;
+}
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
+    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+    &lt;data android:mimeType="text/plain" /&gt;
+&lt;/intent-filter&gt;
+</pre>
+
+
+<h3 id="well-known-uri">TNF_WELL_KNOWN with RTD_URI</h3>
+
+<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
+the first record inside of an {@link android.nfc.NdefMessage}:</p>
+
+<pre>
+byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII"));
+byte[] payload = new byte[uriField.length + 1];              //add 1 for the URI Prefix
+byte payload[0] = 0x01;                                      //prefixes http://www. to the URI
+System.arraycopy(uriField, 0, payload, 1, uriField.length);  //appends URI to payload
+NdefRecord rtdUriRecord = new NdefRecord(
+    NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
+</pre>
+
+<p>the intent filter would look like this:</p>
+
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
+    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+    &lt;data android:scheme="http"
+        android:host="example.com"
+        android:pathPrefix="" /&gt;
+&lt;/intent-filter&gt;
+</pre>
+
+<h3 id="ext-type">TNF_EXTERNAL_TYPE</h3>
+<p>Given the following {@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} NDEF record, which is stored
+as the first record inside of an {@link android.nfc.NdefMessage}:</p>
+
+<pre>
+byte[] payload;
+...
+NdefRecord mimeRecord = new NdefRecord(
+    NdefRecord.TNF_EXTERNAL_TYPE, "example.com:externalType", new byte[0], payload);
+</pre>
+
+<p>the intent filter would look like this:</p>
+<pre>
+&lt;intent-filter&gt;
+    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
+    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+    &lt;data android:scheme="vnd.android.nfc"
+        android:host="ext"
+        android:pathPrefix="/example.com:externalType"/&gt;
+&lt;/intent-filter&gt;
+</pre>
+
+
+<p>Use TNF_EXTERNAL_TYPE for more generic NFC tag deployments to better support both
+Android-powered and non-Android-powered devices.</p>
+
+<p class="note"><strong>Note</strong>: URNs for {@link
+android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} have a canonical format of:
+<code>urn:nfc:ext:example.com:externalType</code>, however the NFC Forum RTD specification
+declares that the <code>urn:nfc:ext:</code> portion of the URN must be ommitted from the
+NDEF record. So all you need to provide is the domain (<code>example.com</code> in the example)
+and type (<code>externalType</code> in the example) separated by a colon.
+When dispatching TNF_EXTERNAL_TYPE, Android converts the <code>urn:nfc:ext:example.com:externalType</code> URN to a
+<code>vnd.android.nfc://ext/example.com:externalType</code> URI, which is what the intent filter in the example
+declares.</p>
+
+<h3 id="aar">Android Application Records</h3>
+
+<p>
+Introduced in Android 4.0 (API level 14), an Android Application Record (AAR) provides a stronger
+certainty that your application is started when an NFC tag is scanned. An AAR has the package name
+of an application embedded inside an NDEF record. You can add an AAR to any NDEF record of your NDEF message,
+because Android searches the entire NDEF message for AARs. If it finds an AAR, it starts the application based
+on the package name inside the AAR. If the application is not present on the device,
+Google Play is launched to download the application.</p>
+
+<p>AARs are useful if you want to prevent other applications from filtering for the same intent and
+potentially handling specific tags that you have deployed. AARs are only supported at the
+application level, because of the package name constraint, and not at the Activity level as with
+intent filtering. If you want to handle an intent at the Activity level, <a
+href="#filtering-intents">use intent filters</a>.
+</p>
+
+
+
+<p>If a tag contains an AAR, the tag dispatch system dispatches in the following manner:</p>
+<ol>
+  <li>Try to start an Activity using an intent filter as normal. If the Activity that matches
+the intent also matches the AAR, start the Activity.</li>
+  <li>If the Activity that filters for the intent does not match the
+AAR, if multiple Activities can handle the intent, or if no Activity handles the intent, start the
+application specified by the AAR.</li>
+  <li>If no application can start with the AAR, go to Google Play to download the
+application based on the AAR.</li>
+</ol>
+
+</p>
+
+<p class="note"><strong>Note:</strong> You can override AARs and the intent dispatch system with the <a
+href="{@docRoot}guide/topics/connectivity/nfc/advanced-nfc.html#foreground-dispatch">foreground dispatch
+system</a>, which allows a foreground activity to have priority when an NFC tag is discovered.
+With this method, the activity must be in the foreground to
+override AARs and the intent dispatch system.</p>
+
+<p>If you still want to filter for scanned tags that do not contain an AAR, you can declare
+intent filters as normal. This is useful if your application is interested in other tags
+that do not contain an AAR. For example, maybe you want to guarantee that your application handles
+proprietary tags that you deploy as well as general tags deployed by third parties. Keep in mind
+that AARs are specific to Android 4.0 devices or later, so when deploying tags, you most likely want
+to use a combination of AARs and MIME types/URIs to support the widest range of devices. In
+addition, when you deploy NFC tags, think about how you want to write your NFC tags to enable
+support for the most devices (Android-powered and other devices). You can do this by
+defining a relatively unique MIME type or URI to make it easier for applications to distinguish.
+</p>
+
+<p>Android provides a simple API to create an AAR,
+{@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}. All you need to
+do is embed the AAR anywhere in your {@link android.nfc.NdefMessage}. You do not want
+to use the first record of your {@link android.nfc.NdefMessage}, unless the AAR is the only
+record in the {@link android.nfc.NdefMessage}. This is because the Android
+system checks the first record of an {@link android.nfc.NdefMessage} to determine the MIME type or
+URI of the tag, which is used to create an intent for applications to filter. The following code
+shows you how to create an AAR:</p>
+
+<pre>
+NdefMessage msg = new NdefMessage(
+        new NdefRecord[] {
+            ...,
+            NdefRecord.createApplicationRecord("com.example.android.beam")}
+</pre>
+
+
+<h2 id="p2p">Beaming NDEF Messages to Other Devices</h2>
+
+<p>Android Beam allows simple peer-to-peer data exchange between two Android-powered devices. The
+application that wants to beam data to another device must be in the foreground and the device
+receiving the data must not be locked. When the beaming device comes in close enough contact with a
+receiving device, the beaming device displays the "Touch to Beam" UI. The user can then choose
+whether or not to beam the message to the receiving device.</p>
+
+<p class="note"><strong>Note:</strong> Foreground NDEF pushing was available at API level 10,
+which provides similar functionality to Android Beam. These APIs have since been deprecated, but
+are available to support older devices. See {@link android.nfc.NfcAdapter#enableForegroundNdefPush
+enableForegroundNdefPush()} for more information.</p>
+
+<p>You can enable Android Beam for your application by calling one of the two methods:</p>
+  <ul>
+    <li>{@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()}: Accepts an
+{@link android.nfc.NdefMessage} to set as the message to beam. Automatically beams the message
+when two devices are in close enough proximity.</li>
+    <li>{@link android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}:
+Accepts a callback that contains a
+{@link android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
+which is called when a device is in range to beam data to. The callback lets you create
+the NDEF message only when necessary.</li>
+  </ul>
+
+<p>An activity can only push one NDEF message at a time, so {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()} takes precedence
+over {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} if both are set. To use
+Android Beam, the following general guidelines must be met:
+</p>
+
+  <ul>
+    <li>The activity that is beaming the data must be in the foreground. Both devices must have
+their screens unlocked.</li>
+
+    <li>You must encapsulate the data that you are beaming in an {@link android.nfc.NdefMessage}
+    object.</li>
+
+    <li>The NFC device that is receiving the beamed data must support the
+    <code>com.android.npp</code> NDEF push protocol or NFC Forum's SNEP (Simple NDEF Exchange
+Protocol). The <code>com.android.npp</code> protocol is required for devices on API level 9 (Android
+2.3) to API level 13 (Android 3.2). <code>com.android.npp</code> and SNEP are both required on
+API level 14 (Android 4.0) and later.</li>
+</li>
+  </ul>
+
+  <p class="note"><strong>Note:</strong> If your activity enables Android Beam and is
+in the foreground, the standard intent dispatch system is disabled. However, if your activity also
+enables <a href="{@docRoot}guide/topics/connectivity/nfc/advanced-nfc.html#foreground-dispatch">foreground
+dispatching</a>, then it can still scan tags that match the intent filters set in the foreground
+dispatching.</p>
+
+  <p>To enable Android Beam:</p>
+
+  <ol>
+    <li>Create an {@link android.nfc.NdefMessage} that contains the {@link android.nfc.NdefRecord}s
+that you want to push onto the other device.</li>
+
+    <li>Call {@link
+android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} with a {@link
+android.nfc.NdefMessage} or call {@link
+android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback} passing in a {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback} object in the <code>onCreate()</code> method of
+your activity. These methods require at least one activity that you want to enable with Android
+Beam, along with an optional list of other activities to activate.
+
+<p>In general, you normally use {@link
+android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} if your Activity only needs to
+push the same NDEF message at all times, when two devices are in range to communicate. You use
+{@link android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback} when your
+application cares about the current context of the application and wants to push an NDEF message
+depending on what the user is doing in your application.</p>
+    </li>
+  </ol>
+
+<p>The following sample shows how a simple activity calls {@link
+android.nfc.NfcAdapter.CreateNdefMessageCallback} in the <code>onCreate()</code> method of an
+activity (see <a href="{@docRoot}resources/samples/AndroidBeamDemo/index.html">AndroidBeamDemo</a>
+for the complete sample). This example also has methods to help you create a MIME record:</p>
+
+<pre id="code-example">
+package com.example.android.beam;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.nfc.NdefMessage;
+import android.nfc.NdefRecord;
+import android.nfc.NfcAdapter;
+import android.nfc.NfcAdapter.CreateNdefMessageCallback;
+import android.nfc.NfcEvent;
+import android.os.Bundle;
+import android.os.Parcelable;
+import android.widget.TextView;
+import android.widget.Toast;
+import java.nio.charset.Charset;
+
+
+public class Beam extends Activity implements CreateNdefMessageCallback {
+    NfcAdapter mNfcAdapter;
+    TextView textView;
+
+    &#064;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);
+        TextView textView = (TextView) findViewById(R.id.textView);
+        // Check for available NFC Adapter
+        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
+        if (mNfcAdapter == null) {
+            Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show();
+            finish();
+            return;
+        }
+        // Register callback
+        mNfcAdapter.setNdefPushMessageCallback(this, this);
+    }
+
+    &#064;Override
+    public NdefMessage createNdefMessage(NfcEvent event) {
+        String text = ("Beam me up, Android!\n\n" +
+                "Beam Time: " + System.currentTimeMillis());
+        NdefMessage msg = new NdefMessage(
+                new NdefRecord[] { createMimeRecord(
+                        "application/com.example.android.beam", text.getBytes())
+         /**
+          * The Android Application Record (AAR) is commented out. When a device
+          * receives a push with an AAR in it, the application specified in the AAR
+          * is guaranteed to run. The AAR overrides the tag dispatch system.
+          * You can add it back in to guarantee that this
+          * activity starts when receiving a beamed message. For now, this code
+          * uses the tag dispatch system.
+          */
+          //,NdefRecord.createApplicationRecord("com.example.android.beam")
+        });
+        return msg;
+    }
+
+    &#064;Override
+    public void onResume() {
+        super.onResume();
+        // Check to see that the Activity started due to an Android Beam
+        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
+            processIntent(getIntent());
+        }
+    }
+
+    &#064;Override
+    public void onNewIntent(Intent intent) {
+        // onResume gets called after this to handle the intent
+        setIntent(intent);
+    }
+
+    /**
+     * Parses the NDEF Message from the intent and prints to the TextView
+     */
+    void processIntent(Intent intent) {
+        textView = (TextView) findViewById(R.id.textView);
+        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
+                NfcAdapter.EXTRA_NDEF_MESSAGES);
+        // only one message sent during the beam
+        NdefMessage msg = (NdefMessage) rawMsgs[0];
+        // record 0 contains the MIME type, record 1 is the AAR, if present
+        textView.setText(new String(msg.getRecords()[0].getPayload()));
+    }
+
+    /**
+     * Creates a custom MIME type encapsulated in an NDEF record
+     */
+    public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
+        byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
+        NdefRecord mimeRecord = new NdefRecord(
+                NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
+        return mimeRecord;
+    }
+}
+</pre>
+
+<p>Note that this code comments out an AAR, which you can remove. If you enable the AAR, the
+application specified in the AAR always receives the Android Beam message. If the application is not
+present, Google Play launches to download the application. Therefore, the following intent
+filter is not technically necessary for Android 4.0 devices or later if the AAR is used:
+</p>
+
+<pre>
+&lt;intent-filter&gt;
+  &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
+  &lt;category android:name="android.intent.category.DEFAULT"/&gt;
+  &lt;data android:mimeType="application/com.example.android.beam"/&gt;
+&lt;/intent-filter&gt;
+</pre>
+<p>With this intent filter, the <code>com.example.android.beam</code> application now can be started
+when it scans an NFC tag or receives an Android Beam with an AAR of
+type <code>com.example.android.beam</code>, or when an NDEF formatted message contains a MIME record
+of type <code>application/com.example.android.beam</code>.</p>
+
+<p>Even though AARs guarantee an application is started or downloaded, intent filters are
+recommended, because they let you start an Activity of your choice in your
+application instead of always starting the main Activity within the package specified by an AAR.
+AARs do not have Activity level granularity. Also, because some Android-powered devices do not
+support AARs, you should also embed identifying information in the first NDEF record of your NDEF
+messages and filter for that as well, just in case. See <a href="#creating-records">Creating Common
+Types of NDEF records</a> for more information on how to create records.
+</p>
diff --git a/docs/html/guide/topics/connectivity/sip.jd b/docs/html/guide/topics/connectivity/sip.jd
new file mode 100644
index 0000000..a5f0e2e
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/sip.jd
@@ -0,0 +1,490 @@
+page.title=Session Initiation Protocol
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+    <h2>In this document</h2>
+    <ol>
+
+      <li><a href="#requirements">Requirements and Limitations</a></li>
+      <li><a href="#classes">Classes and Interfaces</a></li>
+      <li><a href="#manifest">Creating the Manifest</a></li>
+      <li><a href="#manager">Creating a SIP Manager</a></li>
+      <li><a href="#profiles">Registering with a SIP Server</a></li>
+      <li><a href="#audio">Making an Audio Call</a></li>
+      <li><a href="#receiving">Receiving Calls</a></li>   
+      <li><a href="#testing">Testing SIP Applications</a></li>
+    </ol>
+    
+  <h2>Key classes</h2>
+    <ol>
+      <li>{@link android.net.sip.SipManager}</li>
+      <li>{@link android.net.sip.SipProfile}</li>
+      <li>{@link android.net.sip.SipAudioCall}</li>
+
+    </ol>
+    
+   <h2>Related samples</h2>
+   <ol>
+     <li> <a href="{@docRoot}resources/samples/SipDemo/index.html"> SipDemo</a></li>
+   </ol>
+  </div>
+</div>
+
+<p>Android provides an API that supports the Session Initiation Protocol (SIP).
+This lets you add SIP-based internet telephony features to your applications.
+Android includes a full SIP protocol stack and integrated call management
+services that let applications easily set up outgoing and incoming voice calls,
+without having to manage sessions, transport-level communication, or audio
+record or playback directly.</p>
+
+<p>Here are examples of the types of applications that might use the SIP API:</p>
+<ul>
+  <li>Video conferencing.</li>
+  <li>Instant messaging.</li>
+</ul>
+<h2 id="requirements">Requirements and Limitations</h2>
+<p>Here are the requirements for developing a SIP application:</p>
+<ul>
+  
+  <li>You must have a mobile device that is running Android 2.3 or higher. </li>
+  
+  <li>SIP runs over a wireless data connection, so your device must have a data
+connection (with a mobile data service or Wi-Fi)</span>. This means that you
+can't test on AVD&#8212;you can only test on a physical device. For details, see
+<a href="#testing">Testing SIP Applications</a>.</li>
+
+  <li>Each participant in the application's communication session must have a
+SIP account. There are many different SIP providers that offer SIP accounts.</li>
+</ul>
+
+
+<h2 id="classes">SIP API Classes and Interfaces</h2>
+
+<p>Here is a summary of the classes and one interface
+(<code>SipRegistrationListener</code>) that are included in the Android SIP
+API:</p>
+
+<table>
+  <thead>
+    <tr>
+      <th>Class/Interface</th>
+      <th>Description</th>
+    </tr>
+  </thead>
+  <tbody>
+    <tr>
+      <td>{@link android.net.sip.SipAudioCall}</td>
+      <td>Handles an Internet audio call over SIP.</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipAudioCall.Listener}</td>
+      <td>Listener for events relating to a SIP call, such as when a call is being
+received ("on ringing") or a call is outgoing ("on calling").</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipErrorCode}</td>
+      <td>Defines error codes returned during SIP actions.</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipManager}</td>
+      <td>Provides APIs for SIP tasks, such as initiating SIP connections, and provides access
+to related SIP services.</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipProfile}</td>
+      <td>Defines a SIP profile, including a SIP account, domain and server information.
+</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipProfile.Builder}</td>
+      <td>Helper class for creating a SipProfile.</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipSession}</td>
+      <td>Represents a SIP session that is associated with a SIP dialog or a standalone transaction
+not within a dialog.</td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipSession.Listener}</td>
+      <td>Listener for events relating to a SIP session, such as when a session is being registered
+("on registering") or a call is outgoing ("on calling"). </td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipSession.State}</td>
+      <td>Defines SIP session states, such as "registering", "outgoing call", and "in call". </td>
+    </tr>
+    <tr>
+      <td>{@link android.net.sip.SipRegistrationListener}</td>
+      <td>An interface that is a listener for SIP registration events.</td>
+    </tr>
+  </tbody>
+</table>
+
+<h2 id="manifest">Creating the Manifest</h2>
+
+<p>If you are developing an application that uses the SIP API, remember that the
+feature is supported only on Android 2.3 (API level 9) and higher versions of
+the platform. Also, among devices running Android 2.3 (API level 9) or higher,
+not all devices will offer SIP support.</p>
+
+<p>To use SIP, add the following permissions to your application's manifest:</p>
+<ul>
+  <li><code>android.permission.USE_SIP</code></li>
+  <li><code>android.permission.INTERNET</code></li>
+</ul>
+
+<p> To ensure that your application can only be installed on devices that are
+capable of supporting SIP,  add the following to your application's
+manifest:</p>
+
+<ul>
+  <li><code>&lt;uses-sdk android:minSdkVersion=&quot;9&quot; /&gt;</code>. This 
+ indicates that your application requires   Android 2.3 or higher. For more
+information, see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API
+Levels</a> and the documentation for the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a
+> element.</li>
+</ul>
+
+<p>To control how your application is filtered from devices that do not support
+SIP (for example, on Google Play), add the following to your application's
+manifest:</p>
+
+<ul>
+
+  <li><code>&lt;uses-feature android:name=&quot;android.hardware.sip.voip&quot;
+/&gt;</code>. This states that your application uses the SIP API. The
+declaration should include an <code>android:required</code> attribute that
+indicates whether you want the application to be filtered from devices that do
+not offer SIP   support. Other <code>&lt;uses-feature&gt;</code> declarations
+may also be   needed, depending on your implementation. For more information,
+see the   documentation for the <a
+href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-
+feature&gt;</a> element.</li>
+  
+</ul>
+<p>If your application is designed to receive calls, you must also define a receiver ({@link android.content.BroadcastReceiver} subclass) in the application's manifest: </p>
+
+<ul>
+  <li><code>&lt;receiver android:name=&quot;.IncomingCallReceiver&quot; android:label=&quot;Call Receiver&quot;/&gt;</code></li>
+</ul>
+<p>Here are excerpts from the <strong>SipDemo</strong> manifest:</p>
+
+
+
+<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
+          package=&quot;com.example.android.sip&quot;&gt;
+  ...
+     &lt;receiver android:name=&quot;.IncomingCallReceiver&quot; android:label=&quot;Call Receiver&quot;/&gt;
+  ...
+  &lt;uses-sdk android:minSdkVersion=&quot;9&quot; /&gt;
+  &lt;uses-permission android:name=&quot;android.permission.USE_SIP&quot; /&gt;
+  &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
+  ...
+  &lt;uses-feature android:name=&quot;android.hardware.sip.voip&quot; android:required=&quot;true&quot; /&gt;
+  &lt;uses-feature android:name=&quot;android.hardware.wifi&quot; android:required=&quot;true&quot; /&gt;
+  &lt;uses-feature android:name=&quot;android.hardware.microphone&quot; android:required=&quot;true&quot; /&gt;
+&lt;/manifest&gt;
+</pre>
+
+
+<h2 id="manager">Creating a SipManager</h2>
+
+<p>To use the SIP API, your application must create a {@link
+android.net.sip.SipManager} object. The {@link android.net.sip.SipManager} takes
+care of the following in your application:</p>
+
+<ul>
+  <li>Initiating SIP sessions.</li>
+  <li>Initiating and receiving calls.</li>
+  <li>Registering and unregistering with a SIP provider.</li>
+  <li>Verifying session connectivity.</li>
+</ul>
+<p>You instantiate a new {@link android.net.sip.SipManager} as follows:</p>
+<pre>public SipManager mSipManager = null;
+...
+if(mSipManager == null) {
+    mSipManager = SipManager.newInstance(this);
+}</pre>
+<h2 id="profiles">Registering with a SIP Server</h2>
+
+<p>A typical Android SIP application involves one or more users, each of whom
+has a SIP account. In an Android SIP application, each SIP account  is
+represented by  a {@link android.net.sip.SipProfile} object.</p>
+
+<p>A {@link android.net.sip.SipProfile} defines a SIP profile, including a SIP
+account, and domain and server information. The profile associated with the SIP
+account on the device running the application is called the <em>local
+profile</em>. The profile that the session is connected to is called the
+<em>peer profile</em>. When your SIP application logs into the SIP server with
+the local {@link android.net.sip.SipProfile}, this effectively registers the
+device as the location to send SIP calls to for your SIP address.</p>
+
+<p>This section shows how to create a {@link android.net.sip.SipProfile},
+register it with a SIP server, and track registration events.</p>
+
+<p>You  create a {@link android.net.sip.SipProfile} object as follows:</p>
+<pre>
+public SipProfile mSipProfile = null;
+...
+
+SipProfile.Builder builder = new SipProfile.Builder(username, domain);
+builder.setPassword(password);
+mSipProfile = builder.build();</pre>
+
+<p>The following code excerpt opens the local profile for making calls and/or
+receiving generic SIP calls. The caller can  make subsequent calls through
+<code>mSipManager.makeAudioCall</code>. This excerpt also sets the action
+<code>android.SipDemo.INCOMING_CALL</code>, which will be used by an intent
+filter when the device receives a call (see <a href="#intent_filter">Setting up
+an intent filter to receive calls</a>). This is the registration step:</p>
+
+<pre>Intent intent = new Intent();
+intent.setAction(&quot;android.SipDemo.INCOMING_CALL&quot;);
+PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);
+mSipManager.open(mSipProfile, pendingIntent, null);</pre>
+
+<p>Finally, this code sets a <code>SipRegistrationListener</code> on the {@link
+android.net.sip.SipManager}. This tracks whether the {@link
+android.net.sip.SipProfile} was successfully registered with your SIP service
+provider:<br>
+</p>
+
+<pre>mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() {
+
+public void onRegistering(String localProfileUri) {
+    updateStatus(&quot;Registering with SIP Server...&quot;);
+}
+
+public void onRegistrationDone(String localProfileUri, long expiryTime) {
+    updateStatus(&quot;Ready&quot;);
+}
+   
+public void onRegistrationFailed(String localProfileUri, int errorCode,
+    String errorMessage) {
+    updateStatus(&quot;Registration failed.  Please check settings.&quot;);
+}</pre>
+
+
+<p>When your application is done using a profile, it should close it to free
+associated objects into memory and unregister the device from the server. For
+example:</p>
+
+<pre>public void closeLocalProfile() {
+    if (mSipManager == null) {
+       return;
+    }
+    try {
+       if (mSipProfile != null) {
+          mSipManager.close(mSipProfile.getUriString());
+       }
+     } catch (Exception ee) {
+       Log.d(&quot;WalkieTalkieActivity/onDestroy&quot;, &quot;Failed to close local profile.&quot;, ee);
+     }
+}</pre>
+
+<h2 id="audio">Making an Audio Call</h2>
+<p>To make an audio call, you must have the following in place:</p>
+<ul>
+
+  <li>A {@link android.net.sip.SipProfile} that is making the call (the
+&quot;local profile&quot;), and a valid SIP address to receive the call (the
+&quot;peer profile&quot;). 
+  
+  <li>A {@link android.net.sip.SipManager} object. </li>
+</ul>
+
+<p>To make an audio call, you should set up a {@link
+android.net.sip.SipAudioCall.Listener}. Much of the client's interaction with
+the SIP stack happens through listeners. In this snippet, you see how the {@link
+android.net.sip.SipAudioCall.Listener} sets things up after the call is
+established:</p>
+
+<pre>
+SipAudioCall.Listener listener = new SipAudioCall.Listener() {
+  
+   &#64;Override
+   public void onCallEstablished(SipAudioCall call) {
+      call.startAudio();
+      call.setSpeakerMode(true);
+      call.toggleMute();
+         ...
+   }
+   
+   &#64;Override
+   public void onCallEnded(SipAudioCall call) {
+      // Do something.
+   }
+};</pre>
+
+<p>Once you've set up the {@link android.net.sip.SipAudioCall.Listener}, you can
+make the  call. The {@link android.net.sip.SipManager} method
+<code>makeAudioCall</code> takes the following parameters:</p>
+
+<ul>
+  <li>A local SIP profile (the caller).</li>
+  <li>A peer SIP profile (the user being called).</li>
+  
+  <li>A {@link android.net.sip.SipAudioCall.Listener} to listen to the call
+events from {@link android.net.sip.SipAudioCall}. This can be <code>null</code>,
+but as shown above, the listener is used to set things up once the call is
+established.</li>
+  
+  <li>The timeout value, in seconds.</li>
+</ul>
+<p>For example:</p>
+<pre> call = mSipManager.makeAudioCall(mSipProfile.getUriString(), sipAddress, listener, 30);</pre>
+
+<h2 id="receiving">Receiving Calls</h2>
+
+<p>To receive calls, a SIP application must include a subclass of {@link
+android.content.BroadcastReceiver} that has the ability to respond to an intent
+indicating that there is an incoming call. Thus, you must do the following in
+your application:</p>
+
+<ul>
+  <li>In <code>AndroidManifest.xml</code>, declare a
+<code>&lt;receiver&gt;</code>. In <strong>SipDemo</strong>, this is
+<code>&lt;receiver android:name=&quot;.IncomingCallReceiver&quot;
+android:label=&quot;Call Receiver&quot;/&gt;</code>.</li>
+  
+  <li>Implement the receiver, which is a subclass of {@link
+android.content.BroadcastReceiver}. In <strong>SipDemo</strong>, this is
+<code>IncomingCallReceiver</code>.</li>
+  
+  <li>Initialize the local profile ({@link android.net.sip.SipProfile}) with a
+pending intent that fires your receiver when someone calls the local profile.
+</li>
+  
+  <li>Set up an intent filter that filters by the action that represents an
+incoming call. In <strong>SipDemo</strong>, this action is
+<code>android.SipDemo.INCOMING_CALL</code>. </li>
+</ul>
+<h4 id="BroadcastReceiver">Subclassing BroadcastReceiver</h4>
+
+<p>To receive calls, your SIP application must subclass {@link
+android.content.BroadcastReceiver}. <span id="internal-source-marker_0.">The
+Android system handles incoming SIP calls and broadcasts an &quot;incoming
+call&quot;<code></code> intent  (as defined by the application) when it receives
+a call.</span> Here is the subclassed {@link android.content.BroadcastReceiver}
+code from <strong>SipDemo</strong>. To see the full example, go to <a
+href="{@docRoot}resources/samples/SipDemo/index.html">SipDemo sample</a>, which
+is included in the SDK samples. For information on downloading and installing
+the SDK samples, see <a
+href="{@docRoot}resources/samples/get.html">
+Getting the Samples</a>. </p>
+
+<pre>/*** Listens for incoming SIP calls, intercepts and hands them off to WalkieTalkieActivity.
+ */
+public class IncomingCallReceiver extends BroadcastReceiver {
+    /**
+     * Processes the incoming call, answers it, and hands it over to the
+     * WalkieTalkieActivity.
+     * @param context The context under which the receiver is running.
+     * @param intent The intent being received.
+     */
+    &#64;Override
+    public void onReceive(Context context, Intent intent) {
+        SipAudioCall incomingCall = null;
+        try {
+            SipAudioCall.Listener listener = new SipAudioCall.Listener() {
+                &#64;Override
+                public void onRinging(SipAudioCall call, SipProfile caller) {
+                    try {
+                        call.answerCall(30);
+                    } catch (Exception e) {
+                        e.printStackTrace();
+                    }
+                }
+            };
+            WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
+            incomingCall = wtActivity.mSipManager.takeAudioCall(intent, listener);
+            incomingCall.answerCall(30);
+            incomingCall.startAudio();
+            incomingCall.setSpeakerMode(true);
+            if(incomingCall.isMuted()) {
+                incomingCall.toggleMute();
+            }
+            wtActivity.call = incomingCall;
+            wtActivity.updateStatus(incomingCall);
+        } catch (Exception e) {
+            if (incomingCall != null) {
+                incomingCall.close();
+            }
+        }
+    }
+}
+</pre>
+
+<h4 id="intent_filter">Setting up an intent filter to receive calls</h4>
+
+<p>When the SIP service  receives a new call, it  sends out an intent with the
+action  string provided by the application. In SipDemo, this action string is
+<code>android.SipDemo.INCOMING_CALL</code>. </p>
+<p>This code excerpt from <strong>SipDemo</strong> shows how the {@link
+android.net.sip.SipProfile} object gets created with a pending intent based on
+the action string <code>android.SipDemo.INCOMING_CALL</code>. The
+<code>PendingIntent</code> object   will perform a broadcast when the {@link
+android.net.sip.SipProfile}  receives a call:</p> 
+
+<pre>
+public SipManager mSipManager = null;
+public SipProfile mSipProfile = null;
+...
+
+Intent intent = new Intent(); 
+intent.setAction(&quot;android.SipDemo.INCOMING_CALL&quot;); 
+PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA); 
+mSipManager.open(mSipProfile, pendingIntent, null);</pre>
+
+<p>The broadcast will be intercepted by the intent filter, which will then fire
+the receiver (<code>IncomingCallReceiver</code>). You can specify an intent
+filter in your application's manifest file, or do it in code as in the <strong>SipDemo</strong>
+sample application's <code>onCreate()</code> method
+of the application's <code>Activity</code>:</p>
+
+<pre>
+public class WalkieTalkieActivity extends Activity implements View.OnTouchListener {
+...
+    public IncomingCallReceiver callReceiver;
+    ...
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+
+       IntentFilter filter = new IntentFilter();
+       filter.addAction(&quot;android.SipDemo.INCOMING_CALL&quot;);
+       callReceiver = new IncomingCallReceiver();
+       this.registerReceiver(callReceiver, filter);
+       ...
+    }
+    ...
+}
+</pre>
+
+
+<h2 id="testing">Testing SIP Applications</h2>
+
+<p>To test SIP applications, you need the following:</p>
+<ul>
+<li>A mobile device that is running Android 2.3 or higher. SIP runs over
+wireless, so you must test on an actual device. Testing on AVD won't work.</li>
+<li>A SIP account. There are many different SIP providers that offer SIP accounts.</li>
+<li>If you are placing a call, it must also be to a valid SIP account. </li>
+</ul>
+<p>To test a SIP application:</p>
+<ol>
+
+<li>On your device, connect to wireless (<strong>Settings > Wireless & networks
+> Wi-Fi > Wi-Fi settings</strong>)</li>
+<li>Set up your mobile device for testing, as described in <a
+href="{@docRoot}tools/device.html">Developing on a Device</a>.</li>
+<li>Run your application on your mobile device, as described in <a
+href="{@docRoot}tools/device.html">Developing on a Device</a>.</li>
+
+<li>If you are using Eclipse, you can view the application log output in Eclipse
+using LogCat (<strong>Window > Show View > Other > Android >
+LogCat</strong>).</li>
+</ol>
+
diff --git a/docs/html/guide/topics/connectivity/usb/accessory.jd b/docs/html/guide/topics/connectivity/usb/accessory.jd
new file mode 100644
index 0000000..a217767
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/usb/accessory.jd
@@ -0,0 +1,462 @@
+page.title=USB Accessory
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li>
+          <a href="#choosing">Choosing the Right USB Accessory APIs</a>
+
+          <ol>
+            <li><a href="#installing">Installing the Google APIs add-on library</a></li>
+          </ol>
+        </li>
+
+        <li>
+          <a href="#api">API Overview</a>
+
+          <ol>
+            <li><a href="#usage">Usage differences between the add-on library and the platform
+            APIs</a></li>
+          </ol>
+        </li>
+
+        <li><a href="#manifest">Android Manifest Requirements</a></li>
+
+        <li>
+          <a href="#working-a">Working with accessories</a>
+
+          <ol>
+            <li><a href="#discovering-a">Discovering an accessory</a></li>
+
+            <li><a href="#permission-a">Obtaining permission to communicate with an
+            accessory</a></li>
+
+            <li><a href="#communicating-a">Communicating with an accessory</a></li>
+
+            <li><a href="#terminating-a">Terminating communication with an accessory</a></li>
+          </ol>
+        </li>
+      </ol>
+
+      <h2>See also</h2>
+
+      <ol>
+        <li><a href="http://accessories.android.com/demokit">Android USB Accessory Development
+        Kit</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>USB accessory mode allows users to connect
+  USB host hardware specifically designed for Android-powered devices. The accessories must adhere
+  to the Android accessory protocol outlined in the <a href=
+  "http://accessories.android.com/demokit">Android Accessory Development Kit</a> documentation.
+  This allows Android-powered devices that cannot act as a USB host to still interact with USB
+  hardware. When an Android-powered device is in USB accessory mode, the attached Android USB
+  accessory acts as the host, provides power to the USB bus, and enumerates connected devices.
+  Android 3.1 (API level 12) supports USB accessory mode and the feature is also backported to
+  Android 2.3.4 (API level 10) to enable support for a broader range of devices.</p>
+
+  <h2 id="choosing">Choosing the Right USB Accessory APIs</h2>
+
+  <p>Although the USB accessory APIs were introduced to the platform in Android 3.1, they are also
+  available in Android 2.3.4 using the Google APIs add-on library. Because these APIs were
+  backported using an external library, there are two packages that you can import to support USB
+  accessory mode. Depending on what Android-powered devices you want to support, you might have to
+  use one over the other:</p>
+
+  <ul>
+    <li><code>com.android.future.usb</code>: To support USB accessory mode in Android 2.3.4, the
+    <a href="http://code.google.com/android/add-ons/google-apis/index.html">Google APIs add-on
+    library</a> includes the backported USB accessory APIs and they are contained in this
+    namespace. Android 3.1 also supports importing and calling the classes within this namespace to
+    support applications written with the add-on library. This add-on library is a thin wrapper
+    around the {@link android.hardware.usb} accessory APIs and does not support USB host mode. If
+    you want to support the widest range of devices that support USB accessory mode, use the add-on
+    library and import this package. It is important to note that not all Android 2.3.4 devices are
+    required to support the USB accessory feature. Each individual device manufacturer decides
+    whether or not to support this capability, which is why you must declare it in your manifest
+    file.</li>
+
+    <li>{@link android.hardware.usb}: This namespace contains the classes that support USB
+    accessory mode in Android 3.1. This package is included as part of the framework APIs, so
+    Android 3.1 supports USB accessory mode without the use of an add-on library. Use this package
+    if you only care about Android 3.1 or newer devices that have hardware support for USB
+    accessory mode, which you can declare in your manifest file.</li>
+  </ul>
+
+  <h3 id="installing">Installing the Google APIs add-on library</h3>
+
+  <p>If you want to install the add-on, you can do so by installing the Google APIs Android API 10
+  package with the SDK Manager. See <a href=
+  "http://code.google.com/android/add-ons/google-apis/installing.html">Installing the Google APIs
+  Add-on</a> for more information on installing the add-on library.</p>
+
+  <h2 id="api">API Overview</h2>
+
+  <p>Because the add-on library is a wrapper for the framework APIs, the classes that support the
+  USB accessory feature are similar. You can use the reference documentation for the {@link
+  android.hardware.usb} even if you are using the add-on library.</p>
+
+  <p class="note"><strong>Note:</strong> There is, however, a minor <a href="#usage">usage
+  difference</a> between the add-on library and framework APIs that you should be aware of.</p>
+
+  <p>The following table describes the classes that support the USB accessory APIs:</p>
+
+  <table>
+    <tr>
+      <th>Class</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbManager}</td>
+
+      <td>Allows you to enumerate and communicate with connected USB accessories.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbAccessory}</td>
+
+      <td>Represents a USB accessory and contains methods to access its identifying
+      information.</td>
+    </tr>
+  </table>
+
+  <h3 id="usage">Usage differences between the add-on library and platform APIs</h3>
+
+  <p>There are two usage differences between using the Google APIs add-on library and the platform
+  APIs.</p>
+
+  <p>If you are using the add-on library, you must obtain the {@link
+  android.hardware.usb.UsbManager} object in the following manner:</p>
+  <pre>
+UsbManager manager = UsbManager.getInstance(this);
+</pre>
+
+  <p>If you are not using the add-on library, you must obtain the {@link
+  android.hardware.usb.UsbManager} object in the following manner:</p>
+  <pre>
+UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
+</pre>
+
+  <p>When you filter for a connected accessory with an intent filter, the {@link
+  android.hardware.usb.UsbAccessory} object is contained inside the intent that is passed to your
+  application. If you are using the add-on library, you must obtain the {@link
+  android.hardware.usb.UsbAccessory} object in the following manner:</p>
+  <pre>
+UsbAccessory accessory = UsbManager.getAccessory(intent);
+</pre>
+
+  <p>If you are not using the add-on library, you must obtain the {@link
+  android.hardware.usb.UsbAccessory} object in the following manner:</p>
+  <pre>
+UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
+</pre>
+
+  <h2 id="manifest">Android Manifest requirements</h2>
+
+  <p>The following list describes what you need to add to your application's manifest file before
+  working with the USB accesory APIs. The <a href="#manifest-example">manifest and resource file
+  examples</a> show how to declare these items:</p>
+
+  <ul>
+    <li>Because not all Android-powered devices are guaranteed to support the USB accessory APIs,
+    include a <code>&lt;uses-feature&gt;</code> element that declares that your application uses
+    the <code>android.hardware.usb.accessory</code> feature.</li>
+
+    <li>If you are using the 
+    <a href="http://code.google.com/android/add-ons/google-apis/index.html">add-on library</a>,
+    add the <code>&lt;uses-library&gt;</code> element specifying
+    <code>com.android.future.usb.accessory</code> for the library.</li>
+
+    <li>Set the minimum SDK of the application to API Level 10 if you are using the add-on library
+    or 12 if you are using the {@link android.hardware.usb} package.</li>
+
+    <li>
+      <p>If you want your application to be notified of an attached USB accessory, specify an
+      <code>&lt;intent-filter&gt;</code> and <code>&lt;meta-data&gt;</code> element pair for the
+      <code>android.hardware.usb.action.USB_ACCESSORY_ATTACHED</code> intent in your main activity.
+      The <code>&lt;meta-data&gt;</code> element points to an external XML resource file that
+      declares identifying information about the accessory that you want to detect.</p>
+
+      <p>In the XML resource file, declare <code>&lt;usb-accessory&gt;</code> elements for the
+      accessories that you want to filter. Each <code>&lt;usb-accessory&gt;</code> can have the
+      following attributes:</p>
+
+      <ul>
+        <li><code>manufacturer</code></li>
+
+        <li><code>model</code></li>
+
+        <li><code>version</code></li>
+      </ul>
+
+      <p>Save the resource file in the <code>res/xml/</code> directory. The resource file name
+      (without the .xml extension) must be the same as the one you specified in the
+      <code>&lt;meta-data&gt;</code> element. The format for the XML resource file is also shown in
+      the <a href="#example">example</a> below.</p>
+    </li>
+  </ul>
+
+  <h3 id="manifest-example">Manifest and resource file examples</h3>
+
+  <p>The following example shows a sample manifest and its corresponding resource file:</p>
+  <pre>
+&lt;manifest ...&gt;
+    &lt;uses-feature android:name="android.hardware.usb.accessory" /&gt;
+    <!-- version must be either 10 or 12 -->
+    &lt;uses-sdk android:minSdkVersion="&lt;<em>version</em>&gt;" /&gt;
+    ...
+    &lt;application&gt;
+      &lt;uses-library android:name="com.android.future.usb.accessory" /&gt;
+        &lt;activity ...&gt;
+            ...
+            &lt;intent-filter&gt;
+                &lt;action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /&gt;
+            &lt;/intent-filter&gt;
+
+            &lt;meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
+                android:resource="@xml/accessory_filter" /&gt;
+        &lt;/activity&gt;
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+  <p>In this case, the following resource file should be saved in
+  <code>res/xml/accessory_filter.xml</code> and specifies that any accessory that has the
+  corresponding model, manufacturer, and version should be filtered. The accessory sends these
+  attributes the Android-powered device:</p>
+  <pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+
+&lt;resources&gt;
+    &lt;usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/&gt;
+&lt;/resources&gt;
+</pre>
+
+  <h2 id="working-a">Working with Accessories</h2>
+
+  <p>When users connect USB accessories to an Android-powered device, the Android system can
+  determine whether your application is interested in the connected accessory. If so, you can set
+  up communication with the accessory if desired. To do this, your application has to:</p>
+
+  <ol>
+    <li>Discover connected accessories by using an intent filter that filters for accessory
+    attached events or by enumerating connected accessories and finding the appropriate one.</li>
+
+    <li>Ask the user for permission to communicate with the accessory, if not already
+    obtained.</li>
+
+    <li>Communicate with the accessory by reading and writing data on the appropriate interface
+    endpoints.</li>
+  </ol>
+
+  <h3 id="discovering-a">Discovering an accessory</h3>
+
+  <p>Your application can discover accessories by either using an intent filter to be notified when
+  the user connects an accessory or by enumerating accessories that are already connected. Using an
+  intent filter is useful if you want to be able to have your application automatically detect a
+  desired accessory. Enumerating connected accessories is useful if you want to get a list of all
+  connected accessories or if your application did not filter for an intent.</p>
+
+  <h4 id="discover-a-intent">Using an intent filter</h4>
+
+  <p>To have your application discover a particular USB accessory, you can specify an intent filter
+  to filter for the <code>android.hardware.usb.action.USB_ACCESSORY_ATTACHED</code> intent. Along
+  with this intent filter, you need to specify a resource file that specifies properties of the USB
+  accessory, such as manufacturer, model, and version. When users connect an accessory that matches
+  your accessory filter,</p>
+
+  <p>The following example shows how to declare the intent filter:</p>
+  <pre>
+&lt;activity ...&gt;
+    ...
+    &lt;intent-filter&gt;
+        &lt;action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /&gt;
+    &lt;/intent-filter&gt;
+
+    &lt;meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
+        android:resource="@xml/accessory_filter" /&gt;
+&lt;/activity&gt;
+</pre>
+
+  <p>The following example shows how to declare the corresponding resource file that specifies the
+  USB accessories that you're interested in:</p>
+  <pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+
+&lt;resources&gt;
+    &lt;usb-accessory manufacturer="Google, Inc." model="DemoKit" version="1.0" /&gt;
+&lt;/resources&gt;
+</pre>
+
+  <p>In your activity, you can obtain the {@link android.hardware.usb.UsbAccessory} that represents
+  the attached accessory from the intent like this (with the add-on library):</p>
+  <pre>
+UsbAccessory accessory = UsbManager.getAccessory(intent);
+</pre>
+
+  <p>or like this (with the platform APIs):</p>
+  <pre>
+UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
+</pre>
+
+  <h4 id="discover-a-enumerate">Enumerating accessories</h4>
+
+  <p>You can have your application enumerate accesories that have identified themselves while your
+  application is running.</p>
+
+  <p>Use the {@link android.hardware.usb.UsbManager#getAccessoryList() getAccessoryList()} method
+  to get an array all the USB accessories that are connected:</p>
+  <pre>
+UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
+UsbAccessory[] accessoryList = manager.getAcccessoryList();
+</pre>
+
+  <p class="note"><strong>Note:</strong> Currently, only one connected accessory is supported at
+  one time, but the API is designed to support multiple accessories in the future.</p>
+
+  <h3 id="permission-a">Obtaining permission to communicate with an accessory</h3>
+
+  <p>Before communicating with the USB accessory, your applicaton must have permission from your
+  users.</p>
+
+  <p class="note"><strong>Note:</strong> If your application <a href="#using-intents">uses an
+  intent filter</a> to discover accessories as they're connected, it automatically receives
+  permission if the user allows your application to handle the intent. If not, you must request
+  permission explicitly in your application before connecting to the accessory.</p>
+
+  <p>Explicitly asking for permission might be neccessary in some situations such as when your
+  application enumerates accessories that are already connected and then wants to communicate with
+  one. You must check for permission to access an accessory before trying to communicate with it.
+  If not, you will receive a runtime error if the user denied permission to access the
+  accessory.</p>
+
+  <p>To explicitly obtain permission, first create a broadcast receiver. This receiver listens for
+  the intent that gets broadcast when you call {@link
+  android.hardware.usb.UsbManager#requestPermission requestPermission()}. The call to {@link
+  android.hardware.usb.UsbManager#requestPermission requestPermission()} displays a dialog to the
+  user asking for permission to connect to the accessory. The following sample code shows how to
+  create the broadcast receiver:</p>
+  <pre>
+private static final String ACTION_USB_PERMISSION =
+    "com.android.example.USB_PERMISSION";
+private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+ 
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction();
+        if (ACTION_USB_PERMISSION.equals(action)) {
+            synchronized (this) {
+                UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
+
+                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
+                    if(accessory != null){
+                        //call method to set up accessory communication
+                    }
+                }
+                else {
+                    Log.d(TAG, "permission denied for accessory " + accessory);
+                }
+            }
+        }
+    }
+};
+</pre>
+
+  <p>To register the broadcast receiver, put this in your <code>onCreate()</code> method in your
+  activity:</p>
+  <pre>
+UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
+private static final String ACTION_USB_PERMISSION =
+    "com.android.example.USB_PERMISSION";
+...
+mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
+IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
+registerReceiver(mUsbReceiver, filter);
+</pre>
+
+  <p>To display the dialog that asks users for permission to connect to the accessory, call the
+  {@link android.hardware.usb.UsbManager#requestPermission requestPermission()} method:</p>
+  <pre>
+UsbAccessory accessory;
+...
+mUsbManager.requestPermission(accessory, mPermissionIntent);
+</pre>
+
+  <p>When users reply to the dialog, your broadcast receiver receives the intent that contains the
+  {@link android.hardware.usb.UsbManager#EXTRA_PERMISSION_GRANTED} extra, which is a boolean
+  representing the answer. Check this extra for a value of true before connecting to the
+  accessory.</p>
+
+  <h3 id="communicating-a">Communicating with an accessory</h3>
+
+  <p>You can communicate with the accessory by using the {@link android.hardware.usb.UsbManager} to
+  obtain a file descriptor that you can set up input and output streams to read and write data to
+  descriptor. The streams represent the accessory's input and output bulk endpoints. You should set
+  up the communication between the device and accessory in another thread, so you don't lock the
+  main UI thread. The following example shows how to open an accessory to communicate with:</p>
+  <pre>
+UsbAccessory mAccessory;
+ParcelFileDescriptor mFileDescriptor;
+FileInputStream mInputStream;
+FileOutputStream mOutputStream;
+
+...
+
+private void openAccessory() {
+    Log.d(TAG, "openAccessory: " + accessory);
+    mFileDescriptor = mUsbManager.openAccessory(mAccessory);
+    if (mFileDescriptor != null) {
+        FileDescriptor fd = mFileDescriptor.getFileDescriptor();
+        mInputStream = new FileInputStream(fd);
+        mOutputStream = new FileOutputStream(fd);
+        Thread thread = new Thread(null, this, "AccessoryThread");
+        thread.start();
+    }
+}
+</pre>
+
+  <p>In the thread's <code>run()</code> method, you can read and write to the accessory by using
+  the {@link java.io.FileInputStream} or {@link java.io.FileOutputStream} objects. When reading
+  data from an accessory with a {@link java.io.FileInputStream} object, ensure that the buffer that
+  you use is big enough to store the USB packet data. The Android accessory protocol supports
+  packet buffers up to 16384 bytes, so you can choose to always declare your buffer to be of this
+  size for simplicity.</p>
+
+  <p class="note"><strong>Note:</strong> At a lower level, the packets are 64 bytes for USB
+  full-speed accessories and 512 bytes for USB high-speed accessories. The Android accessory
+  protocol bundles the packets together for both speeds into one logical packet for simplicity.</p>
+
+  <p>For more information about using threads in Android, see <a href=
+  "{@docRoot}guide/components/processes-and-threads.html#Threads">Processes and
+  Threads</a>.</p>
+
+  <h3 id="terminating-a">Terminating communication with an accessory</h3>
+
+  <p>When you are done communicating with an accessory or if the accessory was detached, close the
+  file descriptor that you opened by calling {@link android.os.ParcelFileDescriptor#close close()}.
+  To listen for detached events, create a broadcast receiver like below:</p>
+  <pre>
+BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction(); 
+
+        if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
+            UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
+            if (accessory != null) {
+                // call your method that cleans up and closes communication with the accessory
+            }
+        }
+    }
+};
+</pre>
+
+  <p>Creating the broadcast receiver within the application, and not the manifest, allows your
+  application to only handle detached events while it is running. This way, detached events are
+  only sent to the application that is currently running and not broadcast to all applications.</p>
+
diff --git a/docs/html/guide/topics/connectivity/usb/adk.jd b/docs/html/guide/topics/connectivity/usb/adk.jd
new file mode 100644
index 0000000..034728c
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/usb/adk.jd
@@ -0,0 +1,909 @@
+page.title=Android Open Accessory Development Kit
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#components">ADK Components</a></li>
+        <li>
+
+          <a href="#getting-started">Getting Started with the ADK</a>
+
+          <ol>
+            <li><a href="#installing">Installing the Arduino software and necessary
+            libraries</a></li>
+
+            <li><a href="#installing-firmware">Installing the firmware to the ADK board</a></li>
+
+            <li><a href="#running-demokit">Running the DemoKit Android application</a></li>
+
+            <li><a href="#monitoring">Monitoring the ADK board</a></li>
+          </ol>
+        </li>
+
+        <li>
+          <a href="#accessory-protocol">Implementing the Android Accessory Protocol</a>
+
+          <ol>
+            <li><a href="#wait">Wait for and detect connected devices</a></li>
+
+            <li><a href="#determine">Determine the connected device's accessory mode
+            support</a></li>
+
+            <li><a href="#start">Attempt to start the device in accessory mode</a></li>
+
+            <li><a href="#establish">Establish communication with the device</a></li>
+          </ol>
+        </li>
+
+        <li>
+          <a href="#firmware">How the ADK board implements the Android Accessory Protocol</a>
+
+          <ol>
+            <li><a href="#wait-adk">Wait for and detect connected devices</a></li>
+
+            <li><a href="#determine-adk">Determine the connected device's accessory mode
+            support</a></li>
+
+            <li><a href="#start-adk">Attempt to start the device in accessory mode</a></li>
+
+            <li><a href="#establish-adk">Establish communication with the device</a></li>
+          </ol>
+        </li>
+      </ol>
+
+      <h2>Download</h2>
+      <ol>
+        <li><a href="https://dl-ssl.google.com/android/adk/adk_release_0512.zip">ADK package</a></li>
+      </ol>
+
+      <h2>See also</h2>
+
+      <ol>
+        <li><a href="http://www.youtube.com/watch?v=s7szcpXf2rE">Google I/O Session Video</a></li>
+        <li><a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">USB Accessory Dev Guide</a></li>
+      </ol>
+
+      <h2>Where to buy</h2>
+
+      <ol>
+
+      <li><a href="http://store.arduino.cc/">
+        Arduino Store</a></li>
+
+      <li><a href="https://store.diydrones.com/ProductDetails.asp?ProductCode=BR-PhoneDrone">
+        DIY Drones</a></li>
+
+      <li><a href=
+        "http://mbed.org/order/">
+        mbed</a></li>
+
+      <li><a href=
+        "http://www.microchip.com/android">
+        Microchip</a></li>
+
+      <li><a href="http://shop.moderndevice.com/products/freeduino-usb-host-board">
+        Modern Device</a></li>
+
+      <li><a href=
+        "http://www.rt-net.jp/shop/index.php?main_page=product_info&cPath=3_4&products_id=1">
+        RT Corp</a></li>
+
+      <li><a href="http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html">
+        Seeed Studio</a></li>
+
+      <li><a href="http://www.sparkfun.com/products/10748">
+        SparkFun</a></li>
+
+      <li><a href="http://troido.de/de/shoplsmallgbuy-android-stufflsmallg">
+        Troido</a></li>
+
+      </ol>
+    </div>
+  </div>
+
+  <p>The Android 3.1 platform (also backported to Android 2.3.4) introduces Android Open Accessory
+  support, which allows external USB hardware (an Android USB accessory) to interact with an
+  Android-powered device in a special "accessory" mode. When an Android-powered powered device is
+  in accessory mode, the connected accessory acts as the USB host (powers the bus and enumerates
+  devices) and the Android-powered device acts as the USB device. Android USB accessories are
+  specifically designed to attach to Android-powered devices and adhere to a simple protocol
+  (Android accessory protocol) that allows them to detect Android-powered devices that support
+  accessory mode. Accessories must also provide 500mA at 5V for charging power. Many previously
+  released Android-powered devices are only capable of acting as a USB device and cannot initiate
+  connections with external USB devices. Android Open Accessory support overcomes this limitation
+  and allows you to build accessories that can interact with an assortment of Android-powered
+  devices by allowing the accessory to initiate the connection.</p>
+
+  <p class="note"><strong>Note:</strong> Accessory mode is ultimately dependent on the device's
+  hardware and not all devices will support accessory mode. Devices that support accessory mode can
+  be filtered using a <code>&lt;uses-feature&gt;</code> element in your corresponding application's
+  Android manifest. For more information, see the <a href=
+  "{@docRoot}guide/topics/connectivity/usb/accessory.html#manifest">USB Accessory</a> Developer Guide.</p>
+
+  <p>The following list of distributers are currently producing Android Open Accessory compatible
+  development boards:</p>
+
+  <ul>
+
+    <li>The <a href="http://store.arduino.cc/">Arduino Store</a> provides the Arduino Mega ADK
+    (in <a href="http://store.arduino.cc/eu/index.php?main_page=product_info&cPath=11_12&products_id=144">EU nations</a>
+    or <a href="http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=11_12&products_id=144">non-EU nations</a>)
+    that is based on the ATmega2560 and supports the ADK firmware.</li>
+
+    <li><a href="https://store.diydrones.com/ProductDetails.asp?ProductCode=BR-PhoneDrone">DIY
+    Drones</a> provides an Arduino-compatible board geared towards RC (radio controlled) and UAV
+    (unmanned aerial vehicle) enthusiasts.</li>
+
+    <li><a href="http://mbed.org/order/">mbed</a> provides a microcontroller and a library
+    to develop accessories that support the Android accessory protocol. For more information, see
+    <a href="http://mbed.org/cookbook/mbed-with-Android-ADK">mbed with the Android ADK</a>.
+    </li>
+
+    <li><a href="http://www.microchip.com/android">Microchip</a> provides a PIC based USB
+    microcontroller board.</li>
+
+    <li><a href="http://shop.moderndevice.com/products/freeduino-usb-host-board">Modern
+    Device</a> provides an Arduino-compatible board that supports the ADK firmware.</li>
+
+    <li><a href="http://www.rt-net.jp/shop/index.php?main_page=product_info&cPath=3_4&products_id=1">
+    RT Corp</a> provides an Arduino-compatible board based on the Android ADK board design.</li>
+
+    <li><a href="http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html">
+    Seeed Studio</a> provides an Arduino-compatible board that supports the ADK firmware.</li>
+
+    <li><a href="http://www.sparkfun.com/products/10748">
+    SparkFun</a>'s IOIO board now has beta support for the ADK firmware.</li>
+
+  </ul>
+
+  <p>We expect more hardware distributers to create a variety of kits, so please stay tuned for
+  further developments.</p>
+
+  <h2 id="components">ADK Components</h2>
+  <p>The Android Open Accessory Development Kit (ADK) provides an implementation of an Android USB
+  accessory that is based on the <a href="http://www.arduino.cc/">Arduino open source electronics
+  prototyping platform</a>, the accessory's hardware design files, code that implements the
+  accessory's firmware, and the Android application that interacts with the accessory. The hardware
+  design files and firmware code are contained in the <a href=
+  "https://dl-ssl.google.com/android/adk/adk_release_20120606.zip">ADK package download</a>.</p>
+  <p>The main hardware and software components of the ADK include:</p>
+
+  <ul>
+    <li>A USB micro-controller board that is based on the Arduino Mega2560 and Circuits@Home USB
+    Host Shield designs (now referred to as the ADK board), which you will later implement as an
+    Android USB accessory. The ADK board provides input and output pins that you can implement
+    through the use of attachments called "shields." Custom firmware, written in C++, is installed
+    on the board to define the board's functionality and interaction with the attached shield and
+    Android-powered device. The hardware design files for the board are located in
+    <code>hardware/</code> directory.</li>
+
+    <li>An Android Demo Shield (ADK shield) that affixes atop the ADK board implements the input
+    and output points on the board. These implementations include a joystick, LED outputs, and
+    temperature and light sensors. You can create or buy your own shields or wire your own features
+    to the ADK board to implement custom functionality. The hardware design files for the shield
+    are located in <code>hardware/</code>.</li>
+
+    <li>A library based on the <a href=
+    "http://www.circuitsathome.com/arduino_usb_host_shield_projects">Arduino USB Host Shield</a>
+    library provides the logic for the USB micro-controller board to act as a USB Host. This allows
+    the board to initiate transactions with USB devices. Describing how to use this entire library
+    is beyond the scope of this document. Where needed, this document points out important
+    interactions with the library. For more information, see the source code for the Arduino USB
+    Host Shield library in the <code>arduino_libs/USB_Host_Shield</code> directory.</li>
+
+    <li>An Arduino sketch, <code>arduino_libs/AndroidAccessory/examples/demokit/demokit.pde</code>,
+    defines the firmware that
+    runs on the ADK board and is written in C++. The sketch calls the Android accessory protocol
+    library to interact with the Android-powered device. It also sends data from the ADK board and
+    shield to the Android application and receives data from the Android application and outputs it
+    to the ADK board and shield.</li>
+
+    <li>The Android accessory protocol library, which is located in the
+    <code>arduino_libs/AndroidAccessory</code> directory. This library defines how to
+    enumerate the bus, find a connected Android-powered device that supports accessory mode, and
+    how to setup communication with the device.</li>
+
+    <li>Other third party libraries to support the ADK board's functionality:
+      <ul>
+        <li><a href="http://www.arduino.cc/playground/Main/CapSense">CapSense library</a></li>
+
+        <li><a href="http://www.arduino.cc/playground/Learning/I2C">I2C / TWI (Two-Wire Interface)
+        library</a></li>
+
+        <li><a href="http://www.arduino.cc/playground/ComponentLib/Servo">Servo library</a></li>
+
+        <li><a href="http://www.arduino.cc/playground/Code/Spi">Spi library</a></li>
+
+        <li><a href="http://www.arduino.cc/en/Reference/Wire">Wire library</a></li>
+
+        <li>An Android application, DemoKit, that communicates with the ADK board and shield. The
+        source for this project is in the <code>app/</code> directory.</li>
+      </ul>
+    </li>
+
+  </ul>
+
+  <h2 id="getting-started">Getting Started with the ADK</h2>
+
+  <p>The following sections describe how to install the Arduino software on your computer, use the
+  Arduino IDE to install the ADK board's firmware, and install and run the accompanying
+  Android application for the ADK board. Before you begin, download the following items to set up
+  your development environment:</p>
+
+  <ul>
+    <li><a href="http://arduino.cc/en/Main/Software">Arduino 1.0 or higher</a>: contains
+    libraries and an IDE for coding and installing firmware to the ADK board.</li>
+
+    <li><a href="http://www.arduino.cc/playground/Main/CapSense">CapSense library v.04</a>:
+    contains the libraries to sense human capacitance. This library is needed for the capacitive
+    button that is located on the ADK shield.</li>
+
+    <li><a href="https://dl-ssl.google.com/android/adk/adk_release_20120606.zip">ADK software
+    package</a>: contains the firmware for the ADK board and hardware design files for the ADK
+    board and shield.</li>
+  </ul>
+
+  <h3 id="installing">Installing the Arduino software and necessary libraries</h3>
+
+  <p>To install the Arduino software:</p>
+
+  <ol>
+    <li>
+      <a href="http://arduino.cc/en/Main/Software">Download and install</a> the Arduino 1.0 or
+      higher as described on the Arduino website.
+
+      <p class="note"><strong>Note:</strong> If you are on a Mac, install the FTDI USB Serial
+      Driver that is included in the Arduino package, even though the installation instructions say
+      otherwise.</p>
+    </li>
+
+    <li><a href="https://dl-ssl.google.com/android/adk/adk_release_20120606.zip">Download</a> and
+    extract the ADK package to a directory of your choice. You should have an <code>app</code>,
+    <code>arduino_libs</code>, and <code>hardware</code> directories.</li>
+
+    <li><a href="http://www.arduino.cc/playground/Main/CapSense">Download</a> and extract
+    the CapSense package to a directory of your choice.</li>
+
+    <li>Install the necessary libraries:
+
+      <p>On Windows:</p>
+
+      <ol type="a">
+        <li>Copy the <code>arduino_libs/AndroidAccessory</code> and
+        <code>arduino_libs/USB_Host_Shield</code> directories (the complete directories,
+        not just the files within) to the <code>&lt;arduino_installation_root&gt;/libraries/</code>
+        directory.</li>
+
+        <li>Copy the extracted <code>CapSense/</code> library directory and its contents to the
+        <code>&lt;arduino_installation_root&gt;/libraries/</code> directory.</li>
+      </ol>
+
+      <p>On Mac:</p>
+
+      <ol type="a">
+        <li>Create, if it does not already exist, an <code>Arduino</code>
+        directory inside your user account's <code>Documents</code> directory, and within
+        that, a <code>libraries</code> directory.</li>
+
+        <li>Copy the <code>arduino_libs/AndroidAccessory</code> and
+        <code>arduino_libs/USB_Host_Shield</code> directories (the
+        complete directories, not just the files within) to your
+        <code>Documents/Arduino/libraries/</code> directory.</li>
+
+        <li>Copy the extracted <code>CapSense/</code> library directory and its contents to the
+        <code>Documents/Arduino/libraries/</code> directory.
+      </ol>
+
+      <p>On Linux (Ubuntu):</p>
+
+      <ol type="a">
+        <li>Copy the <code>firmware/arduino_libs/AndroidAccessory</code> and
+        <code>firmware/arduino_libs/USB_Host_Shield</code> directories (the complete directories,
+        not just the files within) to the <code>&lt;arduino_installation_root&gt;/libraries/</code>
+        directory.</li>
+
+        <li>Copy the extracted <code>CapSense/</code> library directory and its contents to the
+        <code>&lt;arduino_installation_root&gt;/libraries/</code> directory.</li>
+
+        <li>Install the avr-libc library by entering <code>sudo apt-get install avr-libc</code>
+        from a shell prompt.</li>
+      </ol>
+    </li>
+  </ol>
+
+  <p>You should now have three new directories in the Arduino <code>libraries/</code> directory:
+  <code>AndroidAccessory</code>, <code>USB_Host_Shield</code>, and <code>CapSense</code>.</p>
+
+  <h3 id="installing-firmware">Installing the firmware to the ADK board</h3>
+
+  <p>To install the firmware to the ADK board:</p>
+
+  <ol>
+    <li>Connect the ADK board to your computer using the micro-USB port, which allows two-way
+    communication and provides power to the ADK board.</li>
+
+    <li>Launch the Arduino IDE.</li>
+
+    <li>Click <strong>Tools &gt; Board &gt; Arduino Mega 2560</strong> to specify the ADK board's
+    type.</li>
+
+    <li>Select the appropriate USB port:
+
+      <ul>
+        <li>On Windows: click <strong>Tools &gt; Serial Port &gt; COM#</strong> to specify the port
+        of communication. The COM port number varies depending on your computer. COM1 is usually
+        reserved for serial port connections. You most likely want COM2 or COM3.</li>
+
+        <li>On Mac: Click <strong>Tools &gt; Serial Port &gt; dev/tty.usbserial-###</strong> to
+        specify the port of communication.</li>
+
+        <li>On Linux (Ubuntu): Click <strong>Tools &gt; Serial Port &gt; dev/ttyUSB#</strong> to
+        specify the port of communication.</li>
+      </ul>
+    </li>
+
+    <li>To open the Demokit sketch (firmware code), click <strong>File &gt; Examples &gt;
+    AndroidAccessory &gt; demokit</strong>.</li>
+
+    <li>Click <strong>Sketch &gt; Verify/Compile</strong> to ensure that the sketch has no
+    errors.</li>
+
+    <li>Select <strong>File &gt; Upload</strong>. When Arduino outputs <strong>Done
+    uploading.</strong>, the board is ready to communicate with your Android-powered device.</li>
+  </ol>
+
+  <h3 id="running-demokit">Running the DemoKit Android application</h3>
+
+  <p>The DemoKit Android application runs on your Android-powered device and communicates with the
+  ADK board. The ADK board receives commands such as lighting up the board's LEDs or sends data
+  from the board such as joystick movement and temperature readings.</p>
+
+  <p>To install and run the application in Eclipse:</p>
+
+  <ol>
+    <li><a href="http://code.google.com/android/add-ons/google-apis/installing.html">Install the
+    Google APIs API Level 10 add-on library</a>, which includes the Open Accessory library for
+    2.3.4 devices that support accessory mode. This library is also forward compatible with Android
+    3.1 or newer devices that support accessory mode. If you only care about Android 3.1 or newer
+    devices, all you need is API Level 12. For more information on deciding which API level to use,
+    see the <a href="{@docRoot}guide/topics/connectivity/usb/accessory.html#choosing">USB Accessory</a>
+    documentation.</li>
+
+    <li>Click <strong>File &gt; New &gt; Project...</strong>, then select <strong>Android &gt;
+    Android Project</strong></li>
+
+    <li>In the <strong>Project name:</strong> field, type DemoKit.</li>
+
+    <li>Choose <strong>Create project from existing source</strong>, click <strong>Browse</strong>,
+    select the <code>app</code> directory, click <strong>Open</strong> to close that dialog and then
+    click <strong>Finish</strong>.</li>
+
+    <li>For Build Target, select <strong>Google APIs</strong> (Platform 2.3.3, API Level 10).
+
+      <p class="note"><strong>Note:</strong> Even though the add-on is labeled as
+      <strong>2.3.3</strong>, the newest Google API add-on library for API level 10 adds USB Open
+      Accessory API support for 2.3.4 devices.</p>
+    </li>
+
+    <li>Click <strong>Finish</strong>.</li>
+
+    <li>Install the application to your device.</li>
+
+    <li>Connect the ADK board (USB-A) to your Android-powered device (micro-USB). Ensure that the
+    power cable to the accessory is plugged in or that the micro-USB port on the accesory is
+    connected to your computer for power (this also allows you to <a href="#monitoring">monitor the
+    ADK board</a>). When connected, accept the prompt that asks for whether or not to open the
+    DemoKit application to connect to the accessory. If the prompt does not show up, connect and
+    reconnect the accessory.</li>
+  </ol>
+
+  <p>You can now interact with the ADK board by moving the color LED or servo sliders (make sure
+  the servos are connected) or by pressing the relay buttons in the application. On the ADK shield,
+  you can press the buttons and move the joystick to see their outputs displayed in the
+  application.</p>
+
+  <h3 id="monitoring">Monitoring the ADK Board</h3>
+
+  <p>The ADK firmware consists of a few files that you should be looking at if you want to build
+  your own accessory. The files in the <code>arduino_libs/AndroidAccessory</code>
+  directory are the most important files and have the logic to detect and connect to
+  Android-powered devices that support accessory mode. Feel free to add debug statements (Arduino
+  <code>Serial.println()</code> statements) to the code located in the
+  <code>&lt;arduino_installation_root&gt;/libraries/AndroidAccessory</code> directory and
+  <code>demokit.pde</code> sketch and re-upload the sketch to the ADK board to
+  discover more about how the firmware works.</p>
+
+  <p>You can view the debug statements in the Arduino Serial Monitor by clicking <strong>Tools &gt;
+  Serial Monitor</strong> and setting the baud to 115200. The following sections about how
+  accessories communicate with Android-powered devices describe much of what you should be doing in
+  your own accessory.</p>
+
+  <h2 id="accessory-protocol">Implementing the Android Accessory Protocol</h2>
+
+  <p>An Android USB accessory must adhere to Android Accessory Protocol, which defines how
+  an accessory detects and sets up communication with an Android-powered device. In general, an
+  accessory should carry out the following steps:</p>
+
+  <ol>
+    <li>Wait for and detect connected devices</li>
+
+    <li>Determine the device's accessory mode support</li>
+
+    <li>Attempt to start the device in accessory mode if needed</li>
+
+    <li>Establish communication with the device if it supports the Android accessory protocol</li>
+  </ol>
+
+  <p>The following sections go into depth about how to implement these steps.</p>
+
+  <h3 id="wait">Wait for and detect connected devices</h3>
+
+  <p>Your accessory should have logic to continuously check
+  for connected Android-powered devices. When a device is connected, your accessory should
+  determine if the device supports accessory mode.</p>
+
+  <h3 id="determine">Determine the device's accessory mode support</h3>
+
+
+  <p>When an Android-powered device is connected, it can be in one of three states:</p>
+
+  <ol type="a">
+    <li>The attached device supports Android accessory mode and is already in accessory mode.</li>
+
+    <li>The attached device supports Android accessory mode, but it is not in accessory mode.</li>
+
+    <li>The attached device does not support Android accessory mode.</li>
+  </ol>
+
+  <p>During the initial connection, the accessory should check the vendor and product IDs of the
+  connected device's USB device descriptor. The vendor ID should match Google's ID (0x18D1) and the
+  product ID should be 0x2D00 or 0x2D01 if the device is already in accessory mode (case A). If so,
+  the accessory can now <a href="#establish">establish communication with the device</a> through
+  bulk transfer endpoints with its own communication protocol. There is no need to start the device
+  in accessory mode.</p>
+
+  <p class="note"><strong>Note:</strong> 0x2D00 is reserved for Android-powered devices that
+  support accessory mode. 0x2D01 is reserved for devices that support accessory mode as well as the
+  ADB (Android Debug Bridge) protocol, which exposes a second interface with two bulk endpoints for
+  ADB. You can use these endpoints for debugging the accessory application if you are simulating
+  the accessory on a computer. In general, do not use this interface unless your accessory is
+  implementing a passthrough to ADB on the device.</p>
+
+  <p>If the vendor and product ID do not match, there is no way to distinguish between states b and
+  c, so the accessory <a href="#start">attempts to start the device in accessory mode</a> to figure
+  out if the device is supported.</p>
+
+  <h3 id="start">Attempt to start the device in accessory mode</h3>
+
+  <p>If the vendor and product IDs do not correspond to an Android-powered device in accessory
+  mode, the accessory cannot discern whether the device supports accessory mode and is not in that
+  state, or if the device does not support accessory mode at all. This is because devices that
+  support accessory mode but aren't in it initially report the device's manufacturer vendor ID and
+  product ID, and not the special Android Open Accessory ones. In either case, the accessory should try to start
+  the device into accessory mode to figure out if the device supports it. The following steps
+  explain how to do this:</p>
+
+  <ol>
+    <li>Send a 51 control request ("Get Protocol") to figure out if the device supports the Android
+    accessory protocol. A non-zero number is returned if the protocol is supported, which
+    represents the version of the protocol that the device supports (currently, only version 1
+    exists). This request is a control request on endpoint 0 with the following characteristics:
+      <pre>
+requestType:    USB_DIR_IN | USB_TYPE_VENDOR
+request:        51
+value:          0
+index:          0
+data:           protocol version number (16 bits little endian sent from the device to the accessory)
+</pre>
+    </li>
+
+    <li>If the device returns a proper protocol version, send identifying string information to the
+    device. This information allows the device to figure out an appropriate application for this
+    accessory and also present the user with a URL if an appropriate application does not exist.
+    These requests are control requests on endpoint 0 (for each string ID) with the following
+    characteristics:
+      <pre>
+requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+request:        52
+value:          0
+index:          string ID
+data            zero terminated UTF8 string sent from accessory to device
+</pre>
+
+      <p>The following string IDs are supported, with a maximum size of 256 bytes for each string
+      (must be zero terminated with \0).</p>
+      <pre>
+manufacturer name:  0
+model name:         1
+description:        2
+version:            3
+URI:                4
+serial number:      5
+</pre>
+    </li>
+
+    <li>When the identifying strings are sent, request the device start up in accessory mode. This
+    request is a control request on endpoint 0 with the following characteristics:
+      <pre>
+requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
+request:        53
+value:          0
+index:          0
+data:           none
+</pre>
+    </li>
+  </ol>
+
+  <p>After sending the final control request, the connected USB device should re-introduce itself
+  on the bus in accessory mode and the accessory can re-enumerate the connected devices. The
+  algorithm jumps back to <a href="#determine">determining the device's accessory mode support</a>
+  to check for the vendor and product ID. The vendor ID and product ID of the device will be
+  different if the device successfully switched to accessory mode and will now correspond to
+  Google's vendor and product IDs instead of the device manufacturer's IDs. The accessory can now
+  <a href="#establish">establish communication with the device</a>.</p>
+
+  <p>If at any point these steps fail, the device does not support Android accessory mode and the
+  accessory should wait for the next device to be connected.</p>
+
+  <h3 id="establish">Establish communication with the device</h3>
+
+  <p>If an Android-powered device in accessory mode is detected, the accessory can query the
+  device's interface and endpoint descriptors to obtain the bulk endpoints to communicate with the
+  device. An Android-powered device that has a product ID of 0x2D00 has one interface with two bulk
+  endpoints for input and output communication. A device with product ID of 0x2D01 has two
+  interfaces with two bulk endpoints each for input and output communication. The first interface
+  is for standard communication while the second interface is for ADB communication. To communicate
+  on an interface, all you need to do is find the first bulk input and output endpoints, set the
+  device's configuration to a value of 1 with a SET_CONFIGURATION (0x09) device request, then
+  communicate using the endpoints.</p>
+
+  <h2 id="firmware">How the ADK board implements the Android Accessory protocol</h2>
+
+  <p>If you have access to the ADK board and shield, the following sections describe the firmware
+  code that you installed onto the ADK board. The firmware demonstrates a practical example of how
+  to implement the Android Accessory protocol. Even if you do not have the ADK board and shield,
+  reading through how the hardware detects and interacts with devices in accessory mode is still
+  useful if you want to port the code over for your own accessories.</p>
+
+  <p>The important pieces of the firmware are the
+  <code>arduino_libs/AndroidAccessory/examples/demokit/demokit/demokit.pde</code> sketch, which is
+  the code that receives and sends data to the DemoKit application running on the Android-powered
+  device. The code to detect and set up communication with the Android-powered device is contained
+  in the <code>arduino_libs/AndroidAccessory/AndroidAccessory.h</code> and
+  <code>arduino_libs/AndroidAccessory/AndroidAccessory.cpp</code> files. This code
+  includes most of the logic that will help you implement your own accessory's firmware. It might
+  be useful to have all three of these files open in a text editor as you read through these next
+  sections.</p>
+
+  <p>The following sections describe the firmware code in the context of the algorithm described in
+  <a href="#accessory-protocol">Implementing the Android Accessory Protocol</a>.</p>
+
+  <h3 id="wait-adk">Wait for and detect connected devices</h3>
+
+  <p>In the firmware code (<code>demokit.pde</code>), the <code>loop()</code> function runs
+  repeatedly and calls <code>AndroidAccessory::isConnected()</code> to check for any connected
+  devices. If there is a connected device, it continuously updates the input and output streams
+  going to and from the board and application. If nothing is connected, it continuously checks for
+  a device to be connected:</p>
+  <pre>
+...
+
+AndroidAccessory acc("Google, Inc.",
+                     "DemoKit",
+                     "DemoKit Arduino Board",
+                     "1.0",
+                     "http://www.android.com",
+                     "0000000012345678");
+
+...
+void loop()
+{
+...
+    if (acc.isConnected()) {
+        //communicate with Android application
+    }
+    else{
+        //set the accessory to its default state
+    }
+...
+}
+</pre>
+
+  <h3 id="determine-adk">Determine the connected device's accessory mode support</h3>
+
+  <p>When a device is connected to the ADK board, it can already be in accessory mode, support
+  accessory mode and is not in that mode, or does not support accessory mode. The
+  <code>AndroidAccessory::isConnected()</code> method checks for these cases and responds
+  accordingly when the <code>loop()</code> function calls it. This function first checks to see if
+  the device that is connected hasn't already been handled. If not, it gets the connected device's
+  device descriptor to figure out if the device is already in accessory mode by calling
+  <code>AndroidAccessory::isAccessoryDevice()</code>. This method checks the vendor and product ID
+  of the device descriptor. A device in accessory mode has a vendor ID of 0x18D1 and a product ID
+  of 0x2D00 or 0x2D01. If the device is in accessory mode, then the ADK board can <a href=
+  "#establish">establish communication with the device</a>. If not, the board <a href=
+  "#start">attempts to start the device in accessory mode</a>.</p>
+  <pre>
+bool AndroidAccessory::isConnected(void)
+{
+    USB_DEVICE_DESCRIPTOR *devDesc = (USB_DEVICE_DESCRIPTOR *) descBuff;
+    byte err;
+
+    max.Task();
+    usb.Task();
+
+    if (!connected &amp;&amp;
+        usb.getUsbTaskState() &gt;= USB_STATE_CONFIGURING &amp;&amp;
+        usb.getUsbTaskState() != USB_STATE_RUNNING) {
+        Serial.print("\nDevice addressed... ");
+        Serial.print("Requesting device descriptor.");
+
+        err = usb.getDevDescr(1, 0, 0x12, (char *) devDesc);
+        if (err) {
+            Serial.print("\nDevice descriptor cannot be retrieved. Program Halted\n");
+            while(1);
+        }
+
+        if (isAccessoryDevice(devDesc)) {
+            Serial.print("found android accessory device\n");
+
+            connected = configureAndroid();
+        } else {
+            Serial.print("found possible device. switching to serial mode\n");
+            switchDevice(1);
+        }
+    } else if (usb.getUsbTaskState() == USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE) {
+        connected = false;
+    }
+
+    return connected;
+}
+</pre>
+
+  <h3 id="start-adk">Attempt to start the device in accessory mode</h3>
+
+  <p>If the device is not already in accessory mode, then the ADK board must determine whether or
+  not it supports it by sending control request 51 to check the version of the USB accessory
+  protocol that the device supports (see <code>AndroidAccessory::getProtocol()</code>). Protocol
+  version 1 is the only version for now, but this can be an integer greater than zero in the
+  future. If the appropriate protocol version is returned, the board sends control request 52 (one
+  for each string with <code>AndroidAcessory:sendString()</code>) to send it's identifying
+  information, and tries to start the device in accessory mode with control request 53. The
+  <code>AndroidAccessory::switchDevice()</code> method takes care of this:</p>
+  <pre>
+bool AndroidAccessory::switchDevice(byte addr)
+{
+    int protocol = getProtocol(addr);
+    if (protocol == 1) {
+        Serial.print("device supports protocol 1\n");
+    } else {
+        Serial.print("could not read device protocol version\n");
+        return false;
+    }
+
+    sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
+    sendString(addr, ACCESSORY_STRING_MODEL, model);
+    sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
+    sendString(addr, ACCESSORY_STRING_VERSION, version);
+    sendString(addr, ACCESSORY_STRING_URI, uri);
+    sendString(addr, ACCESSORY_STRING_SERIAL, serial);
+
+    usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR | USB_SETUP_RECIPIENT_DEVICE,
+                ACCESSORY_START, 0, 0, 0, 0, NULL);
+    return true;
+}
+</pre>If this method returns false, the board waits until a new device is connected. If it is
+successful, the device displays itself on the USB bus as being in accessory mode when the ADK board
+re-enumerates the bus. When the device is in accessory mode, the accessory then <a href=
+"#establish-adk">establishes communication with the device</a>.
+
+  <h3 id="establish-adk">Establish communication with the device</h3>
+
+  <p>If a device is detected as being in accessory mode, the accessory must find the proper bulk
+  endpoints and set up communication with the device. When the ADK board detects an Android-powered
+  device in accessory mode, it calls the <code>AndroidAccessory::configureAndroid()</code>
+  function:</p>
+  <pre>
+...
+if (isAccessoryDevice(devDesc)) {
+            Serial.print("found android acessory device\n");
+
+            connected = configureAndroid();
+        }
+...
+</pre>
+
+  <p>which in turn calls the <code>findEndpoints()</code> function:</p>
+  <pre>
+...
+bool AndroidAccessory::configureAndroid(void)
+{
+    byte err;
+    EP_RECORD inEp, outEp;
+
+    if (!findEndpoints(1, &amp;inEp, &amp;outEp))
+        return false;
+...
+</pre>
+
+  <p>The <code>AndroidAccessory::findEndpoints()</code> function queries the Android-powered
+  device's configuration descriptor and finds the bulk data endpoints in which to communicate with
+  the USB device. To do this, it first gets the device's first four bytes of the configuration
+  descriptor (only need descBuff[2] and descBuff[3]), which contains the information about the
+  total length of data returned by getting the descriptor. This data is used to determine whether
+  or not the descriptor can fit in the descriptor buffer. This descriptor also contains information
+  about all the interfaces and endpoint descriptors. If the descriptor is of appropriate size, the
+  method reads the entire configuration descriptor and fills the entire descriptor buffer with this
+  device's configuration descriptor. If for some reason the descriptor is no longer attainable, an
+  error is returned.</p>
+  <pre>
+...
+
+bool AndroidAccessory::findEndpoints(byte addr, EP_RECORD *inEp, EP_RECORD *outEp)
+{
+    int len;
+    byte err;
+    uint8_t *p;
+
+    err = usb.getConfDescr(addr, 0, 4, 0, (char *)descBuff);
+    if (err) {
+        Serial.print("Can't get config descriptor length\n");
+        return false;
+    }
+
+
+    len = descBuff[2] | ((int)descBuff[3] &lt;&lt; 8);
+    if (len &gt; sizeof(descBuff)) {
+        Serial.print("config descriptor too large\n");
+            /* might want to truncate here */
+        return false;
+    }
+
+    err = usb.getConfDescr(addr, 0, len, 0, (char *)descBuff);
+    if (err) {
+        Serial.print("Can't get config descriptor\n");
+        return false;
+    }
+
+...
+</pre>
+
+  <p>Once the descriptor is in memory, a pointer is assigned to the first position of the buffer
+  and is used to index the buffer for reading. There are two endpoint pointers (input and output)
+  that are passed into <code>AndroidAccessory::findEndpoints()</code> and their addresses are set
+  to 0, because the code hasn't found any suitable bulk endpoints yet. A loop reads the buffer,
+  parsing each configuration, interface, or endpoint descriptor. For each descriptor, Position 0
+  always contains the size of the descriptor in bytes and position 1 always contains the descriptor
+  type. Using these two values, the loop skips any configuration and interface descriptors and
+  increments the buffer with the <code>descLen</code> variable to get to the next descriptor.</p>
+
+  <p class="note"><strong>Note:</strong> An Android-powered device in accessory mode can
+  potentially have two interfaces, one for the default communication to the device and the other
+  for ADB communication. The default communication interface is always indexed first, so finding
+  the first input and output bulk endpoints will return the default communication endpoints, which
+  is what the <code>demokit.pde</code> sketch does. If you are writing your own firmware, the logic
+  to find the appropriate endpoints for your accessory might be different.</p>
+
+  <p>When it finds the first input and output endpoint descriptors, it sets the endpoint pointers
+  to those addresses. If the findEndpoints() function finds both an input and output endpoint, it
+  returns true. It ignores any other endpoints that it finds (the endpoints for the ADB interface,
+  if present).</p>
+  <pre>
+...
+    p = descBuff;
+    inEp-&gt;epAddr = 0;
+    outEp-&gt;epAddr = 0;
+    while (p &lt; (descBuff + len)){
+        uint8_t descLen = p[0];
+        uint8_t descType = p[1];
+        USB_ENDPOINT_DESCRIPTOR *epDesc;
+        EP_RECORD *ep;
+
+        switch (descType) {
+        case USB_DESCRIPTOR_CONFIGURATION:
+            Serial.print("config desc\n");
+            break;
+
+        case USB_DESCRIPTOR_INTERFACE:
+            Serial.print("interface desc\n");
+            break;
+
+        case USB_DESCRIPTOR_ENDPOINT:
+            epDesc = (USB_ENDPOINT_DESCRIPTOR *)p;
+            if (!inEp-&gt;epAddr &amp;&amp; (epDesc-&gt;bEndpointAddress &amp; 0x80))
+                ep = inEp;
+            else if (!outEp-&gt;epAddr)
+                ep = outEp;
+            else
+                ep = NULL;
+
+            if (ep) {
+                ep-&gt;epAddr = epDesc-&gt;bEndpointAddress &amp; 0x7f;
+                ep-&gt;Attr = epDesc-&gt;bmAttributes;
+                ep-&gt;MaxPktSize = epDesc-&gt;wMaxPacketSize;
+                ep-&gt;sndToggle = bmSNDTOG0;
+                ep-&gt;rcvToggle = bmRCVTOG0;
+            }
+            break;
+
+        default:
+            Serial.print("unkown desc type ");
+            Serial.println( descType, HEX);
+            break;
+        }
+
+        p += descLen;
+    }
+
+    if (!(inEp-&gt;epAddr &amp;&amp; outEp-&gt;epAddr))
+        Serial.println("can't find accessory endpoints");
+
+    return inEp-&gt;epAddr &amp;&amp; outEp-&gt;epAddr;
+}
+
+...
+</pre>
+
+  <p>Back in the <code>configureAndroid()</code> function, if there were endpoints found, they are
+  appropriately set up for communication. The device's configuration is set to 1 and the state of
+  the device is set to "running", which signifies that the device is properly set up to communicate
+  with your USB accessory. Setting this status prevents the device from being re-detected and
+  re-configured in the <code>AndroidAccessory::isConnected()</code> function.</p>
+  <pre>
+bool AndroidAccessory::configureAndroid(void)
+{
+    byte err;
+    EP_RECORD inEp, outEp;
+
+    if (!findEndpoints(1, &amp;inEp, &amp;outEp))
+        return false;
+
+    memset(&amp;epRecord, 0x0, sizeof(epRecord));
+
+    epRecord[inEp.epAddr] = inEp;
+    if (outEp.epAddr != inEp.epAddr)
+        epRecord[outEp.epAddr] = outEp;
+
+    in = inEp.epAddr;
+    out = outEp.epAddr;
+
+    Serial.print("inEp: ");
+    Serial.println(inEp.epAddr, HEX);
+    Serial.print("outEp: ");
+    Serial.println(outEp.epAddr, HEX);
+
+    epRecord[0] = *(usb.getDevTableEntry(0,0));
+    usb.setDevTableEntry(1, epRecord);
+
+    err = usb.setConf( 1, 0, 1 );
+    if (err) {
+        Serial.print("Can't set config to 1\n");
+        return false;
+    }
+
+    usb.setUsbTaskState( USB_STATE_RUNNING );
+
+    return true;
+}
+</pre>
+
+  <p>Lastly, methods to read and write to the appropriate endpoints are needed. The
+  <code>demokit.pde</code> sketch calls these methods depending on the data that is read from the
+  Android-powered device or sent by the ADK board. For instance, moving the joystick on the ADK
+  shield writes data that is read by the DemoKit application running on the Android-powered device.
+  Moving sliders on the DemoKit application is read by the <code>demokit.pde</code> sketch and
+  changes the state of the accessory, such as lighting up or changing the color of the LED
+  lights.</p>
+  <pre>
+int AndroidAccessory::read(void *buff, int len, unsigned int nakLimit) {
+  return usb.newInTransfer(1, in, len, (char *)buff, nakLimit); }
+
+int AndroidAccessory::write(void *buff, int len) {
+  usb.outTransfer(1, out, len, (char *)buff);
+  return len; }
+</pre>
+
+  <p>See the <code>demokit.pde</code> sketch for information about how the ADK board
+  reads and writes data.</p>
diff --git a/docs/html/guide/topics/connectivity/usb/host.jd b/docs/html/guide/topics/connectivity/usb/host.jd
new file mode 100644
index 0000000..355dd2d
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/usb/host.jd
@@ -0,0 +1,440 @@
+page.title=USB Host
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#api">API Overview</a></li>
+
+        <li><a href="#usage">Android Manifest Requirements</a></li>
+
+        <li>
+          <a href="#working-d">Working with devices</a>
+
+          <ol>
+            <li><a href="#discovering-d">Discovering a device</a></li>
+
+            <li><a href="#permission-d">Obtaining permission to communicate with a device</a></li>
+
+            <li><a href="#communicating-d">Communicating with a device</a></li>
+
+            <li><a href="#terminating-d">Terminating communication with a device</a></li>
+          </ol>
+        </li>
+      </ol>
+
+      <h2>Related Samples</h2>
+
+      <ol>
+        <li><a href="{@docRoot}resources/samples/USB/AdbTest/index.html">AdbTest</a></li>
+
+        <li><a href=
+        "{@docRoot}resources/samples/USB/MissileLauncher/index.html">MissleLauncher</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>When your Android-powered device is in USB host mode, it acts as the USB host, powers the bus,
+  and enumerates connected USB devices. USB host mode is supported in Android 3.1 and higher.</p>
+
+  <h2 id="api">API Overview</h2>
+
+  <p>Before you begin, it is important to understand the classes that you need to work with. The
+  following table describes the USB host APIs in the {@link android.hardware.usb} package.</p>
+
+  <p class="table-caption"><strong>Table 1.</strong> USB Host APIs</p>
+
+  <table>
+    <tr>
+      <th>Class</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbManager}</td>
+
+      <td>Allows you to enumerate and communicate with connected USB devices.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbDevice}</td>
+
+      <td>Represents a connected USB device and contains methods to access its identifying
+      information, interfaces, and endpoints.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbInterface}</td>
+
+      <td>Represents an interface of a USB device, which defines a set of functionality for the
+      device. A device can have one or more interfaces on which to communicate on.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbEndpoint}</td>
+
+      <td>Represents an interface endpoint, which is a communication channel for this interface. An
+      interface can have one or more endpoints, and usually has input and output endpoints for
+      two-way communication with the device.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbDeviceConnection}</td>
+
+      <td>Represents a connection to the device, which transfers data on endpoints. This class
+      allows you to send data back and forth sychronously or asynchronously.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbRequest}</td>
+
+      <td>Represents an asynchronous request to communicate with a device through a {@link
+      android.hardware.usb.UsbDeviceConnection}.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.hardware.usb.UsbConstants}</td>
+
+      <td>Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux
+      kernel.</td>
+    </tr>
+  </table>
+
+  <p>In most situations, you need to use all of these classes ({@link
+  android.hardware.usb.UsbRequest} is only required if you are doing asynchronous communication)
+  when communicating with a USB device. In general, you obtain a {@link
+  android.hardware.usb.UsbManager} to retrieve the desired {@link android.hardware.usb.UsbDevice}.
+  When you have the device, you need to find the appropriate {@link
+  android.hardware.usb.UsbInterface} and the {@link android.hardware.usb.UsbEndpoint} of that
+  interface to communicate on. Once you obtain the correct endpoint, open a {@link
+  android.hardware.usb.UsbDeviceConnection} to communicate with the USB device.</p>
+
+  <h2 id="manifest">Android Manifest Requirements</h2>
+
+  <p>The following list describes what you need to add to your application's manifest file before
+  working with the USB host APIs:</p>
+
+  <ul>
+    <li>Because not all Android-powered devices are guaranteed to support the USB host APIs,
+    include a <code>&lt;uses-feature&gt;</code> element that declares that your application uses
+    the <code>android.hardware.usb.host</code> feature.</li>
+
+    <li>Set the minimum SDK of the application to API Level 12 or higher. The USB host APIs are not
+    present on earlier API levels.</li>
+
+    <li>If you want your application to be notified of an attached USB device, specify an
+    <code>&lt;intent-filter&gt;</code> and <code>&lt;meta-data&gt;</code> element pair for the
+    <code>android.hardware.usb.action.USB_DEVICE_ATTACHED</code> intent in your main activity. The
+    <code>&lt;meta-data&gt;</code> element points to an external XML resource file that declares
+    identifying information about the device that you want to detect.
+
+      <p>In the XML resource file, declare <code>&lt;usb-device&gt;</code> elements for the USB
+      devices that you want to filter. The following list describes the attributes of
+      <code>&lt;usb-device&gt;</code>. In general, use vendor and product ID if you want to filter
+      for a specific device and use class, subclass, and protocol if you want to filter for a group
+      of USB devices, such as mass storage devices or digital cameras. You can specify none or
+      all of these attributes. Specifying no attributes matches every USB device, so only do this
+      if your application requires it:</p>
+
+      <ul>
+        <li><code>vendor-id</code></li>
+
+        <li><code>product-id</code></li>
+
+        <li><code>class</code></li>
+
+        <li><code>subclass</code></li>
+
+        <li><code>protocol</code> (device or interface)</li>
+      </ul>
+
+      <p>Save the resource file in the <code>res/xml/</code> directory. The resource file name
+      (without the .xml extension) must be the same as the one you specified in the
+      <code>&lt;meta-data&gt;</code> element. The format for the XML resource file is in the
+      <a href="#example">example</a> below.</p>
+    </li>
+  </ul>
+
+  <h3 id="manifest-example">Manifest and resource file examples</h3>
+
+  <p>The following example shows a sample manifest and its corresponding resource file:</p>
+  <pre>
+&lt;manifest ...&gt;
+    &lt;uses-feature android:name="android.hardware.usb.host" /&gt;
+    &lt;uses-sdk android:minSdkVersion="12" /&gt;
+    ...
+    &lt;application&gt;
+        &lt;activity ...&gt;
+            ...
+            &lt;intent-filter&gt;
+                &lt;action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /&gt;
+            &lt;/intent-filter&gt;
+
+            &lt;meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
+                android:resource="@xml/device_filter" /&gt;
+        &lt;/activity&gt;
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+  <p>In this case, the following resource file should be saved in
+  <code>res/xml/device_filter.xml</code> and specifies that any USB device with the specified
+  attributes should be filtered:</p>
+  <pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+
+&lt;resources&gt;
+    &lt;usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" /&gt;
+&lt;/resources&gt;
+</pre>
+
+  <h2 id="working-d">Working with Devices</h2>
+
+  <p>When users connect USB devices to an Android-powered device, the Android system can determine
+  whether your application is interested in the connected device. If so, you can set up
+  communication with the device if desired. To do this, your application has to:</p>
+
+  <ol>
+    <li>Discover connected USB devices by using an intent filter to be notified when the user
+    connects a USB device or by enumerating USB devices that are already connected.</li>
+
+    <li>Ask the user for permission to connect to the USB device, if not already obtained.</li>
+
+    <li>Communicate with the USB device by reading and writing data on the appropriate interface
+    endpoints.</li>
+  </ol>
+
+  <h3 id="discovering-d">Discovering a device</h3>
+
+  <p>Your application can discover USB devices by either using an intent filter to be notified when
+  the user connects a device or by enumerating USB devices that are already connected. Using an
+  intent filter is useful if you want to be able to have your application automatically detect a
+  desired device. Enumerating connected USB devices is useful if you want to get a list of all
+  connected devices or if your application did not filter for an intent.</p>
+
+  <h4 id="using-intents">Using an intent filter</h4>
+
+  <p>To have your application discover a particular USB device, you can specify an intent filter to
+  filter for the <code>android.hardware.usb.action.USB_DEVICE_ATTACHED</code> intent. Along with
+  this intent filter, you need to specify a resource file that specifies properties of the USB
+  device, such as product and vendor ID. When users connect a device that matches your device
+  filter, the system presents them with a dialog that asks if they want to start your application.
+  If users accept, your application automatically has permission to access the device until the
+  device is disconnected.</p>
+
+  <p>The following example shows how to declare the intent filter:</p>
+  <pre>
+&lt;activity ...&gt;
+...
+    &lt;intent-filter&gt;
+        &lt;action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /&gt;
+    &lt;/intent-filter&gt;
+
+    &lt;meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
+        android:resource="@xml/device_filter" /&gt;
+&lt;/activity&gt;
+</pre>
+
+  <p>The following example shows how to declare the corresponding resource file that specifies the
+  USB devices that you're interested in:</p>
+  <pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+
+&lt;resources&gt;
+    &lt;usb-device vendor-id="1234" product-id="5678" /&gt;
+&lt;/resources&gt;
+</pre><!-- REMEMBER TO ADD PROTOCOL, and device class and subclass, if applicable -->
+
+  <p>In your activity, you can obtain the {@link android.hardware.usb.UsbDevice} that represents
+  the attached device from the intent like this:</p>
+  <pre>
+UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
+</pre>
+
+  <h4>Enumerating devices</h4>
+
+  <p>If your application is interested in inspecting all of the USB devices currently connected
+  while your application is running, it can enumerate devices on the bus. Use the {@link
+  android.hardware.usb.UsbManager#getDeviceList() getDeviceList()} method to get a hash map of all
+  the USB devices that are connected. The hash map is keyed by the USB device's name if you want to
+  obtain a device from the map.</p>
+  <pre>
+UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
+...  
+HashMap&lt;String, UsbDevice&gt; deviceList = manager.getDeviceList();
+UsbDevice device = deviceList.get("deviceName");
+</pre>
+
+  <p>If desired, you can also just obtain an iterator from the hash map and process each device one
+  by one:</p>
+  <pre>
+UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
+...
+HashMap&lt;String, UsbDevice&gt; deviceList = manager.getDeviceList();
+Iterator&lt;UsbDevice&gt; deviceIterator = deviceList.values().iterator();
+while(deviceIterator.hasNext()){
+    UsbDevice device = deviceIterator.next()
+    //your code
+}
+</pre>
+
+  <h3 id="permission-d">Obtaining permission to communicate with a device</h3>
+
+  <p>Before communicating with the USB device, your applicaton must have permission from your
+  users.</p>
+
+  <p class="note"><strong>Note:</strong> If your application <a href="#using-intents">uses an
+  intent filter</a> to discover USB devices as they're connected, it automatically receives
+  permission if the user allows your application to handle the intent. If not, you must request
+  permission explicitly in your application before connecting to the device.</p>
+
+  <p>Explicitly asking for permission might be neccessary in some situations such as when your
+  application enumerates USB devices that are already connected and then wants to communicate with
+  one. You must check for permission to access a device before trying to communicate with it. If
+  not, you will receive a runtime error if the user denied permission to access the device.</p>
+
+  <p>To explicitly obtain permission, first create a broadcast receiver. This receiver listens for
+  the intent that gets broadcast when you call {@link
+  android.hardware.usb.UsbManager#requestPermission requestPermission()}. The call to {@link
+  android.hardware.usb.UsbManager#requestPermission requestPermission()} displays a dialog to the
+  user asking for permission to connect to the device. The following sample code shows how to
+  create the broadcast receiver:</p>
+  <pre>
+private static final String ACTION_USB_PERMISSION =
+    "com.android.example.USB_PERMISSION";
+private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction();
+        if (ACTION_USB_PERMISSION.equals(action)) {
+            synchronized (this) {
+                UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
+
+                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
+                    if(device != null){
+                      //call method to set up device communication
+                   }
+                } 
+                else {
+                    Log.d(TAG, "permission denied for device " + device);
+                }
+            }
+        }
+    }
+};
+</pre>
+
+  <p>To register the broadcast receiver, add this in your <code>onCreate()</code> method in your
+  activity:</p>
+  <pre>
+UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
+private static final String ACTION_USB_PERMISSION =
+    "com.android.example.USB_PERMISSION";
+...
+mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
+IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
+registerReceiver(mUsbReceiver, filter);
+</pre>
+
+  <p>To display the dialog that asks users for permission to connect to the device, call the {@link
+  android.hardware.usb.UsbManager#requestPermission requestPermission()} method:</p>
+  <pre>
+UsbDevice device;
+...
+mUsbManager.requestPermission(device, mPermissionIntent);
+</pre>
+
+  <p>When users reply to the dialog, your broadcast receiver receives the intent that contains the
+  {@link android.hardware.usb.UsbManager#EXTRA_PERMISSION_GRANTED} extra, which is a boolean
+  representing the answer. Check this extra for a value of true before connecting to the
+  device.</p>
+
+  <h3 id="communicating-d">Communicating with a device</h3>
+
+  <p>Communication with a USB device can be either synchronous or asynchronous. In either case, you
+  should create a new thread on which to carry out all data transmissions, so you don't block the
+  UI thread. To properly set up communication with a device, you need to obtain the appropriate
+  {@link android.hardware.usb.UsbInterface} and {@link android.hardware.usb.UsbEndpoint} of the
+  device that you want to communicate on and send requests on this endpoint with a {@link
+  android.hardware.usb.UsbDeviceConnection}. In general, your code should:</p>
+
+  <ul>
+    <li>Check a {@link android.hardware.usb.UsbDevice} object's attributes, such as product ID,
+    vendor ID, or device class to figure out whether or not you want to communicate with the
+    device.</li>
+
+    <li>When you are certain that you want to communicate with the device, find the appropriate
+    {@link android.hardware.usb.UsbInterface} that you want to use to communicate along with the
+    appropriate {@link android.hardware.usb.UsbEndpoint} of that interface. Interfaces can have one
+    or more endpoints, and commonly will have an input and output endpoint for two-way
+    communication.</li>
+
+    <li>When you find the correct endpoint, open a {@link android.hardware.usb.UsbDeviceConnection}
+    on that endpoint.</li>
+
+    <li>Supply the data that you want to transmit on the endpoint with the {@link
+    android.hardware.usb.UsbDeviceConnection#bulkTransfer bulkTransfer()} or {@link
+    android.hardware.usb.UsbDeviceConnection#controlTransfer controlTransfer()} method. You should
+    carry out this step in another thread to prevent blocking the main UI thread. For more
+    information about using threads in Android, see <a href=
+    "{@docRoot}guide/components/processes-and-threads.html#Threads">Processes and
+    Threads</a>.</li>
+  </ul>
+
+  <p>The following code snippet is a trivial way to do a synchronous data transfer. Your code
+  should have more logic to correctly find the correct interface and endpoints to communicate on
+  and also should do any transferring of data in a different thread than the main UI thread:</p>
+  <pre>
+private Byte[] bytes
+private static int TIMEOUT = 0;
+private boolean forceClaim = true;
+
+...
+
+UsbInterface intf = device.getInterface(0);
+UsbEndpoint endpoint = intf.getEndpoint(0);
+UsbDeviceConnection connection = mUsbManager.openDevice(device); 
+connection.claimInterface(intf, forceClaim);
+connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); //do in another thread
+</pre>
+
+  <p>To send data asynchronously, use the {@link android.hardware.usb.UsbRequest} class to {@link
+  android.hardware.usb.UsbRequest#initialize initialize} and {@link
+  android.hardware.usb.UsbRequest#queue queue} an asynchronous request, then wait for the result
+  with {@link android.hardware.usb.UsbDeviceConnection#requestWait requestWait()}.</p>
+
+  <p>For more information, see the <a href=
+  "{@docRoot}resources/samples/USB/AdbTest/index.html">AdbTest sample</a>, which shows how to do
+  asynchronous bulk transfers, and the <a href=
+  "{@docRoot}resources/samples/USB/MissileLauncher/index.html">MissleLauncher sample</a>, which
+  shows how to listen on an interrupt endpoint asynchronously.</p>
+
+  <h3 id="terminating-d">Terminating communication with a device</h3>
+
+  <p>When you are done communicating with a device or if the device was detached, close the {@link
+  android.hardware.usb.UsbInterface} and {@link android.hardware.usb.UsbDeviceConnection} by
+  calling {@link android.hardware.usb.UsbDeviceConnection#releaseInterface releaseInterface()} and
+  {@link android.hardware.usb.UsbDeviceConnection#close() close()}. To listen for detached events,
+  create a broadcast receiver like below:</p>
+  <pre>
+BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
+    public void onReceive(Context context, Intent intent) {
+        String action = intent.getAction(); 
+
+      if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
+            UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
+            if (device != null) {
+                // call your method that cleans up and closes communication with the device
+            }
+        }
+    }
+};
+</pre>
+
+  <p>Creating the broadcast receiver within the application, and not the manifest, allows your
+  application to only handle detached events while it is running. This way, detached events are
+  only sent to the application that is currently running and not broadcast to all applications.</p>
+
diff --git a/docs/html/guide/topics/connectivity/usb/index.jd b/docs/html/guide/topics/connectivity/usb/index.jd
new file mode 100644
index 0000000..7086ab1
--- /dev/null
+++ b/docs/html/guide/topics/connectivity/usb/index.jd
@@ -0,0 +1,67 @@
+page.title=USB Host and Accessory
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>Topics</h2>
+
+      <ol>
+        <li><a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">USB Accessory</a></li>
+
+        <li><a href="{@docRoot}guide/topics/connectivity/usb/host.html">USB Host</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Android supports a variety of USB peripherals and Android USB accessories (hardware that
+  implements the Android accessory protocol) through two modes: USB accessory and USB host. In USB
+  accessory mode, the external USB hardware act as the USB hosts. Examples of accessories might
+  include robotics controllers; docking stations; diagnostic and musical equipment; kiosks; card
+  readers; and much more. This gives Android-powered devices that do not have host capabilities the
+  ability to interact with USB hardware. Android USB accessories must be designed to work with
+  Android-powered devices and must adhere to the <a href=
+  "http://accessories.android.com/demokit">Android accessory communication protocol</a>. In USB
+  host mode, the Android-powered device acts as the host. Examples of devices include digital
+  cameras, keyboards, mice, and game controllers. USB devices that are designed for a wide range of
+  applications and environments can still interact with Android applications that can correctly
+  communicate with the device.</p>
+
+  <p>Figure 1 shows the differences between the two modes. When the Android-powered device is in
+  host mode, it acts as the USB host and powers the bus. When the Android-powered device is in USB
+  accessory mode, the connected USB hardware (an Android USB accessory in this case) acts as the
+  host and powers the bus.</p><img src="{@docRoot}images/usb-host-accessory.png" alt="">
+
+  <p class="img-caption"><strong>Figure 1.</strong> USB Host and Accessory Modes</p>
+
+  <p>USB accessory and host modes are directly supported in Android 3.1 (API level 12) or newer
+  platforms. USB accessory mode is also backported to Android 2.3.4 (API level 10) as an add-on
+  library to support a broader range of devices. Device manufacturers can choose whether or not to
+  include the add-on library on the device's system image.</p>
+
+  <p class="note"><strong>Note:</strong> Support for USB host and accessory modes are ultimately
+  dependant on the device's hardware, regardless of platform level. You can filter for devices that
+  support USB host and accessory through a <a href=
+  "{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a> element. See
+  the USB <a href="{@docRoot}guide/topics/connectivity/usb/accessory.html">accessory</a> and <a href=
+  "{@docRoot}guide/topics/connectivity/usb/host.html">host</a> documentation for more details.</p>
+
+  <h2>Debugging considerations</h2>
+
+  <p>When debugging applications that use USB accessory or host features, you most likely will have
+  USB hardware connected to your Android-powered device. This will prevent you from having an
+  <code>adb</code> connection to the Android-powered device via USB. You can still access
+  <code>adb</code> over a network connection. To enable <code>adb</code> over a network
+  connection:</p>
+
+  <ol>
+    <li>Connect the Android-powered device via USB to your computer.</li>
+
+    <li>From your SDK <code>platform-tools/</code> directory, enter <code>adb tcpip 5555</code> at
+    the command prompt.</li>
+
+    <li>Enter <code>adb connect &lt;device-ip-address&gt;:5555</code> You should now be connected
+    to the Android-powered device and can issue the usual <code>adb</code> commands like <code>adb
+    logcat</code>.</li>
+
+    <li>To set your device to listen on USB, enter <code>adb usb</code>.</li>
+  </ol>
diff --git a/docs/html/guide/topics/wireless/wifip2p.jd b/docs/html/guide/topics/connectivity/wifip2p.jd
similarity index 100%
rename from docs/html/guide/topics/wireless/wifip2p.jd
rename to docs/html/guide/topics/connectivity/wifip2p.jd
diff --git a/docs/html/guide/topics/data/backup.jd b/docs/html/guide/topics/data/backup.jd
index d91e422..602b6e8 100644
--- a/docs/html/guide/topics/data/backup.jd
+++ b/docs/html/guide/topics/data/backup.jd
@@ -47,7 +47,7 @@
 
   <h2>See also</h2>
   <ol>
-    <li><a href="{@docRoot}guide/developing/tools/bmgr.html">{@code bmgr} tool</a></li>
+    <li><a href="{@docRoot}tools/help/bmgr.html">{@code bmgr} tool</a></li>
   </ol>
 
 </div>
@@ -316,7 +316,7 @@
 
 <p class="note"><strong>Tip:</strong> While developing your application, you can initiate an
 immediate backup operation from the Backup Manager with the <a
-href="{@docRoot}guide/developing/tools/bmgr.html">{@code bmgr} tool</a>.</p>
+href="{@docRoot}tools/help/bmgr.html">{@code bmgr} tool</a>.</p>
 
 <p>When the Backup Manager calls your {@link
 android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor,BackupDataOutput,ParcelFileDescriptor)
@@ -460,7 +460,7 @@
 href="#RequestingRestore">Requesting restore</a> for more information).</p>
 
 <p class="note"><strong>Note:</strong> While developing your application, you can also request a
-restore operation with the <a href="{@docRoot}guide/developing/tools/bmgr.html">{@code bmgr}
+restore operation with the <a href="{@docRoot}tools/help/bmgr.html">{@code bmgr}
 tool</a>.</p>
 
 <p>When the Backup Manager calls your {@link
@@ -863,7 +863,7 @@
 
 <p class="note"><strong>Note:</strong> While developing your application, you can request a
 backup and initiate an immediate backup operation with the <a
-href="{@docRoot}guide/developing/tools/bmgr.html">{@code bmgr}
+href="{@docRoot}tools/help/bmgr.html">{@code bmgr}
 tool</a>.</p>
 
 
@@ -878,7 +878,7 @@
 implementation, passing the data from the current set of backup data.</p>
 
 <p class="note"><strong>Note:</strong> While developing your application, you can request a
-restore operation with the <a href="{@docRoot}guide/developing/tools/bmgr.html">{@code bmgr}
+restore operation with the <a href="{@docRoot}tools/help/bmgr.html">{@code bmgr}
 tool</a>.</p>
 
 
@@ -886,7 +886,7 @@
 
 <p>Once you've implemented your backup agent, you can test the backup and restore functionality
 with the following procedure, using <a
-href="{@docRoot}guide/developing/tools/bmgr.html">{@code bmgr}</a>.</p>
+href="{@docRoot}tools/help/bmgr.html">{@code bmgr}</a>.</p>
 
 <ol>
   <li>Install your application on a suitable Android system image
diff --git a/docs/html/guide/topics/data/data-storage.jd b/docs/html/guide/topics/data/data-storage.jd
index d31afa5..e9d2d25 100644
--- a/docs/html/guide/topics/data/data-storage.jd
+++ b/docs/html/guide/topics/data/data-storage.jd
@@ -1,4 +1,4 @@
-page.title=Data Storage
+page.title=Storage Options
 @jd:body
 
 
@@ -16,22 +16,9 @@
   <h2>In this document</h2>
   <ol>
     <li><a href="#pref">Using Shared Preferences</a></li>
-    <li><a href="#filesInternal">Using the Internal Storage</a>
-      <ol>
-        <li><a href="#InternalCache">Saving cache files</a></li>
-        <li><a href="#InternalMethods">Other useful methods</a></li>
-      </ol></li>
-    <li><a href="#filesExternal">Using the External Storage</a>
-      <ol>
-        <li><a href="#MediaAvail">Checking media availability</a></li>
-        <li><a href="#AccessingExtFiles">Accessing files on external storage</a></li>
-        <li><a href="#SavingSharedFiles">Saving files that should be shared</a></li>
-        <li><a href="#ExternalCache">Saving cache files</a></li>
-      </ol></li>
-    <li><a href="#db">Using Databases</a>
-      <ol>
-        <li><a href="#dbDebugging">Database debugging</a></li>
-      </ol></li>
+    <li><a href="#filesInternal">Using the Internal Storage</a></li>
+    <li><a href="#filesExternal">Using the External Storage</a></li>
+    <li><a href="#db">Using Databases</a></li>
     <li><a href="#netw">Using a Network Connection</a></li>
   </ol>
 
@@ -449,7 +436,7 @@
 
 <p>The Android SDK includes a {@code sqlite3} database tool that allows you to browse
 table contents, run SQL commands, and perform other useful functions on SQLite
-databases.  See <a href="{@docRoot}guide/developing/tools/adb.html#sqlite">Examining sqlite3
+databases.  See <a href="{@docRoot}tools/help/adb.html#sqlite">Examining sqlite3
 databases from a remote shell</a> to learn how to run this tool.
 </p>
 
diff --git a/docs/html/guide/topics/data/index.html b/docs/html/guide/topics/data/index.html
deleted file mode 100644
index a94f8c0..0000000
--- a/docs/html/guide/topics/data/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=data-storage.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<a href="data-storage.html">click here</a> if you are not redirected.
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/topics/data/index.jd b/docs/html/guide/topics/data/index.jd
new file mode 100644
index 0000000..1e082b3
--- /dev/null
+++ b/docs/html/guide/topics/data/index.jd
@@ -0,0 +1,23 @@
+page.title=Data Storage
+page.landing=true
+page.landing.intro=Store application data in databases, files, or preferences, in internal or removeable storage. You can also add a data backup service to let users store and recover application and system data.  
+page.landing.image=
+
+@jd:body
+
+<div class="landing-docs">
+
+
+  <div class="col-12">
+    <h3>Training</h3>
+    
+    <a href="http://developer.android.com/training/cloudsync/index.html">
+      <h4>Syncing to the Cloud</h4>
+      <p>This class covers different strategies for cloud enabled applications. It covers syncing
+data with the cloud using your own back-end web application, and backing up data using the cloud so
+that users can restore their data when installing your application on a new device.</p>
+    </a>
+    
+  </div>
+
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/data/install-location.jd b/docs/html/guide/topics/data/install-location.jd
new file mode 100644
index 0000000..19c4b39
--- /dev/null
+++ b/docs/html/guide/topics/data/install-location.jd
@@ -0,0 +1,206 @@
+page.title=App Install Location
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>Quickview</h2>
+  <ul>
+    <li>You can allow your application to install on the device's external storage.</li>
+    <li>Some types of applications should <strong>not</strong> allow installation on the external
+storage.</li>
+    <li>Installing on the external storage is ideal for large applications that are not tightly
+integrated with the system (most commonly, games).</li>
+  </ul>
+
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#Compatiblity">Backward Compatibility</a></li>
+    <li><a href="#ShouldNot">Applications That Should NOT Install on External Storage</a></li>
+    <li><a href="#Should">Applications That Should Install on External Storage</a></li>
+  </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><code><a href="{@docRoot}guide/topics/manifest/manifest-element.html">
+&lt;manifest&gt;</a></code></li>
+  </ol>
+
+</div>
+</div>
+
+<p>Beginning with API Level 8, you can allow your application to be installed on the
+external storage (for example, the device's SD card). This is an optional feature you can declare
+for your application with the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> manifest attribute. If you do
+<em>not</em> declare this attribute, your application will be installed on the internal storage
+only and it cannot be moved to the external storage.</p>
+
+<p>To allow the system to install your application on the external storage, modify your
+manifest file to include the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> attribute in the <code><a
+href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a></code> element,
+with a value of either "{@code preferExternal}" or "{@code auto}". For example:</p>
+
+<pre>
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    android:installLocation="preferExternal"
+    ... &gt;
+</pre>
+
+<p>If you declare "{@code preferExternal}", you request that your application be installed on the
+external storage, but the system does not guarantee that your application will be installed on
+the external storage. If the external storage is full, the system will install it on the internal
+storage. The user can also move your application between the two locations.</p>
+
+<p>If you declare "{@code auto}", you indicate that your application may be installed on the
+external storage, but you don't have a preference of install location. The system will
+decide where to install your application based on several factors. The user can also move your
+application between the two locations.</p>
+
+<p>When your application is installed on the external storage:</p>
+<ul>
+  <li>There is no effect on the application performance so long
+as the external storage is mounted on the device.</li>
+  <li>The {@code .apk} file is saved on the external storage, but all private user data,
+databases, optimized {@code .dex} files, and extracted native code are saved on the
+internal device memory.</li>
+  <li>The unique container in which your application is stored is encrypted with a randomly
+generated key that can be decrypted only by the device that originally installed it. Thus, an
+application installed on an SD card works for only one device.</li>
+  <li>The user can move your application to the internal storage through the system settings.</li>
+</ul>
+
+<p class="warning"><strong>Warning:</strong> When the user enables USB mass storage to share files
+with a computer or unmounts the SD card via the system settings, the external storage is unmounted
+from the device and all applications running on the external storage are immediately killed.</p>
+
+
+
+<h2 id="Compatiblity">Backward Compatibility</h2>
+
+<p>The ability for your application to install on the external storage is a feature available only
+on devices running API Level 8 (Android 2.2) or greater. Existing applications that were built prior
+to API Level 8 will always install on the internal storage and cannot be moved to the external
+storage (even on devices with API Level 8). However, if your application is designed to support an
+API Level <em>lower than</em> 8, you can choose to support this feature for devices with API Level 8
+or greater and still be compatible with devices using an API Level lower than 8.</p>
+
+<p>To allow installation on external storage and remain compatible with versions lower than API
+Level 8:</p>
+<ol>
+  <li>Include the {@code android:installLocation} attribute with a value of "{@code auto}" or
+"{@code preferExternal}" in the <code><a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;manifest&gt;</a></code>
+element.</li>
+  <li>Leave your {@code android:minSdkVersion} attribute as is (something <em>less
+than</em> "8") and be certain that your application code uses only APIs compatible with that
+level.</li>
+  <li>In order to compile your application, change your build target to API Level 8. This is
+necessary because older Android libraries don't understand the {@code android:installLocation}
+attribute and will not compile your application when it's present.</li>
+</ol>
+
+<p>When your application is installed on a device with an API Level lower than 8, the {@code
+android:installLocation} attribute is ignored and the application is installed on the internal
+storage.</p>
+
+<p class="caution"><strong>Caution:</strong> Although XML markup such as this will be ignored by
+older platforms, you must be careful not to use programming APIs introduced in API Level 8
+while your {@code minSdkVersion} is less than "8", unless you perform the work necessary to
+provide backward compatibility in your code. For information about building
+backward compatibility in your application code, see the <a
+href="{@docRoot}resources/articles/backward-compatibility.html">Backward Compatibility</a>
+article.</p>
+
+
+
+<h2 id="ShouldNot">Applications That Should NOT Install on External Storage</h2>
+
+<p>When the user enables USB mass storage to share files with their computer (or otherwise
+unmounts or removes the external storage), any application
+installed on the external storage and currently running is killed. The system effectively becomes
+unaware of the application until mass storage is disabled and the external storage is
+remounted on the device. Besides killing the application and making it unavailable to the user,
+this can break some types of applications in a more serious way. In order for your application to
+consistently behave as expected, you <strong>should not</strong> allow your application to be
+installed on the external storage if it uses any of the following features, due to the cited
+consequences when the external storage is unmounted:</p>
+
+<dl>
+  <dt>Services</dt>
+    <dd>Your running {@link android.app.Service} will be killed and will not be restarted when
+external storage is remounted. You can, however, register for the {@link
+android.content.Intent#ACTION_EXTERNAL_APPLICATIONS_AVAILABLE} broadcast Intent, which will notify
+your application when applications installed on external storage have become available to the
+system again. At which time, you can restart your Service.</dd>
+  <dt>Alarm Services</dt>
+    <dd>Your alarms registered with {@link android.app.AlarmManager} will be cancelled. You must
+manually re-register any alarms when external storage is remounted.</dd>
+  <dt>Input Method Engines</dt>
+    <dd>Your <a href="{@docRoot}resources/articles/on-screen-inputs.html">IME</a> will be
+replaced by the default IME. When external storage is remounted, the user can open system settings
+to enable your IME again.</dd>
+  <dt>Live Wallpapers</dt>
+    <dd>Your running <a href="{@docRoot}resources/articles/live-wallpapers.html">Live Wallpaper</a>
+will be replaced by the default Live Wallpaper. When external storage is remounted, the user can
+select your Live Wallpaper again.</dd>
+  <dt>Live Folders</dt>
+    <dd>Your <a href="{@docRoot}resources/articles/live-folders.html">Live Folder</a> will be
+removed from the home screen. When external storage is remounted, the user can add your Live Folder
+to the home screen again.</dd>
+  <dt>App Widgets</dt>
+    <dd>Your <a href="{@docRoot}guide/topics/appwidgets/index.html">App Widget</a> will be removed
+from the home screen. When external storage is remounted, your App Widget will <em>not</em> be
+available for the user to select until the system resets the home application (usually not until a
+system reboot).</dd>
+  <dt>Account Managers</dt>
+    <dd>Your accounts created with {@link android.accounts.AccountManager} will disappear until
+external storage is remounted.</dd>
+  <dt>Sync Adapters</dt>
+    <dd>Your {@link android.content.AbstractThreadedSyncAdapter} and all its sync functionality will
+not work until external storage is remounted.</dd>
+  <dt>Device Administrators</dt>
+    <dd>Your {@link android.app.admin.DeviceAdminReceiver} and all its admin capabilities will
+be disabled, which can have unforeseeable consequences for the device functionality, which may
+persist after external storage is remounted.</dd>
+  <dt>Broadcast Receivers listening for "boot completed"</dt>
+    <dd>The system delivers the {@link android.content.Intent#ACTION_BOOT_COMPLETED} broadcast
+before the external storage is mounted to the device. If your application is installed on the
+external storage, it can never receive this broadcast.</dd>
+  <dt>Copy Protection</dt>
+    <dd>Your application cannot be installed to a device's SD card if it uses Google Play's 
+      Copy Protection feature. However, if you use Google Play's 
+      <a href="{@docRoot}guide/google/play/licensing.html">Application Licensing</a> instead, your 
+      application <em>can</em> be installed to internal or external storage, including SD cards.</dd>
+</dl>
+
+<p>If your application uses any of the features listed above, you <strong>should not</strong> allow
+your application to install on external storage. By default, the system <em>will not</em> allow your
+application to install on the external storage, so you don't need to worry about your existing
+applications. However, if you're certain that your application should never be installed on the
+external storage, then you should make this clear by declaring <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#install">{@code
+android:installLocation}</a> with a value of "{@code internalOnly}". Though this does not
+change the default behavior, it explicitly states that your application should only be installed
+on the internal storage and serves as a reminder to you and other developers that this decision has
+been made.</p>
+
+
+<h2 id="Should">Applications That Should Install on External Storage</h2>
+
+<p>In simple terms, anything that does not use the features listed in the previous section
+are safe when installed on external storage. Large games are more commonly the types of
+applications that should allow installation on external storage, because games don't typically
+provide additional services when inactive. When external storage becomes unavailable and a game
+process is killed, there should be no visible effect when the storage becomes available again and
+the user restarts the game (assuming that the game properly saved its state during the normal
+<a href="{@docRoot}guide/components/activities.html#Lifecycle">Activity lifecycle</a>).</p>
+
+<p>If your application requires several megabytes for the APK file, you should
+carefully consider whether to enable the application to install on the external storage so that
+users can preserve space on their internal storage.</p>
+
diff --git a/docs/html/guide/topics/drawing/index.html b/docs/html/guide/topics/drawing/index.html
deleted file mode 100644
index 43c1499..0000000
--- a/docs/html/guide/topics/drawing/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=opengl.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<a href="opengl.html">click here</a> if you are not redirected.
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/topics/drawing/opengl.jd b/docs/html/guide/topics/drawing/opengl.jd
deleted file mode 100644
index e22a251..0000000
--- a/docs/html/guide/topics/drawing/opengl.jd
+++ /dev/null
@@ -1,53 +0,0 @@
-page.title=OpenGL
-@jd:body
-
-<p>Android includes support for 3D hardware acceleration. This functionality is
-accessed via the OpenGL API &mdash; specifically, the OpenGL ES API.</p>
-
-<p>OpenGL ES is a flavor of the OpenGL specification intended for embedded
-devices. Versions of OpenGL ES are loosely peered to versions of the primary
-OpenGL standard. Android currently supports OpenGL ES 1.0, which corresponds
-to OpenGL 1.3. So, if the application you have in mind is possible with OpenGL
-1.3 on a desktop system, it should be possible on Android.</p>
-
-<p>The specific API provided by Android is similar to the J2ME JSR239 OpenGL
-ES API. However, it may not be identical, so watch out for deviations.</p>
-
-<h2>Using the API</h2>
-
-<p>Here's how to use the API at an extremely high level:</p>
-
-<ol>
-<li>Write a custom View subclass.</li>
-<li>Obtain a handle to an OpenGLContext, which provides access to the OpenGL functionality.</li>
-<li>In your View's onDraw() method, get a handle to a GL object, and use its methods to perform GL operations.</li>
-</ol>
-
-<p>For an example of this usage model (based on the classic GL ColorCube),
-see
-<a href="{@docRoot}samples/ApiDemos/src/com/example/android/apis/graphics/GLView1.html">com.android.samples.graphics.GLView1.java</a>
-in the ApiDemos sample code project. A slightly more sophisticated version showing how to use
-it with threads can be found in 
-<a href="{@docRoot}samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html">com.android.samples.graphics.GLSurfaceViewActivity.java</a>.
-</p>
-
-<p>Writing a summary of how to actually write 3D applications using OpenGL is
-beyond the scope of this text and is left as an exercise for the reader.</p>
-
-<h2>Links to Additional Information</h2>
-
-<p>Information about OpenGL ES can be
-found at <a title="http://www.khronos.org/opengles/"
-href="http://www.khronos.org/opengles/">http://www.khronos.org/opengles/</a>.</p> 
-
-<p>Information specifically
-about OpenGL ES 1.0 (including a detailed specification) can be found
-at <a title="http://www.khronos.org/opengles/1_X/"
-href="http://www.khronos.org/opengles/1_X/">http://www.khronos.org/opengles/1_X/</a>.</p>
-
-<p>The documentation for the Android {@link javax.microedition.khronos.opengles.GL
-OpenGL ES implementations} are also available.</p>
-
-<p>Finally, note that though Android does include some basic support for
-OpenGL ES 1.1, the support is <strong>not complete</strong>, and should not be relied
-upon at this time.</p>
diff --git a/docs/html/guide/topics/fundamentals.jd b/docs/html/guide/topics/fundamentals.jd
deleted file mode 100644
index a86d905..0000000
--- a/docs/html/guide/topics/fundamentals.jd
+++ /dev/null
@@ -1,518 +0,0 @@
-page.title=Application Fundamentals
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>Quickview</h2>
-<ul>
-  <li>Android applications are composed of one or more application components (activities,
-services, content providers, and broadcast receivers)</li>
-  <li>Each component performs a different role in the overall application behavior, and each
-one can be activated individually (even by other applications)</li>
-  <li>The manifest file must declare all components in the application and should also declare
-all application requirements, such as the minimum version of Android required and any hardware
-configurations required</li>
-  <li>Non-code application resources (images, strings, layout files, etc.) should include
-alternatives for different device configurations (such as different strings for different
-languages and different layouts for different screen sizes)</li>
-</ul>
-
-
-<h2>In this document</h2>
-<ol>
-<li><a href="#Components">Application Components</a>
-  <ol>
-    <li><a href="#ActivatingComponents">Activating components</a></li>
-  </ol>
-</li>
-<li><a href="#Manifest">The Manifest File</a>
-  <ol>
-    <li><a href="#DeclaringComponents">Declaring components</a></li>
-    <li><a href="#DeclaringRequirements">Declaring application requirements</a></li>
-  </ol>
-</li>
-<li><a href="#Resources">Application Resources</a></li>
-</ol>
-</div>
-</div>
-
-<p>Android applications are written in the Java programming language. The Android SDK tools compile
-the code&mdash;along with any data and resource files&mdash;into an <i>Android package</i>, an
-archive file with an {@code .apk} suffix. All the code in a single {@code .apk} file is considered
-to be one application and is the file that Android-powered devices use to install the
-application.</p>
-
-<p>Once installed on a device, each Android application lives in its own security sandbox: </p>
-
-<ul>
- <li>The Android operating system is a multi-user Linux system in which each application is a
-different user.</li>
-
-<li>By default, the system assigns each application a unique Linux user ID (the ID is used only by
-the system and is unknown to the application). The system sets permissions for all the files in an
-application so that only the user ID assigned to that application can access them. </li>
-
-<li>Each process has its own virtual machine (VM), so an application's code runs in isolation from
-other applications.</li>
-
-<li>By default, every application runs in its own Linux process. Android starts the process when any
-of the application's components need to be executed, then shuts down the process when it's no longer
-needed or when the system must recover memory for other applications.</li>
-</ul>
-
-<p>In this way, the Android system implements the <em>principle of least privilege</em>. That is,
-each application, by default, has access only to the components that it requires to do its work and
-no more. This creates a very secure environment in which an application cannot access parts of
-the system for which it is not given permission.</p>
-
-<p>However, there are ways for an application to share data with other applications and for an
-application to access system services:</p>
-
-<ul>
-  <li>It's possible to arrange for two applications to share the same Linux user ID, in which case
-they are able to access each other's files.  To conserve system resources, applications with the
-same user ID can also arrange to run in the same Linux process and share the same VM (the
-applications must also be signed with the same certificate).</li>
-  <li>An application can request permission to access device data such as the user's
-contacts, SMS messages, the mountable storage (SD card), camera, Bluetooth, and more. All
-application permissions must be granted by the user at install time.</li>
-</ul>
-
-<p>That covers the basics regarding how an Android application exists within the system. The rest of
-this document introduces you to:</p>
-<ul>
-  <li>The core framework components that define your application.</li>
-  <li>The manifest file in which you declare components and required device features for your
-application.</li>
-  <li>Resources that are separate from the application code and allow your application to
-gracefully optimize its behavior for a variety of device configurations.</li>
-</ul>
-
-<!--
-<p class="note"><strong>Tip:</strong> If you're new to Android development, we suggest that you
-follow the Beginner's Path link at the bottom of this page. For each document in the Application
-Fundamentals, the Beginner's Path points you to the document we suggest you read next, in order
-to get up to speed on the core Android concepts.</p>
--->
-
-
-<h2 id="Components">Application Components</h2>
-
-<p>Application components are the essential building blocks of an Android application. Each
-component is a different point through which the system can enter your application. Not all
-components are actual entry points for the user and some depend on each other, but each one exists
-as its own entity and plays a specific role&mdash;each one is a unique building block that
-helps define your application's overall behavior.</p>
-
-<p>There are four different types of application components. Each type serves a distinct purpose
-and has a distinct lifecycle that defines how the component is created and destroyed.</p>
-
-<p>Here are the four types of application components:</p>
-
-<dl>
-
-<dt><b>Activities</b></dt>
-
-<dd>An <i>activity</i> represents a single screen with a user interface. For example,
-an email application might have one activity that shows a list of new
-emails, another activity to compose an email, and another activity for reading emails. Although
-the activities work together to form a cohesive user experience in the email application, each one
-is independent of the others. As such, a different application can start any one of these
-activities (if the email application allows it). For example, a camera application can start the
-activity in the email application that composes new mail, in order for the user to share a picture.
-
-<p>An activity is implemented as a subclass of {@link android.app.Activity} and you can learn more
-about it in the <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
-developer guide.</p>
-</dd>
-
-
-<dt><b>Services</b></dt>
-
-<dd>A <i>service</i> is a component that runs in the background to perform long-running
-operations or to perform work for remote processes. A service
-does not provide a user interface. For example, a service might play music in the background while
-the user is in a different application, or it might fetch data over the network without
-blocking user interaction with an activity. Another component, such as an activity, can start the
-service and let it run or bind to it in order to interact with it.
-
-<p>A service is implemented as a subclass of {@link android.app.Service} and you can learn more
-about it in the <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer
-guide.</p>
-</dd>
-
-
-<dt><b>Content providers</b></dt>
-
-<dd>A <i>content provider</i> manages a shared set of application data. You can store the data in
-the file system, an SQLite database, on the web, or any other persistent storage location your
-application can access. Through the content provider, other applications can query or even modify
-the data (if the content provider allows it). For example, the Android system provides a content
-provider that manages the user's contact information. As such, any application with the proper
-permissions can query part of the content provider (such as {@link
-android.provider.ContactsContract.Data}) to read and write information about a particular person.
-
-<p>Content providers are also useful for reading and writing data that is private to your
-application and not shared. For example, the <a
-href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample application uses a
-content provider to save notes.</p>
-
-<p>A content provider is implemented as a subclass of {@link android.content.ContentProvider}
-and must implement a standard set of APIs that enable other applications to perform
-transactions. For more information, see the <a
-href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> developer
-guide.</p>
-</dd>
-
-
-<dt><b>Broadcast receivers</b></dt>
-
-<dd>A <i>broadcast receiver</i> is a component that responds to system-wide broadcast
-announcements.  Many broadcasts originate from the system&mdash;for example, a broadcast announcing
-that the screen has turned off, the battery is low, or a picture was captured.
-Applications can also initiate broadcasts&mdash;for example, to let other applications know that
-some data has been downloaded to the device and is available for them to use. Although broadcast
-receivers don't display a user interface, they may <a
-href="{@docRoot}guide/topics/ui/notifiers/notifications.html">create a status bar notification</a>
-to alert the user when a broadcast event occurs. More commonly, though, a broadcast receiver is
-just a "gateway" to other components and is intended to do a very minimal amount of work. For
-instance, it might initiate a service to perform some work based on the event.
-
-<p>A broadcast receiver is implemented as a subclass of {@link android.content.BroadcastReceiver}
-and each broadcast is delivered as an {@link android.content.Intent} object. For more information,
-see the {@link android.content.BroadcastReceiver} class.</p>
-</dd>
-
-</dl>
-
-
-
-<p>A unique aspect of the Android system design is that any application can start another
-application’s component. For example, if you want the user to capture a
-photo with the device camera, there's probably another application that does that and your
-application can use it, instead of developing an activity to capture a photo yourself. You don't
-need to incorporate or even link to the code from the camera application.
-Instead, you can simply start the activity in the camera application that captures a
-photo. When complete, the photo is even returned to your application so you can use it. To the user,
-it seems as if the camera is actually a part of your application.</p>
-
-<p>When the system starts a component, it starts the process for that application (if it's not
-already running) and instantiates the classes needed for the component. For example, if your
-application starts the activity in the camera application that captures a photo, that activity
-runs in the process that belongs to the camera application, not in your application's process.
-Therefore, unlike applications on most other systems, Android applications don't have a single entry
-point (there's no {@code main()} function, for example).</p>
-
-<p>Because the system runs each application in a separate process with file permissions that
-restrict access to other applications, your application cannot directly activate a component from
-another application. The Android system, however, can. So, to activate a component in
-another application, you must deliver a message to the system that specifies your <em>intent</em> to
-start a particular component. The system then activates the component for you.</p>
-
-
-<h3 id="ActivatingComponents">Activating Components</h3>
-
-<p>Three of the four component types&mdash;activities, services, and
-broadcast receivers&mdash;are activated by an asynchronous message called an <em>intent</em>.
-Intents bind individual components to each other at runtime (you can think of them
-as the messengers that request an action from other components), whether the component belongs
-to your application or another.</p>
-
-<p>An intent is created with an {@link android.content.Intent} object, which defines a message to
-activate either a specific component or a specific <em>type</em> of component&mdash;an intent
-can be either explicit or implicit, respectively.</p>
-
-<p>For activities and services, an intent defines the action to perform (for example, to "view" or
-"send" something) and may specify the URI of the data to act on (among other things that the
-component being started might need to know). For example, an intent might convey a request for an
-activity to show an image or to open a web page. In some cases, you can start an
-activity to receive a result, in which case, the activity also returns
-the result in an {@link android.content.Intent} (for example, you can issue an intent to let
-the user pick a personal contact and have it returned to you&mdash;the return intent includes a
-URI pointing to the chosen contact).</p>
-
-<p>For broadcast receivers, the intent simply defines the
-announcement being broadcast (for example, a broadcast to indicate the device battery is low
-includes only a known action string that indicates "battery is low").</p>
-
-<p>The other component type, content provider, is not activated by intents. Rather, it is
-activated when targeted by a request from a {@link android.content.ContentResolver}. The content
-resolver handles all direct transactions with the content provider so that the component that's
-performing transactions with the provider doesn't need to and instead calls methods on the {@link
-android.content.ContentResolver} object. This leaves a layer of abstraction between the content
-provider and the component requesting information (for security).</p>
-
-<p>There are separate methods for activating each type of component:</p>
-<ul>
-  <li>You can start an activity (or give it something new to do) by
-passing an {@link android.content.Intent} to {@link android.content.Context#startActivity
-startActivity()} or {@link android.app.Activity#startActivityForResult startActivityForResult()}
-(when you want the activity to return a result).</li>
-  <li>You can start a service (or give new instructions to an ongoing service) by
-passing an {@link android.content.Intent} to {@link android.content.Context#startService
-startService()}. Or you can bind to the service by passing an {@link android.content.Intent} to
-{@link android.content.Context#bindService bindService()}.</li>
-  <li>You can initiate a broadcast by passing an {@link android.content.Intent} to methods like
-{@link android.content.Context#sendBroadcast(Intent) sendBroadcast()}, {@link
-android.content.Context#sendOrderedBroadcast(Intent, String) sendOrderedBroadcast()}, or {@link
-android.content.Context#sendStickyBroadcast sendStickyBroadcast()}.</li>
-  <li>You can perform a query to a content provider by calling {@link
-android.content.ContentProvider#query query()} on a {@link android.content.ContentResolver}.</li>
-</ul>
-
-<p>For more information about using intents, see the <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
-Intent Filters</a> document. More information about activating specific components is also provided
-in the following documents: <a
-href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>, <a
-href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>, {@link
-android.content.BroadcastReceiver} and <a
-href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.</p>
-
-
-<h2 id="Manifest">The Manifest File</h2>
-
-<p>Before the Android system can start an application component, the system must know that the
-component exists by reading the application's {@code AndroidManifest.xml} file (the "manifest"
-file). Your application must declare all its components in this file, which must be at the root of
-the application project directory.</p>
-
-<p>The manifest does a number of things in addition to declaring the application's components,
-such as:</p>
-<ul>
-  <li>Identify any user permissions the application requires, such as Internet access or
-read-access to the user's contacts.</li>
-  <li>Declare the minimum <a href="{@docRoot}guide/appendix/api-levels.html">API Level</a>
-required by the application, based on which APIs the application uses.</li>
-  <li>Declare hardware and software features used or required by the application, such as a camera,
-bluetooth services, or a multitouch screen.</li>
-  <li>API libraries the application needs to be linked against (other than the Android framework
-APIs), such as the <a
-href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps
-library</a>.</li>
-  <li>And more</li>
-</ul>
-
-
-<h3 id="DeclaringComponents">Declaring components</h3>
-
-<p>The primary task of the manifest is to inform the system about the application's components. For
-example, a manifest file can declare an activity as follows: </p>
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest ... &gt;
-    &lt;application android:icon="@drawable/app_icon.png" ... &gt;
-        &lt;activity android:name="com.example.project.ExampleActivity"
-                  android:label="@string/example_label" ... &gt;
-        &lt;/activity&gt;
-        ...
-    &lt;/application&gt;
-&lt;/manifest&gt;</pre>
-
-<p>In the <code><a
-href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a></code>
-element, the {@code android:icon} attribute points to resources for an icon that identifies the
-application.</p>
-
-<p>In the <code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> element,
-the {@code android:name} attribute specifies the fully qualified class name of the {@link
-android.app.Activity} subclass and the {@code android:label} attributes specifies a string
-to use as the user-visible label for the activity.</p>
-
-<p>You must declare all application components this way:</p>
-<ul>
-  <li><code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> elements
-for activities</li>
-  <li><code><a
-href="{@docRoot}guide/topics/manifest/service-element.html">&lt;service&gt;</a></code> elements for
-services</li>
-  <li><code><a
-href="{@docRoot}guide/topics/manifest/receiver-element.html">&lt;receiver&gt;</a></code> elements
-for broadcast receivers</li>
-  <li><code><a
-href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a></code> elements
-for content providers</li>
-</ul>
-
-<p>Activities, services, and content providers that you include in your source but do not declare
-in the manifest are not visible to the system and, consequently, can never run.  However,
-broadcast
-receivers can be either declared in the manifest or created dynamically in code (as
-{@link android.content.BroadcastReceiver} objects) and registered with the system by calling
-{@link android.content.Context#registerReceiver registerReceiver()}.</p>
-
-<p>For more about how to structure the manifest file for your application, see the <a
-href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>
-documentation. </p>
-
-
-
-<h3 id="DeclaringComponentCapabilities">Declaring component capabilities</h3>
-
-<p>As discussed above, in <a href="#ActivatingComponents">Activating Components</a>, you can use an
-{@link android.content.Intent} to start activities, services, and broadcast receivers. You can do so
-by explicitly naming the target component (using the component class name) in the intent. However,
-the real power of intents lies in the concept of intent actions. With intent actions, you simply
-describe the type of action you want to perform (and optionally, the data upon which you’d like to
-perform the action) and allow the system to find a component on the device that can perform the
-action and start it. If there are multiple components that can perform the action described by the
-intent, then the user selects which one to use.</p>
-
-<p>The way the system identifies the components that can respond to an intent is by comparing the
-intent received to the <i>intent filters</i> provided in the manifest file of other applications on
-the device.</p>
-
-<p>When you declare a component in your application's manifest, you can optionally include
-intent filters that declare the capabilities of the component so it can respond to intents
-from other applications. You can declare an intent filter for your component by
-adding an <a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-&lt;intent-filter&gt;}</a> element as a child of the component's declaration element.</p>
-
-<p>For example, an email application with an activity for composing a new email might declare an
-intent filter in its manifest entry to respond to "send" intents (in order to send email). An
-activity in your application can then create an intent with the “send” action ({@link
-android.content.Intent#ACTION_SEND}), which the system matches to the email application’s “send”
-activity and launches it when you invoke the intent with {@link android.app.Activity#startActivity
-startActivity()}.</p>
-
-<p>For more about creating intent filters, see the <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a> document.
-</p>
-
-
-
-<h3 id="DeclaringRequirements">Declaring application requirements</h3>
-
-<p>There are a variety of devices powered by Android and not all of them provide the
-same features and capabilities. In order to prevent your application from being installed on devices
-that lack features needed by your application, it's important that you clearly define a profile for
-the types of devices your application supports by declaring device and software requirements in your
-manifest file. Most of these declarations are informational only and the system does not read
-them, but external services such as Google Play do read them in order to provide filtering
-for users when they search for applications from their device.</p>
-
-<p>For example, if your application requires a camera and uses APIs introduced in Android 2.1 (<a
-href="{@docRoot}guide/appendix/api-levels.html">API Level</a> 7), you should declare these as
-requirements in your manifest file. That way, devices that do <em>not</em> have a camera and have an
-Android version <em>lower</em> than 2.1 cannot install your application from Google Play.</p>
-
-<p>However, you can also declare that your application uses the camera, but does not
-<em>require</em> it. In that case, your application must perform a check at runtime to determine
-if the device has a camera and disable any features that use the camera if one is not available.</p>
-
-<p>Here are some of the important device characteristics that you should consider as you design and
-develop your application:</p>
-
-<dl>
-  <dt>Screen size and density</dt>
-  <dd>In order to categorize devices by their screen type, Android defines two characteristics for
-each device: screen size (the physical dimensions of the screen) and screen density (the physical
-density of the pixels on the screen, or dpi&mdash;dots per inch). To simplify all the different
-types of screen configurations, the Android system generalizes them into select groups that make
-them easier to target.
-<p>The screen sizes are: small, normal, large, and extra large.<br/>
-The screen densities are: low density, medium density, high density, and extra high density.</p>
-
-<p>By default, your application is compatible with all screen sizes and densities,
-because the Android system makes the appropriate adjustments to your UI layout and image
-resources. However, you should create specialized layouts for certain screen sizes and provide
-specialized images for certain densities, using alternative layout resources, and by declaring in
-your manifest exactly which screen sizes your application supports with the <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a> element.</p>
-<p>For more information, see the <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>
-document.</p></dd>
-
-  <dt>Input configurations</dt>
-  <dd>Many devices provide a different type of user input mechanism, such as a hardware keyboard, a
-trackball, or a five-way navigation pad. If your application requires a particular kind of input
-hardware, then you should declare it in your manifest with the <a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html">{@code
-&lt;uses-configuration&gt;}</a> element. However, it is rare that an application should require
-a certain input configuration.</dd>
-
-  <dt>Device features</dt>
-  <dd>There are many hardware and software features that may or may not exist on a given
-Android-powered device, such as a camera, a light sensor, bluetooth, a certain
-version of OpenGL, or the fidelity of the touchscreen. You should never assume that a certain
-feature is available on all Android-powered devices (other than the availability of the standard
-Android library), so you should declare any features used by your application with the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
-element.</dd>
-
-  <dt>Platform Version</dt>
-  <dd>Different Android-powered devices often run different versions of the Android platform,
-such as Android 1.6 or Android 2.3. Each successive version often includes additional APIs not
-available in the previous version. In order to indicate which set of APIs are available, each
-platform version specifies an <a
-href="{@docRoot}guide/appendix/api-levels.html">API Level</a> (for example, Android 1.0 is API Level
-1 and Android 2.3 is API Level 9). If you use any APIs that were added to the platform after
-version 1.0, you should declare the minimum API Level in which those APIs were introduced using the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
-element.</dd>
-</dl>
-
-<p>It's important that you declare all such requirements for your application, because, when you
-distribute your application on Google Play, the store uses these declarations to filter which
-applications are available on each device. As such, your application should be available only to
-devices that meet all your application requirements.</p>
-
-<p>For more information about how Google Play filters applications based on these (and other)
-requirements, see the <a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>
-document.</p>
-
-
-
-<h2 id="Resources">Application Resources</h2>
-
-<p>An Android application is composed of more than just code&mdash;it requires resources that are
-separate from the source code, such as images, audio files, and anything relating to the visual
-presentation of the application. For example, you should define animations, menus, styles, colors,
-and the layout of activity user interfaces with XML files. Using application resources makes it easy
-to update various characteristics of your application without modifying code and&mdash;by providing
-sets of alternative resources&mdash;enables you to optimize your application for a  variety of
-device configurations (such as different languages and screen sizes).</p>
-
-<p>For every resource that you include in your Android project, the SDK build tools define a unique
-integer ID, which you can use to reference the resource from your application code or from
-other resources defined in XML. For example, if your application contains an image file named {@code
-logo.png} (saved in the {@code res/drawable/} directory), the SDK tools generate a resource ID
-named {@code R.drawable.logo}, which you can use to reference the image and insert it in your
-user interface.</p>
-
-<p>One of the most important aspects of providing resources separate from your source code
-is the ability for you to provide alternative resources for different device
-configurations. For example, by defining UI strings in XML, you can translate the strings into other
-languages and save those strings in separate files. Then, based on a language <em>qualifier</em>
-that you append to the resource directory's name (such as {@code res/values-fr/} for French string
-values) and the user's language setting, the Android system applies the appropriate language strings
-to your UI.</p>
-
-<p>Android supports many different <em>qualifiers</em> for your alternative resources. The
-qualifier is a short string that you include in the name of your resource directories in order to
-define the device configuration for which those resources should be used. As another
-example, you should often create different layouts for your activities, depending on the
-device's screen orientation and size. For example, when the device screen is in portrait
-orientation (tall), you might want a layout with buttons to be vertical, but when the screen is in
-landscape orientation (wide), the buttons should be aligned horizontally. To change the layout
-depending on the orientation, you can define two different layouts and apply the appropriate
-qualifier to each layout's directory name. Then, the system automatically applies the appropriate
-layout depending on the current device orientation.</p>
-
-<p>For more about the different kinds of resources you can include in your application and how
-to create alternative resources for various device configurations, see the <a
-href="{@docRoot}guide/topics/resources/index.html">Application Resources</a> developer guide.</p>
-
-
-<!--
-<h2>Beginner's Path</h2>
-
-<p>For a close look at implementing activities&mdash;the components your users use to
-interact with your application&mdash;continue with the <b><a
-href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a></b> document.</p>
--->
diff --git a/docs/html/guide/topics/fundamentals/activities.jd b/docs/html/guide/topics/fundamentals/activities.jd
deleted file mode 100644
index b79136c..0000000
--- a/docs/html/guide/topics/fundamentals/activities.jd
+++ /dev/null
@@ -1,777 +0,0 @@
-page.title=Activities
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>An activity provides a user interface for a single screen in your application</li>
-  <li>Activities can move into the background and then be resumed with their state restored</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#Creating">Creating an Activity</a>
-    <ol>
-      <li><a href="#UI">Implementing a user interface</a></li>
-      <li><a href="#Declaring">Declaring the activity in the manifest</a></li>
-    </ol>
-  </li>
-  <li><a href="#StartingAnActivity">Starting an Activity</a>
-    <ol>
-      <li><a href="#StartingAnActivityForResult">Starting an activity for a result</a></li>
-    </ol>
-  </li>
-  <li><a href="#ShuttingDown">Shutting Down an Activity</a></li>
-  <li><a href="#Lifecycle">Managing the Activity Lifecycle</a>
-    <ol>
-      <li><a href="#ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</a></li>
-      <li><a href="#SavingActivityState">Saving activity state</a></li>
-      <li><a href="#ConfigurationChanges">Handling configuration changes</a></li>
-      <li><a href="#CoordinatingActivities">Coordinating activities</a></li>
-    </ol>
-  </li>
-</ol>
-
-<h2>Key classes</h2>
-<ol>
-  <li>{@link android.app.Activity}</li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-  <li><a href="{@docRoot}resources/tutorials/hello-world.html">Hello World Tutorial</a></li>
-  <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
-Stack</a></li>
-</ol>
-
-</div>
-</div>
-
-
-
-<p>An {@link android.app.Activity} is an application component that provides a screen with which
-users can interact in order to do something, such as dial the phone, take a photo, send an email, or
-view a map. Each activity is given a window in which to draw its user interface. The window
-typically fills the screen, but may be smaller than the screen and float on top of other
-windows.</p>
-
-<p> An application usually consists of multiple activities that are loosely bound
-to each other. Typically, one activity in an application is specified as the "main" activity, which
-is presented to the user when launching the application for the first time. Each
-activity can then start another activity in order to perform different actions. Each time a new
-activity starts, the previous activity is stopped, but the system preserves the activity
-in a stack (the "back stack"). When a new activity starts, it is pushed onto the back stack and
-takes user focus. The back stack abides to the basic "last in, first out" stack mechanism,
-so, when the user is done with the current activity and presses the <em>Back</em> button, it
-is popped from the stack (and destroyed) and the previous activity resumes. (The back stack is
-discussed more in the <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks
-and Back Stack</a> document.)</p>
-
-<p>When an activity is stopped because a new activity starts, it is notified of this change in state
-through the activity's lifecycle callback methods.
-There are several callback methods that an activity might receive, due to a change in its
-state&mdash;whether the system is creating it, stopping it, resuming it, or destroying it&mdash;and
-each callback provides you the opportunity to perform specific work that's
-appropriate to that state change. For instance, when stopped, your activity should release any
-large objects, such as network or database connections. When the activity resumes, you can
-reacquire the necessary resources and resume actions that were interrupted. These state transitions
-are all part of the activity lifecycle.</p>
-
-<p>The rest of this document discusses the basics of how to build and use an activity,
-including a complete discussion of how the activity lifecycle works, so you can properly manage
-the transition between various activity states.</p>
-
-
-
-<h2 id="Creating">Creating an Activity</h2>
-
-<p>To create an activity, you must create a subclass of {@link android.app.Activity} (or
-an existing subclass of it). In your subclass, you need to implement callback methods that the
-system calls when the activity transitions between various states of its lifecycle, such as when
-the activity is being created, stopped, resumed, or destroyed. The two most important callback
-methods are:</p>
-
-<dl>
-  <dt>{@link android.app.Activity#onCreate onCreate()}</dt>
-  <dd>You must implement this method. The system calls this when creating your
-    activity. Within your implementation, you should initialize the essential components of your
-activity.
-    Most importantly, this is where you must call {@link android.app.Activity#setContentView
-    setContentView()} to define the layout for the activity's user interface.</dd>
-  <dt>{@link android.app.Activity#onPause onPause()}</dt>
-  <dd>The system calls this method as the first indication that the user is leaving your
-activity (though it does not always mean the activity is being destroyed). This is usually where you
-should commit any changes that should be persisted beyond the current user session (because
-the user might not come back).</dd>
-</dl>
-
-<p>There are several other lifecycle callback methods that you should use in order to provide a
-fluid user experience between activities and handle unexpected interuptions that cause your activity
-to be stopped and even destroyed. All of the lifecycle callback methods are discussed later, in
-the section about <a href="#Lifecycle">Managing the Activity Lifecycle</a>.</p>
-
-
-
-<h3 id="UI">Implementing a user interface</h3>
-
-<p> The user interface for an activity is provided by a hierarchy of views&mdash;objects derived
-from the {@link android.view.View} class.  Each view controls a particular rectangular space
-within the activity's window and can respond to user interaction. For example, a view might be a
-button that initiates an action when the user touches it.</p>
-
-<p>Android provides a number of ready-made views that you can use to design and organize your
-layout. "Widgets" are views that provide a visual (and interactive) elements for the screen, such
-as a button, text field, checkbox, or just an image. "Layouts" are views derived from {@link
-android.view.ViewGroup} that provide a unique layout model for its child views, such as a linear
-layout, a grid layout, or relative layout. You can also subclass the {@link android.view.View} and
-{@link android.view.ViewGroup} classes (or existing subclasses) to create your own widgets and
-layouts and apply them to your activity layout.</p>
-
-<p>The most common way to define a layout using views is with an XML layout file saved in your
-application resources. This way, you can maintain the design of your user interface separately from
-the source code that defines the activity's behavior. You can set the layout as the UI for your
-activity with {@link android.app.Activity#setContentView(int) setContentView()}, passing the
-resource ID for the layout. However, you can also create new {@link android.view.View}s in your
-activity code and build a view hierarchy by inserting new {@link
-android.view.View}s into a {@link android.view.ViewGroup}, then use that layout by passing the root
-{@link android.view.ViewGroup} to {@link android.app.Activity#setContentView(View)
-setContentView()}.</p>
-
-<p>For information about creating a user interface, see the <a
-href="{@docRoot}guide/topics/ui/index.html">User Interface</a> documentation.</p>
-
-
-
-<h3 id="Declaring">Declaring the activity in the manifest</h3>
-
-<p>You must declare your activity in the manifest file in order for it to
-be accessible to the system. To declare your activity, open your manifest file and add an <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> element
-as a child of the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
-element. For example:</p>
-
-<pre>
-&lt;manifest ... &gt;
-  &lt;application ... &gt;
-      &lt;activity android:name=".ExampleActivity" /&gt;
-      ...
-  &lt;/application ... &gt;
-  ...
-&lt;/manifest &gt;
-</pre>
-
-<p>There are several other attributes that you can include in this element, to define properties
-such as the label for the activity, an icon for the activity, or a theme to style the activity's
-UI. The <a href="{@docRoot}guide/topics/manifest/activity-element.html#nm">{@code android:name}</a>
-attribute is the only required attribute&mdash;it specifies the class name of the activity. Once
-you publish your application, you should not change this name, because if you do, you might break
-some functionality, such as application shortcuts (read the blog post, <a
-href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
-That Cannot Change</a>).</p>
-
-<p>See the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> element
-reference for more information about declaring your activity in the manifest.</p>
-
-
-<h4>Using intent filters</h4>
-
-<p>An <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-&lt;activity&gt;}</a> element can also specify various intent filters&mdash;using the <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-&lt;intent-filter&gt;}</a> element&mdash;in order to declare how other application components may
-activate it.</p>
-
-<p>When you create a new application using the Android SDK tools, the stub activity
-that's created for you automatically includes an intent filter that declares the activity
-responds to the "main" action and should be placed in the "launcher" category. The intent filter
-looks like this:</p>
-
-<pre>
-&lt;activity android:name=".ExampleActivity" android:icon="@drawable/app_icon"&gt;
-    &lt;intent-filter&gt;
-        &lt;action android:name="android.intent.action.MAIN" /&gt;
-        &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
-    &lt;/intent-filter&gt;
-&lt;/activity&gt;
-</pre>
-
-<p>The <a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-&lt;action&gt;}</a> element specifies that this is the "main" entry point to the application. The <a
-href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-&lt;category&gt;}</a> element specifies that this activity should be listed in the
-system's application launcher (to allow users to launch this activity).</p>
-
-<p>If you intend for your application to be self-contained and not allow other applications to
-activate its activities, then you don't need any other intent filters. Only one activity should
-have the "main" action and "launcher" category, as in the previous example. Activities that
-you don't want to make available to other applications should have no intent filters and you can
-start them yourself using explicit intents (as discussed in the following section).</p>
-
-<p>However, if you want your activity to respond to implicit intents that are delivered from
-other applications (and your own), then you must define additional intent filters for your
-activity. For each type of intent to which you want to respond, you must include an <a
-href="{@docRoot}guide/topics/manifest/intent-filter-element.html">{@code
-&lt;intent-filter&gt;}</a> that includes an
-<a href="{@docRoot}guide/topics/manifest/action-element.html">{@code
-&lt;action&gt;}</a> element and, optionally, a <a
-href="{@docRoot}guide/topics/manifest/category-element.html">{@code
-&lt;category&gt;}</a> element and/or a <a
-href="{@docRoot}guide/topics/manifest/data-element.html">{@code
-&lt;data&gt;}</a> element. These elements specify the type of intent to which your activity can
-respond.</p>
-
-<p>For more information about how your activities can respond to intents, see the <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
-document.</p>
-
-
-
-<h2 id="StartingAnActivity">Starting an Activity</h2>
-
-<p>You can start another activity by calling {@link android.app.Activity#startActivity
-  startActivity()}, passing it an {@link android.content.Intent} that describes the activity you
-  want to start. The intent specifies either the exact activity you want to start or describes the
-  type of action you want to perform (and the system selects the appropriate activity for you,
-which
-  can even be from a different application). An intent can also carry small amounts of data to be
-  used by the activity that is started.</p>
-
-<p>When working within your own application, you'll often need to simply launch a known activity.
- You can do so by creating an intent that explicitly defines the activity you want to start,
-using the class name. For example, here's how one activity starts another activity named {@code
-SignInActivity}:</p>
-
-<pre>
-Intent intent = new Intent(this, SignInActivity.class);
-startActivity(intent);
-</pre>
-
-<p>However, your application might also want to perform some action, such as send an email, text
-  message, or status update, using data from your activity. In this case, your application might
- not have its own activities to perform such actions, so you can instead leverage the activities
-  provided by other applications on the device, which can perform the actions for you. This is where
-intents are really valuable&mdash;you can create an intent that describes an action you want to
-perform and the system
-  launches the appropriate activity from another application. If there are
-  multiple activities that can handle the intent, then the user can select which one to use. For
-  example, if you want to allow the user to send an email message, you can create the
-  following intent:</p>
-
-<pre>
-Intent intent = new Intent(Intent.ACTION_SEND);
-intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);
-startActivity(intent);
-</pre>
-
-<p>The {@link android.content.Intent#EXTRA_EMAIL} extra added to the intent is a string array of
-  email addresses to which the email should be sent. When an email application responds to this
-  intent, it reads the string array provided in the extra and places them in the "to" field of the
-  email composition form. In this situation, the email application's activity starts and when the
-  user is done, your activity resumes.</p>
-
-
-
-
-<h3 id="StartingAnActivityForResult">Starting an activity for a result</h3>
-
-<p>Sometimes, you might want to receive a result from the activity that you start. In that case,
-  start the activity by calling {@link android.app.Activity#startActivityForResult
-  startActivityForResult()} (instead of {@link android.app.Activity#startActivity
-  startActivity()}). To then receive the result from the subsequent
-activity, implement the {@link android.app.Activity#onActivityResult onActivityResult()} callback
-  method. When the subsequent activity is done, it returns a result in an {@link
-android.content.Intent} to your {@link android.app.Activity#onActivityResult onActivityResult()}
-method.</p>
-
-<p>For example, perhaps you want the user to pick one of their contacts, so your activity can
-do something with the information in that contact. Here's how you can create such an intent and
-handle the result:</p>
-
-<pre>
-private void pickContact() {
-    // Create an intent to "pick" a contact, as defined by the content provider URI
-    Intent intent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
-    startActivityForResult(intent, PICK_CONTACT_REQUEST);
-}
-
-&#64;Override
-protected void onActivityResult(int requestCode, int resultCode, Intent data) {
-    // If the request went well (OK) and the request was PICK_CONTACT_REQUEST
-    if (resultCode == Activity.RESULT_OK &amp;&amp; requestCode == PICK_CONTACT_REQUEST) {
-        // Perform a query to the contact's content provider for the contact's name
-        Cursor cursor = getContentResolver().query(data.getData(),
-        new String[] {Contacts.DISPLAY_NAME}, null, null, null);
-        if (cursor.moveToFirst()) { // True if the cursor is not empty
-            int columnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME);
-            String name = cursor.getString(columnIndex);
-            // Do something with the selected contact's name...
-        }
-    }
-}
-</pre>
-
-<p>This example shows the basic logic you should use in your {@link
-android.app.Activity#onActivityResult onActivityResult()} method in order to handle an
-activity result. The first condition checks whether the request was successful&mdash;if it was, then
-the {@code resultCode} will be {@link android.app.Activity#RESULT_OK}&mdash;and whether the request
-to which this result is responding is known&mdash;in this case, the {@code requestCode} matches the
-second parameter sent with {@link android.app.Activity#startActivityForResult
-startActivityForResult()}. From there, the code handles the activity result by querying the
-data returned in an {@link android.content.Intent} (the {@code data} parameter).</p>
-
-<p>What happens is, a {@link
-android.content.ContentResolver} performs a query against a content provider, which returns a
-{@link android.database.Cursor} that allows the queried data to be read. For more information, see
-the <a
-href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> document.</p>
-
-<p>For more information about using intents, see the <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent
-Filters</a> document.</p>
-
-
-<h2 id="ShuttingDown">Shutting Down an Activity</h2>
-
-<p>You can shut down an activity by calling its {@link android.app.Activity#finish
-finish()} method. You can also shut down a separate activity that you previously started by calling
-{@link android.app.Activity#finishActivity finishActivity()}.</p>
-
-<p class="note"><strong>Note:</strong> In most cases, you should not explicitly finish an activity
-using these methods. As discussed in the following section about the activity lifecycle, the
-Android system manages the life of an activity for you, so you do not need to finish your own
-activities. Calling these methods could adversely affect the expected user
-experience and should only be used when you absolutely do not want the user to return to this
-instance of the activity.</p>
-
-
-<h2 id="Lifecycle">Managing the Activity Lifecycle</h2>
-
-<p>Managing the lifecycle of your activities by implementing callback methods is
-crucial to developing a strong
-and flexible application. The lifecycle of an activity is directly affected by its association with
-other activities, its task and back stack.</p>
-
-<p>An activity can exist in essentially three states:</p>
-
-<dl>
-  <dt><i>Resumed</i></dt>
-    <dd>The activity is in the foreground of the screen and has user focus. (This state is
-also sometimes referred to as "running".)</dd>
-
-  <dt><i>Paused</i></dt>
-    <dd>Another activity is in the foreground and has focus, but this one is still visible. That is,
-another activity is visible on top of this one and that activity is partially transparent or doesn't
-cover the entire screen. A paused activity is completely alive (the {@link android.app.Activity}
-object is retained in memory, it maintains all state and member information, and remains attached to
-the window manager), but can be killed by the system in extremely low memory situations.</dd>
-
-  <dt><i>Stopped</i></dt>
-    <dd>The activity is completely obscured by another activity (the activity is now in the
-"background"). A stopped activity is also still alive (the {@link android.app.Activity}
-object is retained in memory, it maintains all state and member information, but is <em>not</em>
-attached to the window manager). However, it is no longer visible to the user and it
-can be killed by the system when memory is needed elsewhere.</dd>
-</dl>
-
-<p>If an activity is paused or stopped, the system can drop it from memory either by asking it to
-finish (calling its {@link android.app.Activity#finish finish()} method), or simply killing its
-process.  When the activity is opened again (after being finished or killed), it must be created all
-over.</p>
-
-
-
-<h3 id="ImplementingLifecycleCallbacks">Implementing the lifecycle callbacks</h3>
-
-<p>When an activity transitions into and out of the different states described above, it is notified
-through various callback methods. All of the callback methods are hooks that you
-can override to do appropriate work when the state of your activity changes. The following skeleton
-activity includes each of the fundamental lifecycle methods:</p>
-
-
-<pre>
-public class ExampleActivity extends Activity {
-    &#64;Override
-    public void {@link android.app.Activity#onCreate onCreate}(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        // The activity is being created.
-    }
-    &#64;Override
-    protected void {@link android.app.Activity#onStart onStart()} {
-        super.onStart();
-        // The activity is about to become visible.
-    }
-    &#64;Override
-    protected void {@link android.app.Activity#onResume onResume()} {
-        super.onResume();
-        // The activity has become visible (it is now "resumed").
-    }
-    &#64;Override
-    protected void {@link android.app.Activity#onPause onPause()} {
-        super.onPause();
-        // Another activity is taking focus (this activity is about to be "paused").
-    }
-    &#64;Override
-    protected void {@link android.app.Activity#onStop onStop()} {
-        super.onStop();
-        // The activity is no longer visible (it is now "stopped")
-    }
-    &#64;Override
-    protected void {@link android.app.Activity#onDestroy onDestroy()} {
-        super.onDestroy();
-        // The activity is about to be destroyed.
-    }
-}
-</pre>
-
-<p class="note"><strong>Note:</strong> Your implementation of these lifecycle methods must
-always call the superclass implementation before doing any work, as shown in the examples above.</p>
-
-<p>Taken together, these methods define the entire lifecycle of an activity. By implementing these
-methods, you can monitor three nested loops in the activity lifecycle: </p>
-
-<ul>
-<li>The <b>entire lifetime</b> of an activity happens between the call to {@link
-android.app.Activity#onCreate onCreate()} and the call to {@link
-android.app.Activity#onDestroy}. Your activity should perform setup of
-"global" state (such as defining layout) in {@link android.app.Activity#onCreate onCreate()}, and
-release all remaining resources in {@link android.app.Activity#onDestroy}. For example, if your
-activity has a thread running in the background to download data from the network, it might create
-that thread in {@link android.app.Activity#onCreate onCreate()} and then stop the thread in {@link
-android.app.Activity#onDestroy}.</li>
-
-<li><p>The <b>visible lifetime</b> of an activity happens between the call to {@link
-android.app.Activity#onStart onStart()} and the call to {@link
-android.app.Activity#onStop onStop()}. During this time, the user can see the activity
-on-screen and interact with it. For example, {@link android.app.Activity#onStop onStop()} is called
-when a new activity starts and this one is no longer visible. Between these two methods, you can
-maintain resources that are needed to show the activity to the user. For example, you can register a
-{@link android.content.BroadcastReceiver} in {@link
-android.app.Activity#onStart onStart()} to monitor changes that impact your UI, and unregister
-it in {@link android.app.Activity#onStop onStop()} when the user can no longer see what you are
-displaying. The system might call {@link android.app.Activity#onStart onStart()} and {@link
-android.app.Activity#onStop onStop()} multiple times during the entire lifetime of the activity, as
-the activity alternates between being visible and hidden to the user.</p></li>
-
-<li><p>The <b>foreground lifetime</b> of an activity happens between the call to {@link
-android.app.Activity#onResume onResume()} and the call to {@link android.app.Activity#onPause
-onPause()}. During this time, the activity is in front of all other activities on screen and has
-user input focus.  An activity can frequently transition in and out of the foreground&mdash;for
-example, {@link android.app.Activity#onPause onPause()} is called when the device goes to sleep or
-when a dialog appears. Because this state can transition often, the code in these two methods should
-be fairly lightweight in order to avoid slow transitions that make the user wait.</p></li>
-</ul>
-
-<p>Figure 1 illustrates these loops and the paths an activity might take between states.
-The rectangles represent the callback methods you can implement to perform operations when
-the activity transitions between states. <p>
-
-<img src="{@docRoot}images/activity_lifecycle.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> The activity lifecycle.</p>
-
-<p>The same lifecycle callback methods are listed in table 1, which describes each of the callback
-methods in more detail and locates each one within the
-activity's overall lifecycle, including whether the system can kill the activity after the
-callback method completes.</p>
-
-<p class="table-caption"><strong>Table 1.</strong> A summary of the activity lifecycle's
-callback methods.</p>
-
-<table border="2" width="85%" frame="hsides" rules="rows">
-<colgroup align="left" span="3"></colgroup>
-<colgroup align="left"></colgroup>
-<colgroup align="center"></colgroup>
-<colgroup align="center"></colgroup>
-
-<thead>
-<tr><th colspan="3">Method</th> <th>Description</th> <th>Killable after?</th> <th>Next</th></tr>
-</thead>
-
-<tbody>
-<tr>
-  <td colspan="3" align="left"><code>{@link android.app.Activity#onCreate onCreate()}</code></td>
-  <td>Called when the activity is first created.
-      This is where you should do all of your normal static set up &mdash;
-      create views, bind data to lists, and so on.  This method is passed
-      a Bundle object containing the activity's previous state, if that
-      state was captured (see <a href="#actstate">Saving Activity State</a>,
-      later).
-      <p>Always followed by {@code onStart()}.</p></td>
-  <td align="center">No</td>
-      <td align="center">{@code onStart()}</td>
-</tr>
-
-<tr>
-   <td rowspan="5" style="border-left: none; border-right: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
-   <td colspan="2" align="left"><code>{@link android.app.Activity#onRestart
-onRestart()}</code></td>
-   <td>Called after the activity has been stopped, just prior to it being
-       started again.
-       <p>Always followed by {@code onStart()}</p></td>
-   <td align="center">No</td>
-   <td align="center">{@code onStart()}</td>
-</tr>
-
-<tr>
-   <td colspan="2" align="left"><code>{@link android.app.Activity#onStart onStart()}</code></td>
-   <td>Called just before the activity becomes visible to the user.
-       <p>Followed by {@code onResume()} if the activity comes
-       to the foreground, or {@code onStop()} if it becomes hidden.</p></td>
-    <td align="center">No</td>
-    <td align="center">{@code onResume()} <br/>or<br/> {@code onStop()}</td>
-</tr>
-
-<tr>
-   <td rowspan="2" style="border-left: none;">&nbsp;&nbsp;&nbsp;&nbsp;</td>
-   <td align="left"><code>{@link android.app.Activity#onResume onResume()}</code></td>
-   <td>Called just before the activity starts
-       interacting with the user.  At this point the activity is at
-       the top of the activity stack, with user input going to it.
-       <p>Always followed by {@code onPause()}.</p></td>
-   <td align="center">No</td>
-   <td align="center">{@code onPause()}</td>
-</tr>
-
-<tr>
-   <td align="left"><code>{@link android.app.Activity#onPause onPause()}</code></td>
-   <td>Called when the system is about to start resuming another
-       activity.  This method is typically used to commit unsaved changes to
-       persistent data, stop animations and other things that may be consuming
-       CPU, and so on.  It should do whatever it does very quickly, because
-       the next activity will not be resumed until it returns.
-       <p>Followed either by {@code onResume()} if the activity
-       returns back to the front, or by {@code onStop()} if it becomes
-       invisible to the user.</td>
-   <td align="center"><strong style="color:#800000">Yes</strong></td>
-   <td align="center">{@code onResume()} <br/>or<br/> {@code onStop()}</td>
-</tr>
-
-<tr>
-   <td colspan="2" align="left"><code>{@link android.app.Activity#onStop onStop()}</code></td>
-   <td>Called when the activity is no longer visible to the user.  This
-       may happen because it is being destroyed, or because another activity
-       (either an existing one or a new one) has been resumed and is covering it.
-       <p>Followed either by {@code onRestart()} if
-       the activity is coming back to interact with the user, or by
-       {@code onDestroy()} if this activity is going away.</p></td>
-   <td align="center"><strong style="color:#800000">Yes</strong></td>
-   <td align="center">{@code onRestart()} <br/>or<br/> {@code onDestroy()}</td>
-</tr>
-
-<tr>
-   <td colspan="3" align="left"><code>{@link android.app.Activity#onDestroy
-onDestroy()}</code></td>
-   <td>Called before the activity is destroyed.  This is the final call
-       that the activity will receive.  It could be called either because the
-       activity is finishing (someone called <code>{@link android.app.Activity#finish
-       finish()}</code> on it), or because the system is temporarily destroying this
-       instance of the activity to save space.  You can distinguish
-       between these two scenarios with the <code>{@link
-       android.app.Activity#isFinishing isFinishing()}</code> method.</td>
-   <td align="center"><strong style="color:#800000">Yes</strong></td>
-   <td align="center"><em>nothing</em></td>
-</tr>
-</tbody>
-</table>
-
-<p>The column labeled "Killable after?" indicates whether or not the system can
-kill the process hosting the activity at any time <em>after the method returns</em>, without
-executing another line of the activity's code.  Three methods are marked "yes": ({@link
-android.app.Activity#onPause
-onPause()}, {@link android.app.Activity#onStop onStop()}, and {@link android.app.Activity#onDestroy
-onDestroy()}). Because {@link android.app.Activity#onPause onPause()} is the first
-of the three, once the activity is created, {@link android.app.Activity#onPause onPause()} is the
-last method that's guaranteed to be called before the process <em>can</em> be killed&mdash;if
-the system must recover memory in an emergency, then {@link
-android.app.Activity#onStop onStop()} and {@link android.app.Activity#onDestroy onDestroy()} might
-not be called. Therefore, you should use {@link android.app.Activity#onPause onPause()} to write
-crucial persistent data (such as user edits) to storage. However, you should be selective about
-what information must be retained during {@link android.app.Activity#onPause onPause()}, because any
-blocking procedures in this method block the transition to the next activity and slow the user
-experience.</p>
-
-<p> Methods that are marked "No" in the <b>Killable</b> column protect the process hosting the
-activity from being killed from the moment they are called.  Thus, an activity is killable
-from the time {@link android.app.Activity#onPause onPause()} returns to the time
-{@link android.app.Activity#onResume onResume()} is called. It will not again be killable until
-{@link android.app.Activity#onPause onPause()} is again called and returns. </p>
-
-<p class="note"><strong>Note:</strong> An activity that's not technically "killable" by this
-definition in table 1 might still be killed by the system&mdash;but that would happen only in
-extreme circumstances when there is no other recourse. When an activity might be killed is
-discussed more in the <a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and
-Threading</a> document.</p>
-
-
-<h3 id="SavingActivityState">Saving activity state</h3>
-
-<p>The introduction to <a href="#Lifecycle">Managing the Activity Lifecycle</a> briefly mentions
-that
-when an activity is paused or stopped, the state of the activity is retained. This is true because
-the {@link android.app.Activity} object is still held in memory when it is paused or
-stopped&mdash;all information about its members and current state is still alive. Thus, any changes
-the user made within the activity are retained so that when the activity returns to the
-foreground (when it "resumes"), those changes are still there.</p>
-
-<p>However, when the system destroys an activity in order to recover memory, the {@link
-android.app.Activity} object is destroyed, so the system cannot simply resume it with its state
-intact. Instead, the system must recreate the {@link android.app.Activity} object if the user
-navigates back to it. Yet, the user is unaware
-that the system destroyed the activity and recreated it and, thus, probably
-expects the activity to be exactly as it was. In this situation, you can ensure that
-important information about the activity state is preserved by implementing an additional
-callback method that allows you to save information about the state of your activity: {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()}.</p>
-
-<p>The system calls {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
-before making the activity vulnerable to destruction. The system passes this method
-a {@link android.os.Bundle} in which you can save 
-state information about the activity as name-value pairs, using methods such as {@link
-android.os.Bundle#putString putString()} and {@link
-android.os.Bundle#putInt putInt()}. Then, if the system kills your application
-process and the user navigates back to your activity, the system recreates the activity and passes
-the {@link android.os.Bundle} to both {@link android.app.Activity#onCreate onCreate()} and {@link
-android.app.Activity#onRestoreInstanceState onRestoreInstanceState()}. Using either of these
-methods, you can extract your saved state from the {@link android.os.Bundle} and restore the
-activity state. If there is no state information to restore, then the {@link
-android.os.Bundle} passed to you is null (which is the case when the activity is created for
-the first time).</p>
-
-<img src="{@docRoot}images/fundamentals/restore_instance.png" alt="" />
-<p class="img-caption"><strong>Figure 2.</strong> The two ways in which an activity returns to user
-focus with its state intact: either the activity is destroyed, then recreated and the activity must restore
-the previously saved state, or the activity is stopped, then resumed and the activity state
-remains intact.</p>
-
-<p class="note"><strong>Note:</strong> There's no guarantee that {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()} will be called before your
-activity is destroyed, because there are cases in which it won't be necessary to save the state
-(such as when the user leaves your activity using the <em>Back</em> button, because the user is
-explicitly
-closing the activity). If the system calls {@link android.app.Activity#onSaveInstanceState
-onSaveInstanceState()}, it does so before {@link
-android.app.Activity#onStop onStop()} and possibly before {@link android.app.Activity#onPause
-onPause()}.</p>
-
-<p>However, even if you do nothing and do not implement {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()}, some of the activity state is
-restored by the {@link android.app.Activity} class's default implementation of {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()}. Specifically, the default
-implementation calls the corresponding {@link
-android.view.View#onSaveInstanceState onSaveInstanceState()} method for every {@link
-android.view.View} in the layout, which allows each view to provide information about itself
-that should be saved. Almost every widget in the Android framework implements this method as
-appropriate, such that any visible changes to the UI are automatically saved and restored when your
-activity is recreated. For example, the {@link android.widget.EditText} widget saves any text
-entered by the user and the {@link android.widget.CheckBox} widget saves whether it's checked or
-not. The only work required by you is to provide a unique ID (with the <a
-href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">{@code android:id}</a>
-attribute) for each widget you want to save its state. If a widget does not have an ID, then the
-system cannot save its state.</p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<p>You can also explicitly stop a view in your layout from saving its state by setting the
-{@link android.R.attr#saveEnabled android:saveEnabled} attribute to {@code "false"} or by calling
-the {@link android.view.View#setSaveEnabled setSaveEnabled()} method. Usually, you should not
-disable this, but you might if you want to restore the state of the activity UI differently.</p>
-</div>
-</div>
-
-<p>Although the default implementation of {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()} saves useful information about
-your activity's UI, you still might need to override it to save additional information.
-For example, you might need to save member values that changed during the activity's life (which
-might correlate to values restored in the UI, but the members that hold those UI values are not
-restored, by default).</p>
-
-<p>Because the default implementation of {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()} helps save the state of the UI, if
-you override the method in order to save additional state information, you should always call the
-superclass implementation of {@link android.app.Activity#onSaveInstanceState onSaveInstanceState()}
-before doing any work. Likewise, you should also call the supercall implementation of {@link
-android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} if you override it, so the
-default implementation can restore view states.</p>
-
-<p class="note"><strong>Note:</strong> Because {@link android.app.Activity#onSaveInstanceState
-onSaveInstanceState()} is not guaranteed
-to be called, you should use it only to record the transient state of the activity (the state of
-the UI)&mdash;you should never use it to store persistent data.  Instead, you should use  {@link
-android.app.Activity#onPause onPause()} to store persistent data (such as data that should be saved
-to a database) when the user leaves the activity.</p>
-
-<p>A good way to test your application's ability to restore its state is to simply rotate the
-device so that the screen orientation changes. When the screen orientation changes, the system
-destroys and recreates the activity in order to apply alternative resources that might be available
-for the new screen configuration. For this reason alone, it's very important that your activity
-completely restores its state when it is recreated, because users regularly rotate the screen while
-using applications.</p>
-
-
-<h3 id="ConfigurationChanges">Handling configuration changes</h3>
-
-<p>Some device configurations can change during runtime (such as screen orientation, keyboard
-availability, and language). When such a change occurs, Android recreates the running activity
-(the system calls {@link android.app.Activity#onDestroy}, then immediately calls {@link
-android.app.Activity#onCreate onCreate()}). This behavior is
-designed to help your application adapt to new configurations by automatically reloading your
-application with alternative resources that you've provided (such as different layouts for
-different screen orientations and sizes).</p>
-
-<p>If you properly design your activity to handle a restart due to a screen orientation change and
-restore the activity state as described above, your application will be more resilient to other
-unexpected events in the activity lifecycle.</p>
-
-<p>The best way to handle such a restart is
-  to save and restore the state of your activity using {@link
-  android.app.Activity#onSaveInstanceState onSaveInstanceState()} and {@link
-android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} (or {@link
-android.app.Activity#onCreate onCreate()}), as discussed in the previous section.</p>
-
-<p>For more information about configuration changes that happen at runtime and how you can handle
-them, read the guide to <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling
-Runtime Changes</a>.</p>
-
-
-
-<h3 id="CoordinatingActivities">Coordinating activities</h3>
-
- <p>When one activity starts another, they both experience lifecycle transitions. The first activity
-pauses and stops (though, it won't stop if it's still visible in the background), while the other
-activity is created. In case these activities share data saved to disc or elsewhere, it's important
-to understand that the first activity is not completely stopped before the second one is created.
-Rather, the process of starting the second one overlaps with the process of stopping the first
-one.</p>
-
-<p>The order of lifecycle callbacks is well defined, particularly when the two activities are in the
-same process and one is starting the other. Here's the order of operations that occur when Activity
-A starts Acivity B: </p>
-
-<ol>
-<li>Activity A's {@link android.app.Activity#onPause onPause()} method executes.</li>
-
-<li>Activity B's {@link android.app.Activity#onCreate onCreate()}, {@link
-android.app.Activity#onStart onStart()}, and {@link android.app.Activity#onResume onResume()}
-methods execute in sequence. (Activity B now has user focus.)</li>
-
-<li>Then, if Activity A is no longer visible on screen, its {@link
-android.app.Activity#onStop onStop()} method executes.</li>
-</ol>
-
- <p>This predictable sequence of lifecycle callbacks allows you to manage the transition of
-information from one activity to another. For example, if you must write to a database when the
-first activity stops so that the following activity can read it, then you should write to the
-database during {@link android.app.Activity#onPause onPause()} instead of during {@link
-android.app.Activity#onStop onStop()}.</p>
-
-<!--
-<h2>Beginner's Path</h2>
-
-<p>For more information about how Android maintains a history of activities and
-enables user multitasking, continue with the <b><a
-href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back
-Stack</a></b> document.</p>
--->
\ No newline at end of file
diff --git a/docs/html/guide/topics/fundamentals/bound-services.jd b/docs/html/guide/topics/fundamentals/bound-services.jd
deleted file mode 100644
index ec7d723..0000000
--- a/docs/html/guide/topics/fundamentals/bound-services.jd
+++ /dev/null
@@ -1,675 +0,0 @@
-page.title=Bound Services
-parent.title=Services
-parent.link=services.html
-@jd:body
-
-
-<div id="qv-wrapper">
-<ol id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>A bound service allows other components to bind to it, in order to interact with it and
-perform interprocess communication</li>
-  <li>A bound service is destroyed once all clients unbind, unless the service was also started</li>
-</ul>
-<h2>In this document</h2>
-<ol>
-  <li><a href="#Basics">The Basics</a></li>
-  <li><a href="#Creating">Creating a Bound Service</a>
-    <ol>
-      <li><a href="#Binder">Extending the Binder class</a></li>
-      <li><a href="#Messenger">Using a Messenger</a></li>
-    </ol>
-  </li>
-  <li><a href="#Binding">Binding to a Service</a></li>
-  <li><a href="#Lifecycle">Managing the Lifecycle of a Bound Service</a></li>
-</ol>
-
-<h2>Key classes</h2>
-<ol>
-  <li>{@link android.app.Service}</li>
-  <li>{@link android.content.ServiceConnection}</li>
-  <li>{@link android.os.IBinder}</li>
-</ol>
-
-<h2>Samples</h2>
-<ol>
-  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
-      RemoteService}</a></li>
-  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
-      LocalService}</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></li>
-</ol>
-</div>
-
-
-<p>A bound service is the server in a client-server interface. A bound service allows components
-(such as activities) to bind to the service, send requests, receive responses, and even perform
-interprocess communication (IPC). A bound service typically lives only while it serves another
-application component and does not run in the background indefinitely.</p>
-
-<p>This document shows you how to create a bound service, including how to bind
-to the service from other application components. However, you should also refer to the <a
-href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> document for additional
-information about services in general, such as how to deliver notifications from a service, set
-the service to run in the foreground, and more.</p>
-
-
-<h2 id="Basics">The Basics</h2>
-
-<p>A bound service is an implementation of the {@link android.app.Service} class that allows
-other applications to bind to it and interact with it. To provide binding for a
-service, you must implement the {@link android.app.Service#onBind onBind()} callback method. This
-method returns an {@link android.os.IBinder} object that defines the programming interface that
-clients can use to interact with the service.</p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h3>Binding to a Started Service</h3>
-
-<p>As discussed in the <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>
-document, you can create a service that is both started and bound. That is, the service can be
-started by calling {@link android.content.Context#startService startService()}, which allows the
-service to run indefinitely, and also allow a client to bind to the service by calling {@link
-android.content.Context#bindService bindService()}.
-  <p>If you do allow your service to be started and bound, then when the service has been
-started, the system does <em>not</em> destroy the service when all clients unbind. Instead, you must
-explicitly stop the service, by calling {@link android.app.Service#stopSelf stopSelf()} or {@link
-android.content.Context#stopService stopService()}.</p>
-
-<p>Although you should usually implement either {@link android.app.Service#onBind onBind()}
-<em>or</em> {@link android.app.Service#onStartCommand onStartCommand()}, it's sometimes necessary to
-implement both. For example, a music player might find it useful to allow its service to run
-indefinitely and also provide binding. This way, an activity can start the service to play some
-music and the music continues to play even if the user leaves the application. Then, when the user
-returns to the application, the activity can bind to the service to regain control of playback.</p>
-
-<p>Be sure to read the section about <a href="#Lifecycle">Managing the Lifecycle of a Bound
-Service</a>, for more information about the service lifecycle when adding binding to a
-started service.</p>
-</div>
-</div>
-
-<p>A client can bind to the service by calling {@link android.content.Context#bindService
-bindService()}. When it does, it must provide an implementation of {@link
-android.content.ServiceConnection}, which monitors the connection with the service. The {@link
-android.content.Context#bindService bindService()} method returns immediately without a value, but
-when the Android system creates the connection between the
-client and service, it calls {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} on the {@link
-android.content.ServiceConnection}, to deliver the {@link android.os.IBinder} that
-the client can use to communicate with the service.</p>
-
-<p>Multiple clients can connect to the service at once. However, the system calls your service's
-{@link android.app.Service#onBind onBind()} method to retrieve the {@link android.os.IBinder} only
-when the first client binds. The system then delivers the same {@link android.os.IBinder} to any
-additional clients that bind, without calling {@link android.app.Service#onBind onBind()} again.</p>
-
-<p>When the last client unbinds from the service, the system destroys the service (unless the
-service was also started by {@link android.content.Context#startService startService()}).</p>
-
-<p>When you implement your bound service, the most important part is defining the interface
-that your {@link android.app.Service#onBind onBind()} callback method returns. There are a few
-different ways you can define your service's {@link android.os.IBinder} interface and the following
-section discusses each technique.</p>
-
-
-
-<h2 id="Creating">Creating a Bound Service</h2>
-
-<p>When creating a service that provides binding, you must provide an {@link android.os.IBinder}
-that provides the programming interface that clients can use to interact with the service. There
-are three ways you can define the interface:</p>
-
-<dl>
-  <dt><a href="#Binder">Extending the Binder class</a></dt>
-  <dd>If your service is private to your own application and runs in the same process as the client
-(which is common), you should create your interface by extending the {@link android.os.Binder} class
-and returning an instance of it from
-{@link android.app.Service#onBind onBind()}. The client receives the {@link android.os.Binder} and
-can use it to directly access public methods available in either the {@link android.os.Binder}
-implementation or even the {@link android.app.Service}.
-  <p>This is the preferred technique when your service is merely a background worker for your own
-application. The only reason you would not create your interface this way is because
-your service is used by other applications or across separate processes.</dd>
-
-  <dt><a href="#Messenger">Using a Messenger</a></dt>
-  <dd>If you need your interface to work across different processes, you can create
-an interface for the service with a {@link android.os.Messenger}. In this manner, the service
-defines a {@link android.os.Handler} that responds to different types of {@link
-android.os.Message} objects. This {@link android.os.Handler}
-is the basis for a {@link android.os.Messenger} that can then share an {@link android.os.IBinder}
-with the client, allowing the client to send commands to the service using {@link
-android.os.Message} objects. Additionally, the client can define a {@link android.os.Messenger} of
-its own so the service can send messages back.
-  <p>This is the simplest way to perform interprocess communication (IPC), because the {@link
-android.os.Messenger} queues all requests into a single thread so that you don't have to design
-your service to be thread-safe.</p>
-  </dd>
-
-  <dt>Using AIDL</dt>
-  <dd>AIDL (Android Interface Definition Language) performs all the work to decompose objects into
-primitives that the operating system can understand and marshall them across processes to perform
-IPC. The previous technique, using a {@link android.os.Messenger}, is actually based on AIDL as
-its underlying structure. As mentioned above, the {@link android.os.Messenger} creates a queue of
-all the client requests in a single thread, so the service receives requests one at a time. If,
-however, you want your service to handle multiple requests simultaneously, then you can use AIDL
-directly. In this case, your service must be capable of multi-threading and be built thread-safe.
-  <p>To use AIDL directly, you must
-create an {@code .aidl} file that defines the programming interface. The Android SDK tools use
-this file to generate an abstract class that implements the interface and handles IPC, which you
-can then extend within your service.</p>
-  </dd>
-</dl>
-
-  <p class="note"><strong>Note:</strong> Most applications <strong>should not</strong> use AIDL to
-create a bound service, because it may require multithreading capabilities and
-can result in a more complicated implementation. As such, AIDL is not suitable for most applications
-and this document does not discuss how to use it for your service. If you're certain that you need
-to use AIDL directly, see the <a href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a>
-document.</p>
-
-
-
-
-<h3 id="Binder">Extending the Binder class</h3>
-
-<p>If your service is used only by the local application and does not need to work across processes,
-then you can implement your own {@link android.os.Binder} class that provides your client direct
-access to public methods in the service.</p>
-
-<p class="note"><strong>Note:</strong> This works only if the client and service are in the same
-application and process, which is most common. For example, this would work well for a music
-application that needs to bind an activity to its own service that's playing music in the
-background.</p>
-
-<p>Here's how to set it up:</p>
-<ol>
-  <li>In your service, create an instance of {@link android.os.Binder} that either:
-    <ul>
-      <li>contains public methods that the client can call</li>
-      <li>returns the current {@link android.app.Service} instance, which has public methods the
-client can call</li>
-      <li>or, returns an instance of another class hosted by the service with public methods the
-client can call</li>
-    </ul>
-  <li>Return this instance of {@link android.os.Binder} from the {@link
-android.app.Service#onBind onBind()} callback method.</li>
-  <li>In the client, receive the {@link android.os.Binder} from the {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method and
-make calls to the bound service using the methods provided.</li>
-</ol>
-
-<p class="note"><strong>Note:</strong> The reason the service and client must be in the same
-application is so the client can cast the returned object and properly call its APIs. The service
-and client must also be in the same process, because this technique does not perform any
-marshalling across processes.</p>
-
-<p>For example, here's a service that provides clients access to methods in the service through
-a {@link android.os.Binder} implementation:</p>
-
-<pre>
-public class LocalService extends Service {
-    // Binder given to clients
-    private final IBinder mBinder = new LocalBinder();
-    // Random number generator
-    private final Random mGenerator = new Random();
-
-    /**
-     * Class used for the client Binder.  Because we know this service always
-     * runs in the same process as its clients, we don't need to deal with IPC.
-     */
-    public class LocalBinder extends Binder {
-        LocalService getService() {
-            // Return this instance of LocalService so clients can call public methods
-            return LocalService.this;
-        }
-    }
-
-    &#64;Override
-    public IBinder onBind(Intent intent) {
-        return mBinder;
-    }
-
-    /** method for clients */
-    public int getRandomNumber() {
-      return mGenerator.nextInt(100);
-    }
-}
-</pre>
-
-<p>The {@code LocalBinder} provides the {@code getService()} method for clients to retrieve the
-current instance of {@code LocalService}. This allows clients to call public methods in the
-service. For example, clients can call {@code getRandomNumber()} from the service.</p>
-
-<p>Here's an activity that binds to {@code LocalService} and calls {@code getRandomNumber()}
-when a button is clicked:</p>
-
-<pre>
-public class BindingActivity extends Activity {
-    LocalService mService;
-    boolean mBound = false;
-
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-    }
-
-    &#64;Override
-    protected void onStart() {
-        super.onStart();
-        // Bind to LocalService
-        Intent intent = new Intent(this, LocalService.class);
-        bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
-    }
-
-    &#64;Override
-    protected void onStop() {
-        super.onStop();
-        // Unbind from the service
-        if (mBound) {
-            unbindService(mConnection);
-            mBound = false;
-        }
-    }
-
-    /** Called when a button is clicked (the button in the layout file attaches to
-      * this method with the android:onClick attribute) */
-    public void onButtonClick(View v) {
-        if (mBound) {
-            // Call a method from the LocalService.
-            // However, if this call were something that might hang, then this request should
-            // occur in a separate thread to avoid slowing down the activity performance.
-            int num = mService.getRandomNumber();
-            Toast.makeText(this, "number: " + num, Toast.LENGTH_SHORT).show();
-        }
-    }
-
-    /** Defines callbacks for service binding, passed to bindService() */
-    private ServiceConnection mConnection = new ServiceConnection() {
-
-        &#64;Override
-        public void onServiceConnected(ComponentName className,
-                IBinder service) {
-            // We've bound to LocalService, cast the IBinder and get LocalService instance
-            LocalBinder binder = (LocalBinder) service;
-            mService = binder.getService();
-            mBound = true;
-        }
-
-        &#64;Override
-        public void onServiceDisconnected(ComponentName arg0) {
-            mBound = false;
-        }
-    };
-}
-</pre>
-
-<p>The above sample shows how the client binds to the service using an implementation of
-{@link android.content.ServiceConnection} and the {@link
-android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback. The next
-section provides more information about this process of binding to the service.</p>
-
-<p class="note"><strong>Note:</strong> The example above doesn't explicitly unbind from the service,
-but all clients should unbind at an appropriate time (such as when the activity pauses).</p>
-
-<p>For more sample code, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
-LocalService.java}</a> class and the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html">{@code
-LocalServiceActivities.java}</a> class in <a
-href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
-
-
-
-
-
-<h3 id="Messenger">Using a Messenger</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h4>Compared to AIDL</h4>
-  <p>When you need to perform IPC, using a {@link android.os.Messenger} for your interface is
-simpler than implementing it with AIDL, because {@link android.os.Messenger} queues
-all calls to the service, whereas, a pure AIDL interface sends simultaneous requests to the
-service, which must then handle multi-threading.</p>
-  <p>For most applications, the service doesn't need to perform multi-threading, so using a {@link
-android.os.Messenger} allows the service to handle one call at a time. If it's important
-that your service be multi-threaded, then you should use <a
-href="{@docRoot}guide/developing/tools/aidl.html">AIDL</a> to define your interface.</p>
-</div>
-</div>
-
-<p>If you need your service to communicate with remote processes, then you can use a
-{@link android.os.Messenger} to provide the interface for your service. This technique allows
-you to perform interprocess communication (IPC) without the need to use AIDL.</p>
-
-<p>Here's a summary of how to use a {@link android.os.Messenger}:</p>
-
-<ul>
-  <li>The service implements a {@link android.os.Handler} that receives a callback for each
-call from a client.</li>
-  <li>The {@link android.os.Handler} is used to create a {@link android.os.Messenger} object
-(which is a reference to the {@link android.os.Handler}).</li>
-  <li>The {@link android.os.Messenger} creates an {@link android.os.IBinder} that the service
-returns to clients from {@link android.app.Service#onBind onBind()}.</li>
-  <li>Clients use the {@link android.os.IBinder} to instantiate the {@link android.os.Messenger}
-(that references the service's {@link android.os.Handler}), which the client uses to send
-{@link android.os.Message} objects to the service.</li>
-  <li>The service receives each {@link android.os.Message} in its {@link
-android.os.Handler}&mdash;specifically, in the {@link android.os.Handler#handleMessage
-handleMessage()} method.</li>
-</ul>
-
-
-<p>In this way, there are no "methods" for the client to call on the service. Instead, the
-client delivers "messages" ({@link android.os.Message} objects) that the service receives in
-its {@link android.os.Handler}.</p>
-
-<p>Here's a simple example service that uses a {@link android.os.Messenger} interface:</p>
-
-<pre>
-public class MessengerService extends Service {
-    /** Command to the service to display a message */
-    static final int MSG_SAY_HELLO = 1;
-
-    /**
-     * Handler of incoming messages from clients.
-     */
-    class IncomingHandler extends Handler {
-        &#64;Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_SAY_HELLO:
-                    Toast.makeText(getApplicationContext(), "hello!", Toast.LENGTH_SHORT).show();
-                    break;
-                default:
-                    super.handleMessage(msg);
-            }
-        }
-    }
-
-    /**
-     * Target we publish for clients to send messages to IncomingHandler.
-     */
-    final Messenger mMessenger = new Messenger(new IncomingHandler());
-
-    /**
-     * When binding to the service, we return an interface to our messenger
-     * for sending messages to the service.
-     */
-    &#64;Override
-    public IBinder onBind(Intent intent) {
-        Toast.makeText(getApplicationContext(), "binding", Toast.LENGTH_SHORT).show();
-        return mMessenger.getBinder();
-    }
-}
-</pre>
-
-<p>Notice that the {@link android.os.Handler#handleMessage handleMessage()} method in the
-{@link android.os.Handler} is where the service receives the incoming {@link android.os.Message}
-and decides what to do, based on the {@link android.os.Message#what} member.</p>
-
-<p>All that a client needs to do is create a {@link android.os.Messenger} based on the {@link
-android.os.IBinder} returned by the service and send a message using {@link
-android.os.Messenger#send send()}. For example, here's a simple activity that binds to the
-service and delivers the {@code MSG_SAY_HELLO} message to the service:</p>
-
-<pre>
-public class ActivityMessenger extends Activity {
-    /** Messenger for communicating with the service. */
-    Messenger mService = null;
-
-    /** Flag indicating whether we have called bind on the service. */
-    boolean mBound;
-
-    /**
-     * Class for interacting with the main interface of the service.
-     */
-    private ServiceConnection mConnection = new ServiceConnection() {
-        public void onServiceConnected(ComponentName className, IBinder service) {
-            // This is called when the connection with the service has been
-            // established, giving us the object we can use to
-            // interact with the service.  We are communicating with the
-            // service using a Messenger, so here we get a client-side
-            // representation of that from the raw IBinder object.
-            mService = new Messenger(service);
-            mBound = true;
-        }
-
-        public void onServiceDisconnected(ComponentName className) {
-            // This is called when the connection with the service has been
-            // unexpectedly disconnected -- that is, its process crashed.
-            mService = null;
-            mBound = false;
-        }
-    };
-
-    public void sayHello(View v) {
-        if (!mBound) return;
-        // Create and send a message to the service, using a supported 'what' value
-        Message msg = Message.obtain(null, MessengerService.MSG_SAY_HELLO, 0, 0);
-        try {
-            mService.send(msg);
-        } catch (RemoteException e) {
-            e.printStackTrace();
-        }
-    }
-
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-    }
-
-    &#64;Override
-    protected void onStart() {
-        super.onStart();
-        // Bind to the service
-        bindService(new Intent(this, MessengerService.class), mConnection,
-            Context.BIND_AUTO_CREATE);
-    }
-
-    &#64;Override
-    protected void onStop() {
-        super.onStop();
-        // Unbind from the service
-        if (mBound) {
-            unbindService(mConnection);
-            mBound = false;
-        }
-    }
-}
-</pre>
-
-<p>Notice that this example does not show how the service can respond to the client. If you want the
-service to respond, then you need to also create a {@link android.os.Messenger} in the client. Then
-when the client receives the {@link android.content.ServiceConnection#onServiceConnected
-onServiceConnected()} callback, it sends a {@link android.os.Message} to the service that includes
-the client's {@link android.os.Messenger} in the {@link android.os.Message#replyTo} parameter
-of the {@link android.os.Messenger#send send()} method.</p>
-
-<p>You can see an example of how to provide two-way messaging in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html">{@code
-MessengerService.java}</a> (service) and <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html">{@code
-MessengerServiceActivities.java}</a> (client) samples.</p>
-
-
-
-
-
-<h2 id="Binding">Binding to a Service</h2>
-
-<p>Application components (clients) can bind to a service by calling
-{@link android.content.Context#bindService bindService()}. The Android
-system then calls the service's {@link android.app.Service#onBind
-onBind()} method, which returns an {@link android.os.IBinder} for interacting with the service.</p>
-
-<p>The binding is asynchronous. {@link android.content.Context#bindService
-bindService()} returns immediately and does <em>not</em> return the {@link android.os.IBinder} to
-the client. To receive the {@link android.os.IBinder}, the client must create an instance of {@link
-android.content.ServiceConnection} and pass it to {@link android.content.Context#bindService
-bindService()}. The {@link android.content.ServiceConnection} includes a callback method that the
-system calls to deliver the {@link android.os.IBinder}.</p>
-
-<p class="note"><strong>Note:</strong> Only activities, services, and content providers can bind
-to a service&mdash;you <strong>cannot</strong> bind to a service from a broadcast receiver.</p>
-
-<p>So, to bind to a service from your client, you must: </p>
-<ol>
-  <li>Implement {@link android.content.ServiceConnection}.
-    <p>Your implementation must override two callback methods:</p>
-    <dl>
-      <dt>{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()}</dt>
-        <dd>The system calls this to deliver the {@link android.os.IBinder} returned by
-the service's {@link android.app.Service#onBind onBind()} method.</dd>
-      <dt>{@link android.content.ServiceConnection#onServiceDisconnected
-onServiceDisconnected()}</dt>
-        <dd>The Android system calls this when the connection to the service is unexpectedly
-lost, such as when the service has crashed or has been killed. This is <em>not</em> called when the
-client unbinds.</dd>
-    </dl>
-  </li>
-  <li>Call {@link
-android.content.Context#bindService bindService()}, passing the {@link
-android.content.ServiceConnection} implementation. </li>
-  <li>When the system calls your {@link android.content.ServiceConnection#onServiceConnected
-onServiceConnected()} callback method, you can begin making calls to the service, using
-the methods defined by the interface.</li>
-  <li>To disconnect from the service, call {@link
-android.content.Context#unbindService unbindService()}.
-    <p>When your client is destroyed, it will unbind from the service, but you should always unbind
-when you're done interacting with the service or when your activity pauses so that the service can
-shutdown while its not being used. (Appropriate times to bind and unbind is discussed
-more below.)</p>
-  </li>
-</ol>
-
-<p>For example, the following snippet connects the client to the service created above by
-<a href="#Binder">extending the Binder class</a>, so all it must do is cast the returned
-{@link android.os.IBinder} to the {@code LocalService} class and request the {@code
-LocalService} instance:</p>
-
-<pre>
-LocalService mService;
-private ServiceConnection mConnection = new ServiceConnection() {
-    // Called when the connection with the service is established
-    public void onServiceConnected(ComponentName className, IBinder service) {
-        // Because we have bound to an explicit
-        // service that is running in our own process, we can
-        // cast its IBinder to a concrete class and directly access it.
-        LocalBinder binder = (LocalBinder) service;
-        mService = binder.getService();
-        mBound = true;
-    }
-
-    // Called when the connection with the service disconnects unexpectedly
-    public void onServiceDisconnected(ComponentName className) {
-        Log.e(TAG, "onServiceDisconnected");
-        mBound = false;
-    }
-};
-</pre>
-
-<p>With this {@link android.content.ServiceConnection}, the client can bind to a service by passing
-this it to {@link android.content.Context#bindService bindService()}. For example:</p>
-
-<pre>
-Intent intent = new Intent(this, LocalService.class);
-bindService(intent, mConnection, Context.BIND_AUTO_CREATE);
-</pre>
-
-<ul>
-  <li>The first parameter of {@link android.content.Context#bindService bindService()} is an
-{@link android.content.Intent} that explicitly names the service to bind (thought the intent
-could be implicit).</li>
-<li>The second parameter is the {@link android.content.ServiceConnection} object.</li>
-<li>The third parameter is a flag indicating options for the binding. It should usually be {@link
-android.content.Context#BIND_AUTO_CREATE} in order to create the service if its not already alive.
-Other possible values are {@link android.content.Context#BIND_DEBUG_UNBIND}
-and {@link android.content.Context#BIND_NOT_FOREGROUND}, or {@code 0} for none.</li>
-</ul>
-
-
-<h3>Additional notes</h3>
-
-<p>Here are some important notes about binding to a service:</p>
-<ul>
-  <li>You should always trap {@link android.os.DeadObjectException} exceptions, which are thrown
-when the connection has broken. This is the only exception thrown by remote methods.</li>
-  <li>Objects are reference counted across processes. </li>
-  <li>You should usually pair the binding and unbinding during
-matching bring-up and tear-down moments of the client's lifecycle. For example:
-    <ul>
-      <li>If you only need to interact with the service while your activity is visible, you
-should bind during {@link android.app.Activity#onStart onStart()} and unbind during {@link
-android.app.Activity#onStop onStop()}.</li>
-      <li>If you want your activity to receive responses even while it is stopped in the
-background, then you can bind during {@link android.app.Activity#onCreate onCreate()} and unbind
-during {@link android.app.Activity#onDestroy onDestroy()}. Beware that this implies that your
-activity needs to use the service the entire time it's running (even in the background), so if
-the service is in another process, then you increase the weight of the process and it becomes
-more likely that the system will kill it.</li>
-    </ul>
-    <p class="note"><strong>Note:</strong> You should usually <strong>not</strong> bind and unbind
-during your activity's {@link android.app.Activity#onResume onResume()} and {@link
-android.app.Activity#onPause onPause()}, because these callbacks occur at every lifecycle transition
-and you should keep the processing that occurs at these transitions to a minimum. Also, if
-multiple activities in your application bind to the same service and there is a transition between
-two of those activities, the service may be destroyed and recreated as the current activity unbinds
-(during pause) before the next one binds (during resume). (This activity transition for how
-activities coordinate their lifecycles is described in the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#CoordinatingActivities">Activities</a>
-document.)</p>
-</ul>
-
-<p>For more sample code, showing how to bind to a service, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
-RemoteService.java}</a> class in <a
-href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
-
-
-
-
-
-<h2 id="Lifecycle">Managing the Lifecycle of a Bound Service</h2>
-
-<div class="figure" style="width:588px">
-<img src="{@docRoot}images/fundamentals/service_binding_tree_lifecycle.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> The lifecycle for a service that is started
-and also allows binding.</p>
-</div>
-
-<p>When a service is unbound from all clients, the Android system destroys it (unless it was also
-started with {@link android.app.Service#onStartCommand onStartCommand()}). As such, you don't have
-to manage the lifecycle of your service if it's purely a bound
-service&mdash;the Android system manages it for you based on whether it is bound to any clients.</p>
-
-<p>However, if you choose to implement the {@link android.app.Service#onStartCommand
-onStartCommand()} callback method, then you must explicitly stop the service, because the
-service is now considered to be <em>started</em>. In this case, the service runs until the service
-stops itself with {@link android.app.Service#stopSelf()} or another component calls {@link
-android.content.Context#stopService stopService()}, regardless of whether it is bound to any
-clients.</p>
-
-<p>Additionally, if your service is started and accepts binding, then when the system calls
-your {@link android.app.Service#onUnbind onUnbind()} method, you can optionally return
-{@code true} if you would like to receive a call to {@link android.app.Service#onRebind
-onRebind()} the next time a client binds to the service (instead of receiving a call to {@link
-android.app.Service#onBind onBind()}). {@link android.app.Service#onRebind
-onRebind()} returns void, but the client still receives the {@link android.os.IBinder} in its
-{@link android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback.
-Below, figure 1 illustrates the logic for this kind of lifecycle.</p>
-
-<p>For more information about the lifecycle of an started service, see the <a
-href="{@docRoot}guide/topics/fundamentals/services.html#Lifecycle">Services</a> document.</p>
-
-
-
-
diff --git a/docs/html/guide/topics/fundamentals/fragments.jd b/docs/html/guide/topics/fundamentals/fragments.jd
deleted file mode 100644
index 2a22394..0000000
--- a/docs/html/guide/topics/fundamentals/fragments.jd
+++ /dev/null
@@ -1,836 +0,0 @@
-page.title=Fragments
-parent.title=Activities
-parent.link=activities.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Quickview</h2>
-  <ul>
-    <li>Fragments decompose application functionality and UI into reusable modules</li>
-    <li>Add multiple fragments to a screen to avoid switching activities</li>
-    <li>Fragments have their own lifecycle, state, and back stack</li>
-    <li>Fragments require API Level 11 or greater</li>
-  </ul>
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Design">Design Philosophy</a></li>
-    <li><a href="#Creating">Creating a Fragment</a>
-      <ol>
-        <li><a href="#UI">Adding a user interface</a></li>
-        <li><a href="#Adding">Adding a fragment to an activity</a></li>
-      </ol>
-    </li>
-    <li><a href="#Managing">Managing Fragments</a></li>
-    <li><a href="#Transactions">Performing Fragment Transactions</a></li>
-    <li><a href="#CommunicatingWithActivity">Communicating with the Activity</a>
-      <ol>
-        <li><a href="#EventCallbacks">Creating event callbacks to the activity</a></li>
-        <li><a href="#ActionBar">Adding items to the Action Bar</a></li>
-      </ol>
-    </li>
-    <li><a href="#Lifecycle">Handling the Fragment Lifecycle</a>
-      <ol>
-        <li><a href="#CoordinatingWithActivity">Coordinating with the activity lifecycle</a></li>
-      </ol>
-    </li>
-    <li><a href="#Example">Example</a></li>
-  </ol>
-
-  <h2>Key classes</h2>
-  <ol>
-    <li>{@link android.app.Fragment}</li>
-    <li>{@link android.app.FragmentManager}</li>
-    <li>{@link android.app.FragmentTransaction}</li>
-  </ol>
-
-  <h2>Related samples</h2>
-  <ol>
-    <li><a
-href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a></li>
-    <li><a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">ApiDemos</a></li>
-  </ol>
-  
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets
-and Handsets</a></li>
-  </ol>
-</div>
-</div>
-
-<p>A {@link android.app.Fragment} represents a behavior or a portion of user interface in an
-{@link android.app.Activity}. You can combine multiple fragments in a single activity to build a
-multi-pane UI and reuse a fragment in multiple activities. You can think of a fragment as a
-modular section of an activity, which has its own lifecycle, receives its own input events, and
-which you can add or remove while the activity is running (sort of like a "sub activity" that
-you can reuse in different activities).</p>
-
-<p>A fragment must always be embedded in an activity and the fragment's lifecycle is directly
-affected by the host activity's lifecycle. For example, when the activity is paused, so are all
-fragments in it, and when the activity is destroyed, so are all fragments. However, while an
-activity is running (it is in the <em>resumed</em> <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">lifecycle state</a>), you can
-manipulate each fragment independently, such as add or remove them. When you perform such a
-fragment transaction, you can also add it to a back stack that's managed by the
-activity&mdash;each back stack entry in the activity is a record of the fragment transaction that
-occurred. The back stack allows the user to reverse a fragment transaction (navigate backwards),
-by pressing the <em>Back</em> button.</p>
-
-<p>When you add a fragment as a part of your activity layout, it lives in a {@link
-android.view.ViewGroup} inside the activity's view hierarchy and the fragment defines its own view
-layout.
-You can insert a fragment into your activity layout by declaring the fragment in the activity's
-layout file, as a {@code &lt;fragment&gt;} element, or from your application code by adding it to an
-existing {@link android.view.ViewGroup}. However, a fragment is not required to be a part of the
-activity layout; you may also use a fragment without its own UI as an invisible worker for the
-activity.</p>
-
-<p>This document describes how to build your application to use fragments, including
-how fragments can maintain their state when added to the activity's back stack, share
-events with the activity and other fragments in the activity, contribute to the activity's action
-bar, and more.</p>
-
-
-<h2 id="Design">Design Philosophy</h2>
-
-<p>Android introduced fragments in Android 3.0 (API level 11), primarily to support more
-dynamic and flexible UI designs on large screens, such as tablets. Because a
-tablet's screen is much larger than that of a handset, there's more room to combine and
-interchange UI components. Fragments allow such designs without the need for you to manage complex
-changes to the view hierarchy. By dividing the layout of an activity into fragments, you become able
-to modify the activity's appearance at runtime and preserve those changes in a back stack
-that's managed by the activity.</p>
-
-<p>For example, a news application can use one fragment to show a list of articles on the
-left and another fragment to display an article on the right&mdash;both fragments appear in one
-activity, side by side, and each fragment has its own set of lifecycle callback methods and handle
-their own user input events. Thus, instead of using one activity to select an article and another
-activity to read the article, the user can select an article and read it all within the same
-activity, as illustrated in the tablet layout in figure 1.</p>
-
-<p>You should design each fragment as a modular and reusable activity component. That is, because
-each fragment defines its own layout and its own behavior with its own lifecycle callbacks, you can
-include one fragment in multiple activities, so you should design for reuse and avoid directly
-manipulating one fragment from another fragment. This is especially important because a modular
-fragment allows you to change your fragment combinations for different screen sizes. When designing
-your application to support both tablets and handsets, you can reuse your fragments in different
-layout configurations to optimize the user experience based on the available screen space. For
-example, on a handset, it might be necessary to separate fragments to provide a single-pane UI when
-more than one cannot fit within the same activity.</p>
-
-<img src="{@docRoot}images/fundamentals/fragments.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> An example of how two UI modules defined by
-fragments can be combined into one activity for a tablet design, but separated for a
-handset design.</p>
-
-<p>For example&mdash;to continue with the news application example&mdash;the application can embed
-two fragments in <em>Activity A</em>, when running on a tablet-sized device. However, on a
-handset-sized screen, there's not enough room for both fragments, so <em>Activity A</em> includes
-only the fragment for the list of articles, and when the user selects an article, it starts
-<em>Activity B</em>, which includes the second fragment to read the article. Thus, the application
-supports both tablets and handsets by reusing fragments in different combinations, as illustrated in
-figure 1.</p>
-
-<p>For more information about designing your application with different fragment combinations for
-different screen configurations, see the guide to <a
-href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and Handsets</a>.</p>
-
-
-
-<h2 id="Creating">Creating a Fragment</h2>
-
-<div class="figure" style="width:327px">
-<img src="{@docRoot}images/fragment_lifecycle.png" alt="" />
-<p class="img-caption"><strong>Figure 2.</strong> The lifecycle of a fragment (while its
-activity is running).</p>
-</div>
-
-<p>To create a fragment, you must create a subclass of {@link android.app.Fragment} (or an existing
-subclass of it). The {@link android.app.Fragment} class has code that looks a lot like
-an {@link android.app.Activity}. It contains callback methods similar to an activity, such
-as {@link android.app.Fragment#onCreate onCreate()}, {@link android.app.Fragment#onStart onStart()},
-{@link android.app.Fragment#onPause onPause()}, and {@link android.app.Fragment#onStop onStop()}. In
-fact, if you're converting an existing Android application to use fragments, you might simply move
-code from your activity's callback methods into the respective callback methods of your
-fragment.</p>
-
-<p>Usually, you should implement at least the following lifecycle methods:</p>
-
-<dl>
-  <dt>{@link android.app.Fragment#onCreate onCreate()}</dt>
-  <dd>The system calls this when creating the fragment. Within your implementation, you should
-initialize essential components of the fragment that you want to retain when the fragment is
-paused or stopped, then resumed.</dd>
-  <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
-  <dd>The system calls this when it's time for the fragment to draw its user interface for the
-first time. To draw a UI for your fragment, you must return a {@link android.view.View} from this
-method that is the root of your fragment's layout. You can return null if the fragment does not
-provide a UI.</dd>
-  <dt>{@link android.app.Activity#onPause onPause()}</dt>
-  <dd>The system calls this method as the first indication that the user is leaving the
-fragment (though it does not always mean the fragment is being destroyed). This is usually where you
-should commit any changes that should be persisted beyond the current user session (because
-the user might not come back).</dd>
-</dl>
-
-<p>Most applications should implement at least these three methods for every fragment, but there are
-several other callback methods you should also use to handle various stages of the
-fragment lifecycle. All the lifecycle callback methods are discussed more later, in the section
-about <a href="#Lifecycle">Handling the Fragment Lifecycle</a>.</p>
-
-
-<p>There are also a few subclasses that you might want to extend, instead of the base {@link
-android.app.Fragment} class:</p>
-
-<dl>
-  <dt>{@link android.app.DialogFragment}</dt>
-  <dd>Displays a floating dialog. Using this class to create a dialog is a good alternative to using
-the dialog helper methods in the {@link android.app.Activity} class, because you can
-incorporate a fragment dialog into the back stack of fragments managed by the activity,
-allowing the user to return to a dismissed fragment.</dd>
-
-  <dt>{@link android.app.ListFragment}</dt>
-  <dd>Displays a list of items that are managed by an adapter (such as a {@link
-android.widget.SimpleCursorAdapter}), similar to {@link android.app.ListActivity}. It provides
-several methods for managing a list view, such as the {@link
-android.app.ListFragment#onListItemClick(ListView,View,int,long) onListItemClick()} callback to
-handle click events.</dd>
-
-  <dt>{@link android.preference.PreferenceFragment}</dt>
-  <dd>Displays a hierarchy of {@link android.preference.Preference} objects as a list, similar to
-{@link android.preference.PreferenceActivity}. This is useful when creating a "settings"
-activity for your application.</dd>
-</dl>
-
-
-<h3 id="UI">Adding a user interface</h3>
-
-<p>A fragment is usually used as part of an activity's user interface and contributes its own
-layout to the activity.</p>
-
-<p>To provide a layout for a fragment, you must implement the {@link
-android.app.Fragment#onCreateView onCreateView()} callback method, which the Android system calls
-when it's time for the fragment to draw its layout. Your implementation of this method must return a
-{@link android.view.View} that is the root of your fragment's layout.</p>
-
-<p class="note"><strong>Note:</strong> If your fragment is a subclass of {@link
-android.app.ListFragment}, the default implementation returns a {@link android.widget.ListView} from
-{@link android.app.Fragment#onCreateView onCreateView()}, so you don't need to implement it.</p>
-
-<p>To return a layout from {@link
-android.app.Fragment#onCreateView onCreateView()}, you can inflate it from a <a
-href="{@docRoot}guide/topics/resources/layout-resource.html">layout resource</a> defined in XML. To
-help you do so, {@link android.app.Fragment#onCreateView onCreateView()} provides a
-{@link android.view.LayoutInflater} object.</p>
-
-<p>For example, here's a subclass of {@link android.app.Fragment} that loads a layout from the
-{@code example_fragment.xml} file:</p>
-
-<pre>
-public static class ExampleFragment extends Fragment {
-    &#64;Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.example_fragment, container, false);
-    }
-}
-</pre>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h3>Creating a layout</h3>
-  <p>In the sample above, {@code R.layout.example_fragment} is a reference to a layout resource
-named {@code example_fragment.xml} saved in the application resources. For information about how to
-create a layout in XML, see the <a href="{@docRoot}guide/topics/ui/index.html">User Interface</a>
-documentation.</p>
-</div>
-</div>
-
-<p>The {@code container} parameter passed to {@link android.app.Fragment#onCreateView
-onCreateView()} is the parent {@link android.view.ViewGroup} (from the activity's layout) in which
-your fragment layout
-will be inserted. The {@code savedInstanceState} parameter is a {@link android.os.Bundle} that
-provides data about the previous instance of the fragment, if the fragment is being resumed
-(restoring state is discussed more in the section about <a href="#Lifecycle">Handling the
-Fragment Lifecycle</a>).</p>
-
-<p>The {@link android.view.LayoutInflater#inflate(int,ViewGroup,boolean) inflate()} method takes
-three arguments:</p>
-<ul>
-  <li>The resource ID of the layout you want to inflate.</li>
-  <li>The {@link android.view.ViewGroup} to be the parent of the inflated layout. Passing the {@code
-container} is important in order for the system to apply layout parameters to the root view of the
-inflated layout, specified by the parent view in which it's going.</li>
-  <li>A boolean indicating whether the inflated layout should be attached to the {@link
-android.view.ViewGroup} (the second parameter) during inflation. (In this case, this
-is false because the system is already inserting the inflated layout into the {@code
-container}&mdash;passing true would create a redundant view group in the final layout.)</li>
-</ul>
-
-<p>Now you've seen how to create a fragment that provides a layout. Next, you need to add
-the fragment to your activity.</p>
-
-
-
-<h3 id="Adding">Adding a fragment to an activity</h3>
-
-<p>Usually, a fragment contributes a portion of UI to the host activity, which is embedded as a part
-of the activity's overall view hierarchy. There are two ways you can add a fragment to the activity
-layout:</p>
-
-<ul>
-  <li><b>Declare the fragment inside the activity's layout file.</b>
-<p>In this case, you can
-specify layout properties for the fragment as if it were a view. For example, here's the layout
-file for an activity with two fragments:</p>
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="horizontal"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"&gt;
-    &lt;fragment android:name="com.example.news.ArticleListFragment"
-            android:id="@+id/list"
-            android:layout_weight="1"
-            android:layout_width="0dp"
-            android:layout_height="match_parent" /&gt;
-    &lt;fragment android:name="com.example.news.ArticleReaderFragment"
-            android:id="@+id/viewer"
-            android:layout_weight="2"
-            android:layout_width="0dp"
-            android:layout_height="match_parent" /&gt;
-&lt;/LinearLayout&gt;
-</pre>
-  <p>The {@code android:name} attribute in the {@code &lt;fragment&gt;} specifies the {@link
-android.app.Fragment} class to instantiate in the layout.</p>
-
-<p>When the system creates this activity layout, it instantiates each fragment specified in the
-layout and calls the {@link android.app.Fragment#onCreateView onCreateView()} method for each one,
-to retrieve each fragment's layout. The system inserts the {@link android.view.View} returned by the
-fragment directly in place of the {@code &lt;fragment&gt;} element.</p>
-
-<div class="note">
-  <p><strong>Note:</strong> Each fragment requires a unique identifier that
-the system can use to restore the fragment if the activity is restarted (and which you can use to
-capture the fragment to perform transactions, such as remove it). There are three ways to provide an
-ID for a fragment:</p>
-  <ul>
-    <li>Supply the {@code android:id} attribute with a unique ID.</li>
-    <li>Supply the {@code android:tag} attribute with a unique string.</li>
-    <li>If you provide neither of the previous two, the system uses the ID of the container 
-view.</li>
-  </ul>
-</div>
-  </li>
-
-  <li><b>Or, programmatically add the fragment to an existing {@link android.view.ViewGroup}.</b>
-<p>At any time while your activity is running, you can add fragments to your activity layout. You
-simply need to specify a {@link
-android.view.ViewGroup} in which to place the fragment.</p>
-  <p>To make fragment transactions in your activity (such as add, remove, or replace a
-fragment), you must use APIs from {@link android.app.FragmentTransaction}. You can get an instance
-of {@link android.app.FragmentTransaction} from your {@link android.app.Activity} like this:</p>
-
-<pre>
-FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()}
-FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
-</pre>
-
-<p>You can then add a fragment using the {@link
-android.app.FragmentTransaction#add(int,Fragment) add()} method, specifying the fragment to add and
-the view in which to insert it. For example:</p>
-
-<pre>
-ExampleFragment fragment = new ExampleFragment();
-fragmentTransaction.add(R.id.fragment_container, fragment);
-fragmentTransaction.commit();
-</pre>
-
-  <p>The first argument passed to {@link android.app.FragmentTransaction#add(int,Fragment) add()}
-is the {@link android.view.ViewGroup} in which the fragment should be placed, specified by
-resource ID, and the second parameter is the fragment to add.</p>
-  <p>Once you've made your changes with
-{@link android.app.FragmentTransaction}, you must
-call {@link android.app.FragmentTransaction#commit} for the changes to take effect.</p>
-  </li>
-</ul>
-
-
-<h4 id="AddingWithoutUI">Adding a fragment without a UI</h4>
-
-<p>The examples above show how to add a fragment to your activity in order to provide a UI. However,
-you can also use a fragment to provide a background behavior for the activity without presenting
-additional UI.</p>
-
-<p>To add a fragment without a UI, add the fragment from the activity using {@link
-android.app.FragmentTransaction#add(Fragment,String)} (supplying a unique string "tag" for the
-fragment, rather than a view ID). This adds the fragment, but, because it's not associated with a
-view in the activity layout, it does not receive a call to {@link
-android.app.Fragment#onCreateView onCreateView()}. So you don't need to implement that method.</p>
-
-<p>Supplying a string tag for the fragment isn't strictly for non-UI fragments&mdash;you can also
-supply string tags to fragments that do have a UI&mdash;but if the fragment does not have a
-UI, then the string tag is the only way to identify it. If you want to get the fragment from the
-activity later, you need to use {@link android.app.FragmentManager#findFragmentByTag
-findFragmentByTag()}.</p>
-
-<p>For an example activity that uses a fragment as a background worker, without a UI, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html">{@code
-FragmentRetainInstance.java}</a> sample.</p>
-
-
-
-<h2 id="Managing">Managing Fragments</h2>
-
-<p>To manage the fragments in your activity, you need to use {@link android.app.FragmentManager}. To
-get it, call {@link android.app.Activity#getFragmentManager()} from your activity.</p>
-
-<p>Some things that you can do with {@link android.app.FragmentManager} include:</p>
-
-<ul>
-  <li>Get fragments that exist in the activity, with {@link
-android.app.FragmentManager#findFragmentById findFragmentById()} (for fragments that provide a UI in
-the activity layout) or {@link android.app.FragmentManager#findFragmentByTag
-findFragmentByTag()} (for fragments that do or don't provide a UI).</li> 
-  <li>Pop fragments off the back stack, with {@link
-android.app.FragmentManager#popBackStack()} (simulating a <em>Back</em> command by the user).</li>
-  <li>Register a listener for changes to the back stack, with {@link
-android.app.FragmentManager#addOnBackStackChangedListener addOnBackStackChangedListener()}.</li>
-</ul>
-
-<p>For more information about these methods and others, refer to the {@link
-android.app.FragmentManager} class documentation.</p>
-
-<p>As demonstrated in the previous section, you can also use {@link android.app.FragmentManager}
-to open a {@link android.app.FragmentTransaction}, which allows you to perform transactions, such as
-add and remove fragments.</p>
-
-
-<h2 id="Transactions">Performing Fragment Transactions</h2>
-
-<p>A great feature about using fragments in your activity is the ability to add, remove, replace,
-and perform other actions with them, in response to user interaction. Each set of changes that you
-commit to the activity is called a transaction and you can perform one using APIs in {@link
-android.app.FragmentTransaction}. You can also save each transaction to a back stack managed by the
-activity, allowing the user to navigate backward through the fragment changes (similar to navigating
-backward through activities).</p>
-
-<p>You can acquire an instance of {@link android.app.FragmentTransaction} from the {@link
-android.app.FragmentManager} like this:</p>
-
-<pre>
-FragmentManager fragmentManager = {@link android.app.Activity#getFragmentManager()};
-FragmentTransaction fragmentTransaction = fragmentManager.{@link android.app.FragmentManager#beginTransaction()};
-</pre>
-
-<p>Each transaction is a set of changes that you want to perform at the same time. You can set
-up all the changes you want to perform for a given transaction using methods such as {@link
-android.app.FragmentTransaction#add add()}, {@link android.app.FragmentTransaction#remove remove()},
-and {@link android.app.FragmentTransaction#replace replace()}. Then, to apply the transaction
-to the activity, you must call {@link android.app.FragmentTransaction#commit()}.</p>
-</dl>
-
-<p>Before you call {@link
-android.app.FragmentTransaction#commit()}, however, you might want to call {@link
-android.app.FragmentTransaction#addToBackStack addToBackStack()}, in order to add the transaction
-to a back stack of fragment transactions. This back stack is managed by the activity and allows
-the user to return to the previous fragment state, by pressing the <em>Back</em> button.</p>
-
-<p>For example, here's how you can replace one fragment with another, and preserve the previous
-state in the back stack:</p>
-
-<pre>
-// Create new fragment and transaction
-Fragment newFragment = new ExampleFragment();
-FragmentTransaction transaction = getFragmentManager().beginTransaction();
-
-// Replace whatever is in the fragment_container view with this fragment,
-// and add the transaction to the back stack
-transaction.replace(R.id.fragment_container, newFragment);
-transaction.addToBackStack(null);
-
-// Commit the transaction
-transaction.commit();
-</pre>
-
-<p>In this example, {@code newFragment} replaces whatever fragment (if any) is currently in the
-layout container identified by the {@code R.id.fragment_container} ID. By calling {@link
-android.app.FragmentTransaction#addToBackStack addToBackStack()}, the replace transaction is
-saved to the back stack so the user can reverse the transaction and bring back the
-previous fragment by pressing the <em>Back</em> button.</p>
-
-<p>If you add multiple changes to the transaction (such as another {@link
-android.app.FragmentTransaction#add add()} or {@link android.app.FragmentTransaction#remove
-remove()}) and call {@link
-android.app.FragmentTransaction#addToBackStack addToBackStack()}, then all changes applied
-before you call {@link android.app.FragmentTransaction#commit commit()} are added to the
-back stack as a single transaction and the <em>Back</em> button will reverse them all together.</p>
-
-<p>The order in which you add changes to a {@link android.app.FragmentTransaction} doesn't matter,
-except:</p>
-<ul>
-  <li>You must call {@link android.app.FragmentTransaction#commit()} last</li>
-  <li>If you're adding multiple fragments to the same container, then the order in which
-you add them determines the order they appear in the view hierarchy</li>
-</ul>
-
-<p>If you do not call {@link android.app.FragmentTransaction#addToBackStack(String)
-addToBackStack()} when you perform a transaction that removes a fragment, then that fragment is
-destroyed when the transaction is committed and the user cannot navigate back to it. Whereas, if you
-do call {@link android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} when
-removing a fragment, then the fragment is <em>stopped</em> and will be resumed if the user navigates
-back.</p>
-
-<p class="note"><strong>Tip:</strong> For each fragment transaction, you can apply a transition
-animation, by calling {@link android.app.FragmentTransaction#setTransition setTransition()} before
-you commit.</p>
-
-<p>Calling {@link android.app.FragmentTransaction#commit()} does not perform the transaction
-immediately. Rather, it schedules it to run on the activity's UI thread (the "main" thread) as soon
-as the thread is able to do so. If necessary, however, you may call {@link
-android.app.FragmentManager#executePendingTransactions()} from your UI thread to immediately execute
-transactions submitted by {@link android.app.FragmentTransaction#commit()}. Doing so is
-usually not necessary unless the transaction is a dependency for jobs in other threads.</p>
-
-<p class="caution"><strong>Caution:</strong> You can commit a transaction using {@link
-android.app.FragmentTransaction#commit commit()} only prior to the activity <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">saving its
-state</a> (when the user leaves the activity). If you attempt to commit after that point, an
-exception will be thrown. This is because the state after the commit can be lost if the activity
-needs to be restored. For situations in which its okay that you lose the commit, use {@link
-android.app.FragmentTransaction#commitAllowingStateLoss()}.</p>
-
-
-
-
-<h2 id="CommunicatingWithActivity">Communicating with the Activity</h2>
-
-<p>Although a {@link android.app.Fragment} is implemented as an object that's independent from an
-{@link android.app.Activity} and can be used inside multiple activities, a given instance of
-a fragment is directly tied to the activity that contains it.</p>
-
-<p>Specifically, the fragment can access the {@link android.app.Activity} instance with {@link
-android.app.Fragment#getActivity()} and easily perform tasks such as find a view in the
-activity layout:</p>
-
-<pre>
-View listView = {@link android.app.Fragment#getActivity()}.{@link android.app.Activity#findViewById findViewById}(R.id.list);
-</pre>
-
-<p>Likewise, your activity can call methods in the fragment by acquiring a reference to the
-{@link android.app.Fragment} from {@link android.app.FragmentManager}, using {@link
-android.app.FragmentManager#findFragmentById findFragmentById()} or {@link
-android.app.FragmentManager#findFragmentByTag findFragmentByTag()}. For example:</p>
-
-<pre>
-ExampleFragment fragment = (ExampleFragment) getFragmentManager().findFragmentById(R.id.example_fragment);
-</pre>
-
-
-<h3 id="EventCallbacks">Creating event callbacks to the activity</h3>
-
-<p>In some cases, you might need a fragment to share events with the activity. A good way to do that
-is to define a callback interface inside the fragment and require that the host activity implement
-it. When the activity receives a callback through the interface, it can share the information with
-other fragments in the layout as necessary.</p>
-
-<p>For example, if a news application has two fragments in an activity&mdash;one to show a list of
-articles (fragment A) and another to display an article (fragment B)&mdash;then fragment A must tell
-the activity when a list item is selected so that it can tell fragment B to display the article. In
-this case, the {@code OnArticleSelectedListener} interface is declared inside fragment A:</p>
-
-<pre>
-public static class FragmentA extends ListFragment {
-    ...
-    // Container Activity must implement this interface
-    public interface OnArticleSelectedListener {
-        public void onArticleSelected(Uri articleUri);
-    }
-    ...
-}
-</pre>
-
-<p>Then the activity that hosts the fragment implements the {@code OnArticleSelectedListener}
-interface and
-overrides {@code onArticleSelected()} to notify fragment B of the event from fragment A. To ensure
-that the host activity implements this interface, fragment A's {@link
-android.app.Fragment#onAttach onAttach()} callback method (which the system calls when adding
-the fragment to the activity) instantiates an instance of {@code OnArticleSelectedListener} by
-casting the {@link android.app.Activity} that is passed into {@link android.app.Fragment#onAttach
-onAttach()}:</p>
-
-<pre>
-public static class FragmentA extends ListFragment {
-    OnArticleSelectedListener mListener;
-    ...
-    &#64;Override
-    public void onAttach(Activity activity) {
-        super.onAttach(activity);
-        try {
-            mListener = (OnArticleSelectedListener) activity;
-        } catch (ClassCastException e) {
-            throw new ClassCastException(activity.toString() + " must implement OnArticleSelectedListener");
-        }
-    }
-    ...
-}
-</pre>
-
-<p>If the activity has not implemented the interface, then the fragment throws a
-{@link java.lang.ClassCastException}.
-On success, the {@code mListener} member holds a reference to activity's implementation of 
-{@code OnArticleSelectedListener}, so that fragment A can share events with the activity by calling
-methods defined by the {@code OnArticleSelectedListener} interface. For example, if fragment A is an
-extension of {@link android.app.ListFragment}, each time
-the user clicks a list item, the system calls {@link android.app.ListFragment#onListItemClick
-onListItemClick()} in the fragment, which then calls {@code onArticleSelected()} to share
-the event with the activity:</p>
-
-<pre>
-public static class FragmentA extends ListFragment {
-    OnArticleSelectedListener mListener;
-    ...
-    &#64;Override
-    public void onListItemClick(ListView l, View v, int position, long id) {
-        // Append the clicked item's row ID with the content provider Uri
-        Uri noteUri = ContentUris.{@link android.content.ContentUris#withAppendedId withAppendedId}(ArticleColumns.CONTENT_URI, id);
-        // Send the event and Uri to the host activity
-        mListener.onArticleSelected(noteUri);
-    }
-    ...
-}
-</pre>
-
-<p>The {@code id} parameter passed to {@link
-android.app.ListFragment#onListItemClick onListItemClick()} is the row ID of the clicked item,
-which the activity (or other fragment) uses to fetch the article from the application's {@link
-android.content.ContentProvider}.</p>
-
-<p><!--To see a complete implementation of this kind of callback interface, see the <a
-href="{@docRoot}resources/samples/NotePad/index.html">NotePad sample</a>. -->More information about
-using a content provider is available in the <a
-href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a> document.</p>
-
-
-
-<h3 id="ActionBar">Adding items to the Action Bar</h3>
-
-<p>Your fragments can contribute menu items to the activity's <a
-href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a> (and, consequently, the <a
-href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>) by implementing
-{@link android.app.Fragment#onCreateOptionsMenu(Menu,MenuInflater) onCreateOptionsMenu()}. In order
-for this method to receive calls, however, you must call {@link
-android.app.Fragment#setHasOptionsMenu(boolean) setHasOptionsMenu()} during {@link
-android.app.Fragment#onCreate(Bundle) onCreate()}, to indicate that the fragment
-would like to add items to the Options Menu (otherwise, the fragment will not receive a call to
-{@link android.app.Fragment#onCreateOptionsMenu onCreateOptionsMenu()}).</p>
-
-<p>Any items that you then add to the Options Menu from the fragment are appended to the existing
-menu items. The fragment also receives callbacks to {@link
-android.app.Fragment#onOptionsItemSelected(MenuItem) onOptionsItemSelected()} when a menu item
-is selected.</p>
-
-<p>You can also register a view in your fragment layout to provide a context menu by calling {@link
-android.app.Fragment#registerForContextMenu(View) registerForContextMenu()}. When the user opens
-the context menu, the fragment receives a call to {@link
-android.app.Fragment#onCreateContextMenu(ContextMenu,View,ContextMenu.ContextMenuInfo)
-onCreateContextMenu()}. When the user selects an item, the fragment receives a call to {@link
-android.app.Fragment#onContextItemSelected(MenuItem) onContextItemSelected()}.</p>
-
-<p class="note"><strong>Note:</strong> Although your fragment receives an on-item-selected callback
-for each menu item it adds, the activity is first to receive the respective callback when the user
-selects a menu item. If the activity's implementation of the on-item-selected callback does not
-handle the selected item, then the event is passed to the fragment's callback. This is true for
-the Options Menu and context menus.</p>
-
-<p>For more information about menus, see the <a
-href="{@docRoot}guide/topics/ui/menus.html">Menus</a> and <a
-href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guides.</p>
-
-
-
-
-<h2 id="Lifecycle">Handling the Fragment Lifecycle</h2>
-
-<div class="figure" style="width:350px">
-<img src="{@docRoot}images/activity_fragment_lifecycle.png" alt=""/>
-<p class="img-caption"><strong>Figure 3.</strong> The effect of the activity lifecycle on the fragment
-lifecycle.</p>
-</div>
-
-<p>Managing the lifecycle of a fragment is a lot like managing the lifecycle of an activity. Like
-an activity, a fragment can exist in three states:</p>
-
-<dl>
-  <dt><i>Resumed</i></dt>
-    <dd>The fragment is visible in the running activity.</dd>
-
-  <dt><i>Paused</i></dt>
-    <dd>Another activity is in the foreground and has focus, but the activity in which this
-fragment lives is still visible (the foreground activity is partially transparent or doesn't
-cover the entire screen).</dd>
-
-  <dt><i>Stopped</i></dt>
-    <dd>The fragment is not visible. Either the host activity has been stopped or the
-fragment has been removed from the activity but added to the back stack. A stopped fragment is
-still alive (all state and member information is retained by the system). However, it is no longer
-visible to the user and will be killed if the activity is killed.</dd>
-</dl>
-
-<p>Also like an activity, you can retain the state of a fragment using a {@link
-android.os.Bundle}, in case the activity's process is killed and you need to restore the
-fragment state when the activity is recreated. You can save the state during the fragment's {@link
-android.app.Fragment#onSaveInstanceState onSaveInstanceState()} callback and restore it during
-either {@link android.app.Fragment#onCreate onCreate()}, {@link
-android.app.Fragment#onCreateView onCreateView()}, or {@link
-android.app.Fragment#onActivityCreated onActivityCreated()}. For more information about saving
-state, see the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
-document.</p>
-
-<p>The most significant difference in lifecycle between an activity and a fragment is how one is
-stored in its respective back stack. An activity is placed into a back stack of activities
-that's managed by the system when it's stopped, by default (so that the user can navigate back
-to it with the <em>Back</em> button, as discussed in <a
-href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>).
-However, a fragment is placed into a back stack managed by the host activity only when you
-explicitly request that the instance be saved by calling {@link
-android.app.FragmentTransaction#addToBackStack(String) addToBackStack()} during a transaction that
-removes the fragment.</p>
-
-<p>Otherwise, managing the fragment lifecycle is very similar to managing the activity
-lifecycle. So, the same practices for <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">managing the activity
-lifecycle</a> also apply to fragments. What you also need to understand, though, is how the life
-of the activity affects the life of the fragment.</p>
-
-
-<h3 id="CoordinatingWithActivity">Coordinating with the activity lifecycle</h3>
-
-<p>The lifecycle of the activity in which the fragment lives directly affects the lifecycle of the
-fragment, such that each lifecycle callback for the activity results in a similar callback for each
-fragment. For example, when the activity receives {@link android.app.Activity#onPause}, each
-fragment in the activity receives {@link android.app.Fragment#onPause}.</p>
-
-<p>Fragments have a few extra lifecycle callbacks, however, that handle unique interaction with the
-activity in order to perform actions such as build and destroy the fragment's UI. These additional
-callback methods are:</p>
-
-<dl>
-  <dt>{@link android.app.Fragment#onAttach onAttach()}</dt>
-    <dd>Called when the fragment has been associated with the activity (the {@link
-android.app.Activity} is passed in here).</dd>
-  <dt>{@link android.app.Fragment#onCreateView onCreateView()}</dt>
-    <dd>Called to create the view hierarchy associated with the fragment.</dd>
-  <dt>{@link android.app.Fragment#onActivityCreated onActivityCreated()}</dt>
-    <dd>Called when the activity's {@link android.app.Activity#onCreate
-onCreate()} method has returned.</dd>
-  <dt>{@link android.app.Fragment#onDestroyView onDestroyView()}</dt>
-    <dd>Called when the view hierarchy associated with the fragment is being removed.</dd>
-  <dt>{@link android.app.Fragment#onDetach onDetach()}</dt>
-    <dd>Called when the fragment is being disassociated from the activity.</dd>
-</dl>
-
-<p>The flow of a fragment's lifecycle, as it is affected by its host activity, is illustrated
-by figure 3. In this figure, you can see how each successive state of the activity determines which
-callback methods a fragment may receive. For example, when the activity has received its {@link
-android.app.Activity#onCreate onCreate()} callback, a fragment in the activity receives no more than
-the {@link android.app.Fragment#onActivityCreated onActivityCreated()} callback.</p>
-
-<p>Once the activity reaches the resumed state, you can freely add and remove fragments to the
-activity. Thus, only while the activity is in the resumed state can the lifecycle of a fragment
-change independently.</p>
-
-<p>However, when the activity leaves the resumed state, the fragment again is pushed through its
-lifecycle by the activity.</p>
-
-
-
-
-<h2 id="Example">Example</h2>
-
-<p>To bring everything discussed in this document together, here's an example of an activity
-using two fragments to create a two-pane layout. The activity below includes one fragment to
-show a list of Shakespeare play titles and another to show a summary of the play when selected
-from the list. It also demonstrates how to provide different configurations of the fragments,
-based on the screen configuration.</p>
-
-<p class="note"><strong>Note:</strong> The complete source code for this activity is available in
-<a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html">{@code
-FragmentLayout.java}</a>.</p>
-
-<p>The main activity applies a layout in the usual way, during {@link
-android.app.Activity#onCreate onCreate()}:</p>
-
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java main}
-
-<p>The layout applied is {@code fragment_layout.xml}:</p>
-
-{@sample development/samples/ApiDemos/res/layout-land/fragment_layout.xml layout}
-
-<p>Using this layout, the system instantiates the {@code TitlesFragment} (which lists the play
-titles) as soon as the activity loads the layout, while the {@link android.widget.FrameLayout}
-(where the fragment for showing the play summary will go) consumes space on the right side of the
-screen, but remains empty at first. As you'll see below, it's not until the user selects an item
-from the list that a fragment is placed into the {@link android.widget.FrameLayout}.</p>
-
-<p>However, not all screen configurations are wide enough to show both the list of
-plays and the summary, side by side. So, the layout above is used only for the landscape
-screen configuration, by saving it at {@code res/layout-land/fragment_layout.xml}.</p>
-
-<p>Thus, when the screen is in portrait orientation, the system applies the following layout, which
-is saved at {@code res/layout/fragment_layout.xml}:</p>
-
-{@sample development/samples/ApiDemos/res/layout/fragment_layout.xml layout}
-
-<p>This layout includes only {@code TitlesFragment}. This means that, when the device is in
-portrait orientation, only the list of play titles is visible. So, when the user clicks a list
-item in this configuration, the application will start a new activity to show the summary,
-instead of loading a second fragment.</p>
-
-<p>Next, you can see how this is accomplished in the fragment classes. First is {@code
-TitlesFragment}, which shows the list of Shakespeare play titles. This fragment extends {@link
-android.app.ListFragment} and relies on it to handle most of the list view work.</p>
-
-<p>As you inspect this code, notice that there are two possible behaviors when the user clicks a
-list item: depending on which of the two layouts is active, it can either create and display a new
-fragment to show the details in the same activity (adding the fragment to the {@link
-android.widget.FrameLayout}), or start a new activity (where the fragment can be shown).</p>
-
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java titles}
-
-<p>The second fragment, {@code DetailsFragment} shows the play summary for the item selected from
-the list from {@code TitlesFragment}:</p>
- 
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java details}
-
-<p>Recall from the {@code TitlesFragment} class, that, if the user clicks a list item and the
-current layout does <em>not</em> include the {@code R.id.details} view (which is where the
-{@code DetailsFragment} belongs), then the application starts the {@code DetailsActivity}
-activity to display the content of the item.</p>
-
-<p>Here is the {@code DetailsActivity}, which simply embeds the {@code DetailsFragment} to display
-the selected play summary when the screen is in portrait orientation:</p>
-
-{@sample development/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.java
-details_activity}
- 
-<p>Notice that this activity finishes itself if the configuration is landscape, so that the main
-activity can take over and display the {@code DetailsFragment} alongside the {@code TitlesFragment}.
-This can happen if the user begins the {@code DetailsActivity} while in portrait orientation, but
-then rotates to landscape (which restarts the current activity).</p>
-
-
-<p>For more samples using fragments (and complete source files for this example),
-see the sample code available in <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
-ApiDemos</a> (available for download from the <a
-href="{@docRoot}resources/samples/get.html">Samples SDK component</a>).</p>
-
-
diff --git a/docs/html/guide/topics/fundamentals/processes-and-threads.jd b/docs/html/guide/topics/fundamentals/processes-and-threads.jd
deleted file mode 100644
index 814d34e..0000000
--- a/docs/html/guide/topics/fundamentals/processes-and-threads.jd
+++ /dev/null
@@ -1,486 +0,0 @@
-page.title=Processes and Threads
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>Every application runs in its own process and all components of the application run in that
-process, by default</li>
-  <li>Any slow, blocking operations in an activity should be done in a new thread, to avoid slowing
-down the user interface</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
-<li><a href="#Processes">Processes</a>
-  <ol>
-    <li><a href="#Lifecycle">Process lifecycle</a></li>
-  </ol>
-</li>
-<li><a href="#Threads">Threads</a>
-  <ol>
-    <li><a href="#WorkerThreads">Worker threads</a></li>
-    <li><a href="#ThreadSafe">Thread-safe methods</a></li>
-  </ol>
-</li>
-<li><a href="#IPC">Interprocess Communication</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>When an application component starts and the process that should host that thread is not already
-running, the Android system starts a new Linux process for the application with a single thread of
-execution. By default, all components of the same application run in the same process and thread
-(called the "main" thread). If an application component starts and there already exists a process
-for that application (because another component from the application exists or Android has been
-able to retain its previous process cached in the background), then the component is
-started within that process and uses the same thread of execution. However, you can arrange for
-different components in your application to run in separate processes, and you can create additional
-threads for any process.</p>
-
-<p>This document discusses how processes and threads work in an Android application.</p>
-
-
-<h2 id="Processes">Processes</h2>
-
-<p>By default, all components of the same application run in the same process and most applications
-should not change this. However, if you find that you need to control which process a certain
-component belongs to, you can do so in the manifest file.</p>
-
-<p>The manifest entry for each type of component element&mdash;<a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-&lt;activity&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/service-element.html">{@code
-&lt;service&gt;}</a>, <a href="{@docRoot}guide/topics/manifest/receiver-element.html">{@code
-&lt;receiver&gt;}</a>, and <a href="{@docRoot}guide/topics/manifest/provider-element.html">{@code
-&lt;provider&gt;}</a>&mdash;supports an {@code android:process} attribute that can specify a
-process in which that component should run. You can set this attribute so that each component runs
-in its own process or so that some components share a process while others do not.  You can also set
-{@code android:process} so that components of different applications run in the same
-process&mdash;provided that the applications share the same Linux user ID and are signed with the
-same certificates.</p>
-
-<p>The <a href="{@docRoot}guide/topics/manifest/application-element.html">{@code
-&lt;application&gt;}</a> element also supports an {@code android:process} attribute, to set a
-default value that applies to all components.</p>
-
-<p>Android might decide to shut down a process at some point, when memory is low and required by
-other processes that are more immediately serving the user. Application
-components running in the process that's killed are consequently destroyed.  A process is started
-again for those components when there's again work for them to do.</p>
-
-<p>When deciding which processes to kill, the Android system weighs their relative importance to
-the user.  For example, it more readily shuts down a process hosting activities that are no longer
-visible on screen, compared to a process hosting visible activities. The decision whether to
-terminate a process, therefore, depends on the state of the components running in that process. The
-rules used to decide which processes to terminate is discussed below. </p>
-
-
-<h3 id="Lifecycle">Process lifecycle</h3>
-
-<p>The Android system tries to maintain an application process for as long as possible, but
-eventually needs to remove old processes to reclaim memory for new or more important processes.  To
-determine which processes to keep
-and which to kill, the system places each process into an "importance hierarchy" based on the
-components running in the process and the state of those components.  Processes with the lowest
-importance are eliminated first, then those with the next lowest importance, and so on, as necessary
-to recover system resources.</p>
-
-<p>The exact mapping of processes to importance and the management of these processes is
-an implementation detail of the platform that changes over time.  Broadly speaking, there
-are five levels in the current implementation that are of most relevance to application
-developers.  The following list presents these different
-types of processes in order of importance (the first process is <em>most important</em> and is
-<em>killed last</em>):</p>
-
-<ol>
-  <li><b>Foreground process</b>
-    <p>A process that is required for what the user is currently doing.  A
-      process is considered to be in the foreground if any of the following conditions are true:</p>
-
-      <ul>
-        <li>It hosts an {@link android.app.Activity} that the user is interacting with (the {@link
-android.app.Activity}'s {@link android.app.Activity#onResume onResume()} method has been
-called).</li>
-
-        <li>It hosts a {@link android.app.Service} that's executing one of its lifecycle
-callbacks ({@link android.app.Service#onCreate onCreate()}, {@link android.app.Service#onStart
-onStart()}, or {@link android.app.Service#onDestroy onDestroy()}).</li>
-
-        <li>It hosts a {@link android.content.BroadcastReceiver} that's executing its {@link
-        android.content.BroadcastReceiver#onReceive onReceive()} method.</li>
-
-        <li>Another foreground process has a dependency on this one: either bound
-        to a Service in this process, or using a Content Provider of the process.</li>
-    </ul>
-
-    <p>Generally, only a few foreground processes exist at any given time.  They are killed only as
-a last resort&mdash;if memory is so low that they cannot all continue to run.  Generally, at that
-point, the device has reached a memory paging state, so killing some foreground processes is
-required to keep the user interface responsive.</p></li>
-
-  <li><b>Visible process</b>
-    <p>A process that doesn't have any foreground components, but still can
-      affect what the user sees on screen. A process is considered to be visible if either of the
-      following conditions are true:</p>
-
-      <ul>
-        <li>It hosts an {@link android.app.Activity} that is not in the foreground, but is still
-visible to the user (its {@link android.app.Activity#onPause onPause()} method has been called). 
-This might occur, for example, if the foreground activity started a dialog, which allows the
-previous activity to be seen behind it.</li>
-
-        <li>Another visible process has a dependency on this one: either bound
-        to a Service in this process, or using a Content Provider of the process.</li>
-      </ul>
-
-      <p>A visible process is considered extremely important and will not be killed unless doing so
-is required to keep all foreground processes running. </p>
-    </li>
-
-  <li><b>Perceptible process</b>
-    <p>A process that doesn't have any foreground or visible components, but is still
-      doing something that is directly perceptible by the user.  A classic example of such
-      a process would be one doing background music playback.  The main way applications
-      get into this state is through {@link android.app.Service#startForeground} or because
-      another perceptible process has a dependency on one of its services or content
-      providers.  In addition, as of {@link android.os.Build.VERSION_CODES#HONEYCOMB},
-      processes can go into this state when {@link android.app.Activity#onStop
-      Activity.onStop()} is executing, allowing the process to continue executing
-      critical code after no longer being visible to the user but before going
-      fully into the background.</p>
-
-      <p>Like visible processes, a perceptible process is considered extremely important
-      and will not be killed unless doing so is required to keep all foreground and
-      visible processes running. </p>
-    </li>
-
-  <li><b>Service process</b>
-    <p>A process that is running a service that has been started with the {@link
-android.content.Context#startService startService()} method and does not fall into any of the
-higher categories. Although service processes are not directly tied to anything the user sees, they
-are generally doing things that the user cares about (such as downloading a file the user has requested),
-so the system keeps them running unless there's not enough memory to retain them along with all
-foreground and visible processes. </p>
-
-    <p>Even though Android tries to keep these processes running, it is considered normal
-    operation for them to temporarily be killed to support the needs of more important
-    processes.  For example, if the user opens a very heavy-weight web page that needs
-    most of the device's RAM, background services may be temporarily killed to satisfy
-    those needs.  Services in these processes thus must be prepared to deal gracefully
-    with being killed while doing their work and later restarted.</p>
-
-    <p>In recent implementations of Android, there are actually a number of sub-divisions
-    in this area for processes that Android considers more important to the user and so
-    would like to try harder to keep around.  For example, the process hosting the current
-    home app is generally kept in this area so that the user will not see long delays in
-    returning home because that process has been killed.</p>
-  </li>
-
-  <li><b>Background (cached) process</b>
-    <p>The final importance level is for processes that are not of current significance.
-    This is basically any process that does not fall into one of the previous levels.
-    These processes have no direct impact on the user experience, and the system can kill
-    them at any time to reclaim memory for the other more important processes.
-    This includes everything from processes holding running activity objects that are not currently
-    visible to the user (the activity's {@link android.app.Activity#onStop onStop()}
-    method has been called) to processes that have no active code at all but may be
-    useful to keep around in case they are needed in the near future.</p>
-
-    <p>Usually there are many background processes being maintained, so they are kept
-    in an LRU list to allow older processes to be killed before more recent ones.  This
-    helps reduce the frequency that new processes need to be creating, facilitating things
-    like more rapid switching between the applications the user has recently visited.
-    However, processes in this state must deal correctly with being killed and later
-    restarted when needed.  For example, if an activity implements its lifecycle methods
-correctly, and saves its current state, killing its process will not have a visible effect on
-the user experience, because when the user navigates back to the activity, the activity restores
-all of its visible state. See the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
-document for information about saving and restoring state.</p>
-
-    <p>Android may also employ other additional policies for killing background processes.  For
-    example, there are typically restrictions on a maximum number of such processes to
-    keep around, and limits on the amount of time they can spend holding wake locks
-    or consuming CPU power until they will be removed.</p>
-  </li>
-</ol>
-
-
-  <p>Android ranks a process at the highest level it can, based upon the importance of the
-components currently active in the process.  For example, if a process hosts a service and a visible
-activity, the process is ranked as a visible process, not a service process.</p>
-
-  <p>In addition, a process's ranking might be increased because other processes are dependent on
-it&mdash;a process that is serving another process can not generally be ranked lower than the process it is
-serving. For example, if a content provider in process A is serving a client in process B, or if a
-service in process A has been bound to by a client in process B, process A is always considered at least
-as important as process B.</p>
-
-  <p>Because a process running a service is ranked higher than a process with background activities,
-an activity that initiates a long-running operation may sometimes start a <a
-href="{@docRoot}guide/topics/fundamentals/services.html">service</a> for that operation, rather than
-simply create a worker thread&mdash;but only when the operation is a specific task that needs
-to be accomplished regardless of whether the user returns to the application.
-For example, an activity that's uploading a picture to a web site should start a service to perform
-the upload so that the upload can continue in the background even if the user leaves the activity.
-Using a service guarantees that the operation will have at least "service process" priority,
-regardless of what happens to the activity.  This is not however an approach that should always
-be used.  It would not be appropriate when simply downloading the data for a web page, since
-that can easily be restarted later if the user returns to the web browser.  Allowing
-such a process to be in the background (instead of running a service) gives Android better
-information about how to manage that process in relation to others.
-
-  <p>For a similar reason, broadcast receivers will often employ services rather than
-  simply put time-consuming operations in a thread.</p>
-
-  <p>Some command line tools are available to help you understand how Android is managing
-  its processes.  The most common command is <code>adb shell dumpsys activity</code>
-  which provides a summary of various key state, including at the end a list of the
-  process states, one per line (plus an optional second line for any key dependency
-  on that process), ordered from higher importance to lowest.  The exact
-  contents of these lines has changed across different versions of Android, but the
-  typical state for one process in the list would be:</p>
-  <pre>
-Proc # 2: adj=prcp /F  trm= 0 848:com.google.android.inputmethod.latin/u0a32 (service)
-    com.google.android.inputmethod.latin/com.android.inputmethod.latin.LatinIME<=Proc{417:system/1000}
-</pre>
-
-  <p>This is a perceptible process (adj=prcp) that is running with the foreground
-  scheduling class (/F), and has not recently been told to trim any memory
-  (trm= 0).  Its process id is 848; its name is com.google.android.inputmethod.latin;
-  its Linux uid is u0a32 (10032), and the key state contributing to its current
-  importance level is a service.</p>
-
-  <p>The second line provides the name of the service that is important, because another
-  process has a dependency on it (here the system process).</p>
-
-<h2 id="Threads">Threads</h2>
-
-<p>When an application is launched, the system creates a thread of execution for the application,
-called "main." This thread is very important because it is in charge of dispatching events to
-the appropriate user interface widgets, including drawing events. It is also the thread in which
-your application interacts with components from the Android UI toolkit (components from the {@link
-android.widget} and {@link android.view} packages). As such, the main thread is also sometimes
-called the UI thread.</p>
-
-<p>The system does <em>not</em> create a separate thread for each instance of a component. All
-components that run in the same process are instantiated in the UI thread, and system calls to
-each component are dispatched from that thread. Consequently, methods that respond to system
-callbacks (such as {@link android.view.View#onKeyDown onKeyDown()} to report user actions
-or a lifecycle callback method) always run in the UI thread of the process.</p>
-
-<p>For instance, when the user touches a button on the screen, your app's UI thread dispatches the
-touch event to the widget, which in turn sets its pressed state and posts an invalidate request to
-the event queue. The UI thread dequeues the request and notifies the widget that it should redraw
-itself.</p>
-
-<p>When your app performs intensive work in response to user interaction, this single thread model
-can yield poor performance unless you implement your application properly. Specifically, if
-everything is happening in the UI thread, performing long operations such as network access or
-database queries will block the whole UI. When the thread is blocked, no events can be dispatched,
-including drawing events. From the user's perspective, the
-application appears to hang. Even worse, if the UI thread is blocked for more than a few seconds
-(about 5 seconds currently) the user is presented with the infamous "<a
-href="http://developer.android.com/guide/practices/design/responsiveness.html">application not
-responding</a>" (ANR) dialog. The user might then decide to quit your application and uninstall it
-if they are unhappy.</p>
-
-<p>Additionally, the Andoid UI toolkit is <em>not</em> thread-safe. So, you must not manipulate
-your UI from a worker thread&mdash;you must do all manipulation to your user interface from the UI
-thread. Thus, there are simply two rules to Android's single thread model:</p>
-
-<ol>
-<li>Do not block the UI thread
-<li>Do not access the Android UI toolkit from outside the UI thread
-</ol>
-
-<h3 id="WorkerThreads">Worker threads</h3>
-
-<p>Because of the single thread model described above, it's vital to the responsiveness of your
-application's UI that you do not block the UI thread. If you have operations to perform
-that are not instantaneous, you should make sure to do them in separate threads ("background" or
-"worker" threads).</p>
-
-<p>For example, below is some code for a click listener that downloads an image from a separate
-thread and displays it in an {@link android.widget.ImageView}:</p>
-
-<pre>
-public void onClick(View v) {
-    new Thread(new Runnable() {
-        public void run() {
-            Bitmap b = loadImageFromNetwork("http://example.com/image.png");
-            mImageView.setImageBitmap(b);
-        }
-    }).start();
-}
-</pre>
-
-<p>At first, this seems to work fine, because it creates a new thread to handle the network
-operation. However, it violates the second rule of the single-threaded model: <em>do not access the
-Android UI toolkit from outside the UI thread</em>&mdash;this sample modifies the {@link
-android.widget.ImageView} from the worker thread instead of the UI thread. This can result in
-undefined and unexpected behavior, which can be difficult and time-consuming to track down.</p>
-
-<p>To fix this problem, Android offers several ways to access the UI thread from other
-threads. Here is a list of methods that can help:</p>
-
-<ul>
-<li>{@link android.app.Activity#runOnUiThread(java.lang.Runnable)
-Activity.runOnUiThread(Runnable)}</li>
-<li>{@link android.view.View#post(java.lang.Runnable) View.post(Runnable)}</li>
-<li>{@link android.view.View#postDelayed(java.lang.Runnable, long) View.postDelayed(Runnable,
-long)}</li>
-</ul>
-
-<p>For example, you can fix the above code by using the {@link
-android.view.View#post(java.lang.Runnable) View.post(Runnable)} method:</p>
-
-<pre>
-public void onClick(View v) {
-    new Thread(new Runnable() {
-        public void run() {
-            final Bitmap bitmap = loadImageFromNetwork("http://example.com/image.png");
-            mImageView.post(new Runnable() {
-                public void run() {
-                    mImageView.setImageBitmap(bitmap);
-                }
-            });
-        }
-    }).start();
-}
-</pre>
-
-<p>Now this implementation is thread-safe: the network operation is done from a separate thread
-while the {@link android.widget.ImageView} is manipulated from the UI thread.</p>
-
-<p>However, as the complexity of the operation grows, this kind of code can get complicated and
-difficult to maintain. To handle more complex interactions with a worker thread, you might consider
-using a {@link android.os.Handler} in your worker thread, to process messages delivered from the UI
-thread. Perhaps the best solution, though, is to extend the {@link android.os.AsyncTask} class,
-which simplifies the execution of worker thread tasks that need to interact with the UI.</p>
-
-
-<h4 id="AsyncTask">Using AsyncTask</h4>
-
-<p>{@link android.os.AsyncTask} allows you to perform asynchronous work on your user
-interface. It performs the blocking operations in a worker thread and then publishes the results on
-the UI thread, without requiring you to handle threads and/or handlers yourself.</p>
-
-<p>To use it, you must subclass {@link android.os.AsyncTask} and implement the {@link
-android.os.AsyncTask#doInBackground doInBackground()} callback method, which runs in a pool of
-background threads. To update your UI, you should implement {@link
-android.os.AsyncTask#onPostExecute onPostExecute()}, which delivers the result from {@link
-android.os.AsyncTask#doInBackground doInBackground()} and runs in the UI thread, so you can safely
-update your UI. You can then run the task by calling {@link android.os.AsyncTask#execute execute()}
-from the UI thread.</p>
-
-<p>For example, you can implement the previous example using {@link android.os.AsyncTask} this
-way:</p>
-
-<pre>
-public void onClick(View v) {
-    new DownloadImageTask().execute("http://example.com/image.png");
-}
-
-private class DownloadImageTask extends AsyncTask&lt;String, Void, Bitmap&gt; {
-    /** The system calls this to perform work in a worker thread and
-      * delivers it the parameters given to AsyncTask.execute() */
-    protected Bitmap doInBackground(String... urls) {
-        return loadImageFromNetwork(urls[0]);
-    }
-    
-    /** The system calls this to perform work in the UI thread and delivers
-      * the result from doInBackground() */
-    protected void onPostExecute(Bitmap result) {
-        mImageView.setImageBitmap(result);
-    }
-}
-</pre>
-
-<p>Now the UI is safe and the code is simpler, because it separates the work into the
-part that should be done on a worker thread and the part that should be done on the UI thread.</p>
-
-<p>You should read the {@link android.os.AsyncTask} reference for a full understanding on
-how to use this class, but here is a quick overview of how it works:</p>
-
-<ul>
-<li>You can specify the type of the parameters, the progress values, and the final
-value of the task, using generics</li>
-<li>The method {@link android.os.AsyncTask#doInBackground doInBackground()} executes automatically
-on a worker thread</li>
-<li>{@link android.os.AsyncTask#onPreExecute onPreExecute()}, {@link
-android.os.AsyncTask#onPostExecute onPostExecute()}, and {@link
-android.os.AsyncTask#onProgressUpdate onProgressUpdate()} are all invoked on the UI thread</li>
-<li>The value returned by {@link android.os.AsyncTask#doInBackground doInBackground()} is sent to
-{@link android.os.AsyncTask#onPostExecute onPostExecute()}</li>
-<li>You can call {@link android.os.AsyncTask#publishProgress publishProgress()} at anytime in {@link
-android.os.AsyncTask#doInBackground doInBackground()} to execute {@link
-android.os.AsyncTask#onProgressUpdate onProgressUpdate()} on the UI thread</li>
-<li>You can cancel the task at any time, from any thread</li>
-</ul>
-
-<p class="caution"><strong>Caution:</strong> Another problem you might encounter when using a worker
-thread is unexpected restarts in your activity due to a <a
-href="{@docRoot}guide/topics/resources/runtime-changes.html">runtime configuration change</a>
-(such as when the user changes the screen orientation), which may destroy your worker thread. To
-see how you can persist your task during one of these restarts and how to properly cancel the task
-when the activity is destroyed, see the source code for the <a
-href="http://code.google.com/p/shelves/">Shelves</a> sample application.</p>
-
-
-<h3 id="ThreadSafe">Thread-safe methods</h3>
-
-<p> In some situations, the methods you implement might be called from more than one thread, and
-therefore must be written to be thread-safe. </p>
-
-<p>This is primarily true for methods that can be called remotely&mdash;such as methods in a <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html">bound service</a>. When a call on a
-method implemented in an {@link android.os.IBinder} originates in the same process in which the
-{@link android.os.IBinder IBinder} is running, the method is executed in the caller's thread.
-However, when the call originates in another process, the method is executed in a thread chosen from
-a pool of threads that the system maintains in the same process as the {@link android.os.IBinder
-IBinder} (it's not executed in the UI thread of the process).  For example, whereas a service's
-{@link android.app.Service#onBind onBind()} method would be called from the UI thread of the
-service's process, methods implemented in the object that {@link android.app.Service#onBind
-onBind()} returns (for example, a subclass that implements RPC methods) would be called from threads
-in the pool. Because a service can have more than one client, more than one pool thread can engage
-the same {@link android.os.IBinder IBinder} method at the same time.  {@link android.os.IBinder
-IBinder} methods must, therefore, be implemented to be thread-safe.</p>
-
-<p> Similarly, a content provider can receive data requests that originate in other processes.
-Although the {@link android.content.ContentResolver} and {@link android.content.ContentProvider}
-classes hide the details of how the interprocess communication is managed, {@link
-android.content.ContentProvider} methods that respond to those requests&mdash;the methods {@link
-android.content.ContentProvider#query query()}, {@link android.content.ContentProvider#insert
-insert()}, {@link android.content.ContentProvider#delete delete()}, {@link
-android.content.ContentProvider#update update()}, and {@link android.content.ContentProvider#getType
-getType()}&mdash;are called from a pool of threads in the content provider's process, not the UI
-thread for the process.  Because these methods might be called from any number of threads at the
-same time, they too must be implemented to be thread-safe. </p>
-
-
-<h2 id="IPC">Interprocess Communication</h2>
-
-<p>Android offers a mechanism for interprocess communication (IPC) using remote procedure calls
-(RPCs), in which a method is called by an activity or other application component, but executed
-remotely (in another process), with any result returned back to the
-caller. This entails decomposing a method call and its data to a level the operating system can
-understand, transmitting it from the local process and address space to the remote process and
-address space, then reassembling and reenacting the call there.  Return values are then
-transmitted in the opposite direction.  Android provides all the code to perform these IPC
-transactions, so you can focus on defining and implementing the RPC programming interface. </p>
-
-<p>To perform IPC, your application must bind to a service, using {@link
-android.content.Context#bindService bindService()}. For more information, see the <a
-href="{@docRoot}guide/topics/fundamentals/services.html">Services</a> developer guide.</p>
-
-
-<!--
-<h2>Beginner's Path</h2>
-
-<p>For information about how to perform work in the background for an indefinite period of time
-(without a user interface), continue with the <b><a
-href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></b> document.</p>
--->
diff --git a/docs/html/guide/topics/fundamentals/services.jd b/docs/html/guide/topics/fundamentals/services.jd
deleted file mode 100644
index 9c38897..0000000
--- a/docs/html/guide/topics/fundamentals/services.jd
+++ /dev/null
@@ -1,874 +0,0 @@
-page.title=Services
-@jd:body
-
-<div id="qv-wrapper">
-<ol id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>A service can run in the background to perform work even while the user is in a different
-application</li>
-  <li>A service can allow other components to bind to it, in order to interact with it and
-perform interprocess communication</li>
-  <li>A service runs in the main thread of the application that hosts it, by default</li>
-</ul>
-<h2>In this document</h2>
-<ol>
-<li><a href="#Basics">The Basics</a></li>
-<ol>
-  <li><a href="#Declaring">Declaring a service in the manifest</a></li>
-</ol>
-<li><a href="#CreatingAService">Creating a Started Service</a>
-  <ol>
-    <li><a href="#ExtendingIntentService">Extending the IntentService class</a></li>
-    <li><a href="#ExtendingService">Extending the Service class</a></li>
-    <li><a href="#StartingAService">Starting a service</a></li>
-    <li><a href="#Stopping">Stopping a service</a></li>
-  </ol>
-</li>
-<li><a href="#CreatingBoundService">Creating a Bound Service</a></li>
-<li><a href="#Notifications">Sending Notifications to the User</a></li>
-<li><a href="#Foreground">Running a Service in the Foreground</a></li>
-<li><a href="#Lifecycle">Managing the Lifecycle of a Service</a>
-<ol>
-  <li><a href="#LifecycleCallbacks">Implementing the lifecycle callbacks</a></li>
-</ol>
-</li>
-</ol>
-
-<h2>Key classes</h2>
-<ol>
-  <li>{@link android.app.Service}</li>
-  <li>{@link android.app.IntentService}</li>
-</ol>
-
-<h2>Samples</h2>
-<ol>
-  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html">{@code
-      ServiceStartArguments}</a></li>
-  <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html">{@code
-      LocalService}</a></li>
-</ol>
-
-<h2>Articles</h2>
-<ol>
-  <li><a href="{@docRoot}resources/articles/multitasking-android-way.html">Multitasking the Android Way</a></li>
-  <li><a href="{@docRoot}resources/articles/service-api-changes-starting-with.html">Service API changes starting
-      with Android 2.0</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-<li><a href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a></li>
-</ol>
-
-</div>
-
-
-<p>A {@link android.app.Service} is an application component that can perform
-long-running operations in the background and does not provide a user interface. Another
-application component can start a service and it will continue to run in the background even if the
-user switches to another application. Additionally, a component can bind to a service to
-interact with it and even perform interprocess communication (IPC). For example, a service might
-handle network transactions, play music, perform file I/O, or interact with a content provider, all
-from the background.</p>
-
-<p>A service can essentially take two forms:</p>
-
-<dl>
-  <dt>Started</dt>
-  <dd>A service is "started" when an application component (such as an activity) starts it by
-calling {@link android.content.Context#startService startService()}. Once started, a service
-can run in the background indefinitely, even if the component that started it is destroyed. Usually,
-a started service performs a single operation and does not return a result to the caller.
-For example, it might download or upload a file over the network. When the operation is done, the
-service should stop itself.</dd>
-  <dt>Bound</dt>
-  <dd>A service is "bound" when an application component binds to it by calling {@link
-android.content.Context#bindService bindService()}. A bound service offers a client-server
-interface that allows components to interact with the service, send requests, get results, and even
-do so across processes with interprocess communication (IPC). A bound service runs only as long as
-another application component is bound to it. Multiple components can bind to the service at once,
-but when all of them unbind, the service is destroyed.</dd>
-</dl>
-
-<p>Although this documentation generally discusses these two types of services separately, your
-service can work both ways&mdash;it can be started (to run indefinitely) and also allow binding.
-It's simply a matter of whether you implement a couple callback methods: {@link
-android.app.Service#onStartCommand onStartCommand()} to allow components to start it and {@link
-android.app.Service#onBind onBind()} to allow binding.</p>
-
-<p>Regardless of whether your application is started, bound, or both, any application component
-can use the service (even from a separate application), in the same way that any component can use
-an activity&mdash;by starting it with an {@link android.content.Intent}. However, you can declare
-the service as private, in the manifest file, and block access from other applications. This is
-discussed more in the section about <a href="#Declaring">Declaring the service in the
-manifest</a>.</p>
-
-<p class="caution"><strong>Caution:</strong> A service runs in the
-main thread of its hosting process&mdash;the service does <strong>not</strong> create its own thread
-and does <strong>not</strong> run in a separate process (unless you specify otherwise). This means
-that, if your service is going to do any CPU intensive work or blocking operations (such as MP3
-playback or networking), you should create a new thread within the service to do that work. By using
-a separate thread, you will reduce the risk of Application Not Responding (ANR) errors and the
-application's main thread can remain dedicated to user interaction with your activities.</p>
-
-
-<h2 id="Basics">The Basics</h2>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h3>Should you use a service or a thread?</h3>
-  <p>A service is simply a component that can run in the background even when the user is not
-interacting with your application. Thus, you should create a service only if that is what you
-need.</p>
-  <p>If you need to perform work outside your main thread, but only while the user is interacting
-with your application, then you should probably instead create a new thread and not a service. For
-example, if you want to play some music, but only while your activity is running, you might create
-a thread in {@link android.app.Activity#onCreate onCreate()}, start running it in {@link
-android.app.Activity#onStart onStart()}, then stop it in {@link android.app.Activity#onStop
-onStop()}. Also consider using {@link android.os.AsyncTask} or {@link android.os.HandlerThread},
-instead of the traditional {@link java.lang.Thread} class. See the <a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes and
-Threading</a> document for more information about threads.</p>
-  <p>Remember that if you do use a service, it still runs in your application's main thread by
-default, so you should still create a new thread within the service if it performs intensive or
-blocking operations.</p>
-</div>
-</div>
-
-<p>To create a service, you must create a subclass of {@link android.app.Service} (or one
-of its existing subclasses). In your implementation, you need to override some callback methods that
-handle key aspects of the service lifecycle and provide a mechanism for components to bind to
-the service, if appropriate. The most important callback methods you should override are:</p>
-
-<dl>
-  <dt>{@link android.app.Service#onStartCommand onStartCommand()}</dt>
-    <dd>The system calls this method when another component, such as an activity,
-requests that the service be started, by calling {@link android.content.Context#startService
-startService()}. Once this method executes, the service is started and can run in the
-background indefinitely. If you implement this, it is your responsibility to stop the service when
-its work is done, by calling {@link android.app.Service#stopSelf stopSelf()} or {@link
-android.content.Context#stopService stopService()}. (If you only want to provide binding, you don't
-need to implement this method.)</dd>
-  <dt>{@link android.app.Service#onBind onBind()}</dt>
-    <dd>The system calls this method when another component wants to bind with the
-service (such as to perform RPC), by calling {@link android.content.Context#bindService
-bindService()}. In your implementation of this method, you must provide an interface that clients
-use to communicate with the service, by returning an {@link android.os.IBinder}. You must always
-implement this method, but if you don't want to allow binding, then you should return null.</dd>
-  <dt>{@link android.app.Service#onCreate()}</dt>
-    <dd>The system calls this method when the service is first created, to perform one-time setup
-procedures (before it calls either {@link android.app.Service#onStartCommand onStartCommand()} or
-{@link android.app.Service#onBind onBind()}). If the service is already running, this method is not
-called.</dd>
-  <dt>{@link android.app.Service#onDestroy()}</dt>
-    <dd>The system calls this method when the service is no longer used and is being destroyed.
-Your service should implement this to clean up any resources such as threads, registered
-listeners, receivers, etc. This is the last call the service receives.</dd>
-</dl>
-
-<p>If a component starts the service by calling {@link
-android.content.Context#startService startService()} (which results in a call to {@link
-android.app.Service#onStartCommand onStartCommand()}), then the service
-remains running until it stops itself with {@link android.app.Service#stopSelf()} or another
-component stops it by calling {@link android.content.Context#stopService stopService()}.</p>
-
-<p>If a component calls
-{@link android.content.Context#bindService bindService()} to create the service (and {@link
-android.app.Service#onStartCommand onStartCommand()} is <em>not</em> called), then the service runs
-only as long as the component is bound to it. Once the service is unbound from all clients, the
-system destroys it.</p>
-
-<p>The Android system will force-stop a service only when memory is low and it must recover system
-resources for the activity that has user focus. If the service is bound to an activity that has user
-focus, then it's less likely to be killed, and if the service is declared to <a
-href="#Foreground">run in the foreground</a> (discussed later), then it will almost never be killed.
-Otherwise, if the service was started and is long-running, then the system will lower its position
-in the list of background tasks over time and the service will become highly susceptible to
-killing&mdash;if your service is started, then you must design it to gracefully handle restarts
-by the system. If the system kills your service, it restarts it as soon as resources become
-available again (though this also depends on the value you return from {@link
-android.app.Service#onStartCommand onStartCommand()}, as discussed later). For more information
-about when the system might destroy a service, see the <a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and Threading</a>
-document.</p>
-
-<p>In the following sections, you'll see how you can create each type of service and how to use
-it from other application components.</p>
-
-
-
-<h3 id="Declaring">Declaring a service in the manifest</h3>
-
-<p>Like activities (and other components), you must declare all services in your application's
-manifest file.</p>
-
-<p>To declare your service, add a <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> element
-as a child of the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
-element. For example:</p>
-
-<pre>
-&lt;manifest ... &gt;
-  ...
-  &lt;application ... &gt;
-      &lt;service android:name=".ExampleService" /&gt;
-      ...
-  &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-<p>There are other attributes you can include in the <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> element to
-define properties such as permissions required to start the service and the process in
-which the service should run. The <a
-href="{@docRoot}guide/topics/manifest/service-element.html#nm">{@code android:name}</a>
-attribute is the only required attribute&mdash;it specifies the class name of the service. Once
-you publish your application, you should not change this name, because if you do, you might break
-some functionality where explicit intents are used to reference your service (read the blog post, <a
-href="http://android-developers.blogspot.com/2011/06/things-that-cannot-change.html">Things
-That Cannot Change</a>).
-
-<p>See the <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> element
-reference for more information about declaring your service in the manifest.</p>
-
-<p>Just like an activity, a service can define intent filters that allow other components to
-invoke the service using implicit intents. By declaring intent filters, components
-from any application installed on the user's device can potentially start your service if your
-service declares an intent filter that matches the intent another application passes to {@link
-android.content.Context#startService startService()}.</p>
-
-<p>If you plan on using your service only locally (other applications do not use it), then you
-don't need to (and should not) supply any intent filters. Without any intent filters, you must
-start the service using an intent that explicitly names the service class. More information
-about <a href="#StartingAService">starting a service</a> is discussed below.</p>
-
-<p>Additionally, you can ensure that your service is private to your application only if
-you include the <a
-href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a>
-attribute and set it to {@code "false"}. This is effective even if your service supplies intent
-filters.</p>
-
-<p>For more information about creating intent filters for your service, see the <a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
-document.</p>
-
-
-
-<h2 id="CreatingStartedService">Creating a Started Service</h2>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h2>Targeting Android 1.6 or lower</h2>
-  <p>If you're building an application for Android 1.6 or lower, you need
-to implement {@link android.app.Service#onStart onStart()}, instead of {@link
-android.app.Service#onStartCommand onStartCommand()} (in Android 2.0,
-{@link android.app.Service#onStart onStart()} was deprecated in favor of {@link
-android.app.Service#onStartCommand onStartCommand()}).</p>
-  <p>For more information about providing compatibility with versions of Android older than 2.0, see
-the {@link android.app.Service#onStartCommand onStartCommand()} documentation.</p>
-</div>
-</div>
-
-<p>A started service is one that another component starts by calling {@link
-android.content.Context#startService startService()}, resulting in a call to the service's
-{@link android.app.Service#onStartCommand onStartCommand()} method.</p>
-
-<p>When a service is started, it has a lifecycle that's independent of the
-component that started it and the service can run in the background indefinitely, even if
-the component that started it is destroyed. As such, the service should stop itself when its job
-is done by calling {@link android.app.Service#stopSelf stopSelf()}, or another component can stop it
-by calling {@link android.content.Context#stopService stopService()}.</p>
-
-<p>An application component such as an activity can start the service by calling {@link
-android.content.Context#startService startService()} and passing an {@link android.content.Intent}
-that specifies the service and includes any data for the service to use. The service receives
-this {@link android.content.Intent} in the {@link android.app.Service#onStartCommand
-onStartCommand()} method.</p>
-
-<p>For instance, suppose an activity needs to save some data to an online database. The activity can
-start a companion service and deliver it the data to save by passing an intent to {@link
-android.content.Context#startService startService()}. The service receives the intent in {@link
-android.app.Service#onStartCommand onStartCommand()}, connects to the Internet and performs the
-database transaction. When the transaction is done, the service stops itself and it is
-destroyed.</p>
-
-<p class="caution"><strong>Caution:</strong> A services runs in the same process as the application
-in which it is declared and in the main thread of that application, by default. So, if your service
-performs intensive or blocking operations while the user interacts with an activity from the same
-application, the service will slow down activity performance. To avoid impacting application
-performance, you should start a new thread inside the service.</p>
-
-<p>Traditionally, there are two classes you can extend to create a started service:</p>
-<dl>
-  <dt>{@link android.app.Service}</dt>
-  <dd>This is the base class for all services. When you extend this class, it's important that
-you create a new thread in which to do all the service's work, because the service uses your
-application's main thread, by default, which could slow the performance of any activity your
-application is running.</dd>
-  <dt>{@link android.app.IntentService}</dt>
-  <dd>This is a subclass of {@link android.app.Service} that uses a worker thread to handle all
-start requests, one at a time. This is the best option if you don't require that your service
-handle multiple requests simultaneously. All you need to do is implement {@link
-android.app.IntentService#onHandleIntent onHandleIntent()}, which receives the intent for each
-start request so you can do the background work.</dd>
-</dl>
-
-<p>The following sections describe how you can implement your service using either one for these
-classes.</p>
-
-
-<h3 id="ExtendingIntentService">Extending the IntentService class</h3>
-
-<p>Because most started services don't need to handle multiple requests simultaneously
-(which can actually be a dangerous multi-threading scenario), it's probably best if you
-implement your service using the {@link android.app.IntentService} class.</p>
-
-<p>The {@link android.app.IntentService} does the following:</p>
-
-<ul>
-  <li>Creates a default worker thread that executes all intents delivered to {@link
-android.app.Service#onStartCommand onStartCommand()} separate from your application's main
-thread.</li>
-  <li>Creates a work queue that passes one intent at a time to your {@link
-android.app.IntentService#onHandleIntent onHandleIntent()} implementation, so you never have to
-worry about multi-threading.</li>
-  <li>Stops the service after all start requests have been handled, so you never have to call
-{@link android.app.Service#stopSelf}.</li>
-  <li>Provides default implementation of {@link android.app.IntentService#onBind onBind()} that
-returns null.</li>
-  <li>Provides a default implementation of {@link android.app.IntentService#onStartCommand
-onStartCommand()} that sends the intent to the work queue and then to your {@link
-android.app.IntentService#onHandleIntent onHandleIntent()} implementation.</li>
-</ul>
-
-<p>All this adds up to the fact that all you need to do is implement {@link
-android.app.IntentService#onHandleIntent onHandleIntent()} to do the work provided by the
-client. (Though, you also need to provide a small constructor for the service.)</p>
-
-<p>Here's an example implementation of {@link android.app.IntentService}:</p>
-
-<pre>
-public class HelloIntentService extends IntentService {
-
-  /** 
-   * A constructor is required, and must call the super {@link android.app.IntentService#IntentService}
-   * constructor with a name for the worker thread.
-   */
-  public HelloIntentService() {
-      super("HelloIntentService");
-  }
-
-  /**
-   * The IntentService calls this method from the default worker thread with
-   * the intent that started the service. When this method returns, IntentService
-   * stops the service, as appropriate.
-   */
-  &#64;Override
-  protected void onHandleIntent(Intent intent) {
-      // Normally we would do some work here, like download a file.
-      // For our sample, we just sleep for 5 seconds.
-      long endTime = System.currentTimeMillis() + 5*1000;
-      while (System.currentTimeMillis() &lt; endTime) {
-          synchronized (this) {
-              try {
-                  wait(endTime - System.currentTimeMillis());
-              } catch (Exception e) {
-              }
-          }
-      }
-  }
-}
-</pre>
-
-<p>That's all you need: a constructor and an implementation of {@link
-android.app.IntentService#onHandleIntent onHandleIntent()}.</p>
-
-<p>If you decide to also override other callback methods, such as {@link
-android.app.IntentService#onCreate onCreate()}, {@link
-android.app.IntentService#onStartCommand onStartCommand()}, or {@link
-android.app.IntentService#onDestroy onDestroy()}, be sure to call the super implementation, so
-that the {@link android.app.IntentService} can properly handle the life of the worker thread.</p>
-
-<p>For example, {@link android.app.IntentService#onStartCommand onStartCommand()} must return
-the default implementation (which is how the intent gets delivered to {@link
-android.app.IntentService#onHandleIntent onHandleIntent()}):</p>
-
-<pre>
-&#64;Override
-public int onStartCommand(Intent intent, int flags, int startId) {
-    Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
-    return super.onStartCommand(intent,flags,startId);
-}
-</pre>
-
-<p>Besides {@link android.app.IntentService#onHandleIntent onHandleIntent()}, the only method
-from which you don't need to call the super class is {@link android.app.IntentService#onBind
-onBind()} (but you only need to implement that if your service allows binding).</p>
-
-<p>In the next section, you'll see how the same kind of service is implemented when extending
-the base {@link android.app.Service} class, which is a lot more code, but which might be
-appropriate if you need to handle simultaneous start requests.</p>
-
-
-<h3 id="ExtendingService">Extending the Service class</h3>
-
-<p>As you saw in the previous section, using {@link android.app.IntentService} makes your
-implementation of a started service very simple. If, however, you require your service to
-perform multi-threading (instead of processing start requests through a work queue), then you
-can extend the {@link android.app.Service} class to handle each intent.</p>
-
-<p>For comparison, the following example code is an implementation of the {@link
-android.app.Service} class that performs the exact same work as the example above using {@link
-android.app.IntentService}. That is, for each start request, it uses a worker thread to perform the
-job and processes only one request at a time.</p>
-
-<pre>
-public class HelloService extends Service {
-  private Looper mServiceLooper;
-  private ServiceHandler mServiceHandler;
-
-  // Handler that receives messages from the thread
-  private final class ServiceHandler extends Handler {
-      public ServiceHandler(Looper looper) {
-          super(looper);
-      }
-      &#64;Override
-      public void handleMessage(Message msg) {
-          // Normally we would do some work here, like download a file.
-          // For our sample, we just sleep for 5 seconds.
-          long endTime = System.currentTimeMillis() + 5*1000;
-          while (System.currentTimeMillis() &lt; endTime) {
-              synchronized (this) {
-                  try {
-                      wait(endTime - System.currentTimeMillis());
-                  } catch (Exception e) {
-                  }
-              }
-          }
-          // Stop the service using the startId, so that we don't stop
-          // the service in the middle of handling another job
-          stopSelf(msg.arg1);
-      }
-  }
-
-  &#64;Override
-  public void onCreate() {
-    // Start up the thread running the service.  Note that we create a
-    // separate thread because the service normally runs in the process's
-    // main thread, which we don't want to block.  We also make it
-    // background priority so CPU-intensive work will not disrupt our UI.
-    HandlerThread thread = new HandlerThread("ServiceStartArguments",
-            Process.THREAD_PRIORITY_BACKGROUND);
-    thread.start();
-    
-    // Get the HandlerThread's Looper and use it for our Handler 
-    mServiceLooper = thread.getLooper();
-    mServiceHandler = new ServiceHandler(mServiceLooper);
-  }
-
-  &#64;Override
-  public int onStartCommand(Intent intent, int flags, int startId) {
-      Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
-
-      // For each start request, send a message to start a job and deliver the
-      // start ID so we know which request we're stopping when we finish the job
-      Message msg = mServiceHandler.obtainMessage();
-      msg.arg1 = startId;
-      mServiceHandler.sendMessage(msg);
-      
-      // If we get killed, after returning from here, restart
-      return START_STICKY;
-  }
-
-  &#64;Override
-  public IBinder onBind(Intent intent) {
-      // We don't provide binding, so return null
-      return null;
-  }
-  
-  &#64;Override
-  public void onDestroy() {
-    Toast.makeText(this, "service done", Toast.LENGTH_SHORT).show(); 
-  }
-}
-</pre>
-
-<p>As you can see, it's a lot more work than using {@link android.app.IntentService}.</p>
-
-<p>However, because you handle each call to {@link android.app.Service#onStartCommand
-onStartCommand()} yourself, you can perform multiple requests simultaneously. That's not what
-this example does, but if that's what you want, then you can create a new thread for each
-request and run them right away (instead of waiting for the previous request to finish).</p>
-
-<p>Notice that the {@link android.app.Service#onStartCommand onStartCommand()} method must return an
-integer. The integer is a value that describes how the system should continue the service in the
-event that the system kills it (as discussed above, the default implementation for {@link
-android.app.IntentService} handles this for you, though you are able to modify it). The return value
-from {@link android.app.Service#onStartCommand onStartCommand()} must be one of the following
-constants:</p>
-
-<dl>
-  <dt>{@link android.app.Service#START_NOT_STICKY}</dt>
-    <dd>If the system kills the service after {@link android.app.Service#onStartCommand
-onStartCommand()} returns, <em>do not</em> recreate the service, unless there are pending
-intents to deliver. This is the safest option to avoid running your service when not necessary
-and when your application can simply restart any unfinished jobs.</dd>
-  <dt>{@link android.app.Service#START_STICKY}</dt>
-    <dd>If the system kills the service after {@link android.app.Service#onStartCommand
-onStartCommand()} returns, recreate the service and call {@link
-android.app.Service#onStartCommand onStartCommand()}, but <em>do not</em> redeliver the last intent.
-Instead, the system calls {@link android.app.Service#onStartCommand onStartCommand()} with a
-null intent, unless there were pending intents to start the service, in which case,
-those intents are delivered. This is suitable for media players (or similar services) that are not
-executing commands, but running indefinitely and waiting for a job.</dd>
-  <dt>{@link android.app.Service#START_REDELIVER_INTENT}</dt>
-    <dd>If the system kills the service after {@link android.app.Service#onStartCommand
-onStartCommand()} returns, recreate the service and call {@link
-android.app.Service#onStartCommand onStartCommand()} with the last intent that was delivered to the
-service. Any pending intents are delivered in turn. This is suitable for services that are
-actively performing a job that should be immediately resumed, such as downloading a file.</dd>
-</dl>
-<p>For more details about these return values, see the linked reference documentation for each
-constant.</p>
-
-
-
-<h3 id="StartingAService">Starting a Service</h3>
-
-<p>You can start a service from an activity or other application component by passing an
-{@link android.content.Intent} (specifying the service to start) to {@link
-android.content.Context#startService startService()}. The Android system calls the service's {@link
-android.app.Service#onStartCommand onStartCommand()} method and passes it the {@link
-android.content.Intent}. (You should never call {@link android.app.Service#onStartCommand
-onStartCommand()} directly.)</p>
-
-<p>For example, an activity can start the example service in the previous section ({@code
-HelloSevice}) using an explicit intent with {@link android.content.Context#startService
-startService()}:</p>
-
-<pre>
-Intent intent = new Intent(this, HelloService.class);
-startService(intent);
-</pre>
-
-<p>The {@link android.content.Context#startService startService()} method returns immediately and
-the Android system calls the service's {@link android.app.Service#onStartCommand
-onStartCommand()} method. If the service is not already running, the system first calls {@link
-android.app.Service#onCreate onCreate()}, then calls {@link android.app.Service#onStartCommand
-onStartCommand()}.</p>
-
-<p>If the service does not also provide binding, the intent delivered with {@link
-android.content.Context#startService startService()} is the only mode of communication between the
-application component and the service. However, if you want the service to send a result back, then
-the client that starts the service can create a {@link android.app.PendingIntent} for a broadcast
-(with {@link android.app.PendingIntent#getBroadcast getBroadcast()}) and deliver it to the service
-in the {@link android.content.Intent} that starts the service. The service can then use the
-broadcast to deliver a result.</p>
-
-<p>Multiple requests to start the service result in multiple corresponding calls to the service's
-{@link android.app.Service#onStartCommand onStartCommand()}. However, only one request to stop
-the service (with {@link android.app.Service#stopSelf stopSelf()} or {@link
-android.content.Context#stopService stopService()}) is required to stop it.</p>
-
-
-<h3 id="Stopping">Stopping a service</h3>
-
-<p>A started service must manage its own lifecycle. That is, the system does not stop or
-destroy the service unless it must recover system memory and the service
-continues to run after {@link android.app.Service#onStartCommand onStartCommand()} returns. So,
-the service must stop itself by calling {@link android.app.Service#stopSelf stopSelf()} or another
-component can stop it by calling {@link android.content.Context#stopService stopService()}.</p>
-
-<p>Once requested to stop with {@link android.app.Service#stopSelf stopSelf()} or {@link
-android.content.Context#stopService stopService()}, the system destroys the service as soon as
-possible.</p>
-
-<p>However, if your service handles multiple requests to {@link
-android.app.Service#onStartCommand onStartCommand()} concurrently, then you shouldn't stop the
-service when you're done processing a start request, because you might have since received a new
-start request (stopping at the end of the first request would terminate the second one). To avoid
-this problem, you can use {@link android.app.Service#stopSelf(int)} to ensure that your request to
-stop the service is always based on the most recent start request. That is, when you call {@link
-android.app.Service#stopSelf(int)}, you pass the ID of the start request (the <code>startId</code>
-delivered to {@link android.app.Service#onStartCommand onStartCommand()}) to which your stop request
-corresponds. Then if the service received a new start request before you were able to call {@link
-android.app.Service#stopSelf(int)}, then the ID will not match and the service will not stop.</p>
-
-<p class="caution"><strong>Caution:</strong> It's important that your application stops its services
-when it's done working, to avoid wasting system resources and consuming battery power. If necessary,
-other components can stop the service by calling {@link
-android.content.Context#stopService stopService()}. Even if you enable binding for the service,
-you must always stop the service yourself if it ever received a call to {@link
-android.app.Service#onStartCommand onStartCommand()}.</p>
-
-<p>For more information about the lifecycle of a service, see the section below about <a
-href="#Lifecycle">Managing the Lifecycle of a Service</a>.</p>
-
-
-
-<h2 id="CreatingBoundService">Creating a Bound Service</h2>
-
-<p>A bound service is one that allows application components to bind to it by calling {@link
-android.content.Context#bindService bindService()} in order to create a long-standing connection
-(and generally does not allow components to <em>start</em> it by calling {@link
-android.content.Context#startService startService()}).</p>
-
-<p>You should create a bound service when you want to interact with the service from activities
-and other components in your application or to expose some of your application's functionality to
-other applications, through interprocess communication (IPC).</p>
-
-<p>To create a bound service, you must implement the {@link
-android.app.Service#onBind onBind()} callback method to return an {@link android.os.IBinder} that
-defines the interface for communication with the service. Other application components can then call
-{@link android.content.Context#bindService bindService()} to retrieve the interface and
-begin calling methods on the service. The service lives only to serve the application component that
-is bound to it, so when there are no components bound to the service, the system destroys it
-(you do <em>not</em> need to stop a bound service in the way you must when the service is started
-through {@link android.app.Service#onStartCommand onStartCommand()}).</p>
-
-<p>To create a bound service, the first thing you must do is define the interface that specifies
-how a client can communicate with the service. This interface between the service
-and a client must be an implementation of {@link android.os.IBinder} and is what your service must
-return from the {@link android.app.Service#onBind
-onBind()} callback method. Once the client receives the {@link android.os.IBinder}, it can begin
-interacting with the service through that interface.</p>
-
-<p>Multiple clients can bind to the service at once. When a client is done interacting with the
-service, it calls {@link android.content.Context#unbindService unbindService()} to unbind. Once
-there are no clients bound to the service, the system destroys the service.</p>
-
-<p>There are multiple ways to implement a bound service and the implementation is more
-complicated than a started service, so the bound service discussion appears in a separate
-document about <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a>.</p>
-
-
-
-<h2 id="Notifications">Sending Notifications to the User</h2>
-
-<p>Once running, a service can notify the user of events using <a
-href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Toast Notifications</a> or <a
-href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>.</p>
-
-<p>A toast notification is a message that appears on the surface of the current window for a
-moment then disappears, while a status bar notification provides an icon in the status bar with a
-message, which the user can select in order to take an action (such as start an activity).</p>
-
-<p>Usually, a status bar notification is the best technique when some background work has completed
-(such as a file completed
-downloading) and the user can now act on it. When the user selects the notification from the
-expanded view, the notification can start an activity (such as to view the downloaded file).</p>
-
-<p>See the <a
-href="{@docRoot}guide/topics/ui/notifiers/toasts.html">Toast Notifications</a> or <a
-href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>
-developer guides for more information.</p>
-
-
-
-<h2 id="Foreground">Running a Service in the Foreground</h2>
-
-<p>A foreground service is a service that's considered to be something the
-user is actively aware of and thus not a candidate for the system to kill when low on memory. A 
-foreground service must provide a notification for the status bar, which is placed under the
-"Ongoing" heading, which means that the notification cannot be dismissed unless the service is
-either stopped or removed from the foreground.</p>
-
-<p>For example, a music player that plays music from a service should be set to run in the
-foreground, because the user is explicitly aware
-of its operation. The notification in the status bar might indicate the current song and allow
-the user to launch an activity to interact with the music player.</p>
-
-<p>To request that your service run in the foreground, call {@link
-android.app.Service#startForeground startForeground()}. This method takes two parameters: an integer
-that uniquely identifies the notification and the {@link
-android.app.Notification} for the status bar. For example:</p>
-
-<pre>
-Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
-        System.currentTimeMillis());
-Intent notificationIntent = new Intent(this, ExampleActivity.class);
-PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
-notification.setLatestEventInfo(this, getText(R.string.notification_title),
-        getText(R.string.notification_message), pendingIntent);
-startForeground(ONGOING_NOTIFICATION, notification);
-</pre>
-
-
-<p>To remove the service from the foreground, call {@link
-android.app.Service#stopForeground stopForeground()}. This method takes a boolean, indicating
-whether to remove the status bar notification as well. This method does <em>not</em> stop the
-service. However, if you stop the service while it's still running in the foreground, then the
-notification is also removed.</p>
-
-<p class="note"><strong>Note:</strong> The methods {@link
-android.app.Service#startForeground startForeground()} and {@link
-android.app.Service#stopForeground stopForeground()} were introduced in Android 2.0 (API Level
-5). In order to run your service in the foreground on older versions of the platform, you must
-use the previous {@code setForeground()} method&mdash;see the {@link
-android.app.Service#startForeground startForeground()} documentation for information about how
-to provide backward compatibility.</p>
-
-<p>For more information about notifications, see <a
-href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Creating Status Bar
-Notifications</a>.</p>
-
-
-
-<h2 id="Lifecycle">Managing the Lifecycle of a Service</h2>
-
-<p>The lifecycle of a service is much simpler than that of an activity. However, it's even more important
-that you pay close attention to how your service is created and destroyed, because a service
-can run in the background without the user being aware.</p>
-
-<p>The service lifecycle&mdash;from when it's created to when it's destroyed&mdash;can follow two
-different paths:</p>
-
-<ul>
-<li>A started service
-  <p>The service is created when another component calls {@link
-android.content.Context#startService startService()}. The service then runs indefinitely and must
-stop itself by calling {@link
-android.app.Service#stopSelf() stopSelf()}. Another component can also stop the
-service by calling {@link android.content.Context#stopService
-stopService()}. When the service is stopped, the system destroys it..</p></li>
-
-<li>A bound service
-  <p>The service is created when another component (a client) calls {@link
-android.content.Context#bindService bindService()}. The client then communicates with the service
-through an {@link android.os.IBinder} interface. The client can close the connection by calling
-{@link android.content.Context#unbindService unbindService()}. Multiple clients can bind to
-the same service and when all of them unbind, the system destroys the service. (The service
-does <em>not</em> need to stop itself.)</p></li>
-</ul>
-
-<p>These two paths are not entirely separate. That is, you can bind to a service that was already
-started with {@link android.content.Context#startService startService()}. For example, a background
-music service could be started by calling {@link android.content.Context#startService
-startService()} with an {@link android.content.Intent} that identifies the music to play. Later,
-possibly when the user wants to exercise some control over the player or get information about the
-current song, an activity can bind to the service by calling {@link
-android.content.Context#bindService bindService()}. In cases like this, {@link
-android.content.Context#stopService stopService()} or {@link android.app.Service#stopSelf
-stopSelf()} does not actually stop the service until all clients unbind. </p>
-
-
-<h3 id="LifecycleCallbacks">Implementing the lifecycle callbacks</h3>
-
-<p>Like an activity, a service has lifecycle callback methods that you can implement to monitor
-changes in the service's state and perform work at the appropriate times. The following skeleton
-service demonstrates each of the lifecycle methods:</p>
-
-
-<div class="figure" style="width:432px">
-<img src="{@docRoot}images/service_lifecycle.png" alt="" />
-<p class="img-caption"><strong>Figure 2.</strong> The service lifecycle. The diagram on the left
-shows the lifecycle when the service is created with {@link android.content.Context#startService
-startService()} and the diagram on the right shows the lifecycle when the service is created
-with {@link android.content.Context#bindService bindService()}.</p>
-</div>
-
-<pre>
-public class ExampleService extends Service {
-    int mStartMode;       // indicates how to behave if the service is killed
-    IBinder mBinder;      // interface for clients that bind
-    boolean mAllowRebind; // indicates whether onRebind should be used
-
-    &#64;Override
-    public void {@link android.app.Service#onCreate onCreate}() {
-        // The service is being created
-    }
-    &#64;Override
-    public int {@link android.app.Service#onStartCommand onStartCommand}(Intent intent, int flags, int startId) {
-        // The service is starting, due to a call to {@link android.content.Context#startService startService()}
-        return <em>mStartMode</em>;
-    }
-    &#64;Override
-    public IBinder {@link android.app.Service#onBind onBind}(Intent intent) {
-        // A client is binding to the service with {@link android.content.Context#bindService bindService()}
-        return <em>mBinder</em>;
-    }
-    &#64;Override
-    public boolean {@link android.app.Service#onUnbind onUnbind}(Intent intent) {
-        // All clients have unbound with {@link android.content.Context#unbindService unbindService()}
-        return <em>mAllowRebind</em>;
-    }
-    &#64;Override
-    public void {@link android.app.Service#onRebind onRebind}(Intent intent) {
-        // A client is binding to the service with {@link android.content.Context#bindService bindService()},
-        // after onUnbind() has already been called
-    }
-    &#64;Override
-    public void {@link android.app.Service#onDestroy onDestroy}() {
-        // The service is no longer used and is being destroyed
-    }
-}
-</pre>
-
-<p class="note"><strong>Note:</strong> Unlike the activity lifecycle callback methods, you are
-<em>not</em> required to call the superclass implementation of these callback methods.</p>
-
-<p>By implementing these methods, you can monitor two nested loops of the service's lifecycle: </p>
-
-<ul>
-<li>The <strong>entire lifetime</strong> of a service happens between the time {@link
-android.app.Service#onCreate onCreate()} is called and the time {@link
-android.app.Service#onDestroy} returns. Like an activity, a service does its initial setup in
-{@link android.app.Service#onCreate onCreate()} and releases all remaining resources in {@link
-android.app.Service#onDestroy onDestroy()}.  For example, a
-music playback service could create the thread where the music will be played in {@link
-android.app.Service#onCreate onCreate()}, then stop the thread in {@link
-android.app.Service#onDestroy onDestroy()}.
-
-<p>The {@link android.app.Service#onCreate onCreate()} and {@link android.app.Service#onDestroy
-onDestroy()} methods are called for all services, whether
-they're created by {@link android.content.Context#startService startService()} or {@link
-android.content.Context#bindService bindService()}.</p></li>
-
-<li>The <strong>active lifetime</strong> of a service begins with a call to either {@link
-android.app.Service#onStartCommand onStartCommand()} or {@link android.app.Service#onBind onBind()}.
-Each method is handed the {@link
-android.content.Intent} that was passed to either {@link android.content.Context#startService
-startService()} or {@link android.content.Context#bindService bindService()}, respectively.
-<p>If the service is started, the active lifetime ends the same time that the entire lifetime
-ends (the service is still active even after {@link android.app.Service#onStartCommand
-onStartCommand()} returns). If the service is bound, the active lifetime ends when {@link
-android.app.Service#onUnbind onUnbind()} returns.</p>
-</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Although a started service is stopped by a call to
-either {@link android.app.Service#stopSelf stopSelf()} or {@link
-android.content.Context#stopService stopService()}, there is not a respective callback for the
-service (there's no {@code onStop()} callback). So, unless the service is bound to a client,
-the system destroys it when the service is stopped&mdash;{@link
-android.app.Service#onDestroy onDestroy()} is the only callback received.</p>
-
-<p>Figure 2 illustrates the typical callback methods for a service. Although the figure separates
-services that are created by {@link android.content.Context#startService startService()} from those
-created by {@link android.content.Context#bindService bindService()}, keep
-in mind that any service, no matter how it's started, can potentially allow clients to bind to it.
-So, a service that was initially started with {@link android.app.Service#onStartCommand
-onStartCommand()} (by a client calling {@link android.content.Context#startService startService()})
-can still receive a call to {@link android.app.Service#onBind onBind()} (when a client calls
-{@link android.content.Context#bindService bindService()}).</p>
-
-<p>For more information about creating a service that provides binding, see the <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html">Bound Services</a> document,
-which includes more information about the {@link android.app.Service#onRebind onRebind()}
-callback method in the section about <a
-href="{@docRoot}guide/topics/fundamentals/bound-services.html#Lifecycle">Managing the Lifecycle of
-a Bound Service</a>.</p>
-
-
-<!--
-<h2>Beginner's Path</h2>
-
-<p>To learn how to query data from the system or other applications (such as contacts or media
-stored on the device), continue with the <b><a
-href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a></b>
-document.</p>
--->
diff --git a/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd b/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd
deleted file mode 100644
index 0880614..0000000
--- a/docs/html/guide/topics/fundamentals/tasks-and-back-stack.jd
+++ /dev/null
@@ -1,596 +0,0 @@
-page.title=Tasks and Back Stack
-parent.title=Activities
-parent.link=activities.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>All activities belong to a task</li>
-  <li>A task contains a collection of activities in the order in which the user interacts with
-them</li>
-  <li>Tasks can move to the background and retain the state of each activity in order for users
-to perform other tasks without losing their work</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
-<li><a href="#ActivityState">Saving Activity State</a></li></li>
-<li><a href="#ManagingTasks">Managing Tasks</a>
-  <ol>
-    <li><a href="#TaskLaunchModes">Defining launch modes</a></li>
-    <li><a href="#Affinities">Handling affinities</a></li>
-    <li><a href="#Clearing">Clearing the back stack</a></li>
-    <li><a href="#Starting">Starting a task</a></li>
-  </ol>
-</li>
-</ol>
-
-<h2>Articles</h2>
-<ol>
-  <li><a href="{@docRoot}resources/articles/multitasking-android-way.html">Multitasking the Android Way</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-  <li><a href="{@docRoot}design/patterns/navigation.html">Android Design:
-Navigation</a></li>
-  <li><a href="{@docRoot}videos/index.html#v=fL6gSd4ugSI">Application Lifecycle video</a></li>
-  <li><a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;} manifest
-element</a></li>
-</ol>
-</div>
-</div>
-
-
-<p>An application usually contains multiple <a
-href="{@docRoot}guide/topics/fundamentals/activities.html">activities</a>. Each activity
-should be designed around a specific kind of action the user can perform and can start other
-activities. For example, an email application might have one activity to show a list of new email.
-When the user selects an email, a new activity opens to view that email.</p>
-
-<p>An activity can even start activities that exist in other applications on the device. For
-example, if your application wants to send an email, you can define an intent to perform a "send"
-action and include some data, such as an email address and a message. An activity from another
-application that declares itself to handle this kind of intent then opens. In this case, the intent
-is to send an email, so an email application's "compose" activity starts (if multiple activities
-support the same intent, then the system lets the user select which one to use). When the email is
-sent, your activity resumes and it seems as if the email activity was part of your application. Even
-though the activities may be from different applications, Android maintains this seamless user
-experience by keeping both activities in the same <em>task</em>.</p>
-
-<p>A task is a collection of activities that users interact with
-when performing a certain job. The activities are arranged in a stack (the "back stack"), in the
-order in which each activity is opened.</p>
-
-<!-- SAVE FOR WHEN THE FRAGMENT DOC IS ADDED
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h3>Adding fragments to a task's back stack</h3>
-
-<p>Your activity can also include {@link android.app.Fragment}s to the back stack. For example,
-suppose you have a two-pane layout using fragments, one of which is a list view (fragment A) and the
-other being a layout to display an item from the list (fragment B). When the user selects an item
-from the list, fragment B is replaced by a new fragment (fragment C). In this case, it might be
-desireable for the user to navigate back to reveal fragment B, using the <em>Back</em> button.</p>
-<p>In order to add fragment B to the back stack so that this is possible, you must call {@link
-android.app.FragmentTransaction#addToBackStack addToBackStack()} before you {@link
-android.app.FragmentTransaction#commit()} the transaction that replaces fragment B with fragment
-C.</p>
-<p>For more information about using fragments and adding them to the back stack, see the {@link
-android.app.Fragment} class documentation.</p>
-
-</div>
-</div>
--->
-
-<p>The device Home screen is the starting place for most tasks. When the user touches an icon in the
-application
-launcher (or a shortcut on the Home screen), that application's task comes to the foreground. If no
-task exists for the application (the application has not been used recently), then a new task
-is created and the "main" activity for that application opens as the root activity in the stack.</p>
-
-<p>When the current activity starts another, the new activity is pushed on the top of the stack and
-takes focus. The previous activity remains in the stack, but is stopped. When an activity
-stops, the system retains the current state of its user interface. When the user presses the
-<em>Back</em>
-button, the current activity is popped from the top of the stack (the activity is destroyed) and the
-previous activity resumes (the previous state of its UI is restored). Activities in the stack are
-never rearranged, only pushed and popped from the stack&mdash;pushed onto the stack when started by
-the current activity and popped off when the user leaves it using the <em>Back</em> button. As such,
-the back
-stack operates as a "last in, first out" object structure. Figure 1 visualizes
-this behavior with a timeline showing the progress between activities along with the current back
-stack at each point in time.</p>
-
-<img src="{@docRoot}images/fundamentals/diagram_backstack.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> A representation of how each new activity in a
-task adds an item to the back stack. When the user presses the <em>Back</em> button, the current
-activity is
-destroyed and the previous activity resumes.</p>
-
-
-<p>If the user continues to press <em>Back</em>, then each activity in the stack is popped off to
-reveal the
-previous one, until the user returns to the Home screen (or to whichever activity was running when
-the task began). When all activities are removed from the stack, the task no longer exists.</p>
-
-<div class="figure" style="width:287px">
-<img src="{@docRoot}images/fundamentals/diagram_multitasking.png" alt="" /> <p
-class="img-caption"><strong>Figure 2.</strong> Two tasks: Task B receives user interaction
-in the foreground, while Task A is in the background, waiting to be resumed.</p>
-</div>
-<div class="figure" style="width:215px">
-  <img src="{@docRoot}images/fundamentals/diagram_multiple_instances.png" alt="" /> <p
-class="img-caption"><strong>Figure 3.</strong> A single activity is instantiated multiple times.</p>
-</div>
-
-<p>A task is a cohesive unit that can move to the "background" when users begin a new task or go
-to the Home screen, via the <em>Home</em> button. While in the background, all the activities in the
-task are
-stopped, but the back stack for the task remains intact&mdash;the task has simply lost focus while
-another task takes place, as shown in figure 2. A task can then return to the "foreground" so users
-can pick up where they left off. Suppose, for example, that the current task (Task A) has three
-activities in its stack&mdash;two under the current activity. The user presses the <em>Home</em>
-button, then
-starts a new application from the application launcher. When the Home screen appears, Task A goes
-into the background. When the new application starts, the system starts a task for that application
-(Task B) with its own stack of activities. After interacting with
-that application, the user returns Home again and selects the application that originally
-started Task A. Now, Task A comes to the
-foreground&mdash;all three activities in its stack are intact and the activity at the top of the
-stack resumes. At
-this point, the user can also switch back to Task B by going Home and selecting the application icon
-that started that task (or by touching and holding the <em>Home</em> button to reveal recent tasks
-and selecting
-one). This is an example of multitasking on Android.</p>
-
-<p class="note"><strong>Note:</strong> Multiple tasks can be held in the background at once.
-However, if the user is running many background tasks at the same time, the system might begin
-destroying background activities in order to recover memory, causing the activity states to be lost.
-See the following section about <a href="#ActivityState">Activity state</a>.</p>
-
-<p>Because the activities in the back stack are never rearranged, if your application allows
-users to start a particular activity from more than one activity, a new instance of
-that activity is created and pushed onto the stack (rather than bringing any previous instance of
-the activity to the top). As such, one activity in your application might be instantiated multiple
-times (even from different tasks), as shown in figure 3. As such, if the user navigates backward
-using the <em>Back</em> button, each instance of the activity is revealed in the order they were
-opened (each
-with their own UI state). However, you can modify this behavior if you do not want an activity to be
-instantiated more than once. How to do so is discussed in the later section about <a
-href="#ManagingTasks">Managing Tasks</a>.</p>
-
-
-<p>To summarize the default behavior for activities and tasks:</p>
-
-<ul>
-  <li>When Activity A starts Activity B, Activity A is stopped, but the system retains its state
-(such as scroll position and text entered into forms).
-If the user presses the <em>Back</em> button while in Activity B, Activity A resumes with its state
-restored.</li>
-  <li>When the user leaves a task by pressing the <em>Home</em> button, the current activity is
-stopped and
-its task goes into the background. The system retains the state of every activity in the task. If
-the user later resumes the task by selecting the launcher icon that began the task, the task comes
-to the foreground and resumes the activity at the top of the stack.</li>
-  <li>If the user presses the <em>Back</em> button, the current activity is popped from the stack
-and
-destroyed. The previous activity in the stack is resumed. When an activity is destroyed, the system
-<em>does not</em> retain the activity's state.</li>
-  <li>Activities can be instantiated multiple times, even from other tasks.</li>
-</ul>
-
-
-<div class="design-announce">
-<p><strong>Navigation Design</strong></p>
-  <p>For more about how app navigation works on Android, read Android Design's <a
-href="{@docRoot}design/patterns/navigation.html">Navigation</a> guide.</p>
-</div>
-
-
-<h2 id="ActivityState">Saving Activity State</h2>
-
-<p>As discussed above, the system's default behavior preserves the state of an activity when it is
-stopped. This way, when users navigate back to a previous activity, its user interface appears
-the way they left it. However, you can&mdash;and <strong>should</strong>&mdash;proactively retain
-the state of your activities using callback methods, in case the activity is destroyed and must
-be recreated.</p>
-
-<p>When the system stops one of your activities (such as when a new activity starts or the task
-moves to the background), the system might destroy that activity completely if it needs to recover
-system memory. When this happens, information about the activity state is lost. If this happens, the
-system still
-knows that the activity has a place in the back stack, but when the activity is brought to the
-top of the stack the system must recreate it (rather than resume it). In order to
-avoid losing the user's work, you should proactively retain it by implementing the {@link
-android.app.Activity#onSaveInstanceState onSaveInstanceState()} callback
-methods in your activity.</p>
-
-<p>For more information about how to save your activity state, see the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">Activities</a>
-document.</p>
-
-
-
-<h2 id="ManagingTasks">Managing Tasks</h2>
-
-<p>The way Android manages tasks and the back stack, as described above&mdash;by placing all
-activities started in succession in the same task and in a "last in, first out" stack&mdash;works
-great for most applications and you shouldn't have to worry about how your activities are associated
-with tasks or how they exist in the back stack. However, you might decide that you want to interrupt
-the normal behavior. Perhaps you want an activity in your application to begin a new task when it is
-started (instead of being placed within the current task); or, when you start an activity, you want
-to bring forward an existing instance of it (instead of creating a new
-instance on top of the back stack); or, you want your back stack to be cleared of all
-activities except for the root activity when the user leaves the task.</p>
-
-<p>You can do these things and more, with attributes in the
-<a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-&lt;activity&gt;}</a> manifest element and with flags in the intent that you pass to {@link
-android.app.Activity#startActivity startActivity()}.</p>
-
-<p>In this regard, the the principal <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
-attributes you can use are:</p>
-
-<ul class="nolist">
-  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code
-taskAffinity}</a></li>
-  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
-launchMode}</a></li>
-  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">{@code
-allowTaskReparenting}</a></li>
-  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code
-clearTaskOnLaunch}</a></li>
-  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#always">{@code
-alwaysRetainTaskState}</a></li>
-  <li><a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code
-finishOnTaskLaunch}</a></li>
-</ul>
-
-<p>And the principal intent flags you can use are:</p>
-
-<ul class="nolist">
-  <li>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</li>
-  <li>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</li>
-  <li>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</li>
-</ul>
-
-<p>In the following sections, you'll see how you can use these manifest attributes and intent
-flags to define how activities are associated with tasks and how the behave in the back stack.</p>
-
-
-<p class="caution"><strong>Caution:</strong> Most applications should not interrupt the default
-behavior for activities and tasks. If you determine that it's necessary for your activity to modify
-the default behaviors, use caution and be sure to test the usability of the activity during
-launch and when navigating back to it from other activities and tasks with the <em>Back</em> button.
-Be sure 
-to test for navigation behaviors that might conflict with the user's expected behavior.</p>
-
-
-<h3 id="TaskLaunchModes">Defining launch modes</h3>
-
-<p>Launch modes allow you to define how a new instance of an activity is associated with the
-current task. You can define different launch modes in two ways:</p>
-<ul class="nolist">
-  <li><a href="#ManifestForTasks">Using the manifest file</a>
-    <p>When you declare an activity in your manifest file, you can specify how the activity
-should associate with tasks when it starts.</li>
-  <li><a href="#IntentFlagsForTasks">Using Intent flags</a>
-    <p>When you call {@link android.app.Activity#startActivity startActivity()},
-you can include a flag in the {@link android.content.Intent} that declares how (or
-whether) the new activity should associate with the current task.</p></li>
-</ul>
-
-<p>As such, if Activity A starts Activity B, Activity B can define in its manifest how it
-should associate with the current task (if at all) and Activity A can also request how Activity
-B should associate with current task. If both activities define how Activity B
-should associate with a task, then Activity A's request (as defined in the intent) is honored
-over Activity B's request (as defined in its manifest).</p>
-
-<p class="note"><strong>Note:</strong> Some launch modes available for the manifest file
-are not available as flags for an intent and, likewise, some launch modes available as flags
-for an intent cannot be defined in the manifest.</p>
-
-
-<h4 id="ManifestForTasks">Using the manifest file</h4>
-
-<p>When declaring an activity in your manifest file, you can specify how the activity should
-associate with a task using the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
-element's <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
-launchMode}</a> attribute.</p>
-
-<p>The <a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code
-launchMode}</a> attribute specifies an instruction on how the activity should be launched into a
-task. There are four different launch modes you can assign to the
-<code><a href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">launchMode</a></code>
-attribute:</p>
-
-<dl>
-<dt>{@code "standard"} (the default mode)</dt>
-  <dd>Default. The system creates a new instance of the activity in the task from
-which it was started and routes the intent to it. The activity can be instantiated multiple times,
-each instance can belong to different tasks, and one task can have multiple instances.</dd>
-<dt>{@code "singleTop"}</dt>
-  <dd>If an instance of the activity already exists at the top of the current task, the system
-routes the intent to that instance through a call to its {@link
-android.app.Activity#onNewIntent onNewIntent()} method, rather than creating a new instance of the
-activity. The activity can be instantiated multiple times, each instance can
-belong to different tasks, and one task can have multiple instances (but only if the the
-activity at the top of the back stack is <em>not</em> an existing instance of the activity).
-  <p>For example, suppose a task's back stack consists of root activity A with activities B, C,
-and D on top (the stack is A-B-C-D; D is on top). An intent arrives for an activity of type D.
-If D has the default {@code "standard"} launch mode, a new instance of the class is launched and the
-stack becomes A-B-C-D-D. However, if D's launch mode is {@code "singleTop"}, the existing instance
-of D receives the intent through {@link
-android.app.Activity#onNewIntent onNewIntent()}, because it's at the top of the stack&mdash;the
-stack remains A-B-C-D. However, if an intent arrives for an activity of type B, then a new
-instance of B is added to the stack, even if its launch mode is {@code "singleTop"}.</p>
-  <p class="note"><strong>Note:</strong> When a new instance of an activity is created,
-the user can press the <em>Back</em> button to return to the previous activity. But when an existing
-instance of
-an activity handles a new intent, the user cannot press the <em>Back</em> button to return to the
-state of
-the activity before the new intent arrived in {@link android.app.Activity#onNewIntent
-onNewIntent()}.</p>
-</dd>
-
-<dt>{@code "singleTask"}</dt>
-  <dd>The system creates a new task and instantiates the activity at the root of the new task.
-However, if an instance of the activity already exists in a separate task, the system routes the
-intent to the existing instance through a call to its {@link
-android.app.Activity#onNewIntent onNewIntent()} method, rather than creating a new instance. Only
-one instance of the activity can exist at a time.
-  <p class="note"><strong>Note:</strong> Although the activity starts in a new task, the
-<em>Back</em> button still returns the user to the previous activity.</p></dd>
-<dt>{@code "singleInstance"}.</dt>
-  <dd>Same as {@code "singleTask"}, except that the system doesn't launch any other activities into
-the task holding the instance. The activity is always the single and only member of its task;
-any activities started by this one open in a separate task.</dd>
-</dl>
-
-
-<p>As another example, the Android Browser application declares that the web browser activity should
-always open in its own task&mdash;by specifying the {@code singleTask} launch mode in the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> element.
-This means that if your application issues an
-intent to open the Android Browser, its activity is <em>not</em> placed in the same
-task as your application. Instead, either a new task starts for the Browser or, if the Browser
-already has a task running in the background, that task is brought forward to handle the new
-intent.</p>
-
-<p>Regardless of whether an activity starts in a new task or in the same task as the activity that
-started it, the <em>Back</em> button always takes the user to the previous activity. However, if you
-start an activity that specifies the {@code singleTask} launch mode, then if an instance of
-that activity exists in a background task, that whole task is brought to the foreground. At this
-point, the back stack now includes all activities from the task brought forward, at the top of the
-stack. Figure 4 illustrates this type of scenario.</p>
-
-<img src="{@docRoot}images/fundamentals/diagram_backstack_singletask_multiactivity.png" alt="" />
-<p class="img-caption"><strong>Figure 4.</strong> A representation of how an activity with
-launch mode "singleTask" is added to the back stack. If the activity is already a part of a
-background task with its own back stack, then the entire back stack also comes
-forward, on top of the current task.</p>
-
-<p>For more information about using launch modes in the manifest file, see the
-<code><a href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code>
-element documentation, where the {@code launchMode} attribute and the accepted values are
-discussed more.</p>
-
-<p class="note"><strong>Note:</strong> The behaviors that you specify for your activity with the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> attribute
-can be overridden by flags included with the intent that start your activity, as discussed in the
-next section.</p>
-
-
-
-<h4 id="#IntentFlagsForTasks">Using Intent flags</h4>
-
-<p>When starting an activity, you can modify the default association of an activity to its task
-by including flags in the intent that you deliver to {@link
-android.app.Activity#startActivity startActivity()}. The flags you can use to modify the
-default behavior are:</p>
-
-<p>
-  <dt>{@link android.content.Intent#FLAG_ACTIVITY_NEW_TASK}</dt>
-    <dd>Start the activity in a new task. If a task is already running for the activity you are now
-starting, that task is brought to the foreground with its last state restored and the activity
-receives the new intent in {@link android.app.Activity#onNewIntent onNewIntent()}. 
-    <p>This produces the same behavior as the {@code "singleTask"} <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> value,
-discussed in the previous section.</p></dd>
-  <dt>{@link android.content.Intent#FLAG_ACTIVITY_SINGLE_TOP}</dt>
-    <dd>If the activity being started is the current activity (at the top of the back stack), then
-the existing instance receives a call to {@link android.app.Activity#onNewIntent onNewIntent()},
-instead of creating a new instance of the activity.
-    <p>This produces the same behavior as the {@code "singleTop"} <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a> value,
-discussed in the previous section.</p></dd>
-  <dt>{@link android.content.Intent#FLAG_ACTIVITY_CLEAR_TOP}</dt>
-    <dd>If the activity being started is already running in the current task, then instead
-of launching a new instance of that activity, all of the other activities on top of it are
-destroyed and this intent is delivered to the resumed instance of the activity (now on top),
-through {@link android.app.Activity#onNewIntent onNewIntent()}).
-    <p>There is no value for the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#lmode">{@code launchMode}</a>
-attribute that produces this behavior.</p>
-    <p>{@code FLAG_ACTIVITY_CLEAR_TOP} is most often used in conjunction with {@code
-FLAG_ACTIVITY_NEW_TASK}.  When used together, these flags are a way of locating an existing activity
-in another task and putting it in a position where it can respond to the intent. </p>
-    <p class="note"><strong>Note:</strong> If the launch mode of the designated activity is {@code
-"standard"}, it too is removed from the stack and a new instance is launched in its place to handle
-the incoming intent.  That's because a new instance is always created for a new intent when the
-launch mode is {@code "standard"}. </p>
-</dd>
-</dl>
-
-
-
-
-
-<h3 id="Affinities">Handling affinities</h3>
-
-<p>The <em>affinity</em> indicates which task an activity prefers to belong to. By default, all the
-activities from the same application have an affinity for each other. So, by default, all
-activities in the same application prefer to be in the same task. However, you can modify
-the default affinity for an activity. Activities defined in
-different applications can share an affinity, or activities defined in the same application can be
-assigned different task affinities.</p>
-
-<p>You can modify the affinity for any given activity with the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a> attribute
-of the <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
-element.</p>
-
-<p>The <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
-attribute takes a string value, which must be unique from the default package name
-declared in the <a href="{@docRoot}guide/topics/manifest/manifest-element.html">{@code
-&lt;manifest&gt;}</a> element, because the system uses that name to identify the default task
-affinity for the application.</p>
-
-<p>The affinity comes into play in two circumstances:</p>
-<ul>
-  <li>When the intent that launches an activity contains the {@link
-android.content.Intent#FLAG_ACTIVITY_NEW_TASK} flag.
-
-<p>A new activity is, by default, launched into the task of the activity
-that called {@link android.app.Activity#startActivity startActivity()}. It's pushed onto the same
-back stack as the caller.  However, if the intent passed to {@link
-android.app.Activity#startActivity startActivity()} contains the {@link
-android.content.Intent#FLAG_ACTIVITY_NEW_TASK}
-flag, the system looks for a different task to house the new activity. Often, it's a new task. 
-However, it doesn't have to be.  If there's already an existing task with the same affinity as the
-new activity, the activity is launched into that task.  If not, it begins a new task.</p>
-
-<p>If this flag causes an activity to begin a new task and the user presses the <em>Home</em> button
-to leave
-it, there must be some way for the user to navigate back to the task. Some entities (such as the
-notification manager) always start activities in an external task, never as part of their own, so
-they always put {@code FLAG_ACTIVITY_NEW_TASK} in the intents they pass to {@link
-android.app.Activity#startActivity startActivity()}.  If you have an activity that can be invoked by
-an external entity that might use this flag, take care that the user has a independent way to get
-back to the task that's started, such as with a launcher icon (the root activity of the task
-has a {@link android.content.Intent#CATEGORY_LAUNCHER} intent filter; see the <a
-href="#Starting">Starting a task</a> section below).</p>
-</li>
-
-  <li>When an activity has its <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#reparent">{@code
-allowTaskReparenting}</a> attribute set to {@code "true"}.
-  <p>In this case, the activity can move from the task it starts to the task it has an affinity
-for, when that task comes to the foreground.</p>
-  <p>For example, suppose that an activity that reports weather conditions in selected cities is
-defined as part of a travel application.  It has the same affinity as other activities in the same
-application (the default application affinity) and it allows re-parenting with this attribute.
-When one of your activities starts the weather reporter activity, it initially belongs to the same
-task as your activity. However, when the travel application's task comes to the foreground, the
-weather reporter activity is reassigned to that task and displayed within it.</p>
-</li>
-</ul>
-
-<p class="note"><strong>Tip:</strong> If an {@code .apk} file contains more than one "application"
-from the user's point of view, you probably want to use the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#aff">{@code taskAffinity}</a>
-attribute to assign different affinities to the activities associated with each "application".</p>
-
-
-
-<h3 id="Clearing">Clearing the back stack</h3>
-
-<p>If the user leaves a task for a long time, the system clears the task of all activities except
-the root activity.  When the user returns to the task again, only the root activity is restored.
-The system behaves this way, because, after an extended amount of time, users likely have abandoned
-what they were doing before and are returning to the task to begin something new. </p>
-
-<p>There are some activity attributes that you can use to modify this behavior: </p>
-
-<dl>
-<dt><code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html#always">alwaysRetainTaskState</a></code>
-</dt>
-<dd>If this attribute is set to {@code "true"} in the root activity of a task,
-the default behavior just described does not happen.
-The task retains all activities in its stack even after a long period.</dd>
-
-<dt><code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html#clear">clearTaskOnLaunch</a></code></dt>
-<dd>If this attribute is set to {@code "true"} in the root activity of a task,
-the stack is cleared down to the root activity whenever the user leaves the task
-and returns to it.  In other words, it's the opposite of <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#always">{@code
-alwaysRetainTaskState}</a>.  The user always returns to the task in its
-initial state, even after a leaving the task for only a moment.</dd>
-
-<dt><code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html#finish">finishOnTaskLaunch</a></code>
-</dt>
-<dd>This attribute is like <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#clear">{@code clearTaskOnLaunch}</a>,
-but it operates on a
-single activity, not an entire task.  It can also cause any activity to go
-away, including the root activity.  When it's set to {@code "true"}, the
-activity remains part of the task only for the current session.  If the user
-leaves and then returns to the task, it is no longer present.</dd>
-</dl>
-
-
-
-
-<h3 id="Starting">Starting a task</h3>
-
-<p>You can set up an activity as the entry point for a task by giving it an intent filter with
-{@code "android.intent.action.MAIN"} as the specified action and {@code
-"android.intent.category.LAUNCHER"} as the specified category. For example:</p>
-
-<pre>
-&lt;activity ... &gt;
-    &lt;intent-filter ... &gt;
-        &lt;action android:name="android.intent.action.MAIN" /&gt;
-        &lt;category android:name="android.intent.category.LAUNCHER" /&gt;
-    &lt;/intent-filter&gt;
-    ...
-&lt;/activity&gt;
-</pre>
-
-<p>An intent filter of this kind causes an icon and label for the
-activity to be displayed in the application launcher, giving users a way to launch the activity and
-to return to the task that it creates any time after it has been launched.
-</p>
-
-<p>This second ability is important: Users must be able to leave a task and then come back to it
-later using this activity launcher.  For this reason, the two <a href="#LaunchModes">launch
-modes</a> that mark activities as always initiating a task, {@code "singleTask"} and "{@code
-"singleInstance"}, should be used only when the activity has an {@link
-android.content.Intent#ACTION_MAIN}
-and a {@link android.content.Intent#CATEGORY_LAUNCHER}
-filter. Imagine, for example, what could happen if the filter is missing: An intent launches a
-{@code "singleTask"} activity, initiating a new task, and the user spends some time working in
-that task.  The user then presses the <em>Home</em> button. The task is now sent to the background
-and is
-not visible. Now the user has no way to return to the task, because it is not represented in the
-application launcher.
-</p>
-
-<p>For those cases where you don't want the user to be able to return to an activity, set the
-  <code><a
-href="{@docRoot}guide/topics/manifest/activity-element.html">&lt;activity&gt;</a></code> element's
-<a href="{@docRoot}guide/topics/manifest/activity-element.html#finish">{@code
-finishOnTaskLaunch}</a> to {@code "true"} (see <a
-href="#Clearing">Clearing the stack</a>).</p>
-
-
-
-<!--
-<h2>Beginner's Path</h2>
-
-<p>For more information about how to use intents to
-activate other application components and publish the intents to which your components
-respond, continue with the <b><a
-href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent
-Filters</a></b> document.</p>
--->
diff --git a/docs/html/guide/topics/graphics/2d-graphics.jd b/docs/html/guide/topics/graphics/2d-graphics.jd
index 5cf1a59..d842cb9 100644
--- a/docs/html/guide/topics/graphics/2d-graphics.jd
+++ b/docs/html/guide/topics/graphics/2d-graphics.jd
@@ -476,7 +476,7 @@
 do.
 </p>
 
-<p>The <a href="{@docRoot}guide/developing/tools/draw9patch.html">Draw 9-patch</a> tool offers
+<p>The <a href="{@docRoot}tools/help/draw9patch.html">Draw 9-patch</a> tool offers
    an extremely handy way to create your NinePatch images, using a WYSIWYG graphics editor. It
 even raises warnings if the region you've defined for the stretchable area is at risk of
 producing drawing artifacts as a result of the pixel replication.
diff --git a/docs/html/guide/topics/graphics/animation.jd b/docs/html/guide/topics/graphics/animation.jd
deleted file mode 100644
index 561369d..0000000
--- a/docs/html/guide/topics/graphics/animation.jd
+++ /dev/null
@@ -1,64 +0,0 @@
-page.title=Animation
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-
-      <h2>See also</h2>
-      <ol>
-        <li><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property
-Animation</a></li>
-        <li><a href="{@docRoot}guide/topics/graphics/view-animation.html">View Animation</a></li>
-        <li><a href="{@docRoot}guide/topics/graphics/drawable-animation.html">Drawable Animation</a></li>
-      <ol>
-    </div>
-  </div>
-
-  <p>The Android framework provides two animation systems: property animation
-  (introduced in Android 3.0) and view animation. Both animation systems are viable options,
-  but the property animation system, in general, is the preferred method to use, because it
-  is more flexible and offers more features. In addition to these two systems, you can utilize Drawable
-animation, which allows you to load drawable resources and display them one frame after
-another.</p>
-
-  <p>The view animation system provides the capability to only animate {@link android.view.View}
-objects, so if you wanted to animate non-{@link android.view.View} objects, you have to implement
-your own code to do so. The view animation system is also constrained in the fact that it only
-exposes a few aspects of a {@link android.view.View} object to animate, such as the scaling and
-rotation of a View but not the background color, for instance.</p>
-
-  <p>Another disadvantage of the view animation system is that it only modified where the
-  View was drawn, and not the actual View itself. For instance, if you animated a button to move
-  across the screen, the button draws correctly, but the actual location where you can click the
-  button does not change, so you have to implement your own logic to handle this.</p>
-
-  <p>With the property animation system, these constraints are completely removed, and you can animate
-  any property of any object (Views and non-Views) and the object itself is actually modified.
-  The property animation system is also more robust in the way it carries out animation. At
-  a high level, you assign animators to the properties that you want to animate, such as color,
-  position, or size and can define aspects of the animation such as interpolation and
-  synchronization of multiple animators.</p>
-
-  <p>The view animation system, however, takes less time to setup and requires less code to write.
-  If view animation accomplishes everything that you need to do, or if your existing code already
-  works the way you want, there is no need to use the property animation system. It also might
-  make sense to use both animation systems for different situations if the use case arises.</p>
-
-<dl>
-<dt><strong><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property
-Animation</a></strong></dt>
-<dd>Introduced in Android 3.0 (API level 11), the property animation system lets you
-animate properties of any object, including ones that are not rendered to the screen. The system is
-extensible and lets you animate properties of custom types as well.</dd>
-
-<dt><strong><a href="{@docRoot}guide/topics/graphics/view-animation.html">View
-Animation</a></strong></dt>
-<dd>View Animation is the older system and can only be used for Views. It is relatively easy to
-setup and offers enough capabilities to meet many application's needs.</dd>
-</dl>
-
-<dt><strong><a href="{@docRoot}guide/topics/graphics/drawable-animation.html">Drawable
-Animation</a></strong></dt>
-<dd>Drawable animation involves displaying {@link android.graphics.drawable.Drawable} resources one
-after another, like a roll of film. This method of animation is useful if you want to animate
-things that are easier to represent with Drawable resources, such as a progression of bitmaps.</dd>
diff --git a/docs/html/guide/topics/graphics/index.jd b/docs/html/guide/topics/graphics/index.jd
index ab623c2..17f6309 100644
--- a/docs/html/guide/topics/graphics/index.jd
+++ b/docs/html/guide/topics/graphics/index.jd
@@ -1,51 +1,49 @@
-page.title=Graphics
+page.title=Animation and Graphics
+page.landing=true
+page.landing.intro=Make your apps look and perform their best using Android's powerful graphics features such as OpenGL, hardware acceleration, and built-in UI animations.
+page.landing.image=
+
 @jd:body
 
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>Topics</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/graphics/2d-graphics.html">Canvas and Drawables</a></li>
-    <li><a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware Acceleration</a></li>
-    <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
-  </ol>
+<div class="landing-docs">
+
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+      <a
+href="http://android-developers.blogspot.com/2011/11/android-40-graphics-and-animations.html">
+        <h4>Android 4.0 Graphics and Animations</h4>
+        <p>Earlier this year, Android 3.0 launched with a new 2D rendering pipeline designed to
+support hardware acceleration on tablets. With this new pipeline, all drawing operations performed
+by the UI toolkit are carried out using the GPU. You’ll be happy to hear that Android 4.0, Ice Cream
+Sandwich, brings an improved version of the hardware-accelerated 2D rendering pipeline.</p>
+      </a>
+  
+      <a
+href="http://android-developers.blogspot.com/2011/05/introducing-viewpropertyanimator.html">
+        <h4>Introducing ViewPropertyAnimator</h4>
+        <p>This new animation system makes it easy to animate any kind of property on any object,
+including the new properties added to the View class in 3.0. In the 3.1 release, we added a small
+utility class that makes animating these properties even easier.</p>
+      </a>
+      
+      <a
+href="http://android-developers.blogspot.com/2011/03/android-30-hardware-acceleration.html">
+        <h4>Android 3.0 Hardware Acceleration</h4>
+        <p>Hardware accelerated graphics is nothing new to the Android platform, it has always been
+used for windows composition or OpenGL games for instance, but with this new rendering pipeline
+applications can benefit from an extra boost in performance.</p>
+      </a>
   </div>
-</div>
 
-<p>When writing an application, it's important to consider exactly what your graphical demands will be.
-Varying graphical tasks are best accomplished with varying techniques. For example, graphics and animations
-for a rather static application should be implemented much differently than graphics and animations
-for an interactive game. Here, we'll discuss a few of the options you have for drawing graphics
-on Android and which tasks they're best suited for.
-</p>
+  <div class="col-6">
+    <h3>Training</h3>
+    <a href="{@docRoot}training/displaying-bitmaps/index.html">
+      <h4>Displaying Bitmaps Efficiently</h4>
+      <p>This class covers some common techniques for processing and loading Bitmap objects in a way
+that keeps your user interface (UI) components responsive and avoids exceeding your application
+memory limit.</p>
+    </a>
+    
 
-<dl>
-<dt><strong><a href="{@docRoot}guide/topics/graphics/2d-graphics.html">Canvas and
-Drawables</a></strong></dt>
-<dd>Android provides a set of {@link android.view.View} widgets that provide general functionality
-for a wide array of user interfaces. You can also extend these widgets to modify the way they
-look or behave. In addition, you can do your own custom 2D rendering using the various drawing
-methods contained in the {@link android.graphics.Canvas} class or create {@link
-android.graphics.drawable.Drawable} objects for things such as textured buttons or frame-by-frame
-animations.</dd>
-
-<dt><strong><a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware
-Acceleration</a></strong></dt>
-<dd>Beginning in Android 3.0, you can hardware accelerate the majority of
-the drawing done by the Canvas APIs to further increase their performance.</dd>
-
-<dt><strong><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></strong></dt>
-<dd>Android supports OpenGL ES 1.0 and 2.0, with Android framework APIs as well as natively
-with the Native Development Kit (NDK). Using the framework APIs is desireable when you want to add a
-few graphical enhancements to your application that are not supported with the Canvas APIs, or if
-you desire platform independence and don't demand high performance. There is a performance hit in
-using the framework APIs compared to the NDK, so for many graphic intensive applications such as
-games, using the NDK is beneficial (It is important to note though that you can still get adequate
-performance using the framework APIs. For example, the Google Body app is developed entirely
-using the framework APIs). OpenGL with the NDK is also useful if you have a lot of native
-code that you want to port over to Android. For more information about using the NDK, read the
-docs in the <code>docs/</code> directory of the <a href="{@docRoot}sdk/ndk/index.html">NDK
-download.</a></dd>
-</dl>
-
-
+  </div>
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/graphics/opengl.jd b/docs/html/guide/topics/graphics/opengl.jd
index a786d42..a9fedb7 100644
--- a/docs/html/guide/topics/graphics/opengl.jd
+++ b/docs/html/guide/topics/graphics/opengl.jd
@@ -20,6 +20,7 @@
           <li><a href="#proj-es1">Projection and camera in ES 2.0</a></li>
         </ol>
       </li>
+      <li><a href="#faces-winding">Shape Faces and Winding</li>
       <li><a href="#compatibility">OpenGL Versions and Device Compatibility</a>
         <ol>
           <li><a href="#textures">Texture compression support</a></li>
@@ -33,11 +34,6 @@
       <li>{@link android.opengl.GLSurfaceView}</li>
       <li>{@link android.opengl.GLSurfaceView.Renderer}</li>
     </ol>
-    <h2>Related tutorials</h2>
-    <ol>
-      <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL ES 1.0</a></li>
-      <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL ES 2.0</a></li>
-    </ol>
     <h2>Related samples</h2>
     <ol>
       <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html">GLSurfaceViewActivity</a></li>
@@ -48,8 +44,8 @@
     </ol>
     <h2>See also</h2>
     <ol>
-      <li><a href="{@docRoot}resources/articles/glsurfaceview.html">Introducing
-GLSurfaceView</a></li>
+      <li><a href="{@docRoot}training/graphics/opengl/index.html">
+          Displaying Graphics with OpenGL ES</a></li>
       <li><a href="http://www.khronos.org/opengles/">OpenGL ES</a></li>
       <li><a href="http://www.khronos.org/opengles/1_X/">OpenGL ES 1.x Specification</a></li>
       <li><a href="http://www.khronos.org/opengles/2_X/">OpenGL ES 2.x specification</a></li>
@@ -73,7 +69,7 @@
 
 <p>Android supports OpenGL both through its framework API and the Native Development
 Kit (NDK). This topic focuses on the Android framework interfaces. For more information about the
-NDK, see the <a href="{@docRoot}sdk/ndk/index.html">Android NDK</a>.
+NDK, see the <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>.
 
 <p>There are two foundational classes in the Android framework that let you create and manipulate
 graphics with the OpenGL ES API: {@link android.opengl.GLSurfaceView} and {@link
@@ -389,6 +385,43 @@
 href="{@docRoot}resources/tutorials/opengl/opengl-es20.html#projection-and-views">OpenGL ES 2.0
 tutorial</a>.</p>
 
+<h2 id="faces-winding">Shape Faces and Winding</h2>
+
+<p>In OpenGL, the face of a shape is a surface defined by three or more points in three-dimensional
+space. A set of three or more three-dimensional points (called vertices in OpenGL) have a front face
+and a back face. How do you know which face is front and which is the back? Good question. The
+answer has to do with winding, or, the direction in which you define the points of a shape.</p>
+
+<img src="{@docRoot}images/opengl/ccw-winding.png">
+<p class="img-caption">
+  <strong>Figure 1.</strong> Illustration of a coordinate list which translates into a
+counterclockwise drawing order.</p>
+
+<p>In this example, the points of the triangle are defined in an order such that they are drawn in a
+counterclockwise direction. The order in which these coordinates are drawn defines the winding
+direction for the shape. By default, in OpenGL, the face which is drawn counterclockwise is the
+front face. The triangle shown in Figure 1 is defined so that you are looking at the front face of
+the shape (as interpreted by OpenGL) and the other side is the back face.</p>
+
+<p>Why is it important to know which face of a shape is the front face? The answer has to do with a
+commonly used feature of OpenGL, called face culling. Face culling is an option for the OpenGL
+environment which allows the rendering pipeline to ignore (not calculate or draw) the back face of a
+shape, saving time, memory and processing cycles:</p>
+
+<pre>
+// enable face culling feature
+gl.glEnable(GL10.GL_CULL_FACE);
+// specify which faces to not draw
+gl.glCullFace(GL10.GL_BACK);
+</pre>
+
+<p>If you try to use the face culling feature without knowing which sides of your shapes are the
+front and back, your OpenGL graphics are going to look a bit thin, or possibly not show up at all.
+So, always define the coordinates of your OpenGL shapes in a counterclockwise drawing order.</p>
+
+<p class="note"><strong>Note:</strong> It is possible to set an OpenGL environment to treat the
+clockwise face as the front face, but doing so requires more code and is likely to confuse
+experienced OpenGL developers when you ask them for help. So don’t do that.</p>
 
 <h2 id="compatibility">OpenGL Versions and Device Compatibility</h2>
 
@@ -410,7 +443,8 @@
 href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/CompressedTextureActivity.html"
 >CompressedTextureActivity</a> code sample.</p>
 
-<p>To check if the ETC1 format is supported on a device, call the {@link
+<p>The ETC format is supported by most Android devices, but it not guarranteed to be available. To
+check if the ETC1 format is supported on a device, call the {@link
 android.opengl.ETC1Util#isETC1Supported() ETC1Util.isETC1Supported()} method.</p>
 
 <p class="note"><b>Note:</b> The ETC1 texture compression format does not support textures with an
diff --git a/docs/html/guide/topics/graphics/overview.jd b/docs/html/guide/topics/graphics/overview.jd
new file mode 100644
index 0000000..a53cd3f
--- /dev/null
+++ b/docs/html/guide/topics/graphics/overview.jd
@@ -0,0 +1,73 @@
+page.title=Animation and Graphics Overview
+@jd:body
+
+  <p>Android provides a variety of powerful APIs for applying animation to UI elements and drawing custom
+  2D and 3D graphics. The sections below provide an overview of the APIs and system capabilities available
+  and help you decide with approach is best for your needs.</p>
+
+  <h3 id="animation">Animation</h3>
+  
+  <p>The Android framework provides two animation systems: property animation
+  (introduced in Android 3.0) and view animation. Both animation systems are viable options,
+  but the property animation system, in general, is the preferred method to use, because it
+  is more flexible and offers more features. In addition to these two systems, you can utilize Drawable
+  animation, which allows you to load drawable resources and display them one frame after
+  another.</p>
+
+<dl>
+<dt><strong><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property
+Animation</a></strong></dt>
+<dd>Introduced in Android 3.0 (API level 11), the property animation system lets you
+animate properties of any object, including ones that are not rendered to the screen. The system is
+extensible and lets you animate properties of custom types as well.</dd>
+
+<dt><strong><a href="{@docRoot}guide/topics/graphics/view-animation.html">View
+Animation</a></strong></dt>
+<dd>View Animation is the older system and can only be used for Views. It is relatively easy to
+setup and offers enough capabilities to meet many application's needs.</dd>
+</dl>
+
+<dt><strong><a href="{@docRoot}guide/topics/graphics/drawable-animation.html">Drawable
+Animation</a></strong></dt>
+<dd>Drawable animation involves displaying {@link android.graphics.drawable.Drawable} resources one
+after another, like a roll of film. This method of animation is useful if you want to animate
+things that are easier to represent with Drawable resources, such as a progression of bitmaps.</dd>
+
+<h3 id="graphics">2D and 3D Graphics</h3>
+
+<p>When writing an application, it's important to consider exactly what your graphical demands will be.
+Varying graphical tasks are best accomplished with varying techniques. For example, graphics and animations
+for a rather static application should be implemented much differently than graphics and animations
+for an interactive game. Here, we'll discuss a few of the options you have for drawing graphics
+on Android and which tasks they're best suited for.
+</p>
+
+<dl>
+<dt><strong><a href="{@docRoot}guide/topics/graphics/2d-graphics.html">Canvas and
+Drawables</a></strong></dt>
+<dd>Android provides a set of {@link android.view.View} widgets that provide general functionality
+for a wide array of user interfaces. You can also extend these widgets to modify the way they
+look or behave. In addition, you can do your own custom 2D rendering using the various drawing
+methods contained in the {@link android.graphics.Canvas} class or create {@link
+android.graphics.drawable.Drawable} objects for things such as textured buttons or frame-by-frame
+animations.</dd>
+
+<dt><strong><a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware
+Acceleration</a></strong></dt>
+<dd>Beginning in Android 3.0, you can hardware accelerate the majority of
+the drawing done by the Canvas APIs to further increase their performance.</dd>
+
+<dt><strong><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></strong></dt>
+<dd>Android supports OpenGL ES 1.0 and 2.0, with Android framework APIs as well as natively
+with the Native Development Kit (NDK). Using the framework APIs is desireable when you want to add a
+few graphical enhancements to your application that are not supported with the Canvas APIs, or if
+you desire platform independence and don't demand high performance. There is a performance hit in
+using the framework APIs compared to the NDK, so for many graphic intensive applications such as
+games, using the NDK is beneficial (It is important to note though that you can still get adequate
+performance using the framework APIs. For example, the Google Body app is developed entirely
+using the framework APIs). OpenGL with the NDK is also useful if you have a lot of native
+code that you want to port over to Android. For more information about using the NDK, read the
+docs in the <code>docs/</code> directory of the <a href="{@docRoot}tools/sdk/ndk/index.html">NDK
+download.</a></dd>
+</dl>
+
diff --git a/docs/html/guide/topics/graphics/prop-animation.jd b/docs/html/guide/topics/graphics/prop-animation.jd
index be24788..b733624 100644
--- a/docs/html/guide/topics/graphics/prop-animation.jd
+++ b/docs/html/guide/topics/graphics/prop-animation.jd
@@ -166,6 +166,31 @@
   "{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
   Demos</a> sample project provides many examples on how to use the property
   animation system.</p>
+  
+  <h2 id="property-vs-view">How Property Animation Differs from View Animation</h2>
+  
+  <p>The view animation system provides the capability to only animate {@link android.view.View}
+  objects, so if you wanted to animate non-{@link android.view.View} objects, you have to implement
+  your own code to do so. The view animation system is also constrained in the fact that it only
+  exposes a few aspects of a {@link android.view.View} object to animate, such as the scaling and
+  rotation of a View but not the background color, for instance.</p>
+
+  <p>Another disadvantage of the view animation system is that it only modified where the
+  View was drawn, and not the actual View itself. For instance, if you animated a button to move
+  across the screen, the button draws correctly, but the actual location where you can click the
+  button does not change, so you have to implement your own logic to handle this.</p>
+
+  <p>With the property animation system, these constraints are completely removed, and you can animate
+  any property of any object (Views and non-Views) and the object itself is actually modified.
+  The property animation system is also more robust in the way it carries out animation. At
+  a high level, you assign animators to the properties that you want to animate, such as color,
+  position, or size and can define aspects of the animation such as interpolation and
+  synchronization of multiple animators.</p>
+
+  <p>The view animation system, however, takes less time to setup and requires less code to write.
+  If view animation accomplishes everything that you need to do, or if your existing code already
+  works the way you want, there is no need to use the property animation system. It also might
+  make sense to use both animation systems for different situations if the use case arises.</p>
 
   <h2>API Overview</h2>
 
diff --git a/docs/html/guide/topics/renderscript/compute.jd b/docs/html/guide/topics/graphics/renderscript/compute.jd
similarity index 100%
rename from docs/html/guide/topics/renderscript/compute.jd
rename to docs/html/guide/topics/graphics/renderscript/compute.jd
diff --git a/docs/html/guide/topics/graphics/renderscript/graphics.jd b/docs/html/guide/topics/graphics/renderscript/graphics.jd
new file mode 100644
index 0000000..58676ea
--- /dev/null
+++ b/docs/html/guide/topics/graphics/renderscript/graphics.jd
@@ -0,0 +1,994 @@
+page.title=Graphics
+parent.title=Renderscript
+parent.link=index.html
+
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li>
+          <a href="#creating-graphics-rs">Creating a Graphics Renderscript</a>
+          <ol>
+            <li><a href="#creating-native">Creating the Renderscript file</a></li>
+            <li><a href="#creating-entry">Creating the Renderscript entry point class</a></li>
+            <li><a href="#creating-view">Creating the view class</a></li>
+            <li><a href="#creating-activity">Creating the activity class</a></li>
+          </ol>
+        </li>
+        <li>
+          <a href="#drawing">Drawing</a>
+          <ol>
+            <li><a href="#drawing-rsg">Simple drawing</a></li>
+            <li><a href="#drawing-mesh">Drawing with a mesh</a></li>
+          </ol>
+        </li>
+        <li>
+          <a href="#shaders">Shaders</a>
+          <ol>
+            <li><a href="#shader-bindings">Shader bindings</a></li>
+            <li><a href="#shader-sampler">Defining a sampler</a></li>
+          </ol>
+        </li>
+        <li>
+          <a href="#fbo">Rendering to a Framebuffer Object</a>
+        </li>
+      </ol>
+
+      <h2>Related Samples</h2>
+
+      <ol>
+        <li><a href="{@docRoot}resources/samples/RenderScript/Balls/index.html">Balls</a></li>
+
+        <li><a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a></li>
+
+        <li><a href="{@docRoot}resources/samples/RenderScript/FountainFbo/index.html">FountainFbo</a></li>        
+
+        <li><a href="{@docRoot}resources/samples/RenderScript/HelloWorld/index.html">Hello
+World</a></li>
+
+        <li><a
+href="{@docRoot}resources/samples/RenderScript/MiscSamples/index.html">Misc Samples</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Renderscript provides a number of graphics APIs for rendering, both at the Android
+  framework level as well as at the Renderscript runtime level. For instance, the Android framework APIs let you
+  create meshes and define shaders to customize the graphical rendering pipeline. The native
+  Renderscript graphics APIs let you draw the actual meshes to render your scene. You need to
+  be familiar with both APIs to appropriately render graphics on an Android-powered device.</p>
+
+  <h2 id="creating-graphics-rs">Creating a Graphics Renderscript</h2>
+
+  <p>Renderscript applications require various layers of code, so it is useful to create the following
+  files to help keep your application organized:</p>
+
+  <dl>
+    <dt>The Renderscript <code>.rs</code> file</dt>
+
+    <dd>This file contains the logic to do the graphics rendering.</dd>
+
+    <dt>The Renderscript entry point <code>.java</code> class</dt>
+
+    <dd>This class allows the view class to interact with the code defined in the <code>.rs</code>
+    file. This class contains a Renderscript object (instance of
+    <code>ScriptC_<em>renderscript_file</em></code>), which allows your Android framework code to
+    call the Renderscript code. In general, this class does much of the setup for Renderscript
+    such as shader and mesh building and memory allocation and binding. The SDK samples follow the
+    convention of naming this file ActivityRS.java,
+    where Activity is the name of your main activity class.</dd>
+
+    <dt>The view <code>.java</code> class</dt>
+
+    <dd>This class extends {@link android.renderscript.RSSurfaceView} or {@link
+    android.renderscript.RSTextureView} to provide a surface to render on. A {@link
+    android.renderscript.RSSurfaceView} consumes a whole window, but a {@link
+    android.renderscript.RSTextureView} allows you to draw Renderscript graphics inside of a
+    view and add it to a {@link android.view.ViewGroup} alongside
+    other views. In this class, you create a {@link android.renderscript.RenderScriptGL} context object
+    with a call to {@link android.renderscript.RSSurfaceView#createRenderScriptGL
+    RSSurfaceView.createRenderscriptGL()} or {@link android.renderscript.RSTextureView#createRenderScriptGL
+    RSTextureView.createRenderscriptGL()}. The {@link android.renderscript.RenderScriptGL} context object
+    contains information about the current rendering state of Renderscript such as the vertex and
+    fragment shaders. You pass this context object to the Renderscript entry point class, so that
+    class can modify the rendering context if needed and bind the Renderscript code to the context. Once bound,
+    the view class can use the Renderscript code to display graphics.
+    The view class should also implement callbacks for events inherited from {@link
+    android.view.View}, such as {@link android.view.View#onTouchEvent onTouchEvent()} and {@link
+    android.view.View#onKeyDown onKeyDown()} if you want to detect these types of user interactions.
+    The SDK samples follow the convention of naming this file ActivityView.java,
+    where Activity is the name of your main activity class</dd>
+
+    <dt>The activity <code>.java</code> class</dt>
+
+    <dd>This class is the main activity class and sets your {@link android.renderscript.RSSurfaceView} as the main content
+    view for this activity or uses the {@link android.renderscript.RSTextureView} alongside other views.</dd>
+  </dl>
+  <p>Figure 1 describes how these classes interact with one another in a graphics Renderscript:</p>
+  
+  <img src="{@docRoot}images/rs_graphics.png">
+  <p class="img-caption"><strong>Figure 1.</strong> Graphics Renderscript overview</p>
+
+
+  <p>The following sections describe how to create an application that uses a graphics Renderscript by using
+  the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Renderscript Fountain
+  sample</a> that is provided in the SDK as a guide (some code has been modified from its original
+  form for simplicity).</p>
+
+  <h3 id="creating-native">Creating the Renderscript file</h3>
+
+  <p>Your Renderscript code resides in <code>.rs</code> and <code>.rsh</code> (headers) files in the
+  <code>&lt;project_root&gt;/src/</code> directory. This code contains the logic to render your
+  graphics and declares all other necessary items such as variables, structs,
+  and pointers. Every graphics <code>.rs</code> file generally contains the following items:</p>
+
+  <ul>
+    <li>A pragma declaration (<code>#pragma rs java_package_name(<em>package.name</em>)</code>) that declares
+    the package name of the <code>.java</code> reflection of this Renderscript.</li>
+
+    <li>A pragma declaration (<code>#pragma version(1)</code>) that declares the version of Renderscript that
+    you are using (1 is the only value for now).</li>
+
+    <li>A <code>#include "rs_graphics.rsh"</code> declaration.</li>
+
+    <li>A <code>root()</code> function. This is the main worker function for your Renderscript and
+    calls Renderscript graphics functions to render scenes. This function is called every time a
+    frame refresh occurs, which is specified as its return value. A <code>0</code> (zero) specified for
+    the return value says to only render the frame when a property of the scene that you are
+    rendering changes. A non-zero positive integer specifies the refresh rate of the frame in
+    milliseconds.
+
+      <p class="note"><strong>Note:</strong> The Renderscript runtime makes its best effort to
+      refresh the frame at the specified rate. For example, if you are creating a live wallpaper
+      and set the return value to 20, the Renderscript runtime renders the wallpaper at 50fps if it has just
+      enough or more resources to do so. It renders as fast as it can if not enough resources
+      are available.</p>
+
+      <p>For more information on using the Renderscript graphics functions, see the <a href=
+      "#drawing">Drawing</a> section.</p>
+    </li>
+
+    <li>An <code>init()</code> function. This allows you to do initialization of your
+    Renderscript before the <code>root()</code> function runs, such as assigning values to variables. This
+    function runs once and is called automatically when the Renderscript starts, before anything
+    else in your Renderscript. Creating this function is optional.</li>
+
+    <li>Any variables, pointers, and structures that you wish to use in your Renderscript code (can
+    be declared in <code>.rsh</code> files if desired)</li>
+  </ul>
+
+  <p>The following code shows how the <code>fountain.rs</code> file is implemented:</p>
+  <pre>
+#pragma version(1)
+
+// Tell which java package name the reflected files should belong to
+#pragma rs java_package_name(com.example.android.rs.fountain)
+
+//declare shader binding
+#pragma stateFragment(parent)
+
+// header with graphics APIs, must include explicitly
+#include "rs_graphics.rsh"
+
+static int newPart = 0;
+
+// the mesh to render
+rs_mesh partMesh;
+
+// the point representing where a particle is rendered
+typedef struct __attribute__((packed, aligned(4))) Point {
+    float2 delta;
+    float2 position;
+    uchar4 color;
+} Point_t;
+Point_t *point;
+
+// main worker function that renders particles onto the screen
+int root() {
+    float dt = min(rsGetDt(), 0.1f);
+    rsgClearColor(0.f, 0.f, 0.f, 1.f);
+    const float height = rsgGetHeight();
+    const int size = rsAllocationGetDimX(rsGetAllocation(point));
+    float dy2 = dt * (10.f);
+    Point_t * p = point;
+    for (int ct=0; ct &lt; size; ct++) {
+        p-&gt;delta.y += dy2;
+        p-&gt;position += p-&gt;delta;
+        if ((p-&gt;position.y &gt; height) &amp;&amp; (p-&gt;delta.y &gt; 0)) {
+            p-&gt;delta.y *= -0.3f;
+        }
+        p++;
+    }
+
+    rsgDrawMesh(partMesh);
+    return 1;
+}
+
+// adds particles to the screen to render
+static float4 partColor[10];
+void addParticles(int rate, float x, float y, int index, bool newColor)
+{
+    if (newColor) {
+        partColor[index].x = rsRand(0.5f, 1.0f);
+        partColor[index].y = rsRand(1.0f);
+        partColor[index].z = rsRand(1.0f);
+    }
+    float rMax = ((float)rate) * 0.02f;
+    int size = rsAllocationGetDimX(rsGetAllocation(point));
+    uchar4 c = rsPackColorTo8888(partColor[index]);
+
+    Point_t * np = &amp;point[newPart];
+    float2 p = {x, y};
+    while (rate--) {
+        float angle = rsRand(3.14f * 2.f);
+        float len = rsRand(rMax);
+        np-&gt;delta.x = len * sin(angle);
+        np-&gt;delta.y = len * cos(angle);
+        np-&gt;position = p;
+        np-&gt;color = c;
+        newPart++;
+        np++;
+        if (newPart &gt;= size) {
+            newPart = 0;
+            np = &amp;point[newPart];
+        }
+    }
+}
+</pre>
+
+  <h3 id="creating-entry">Creating the Renderscript entry point class</h3>
+
+  <p>When you create a Renderscript (<code>.rs</code>) file, it is helpful to create a
+  corresponding Android framework class that is an entry point into the <code>.rs</code> file.
+  The most important thing this class does is receive a {@link android.renderscript.RenderScriptGL} rendering context
+  object from the <a href="#creating-view">view class</a> and binds the actual Renderscript
+  code to the rendering context. This notifies your view class of the code that it needs
+  to render graphics.
+  </p>
+
+  <p>In addition, this class should contain all of the things needed to set up Renderscript.
+  Some important things that you need to do in this class are:</p>
+
+  <ul>
+    <li>Create a Renderscript object 
+  <code>ScriptC_<em>rs_filename</em></code>. The Renderscript object is attached to the Renderscript bytecode, which is platform-independent and
+  gets compiled on the device when the Renderscript application runs. The bytecode is referenced
+  as a raw resource and is passed into the constructor for the Renderscript object.
+  For example, this is how the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a>
+  sample creates the Renderscript object:
+  <pre>
+  RenderScriptGL rs;  //obtained from the view class
+  Resources res;      //obtained from the view class
+  ...
+  ScriptC_fountain mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
+  </pre>
+  </li>
+  <li>Allocate any necessary memory and bind it to your Renderscript code via the Renderscript object.</li>
+  <li>Build any necessary meshes and bind them to the Renderscript code via the Renderscript object.</li>
+  <li>Create any necessary programs and bind them to the Renderscript code via the Renderscript object.</li>
+  </ul>
+
+  <p>The following code shows how the <a href=
+  "{@docRoot}resources/samples/RenderScript/Fountain/src/com/example/android/rs/fountain/FountainRS.html">
+  FountainRS</a> class is implemented:</p>
+  <pre>
+package com.example.android.rs.fountain;
+
+import android.content.res.Resources;
+import android.renderscript.*;
+import android.util.Log;
+
+public class FountainRS {
+    public static final int PART_COUNT = 50000;
+
+    public FountainRS() {
+    }
+
+    /**
+     * This provides us with the Renderscript context and resources
+     * that allow us to create the Renderscript object
+     */
+    private Resources mRes;
+    private RenderScriptGL mRS;
+
+    // Renderscript object
+    private ScriptC_fountain mScript;
+
+    // Called by the view class to initialize the Renderscript context and renderer
+    public void init(RenderScriptGL rs, Resources res) {
+        mRS = rs;
+        mRes = res;
+
+        /**
+         * Create a shader and bind to the Renderscript context
+         */
+        ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
+        pfb.setVaryingColor(true);
+        rs.bindProgramFragment(pfb.create());
+
+        /**
+         * Allocate memory for the particles to render and create the mesh to draw
+         */
+        ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);
+        Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
+        smb.addVertexAllocation(points.getAllocation());
+        smb.addIndexSetType(Mesh.Primitive.POINT);
+        Mesh sm = smb.create();
+
+       /**
+        * Create and bind the Renderscript object to the Renderscript context
+        */
+        mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
+        mScript.set_partMesh(sm);
+        mScript.bind_point(points);
+        mRS.bindRootScript(mScript);
+    }
+
+    boolean holdingColor[] = new boolean[10];
+
+    /**
+     * Calls Renderscript functions (invoke_addParticles)
+     * via the Renderscript object to add particles to render
+     * based on where a user touches the screen.
+     */
+    public void newTouchPosition(float x, float y, float pressure, int id) {
+        if (id &gt;= holdingColor.length) {
+            return;
+        }
+        int rate = (int)(pressure * pressure * 500.f);
+        if (rate &gt; 500) {
+            rate = 500;
+        }
+        if (rate &gt; 0) {
+            mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
+            holdingColor[id] = true;
+        } else {
+            holdingColor[id] = false;
+        }
+
+    }
+}
+</pre>
+
+
+  <h3 id="creating-view">Creating the view class</h3>
+
+
+  <p>To display graphics, you need a view to render on. Create a class that extends {@link
+  android.renderscript.RSSurfaceView} or {@link android.renderscript.RSTextureView}. This class
+  allows you to create a {@link android.renderscript.RenderScriptGL} context object by calling and
+  pass it to the Rendscript entry point class to bind the two. Once bound, the content is aware
+  of the code that it needs to use to render graphics with. If your Renderscript code
+  depends on any type of information that the view is aware of, such as touches from the user,
+  you can also use this class to relay that information to the Renderscript entry point class.
+  The following code shows how the <code>FountainView</code> class is implemented:</p>
+  <pre>
+package com.example.android.rs.fountain;
+
+import android.renderscript.RSTextureView;
+import android.renderscript.RenderScriptGL;
+import android.content.Context;
+import android.view.MotionEvent;
+
+public class FountainView extends RSTextureView {
+
+    public FountainView(Context context) {
+        super(context);
+    }
+    // Renderscript context
+    private RenderScriptGL mRS;
+    // Renderscript entry point object that calls Renderscript code
+    private FountainRS mRender;
+
+    /**
+     * Create Renderscript context and initialize Renderscript entry point
+     */
+    &#064;Override
+    protected void onAttachedToWindow() {
+        super.onAttachedToWindow();
+        android.util.Log.e("rs", "onAttachedToWindow");
+        if (mRS == null) {
+            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
+            mRS = createRenderScriptGL(sc);
+            mRender = new FountainRS();
+            mRender.init(mRS, getResources());
+        }
+    }
+
+    &#064;Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        android.util.Log.e("rs", "onDetachedFromWindow");
+        if (mRS != null) {
+            mRS = null;
+            destroyRenderScriptGL();
+        }
+    }
+
+
+    /**
+     * Use callbacks to relay data to Renderscript entry point class
+     */
+    &#064;Override
+    public boolean onTouchEvent(MotionEvent ev)
+    {
+        int act = ev.getActionMasked();
+        if (act == ev.ACTION_UP) {
+            mRender.newTouchPosition(0, 0, 0, ev.getPointerId(0));
+            return false;
+        } else if (act == MotionEvent.ACTION_POINTER_UP) {
+            // only one pointer going up, we can get the index like this
+            int pointerIndex = ev.getActionIndex();
+            int pointerId = ev.getPointerId(pointerIndex);
+            mRender.newTouchPosition(0, 0, 0, pointerId);
+        }
+        int count = ev.getHistorySize();
+        int pcount = ev.getPointerCount();
+
+        for (int p=0; p &lt; pcount; p++) {
+            int id = ev.getPointerId(p);
+            mRender.newTouchPosition(ev.getX(p),
+                                     ev.getY(p),
+                                     ev.getPressure(p),
+                                     id);
+
+            for (int i=0; i &lt; count; i++) {
+                mRender.newTouchPosition(ev.getHistoricalX(p, i),
+                                         ev.getHistoricalY(p, i),
+                                         ev.getHistoricalPressure(p, i),
+                                         id);
+            }
+        }
+        return true;
+    }
+}
+</pre>
+
+  <h3 id="creating-activity">Creating the activity class</h3>
+
+  <p>Applications that use Renderscript still behave like normal Android applications, so you
+   need an activity class that handles activity lifecycle callback events appropriately. The activity class
+   also sets your {@link android.renderscript.RSSurfaceView} view class to be the main content view of the
+   activity or uses your {@link android.renderscript.RSTextureView}
+  in a {@link android.view.ViewGroup} alongside other views.</p>
+
+  <p>The following code shows how the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a>
+  sample declares its activity class:</p>
+  <pre>
+package com.example.android.rs.fountain;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.util.Log;
+
+public class Fountain extends Activity {
+
+    private static final String LOG_TAG = "libRS_jni";
+    private static final boolean DEBUG  = false;
+    private static final boolean LOG_ENABLED = false;
+
+    private FountainView mView;
+
+    &#064;Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        // Create our Preview view and set it as 
+        // the content of our activity
+        mView = new FountainView(this);
+        setContentView(mView);
+    }
+
+    &#064;Override
+    protected void onResume() {
+        Log.e("rs", "onResume");
+
+        // Ideally a game should implement onResume() and onPause()
+        // to take appropriate action when the activity looses focus
+        super.onResume();
+        mView.resume();
+    }
+
+    &#064;Override
+    protected void onPause() {
+        Log.e("rs", "onPause");
+
+        // Ideally a game should implement onResume() and onPause()
+        // to take appropriate action when the activity looses focus
+        super.onPause();
+        mView.pause();
+
+    }
+
+    static void log(String message) {
+        if (LOG_ENABLED) {
+            Log.v(LOG_TAG, message);
+        }
+    }
+}
+</pre>
+
+<p>Now that you have an idea of what is involved in a Renderscript graphics application, you can
+start building your own. It might be easiest to begin with one of the
+<a href="{@docRoot}resources/samples/RenderScript/index.html">Renderscript samples</a> as a starting
+point if this is your first time using Renderscript.</p>
+
+  <h2 id="drawing">Drawing</h2>
+  <p>The following sections describe how to use the graphics functions to draw with Renderscript.</p>
+
+  <h3 id="drawing-rsg">Simple drawing</h3>
+
+  <p>The native Renderscript APIs provide a few convenient functions to easily draw a polygon or text to
+  the screen. You call these in your <code>root()</code> function to have them render to the {@link
+  android.renderscript.RSSurfaceView} or {@link android.renderscript.RSTextureView}. These functions are
+  available for simple drawing and should not be used for complex graphics rendering:</p>
+
+  <ul>
+    <li><code>rsgDrawRect()</code>: Sets up a mesh and draws a rectangle to the screen. It uses the
+    top left vertex and bottom right vertex of the rectangle to draw.</li>
+
+    <li><code>rsgDrawQuad()</code>: Sets up a mesh and draws a quadrilateral to the screen.</li>
+
+    <li><code>rsgDrawQuadTexCoords()</code>: Sets up a mesh and draws a quadrilateral to the screen
+    using the provided coordinates of a texture.</li>
+
+    <li><code>rsgDrawText()</code>: Draws specified text to the screen. Use <code>rsgFontColor()</code>
+    to set the color of the text.</li>
+  </ul>
+
+  <h3 id="drawing-mesh">Drawing with a mesh</h3>
+
+  <p>When you want to render complex scenes to the screen, instantiate a {@link
+  android.renderscript.Mesh} and draw it with <code>rsgDrawMesh()</code>. A {@link
+  android.renderscript.Mesh} is a collection of allocations that represent vertex data (positions,
+  normals, texture coordinates) and index data that provides information on how to draw triangles
+  and lines with the provided vertex data. You can build a Mesh in three different ways:</p>
+
+  <ul>
+    <li>Build the mesh with the {@link android.renderscript.Mesh.TriangleMeshBuilder} class, which
+    allows you to specify a set of vertices and indices for each triangle that you want to draw.</li>
+
+    <li>Build the mesh using an {@link android.renderscript.Allocation} or a set of {@link
+    android.renderscript.Allocation}s with the {@link android.renderscript.Mesh.AllocationBuilder}
+    class. This approach allows you to build a mesh with vertices already stored in memory, which allows you
+    to specify the vertices in Renderscript or Android framework code.</li>
+
+    <li>Build the mesh with the {@link android.renderscript.Mesh.Builder} class. You should use
+    this convenience method when you know the data types you want to use to build your mesh, but
+    don't want to make separate memory allocations like with {@link
+    android.renderscript.Mesh.AllocationBuilder}. You can specify the types that you want and this
+    mesh builder automatically creates the memory allocations for you.</li>
+  </ul>
+
+  <p>To create a mesh using the {@link android.renderscript.Mesh.TriangleMeshBuilder}, you need to
+  supply it with a set of vertices and the indices for the vertices that comprise the triangle. For
+  example, the following code specifies three vertices, which are added to an internal array,
+  indexed in the order they were added. The call to {@link
+  android.renderscript.Mesh.TriangleMeshBuilder#addTriangle addTriangle()} draws the triangle with
+  vertex 0, 1, and 2 (the vertices are drawn counter-clockwise).</p>
+  <pre>
+int float2VtxSize = 2;
+Mesh.TriangleMeshBuilder triangles = new Mesh.TriangleMeshBuilder(renderscriptGL,
+float2VtxSize, Mesh.TriangleMeshBuilder.COLOR);
+triangles.addVertex(300.f, 300.f);
+triangles.addVertex(150.f, 450.f);
+triangles.addVertex(450.f, 450.f);
+triangles.addTriangle(0 , 1, 2);
+Mesh smP = triangle.create(true);
+script.set_mesh(smP);
+</pre>
+
+  <p>To draw a mesh using the {@link android.renderscript.Mesh.AllocationBuilder}, you need to
+  supply it with one or more allocations that contain the vertex data:</p>
+  <pre>
+Allocation vertices;
+
+...
+Mesh.AllocationBuilder triangle = new Mesh.AllocationBuilder(mRS);
+smb.addVertexAllocation(vertices.getAllocation());
+smb.addIndexSetType(Mesh.Primitive.TRIANGLE);
+Mesh smP = smb.create();
+script.set_mesh(smP);
+</pre>
+
+  <p>In your Renderscript code, draw the built mesh to the screen:</p>
+  <pre>
+rs_mesh mesh;
+...
+
+int root(){
+...
+rsgDrawMesh(mesh);
+...
+return 0; //specify a non zero, positive integer to specify the frame refresh.
+          //0 refreshes the frame only when the mesh changes.
+}
+</pre>
+
+  <h2 id="shader">Programs</h2>
+
+  <p>You can attach four program objects to the {@link android.renderscript.RenderScriptGL} context
+  to customize the rendering pipeline. For example, you can create vertex and fragment shaders in
+  GLSL or build a raster program object that controls culling. The four programs mirror a
+  traditional graphical rendering pipeline:</p>
+
+  <table>
+    <tr>
+      <th>Android Object Type</th>
+
+      <th>Renderscript Native Type</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td>{@link android.renderscript.ProgramVertex}</td>
+
+      <td>rs_program_vertex</td>
+
+      <td>
+        <p>The Renderscript vertex program, also known as a vertex shader, describes the stage in
+        the graphics pipeline responsible for manipulating geometric data in a user-defined way.
+        The object is constructed by providing Renderscript with the following data:</p>
+
+        <ul>
+          <li>An {@link android.renderscript.Element} describing its varying inputs or attributes</li>
+
+          <li>GLSL shader string that defines the body of the program</li>
+
+          <li>a {@link android.renderscript.Type} that describes the layout of an
+          Allocation containing constant or uniform inputs</li>
+        </ul>
+
+        <p>Once the program is created, bind it to the {@link android.renderscript.RenderScriptGL}
+        graphics context by calling {@link android.renderscript.RenderScriptGL#bindProgramVertex
+        bindProgramVertex()}. It is then used for all subsequent draw calls until you bind a new
+        program. If the program has constant inputs, the user needs to bind an allocation
+        containing those inputs. The allocation's type must match the one provided during creation.
+        </p>
+
+        <p>The Renderscript runtime then does all the necessary plumbing to send those constants to
+        the graphics hardware. Varying inputs to the shader, such as position, normal, and texture
+        coordinates are matched by name between the input {@link android.renderscript.Element}
+        and the mesh object that is being drawn. The signatures don't have to be exact or in any
+        strict order. As long as the input name in the shader matches a channel name and size
+        available on the mesh, the Renderscript runtime handles connecting the two. Unlike OpenGL
+        there is no need to link the vertex and fragment programs.</p>
+
+        <p>To bind shader constants to the program, declare a <code>struct</code> that contains the necessary
+        shader constants in your Renderscript code. This <code>struct</code> is generated into a
+        reflected class that you can use as a constant input element during the program's creation.
+        It is an easy way to create an instance of this <code>struct</code> as an allocation. You would then
+        bind this {@link android.renderscript.Allocation} to the program and the
+        Renderscript runtime sends the data that is contained in the <code>struct</code> to the hardware
+        when necessary. To update shader constants, you change the values in the
+        {@link android.renderscript.Allocation} and notify the Renderscript
+        code of the change.</p>
+
+        <p>The {@link android.renderscript.ProgramVertexFixedFunction.Builder} class also
+        lets you build a simple vertex shader without writing GLSL code.
+        </p>
+      </td>
+    </tr>
+
+    <tr>
+      <td>{@link android.renderscript.ProgramFragment}</td>
+
+      <td>rs_program_fragment</td>
+
+      <td>
+        <p>The Renderscript fragment program, also known as a fragment shader, is responsible for
+        manipulating pixel data in a user-defined way. It's constructed from a GLSL shader string
+        containing the program body, texture inputs, and a {@link android.renderscript.Type}
+        object that describes the constants
+        used by the program. Like the vertex programs, when an {@link android.renderscript.Allocation}
+        with constant input
+        values is bound to the shader, its values are sent to the graphics program automatically.
+        Note that the values inside the {@link android.renderscript.Allocation} are not explicitly tracked.
+        If they change between two draw calls using the same program object, notify the runtime of that change by
+        calling <code>rsgAllocationSyncAll()</code>, so it can send the new values to hardware. Communication
+        between the vertex and fragment programs is handled internally in the GLSL code. For
+        example, if the fragment program is expecting a varying input called <code>varTex0</code>, the GLSL code
+        inside the program vertex must provide it.</p>
+
+        <p>To bind shader constructs to the program, declare a <code>struct</code> that contains the necessary
+        shader constants in your Renderscript code. This <code>struct</code> is generated into a
+        reflected class that you can use as a constant input element during the program's creation.
+        It is an easy way to create an instance of this <code>struct</code> as an allocation. You would then
+        bind this {@link android.renderscript.Allocation} to the program and the
+        Renderscript runtime sends the data that is contained in the <code>struct</code> to the hardware
+        when necessary. To update shader constants, you change the values in the
+        {@link android.renderscript.Allocation} and notify the Renderscript
+        code of the change.</p>
+
+        <p>The {@link android.renderscript.ProgramFragmentFixedFunction.Builder} class also
+        lets you build a simple fragment shader without writing GLSL code.
+        </p>
+      </td>
+    </tr>
+
+    <tr>
+      <td>{@link android.renderscript.ProgramStore}</td>
+
+      <td>rs_program_store</td>
+
+      <td>The Renderscript store program contains a set of parameters that control how the graphics
+      hardware writes to the framebuffer. It could be used to enable and disable depth writes and
+      testing, setup various blending modes for effects like transparency and define write masks
+      for color components.</td>
+    </tr>
+
+    <tr>
+      <td>{@link android.renderscript.ProgramRaster}</td>
+
+      <td>rs_program_raster</td>
+
+      <td>The Renderscript raster program is primarily used to specify whether point sprites are enabled and to
+      control the culling mode. By default back faces are culled.</td>
+    </tr>
+  </table>
+
+  <p>The following example defines a vertex shader in GLSL and binds it to a Renderscript context object:</p>
+  <pre>
+    private RenderScriptGL glRenderer;      //rendering context
+    private ScriptField_Point mPoints;      //vertices
+    private ScriptField_VpConsts mVpConsts; //shader constants
+
+    ...
+
+     ProgramVertex.Builder sb = new ProgramVertex.Builder(glRenderer);
+        String t =  "varying vec4 varColor;\n" +
+                    "void main() {\n" +
+                    "  vec4 pos = vec4(0.0, 0.0, 0.0, 1.0);\n" +
+                    "  pos.xy = ATTRIB_position;\n" +
+                    "  gl_Position = UNI_MVP * pos;\n" +
+                    "  varColor = vec4(1.0, 1.0, 1.0, 1.0);\n" +
+                    "  gl_PointSize = ATTRIB_size;\n" +
+                    "}\n";
+        sb.setShader(t);
+        sb.addConstant(mVpConsts.getType());
+        sb.addInput(mPoints.getElement());
+        ProgramVertex pvs = sb.create();
+        pvs.bindConstants(mVpConsts.getAllocation(), 0);
+        glRenderer.bindProgramVertex(pvs);
+</pre>
+
+
+  <p>The <a href=
+  "{@docRoot}resources/samples/RenderScript/MiscSamples/src/com/example/android/rs/miscsamples/RsRenderStatesRS.html">
+  RsRenderStatesRS</a> sample has many examples on how to create a shader without writing GLSL.</p>
+
+  <h3 id="shader-bindings">Program bindings</h3>
+
+  <p>You can also declare four pragmas that control default program bindings to the {@link
+  android.renderscript.RenderScriptGL} context when the script is executing:</p>
+
+  <ul>
+    <li><code>stateVertex</code></li>
+
+    <li><code>stateFragment</code></li>
+
+    <li><code>stateRaster</code></li>
+
+    <li><code>stateStore</code></li>
+  </ul>
+
+  <p>The possible values for each pragma are <code>parent</code> or <code>default</code>. Using
+  <code>default</code> binds the shaders to the graphical context with the system defaults.</p>
+
+  <p>Using <code>parent</code> binds the shaders in the same manner as it is bound in the calling
+  script. If this is the root script, the parent state is taken from the bind points that are set
+  by the {@link android.renderscript.RenderScriptGL} bind methods.</p>
+
+  <p>For example, you can define this at the top of your graphics Renderscript code to have
+  the vertex and store programs inherent the bind properties from their parent scripts:</p>
+  <pre>
+#pragma stateVertex(parent)
+#pragma stateStore(parent)
+</pre>
+
+  <h3 id="shader-sampler">Defining a sampler</h3>
+
+  <p>A {@link android.renderscript.Sampler} object defines how data is extracted from textures.
+  Samplers are bound to a {@link android.renderscript.ProgramFragment} alongside the texture
+  whose sampling they control. These
+  objects are used to specify such things as edge clamping behavior, whether mip-maps are used, and
+  the amount of anisotropy required. There might be situations where hardware does not support the
+  desired behavior of the sampler. In these cases, the Renderscript runtime attempts to provide the
+  closest possible approximation. For example, the user requested 16x anisotropy, but only 8x was
+  set because it's the best available on the hardware.</p>
+
+  <p>The <a href=
+  "{@docRoot}resources/samples/RenderScript/MiscSamples/src/com/example/android/rs/miscsamples/RsRenderStatesRS.html">
+  RsRenderStatesRS</a> sample has many examples on how to create a sampler and bind it to a
+  Fragment program.</p>
+
+
+
+<h2 id="fbo">Rendering to a Framebuffer Object</h2>
+
+<p>Framebuffer objects allow you to render offscreen instead of in the default onscreen
+framebuffer. This approach might be useful for situations where you need to post-process a texture before
+rendering it to the screen, or when you want to composite two scenes in one such as rendering a rear-view
+mirror of a car. There are two buffers associated with a framebuffer object: a color buffer
+and a depth buffer. The color buffer (required) contains the actual pixel data of the scene
+that you are rendering, and the depth buffer (optional) contains the values necessary to figure
+out what vertices are drawn depending on their z-values.</p>
+
+<p>In general, you need to do the following to render to a framebuffer object:</p>
+
+<ul>
+  <li>Create {@link android.renderscript.Allocation} objects for the color buffer and
+  depth buffer (if needed). Specify the {@link
+  android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} usage attribute for these
+  allocations to notify the Renderscript runtime to use these allocations for the framebuffer
+  object. For the color buffer allocation, you most likely need to declare the {@link
+  android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE} usage attribute
+  to use the color buffer as a texture, which is the most common use of the framebuffer object.</li>
+
+  <li>Tell the Renderscript runtime to render to the framebuffer object instead of the default
+  framebuffer by calling <code>rsgBindColorTarget()</code> and passing it the color buffer
+  allocation. If applicable, call <code>rsgBindDepthTarget()</code> passing in the depth buffer
+  allocation as well.</li>
+
+  <li>Render your scene normally with the <code>rsgDraw</code> functions. The scene will be
+  rendered into the color buffer instead of the default onscreen framebuffer.</li>
+
+  <li>When done, tell the Renderscript runtime stop rendering to the color buffer and back
+  to the default framebuffer by calling <code>rsgClearAllRenderTargets()</code>.</li>
+
+  <li>Create a fragment shader and bind a the color buffer to it as a texture.</li>
+
+  <li>Render your scene to the default framebuffer. The texture will be used according
+  to the way you setup your fragment shader.</li>
+</ul>
+
+<p>The following example shows you how to render to a framebuffer object by modifying the
+<a href="{@docRoot}guide/resources/renderscript/Fountain/">Fountain</a> Renderscript sample. The end
+result is the <a href="{@docRoot}guide/resources/renderscript/FountainFBO/">FountainFBO</a> sample.
+The modifications render the exact same scene into a framebuffer object as it does the default
+framebuffer. The framebuffer object is then rendered into the default framebuffer in a small
+area at the top left corner of the screen.</p>
+
+<ol>
+  <li>Modify <code>fountain.rs</code> and add the following global variables. This creates setter
+  methods when this file is reflected into a <code>.java</code> file, allowing you to allocate
+  memory in your Android framework code and binding it to the Renderscript runtime.
+<pre>
+//allocation for color buffer
+rs_allocation gColorBuffer;
+//fragment shader for rendering without a texture (used for rendering to framebuffer object)
+rs_program_fragment gProgramFragment;
+//fragment shader for rendering with a texture (used for rendering to default framebuffer)
+rs_program_fragment gTextureProgramFragment;
+</pre>
+  </li>
+
+  <li>Modify the root function of <code>fountain.rs</code> to look like the following code. The
+  modifications are commented:
+<pre>
+int root() {
+    float dt = min(rsGetDt(), 0.1f);
+    rsgClearColor(0.f, 0.f, 0.f, 1.f);
+    const float height = rsgGetHeight();
+    const int size = rsAllocationGetDimX(rsGetAllocation(point));
+    float dy2 = dt * (10.f);
+    Point_t * p = point;
+    for (int ct=0; ct < size; ct++) {
+        p->delta.y += dy2;
+        p->position += p->delta;
+        if ((p->position.y > height) && (p->delta.y > 0)) {
+            p->delta.y *= -0.3f;
+        }
+        p++;
+    }
+    //Tell Renderscript runtime to render to the frame buffer object
+    rsgBindColorTarget(gColorBuffer, 0);
+    //Begin rendering on a white background
+    rsgClearColor(1.f, 1.f, 1.f, 1.f);
+    rsgDrawMesh(partMesh);
+
+    //When done, tell Renderscript runtime to stop rendering to framebuffer object
+    rsgClearAllRenderTargets();
+
+    //Bind a new fragment shader that declares the framebuffer object to be used as a texture
+    rsgBindProgramFragment(gTextureProgramFragment);
+
+    //Bind the framebuffer object to the fragment shader at slot 0 as a texture
+    rsgBindTexture(gTextureProgramFragment, 0, gColorBuffer);
+    //Draw a quad using the framebuffer object as the texture
+    float startX = 10, startY = 10;
+    float s = 256;
+    rsgDrawQuadTexCoords(startX, startY, 0, 0, 1,
+                         startX, startY + s, 0, 0, 0,
+                         startX + s, startY + s, 0, 1, 0,
+                         startX + s, startY, 0, 1, 1);
+
+    //Rebind the original fragment shader to render as normal
+    rsgBindProgramFragment(gProgramFragment);
+
+    //Render the main scene
+    rsgDrawMesh(partMesh);
+
+    return 1;
+}
+</pre>
+  </li>
+
+  <li>In the <code>FountainRS.java</code> file, modify the <code>init()</code> method to look
+  like the following code. The modifications are commented:
+
+<pre>
+/* Add necessary members */
+private ScriptC_fountainfbo mScript;
+private Allocation mColorBuffer;
+private ProgramFragment mProgramFragment;
+private ProgramFragment mTextureProgramFragment;
+
+public void init(RenderScriptGL rs, Resources res) {
+    mRS = rs;
+    mRes = res;
+
+    ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);
+
+    Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
+    smb.addVertexAllocation(points.getAllocation());
+    smb.addIndexSetType(Mesh.Primitive.POINT);
+    Mesh sm = smb.create();
+
+    mScript = new ScriptC_fountainfbo(mRS, mRes, R.raw.fountainfbo);
+    mScript.set_partMesh(sm);
+    mScript.bind_point(points);
+
+    ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
+    pfb.setVaryingColor(true);
+    mProgramFragment = pfb.create();
+    mScript.set_gProgramFragment(mProgramFragment);
+
+    /* Second fragment shader to use a texture (framebuffer object) to draw with */
+    pfb.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
+        ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
+
+    /* Set the fragment shader in the Renderscript runtime */
+    mTextureProgramFragment = pfb.create();
+    mScript.set_gTextureProgramFragment(mTextureProgramFragment);
+
+    /* Create the allocation for the color buffer */
+    Type.Builder colorBuilder = new Type.Builder(mRS, Element.RGBA_8888(mRS));
+    colorBuilder.setX(256).setY(256);
+    mColorBuffer = Allocation.createTyped(mRS, colorBuilder.create(),
+    Allocation.USAGE_GRAPHICS_TEXTURE |
+    Allocation.USAGE_GRAPHICS_RENDER_TARGET);
+
+    /* Set the allocation in the Renderscript runtime */
+    mScript.set_gColorBuffer(mColorBuffer);
+
+    mRS.bindRootScript(mScript);
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> This sample doesn't use a depth buffer, but the following code
+shows you how to declare an example depth buffer if you need to use
+one for your application. The depth buffer must have the same dimensions as the color buffer:
+
+<pre>
+Allocation mDepthBuffer;
+
+...
+
+Type.Builder b = new Type.Builder(mRS, Element.createPixel(mRS, DataType.UNSIGNED_16,
+    DataKind.PIXEL_DEPTH));
+b.setX(256).setY(256);
+mDepthBuffer = Allocation.createTyped(mRS, b.create(),
+Allocation.USAGE_GRAPHICS_RENDER_TARGET);
+
+</pre>
+</p>
+</li>
+
+  <li>Run and use the sample. The smaller, white quad on the top-left corner is using the
+  framebuffer object as a texture, which renders the same scene as the main rendering.</li>
+</ol>
diff --git a/docs/html/guide/topics/renderscript/index.jd b/docs/html/guide/topics/graphics/renderscript/index.jd
similarity index 100%
rename from docs/html/guide/topics/renderscript/index.jd
rename to docs/html/guide/topics/graphics/renderscript/index.jd
diff --git a/docs/html/guide/topics/renderscript/reference.jd b/docs/html/guide/topics/graphics/renderscript/reference.jd
similarity index 100%
rename from docs/html/guide/topics/renderscript/reference.jd
rename to docs/html/guide/topics/graphics/renderscript/reference.jd
diff --git a/docs/html/guide/topics/intents/index.html b/docs/html/guide/topics/intents/index.html
deleted file mode 100644
index b831246..0000000
--- a/docs/html/guide/topics/intents/index.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=intents-filters.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<a href="intents-filters.html">click here</a> if you are not redirected.
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/topics/location/index.jd b/docs/html/guide/topics/location/index.jd
index 8a2e9cd..54c034d 100644
--- a/docs/html/guide/topics/location/index.jd
+++ b/docs/html/guide/topics/location/index.jd
@@ -13,8 +13,7 @@
 
   <h2>Topics</h2>
   <ol>
-    <li><a href="{@docRoot}guide/topics/location/obtaining-user-location.html">Obtaining User
-Location</a></li>
+    <li><a href="{@docRoot}guide/topics/location/strategies.html">Location Strategies</a></li>
   </ol>
   
   <h2>See Also</h2>
@@ -58,8 +57,7 @@
 </ul>
 
 <p>For more information, read the guide to <a
-href="{@docRoot}guide/topics/location/obtaining-user-location.html">Obtaining User
-Location</a>.</p>
+href="{@docRoot}guide/topics/location/strategies.html">Location Strategies</a>.</p>
 
 
 <h2 id="maps">Google Maps External Library</h2>
@@ -98,8 +96,8 @@
 href="http://code.google.com/android/add-ons/google-apis">http://code.google.com/android/add-ons/google-apis</a></p>
 
 <p>For your convenience, the Google APIs add-on is also available as a downloadable component from
-the Android SDK Manager (see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>).</p>
+the Android SDK Manager (see <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a>).</p>
 
 <p class="note"><strong>Note:</strong> In order to display Google Maps data in a
 MapView, you must register with the Google Maps service and obtain a Maps API
diff --git a/docs/html/guide/topics/location/obtaining-user-location.jd b/docs/html/guide/topics/location/obtaining-user-location.jd
deleted file mode 100644
index 3b450f0..0000000
--- a/docs/html/guide/topics/location/obtaining-user-location.jd
+++ /dev/null
@@ -1,454 +0,0 @@
-page.title=Obtaining User Location
-parent.title=Location and Maps
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>Quickview</h2>
-  <ul>
-    <li>The Network Location Provider provides good location data without using GPS</li>
-    <li>Obtaining user location can consume a lot of battery, so be careful how
-long you listen for updates</li>
-  </ul>
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Challenges">Challenges in Determining User Location</a></li>
-    <li><a href="#Updates">Requesting Location Updates</a>
-      <ol>
-        <li><a href="#Permission">Requesting User Permissions</a></li>
-      </ol>
-    </li>
-    <li><a href="#BestPerformance">Defining a Model for the Best Performance</a>
-      <ol>
-        <li><a href="#Flow">Flow for obtaining user location</a></li>
-        <li><a href="#StartListening">Deciding when to start listening for updates</a></li>
-        <li><a href="#FastFix">Getting a fast fix with the last known location</a></li>
-        <li><a href="#StopListening">Deciding when to stop listening for updates</a></li>
-        <li><a href="#BestEstimate">Maintaining a current best estimate</a></li>
-        <li><a href="#Adjusting">Adjusting the model to save battery and data exchange</a></li>
-      </ol>
-    </li>
-    <li><a href="#MockData">Providing Mock Location Data</a></li>
-  </ol>
-  <h2>Key classes</h2>
-  <ol>
-    <li>{@link android.location.LocationManager}</li>
-    <li>{@link android.location.LocationListener}</li>
-  </ol>
-</div>
-</div>
-
-  <p>Knowing where the user is allows your application to be smarter and deliver
-better information to the user. When developing a location-aware application for Android, you can
-utilize GPS and Android's Network Location Provider to acquire the user location. Although
-GPS is most accurate, it only works outdoors, it quickly consumes battery power, and doesn't return
-the location as quickly as users want. Android's Network Location Provider determines user location
-using cell tower and Wi-Fi signals, providing location information in a way that
-works indoors and outdoors, responds faster, and uses less battery power. To obtain the user
-location in your application, you can use both GPS and the Network Location Provider, or just
-one.</p>
-
-
-<h2 id="Challenges">Challenges in Determining User Location</h2>
-
-<p>Obtaining user location from a mobile device can be complicated. There are several reasons
-why a location reading (regardless of the source) can contain errors and be inaccurate.
-Some sources of error in the user location include:</p>
-
-<ul>
-  <li><b>Multitude of location sources</b>
-    <p>GPS, Cell-ID, and Wi-Fi can each provide a clue to users location. Determining which to use
-and trust is a matter of trade-offs in accuracy, speed, and battery-efficiency.</p>
-  </li>
-  <li><b>User movement</b>
-    <p>Because the user location changes, you must account for movement by re-estimating user
-location every so often.</p>
-  </li>
-  <li><b>Varying accuracy</b>
-    <p>Location estimates coming from each location source are not consistent in their
-accuracy. A location obtained 10 seconds ago from one source might be more accurate than the newest
-location from another or same source.</p>
-  </li>
-</ul>
-
-  <p>These problems can make it difficult to obtain a reliable user location reading. This
-document provides information to help you meet these challenges to obtain a reliable location
-reading. It also provides ideas that you can use in your
-application to provide the user with an accurate and responsive geo-location experience.</p>
-
-
-<h2 id="Updates">Requesting Location Updates</h2>
-
-  <p>Before addressing some of the location errors described above, here is an introduction to
-how you can obtain user location on Android.</p>
-
-  <p>Getting user location in Android works by means of callback. You indicate that you'd
-like to receive location updates from the {@link android.location.LocationManager} ("Location
-Manager") by calling {@link android.location.LocationManager#requestLocationUpdates
-requestLocationUpdates()}, passing it a
-{@link android.location.LocationListener}. Your {@link android.location.LocationListener} must
-implement several callback methods that the Location Manager calls when the user location
-changes or when the status of the service changes.</p>
-
-<p>For example, the following code shows how to define a {@link android.location.LocationListener}
-and request location updates:
-  </p>
-
-<pre>
-// Acquire a reference to the system Location Manager
-LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
-
-// Define a listener that responds to location updates
-LocationListener locationListener = new LocationListener() {
-    public void onLocationChanged(Location location) {
-      // Called when a new location is found by the network location provider.
-      makeUseOfNewLocation(location);
-    }
-
-    public void onStatusChanged(String provider, int status, Bundle extras) {}
-
-    public void onProviderEnabled(String provider) {}
-
-    public void onProviderDisabled(String provider) {}
-  };
-
-// Register the listener with the Location Manager to receive location updates
-locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
-</pre>
-
-  <p>The first parameter in {@link
-android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} is the type of
-location provider to use (in this case, the Network Location Provider for cell tower and Wi-Fi
-based location). You can control the frequency at which your listener receives updates
-with the second and third parameter&mdash;the second is the minimum time interval between
-notifications and the third is the minimum change in distance between notifications&mdash;setting
-both to zero requests location notifications as frequently as possible. The last parameter is your
-{@link android.location.LocationListener}, which receives callbacks for location updates.</p>
-
-<p>To request location updates from the GPS provider,
-substitute <code>GPS_PROVIDER</code> for <code>NETWORK_PROVIDER</code>. You can also request
-location updates from both the GPS and the Network Location Provider by calling {@link
-android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} twice&mdash;once
-for <code>NETWORK_PROVIDER</code> and once for <code>GPS_PROVIDER</code>.</p>
-
-
-<h3 id="Permission">Requesting User Permissions</h3>
-
-<p>In order to receive location updates from <code>NETWORK_PROVIDER</code> or
-<code>GPS_PROVIDER</code>, you must request user permission by declaring either the {@code
-ACCESS_COARSE_LOCATION} or {@code ACCESS_FINE_LOCATION} permission, respectively, in your Android
-manifest file. For example:</p>
-
-<pre>
-&lt;manifest ... &gt;
-    &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
-    ...
-&lt;/manifest&gt;
-</pre>
-
-<p>Without these permissions, your application will fail at runtime when requesting
-location updates.</p>
-
-<p class="note"><strong>Note:</strong> If you are using both <code>NETWORK_PROVIDER</code> and
-<code>GPS_PROVIDER</code>, then you need to request only the {@code ACCESS_FINE_LOCATION}
-permission, because it includes permission for both providers. (Permission for {@code
-ACCESS_COARSE_LOCATION} includes permission only for <code>NETWORK_PROVIDER</code>.)</p>
-
-
-<h2 id="BestPerformance">Defining a Model for the Best Performance</h2>
-
-  <p>Location-based applications are now commonplace, but due to the less than optimal
-accuracy, user movement, the multitude of methods to obtain the location, and the desire to conserve
-battery, getting user location is complicated. To overcome the obstacles of obtaining a good user
-location while preserving battery power, you must define a consistent model that specifies how your
-application obtains the user location. This model includes when you start and stop listening for
-updates and when to use cached location data.</p>
-
-
-  <h3 id="Flow">Flow for obtaining user location</h3>
-
-  <p>Here's the typical flow of procedures for obtaining the user location:</p>
-
-  <ol>
-    <li>Start application.</li>
-    <li>Sometime later, start listening for updates from desired location providers.</li>
-    <li>Maintain a "current best estimate" of location by filtering out new, but less accurate
-fixes.</li>
-    <li>Stop listening for location updates.</li>
-    <li>Take advantage of the last best location estimate.</li>
-  </ol>
-
-  <p>Figure 1 demonstrates this model in a timeline that visualizes the period in which an
-application is listening for location updates and the events that occur during that time.</p>
-
-<img src="{@docRoot}images/location/getting-location.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> A timeline representing the window in which an
-application listens for location updates.</p>
-    
-  <p>This model of a window&mdash;during which location updates are received&mdash;frames many of
-the decisions you need to make when adding location-based services to your application.</p>
-
-
-  <h3 id="StartListening">Deciding when to start listening for updates</h3>
-
-  <p>You might want to start listening for location updates as soon as your application starts, or
-only after users activate a certain feature. Be aware that long windows of listening for location
-fixes can consume a lot of battery power, but short periods might not allow for sufficient
-accuracy.</p>
-
-  <p>As demonstrated above, you can begin listening for updates by calling {@link
-android.location.LocationManager#requestLocationUpdates requestLocationUpdates()}:</p>
-
-<pre>
-LocationProvider locationProvider = LocationManager.NETWORK_PROVIDER;
-// Or, use GPS location data:
-// LocationProvider locationProvider = LocationManager.GPS_PROVIDER;
-
-locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener);
-</pre>
-
-
-  <h3 id="FastFix">Getting a fast fix with the last known location</h3>
-  
-  <p>The time it takes for your location listener to receive the first location fix is often too
-long for users wait. Until a more accurate location is provided to your location listener, you
-should utilize a cached location by calling {@link
-android.location.LocationManager#getLastKnownLocation}:</p>
-<pre>
-LocationProvider locationProvider = LocationManager.NETWORK_PROVIDER;
-// Or use LocationManager.GPS_PROVIDER
-
-Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
-</pre>
-
-
-  <h3 id="StopListening">Deciding when to stop listening for updates</h3>
-  
-  <p>The logic of deciding when new fixes are no longer necessary might range from very simple to
-very complex depending on your application. A short gap between when the location is acquired and
-when the location is used, improves the accuracy of the estimate. Always beware that listening for a
-long time consumes a lot of battery power, so as soon as you have the information you need, you
-should stop
-listening for updates by calling {@link android.location.LocationManager#removeUpdates}:</p>
-<pre>
-// Remove the listener you previously added
-locationManager.removeUpdates(locationListener);
-</pre>
-
-
-  <h3 id="BestEstimate">Maintaining a current best estimate</h3>
-
-  <p>You might expect that the most recent location fix is the most accurate.
-However, because the accuracy of a location fix varies, the most recent fix is not always the best.
-You should include logic for choosing location fixes based on several criteria. The criteria also
-varies depending on the use-cases of the application and field testing.</p>
-
-  <p>Here are a few steps you can take to validate the accuracy of a location fix:</p>
-  <ul>
-    <li>Check if the location retrieved is significantly newer than the previous estimate.</li>
-    <li>Check if the accuracy claimed by the location is better or worse than the previous
-estimate.</li>
-    <li>Check which provider the new location is from and determine if you trust it more.</li>
-  </ul>
-  
-  <p>An elaborate example of this logic can look something like this:</p>
-
-<pre>
-private static final int TWO_MINUTES = 1000 * 60 * 2;
-
-/** Determines whether one Location reading is better than the current Location fix
-  * @param location  The new Location that you want to evaluate
-  * @param currentBestLocation  The current Location fix, to which you want to compare the new one
-  */
-protected boolean isBetterLocation(Location location, Location currentBestLocation) {
-    if (currentBestLocation == null) {
-        // A new location is always better than no location
-        return true;
-    }
-
-    // Check whether the new location fix is newer or older
-    long timeDelta = location.getTime() - currentBestLocation.getTime();
-    boolean isSignificantlyNewer = timeDelta &gt; TWO_MINUTES;
-    boolean isSignificantlyOlder = timeDelta &lt; -TWO_MINUTES;
-    boolean isNewer = timeDelta > 0;
-
-    // If it's been more than two minutes since the current location, use the new location
-    // because the user has likely moved
-    if (isSignificantlyNewer) {
-        return true;
-    // If the new location is more than two minutes older, it must be worse
-    } else if (isSignificantlyOlder) {
-        return false;
-    }
-
-    // Check whether the new location fix is more or less accurate
-    int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
-    boolean isLessAccurate = accuracyDelta &gt; 0;
-    boolean isMoreAccurate = accuracyDelta &lt; 0;
-    boolean isSignificantlyLessAccurate = accuracyDelta &gt; 200;
-
-    // Check if the old and new location are from the same provider
-    boolean isFromSameProvider = isSameProvider(location.getProvider(),
-            currentBestLocation.getProvider());
-
-    // Determine location quality using a combination of timeliness and accuracy
-    if (isMoreAccurate) {
-        return true;
-    } else if (isNewer &amp;&amp; !isLessAccurate) {
-        return true;
-    } else if (isNewer &amp;&amp; !isSignificantlyLessAccurate &amp;&amp; isFromSameProvider) {
-        return true;
-    }
-    return false;
-}
-
-/** Checks whether two providers are the same */
-private boolean isSameProvider(String provider1, String provider2) {
-    if (provider1 == null) {
-      return provider2 == null;
-    }
-    return provider1.equals(provider2);
-}
-</pre>
-
-
-  <h3 id="Adjusting">Adjusting the model to save battery and data exchange</h3>
-
-  <p>As you test your application, you might find that your model for providing good location and
-good performance needs some adjustment. Here are some things you might change to find a good
-balance between the two.</p>
-
-  <h4>Reduce the size of the window</h4>
-  
-  <p>A smaller window in which you listen for location updates means less interaction with GPS and
-network location services, thus, preserving battery life. But it also allows for fewer locations
-from which to choose a best estimate.</p>
-
-  <h4>Set the location providers to return updates less frequently</h4>
-  
-  <p>Reducing the rate at which new updates appear during the window can also improve battery
-efficiency, but at the cost of accuracy. The value of the trade-off depends on how your
-application is used. You can reduce the rate of updates by increasing the parameters in {@link
-android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} that specify the
-interval time and minimum distance change.</p>
-
-  <h4>Restrict a set of providers</h4>
-  
-  <p>Depending on the environment where your application is used or the desired level of accuracy,
-you might choose to use only the Network Location Provider or only GPS, instead of both. Interacting
-with only one of the services reduces battery usage at a potential cost of accuracy.</p>
-
-
-  <h2>Common application cases</h2>
-  
-  <p>There are many reasons you might want to obtain the user location in your application. Below
-are a couple scenarios in which you can use the user location to enrich your application. Each
-scenario also describes good practices for when you should start and stop listening for the
-location, in order to get a good reading and help preserve battery life.</p>
-
-
-  <h3>Tagging user-created content with a location</h3>
-  
-  <p>You might be creating an application where user-created content is tagged with a location.
-Think of users sharing their local experiences, posting a review for a restaurant, or recording some
-content that can be augmented with their current location. A model of how this
-interaction might happen, with respect to the location services, is visualized in figure 2.</p>
-
-  <img src="{@docRoot}images/location/content-tagging.png" alt="" />
-<p class="img-caption"><strong>Figure 2.</strong> A timeline representing the window in which
-the user location is obtained and listening stops when the user consumes the current location.</p>
-  
-  <p>This lines up with the previous model of how user location is obtained in code (figure 1). For
-best location accuracy, you might choose to start listening for location updates when users begin
-creating
-the content or even when the application starts, then stop listening for updates when content is
-ready to be posted or recorded. You might need to consider how long a typical task of creating the
-content takes and judge if this duration allows for efficient collection of a location estimate.</p>
-
-
-  <h3>Helping the user decide on where to go</h3>
-  
-  <p>You might be creating an application that attempts to provide users with a set
-of options about where to go. For example, you're looking to provide a list of nearby restaurants,
-stores, and entertainment and the order of recommendations changes depending on the user
-location.</p>
-
-  <p>To accommodate such a flow, you might choose to:</p>
-  <ul>
-    <li>Rearrange recommendations when a new best estimate is obtained</li>
-    <li>Stop listening for updates if the order of recommendations has stabilized</li>
-  </ul>
-
-  <p>This kind of model is visualized in figure 3.</p>
-  
-  <img src="{@docRoot}images/location/where-to-go.png" alt="" />
-<p class="img-caption"><strong>Figure 3.</strong> A timeline representing the window in which a
-dynamic set of data is updated each time the user location updates.</p>
-
-
-
-
-<h2 id="MockData">Providing Mock Location Data</h2>
-
-<p>As you develop your application, you'll certainly need to test how well your model for obtaining
-user location works. This is most easily done using a real Android-powered device. If, however, you
-don't have a device, you can still test your location-based features by mocking location data in
-the Android emulator. There are three different ways to send your application mock location
-data: using Eclipse, DDMS, or the "geo" command in the emulator console.</p>
-
-<p class="note"><strong>Note:</strong> Providing mock location data is injected as GPS location
-data, so you must request location updates from <code>GPS_PROVIDER</code> in order for mock location
-data to work.</p>
-
-<h3 id="MockEclipse">Using Eclipse</h3>
-
-<p>Select <b>Window</b> &gt; <b>Show View</b> &gt; <b>Other</b> &gt; <b>Emulator Control</b>.</p>
-
-<p>In the Emulator Control panel, enter GPS coordinates under Location Controls as individual
-lat/long coordinates, with a GPX file for route playback, or a KML file for multiple place marks.
-(Be sure that you have a device selected in the Devices panel&mdash;available from <b>Window</b>
-&gt; <b>Show View</b> &gt; <b>Other</b> &gt; <b>Devices</b>.)</p>
-
-
-<h3 id="MockDdms">Using DDMS</h3>
-
-<p>With the DDMS tool, you can simulate location data a few different ways:</p>
-<ul>
-    <li>Manually send individual longitude/latitude coordinates to the device.</li>
-    <li>Use a GPX file describing a route for playback to the device.</li>
-    <li>Use a KML file describing individual place marks for sequenced playback to the device.</li>
-</ul>
-
-<p>For more information on using DDMS to spoof location data, see
-<a href="{@docRoot}guide/developing/debugging/ddms.html">Using DDMS</a>.
-
-
-<h3 id="MockGeo">Using the "geo" command in the emulator console</h3>
-
-<p>To send mock location data from the command line:</p>
-
-<ol>
-  <li>Launch your application in the Android emulator and open a terminal/console in your SDK's
-<code>/tools</code> directory.</li>
-  <li>Connect to the emulator console:
-<pre>telnet localhost <em>&lt;console-port&gt;</em></pre></li>
-  <li>Send the location data:</p>
-    <ul><li><code>geo fix</code> to send a fixed geo-location.
-    <p>This command accepts a longitude and latitude in decimal degrees, and
-    an optional altitude in meters. For example:</p>
-    <pre>geo fix -121.45356 46.51119 4392</pre>
-      </li>
-      <li><code>geo nmea</code> to send an NMEA 0183 sentence.
-    <p>This command accepts a single NMEA sentence of type '$GPGGA' (fix data) or '$GPRMC' (transit
-  data).
-    For example:</p>
-    <pre>geo nmea $GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62</pre>
-      </li>
-    </ul>
-  </li>
-</ol>
-
-<p>For information about how to connect to the emulator console, see
-<a href="{@docRoot}guide/developing/devices/emulator.html#console">Using the Emulator Console</a>.</p>
diff --git a/docs/html/guide/topics/location/strategies.jd b/docs/html/guide/topics/location/strategies.jd
new file mode 100644
index 0000000..f790953
--- /dev/null
+++ b/docs/html/guide/topics/location/strategies.jd
@@ -0,0 +1,454 @@
+page.title=Location Strategies
+parent.title=Location and Maps
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>Quickview</h2>
+  <ul>
+    <li>The Network Location Provider provides good location data without using GPS</li>
+    <li>Obtaining user location can consume a lot of battery, so be careful how
+long you listen for updates</li>
+  </ul>
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#Challenges">Challenges in Determining User Location</a></li>
+    <li><a href="#Updates">Requesting Location Updates</a>
+      <ol>
+        <li><a href="#Permission">Requesting User Permissions</a></li>
+      </ol>
+    </li>
+    <li><a href="#BestPerformance">Defining a Model for the Best Performance</a>
+      <ol>
+        <li><a href="#Flow">Flow for obtaining user location</a></li>
+        <li><a href="#StartListening">Deciding when to start listening for updates</a></li>
+        <li><a href="#FastFix">Getting a fast fix with the last known location</a></li>
+        <li><a href="#StopListening">Deciding when to stop listening for updates</a></li>
+        <li><a href="#BestEstimate">Maintaining a current best estimate</a></li>
+        <li><a href="#Adjusting">Adjusting the model to save battery and data exchange</a></li>
+      </ol>
+    </li>
+    <li><a href="#MockData">Providing Mock Location Data</a></li>
+  </ol>
+  <h2>Key classes</h2>
+  <ol>
+    <li>{@link android.location.LocationManager}</li>
+    <li>{@link android.location.LocationListener}</li>
+  </ol>
+</div>
+</div>
+
+  <p>Knowing where the user is allows your application to be smarter and deliver
+better information to the user. When developing a location-aware application for Android, you can
+utilize GPS and Android's Network Location Provider to acquire the user location. Although
+GPS is most accurate, it only works outdoors, it quickly consumes battery power, and doesn't return
+the location as quickly as users want. Android's Network Location Provider determines user location
+using cell tower and Wi-Fi signals, providing location information in a way that
+works indoors and outdoors, responds faster, and uses less battery power. To obtain the user
+location in your application, you can use both GPS and the Network Location Provider, or just
+one.</p>
+
+
+<h2 id="Challenges">Challenges in Determining User Location</h2>
+
+<p>Obtaining user location from a mobile device can be complicated. There are several reasons
+why a location reading (regardless of the source) can contain errors and be inaccurate.
+Some sources of error in the user location include:</p>
+
+<ul>
+  <li><b>Multitude of location sources</b>
+    <p>GPS, Cell-ID, and Wi-Fi can each provide a clue to users location. Determining which to use
+and trust is a matter of trade-offs in accuracy, speed, and battery-efficiency.</p>
+  </li>
+  <li><b>User movement</b>
+    <p>Because the user location changes, you must account for movement by re-estimating user
+location every so often.</p>
+  </li>
+  <li><b>Varying accuracy</b>
+    <p>Location estimates coming from each location source are not consistent in their
+accuracy. A location obtained 10 seconds ago from one source might be more accurate than the newest
+location from another or same source.</p>
+  </li>
+</ul>
+
+  <p>These problems can make it difficult to obtain a reliable user location reading. This
+document provides information to help you meet these challenges to obtain a reliable location
+reading. It also provides ideas that you can use in your
+application to provide the user with an accurate and responsive geo-location experience.</p>
+
+
+<h2 id="Updates">Requesting Location Updates</h2>
+
+  <p>Before addressing some of the location errors described above, here is an introduction to
+how you can obtain user location on Android.</p>
+
+  <p>Getting user location in Android works by means of callback. You indicate that you'd
+like to receive location updates from the {@link android.location.LocationManager} ("Location
+Manager") by calling {@link android.location.LocationManager#requestLocationUpdates
+requestLocationUpdates()}, passing it a
+{@link android.location.LocationListener}. Your {@link android.location.LocationListener} must
+implement several callback methods that the Location Manager calls when the user location
+changes or when the status of the service changes.</p>
+
+<p>For example, the following code shows how to define a {@link android.location.LocationListener}
+and request location updates:
+  </p>
+
+<pre>
+// Acquire a reference to the system Location Manager
+LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
+
+// Define a listener that responds to location updates
+LocationListener locationListener = new LocationListener() {
+    public void onLocationChanged(Location location) {
+      // Called when a new location is found by the network location provider.
+      makeUseOfNewLocation(location);
+    }
+
+    public void onStatusChanged(String provider, int status, Bundle extras) {}
+
+    public void onProviderEnabled(String provider) {}
+
+    public void onProviderDisabled(String provider) {}
+  };
+
+// Register the listener with the Location Manager to receive location updates
+locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 0, 0, locationListener);
+</pre>
+
+  <p>The first parameter in {@link
+android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} is the type of
+location provider to use (in this case, the Network Location Provider for cell tower and Wi-Fi
+based location). You can control the frequency at which your listener receives updates
+with the second and third parameter&mdash;the second is the minimum time interval between
+notifications and the third is the minimum change in distance between notifications&mdash;setting
+both to zero requests location notifications as frequently as possible. The last parameter is your
+{@link android.location.LocationListener}, which receives callbacks for location updates.</p>
+
+<p>To request location updates from the GPS provider,
+substitute <code>GPS_PROVIDER</code> for <code>NETWORK_PROVIDER</code>. You can also request
+location updates from both the GPS and the Network Location Provider by calling {@link
+android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} twice&mdash;once
+for <code>NETWORK_PROVIDER</code> and once for <code>GPS_PROVIDER</code>.</p>
+
+
+<h3 id="Permission">Requesting User Permissions</h3>
+
+<p>In order to receive location updates from <code>NETWORK_PROVIDER</code> or
+<code>GPS_PROVIDER</code>, you must request user permission by declaring either the {@code
+ACCESS_COARSE_LOCATION} or {@code ACCESS_FINE_LOCATION} permission, respectively, in your Android
+manifest file. For example:</p>
+
+<pre>
+&lt;manifest ... &gt;
+    &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
+    ...
+&lt;/manifest&gt;
+</pre>
+
+<p>Without these permissions, your application will fail at runtime when requesting
+location updates.</p>
+
+<p class="note"><strong>Note:</strong> If you are using both <code>NETWORK_PROVIDER</code> and
+<code>GPS_PROVIDER</code>, then you need to request only the {@code ACCESS_FINE_LOCATION}
+permission, because it includes permission for both providers. (Permission for {@code
+ACCESS_COARSE_LOCATION} includes permission only for <code>NETWORK_PROVIDER</code>.)</p>
+
+
+<h2 id="BestPerformance">Defining a Model for the Best Performance</h2>
+
+  <p>Location-based applications are now commonplace, but due to the less than optimal
+accuracy, user movement, the multitude of methods to obtain the location, and the desire to conserve
+battery, getting user location is complicated. To overcome the obstacles of obtaining a good user
+location while preserving battery power, you must define a consistent model that specifies how your
+application obtains the user location. This model includes when you start and stop listening for
+updates and when to use cached location data.</p>
+
+
+  <h3 id="Flow">Flow for obtaining user location</h3>
+
+  <p>Here's the typical flow of procedures for obtaining the user location:</p>
+
+  <ol>
+    <li>Start application.</li>
+    <li>Sometime later, start listening for updates from desired location providers.</li>
+    <li>Maintain a "current best estimate" of location by filtering out new, but less accurate
+fixes.</li>
+    <li>Stop listening for location updates.</li>
+    <li>Take advantage of the last best location estimate.</li>
+  </ol>
+
+  <p>Figure 1 demonstrates this model in a timeline that visualizes the period in which an
+application is listening for location updates and the events that occur during that time.</p>
+
+<img src="{@docRoot}images/location/getting-location.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> A timeline representing the window in which an
+application listens for location updates.</p>
+    
+  <p>This model of a window&mdash;during which location updates are received&mdash;frames many of
+the decisions you need to make when adding location-based services to your application.</p>
+
+
+  <h3 id="StartListening">Deciding when to start listening for updates</h3>
+
+  <p>You might want to start listening for location updates as soon as your application starts, or
+only after users activate a certain feature. Be aware that long windows of listening for location
+fixes can consume a lot of battery power, but short periods might not allow for sufficient
+accuracy.</p>
+
+  <p>As demonstrated above, you can begin listening for updates by calling {@link
+android.location.LocationManager#requestLocationUpdates requestLocationUpdates()}:</p>
+
+<pre>
+LocationProvider locationProvider = LocationManager.NETWORK_PROVIDER;
+// Or, use GPS location data:
+// LocationProvider locationProvider = LocationManager.GPS_PROVIDER;
+
+locationManager.requestLocationUpdates(locationProvider, 0, 0, locationListener);
+</pre>
+
+
+  <h3 id="FastFix">Getting a fast fix with the last known location</h3>
+  
+  <p>The time it takes for your location listener to receive the first location fix is often too
+long for users wait. Until a more accurate location is provided to your location listener, you
+should utilize a cached location by calling {@link
+android.location.LocationManager#getLastKnownLocation}:</p>
+<pre>
+LocationProvider locationProvider = LocationManager.NETWORK_PROVIDER;
+// Or use LocationManager.GPS_PROVIDER
+
+Location lastKnownLocation = locationManager.getLastKnownLocation(locationProvider);
+</pre>
+
+
+  <h3 id="StopListening">Deciding when to stop listening for updates</h3>
+  
+  <p>The logic of deciding when new fixes are no longer necessary might range from very simple to
+very complex depending on your application. A short gap between when the location is acquired and
+when the location is used, improves the accuracy of the estimate. Always beware that listening for a
+long time consumes a lot of battery power, so as soon as you have the information you need, you
+should stop
+listening for updates by calling {@link android.location.LocationManager#removeUpdates}:</p>
+<pre>
+// Remove the listener you previously added
+locationManager.removeUpdates(locationListener);
+</pre>
+
+
+  <h3 id="BestEstimate">Maintaining a current best estimate</h3>
+
+  <p>You might expect that the most recent location fix is the most accurate.
+However, because the accuracy of a location fix varies, the most recent fix is not always the best.
+You should include logic for choosing location fixes based on several criteria. The criteria also
+varies depending on the use-cases of the application and field testing.</p>
+
+  <p>Here are a few steps you can take to validate the accuracy of a location fix:</p>
+  <ul>
+    <li>Check if the location retrieved is significantly newer than the previous estimate.</li>
+    <li>Check if the accuracy claimed by the location is better or worse than the previous
+estimate.</li>
+    <li>Check which provider the new location is from and determine if you trust it more.</li>
+  </ul>
+  
+  <p>An elaborate example of this logic can look something like this:</p>
+
+<pre>
+private static final int TWO_MINUTES = 1000 * 60 * 2;
+
+/** Determines whether one Location reading is better than the current Location fix
+  * @param location  The new Location that you want to evaluate
+  * @param currentBestLocation  The current Location fix, to which you want to compare the new one
+  */
+protected boolean isBetterLocation(Location location, Location currentBestLocation) {
+    if (currentBestLocation == null) {
+        // A new location is always better than no location
+        return true;
+    }
+
+    // Check whether the new location fix is newer or older
+    long timeDelta = location.getTime() - currentBestLocation.getTime();
+    boolean isSignificantlyNewer = timeDelta &gt; TWO_MINUTES;
+    boolean isSignificantlyOlder = timeDelta &lt; -TWO_MINUTES;
+    boolean isNewer = timeDelta > 0;
+
+    // If it's been more than two minutes since the current location, use the new location
+    // because the user has likely moved
+    if (isSignificantlyNewer) {
+        return true;
+    // If the new location is more than two minutes older, it must be worse
+    } else if (isSignificantlyOlder) {
+        return false;
+    }
+
+    // Check whether the new location fix is more or less accurate
+    int accuracyDelta = (int) (location.getAccuracy() - currentBestLocation.getAccuracy());
+    boolean isLessAccurate = accuracyDelta &gt; 0;
+    boolean isMoreAccurate = accuracyDelta &lt; 0;
+    boolean isSignificantlyLessAccurate = accuracyDelta &gt; 200;
+
+    // Check if the old and new location are from the same provider
+    boolean isFromSameProvider = isSameProvider(location.getProvider(),
+            currentBestLocation.getProvider());
+
+    // Determine location quality using a combination of timeliness and accuracy
+    if (isMoreAccurate) {
+        return true;
+    } else if (isNewer &amp;&amp; !isLessAccurate) {
+        return true;
+    } else if (isNewer &amp;&amp; !isSignificantlyLessAccurate &amp;&amp; isFromSameProvider) {
+        return true;
+    }
+    return false;
+}
+
+/** Checks whether two providers are the same */
+private boolean isSameProvider(String provider1, String provider2) {
+    if (provider1 == null) {
+      return provider2 == null;
+    }
+    return provider1.equals(provider2);
+}
+</pre>
+
+
+  <h3 id="Adjusting">Adjusting the model to save battery and data exchange</h3>
+
+  <p>As you test your application, you might find that your model for providing good location and
+good performance needs some adjustment. Here are some things you might change to find a good
+balance between the two.</p>
+
+  <h4>Reduce the size of the window</h4>
+  
+  <p>A smaller window in which you listen for location updates means less interaction with GPS and
+network location services, thus, preserving battery life. But it also allows for fewer locations
+from which to choose a best estimate.</p>
+
+  <h4>Set the location providers to return updates less frequently</h4>
+  
+  <p>Reducing the rate at which new updates appear during the window can also improve battery
+efficiency, but at the cost of accuracy. The value of the trade-off depends on how your
+application is used. You can reduce the rate of updates by increasing the parameters in {@link
+android.location.LocationManager#requestLocationUpdates requestLocationUpdates()} that specify the
+interval time and minimum distance change.</p>
+
+  <h4>Restrict a set of providers</h4>
+  
+  <p>Depending on the environment where your application is used or the desired level of accuracy,
+you might choose to use only the Network Location Provider or only GPS, instead of both. Interacting
+with only one of the services reduces battery usage at a potential cost of accuracy.</p>
+
+
+  <h2>Common application cases</h2>
+  
+  <p>There are many reasons you might want to obtain the user location in your application. Below
+are a couple scenarios in which you can use the user location to enrich your application. Each
+scenario also describes good practices for when you should start and stop listening for the
+location, in order to get a good reading and help preserve battery life.</p>
+
+
+  <h3>Tagging user-created content with a location</h3>
+  
+  <p>You might be creating an application where user-created content is tagged with a location.
+Think of users sharing their local experiences, posting a review for a restaurant, or recording some
+content that can be augmented with their current location. A model of how this
+interaction might happen, with respect to the location services, is visualized in figure 2.</p>
+
+  <img src="{@docRoot}images/location/content-tagging.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> A timeline representing the window in which
+the user location is obtained and listening stops when the user consumes the current location.</p>
+  
+  <p>This lines up with the previous model of how user location is obtained in code (figure 1). For
+best location accuracy, you might choose to start listening for location updates when users begin
+creating
+the content or even when the application starts, then stop listening for updates when content is
+ready to be posted or recorded. You might need to consider how long a typical task of creating the
+content takes and judge if this duration allows for efficient collection of a location estimate.</p>
+
+
+  <h3>Helping the user decide on where to go</h3>
+  
+  <p>You might be creating an application that attempts to provide users with a set
+of options about where to go. For example, you're looking to provide a list of nearby restaurants,
+stores, and entertainment and the order of recommendations changes depending on the user
+location.</p>
+
+  <p>To accommodate such a flow, you might choose to:</p>
+  <ul>
+    <li>Rearrange recommendations when a new best estimate is obtained</li>
+    <li>Stop listening for updates if the order of recommendations has stabilized</li>
+  </ul>
+
+  <p>This kind of model is visualized in figure 3.</p>
+  
+  <img src="{@docRoot}images/location/where-to-go.png" alt="" />
+<p class="img-caption"><strong>Figure 3.</strong> A timeline representing the window in which a
+dynamic set of data is updated each time the user location updates.</p>
+
+
+
+
+<h2 id="MockData">Providing Mock Location Data</h2>
+
+<p>As you develop your application, you'll certainly need to test how well your model for obtaining
+user location works. This is most easily done using a real Android-powered device. If, however, you
+don't have a device, you can still test your location-based features by mocking location data in
+the Android emulator. There are three different ways to send your application mock location
+data: using Eclipse, DDMS, or the "geo" command in the emulator console.</p>
+
+<p class="note"><strong>Note:</strong> Providing mock location data is injected as GPS location
+data, so you must request location updates from <code>GPS_PROVIDER</code> in order for mock location
+data to work.</p>
+
+<h3 id="MockEclipse">Using Eclipse</h3>
+
+<p>Select <b>Window</b> &gt; <b>Show View</b> &gt; <b>Other</b> &gt; <b>Emulator Control</b>.</p>
+
+<p>In the Emulator Control panel, enter GPS coordinates under Location Controls as individual
+lat/long coordinates, with a GPX file for route playback, or a KML file for multiple place marks.
+(Be sure that you have a device selected in the Devices panel&mdash;available from <b>Window</b>
+&gt; <b>Show View</b> &gt; <b>Other</b> &gt; <b>Devices</b>.)</p>
+
+
+<h3 id="MockDdms">Using DDMS</h3>
+
+<p>With the DDMS tool, you can simulate location data a few different ways:</p>
+<ul>
+    <li>Manually send individual longitude/latitude coordinates to the device.</li>
+    <li>Use a GPX file describing a route for playback to the device.</li>
+    <li>Use a KML file describing individual place marks for sequenced playback to the device.</li>
+</ul>
+
+<p>For more information on using DDMS to spoof location data, see
+<a href="{@docRoot}tools/debugging/ddms.html">Using DDMS</a>.
+
+
+<h3 id="MockGeo">Using the "geo" command in the emulator console</h3>
+
+<p>To send mock location data from the command line:</p>
+
+<ol>
+  <li>Launch your application in the Android emulator and open a terminal/console in your SDK's
+<code>/tools</code> directory.</li>
+  <li>Connect to the emulator console:
+<pre>telnet localhost <em>&lt;console-port&gt;</em></pre></li>
+  <li>Send the location data:</p>
+    <ul><li><code>geo fix</code> to send a fixed geo-location.
+    <p>This command accepts a longitude and latitude in decimal degrees, and
+    an optional altitude in meters. For example:</p>
+    <pre>geo fix -121.45356 46.51119 4392</pre>
+      </li>
+      <li><code>geo nmea</code> to send an NMEA 0183 sentence.
+    <p>This command accepts a single NMEA sentence of type '$GPGGA' (fix data) or '$GPRMC' (transit
+  data).
+    For example:</p>
+    <pre>geo nmea $GPRMC,081836,A,3751.65,S,14507.36,E,000.0,360.0,130998,011.3,E*62</pre>
+      </li>
+    </ul>
+  </li>
+</ol>
+
+<p>For information about how to connect to the emulator console, see
+<a href="{@docRoot}tools/devices/emulator.html#console">Using the Emulator Console</a>.</p>
diff --git a/docs/html/guide/topics/manifest/action-element.jd b/docs/html/guide/topics/manifest/action-element.jd
index 8ad94cd..037d0dc 100644
--- a/docs/html/guide/topics/manifest/action-element.jd
+++ b/docs/html/guide/topics/manifest/action-element.jd
@@ -16,7 +16,7 @@
 An <code><a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">&lt;intent-filter&gt;</a></code> element must contain 
 one or more {@code &lt;action&gt;} elements.  If it doesn't contain any, no
 Intent objects will get through the filter.  See 
-<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and 
+<a href="{@docRoot}guide/components/intents-filters.html">Intents and 
 Intent Filters</a> for details on intent filters and the role of action
 specifications within a filter.
 </dd>
diff --git a/docs/html/guide/topics/manifest/activity-element.jd b/docs/html/guide/topics/manifest/activity-element.jd
index 9dc124b..88f226c 100644
--- a/docs/html/guide/topics/manifest/activity-element.jd
+++ b/docs/html/guide/topics/manifest/activity-element.jd
@@ -508,7 +508,7 @@
 
 <p>For more information on launch modes and their interaction with Intent
 flags, see the 
-<a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
+<a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>
 document.
 </p>
 </dd>
diff --git a/docs/html/guide/topics/manifest/category-element.jd b/docs/html/guide/topics/manifest/category-element.jd
index f392c0a..41a2cfd 100644
--- a/docs/html/guide/topics/manifest/category-element.jd
+++ b/docs/html/guide/topics/manifest/category-element.jd
@@ -12,7 +12,7 @@
 
 <dt>description:</dt>
 <dd>Adds a category name to an intent filter.  See 
-<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and 
+<a href="{@docRoot}guide/components/intents-filters.html">Intents and 
 Intent Filters</a> for details on intent filters and the role of category
 specifications within a filter.</dd>
 
diff --git a/docs/html/guide/topics/manifest/compatible-screens-element.jd b/docs/html/guide/topics/manifest/compatible-screens-element.jd
index a27c316..bb004fb 100644
--- a/docs/html/guide/topics/manifest/compatible-screens-element.jd
+++ b/docs/html/guide/topics/manifest/compatible-screens-element.jd
@@ -54,7 +54,7 @@
 &lt;supports-screens&gt;}</a> element to declare whether the system should resize your
 application for different screen sizes.</p>
 
-  <p>Also see the <a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>
+  <p>Also see the <a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>
 document for more information about how Google Play filters applications using this and
 other manifest elements.</p>
 
@@ -138,5 +138,5 @@
 <dt>see also:</dt>
 <dd><a
 href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></dd>
-<dd><a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a></dd>
+<dd><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></dd>
 </dl>
diff --git a/docs/html/guide/topics/manifest/data-element.jd b/docs/html/guide/topics/manifest/data-element.jd
index 9b0d0df..8fd91de 100644
--- a/docs/html/guide/topics/manifest/data-element.jd
+++ b/docs/html/guide/topics/manifest/data-element.jd
@@ -62,7 +62,7 @@
 <p>
 Information on how intent filters work, including the rules for how Intent objects
 are matched against filters, can be found in another document,
-<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
+<a href="{@docRoot}guide/components/intents-filters.html">Intents and
 Intent Filters</a>.  See also the 
 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html#ifs">Intent Filters</a> 
 section in the introduction.
diff --git a/docs/html/guide/topics/manifest/intent-filter-element.jd b/docs/html/guide/topics/manifest/intent-filter-element.jd
index d293400..f90541c 100644
--- a/docs/html/guide/topics/manifest/intent-filter-element.jd
+++ b/docs/html/guide/topics/manifest/intent-filter-element.jd
@@ -41,7 +41,7 @@
 
 <p>
 For a more detailed discussion of filters, see the separate  
-<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents 
+<a href="{@docRoot}guide/components/intents-filters.html">Intents 
 and Intent Filters</a> document, as well as the 
 <a href="{@docRoot}guide/topics/manifest/manifest-intro.html#ifs">Intents Filters</a> 
 section in the introduction.
diff --git a/docs/html/guide/topics/manifest/manifest-element.jd b/docs/html/guide/topics/manifest/manifest-element.jd
index 98968d7..a3d4a95 100644
--- a/docs/html/guide/topics/manifest/manifest-element.jd
+++ b/docs/html/guide/topics/manifest/manifest-element.jd
@@ -152,7 +152,7 @@
 
 <p class="caution"><strong>Caution:</strong> If your application uses Google Play's Copy 
   Protection feature, it cannot be installed to a device's SD card. However, if you use Google 
-  Play's <a href="{@docRoot}guide/market/licensing.html">Application Licensing</a> instead, 
+  Play's <a href="{@docRoot}guide/google/play/licensing.html">Application Licensing</a> instead, 
   your application <em>can</em> be installed to internal or external storage, including SD cards.</p>
 
 <p class="note"><strong>Note:</strong> By default, your application will be installed on the
diff --git a/docs/html/guide/topics/manifest/manifest-intro.jd b/docs/html/guide/topics/manifest/manifest-intro.jd
index 0f20305..a130f7d 100644
--- a/docs/html/guide/topics/manifest/manifest-intro.jd
+++ b/docs/html/guide/topics/manifest/manifest-intro.jd
@@ -345,7 +345,7 @@
 <p>
 For information on how Intent objects are tested against intent filters, 
 see a separate document, 
-<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents 
+<a href="{@docRoot}guide/components/intents-filters.html">Intents 
 and Intent Filters</a>.
 </p>
 
diff --git a/docs/html/guide/topics/manifest/supports-gl-texture-element.jd b/docs/html/guide/topics/manifest/supports-gl-texture-element.jd
index ebdd0b1..6dfc59e 100644
--- a/docs/html/guide/topics/manifest/supports-gl-texture-element.jd
+++ b/docs/html/guide/topics/manifest/supports-gl-texture-element.jd
@@ -141,7 +141,7 @@
 <dt>see also:</dt>
 <dd>
   <ul>
-    <li><a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a></li>
+    <li><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></li>
   </ul>
 </dd>
 
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index 5f0a501..f605295 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -207,7 +207,7 @@
     <li>{@link android.content.pm.FeatureInfo}</li>
     <li>{@link android.content.pm.ConfigurationInfo}</li>
     <li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html"><code>&lt;uses-permission&gt;</code></a></li>
-    <li><a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a></li>
+    <li><a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a></li>
   </ul>
 </dd>
 
@@ -501,7 +501,7 @@
 <p class="note"><strong>Note:</strong> You must use the version of
 <code>aapt</code> that is provided for the latest Platform-Tools component available. If
 you do not have the latest Platform-Tools component, download it using the <a
-href="{@docRoot}sdk/adding-components.html">Android SDK Manager</a>.
+href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>.
 </p></li>
 <li>Run <code>aapt</code> using this syntax: </li>
 </ol>
diff --git a/docs/html/guide/topics/manifest/uses-library-element.jd b/docs/html/guide/topics/manifest/uses-library-element.jd
index 2f8eb50..3ad8ddb 100644
--- a/docs/html/guide/topics/manifest/uses-library-element.jd
+++ b/docs/html/guide/topics/manifest/uses-library-element.jd
@@ -46,7 +46,7 @@
         <dd>
             Google Play filters applications based on the libraries installed on the
             user's device. For more information about filtering, see the topic
-            <a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>.
+            <a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>.
         </dd>
     </dl>
     <p>
diff --git a/docs/html/guide/topics/manifest/uses-sdk-element.jd b/docs/html/guide/topics/manifest/uses-sdk-element.jd
index 8fa39d1..29dcb56 100644
--- a/docs/html/guide/topics/manifest/uses-sdk-element.jd
+++ b/docs/html/guide/topics/manifest/uses-sdk-element.jd
@@ -3,6 +3,29 @@
 parent.link=manifest-intro.html
 @jd:body
 
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#ApiLevels">What is API Level?</a></li>
+  <li><a href="#uses">Uses of API Level in Android</a></li>
+  <li><a href="#considerations">Development Considerations</a>
+    <ol>
+      <li><a href="#fc">Application forward compatibility</a></li>
+      <li><a href="#bc">Application backward compatibility</a></li>
+      <li><a href="#platform">Selecting a platform version and API Level</a></li>
+      <li><a href="#apilevel">Declaring a minimum API Level</a></li>
+      <li><a href="#testing">Testing against higher API Levels</a></li>
+    </ol>
+  </li>
+  <li><a href="#provisional">Using a Provisional API Level</a></li>
+  <li><a href="#filtering">Filtering the Reference Documentation by API Level</a></li>
+</ol>
+</div>
+</div>
+
 <dl class="xml">
 <dt>syntax:</dt>
 <dd><pre>
@@ -25,9 +48,8 @@
 its associated Android version number (for example, it is not the same as the
 major version or the sum of the major and minor versions).</p>
 
-<p>For more information, read about 
-<a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a> and
-<a href="{@docRoot}guide/publishing/versioning.html">Versioning Your Applications</a>.
+<p>Also read the document about
+<a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a>.
 </p></dd> 
 
  <div class="sidebox-wrapper" xstyle="margin-bottom:2em;margin-top:.5em;width:90%;"> 
@@ -42,7 +64,7 @@
 attributes in each application's manifest to establish its version-compatibility
 range, then shows or hides the application based on a comparison with the API
 Level of the user's Android system version. For more information, see <a
-href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a>.</p>
+href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>.</p>
   </div>
 </div>
 
@@ -156,3 +178,403 @@
 <dd>API Level 1</dd>
 
 </dl>
+
+
+
+
+
+<!--- CONTENT FROM OLD API LEVEL DOC ---->
+
+
+
+
+<h2 id="ApiLevels">What is API Level?</h2>
+
+<p>API Level is an integer value that uniquely identifies the framework API
+revision offered by a version of the Android platform.</p>
+
+<p>The Android platform provides a framework API that applications can use to
+interact with the underlying Android system. The framework API consists of:</p>
+
+<ul>
+<li>A core set of packages and classes</li>
+<li>A set of XML elements and attributes for declaring a manifest file</li>
+<li>A set of XML elements and attributes for declaring and accessing resources</li>
+<li>A set of Intents</li>
+<li>A set of permissions that applications can request, as well as permission
+enforcements included in the system</li>
+</ul>
+
+<p>Each successive version of the Android platform can include updates to the
+Android application framework API that it delivers. </p>
+
+<p>Updates to the framework API are designed so that the new API remains
+compatible with earlier versions of the API. That is, most changes in the API
+are additive and introduce new or replacement functionality. As parts of the API
+are upgraded, the older replaced parts are deprecated but are not removed, so
+that existing applications can still use them. In a very small number of cases,
+parts of the API may be modified or removed, although typically such changes are
+only needed to ensure API robustness and application or system security. All
+other API parts from earlier revisions are carried forward without
+modification.</p>
+
+<p>The framework API that an Android platform delivers is specified using an
+integer identifier called "API Level". Each Android platform version supports
+exactly one API Level, although support is implicit for all earlier API Levels
+(down to API Level 1). The initial release of the Android platform provided 
+API Level 1 and subsequent releases have incremented the API Level.</p>
+
+<p>The following table specifies the API Level supported by each version of the
+Android platform.</p>
+
+<table>
+  <tr><th>Platform Version</th><th>API Level</th><th>VERSION_CODE</th><th>Notes</th></tr>
+ 
+     <tr><td><a href="{@docRoot}about/versions/android-4.0.3.html">Android 4.0.3</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/15/changes.html" title="Diff Report">15</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH_MR1}</td>
+    <td rowspan="2"><a href="{@docRoot}about/versions/android-4.0-highlights.html">Platform
+Highlights</a></td></tr>
+
+    <tr><td><a href="{@docRoot}about/versions/android-4.0.html">Android 4.0, 4.0.1, 4.0.2</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/14/changes.html" title="Diff Report">14</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ICE_CREAM_SANDWICH}</td>
+    </tr>
+  
+    <tr><td><a href="{@docRoot}about/versions/android-3.2.html">Android 3.2</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/13/changes.html" title="Diff Report">13</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}</td>
+    <td><!-- <a href="{@docRoot}about/versions/android-3.2-highlights.html">Platform
+Highlights</a>--></td></tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-3.1.html">Android 3.1.x</a></td>
+    <td><a href="{@docRoot}sdk/api_diff/12/changes.html" title="Diff Report">12</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB_MR1}</td>
+    <td><a href="{@docRoot}about/versions/android-3.1-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-3.0.html">Android 3.0.x</td>
+    <td><a href="{@docRoot}sdk/api_diff/11/changes.html" title="Diff Report">11</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#HONEYCOMB}</td>
+    <td><a href="{@docRoot}about/versions/android-3.0-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-2.3.3.html">Android 2.3.4<br>Android 2.3.3</td>
+    <td><a href="{@docRoot}sdk/api_diff/10/changes.html" title="Diff Report">10</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD_MR1}</td>
+    <td rowspan="2"><a href="{@docRoot}about/versions/android-2.3-highlights.html">Platform
+Highlights</a></td></tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-2.3.html">Android 2.3.2<br>Android 2.3.1<br>Android
+2.3</td>
+    <td><a href="{@docRoot}sdk/api_diff/9/changes.html" title="Diff Report">9</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#GINGERBREAD}</td>
+    </tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-2.2.html">Android 2.2.x</td>
+    <td ><a href="{@docRoot}sdk/api_diff/8/changes.html" title="Diff Report">8</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#FROYO}</td>
+    <td><a href="{@docRoot}about/versions/android-2.2-highlights.html">Platform Highlights</a></td></tr>
+  
+  <tr><td><a href="{@docRoot}about/versions/android-2.1.html">Android 2.1.x</td>
+    <td><a href="{@docRoot}sdk/api_diff/7/changes.html" title="Diff Report">7</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ECLAIR_MR1}</td>
+    <td rowspan="3" ><a href="{@docRoot}about/versions/android-2.0-highlights.html">Platform
+Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1</td>
+    <td><a href="{@docRoot}sdk/api_diff/6/changes.html" title="Diff Report">6</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ECLAIR_0_1}</td>
+    </tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-2.0.html">Android 2.0</td>
+    <td><a href="{@docRoot}sdk/api_diff/5/changes.html" title="Diff Report">5</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#ECLAIR}</td>
+    </tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-1.6.html">Android 1.6</td>
+    <td><a href="{@docRoot}sdk/api_diff/4/changes.html" title="Diff Report">4</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#DONUT}</td>
+    <td><a href="{@docRoot}about/versions/android-1.6-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-1.5.html">Android 1.5</td>
+    <td><a href="{@docRoot}sdk/api_diff/3/changes.html" title="Diff Report">3</a></td>
+    <td>{@link android.os.Build.VERSION_CODES#CUPCAKE}</td>
+    <td><a href="{@docRoot}about/versions/android-1.5-highlights.html">Platform Highlights</a></td></tr>
+    
+  <tr><td><a href="{@docRoot}about/versions/android-1.1.html">Android 1.1</td>
+    <td>2</td>
+    <td>{@link android.os.Build.VERSION_CODES#BASE_1_1}</td><td></td></tr>
+    
+  <tr><td>Android 1.0</td>
+    <td>1</td>
+    <td>{@link android.os.Build.VERSION_CODES#BASE}</td>
+    <td></td></tr>
+</table>
+
+
+<h2 id="uses">Uses of API Level in Android</h2>
+
+<p>The API Level identifier serves a key role in ensuring the best possible
+experience for users and application developers: 
+
+<ul>
+<li>It lets the Android platform describe the maximum framework API revision 
+that it supports</li>
+<li>It lets applications describe the framework API revision that they
+require</li>
+<li>It lets the system negotiate the installation of applications on the user's
+device, such that version-incompatible applications are not installed.</li>
+</ul>
+
+<p>Each Android platform version stores its API Level identifier internally, in
+the Android system itself. </p>
+
+<p>Applications can use a manifest element provided by the framework API &mdash;
+<code>&lt;uses-sdk&gt;</code> &mdash; to describe the minimum and maximum API
+Levels under which they are able to run, as well as the preferred API Level that
+they are designed to support. The element offers three key attributes:</p>
+
+<ul>
+<li><code>android:minSdkVersion</code> &mdash; Specifies the minimum API Level
+on which the application is able to run. The default value is "1".</li>
+<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
+on which the application is designed to run. In some cases, this allows the
+application to use manifest elements or behaviors defined in the target
+API Level, rather than being restricted to using only those defined 
+for the minimum API Level.</li>
+<li><code>android:maxSdkVersion</code> &mdash; Specifies the maximum API Level
+on which the application is able to run. <strong>Important:</strong> Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation before using this attribute.  </li>
+</ul>
+
+<p>For example, to specify the minimum system API Level that an application
+requires in order to run, the application would include in its manifest a
+<code>&lt;uses-sdk&gt;</code> element with a <code>android:minSdkVersion</code>
+attribute. The value of <code>android:minSdkVersion</code> would be the integer
+corresponding to the API Level of the earliest version of the Android platform
+under which the application can run. </p>
+
+<p>When the user attempts to install an application, or when revalidating an
+appplication after a system update, the Android system first checks the
+<code>&lt;uses-sdk&gt;</code> attributes in the application's manifest and
+compares the values against its own internal API Level. The system allows the
+installation to begin only if these conditions are met:</p>
+
+<ul>
+<li>If a <code>android:minSdkVersion</code> attribute is declared, its value
+must be less than or equal to the system's API Level integer. If not declared,
+the system assumes that the application requires API Level 1. </li>
+<li>If a <code>android:maxSdkVersion</code> attribute is declared, its value
+must be equal to or greater than the system's API Level integer. 
+If not declared, the system assumes that the application
+has no maximum API Level. Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation for more information about how the system handles this attribute.</li>
+</ul>
+
+<p>When declared in an application's manifest, a <code>&lt;uses-sdk&gt;</code>
+element might look like this: </p>
+
+<pre>&lt;manifest&gt;
+  &lt;uses-sdk android:minSdkVersion="5" /&gt;
+  ...
+&lt;/manifest&gt;</pre>
+
+<p>The principal reason that an application would declare an API Level in
+<code>android:minSdkVersion</code> is to tell the Android system that it is
+using APIs that were <em>introduced</em> in the API Level specified. If the
+application were to be somehow installed on a platform with a lower API Level,
+then it would crash at run-time when it tried to access APIs that don't exist.
+The system prevents such an outcome by not allowing the application to be
+installed if the lowest API Level it requires is higher than that of the
+platform version on the target device.</p>
+
+<p>For example, the {@link android.appwidget} package was introduced with API
+Level 3. If an application uses that API, it must declare a
+<code>android:minSdkVersion</code> attribute with a value of "3". The
+application will then be installable on platforms such as Android 1.5 (API Level
+3) and Android 1.6 (API Level 4), but not on the Android 1.1 (API Level 2) and
+Android 1.0 platforms (API Level 1).</p>
+
+<p>For more information about how to specify an application's API Level
+requirements, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+ section of the manifest file documentation.</p>
+
+
+<h2 id="considerations">Development Considerations</h2>
+
+<p>The sections below provide information related to API level that you should
+consider when developing your application.</p>
+
+<h3 id="fc">Application forward compatibility</h3>
+
+<p>Android applications are generally forward-compatible with new versions of
+the Android platform.</p>
+
+<p>Because almost all changes to the framework API are additive, an Android
+application developed using any given version of the API (as specified by its
+API Level) is forward-compatible with later versions of the Android platform and
+higher API levels. The application should be able to run on all later versions
+of the Android platform, except in isolated cases where the application uses a
+part of the API that is later removed for some reason. </p>
+
+<p>Forward compatibility is important because many Android-powered devices
+receive over-the-air (OTA) system updates. The user may install your
+application and use it successfully, then later receive an OTA update to a new
+version of the Android platform. Once the update is installed, your application
+will run in a new run-time version of the environment, but one that has the API
+and system capabilities that your application depends on. </p>
+
+<p>In some cases, changes <em>below</em> the API, such those in the underlying
+system itself, may affect your application when it is run in the new
+environment. For that reason it's important for you, as the application
+developer, to understand how the application will look and behave in each system
+environment. To help you test your application on various versions of the Android
+platform, the Android SDK includes multiple platforms that you can download.
+Each platform includes a compatible system image that you can run in an AVD, to
+test your application. </p>
+
+<h3 id="bc">Application backward compatibility</h3>
+
+<p>Android applications are not necessarily backward compatible with versions of
+the Android platform older than the version against which they were compiled.
+</p>
+
+<p>Each new version of the Android platform can include new framework APIs, such
+as those that give applications access to new platform capabilities or replace
+existing API parts. The new APIs are accessible to applications when running on
+the new platform and, as mentioned above, also when running on later versions of
+the platform, as specified by API Level. Conversely, because earlier versions of
+the platform do not include the new APIs, applications that use the new APIs are
+unable to run on those platforms.</p>
+
+<p>Although it's unlikely that an Android-powered device would be downgraded to
+a previous version of the platform, it's important to realize that there are
+likely to be many devices in the field that run earlier versions of the
+platform. Even among devices that receive OTA updates, some might lag and
+might not receive an update for a significant amount of time. </p>
+
+<h3 id="platform">Selecting a platform version and API Level</h3>
+
+<p>When you are developing your application, you will need to choose
+the platform version against which you will compile the application. In
+general, you should compile your application against the lowest possible
+version of the platform that your application can support. 
+
+<p>You can determine the lowest possible platform version by compiling the
+application against successively lower build targets. After you determine the
+lowest version, you should create an AVD using the corresponding platform
+version (and API Level) and fully test your application. Make sure to declare a
+<code>android:minSdkVersion</code> attribute in the application's manifest and
+set its value to the API Level of the platform version. </p>
+
+<h3 id="apilevel">Declaring a minimum API Level</h3>
+
+<p>If you build an application that uses APIs or system features introduced in
+the latest platform version, you should set the
+<code>android:minSdkVersion</code> attribute to the API Level of the latest
+platform version. This ensures that users will only be able to install your
+application if their devices are running a compatible version of the Android
+platform. In turn, this ensures that your application can function properly on
+their devices. </p>
+
+<p>If your application uses APIs introduced in the latest platform version but
+does <em>not</em> declare a <code>android:minSdkVersion</code> attribute, then
+it will run properly on devices running the latest version of the platform, but
+<em>not</em> on devices running earlier versions of the platform. In the latter
+case, the application will crash at runtime when it tries to use APIs that don't
+exist on the earlier versions.</p>
+
+<h3 id="testing">Testing against higher API Levels</h3>
+
+<p>After compiling your application, you should make sure to test it on the
+platform specified in the application's <code>android:minSdkVersion</code>
+attribute. To do so, create an AVD that uses the platform version required by
+your application. Additionally, to ensure forward-compatibility, you should run
+and test the application on all platforms that use a higher API Level than that
+used by your application. </p>
+
+<p>The Android SDK includes multiple platform versions that you can use,
+including the latest version, and provides an updater tool that you can use to
+download other platform versions as necessary. </p>
+
+<p>To access the updater, use the <code>android</code> command-line tool,
+located in the &lt;sdk&gt;/tools directory. You can launch the SDK updater by
+executing <code>android sdk</code>. You can
+also simply double-click the android.bat (Windows) or android (OS X/Linux) file.
+In ADT, you can also access the updater by selecting 
+<strong>Window</strong>&nbsp;>&nbsp;<strong>Android SDK
+Manager</strong>.</p>
+
+<p>To run your application against different platform versions in the emulator,
+create an AVD for each platform version that you want to test. For more
+information about AVDs, see <a
+href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>. If
+you are using a physical device for testing, ensure that you know the API Level
+of the Android platform it runs. See the table at the top of this document for
+a list of platform versions and their API Levels. </p>
+
+<h2 id="provisional">Using a Provisional API Level</h2>
+
+<p>In some cases, an "Early Look" Android SDK platform may be available. To let
+you begin developing on the platform although the APIs may not be final, the
+platform's API Level integer will not be specified. You must instead use the
+platform's <em>provisional API Level</em> in your application manifest, in order
+to build applications against the platform. A provisional API Level is not an
+integer, but a string matching the codename of the unreleased platform version.
+The provisional API Level will be specified in the release notes for the Early
+Look SDK release notes and is case-sensitive.</p>
+
+<p>The use of a provisional API Level is designed to protect developers and
+device users from inadvertently publishing or installing applications based on
+the Early Look framework API, which may not run properly on actual devices
+running the final system image.</p>
+
+<p>The provisional API Level will only be valid while using the Early Look SDK
+and can only be used to run applications in the emulator. An application using
+the provisional API Level can never be installed on an Android device. At the
+final release of the platform, you must replace any instances of the provisional
+API Level in your application manifest with the final platform's actual API
+Level integer.</p>
+
+
+<h2 id="filtering">Filtering the Reference Documentation by API Level</h2>
+
+<p>Reference documentation pages on the Android Developers site offer a "Filter
+by API Level" control in the top-right area of each page. You can use the 
+control to show documentation only for parts of the API that are actually 
+accessible to your application, based on the API Level that it specifies in 
+the <code>android:minSdkVersion</code> attribute of its manifest file. </p>
+
+<p>To use filtering, select the checkbox to enable filtering, just below the
+page search box. Then set the "Filter by API Level" control to the same API
+Level as specified by your application. Notice that APIs introduced in a later
+API Level are then grayed out and their content is masked, since they would not
+be accessible to your application. </p>
+
+<p>Filtering by API Level in the documentation does not provide a view
+of what is new or introduced in each API Level &mdash; it simply provides a way
+to view the entire API associated with a given API Level, while excluding API
+elements introduced in later API Levels.</p>
+
+<p>If you decide that you don't want to filter the API documentation, just
+disable the feature using the checkbox. By default, API Level filtering is
+disabled, so that you can view the full framework API, regardless of API Level.
+</p>
+
+<p>Also note that the reference documentation for individual API elements
+specifies the API Level at which each element was introduced. The API Level 
+for packages and classes is specified as "Since &lt;api level&gt;" at the 
+top-right corner of the content area on each documentation page. The API Level 
+for class members is specified in their detailed description headers, 
+at the right margin. </p>
+
+
+
+
+
+
+
+
+
diff --git a/docs/html/guide/topics/media/camera.jd b/docs/html/guide/topics/media/camera.jd
index 7d72491..a63270a 100644
--- a/docs/html/guide/topics/media/camera.jd
+++ b/docs/html/guide/topics/media/camera.jd
@@ -162,8 +162,7 @@
 &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
 </pre>
 <p>For more information about getting user location, see
-<a href="{@docRoot}guide/topics/location/obtaining-user-location.html">Obtaining User
-Location</a>.</p>
+<a href="{@docRoot}guide/topics/location/strategies.html">Location Strategies</a>.</p>
   </li>
 </ul>
 
diff --git a/docs/html/guide/topics/media/index.jd b/docs/html/guide/topics/media/index.jd
index 0e0412a..a750c9a 100644
--- a/docs/html/guide/topics/media/index.jd
+++ b/docs/html/guide/topics/media/index.jd
@@ -1,63 +1,56 @@
-page.title=Multimedia and Camera
+page.title=Media and Camera
+page.landing=true
+page.landing.intro=Add video, audio, and photo capabilities to your app with Android's robust APIs for playing and recording media. 
+page.landing.image=
+
 @jd:body
 
-    <div id="qv-wrapper">
-    <div id="qv">
+<div class="landing-docs">
 
-<h2>Topics</h2>
-<ol>
-<li><a href="{@docRoot}guide/topics/media/mediaplayer.html">Media Playback</a></li>
-<li><a href="{@docRoot}guide/topics/media/jetplayer.html">JetPlayer</a></li>
-<li><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></li>
-<li><a href="{@docRoot}guide/topics/media/audio-capture.html">Audio Capture</a></li>
-</ol>
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+    <a
+href="http://android-developers.blogspot.com/2010/06/allowing-applications-to-play-nicer.html">
+      <h4>Allowing applications to play nice(r) with each other: Handling remote control
+buttons</h4>
+      <p>If your media playback application creates a media playback service, just like Music, that
+responds to the media button events, how will the user know where those events are going to? Music,
+or your new application?</p>
+    </a>
 
-<h2>Key classes</h2>
-<ol>
-<li>{@link android.media.MediaPlayer}</li>
-<li>{@link android.media.JetPlayer}</li>
-<li>{@link android.hardware.Camera}</li>
-<li>{@link android.media.MediaRecorder}</li>
-<li>{@link android.media.AudioManager}</li>
-<li>{@link android.media.SoundPool}</li>
-</ol>
+    <a
+href="http://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html">
+      <h4>Making Android Games that Play Nice</h4>
+      <p>Making a game on Android is easy. Making a great game for a mobile, multitasking, often
+multi-core, multi-purpose system like Android is trickier. Even the best developers frequently make
+mistakes in the way they interact with the Android system and with other applications</p>
+    </a>
 
-<h2>See also</h2>
-<ol>
-<li></li>
-<li><a href="{@docRoot}guide/appendix/media-formats.html">Android Supported Media Formats</a></li>
-<li><a href="{@docRoot}guide/topics/media/jet/jetcreator_manual.html">JetCreator User
-Manual</a></li>
-</ol>
+    <a href="http://android-developers.blogspot.com/2011/12/more-android-games-that-play-nice.html">
+      <h4>More Android Games that Play Nice</h4>
+      <p>Android users get used to using the back key. We expect the volume keys to work in some
+intuitive fashion. We expect that the home key behaves in a manner consistent with the Android
+navigation paradigm.</p>
+    </a>
+  </div>
 
-</div>
-</div>
+  <div class="col-6">
+    <h3>Training</h3>
 
-<p>The Android multimedia framework includes support for capturing and playing audio, video and
-images in a variety of common media types, so that you can easily integrate them into your
-applications. You can play audio or video from media files stored in your application's resources,
-from standalone files in the file system, or from a data stream arriving over a
-network connection, all using the {@link android.media.MediaPlayer} or {@link
-android.media.JetPlayer} APIs. You can also record audio, video and take pictures using the {@link
-android.media.MediaRecorder} and {@link android.hardware.Camera} APIs if supported by the device
-hardware.</p>
+    <a href="http://developer.android.com/training/camera/index.html">
+      <h4>Capturing Photos</h4>
+      <p>This class gets you clicking fast with some super-easy ways of leveraging existing camera
+applications. In later lessons, you dive deeper and learn how to control the camera hardware
+directly.</p>
+    </a>
 
-<p>The following topics show you how to use the Android framework to implement multimedia capture
-and playback.</p>
+    <a href="http://developer.android.com/training/managing-audio/index.html">
+      <h4>Managing Audio Playback</h4>
+      <p>After this class, you will be able to build apps that respond to hardware audio key
+presses, which request audio focus when playing audio, and which respond appropriately to changes in
+audio focus caused by the system or other applications.</p>
+    </a>
 
-<dl>
-  <dt><strong><a href="{@docRoot}guide/topics/media/mediaplayer.html">Media Playback</a></strong>
-  </dt>
-  <dd>How to play audio and video in your application.</dd>
+  </div>
 
-  <dt><strong><a href="{@docRoot}guide/topics/media/jetplayer.html">JetPlayer</a></strong></dt>
-  <dd>How to play interactive audio and video in your application using content created with
-JetCreator.</dd>
-
-  <dt><strong><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></strong></dt>
-  <dd>How to use a device camera to take pictures or video in your application.</dd>
-
-  <dt><strong><a href="{@docRoot}guide/topics/media/audio-capture.html">Audio
-Capture</a></strong></dt>
-  <dd>How to record sound in your application.</dd>
-</dl>
\ No newline at end of file
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/media/mediaplayer.jd b/docs/html/guide/topics/media/mediaplayer.jd
index 002d113..45a58a7 100644
--- a/docs/html/guide/topics/media/mediaplayer.jd
+++ b/docs/html/guide/topics/media/mediaplayer.jd
@@ -457,7 +457,7 @@
 </pre>
 
 <p>For more information, see the documentation about <a
-href="{@docRoot}guide/topics/fundamentals/services.html#Foreground">Services</a> and
+href="{@docRoot}guide/components/services.html#Foreground">Services</a> and
 <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Bar Notifications</a>.</p>
 
 
diff --git a/docs/html/guide/topics/network/sip.jd b/docs/html/guide/topics/network/sip.jd
deleted file mode 100644
index 600da78..0000000
--- a/docs/html/guide/topics/network/sip.jd
+++ /dev/null
@@ -1,490 +0,0 @@
-page.title=Session Initiation Protocol
-@jd:body
-<div id="qv-wrapper">
-<div id="qv">
-    <h2>In this document</h2>
-    <ol>
-
-      <li><a href="#requirements">Requirements and Limitations</a></li>
-      <li><a href="#classes">Classes and Interfaces</a></li>
-      <li><a href="#manifest">Creating the Manifest</a></li>
-      <li><a href="#manager">Creating a SIP Manager</a></li>
-      <li><a href="#profiles">Registering with a SIP Server</a></li>
-      <li><a href="#audio">Making an Audio Call</a></li>
-      <li><a href="#receiving">Receiving Calls</a></li>   
-      <li><a href="#testing">Testing SIP Applications</a></li>
-    </ol>
-    
-  <h2>Key classes</h2>
-    <ol>
-      <li>{@link android.net.sip.SipManager}</li>
-      <li>{@link android.net.sip.SipProfile}</li>
-      <li>{@link android.net.sip.SipAudioCall}</li>
-
-    </ol>
-    
-   <h2>Related samples</h2>
-   <ol>
-     <li> <a href="{@docRoot}resources/samples/SipDemo/index.html"> SipDemo</a></li>
-   </ol>
-  </div>
-</div>
-
-<p>Android provides an API that supports the Session Initiation Protocol (SIP).
-This lets you add SIP-based internet telephony features to your applications.
-Android includes a full SIP protocol stack and integrated call management
-services that let applications easily set up outgoing and incoming voice calls,
-without having to manage sessions, transport-level communication, or audio
-record or playback directly.</p>
-
-<p>Here are examples of the types of applications that might use the SIP API:</p>
-<ul>
-  <li>Video conferencing.</li>
-  <li>Instant messaging.</li>
-</ul>
-<h2 id="requirements">Requirements and Limitations</h2>
-<p>Here are the requirements for developing a SIP application:</p>
-<ul>
-  
-  <li>You must have a mobile device that is running Android 2.3 or higher. </li>
-  
-  <li>SIP runs over a wireless data connection, so your device must have a data
-connection (with a mobile data service or Wi-Fi)</span>. This means that you
-can't test on AVD&#8212;you can only test on a physical device. For details, see
-<a href="#testing">Testing SIP Applications</a>.</li>
-
-  <li>Each participant in the application's communication session must have a
-SIP account. There are many different SIP providers that offer SIP accounts.</li>
-</ul>
-
-
-<h2 id="classes">SIP API Classes and Interfaces</h2>
-
-<p>Here is a summary of the classes and one interface
-(<code>SipRegistrationListener</code>) that are included in the Android SIP
-API:</p>
-
-<table>
-  <thead>
-    <tr>
-      <th>Class/Interface</th>
-      <th>Description</th>
-    </tr>
-  </thead>
-  <tbody>
-    <tr>
-      <td>{@link android.net.sip.SipAudioCall}</td>
-      <td>Handles an Internet audio call over SIP.</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipAudioCall.Listener}</td>
-      <td>Listener for events relating to a SIP call, such as when a call is being
-received ("on ringing") or a call is outgoing ("on calling").</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipErrorCode}</td>
-      <td>Defines error codes returned during SIP actions.</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipManager}</td>
-      <td>Provides APIs for SIP tasks, such as initiating SIP connections, and provides access
-to related SIP services.</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipProfile}</td>
-      <td>Defines a SIP profile, including a SIP account, domain and server information.
-</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipProfile.Builder}</td>
-      <td>Helper class for creating a SipProfile.</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipSession}</td>
-      <td>Represents a SIP session that is associated with a SIP dialog or a standalone transaction
-not within a dialog.</td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipSession.Listener}</td>
-      <td>Listener for events relating to a SIP session, such as when a session is being registered
-("on registering") or a call is outgoing ("on calling"). </td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipSession.State}</td>
-      <td>Defines SIP session states, such as "registering", "outgoing call", and "in call". </td>
-    </tr>
-    <tr>
-      <td>{@link android.net.sip.SipRegistrationListener}</td>
-      <td>An interface that is a listener for SIP registration events.</td>
-    </tr>
-  </tbody>
-</table>
-
-<h2 id="manifest">Creating the Manifest</h2>
-
-<p>If you are developing an application that uses the SIP API, remember that the
-feature is supported only on Android 2.3 (API level 9) and higher versions of
-the platform. Also, among devices running Android 2.3 (API level 9) or higher,
-not all devices will offer SIP support.</p>
-
-<p>To use SIP, add the following permissions to your application's manifest:</p>
-<ul>
-  <li><code>android.permission.USE_SIP</code></li>
-  <li><code>android.permission.INTERNET</code></li>
-</ul>
-
-<p> To ensure that your application can only be installed on devices that are
-capable of supporting SIP,  add the following to your application's
-manifest:</p>
-
-<ul>
-  <li><code>&lt;uses-sdk android:minSdkVersion=&quot;9&quot; /&gt;</code>. This 
- indicates that your application requires   Android 2.3 or higher. For more
-information, see <a href="{@docRoot}guide/appendix/api-levels.html">API
-Levels</a> and the documentation for the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a
-> element.</li>
-</ul>
-
-<p>To control how your application is filtered from devices that do not support
-SIP (for example, on Google Play), add the following to your application's
-manifest:</p>
-
-<ul>
-
-  <li><code>&lt;uses-feature android:name=&quot;android.hardware.sip.voip&quot;
-/&gt;</code>. This states that your application uses the SIP API. The
-declaration should include an <code>android:required</code> attribute that
-indicates whether you want the application to be filtered from devices that do
-not offer SIP   support. Other <code>&lt;uses-feature&gt;</code> declarations
-may also be   needed, depending on your implementation. For more information,
-see the   documentation for the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-
-feature&gt;</a> element.</li>
-  
-</ul>
-<p>If your application is designed to receive calls, you must also define a receiver ({@link android.content.BroadcastReceiver} subclass) in the application's manifest: </p>
-
-<ul>
-  <li><code>&lt;receiver android:name=&quot;.IncomingCallReceiver&quot; android:label=&quot;Call Receiver&quot;/&gt;</code></li>
-</ul>
-<p>Here are excerpts from the <strong>SipDemo</strong> manifest:</p>
-
-
-
-<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-          package=&quot;com.example.android.sip&quot;&gt;
-  ...
-     &lt;receiver android:name=&quot;.IncomingCallReceiver&quot; android:label=&quot;Call Receiver&quot;/&gt;
-  ...
-  &lt;uses-sdk android:minSdkVersion=&quot;9&quot; /&gt;
-  &lt;uses-permission android:name=&quot;android.permission.USE_SIP&quot; /&gt;
-  &lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
-  ...
-  &lt;uses-feature android:name=&quot;android.hardware.sip.voip&quot; android:required=&quot;true&quot; /&gt;
-  &lt;uses-feature android:name=&quot;android.hardware.wifi&quot; android:required=&quot;true&quot; /&gt;
-  &lt;uses-feature android:name=&quot;android.hardware.microphone&quot; android:required=&quot;true&quot; /&gt;
-&lt;/manifest&gt;
-</pre>
-
-
-<h2 id="manager">Creating a SipManager</h2>
-
-<p>To use the SIP API, your application must create a {@link
-android.net.sip.SipManager} object. The {@link android.net.sip.SipManager} takes
-care of the following in your application:</p>
-
-<ul>
-  <li>Initiating SIP sessions.</li>
-  <li>Initiating and receiving calls.</li>
-  <li>Registering and unregistering with a SIP provider.</li>
-  <li>Verifying session connectivity.</li>
-</ul>
-<p>You instantiate a new {@link android.net.sip.SipManager} as follows:</p>
-<pre>public SipManager mSipManager = null;
-...
-if(mSipManager == null) {
-    mSipManager = SipManager.newInstance(this);
-}</pre>
-<h2 id="profiles">Registering with a SIP Server</h2>
-
-<p>A typical Android SIP application involves one or more users, each of whom
-has a SIP account. In an Android SIP application, each SIP account  is
-represented by  a {@link android.net.sip.SipProfile} object.</p>
-
-<p>A {@link android.net.sip.SipProfile} defines a SIP profile, including a SIP
-account, and domain and server information. The profile associated with the SIP
-account on the device running the application is called the <em>local
-profile</em>. The profile that the session is connected to is called the
-<em>peer profile</em>. When your SIP application logs into the SIP server with
-the local {@link android.net.sip.SipProfile}, this effectively registers the
-device as the location to send SIP calls to for your SIP address.</p>
-
-<p>This section shows how to create a {@link android.net.sip.SipProfile},
-register it with a SIP server, and track registration events.</p>
-
-<p>You  create a {@link android.net.sip.SipProfile} object as follows:</p>
-<pre>
-public SipProfile mSipProfile = null;
-...
-
-SipProfile.Builder builder = new SipProfile.Builder(username, domain);
-builder.setPassword(password);
-mSipProfile = builder.build();</pre>
-
-<p>The following code excerpt opens the local profile for making calls and/or
-receiving generic SIP calls. The caller can  make subsequent calls through
-<code>mSipManager.makeAudioCall</code>. This excerpt also sets the action
-<code>android.SipDemo.INCOMING_CALL</code>, which will be used by an intent
-filter when the device receives a call (see <a href="#intent_filter">Setting up
-an intent filter to receive calls</a>). This is the registration step:</p>
-
-<pre>Intent intent = new Intent();
-intent.setAction(&quot;android.SipDemo.INCOMING_CALL&quot;);
-PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA);
-mSipManager.open(mSipProfile, pendingIntent, null);</pre>
-
-<p>Finally, this code sets a <code>SipRegistrationListener</code> on the {@link
-android.net.sip.SipManager}. This tracks whether the {@link
-android.net.sip.SipProfile} was successfully registered with your SIP service
-provider:<br>
-</p>
-
-<pre>mSipManager.setRegistrationListener(mSipProfile.getUriString(), new SipRegistrationListener() {
-
-public void onRegistering(String localProfileUri) {
-    updateStatus(&quot;Registering with SIP Server...&quot;);
-}
-
-public void onRegistrationDone(String localProfileUri, long expiryTime) {
-    updateStatus(&quot;Ready&quot;);
-}
-   
-public void onRegistrationFailed(String localProfileUri, int errorCode,
-    String errorMessage) {
-    updateStatus(&quot;Registration failed.  Please check settings.&quot;);
-}</pre>
-
-
-<p>When your application is done using a profile, it should close it to free
-associated objects into memory and unregister the device from the server. For
-example:</p>
-
-<pre>public void closeLocalProfile() {
-    if (mSipManager == null) {
-       return;
-    }
-    try {
-       if (mSipProfile != null) {
-          mSipManager.close(mSipProfile.getUriString());
-       }
-     } catch (Exception ee) {
-       Log.d(&quot;WalkieTalkieActivity/onDestroy&quot;, &quot;Failed to close local profile.&quot;, ee);
-     }
-}</pre>
-
-<h2 id="audio">Making an Audio Call</h2>
-<p>To make an audio call, you must have the following in place:</p>
-<ul>
-
-  <li>A {@link android.net.sip.SipProfile} that is making the call (the
-&quot;local profile&quot;), and a valid SIP address to receive the call (the
-&quot;peer profile&quot;). 
-  
-  <li>A {@link android.net.sip.SipManager} object. </li>
-</ul>
-
-<p>To make an audio call, you should set up a {@link
-android.net.sip.SipAudioCall.Listener}. Much of the client's interaction with
-the SIP stack happens through listeners. In this snippet, you see how the {@link
-android.net.sip.SipAudioCall.Listener} sets things up after the call is
-established:</p>
-
-<pre>
-SipAudioCall.Listener listener = new SipAudioCall.Listener() {
-  
-   &#64;Override
-   public void onCallEstablished(SipAudioCall call) {
-      call.startAudio();
-      call.setSpeakerMode(true);
-      call.toggleMute();
-         ...
-   }
-   
-   &#64;Override
-   public void onCallEnded(SipAudioCall call) {
-      // Do something.
-   }
-};</pre>
-
-<p>Once you've set up the {@link android.net.sip.SipAudioCall.Listener}, you can
-make the  call. The {@link android.net.sip.SipManager} method
-<code>makeAudioCall</code> takes the following parameters:</p>
-
-<ul>
-  <li>A local SIP profile (the caller).</li>
-  <li>A peer SIP profile (the user being called).</li>
-  
-  <li>A {@link android.net.sip.SipAudioCall.Listener} to listen to the call
-events from {@link android.net.sip.SipAudioCall}. This can be <code>null</code>,
-but as shown above, the listener is used to set things up once the call is
-established.</li>
-  
-  <li>The timeout value, in seconds.</li>
-</ul>
-<p>For example:</p>
-<pre> call = mSipManager.makeAudioCall(mSipProfile.getUriString(), sipAddress, listener, 30);</pre>
-
-<h2 id="receiving">Receiving Calls</h2>
-
-<p>To receive calls, a SIP application must include a subclass of {@link
-android.content.BroadcastReceiver} that has the ability to respond to an intent
-indicating that there is an incoming call. Thus, you must do the following in
-your application:</p>
-
-<ul>
-  <li>In <code>AndroidManifest.xml</code>, declare a
-<code>&lt;receiver&gt;</code>. In <strong>SipDemo</strong>, this is
-<code>&lt;receiver android:name=&quot;.IncomingCallReceiver&quot;
-android:label=&quot;Call Receiver&quot;/&gt;</code>.</li>
-  
-  <li>Implement the receiver, which is a subclass of {@link
-android.content.BroadcastReceiver}. In <strong>SipDemo</strong>, this is
-<code>IncomingCallReceiver</code>.</li>
-  
-  <li>Initialize the local profile ({@link android.net.sip.SipProfile}) with a
-pending intent that fires your receiver when someone calls the local profile.
-</li>
-  
-  <li>Set up an intent filter that filters by the action that represents an
-incoming call. In <strong>SipDemo</strong>, this action is
-<code>android.SipDemo.INCOMING_CALL</code>. </li>
-</ul>
-<h4 id="BroadcastReceiver">Subclassing BroadcastReceiver</h4>
-
-<p>To receive calls, your SIP application must subclass {@link
-android.content.BroadcastReceiver}. <span id="internal-source-marker_0.">The
-Android system handles incoming SIP calls and broadcasts an &quot;incoming
-call&quot;<code></code> intent  (as defined by the application) when it receives
-a call.</span> Here is the subclassed {@link android.content.BroadcastReceiver}
-code from <strong>SipDemo</strong>. To see the full example, go to <a
-href="{@docRoot}resources/samples/SipDemo/index.html">SipDemo sample</a>, which
-is included in the SDK samples. For information on downloading and installing
-the SDK samples, see <a
-href="{@docRoot}resources/samples/get.html">
-Getting the Samples</a>. </p>
-
-<pre>/*** Listens for incoming SIP calls, intercepts and hands them off to WalkieTalkieActivity.
- */
-public class IncomingCallReceiver extends BroadcastReceiver {
-    /**
-     * Processes the incoming call, answers it, and hands it over to the
-     * WalkieTalkieActivity.
-     * @param context The context under which the receiver is running.
-     * @param intent The intent being received.
-     */
-    &#64;Override
-    public void onReceive(Context context, Intent intent) {
-        SipAudioCall incomingCall = null;
-        try {
-            SipAudioCall.Listener listener = new SipAudioCall.Listener() {
-                &#64;Override
-                public void onRinging(SipAudioCall call, SipProfile caller) {
-                    try {
-                        call.answerCall(30);
-                    } catch (Exception e) {
-                        e.printStackTrace();
-                    }
-                }
-            };
-            WalkieTalkieActivity wtActivity = (WalkieTalkieActivity) context;
-            incomingCall = wtActivity.mSipManager.takeAudioCall(intent, listener);
-            incomingCall.answerCall(30);
-            incomingCall.startAudio();
-            incomingCall.setSpeakerMode(true);
-            if(incomingCall.isMuted()) {
-                incomingCall.toggleMute();
-            }
-            wtActivity.call = incomingCall;
-            wtActivity.updateStatus(incomingCall);
-        } catch (Exception e) {
-            if (incomingCall != null) {
-                incomingCall.close();
-            }
-        }
-    }
-}
-</pre>
-
-<h4 id="intent_filter">Setting up an intent filter to receive calls</h4>
-
-<p>When the SIP service  receives a new call, it  sends out an intent with the
-action  string provided by the application. In SipDemo, this action string is
-<code>android.SipDemo.INCOMING_CALL</code>. </p>
-<p>This code excerpt from <strong>SipDemo</strong> shows how the {@link
-android.net.sip.SipProfile} object gets created with a pending intent based on
-the action string <code>android.SipDemo.INCOMING_CALL</code>. The
-<code>PendingIntent</code> object   will perform a broadcast when the {@link
-android.net.sip.SipProfile}  receives a call:</p> 
-
-<pre>
-public SipManager mSipManager = null;
-public SipProfile mSipProfile = null;
-...
-
-Intent intent = new Intent(); 
-intent.setAction(&quot;android.SipDemo.INCOMING_CALL&quot;); 
-PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, Intent.FILL_IN_DATA); 
-mSipManager.open(mSipProfile, pendingIntent, null);</pre>
-
-<p>The broadcast will be intercepted by the intent filter, which will then fire
-the receiver (<code>IncomingCallReceiver</code>). You can specify an intent
-filter in your application's manifest file, or do it in code as in the <strong>SipDemo</strong>
-sample application's <code>onCreate()</code> method
-of the application's <code>Activity</code>:</p>
-
-<pre>
-public class WalkieTalkieActivity extends Activity implements View.OnTouchListener {
-...
-    public IncomingCallReceiver callReceiver;
-    ...
-
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-
-       IntentFilter filter = new IntentFilter();
-       filter.addAction(&quot;android.SipDemo.INCOMING_CALL&quot;);
-       callReceiver = new IncomingCallReceiver();
-       this.registerReceiver(callReceiver, filter);
-       ...
-    }
-    ...
-}
-</pre>
-
-
-<h2 id="testing">Testing SIP Applications</h2>
-
-<p>To test SIP applications, you need the following:</p>
-<ul>
-<li>A mobile device that is running Android 2.3 or higher. SIP runs over
-wireless, so you must test on an actual device. Testing on AVD won't work.</li>
-<li>A SIP account. There are many different SIP providers that offer SIP accounts.</li>
-<li>If you are placing a call, it must also be to a valid SIP account. </li>
-</ul>
-<p>To test a SIP application:</p>
-<ol>
-
-<li>On your device, connect to wireless (<strong>Settings > Wireless & networks
-> Wi-Fi > Wi-Fi settings</strong>)</li>
-<li>Set up your mobile device for testing, as described in <a
-href="{@docRoot}guide/developing/device.html">Developing on a Device</a>.</li>
-<li>Run your application on your mobile device, as described in <a
-href="{@docRoot}guide/developing/device.html">Developing on a Device</a>.</li>
-
-<li>If you are using Eclipse, you can view the application log output in Eclipse
-using LogCat (<strong>Window > Show View > Other > Android >
-LogCat</strong>).</li>
-</ol>
-
diff --git a/docs/html/guide/topics/nfc/advanced-nfc.jd b/docs/html/guide/topics/nfc/advanced-nfc.jd
deleted file mode 100644
index b43b559..0000000
--- a/docs/html/guide/topics/nfc/advanced-nfc.jd
+++ /dev/null
@@ -1,300 +0,0 @@
-page.title=Advanced NFC
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#tag-tech">Working with Supported Tag Technologies</a>
-      <ol>
-        <li><a href="#tech-intent">Working with tag technologies and the ACTION_TECH_DISCOVERED
-        intent</a></li>
-        <li><a href="#read-write">Reading and writing to tags</a></li>
-      </ol></li>
-    <li><a href="#foreground-dispatch">Using the Foreground Dispatch System</a></li>
-  </ol>
-</div>
-</div>
-
-<p>This document describes advanced NFC topics, such as working with various tag technologies,
-writing to NFC tags, and foreground dispatching, which allows an application in the foreground to
-handle intents even when other applications filter for the same ones.</p>
-
-<h2 id="tag-tech">Working with Supported Tag Technologies</h2>
-<p>When working with NFC tags and Android-powered devices, the main format you use to read
-and write data on tags is NDEF. When a device scans a tag with NDEF data, Android provides support
-in parsing the message and delivering it in an {@link android.nfc.NdefMessage} when
-possible. There are cases, however, when you scan a tag that does not contain
-NDEF data or when the NDEF data could not be mapped to a MIME type or URI.
-In these cases, you need to open communication directly with the tag and read and write to it with
-your own protocol (in raw bytes). Android provides generic support for these use cases with the
-{@link android.nfc.tech} package, which is described in <a href="#tech-table">Table 1</a>. You can
-use the {@link android.nfc.Tag#getTechList getTechList()} method to determine the technologies
-supported by the tag and create the corresponding {@link android.nfc.tech.TagTechnology}
-object with one of classes provided by {@link android.nfc.tech} </p>
-
-<p class="table-caption" id="table1">
-<strong>Table 1.</strong> Supported tag technologies</p>
-<table id="tech-table">
-
-    <tr>
-      <th>Class</th>
-
-      <th>Description</th>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.TagTechnology}</td>
-
-      <td>The interface that all tag technology classes must implement.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.NfcA}</td>
-
-      <td>Provides access to NFC-A (ISO 14443-3A) properties and I/O operations.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.NfcB}</td>
-
-      <td>Provides access to NFC-B (ISO 14443-3B) properties and I/O operations.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.NfcF}</td>
-
-      <td>Provides access to NFC-F (JIS 6319-4) properties and I/O operations.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.NfcV}</td>
-
-      <td>Provides access to NFC-V (ISO 15693) properties and I/O operations.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.IsoDep}</td>
-
-      <td>Provides access to ISO-DEP (ISO 14443-4) properties and I/O operations.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.Ndef}</td>
-
-      <td>Provides access to NDEF data and operations on NFC tags that have been formatted as
-      NDEF.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.NdefFormatable}</td>
-
-      <td>Provides a format operations for tags that may be NDEF formattable.</td>
-    </tr>
-  </table>
-<p>The following tag technlogies are not required to be supported by Android-powered devices.</p>
-  <p class="table-caption" id="table2">
-<strong>Table 2.</strong> Optional supported tag technologies</p>
-  <table>
-    <tr>
-      <th>Class</th>
-
-      <th>Description</th>
-    </tr>
-    <tr>
-      <td>{@link android.nfc.tech.MifareClassic}</td>
-
-      <td>Provides access to MIFARE Classic properties and I/O operations, if this Android device
-      supports MIFARE.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.nfc.tech.MifareUltralight}</td>
-
-      <td>Provides access to MIFARE Ultralight properties and I/O operations, if this Android
-      device supports MIFARE.</td>
-    </tr>
-  </table>
-
-<h3 id="tech-intent">Working with tag technologies and the ACTION_TECH_DISCOVERED intent</h3>
-<p>When a device scans a tag that has NDEF data on it, but could not be mapped to a MIME or URI,
-the tag dispatch system tries to start an activity with the {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}
-intent. The {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} is also used when a tag
-with non-NDEF data is scanned. Having this fallback allows you to work with the data on the tag
-directly if the tag dispatch system could not parse it for you. The basic steps when working with
-tag technologies are as follows:</p>
-
-<ol>
-  <li>Filter for an {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent specifying the
-tag technologies that you want to handle. See <a
-href="{@docRoot}guide/topics/nfc/nfc.html#tech-disc">Filtering for NFC
-intents</a> for more information. In general, the tag dispatch system tries to start a {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent when an NDEF message
-cannot be mapped to a MIME type or URI, or if the tag scanned did not contain NDEF data. For
-more information on how this is determined, see <a
-href="{@docRoot}guide/topics/nfc/nfc.html#tag-dispatch">The Tag Dispatch System</a>.</li>
-  <li>When your application receives the intent, obtain the {@link android.nfc.Tag} object from
-the intent:
-<pre>Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);</pre></li>
-<li>Obtain an instance of a {@link android.nfc.tech.TagTechnology}, by calling one of the
-<code>get</code> factory methods of the classes in the {@link android.nfc.tech} package. You can
-enumerate the supported technologies of the tag by calling {@link android.nfc.Tag#getTechList
-getTechList()} before calling a <code>get</code> factory method. For example, to obtain an instance
-of {@link android.nfc.tech.MifareUltralight} from a {@link android.nfc.Tag}, do the following:
-
-<pre>
-MifareUltralight.get(intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
-</pre>
-</li>
-</ol>
-
-
-
-<h3 id="read-write">Reading and writing to tags</h3>
-
-<p>Reading and writing to an NFC tag involves obtaining the tag from the intent and
-opening communication with the tag. You must define your own protocol stack to read and write data
-to the tag. Keep in mind, however, that you can still read and write NDEF data when working
-directly with a tag. It is up to you how you want to structure things. The
-following example shows how to work with a MIFARE Ultralight tag.</p>
-
-<pre>
-package com.example.android.nfc;
-
-import android.nfc.Tag;
-import android.nfc.tech.MifareUltralight;
-import android.util.Log;
-import java.io.IOException;
-import java.nio.charset.Charset;
-
-public class MifareUltralightTagTester {
-
-    private static final String TAG = MifareUltralightTagTester.class.getSimpleName();
-
-    public void writeTag(Tag tag, String tagText) {
-        MifareUltralight ultralight = MifareUltralight.get(tag);
-        try {
-            ultralight.connect();
-            ultralight.writePage(4, "abcd".getBytes(Charset.forName("US-ASCII")));
-            ultralight.writePage(5, "efgh".getBytes(Charset.forName("US-ASCII")));
-            ultralight.writePage(6, "ijkl".getBytes(Charset.forName("US-ASCII")));
-            ultralight.writePage(7, "mnop".getBytes(Charset.forName("US-ASCII")));
-        } catch (IOException e) {
-            Log.e(TAG, "IOException while closing MifareUltralight...", e);
-        } finally {
-            try {
-                ultralight.close();
-            } catch (IOException e) {
-                Log.e(TAG, "IOException while closing MifareUltralight...", e);
-            }
-        }
-    }
-
-    public String readTag(Tag tag) {
-        MifareUltralight mifare = MifareUltralight.get(tag);
-        try {
-            mifare.connect();
-            byte[] payload = mifare.readPages(4);
-            return new String(payload, Charset.forName("US-ASCII"));
-        } catch (IOException e) {
-            Log.e(TAG, "IOException while writing MifareUltralight
-            message...", e);
-        } finally {
-            if (mifare != null) {
-               try {
-                   mifare.close();
-               }
-               catch (IOException e) {
-                   Log.e(TAG, "Error closing tag...", e);
-               }
-            }
-        }
-        return null;
-    }
-}
-</pre>
-
-</pre>
-
-  <h2 id="foreground-dispatch">Using the Foreground Dispatch System</h2>
-
-  <p>The foreground dispatch system allows an activity to intercept an intent and claim
-priority over other activities that handle the same intent. Using this system involves
-  constructing a few data structures for the Android system to be able to send the appropriate
-  intents to your application. To enable the foreground dispatch system:</p>
-
-  <ol>
-    <li>Add the following code in the <code>onCreate()</code> method of your activity:
-
-      <ol>
-        <li>Create a {@link android.app.PendingIntent} object so the Android system can populate it
-        with the details of the tag when it is scanned.
-          <pre>
-PendingIntent pendingIntent = PendingIntent.getActivity(
-    this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);
-</pre>
-        </li>
-
-        <li>Declare intent filters to handle the intents that you want to intercept. The foreground
-        dispatch system checks the specified intent filters with the intent that is received when
-        the device scans a tag. If it matches, then your application handles the intent. If it does
-        not match, the foreground dispatch system falls back to the intent dispatch system.
-        Specifying a <code>null</code> array of intent filters and technology filters, specifies
-        that you want to filter for all tags that fallback to the <code>TAG_DISCOVERED</code>
-        intent. The code snippet below handles all MIME types for <code>NDEF_DISCOVERED</code>. You
-        should only handle the ones that you need.
-<pre>
-IntentFilter ndef = new IntentFilter(NfcAdapter.ACTION_NDEF_DISCOVERED);
-    try {
-        ndef.addDataType("*/*");    /* Handles all MIME based dispatches.
-                                       You should specify only the ones that you need. */
-    }
-    catch (MalformedMimeTypeException e) {
-        throw new RuntimeException("fail", e);
-    }
-   intentFiltersArray = new IntentFilter[] {ndef, };
-</pre>
-        </li>
-
-        <li>Set up an array of tag technologies that your application wants to handle. Call the
-        <code>Object.class.getName()</code> method to obtain the class of the technology that you
-        want to support.
-<pre>
-techListsArray = new String[][] { new String[] { NfcF.class.getName() } };
-</pre>
-        </li>
-      </ol>
-    </li>
-
-    <li>Override the following activity lifecycle callbacks and add logic to enable and disable the
-    foreground dispatch when the activity loses ({@link android.app.Activity#onPause onPause()})
-    and regains ({@link android.app.Activity#onResume onResume()}) focus. {@link
-    android.nfc.NfcAdapter#enableForegroundDispatch enableForegroundDispatch()} must be called from
-the main thread and only  when the activity is in the foreground (calling in {@link
-android.app.Activity#onResume onResume()} guarantees this). You also need to implement the {@link
-    android.app.Activity#onNewIntent onNewIntent} callback to process the data from the scanned NFC
-    tag.</li>
-
-<pre>
-public void onPause() {
-    super.onPause();
-    mAdapter.disableForegroundDispatch(this);
-}
-
-public void onResume() {
-    super.onResume();
-    mAdapter.enableForegroundDispatch(this, pendingIntent, intentFiltersArray, techListsArray);
-}
-
-public void onNewIntent(Intent intent) {
-    Tag tagFromIntent = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
-    //do something with tagFromIntent
-}
-</pre>
-    </li>
-  </ol>
-
-  <p>See the <a href=
-"{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">
-ForegroundDispatch</a> sample from API Demos for the complete sample.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/nfc/index.jd b/docs/html/guide/topics/nfc/index.jd
deleted file mode 100644
index b86d72d..0000000
--- a/docs/html/guide/topics/nfc/index.jd
+++ /dev/null
@@ -1,33 +0,0 @@
-page.title=Near Field Communication
-@jd:body
-
-  <p>Near Field Communication (NFC) is a set of short-range wireless technologies, typically
-  requiring a distance of 4cm or less to initiate a connection. NFC allows you to share small
-  payloads of data between an NFC tag and an Android-powered device, or between two Android-powered
-  devices.
-
-  <p>Tags can range in complexity. Simple tags offer just read and write semantics, sometimes with
-  one-time-programmable areas to make the card read-only. More complex tags offer math operations,
-  and have cryptographic hardware to authenticate access to a sector. The most sophisticated tags
-  contain operating environments, allowing complex interactions with code executing on the tag.
-  The data stored in the tag can also be written in a variety of formats, but many of the Android
-  framework APIs are based around a <a href="http://www.nfc-forum.org/">NFC Forum</a> standard
-  called NDEF (NFC Data Exchange Format).</p>
-
-  <dl>
-    <dt><strong><a href="{@docRoot}guide/topics/nfc/nfc.html">NFC Basics</a></strong></dt>
-    <dd>This document describes how Android handles discovered NFC tags and how it notifies
-applications of data that is relevant to the application. It also goes over how to work with the
-NDEF data in your applications and gives an overview of the framework APIs that support the basic
-NFC feature set of Android.</dd>
-
-    <dt><strong><a href="{@docRoot}guide/topics/nfc/advanced-nfc.html">Advanced
-    NFC</a></strong></dt>
-    <dd>This document goes over the APIs that enable use of the various tag technologies that
-    Android supports. When you are not working with NDEF data, or when you are working with NDEF
-    data that Android cannot fully understand, you have to manually read or write to the tag in raw
-    bytes using your own protocol stack. In these cases, Android provides support to detect
-    certain tag technologies and to open communication with the tag using your own protocol
-    stack.</dd>
-  </dl>
-</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/nfc/nfc.jd b/docs/html/guide/topics/nfc/nfc.jd
deleted file mode 100644
index 834656a..0000000
--- a/docs/html/guide/topics/nfc/nfc.jd
+++ /dev/null
@@ -1,923 +0,0 @@
-page.title=NFC Basics
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#tag-dispatch">The Tag Dispatch System</a>
-      <ol>
-        <li><a href="#ndef">How NFC tags are mapped to MIME types and URIs</a></li>
-        <li><a href="#dispatching">How NFC Tags are Dispatched to Applications</a></li>
-      </ol>
-    </li>
-    <li><a href="#manifest">Requesting NFC Access in the Android Manifest</a></li>
-    <li><a href="#filtering-intents">Filtering for Intents</a>
-      <ol>
-        <li><a href="#ndef-disc">ACTION_NDEF_DISCOVERED</a></li>
-        <li><a href="#tech-disc">ACTION_TECH_DISCOVERED</a></li>
-        <li><a href="#tag-disc">ACTION_TAG_DISCOVERED</a></li>
-        <li><a href="#obtain-info">Obtaining information from intents</a></li>
-      </ol>
-    </li>
-    <li><a href="#creating-records">Creating Common Types of NDEF Records</a>
-      <ol>
-        <li><a href="#abs-uri">TNF_ABSOLUTE_URI</a></li>
-        <li><a href="#mime">TNF_MIME_MEDIA</a></li>
-        <li><a href="#well-known-text">TNF_WELL_KNOWN with RTD_TEXT</a></li>
-        <li><a href="#well-known-uri">TNF_WELL_KNOWN with RTD_URI</a></li>
-        <li><a href="#ext-type">TNF_EXTERNAL_TYPE</a></li>
-        <li><a href="#aar">Android Application Records</a></li>
-      </ol>
-    </li>
-    <li><a href="#p2p">Beaming NDEF Messages to Other Devices</a></li>
-  </ol>
-</div>
-</div>
-
-<p>This document describes the basic NFC tasks you perform in Android. It explains how to send and
-receive NFC data in the form of NDEF messages and describes the Android framework APIs that support
-these features. For more advanced topics, including a discussion of working with non-NDEF data,
-see <a href="{@docRoot}guide/topics/nfc/advanced-nfc.html">Advanced NFC</a>.</p>
-
-
-<p>There are two major uses cases when working with NDEF data and Android:</p>
-
-<ul>
-  <li>Reading NDEF data from an NFC tag</li>
-  <li>Beaming NDEF messages from one device to another with <a href="#p2p">Android
-Beam&trade;</a></li>
-</ul>
-
-
-<p>Reading NDEF data from an NFC tag is handled with the <a href="#tag-dispatch">tag dispatch
-system</a>, which analyzes discovered NFC tags, appropriately categorizes the data, and starts
-an application that is interested in the categorized data. An application that wants to handle the
-scanned NFC tag can <a href="#filtering-intents">declare an intent filter</a> and
-request to handle the data.</p>
-
-<p>The Android Beam&trade; feature allows a device to push an NDEF message onto
-another device by physically tapping the devices together. This interaction provides an easier way
-to send data than other wireless technologies like Bluetooth, because with NFC, no manual device
-discovery or pairing is required. The connection is automatically started when two devices come
-into range. Android Beam is available through a set of NFC APIs, so any application can transmit
-information between devices. For example, the Contacts, Browser, and YouTube applications use
-Android Beam to share contacts, web pages, and videos with other devices.
-</p>
-
-
-<h2 id="tag-dispatch">The Tag Dispatch System</h2>
-
-<p>Android-powered devices are usually looking for NFC tags when the screen
-is unlocked, unless NFC is disabled in the device's Settings menu.
-When an Android-powered device discovers an NFC tag, the desired behavior
-is to have the most appropriate activity handle the intent without asking the user what application
-to use. Because devices scan NFC tags at a very short range, it is likely that making users manually
-select an activity would force them to move the device away from the tag and break the connection.
-You should develop your activity to only handle the NFC tags that your activity cares about to
-prevent the Activity Chooser from appearing.</p>
-
-<p>To help you with this goal, Android provides a special tag dispatch system that analyzes scanned
-NFC tags, parses them, and tries to locate applications that are interested in the scanned data. It
-does this by:</p>
-
-<ol>
-  <li>Parsing the NFC tag and figuring out the MIME type or a URI that identifies the data payload
-  in the tag.</li>
-  <li>Encapsulating the MIME type or URI and the payload into an intent. These first two
-  steps are described in <a href="#ndef">How NFC tags are mapped to MIME types and URIs</a>.</li>
-  <li>Starts an activity based on the intent. This is described in
-  <a href="#dispatching">How NFC Tags are Dispatched to Applications</a>.</li>
-</ol>
-
-<h3 id="ndef">How NFC tags are mapped to MIME types and URIs</h3>
-<p>Before you begin writing your NFC applications, it is important to understand the different
-types of NFC tags, how the tag dispatch system parses NFC tags, and the special work that the tag
-dispatch system does when it detects an NDEF message. NFC tags come in a
-wide array of technologies and can also have data written to them in many different ways.
-Android has the most support for the NDEF standard, which is defined by the <a
-href="http://www.nfc-forum.org/home">NFC Forum</a>.
-</p>
-
-<p>NDEF data is encapsulated inside a message ({@link android.nfc.NdefMessage}) that contains one
-or more records ({@link android.nfc.NdefRecord}). Each NDEF record must be well-formed according to
-the specification of the type of record that you want to create. Android
-also supports other types of tags that do not contain NDEF data, which you can work with by using
-the classes in the {@link android.nfc.tech} package. To learn more
-about these technologies, see the <a href="{@docRoot}guide/topics/nfc/advanced-nfc.html">Advanced
-NFC</a> topic. Working with these other types of tags involves
-writing your own protocol stack to communicate with the tags, so we recommend using NDEF when
-possible for ease of development and maximum support for Android-powered devices.
-</p>
-
-<p class="note"><strong>Note:</strong>
-To download complete NDEF specifications, go to the <a
-href="http://www.nfc-forum.org/specs/spec_license">NFC Forum Specification Download</a> site and see
-<a href="#creating-records">Creating common types of NDEF records</a> for examples of how to
-construct NDEF records. </p>
-
-<p>Now that you have some background in NFC tags, the following sections describe in more detail how
-Android handles NDEF formatted tags. When an Android-powered device scans an NFC tag containing NDEF
-formatted data, it parses the message and tries to figure out the data's MIME type or identifying
-URI. To do this, the system reads the first {@link android.nfc.NdefRecord} inside the {@link
-android.nfc.NdefMessage} to determine how to interpret the entire NDEF message (an NDEF message can
-have multiple NDEF records). In a well-formed NDEF message, the first {@link android.nfc.NdefRecord}
-contains the following fields:
-<dl>
-  <dt><strong>3-bit TNF (Type Name Format)</strong></dt>
-  <dd>Indicates how to interpret the variable length type field. Valid values are described in
-described in <a href="#table1">Table 1</a>.</dd>
-
-  <dt><strong>Variable length type</strong></dt>
-  <dd>Describes the type of the record. If using {@link android.nfc.NdefRecord#TNF_WELL_KNOWN}, use
-this field to specify the Record Type Definition (RTD). Valid RTD values are described in <a
-href="#table2">Table 2</a>.</dd>
-
-<dt><strong>Variable length ID</strong></dt>
-<dd>A unique identifier for the record. This field is not used often, but
-if you need to uniquely identify a tag, you can create an ID for it.</dd>
-
-<dt><strong>Variable length payload</strong></dt>
-<dd>The actual data payload that you want to read or write. An NDEF
-message can contain multiple NDEF records, so don't assume the full payload is in the first NDEF
-record of the NDEF message.</dd>
-
-</dl>
-
-<p>The tag dispatch system uses the TNF and type fields to try to map a MIME type or URI to the
-NDEF message. If successful, it encapsulates that information inside of a {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent along with the actual payload. However, there
-are cases when the tag dispatch system cannot determine the type of data based on the first NDEF
-record. This happens when the NDEF data cannot be mapped to a MIME type or URI, or when the
-NFC tag does not contain NDEF data to begin with. In such cases, a {@link
-android.nfc.Tag} object that has information about the tag's technologies and the payload are
-encapsulated inside of a {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent instead.</p>
-
-<p>
-<a href="#table1">Table 1.</a> describes how the tag dispatch system maps TNF and type
-fields to MIME types or URIs. It also describes which TNFs cannot be mapped to a MIME type or URI.
-In these cases, the tag dispatch system falls back to
-{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.
-
-<p>For example, if the tag dispatch system encounters a record of type {@link
-android.nfc.NdefRecord#TNF_ABSOLUTE_URI}, it maps the variable length type field of that record
-into a URI. The tag dispatch system encapsulates that URI in the data field of an {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent along with other information about the tag,
-such as the payload. On the other hand, if it encounters a record of type {@link
-android.nfc.NdefRecord#TNF_UNKNOWN}, it creates an intent that encapsulates the tag's technologies
-instead.</p>
-
-
-<p class="table-caption" id="table1">
-  <strong>Table 1.</strong> Supported TNFs and their mappings</p>
-<table id="mappings">
-  <tr>
-    <th>Type Name Format (TNF)</th>
-    <th>Mapping</th>
-  </tr>
-  <tr>
-    <td>{@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI}</td>
-    <td>URI based on the type field.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#TNF_EMPTY}</td>
-    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE}</td>
-    <td>URI based on the URN in the type field. The URN is encoded into the NDEF type field in
-        a shortened form: <code><em>&lt;domain_name&gt;:&lt;service_name&gt;</em></code>.
-        Android maps this to a URI in the form:
-        <code>vnd.android.nfc://ext/<em>&lt;domain_name&gt;:&lt;service_name&gt;</em></code>.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#TNF_MIME_MEDIA}</td>
-    <td>MIME type based on the type field.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#TNF_UNCHANGED}</td>
-    <td>Invalid in the first record, so falls back to
-        {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#TNF_UNKNOWN}</td>
-    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#TNF_WELL_KNOWN}</td>
-    <td>MIME type or URI depending on the Record Type Definition (RTD), which you set in the
-type field. See <a  href="#well_known">Table 2.</a> for more information on
-available RTDs and their mappings.</td>
-  </tr>
-</table>
-
-<p class="table-caption" id="table2">
-  <strong>Table 2.</strong> Supported RTDs for TNF_WELL_KNOWN and their
-mappings</p>
-<table id="well-known">
-  <tr>
-    <th>Record Type Definition (RTD)</th>
-    <th>Mapping</th>
-  </tr>
-  <tr>
-    <td>{@link android.nfc.NdefRecord#RTD_ALTERNATIVE_CARRIER}</td>
-    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_CARRIER}</td>
-    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_REQUEST}</td>
-    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#RTD_HANDOVER_SELECT}</td>
-    <td>Falls back to {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#RTD_SMART_POSTER}</td>
-    <td>URI based on parsing the payload.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#RTD_TEXT}</td>
-    <td>MIME type of <code>text/plain</code>.</td>
-  </tr>
-    <td>{@link android.nfc.NdefRecord#RTD_URI}</td>
-    <td>URI based on payload.</td>
-  </tr>
-</table>
-
-<h3 id="dispatching">How NFC Tags are Dispatched to Applications</h3>
-
-<p>When the tag dispatch system is done creating an intent that encapsulates the NFC tag and its
-identifying information, it sends the intent to an interested application that
-filters for the intent. If more than one application can handle the intent, the Activity Chooser
-is presented so the user can select the Activity. The tag dispatch system defines three intents,
-which are listed in order of highest to lowest priority:</p>
-
-<ol>
-  <li>
-      {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}: This intent is used to start an
-Activity when a tag that contains an NDEF payload is scanned and is of a recognized type. This is
-the highest priority intent, and the tag dispatch system tries to start an Activity with this
-intent before any other intent, whenever possible.
-  </li>
-
-    <li>{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}: If no activities register to
-handle the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
-intent, the tag dispatch system tries to start an application with this intent. This
-intent is also directly started (without starting {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} first) if the tag that is scanned
-contains NDEF data that cannot be mapped to a MIME type or URI, or if the tag does not contain NDEF
-data but is of a known tag technology.
-</li>
-
-    <li>{@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}: This intent is started
-    if no activities handle the {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}
-    intents.</li>
-  </ol>
-
-<p>The basic way the tag dispatch system works is as follows:</p>
-
-<ol>
-  <li>Try to start an Activity with the intent that was created by the tag dispatch system
-when parsing the NFC tag (either
-{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}).</li>
-  <li>If no activities filter for that intent, try to start an Activity with the next
-  lowest priority intent (either {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} or {@link
-android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}) until an application filters for the
-  intent or until the tag dispatch system tries all possible intents.</li>
-  <li>If no applications filter for any of the intents, do nothing.</li>
-</ol>
-
-<img src="{@docRoot}images/nfc_tag_dispatch.png" />
-
-<p class="figure"><strong>Figure 1. </strong> Tag Dispatch System</p>
-
-
-<p>Whenever possible, work with NDEF messages and the {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent, because it is the most specific out of
-the three. This intent allows you to start your application at a more appropriate time than the
-other two intents, giving the user a better experience.</p>
-
-<h2 id="manifest">Requesting NFC Access in the Android Manifest</h2>
-
-  <p>Before you can access a device's NFC hardware and properly handle NFC intents, declare these
-  items in your <code>AndroidManifest.xml</code> file:</p>
-
-  <ul>
-    <li>The NFC <code>&lt;uses-permission&gt;</code> element to access the NFC hardware:
-      <pre>
-&lt;uses-permission android:name="android.permission.NFC" /&gt;
-</pre>
-    </li>
-
-    <li>The minimum SDK version that your application can support. API level 9 only supports
-    limited tag dispatch via {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, and only gives
-    access to NDEF messages via the {@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} extra. No
-    other tag properties or I/O operations are accessible. API level 10
-    includes comprehensive reader/writer support as well as foreground NDEF pushing, and API level
-    14 provides an easier way to push NDEF messages to other devices with Android Beam and extra
-    convenience methods to create NDEF records.
-<pre class="pretty-print">
-&lt;uses-sdk android:minSdkVersion="10"/&gt;
-</pre>
-    </li>
-
-    <li>The <code>uses-feature</code> element so that your application shows up in Google
-Play only for devices that have NFC hardware:
-      <pre>
-&lt;uses-feature android:name="android.hardware.nfc" android:required="true" /&gt;
-</pre>
-<p>If your application uses NFC functionality, but that functionality is not crucial to your
-application, you can omit the <code>uses-feature</code> element and check for NFC avalailbility at
-runtime by checking to see if {@link android.nfc.NfcAdapter#getDefaultAdapter getDefaultAdapter()}
-is <code>null</code>.</p>
-    </li>
-  </ul>
-
-  <h2 id="filtering-intents">Filtering for NFC Intents</h2>
-
-  <p>To start your application when an NFC tag that you want to handle is scanned, your application
-can filter for one, two, or all three of the NFC intents in the Android manifest. However, you
-usually want to filter for the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intent for the
-most control of when your application starts. The {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent is a fallback for {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} when no applications filter for
- {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or for when the payload is not
-NDEF. Filtering for {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} is usually too general of a
-category to filter on.  Many applications will filter for {@link
-android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} before {@link
-android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}, so your application has a low probability of
-starting. {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} is only available as a last resort
-for applications to filter for in the cases where no other applications are installed to handle the
-{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} or {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED}intent.</p>
-
-<p>Because NFC tag deployments vary and are many times not under your control, this is not always
-possible, which is why you can fallback to the other two intents when necessary. When you have
-control over the types of tags and data written, it is recommended that you use NDEF to format your
-tags. The following sections describe how to filter for each type of intent.</p>
-
-
-<h3 id="ndef-disc">ACTION_NDEF_DISCOVERED</h3>
-<p>
-To filter for {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED} intents, declare the
-intent filter along with the type of data that you want to filter for. The
-following example filters for {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
-intents with a MIME type of <code>text/plain</code>:
-</p>
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
-    &lt;category android:name="android.intent.category.DEFAULT"/&gt;
-    &lt;data android:mimeType="text/plain" /&gt;
-&lt;/intent-filter&gt;
-</pre>
-<p>The following example filters for a URI in the form of
-<code>http://developer.android.com/index.html</code>.
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
-    &lt;category android:name="android.intent.category.DEFAULT"/&gt;
-   &lt;data android:scheme="http"
-              android:host="developer.android.com"
-              android:pathPrefix="/index.html" />
-&lt;/intent-filter&gt;
-</pre>
-
-
-  <h3 id="tech-disc">ACTION_TECH_DISCOVERED</h3>
-
-  <p>If your activity filters for the {@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent,
-you must create an XML resource file that specifies the technologies that your activity supports
-within a <code>tech-list</code> set. Your activity is
-  considered a match if a <code>tech-list</code> set is a subset of the technologies that are
-  supported by the tag, which you can obtain by calling {@link android.nfc.Tag#getTechList
-  getTechList()}.</p>
-
-  <p>For example, if the tag that is scanned supports MifareClassic, NdefFormatable, and NfcA, your
-  <code>tech-list</code> set must specify all three, two, or one of the technologies (and nothing
-  else) in order for your activity to be matched.</p>
-
-  <p>The following sample defines all of the technologies. You can remove the ones that you do not
-  need. Save this file (you can name it anything you wish) in the
-  <code>&lt;project-root&gt;/res/xml</code> folder.</p>
-  <pre>
-&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
-    &lt;tech-list&gt;
-        &lt;tech&gt;android.nfc.tech.IsoDep&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.NfcA&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.NfcB&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.NfcF&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.NfcV&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.NdefFormatable&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.MifareClassic&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.MifareUltralight&lt;/tech&gt;
-    &lt;/tech-list&gt;
-&lt;/resources&gt;
-</pre>
-
-  <p>You can also specify multiple <code>tech-list</code> sets. Each of the <code>tech-list</code>
-  sets is considered independently, and your activity is considered a match if any single
-  <code>tech-list</code> set is a subset of the technologies that are returned by {@link
-  android.nfc.Tag#getTechList getTechList()}. This provides <code>AND</code> and <code>OR</code>
-  semantics for matching technologies. The following example matches tags that can support the
-  NfcA and Ndef technologies or can support the NfcB and Ndef technologies:</p>
-  <pre>
-&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
-    &lt;tech-list&gt;
-        &lt;tech&gt;android.nfc.tech.NfcA&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
-    &lt;/tech-list&gt;
-&lt;/resources&gt;
-
-&lt;resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"&gt;
-    &lt;tech-list&gt;
-        &lt;tech&gt;android.nfc.tech.NfcB&lt;/tech&gt;
-        &lt;tech&gt;android.nfc.tech.Ndef&lt;/tech&gt;
-    &lt;/tech-list&gt;
-&lt;/resources&gt;
-</pre>
-
-  <p>In your <code>AndroidManifest.xml</code> file, specify the resource file that you just created
-  in the <code>&lt;meta-data&gt;</code> element inside the <code>&lt;activity&gt;</code>
-  element like in the following example:</p>
-  <pre>
-&lt;activity&gt;
-...
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.TECH_DISCOVERED"/&gt;
-&lt;/intent-filter&gt;
-
-&lt;meta-data android:name="android.nfc.action.TECH_DISCOVERED"
-    android:resource="@xml/nfc_tech_filter" /&gt;
-...
-&lt;/activity&gt;
-</pre>
-
-<p>For more information about working with tag technologies and the {@link
-android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED} intent, see <a
-href="{@docRoot}guide/topics/nfc/advanced-nfc.html#tag-tech">Working with Supported Tag
-Technologies</a> in the Advanced NFC document.</p>
-<h3 id="tag-disc">ACTION_TAG_DISCOVERED</h3>
-<p>To filter for {@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED} use the following intent
-filter:</p>
-
-
-<pre>&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.TAG_DISCOVERED"/&gt;
-&lt;/intent-filter&gt;
-</pre>
-
-
-
-<h3 id="obtain-info">Obtaining information from intents</h3>
-
-<p>If an activity starts because of an NFC intent, you can obtain information about the scanned NFC
-tag from the intent. Intents can contain the following extras depending on the tag that was scanned:
-
-<ul>
-  <li>{@link android.nfc.NfcAdapter#EXTRA_TAG} (required): A {@link android.nfc.Tag} object
-representing the scanned tag.</li>
-  <li>{@link android.nfc.NfcAdapter#EXTRA_NDEF_MESSAGES} (optional): An array of NDEF messages
-parsed from the tag. This extra is mandatory on {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED
-intents.</li>
-  <li>{@link android.nfc.NfcAdapter#EXTRA_ID} (optional): The low-level ID of the tag.</li></ul>
-
-<p>To obtain these extras, check to see if your activity was launched with one of
-the NFC intents to ensure that a tag was scanned, and then obtain the extras out of the
-intent. The following example checks for the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
-intent and gets the NDEF messages from an intent extra.</p>
-
-<pre>
-public void onResume() {
-    super.onResume();
-    ...
-    if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
-        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
-        if (rawMsgs != null) {
-            msgs = new NdefMessage[rawMsgs.length];
-            for (int i = 0; i &lt; rawMsgs.length; i++) {
-                msgs[i] = (NdefMessage) rawMsgs[i];
-            }
-        }
-    }
-    //process the msgs array
-}
-</pre>
-
-<p>Alternatively, you can obtain a {@link android.nfc.Tag} object from the intent, which will
-contain the payload and allow you to enumerate the tag's technologies:</p>
-
-<pre>Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);</pre>
-
-
-<h2 id="creating-records">Creating Common Types of NDEF Records</h2>
-<p>This section describes how to create common types of NDEF records to help you when writing to
-NFC tags or sending data with Android Beam. It also describes how to create the corresponding
-intent filter for the record. All of these NDEF record examples should be in the first NDEF
-record of the NDEF message that you are writing to a tag or beaming.</p>
-
-<h3 id="abs-uri">TNF_ABSOLUTE_URI</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_ABSOLUTE_URI} NDEF record, which is
-stored as the first record inside of an {@link android.nfc.NdefMessage}:</p>
-
-<pre>
-NdefRecord uriRecord = new NdefRecord(
-    NdefRecord.TNF_ABSOLUTE_URI ,
-    "http://developer.android.com/index.html".getBytes(Charset.forName("US-ASCII")),
-    new byte[0], new byte[0]);
-</pre>
-
-<p>the intent filter would look like this:</p>
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
-    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-    &lt;data android:scheme="http"
-        android:host="developer.android.com"
-        android:pathPrefix="/index.html" /&gt;
-&lt;/intent-filter&gt;
-</pre>
-
-
-<h3 id="mime">TNF_MIME_MEDIA</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_MIME_MEDIA} NDEF record, which is stored as
-the first record inside
-of an {@link android.nfc.NdefMessage}:</p>
-<pre>
-NdefRecord mimeRecord = new NdefRecord(
-    NdefRecord.TNF_MIME_MEDIA ,
-    "application/com.example.android.beam".getBytes(Charset.forName("US-ASCII")),
-    new byte[0], "Beam me up, Android!".getBytes(Charset.forName("US-ASCII")));
-</pre>
-
-<p>the intent filter would look like this:</p>
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
-    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-    &lt;data android:mimeType="application/com.example.android.beam" /&gt;
-&lt;/intent-filter&gt;
-</pre>
-
-
-<h3 id="well-known-text">TNF_WELL_KNOWN with RTD_TEXT</h3>
-
-<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
-the first record inside of an {@link android.nfc.NdefMessage}:</p>
-<pre>
-public NdefRecord createTextRecord(String payload, Locale locale, boolean encodeInUtf8) {
-    byte[] langBytes = locale.getLanguage().getBytes(Charset.forName("US-ASCII"));
-    Charset utfEncoding = encodeInUtf8 ? Charset.forName("UTF-8") : Charset.forName("UTF-16");
-    byte[] textBytes = payload.getBytes(utfEncoding);
-    int utfBit = encodeInUtf8 ? 0 : (1 &lt;&lt; 7);
-    char status = (char) (utfBit + langBytes.length);
-    byte[] data = new byte[1 + langBytes.length + textBytes.length];
-    data[0] = (byte) status;
-    System.arraycopy(langBytes, 0, data, 1, langBytes.length);
-    System.arraycopy(textBytes, 0, data, 1 + langBytes.length, textBytes.length);
-    NdefRecord record = new NdefRecord(NdefRecord.TNF_WELL_KNOWN,
-    NdefRecord.RTD_TEXT, new byte[0], data);
-    return record;
-}
-</pre>
-
-<p>the intent filter would look like this:</p>
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
-    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-    &lt;data android:mimeType="text/plain" /&gt;
-&lt;/intent-filter&gt;
-</pre>
-
-
-<h3 id="well-known-uri">TNF_WELL_KNOWN with RTD_URI</h3>
-
-<p>Given the following {@link android.nfc.NdefRecord#TNF_WELL_KNOWN} NDEF record, which is stored as
-the first record inside of an {@link android.nfc.NdefMessage}:</p>
-
-<pre>
-byte[] uriField = "example.com".getBytes(Charset.forName("US-ASCII"));
-byte[] payload = new byte[uriField.length + 1];              //add 1 for the URI Prefix
-byte payload[0] = 0x01;                                      //prefixes http://www. to the URI
-System.arraycopy(uriField, 0, payload, 1, uriField.length);  //appends URI to payload
-NdefRecord rtdUriRecord = new NdefRecord(
-    NdefRecord.TNF_WELL_KNOWN, NdefRecord.RTD_URI, new byte[0], payload);
-</pre>
-
-<p>the intent filter would look like this:</p>
-
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
-    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-    &lt;data android:scheme="http"
-        android:host="example.com"
-        android:pathPrefix="" /&gt;
-&lt;/intent-filter&gt;
-</pre>
-
-<h3 id="ext-type">TNF_EXTERNAL_TYPE</h3>
-<p>Given the following {@link android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} NDEF record, which is stored
-as the first record inside of an {@link android.nfc.NdefMessage}:</p>
-
-<pre>
-byte[] payload;
-...
-NdefRecord mimeRecord = new NdefRecord(
-    NdefRecord.TNF_EXTERNAL_TYPE, "example.com:externalType", new byte[0], payload);
-</pre>
-
-<p>the intent filter would look like this:</p>
-<pre>
-&lt;intent-filter&gt;
-    &lt;action android:name="android.nfc.action.NDEF_DISCOVERED" /&gt;
-    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-    &lt;data android:scheme="vnd.android.nfc"
-        android:host="ext"
-        android:pathPrefix="/example.com:externalType"/&gt;
-&lt;/intent-filter&gt;
-</pre>
-
-
-<p>Use TNF_EXTERNAL_TYPE for more generic NFC tag deployments to better support both
-Android-powered and non-Android-powered devices.</p>
-
-<p class="note"><strong>Note</strong>: URNs for {@link
-android.nfc.NdefRecord#TNF_EXTERNAL_TYPE} have a canonical format of:
-<code>urn:nfc:ext:example.com:externalType</code>, however the NFC Forum RTD specification
-declares that the <code>urn:nfc:ext:</code> portion of the URN must be ommitted from the
-NDEF record. So all you need to provide is the domain (<code>example.com</code> in the example)
-and type (<code>externalType</code> in the example) separated by a colon.
-When dispatching TNF_EXTERNAL_TYPE, Android converts the <code>urn:nfc:ext:example.com:externalType</code> URN to a
-<code>vnd.android.nfc://ext/example.com:externalType</code> URI, which is what the intent filter in the example
-declares.</p>
-
-<h3 id="aar">Android Application Records</h3>
-
-<p>
-Introduced in Android 4.0 (API level 14), an Android Application Record (AAR) provides a stronger
-certainty that your application is started when an NFC tag is scanned. An AAR has the package name
-of an application embedded inside an NDEF record. You can add an AAR to any NDEF record of your NDEF message,
-because Android searches the entire NDEF message for AARs. If it finds an AAR, it starts the application based
-on the package name inside the AAR. If the application is not present on the device,
-Google Play is launched to download the application.</p>
-
-<p>AARs are useful if you want to prevent other applications from filtering for the same intent and
-potentially handling specific tags that you have deployed. AARs are only supported at the
-application level, because of the package name constraint, and not at the Activity level as with
-intent filtering. If you want to handle an intent at the Activity level, <a
-href="#filtering-intents">use intent filters</a>.
-</p>
-
-
-
-<p>If a tag contains an AAR, the tag dispatch system dispatches in the following manner:</p>
-<ol>
-  <li>Try to start an Activity using an intent filter as normal. If the Activity that matches
-the intent also matches the AAR, start the Activity.</li>
-  <li>If the Activity that filters for the intent does not match the
-AAR, if multiple Activities can handle the intent, or if no Activity handles the intent, start the
-application specified by the AAR.</li>
-  <li>If no application can start with the AAR, go to Google Play to download the
-application based on the AAR.</li>
-</ol>
-
-</p>
-
-<p class="note"><strong>Note:</strong> You can override AARs and the intent dispatch system with the <a
-href="{@docRoot}guide/topics/nfc/advanced-nfc.html#foreground-dispatch">foreground dispatch
-system</a>, which allows a foreground activity to have priority when an NFC tag is discovered.
-With this method, the activity must be in the foreground to
-override AARs and the intent dispatch system.</p>
-
-<p>If you still want to filter for scanned tags that do not contain an AAR, you can declare
-intent filters as normal. This is useful if your application is interested in other tags
-that do not contain an AAR. For example, maybe you want to guarantee that your application handles
-proprietary tags that you deploy as well as general tags deployed by third parties. Keep in mind
-that AARs are specific to Android 4.0 devices or later, so when deploying tags, you most likely want
-to use a combination of AARs and MIME types/URIs to support the widest range of devices. In
-addition, when you deploy NFC tags, think about how you want to write your NFC tags to enable
-support for the most devices (Android-powered and other devices). You can do this by
-defining a relatively unique MIME type or URI to make it easier for applications to distinguish.
-</p>
-
-<p>Android provides a simple API to create an AAR,
-{@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}. All you need to
-do is embed the AAR anywhere in your {@link android.nfc.NdefMessage}. You do not want
-to use the first record of your {@link android.nfc.NdefMessage}, unless the AAR is the only
-record in the {@link android.nfc.NdefMessage}. This is because the Android
-system checks the first record of an {@link android.nfc.NdefMessage} to determine the MIME type or
-URI of the tag, which is used to create an intent for applications to filter. The following code
-shows you how to create an AAR:</p>
-
-<pre>
-NdefMessage msg = new NdefMessage(
-        new NdefRecord[] {
-            ...,
-            NdefRecord.createApplicationRecord("com.example.android.beam")}
-</pre>
-
-
-<h2 id="p2p">Beaming NDEF Messages to Other Devices</h2>
-
-<p>Android Beam allows simple peer-to-peer data exchange between two Android-powered devices. The
-application that wants to beam data to another device must be in the foreground and the device
-receiving the data must not be locked. When the beaming device comes in close enough contact with a
-receiving device, the beaming device displays the "Touch to Beam" UI. The user can then choose
-whether or not to beam the message to the receiving device.</p>
-
-<p class="note"><strong>Note:</strong> Foreground NDEF pushing was available at API level 10,
-which provides similar functionality to Android Beam. These APIs have since been deprecated, but
-are available to support older devices. See {@link android.nfc.NfcAdapter#enableForegroundNdefPush
-enableForegroundNdefPush()} for more information.</p>
-
-<p>You can enable Android Beam for your application by calling one of the two methods:</p>
-  <ul>
-    <li>{@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()}: Accepts an
-{@link android.nfc.NdefMessage} to set as the message to beam. Automatically beams the message
-when two devices are in close enough proximity.</li>
-    <li>{@link android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}:
-Accepts a callback that contains a
-{@link android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
-which is called when a device is in range to beam data to. The callback lets you create
-the NDEF message only when necessary.</li>
-  </ul>
-
-<p>An activity can only push one NDEF message at a time, so {@link
-android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()} takes precedence
-over {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} if both are set. To use
-Android Beam, the following general guidelines must be met:
-</p>
-
-  <ul>
-    <li>The activity that is beaming the data must be in the foreground. Both devices must have
-their screens unlocked.</li>
-
-    <li>You must encapsulate the data that you are beaming in an {@link android.nfc.NdefMessage}
-    object.</li>
-
-    <li>The NFC device that is receiving the beamed data must support the
-    <code>com.android.npp</code> NDEF push protocol or NFC Forum's SNEP (Simple NDEF Exchange
-Protocol). The <code>com.android.npp</code> protocol is required for devices on API level 9 (Android
-2.3) to API level 13 (Android 3.2). <code>com.android.npp</code> and SNEP are both required on
-API level 14 (Android 4.0) and later.</li>
-</li>
-  </ul>
-
-  <p class="note"><strong>Note:</strong> If your activity enables Android Beam and is
-in the foreground, the standard intent dispatch system is disabled. However, if your activity also
-enables <a href="{@docRoot}guide/topics/nfc/advanced-nfc.html#foreground-dispatch">foreground
-dispatching</a>, then it can still scan tags that match the intent filters set in the foreground
-dispatching.</p>
-
-  <p>To enable Android Beam:</p>
-
-  <ol>
-    <li>Create an {@link android.nfc.NdefMessage} that contains the {@link android.nfc.NdefRecord}s
-that you want to push onto the other device.</li>
-
-    <li>Call {@link
-android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} with a {@link
-android.nfc.NdefMessage} or call {@link
-android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback} passing in a {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback} object in the <code>onCreate()</code> method of
-your activity. These methods require at least one activity that you want to enable with Android
-Beam, along with an optional list of other activities to activate.
-
-<p>In general, you normally use {@link
-android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} if your Activity only needs to
-push the same NDEF message at all times, when two devices are in range to communicate. You use
-{@link android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback} when your
-application cares about the current context of the application and wants to push an NDEF message
-depending on what the user is doing in your application.</p>
-    </li>
-  </ol>
-
-<p>The following sample shows how a simple activity calls {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback} in the <code>onCreate()</code> method of an
-activity (see <a href="{@docRoot}resources/samples/AndroidBeamDemo/index.html">AndroidBeamDemo</a>
-for the complete sample). This example also has methods to help you create a MIME record:</p>
-
-<pre id="code-example">
-package com.example.android.beam;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.nfc.NdefMessage;
-import android.nfc.NdefRecord;
-import android.nfc.NfcAdapter;
-import android.nfc.NfcAdapter.CreateNdefMessageCallback;
-import android.nfc.NfcEvent;
-import android.os.Bundle;
-import android.os.Parcelable;
-import android.widget.TextView;
-import android.widget.Toast;
-import java.nio.charset.Charset;
-
-
-public class Beam extends Activity implements CreateNdefMessageCallback {
-    NfcAdapter mNfcAdapter;
-    TextView textView;
-
-    &#064;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-        TextView textView = (TextView) findViewById(R.id.textView);
-        // Check for available NFC Adapter
-        mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
-        if (mNfcAdapter == null) {
-            Toast.makeText(this, "NFC is not available", Toast.LENGTH_LONG).show();
-            finish();
-            return;
-        }
-        // Register callback
-        mNfcAdapter.setNdefPushMessageCallback(this, this);
-    }
-
-    &#064;Override
-    public NdefMessage createNdefMessage(NfcEvent event) {
-        String text = ("Beam me up, Android!\n\n" +
-                "Beam Time: " + System.currentTimeMillis());
-        NdefMessage msg = new NdefMessage(
-                new NdefRecord[] { createMimeRecord(
-                        "application/com.example.android.beam", text.getBytes())
-         /**
-          * The Android Application Record (AAR) is commented out. When a device
-          * receives a push with an AAR in it, the application specified in the AAR
-          * is guaranteed to run. The AAR overrides the tag dispatch system.
-          * You can add it back in to guarantee that this
-          * activity starts when receiving a beamed message. For now, this code
-          * uses the tag dispatch system.
-          */
-          //,NdefRecord.createApplicationRecord("com.example.android.beam")
-        });
-        return msg;
-    }
-
-    &#064;Override
-    public void onResume() {
-        super.onResume();
-        // Check to see that the Activity started due to an Android Beam
-        if (NfcAdapter.ACTION_NDEF_DISCOVERED.equals(getIntent().getAction())) {
-            processIntent(getIntent());
-        }
-    }
-
-    &#064;Override
-    public void onNewIntent(Intent intent) {
-        // onResume gets called after this to handle the intent
-        setIntent(intent);
-    }
-
-    /**
-     * Parses the NDEF Message from the intent and prints to the TextView
-     */
-    void processIntent(Intent intent) {
-        textView = (TextView) findViewById(R.id.textView);
-        Parcelable[] rawMsgs = intent.getParcelableArrayExtra(
-                NfcAdapter.EXTRA_NDEF_MESSAGES);
-        // only one message sent during the beam
-        NdefMessage msg = (NdefMessage) rawMsgs[0];
-        // record 0 contains the MIME type, record 1 is the AAR, if present
-        textView.setText(new String(msg.getRecords()[0].getPayload()));
-    }
-
-    /**
-     * Creates a custom MIME type encapsulated in an NDEF record
-     */
-    public NdefRecord createMimeRecord(String mimeType, byte[] payload) {
-        byte[] mimeBytes = mimeType.getBytes(Charset.forName("US-ASCII"));
-        NdefRecord mimeRecord = new NdefRecord(
-                NdefRecord.TNF_MIME_MEDIA, mimeBytes, new byte[0], payload);
-        return mimeRecord;
-    }
-}
-</pre>
-
-<p>Note that this code comments out an AAR, which you can remove. If you enable the AAR, the
-application specified in the AAR always receives the Android Beam message. If the application is not
-present, Google Play launches to download the application. Therefore, the following intent
-filter is not technically necessary for Android 4.0 devices or later if the AAR is used:
-</p>
-
-<pre>
-&lt;intent-filter&gt;
-  &lt;action android:name="android.nfc.action.NDEF_DISCOVERED"/&gt;
-  &lt;category android:name="android.intent.category.DEFAULT"/&gt;
-  &lt;data android:mimeType="application/com.example.android.beam"/&gt;
-&lt;/intent-filter&gt;
-</pre>
-<p>With this intent filter, the <code>com.example.android.beam</code> application now can be started
-when it scans an NFC tag or receives an Android Beam with an AAR of
-type <code>com.example.android.beam</code>, or when an NDEF formatted message contains a MIME record
-of type <code>application/com.example.android.beam</code>.</p>
-
-<p>Even though AARs guarantee an application is started or downloaded, intent filters are
-recommended, because they let you start an Activity of your choice in your
-application instead of always starting the main Activity within the package specified by an AAR.
-AARs do not have Activity level granularity. Also, because some Android-powered devices do not
-support AARs, you should also embed identifying information in the first NDEF record of your NDEF
-messages and filter for that as well, just in case. See <a href="#creating-records">Creating Common
-Types of NDEF records</a> for more information on how to create records.
-</p>
diff --git a/docs/html/guide/topics/providers/calendar-provider.jd b/docs/html/guide/topics/providers/calendar-provider.jd
index d30dda4..f53b062 100644
--- a/docs/html/guide/topics/providers/calendar-provider.jd
+++ b/docs/html/guide/topics/providers/calendar-provider.jd
@@ -250,27 +250,30 @@
 
 <h3 id="query">Querying a calendar</h3>
 
-<p>Here is an example that shows how to get all the calendars for a particular
+<p>Here is an example that shows how to get the calendars that are owned by a particular
 user. For simplicity's sake, in this example the query operation is shown in the
 user interface thread ("main thread"). In practice, this should be done in an asynchronous
 thread instead of on the main thread. For more discussion, see 
-<a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a>. If you are not just reading data but modifying it, see {@link android.content.AsyncQueryHandler}.
+<a href="{@docRoot}guide/components/loaders.html">Loaders</a>. If you are not just 
+reading data but modifying it, see {@link android.content.AsyncQueryHandler}.
 </p>
 
 
 <pre>
-  // Projection array. Creating indices for this array instead of doing
-  // dynamic lookups improves performance.
-  public static final String[] EVENT_PROJECTION = new String[] {
+// Projection array. Creating indices for this array instead of doing
+// dynamic lookups improves performance.
+public static final String[] EVENT_PROJECTION = new String[] {
     Calendars._ID,                           // 0
     Calendars.ACCOUNT_NAME,                  // 1
-    Calendars.CALENDAR_DISPLAY_NAME          // 2
-  };
+    Calendars.CALENDAR_DISPLAY_NAME,         // 2
+    Calendars.OWNER_ACCOUNT                  // 3
+};
   
-  // The indices for the projection array above.
-  private static final int PROJECTION_ID_INDEX = 0;
-  private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
-  private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;</pre>
+// The indices for the projection array above.
+private static final int PROJECTION_ID_INDEX = 0;
+private static final int PROJECTION_ACCOUNT_NAME_INDEX = 1;
+private static final int PROJECTION_DISPLAY_NAME_INDEX = 2;
+private static final int PROJECTION_OWNER_ACCOUNT_INDEX = 3;</pre>
   
 
 <div class="sidebox-wrapper"> <div class="sidebox"> <h3>Why must you include
@@ -291,11 +294,15 @@
 
 <p> In the next part of the example, you construct your query. The selection
 specifies the criteria for the query. In this example the query is looking for
-all calendars that have the <code>ACCOUNT_NAME</code>
-"sampleuser@google.com" and the <code>ACCOUNT_TYPE</code>
-"com.google". The query returns a {@link android.database.Cursor}
+calendars that have the <code>ACCOUNT_NAME</code>
+"sampleuser@google.com", the <code>ACCOUNT_TYPE</code>
+"com.google", and the <code>OWNER_ACCOUNT</code>
+"sampleuser@google.com". If you want to see all calendars that a user
+has viewed, not just calendars the user owns, omit the <code>OWNER_ACCOUNT</code>.
+The query returns a {@link android.database.Cursor}
 object that you can use to traverse the result set returned by the database
-query. For more discussion of using queries in content providers, see <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.</p>
+query. For more discussion of using queries in content providers, 
+see <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.</p>
 
 
 <pre>// Run query
@@ -303,8 +310,10 @@
 ContentResolver cr = getContentResolver();
 Uri uri = Calendars.CONTENT_URI;   
 String selection = "((" + Calendars.ACCOUNT_NAME + " = ?) AND (" 
-                        + Calendars.ACCOUNT_TYPE + " = ?))";
-String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google"}; 
+                        + Calendars.ACCOUNT_TYPE + " = ?) AND ("
+                        + Calendars.OWNER_ACCOUNT + " = ?))";
+String[] selectionArgs = new String[] {"sampleuser@gmail.com", "com.google",
+        "sampleuser@gmail.com"}; 
 // Submit the query and get a Cursor object back. 
 cur = cr.query(uri, EVENT_PROJECTION, selection, selectionArgs, null);</pre>
 
@@ -316,12 +325,14 @@
 while (cur.moveToNext()) {
     long calID = 0;
     String displayName = null;
-    String accountName = null;        
+    String accountName = null;
+    String ownerName = null;
       
     // Get the field values
     calID = cur.getLong(PROJECTION_ID_INDEX);
     displayName = cur.getString(PROJECTION_DISPLAY_NAME_INDEX);
     accountName = cur.getString(PROJECTION_ACCOUNT_NAME_INDEX);
+    ownerName = cur.getString(PROJECTION_OWNER_ACCOUNT_INDEX);
               
     // Do something with the values...
 
@@ -1179,5 +1190,3 @@
 </pre>
 <p>For a sample implementation of a sync adapter (not specifically related to Calendar), see 
 <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>.
-</body>
-</html>
diff --git a/docs/html/guide/topics/providers/contacts-provider.jd b/docs/html/guide/topics/providers/contacts-provider.jd
new file mode 100644
index 0000000..e3b998a
--- /dev/null
+++ b/docs/html/guide/topics/providers/contacts-provider.jd
@@ -0,0 +1,2361 @@
+page.title=Contacts Provider
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<h2>Quickview</h2>
+<ul>
+    <li>Android's repository of information about people.</li>
+    <li>
+        Syncs with the web.
+    </li>
+    <li>
+        Integrates social stream data.
+    </li>
+</ul>
+<h2>In this document</h2>
+<ol>
+    <li>
+        <a href="#InformationTypes">Contacts Provider Organization</a>
+    </li>
+    <li>
+        <a href="#RawContactBasics">Raw contacts</a>
+    </li>
+    <li>
+        <a href="#DataBasics">Data</a>
+    </li>
+    <li>
+        <a href="#ContactBasics">Contacts</a>
+    </li>
+    <li>
+        <a href="#Sources">Data From Sync Adapters</a>
+    </li>
+    <li>
+        <a href="#Permissions">Required Permissions</a>
+    </li>
+    <li>
+        <a href="#UserProfile">The User Profile</a>
+    </li>
+    <li>
+        <a href="#ContactsProviderMetadata">Contacts Provider Metadata</a>
+    </li>
+    <li>
+        <a href="#Access">Contacts Provider Access</a>
+    <li>
+    </li>
+    <li>
+        <a href="#SyncAdapters">Contacts Provider Sync Adapters</a>
+    </li>
+    <li>
+        <a href="#SocialStream">Social Stream Data</a>
+    </li>
+    <li>
+        <a href="#AdditionalFeatures">Additional Contacts Provider Features</a>
+    </li>
+</ol>
+<h2>Key classes</h2>
+<ol>
+    <li>{@link android.provider.ContactsContract.Contacts}</li>
+    <li>{@link android.provider.ContactsContract.RawContacts}</li>
+    <li>{@link android.provider.ContactsContract.Data}</li>
+    <li>{@link android.provider.ContactsContract.StreamItems}</li>
+</ol>
+<h2>Related Samples</h2>
+<ol>
+    <li>
+        <a href="{@docRoot}resources/samples/ContactManager/index.html">
+        Contact Manager
+        </a>
+    </li>
+    <li>
+        <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+        Sample Sync Adapter</a>
+    </li>
+</ol>
+<h2>See Also</h2>
+<ol>
+    <li>
+        <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+        Content Provider Basics
+        </a>
+    </li>
+</ol>
+</div>
+</div>
+<p>
+    The Contacts Provider is a powerful and flexible Android component that manages the
+    device's central repository of data about people. The Contacts Provider is the source of data
+    you see in the device's contacts application, and you can also access its data in your own
+    application and transfer data between the device and online services. The provider accommodates
+    a wide range of data sources and tries to manage as much data as possible for each person, with
+    the result that its organization is complex. Because of this, the provider's API includes an
+    extensive set of contract classes and interfaces that facilitate both data retrieval and
+    modification.
+</p>
+<p>
+    This guide describes the following:
+</p>
+    <ul>
+        <li>
+            The basic provider structure.
+        </li>
+        <li>
+            How to retrieve data from the provider.
+        </li>
+        <li>
+            How to modify data in the provider.
+        </li>
+        <li>
+            How to write a sync adapter for synchronizing data from your server to the
+            Contacts Provider.
+        </li>
+    </ul>
+<p>
+    This guide assumes that you know the basics of Android content providers. To learn more
+    about Android content providers, read the
+    <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+    Content Provider Basics</a> guide. The
+    <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Sample Sync Adapter</a>
+    sample app is an example of using a sync adapter to transfer data between the Contacts
+    Provider and a sample application hosted by Google Web Services.
+</p>
+<h2 id="InformationTypes">Contacts Provider Organization</h2>
+<p>
+    The Contacts Provider is an Android content provider component. It maintains three types of
+    data about a person, each of which corresponds to a table offered by the provider, as
+    illustrated in figure 1:
+</p>
+<img src="{@docRoot}images/providers/contacts_structure.png" alt=""
+    height="364" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Contacts Provider table structure.
+</p>
+<p>
+    The three tables are commonly referred to by the names of their contract classes. The classes
+    define constants for content URIs, column names, and column values used by the tables:
+</p>
+<dl>
+    <dt>
+        {@link android.provider.ContactsContract.Contacts} table
+    </dt>
+    <dd>
+        Rows representing different people, based on aggregations of raw contact rows.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.RawContacts} table
+    </dt>
+    <dd>
+        Rows containing a summary of a person's data, specific to a user account and type.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.Data} table
+    </dt>
+    <dd>
+        Rows containing the details for raw contact, such as email addresses or phone numbers.
+    </dd>
+</dl>
+<p>
+    The other tables represented by contract classes in {@link android.provider.ContactsContract}
+    are auxiliary tables that the Contacts Provider uses to manage its operations or support
+    specific functions in the device's contacts or telephony applications.
+</p>
+<h2 id="RawContactBasics">Raw contacts</h2>
+<p>
+    A raw contact represents a person's data coming from a single account type and account
+    name. Because the Contacts Provider allows more than one online service as the source of
+    data for a person, the Contacts Provider allows multiple raw contacts for the same person.
+    Multiple raw contacts also allow a user to combine a person's data from more than one account
+    from the same account type.
+</p>
+<p>
+    Most of the data for a raw contact isn't stored in the
+    {@link android.provider.ContactsContract.RawContacts} table. Instead, it's stored in one or more
+    rows in the {@link android.provider.ContactsContract.Data} table. Each data row has a column
+    {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID Data.RAW_CONTACT_ID} that
+    contains the {@link android.provider.BaseColumns#_ID RawContacts._ID} value of its
+    parent {@link android.provider.ContactsContract.RawContacts} row.
+</p>
+<h3 id="RawContactsColumns">Important raw contact columns</h3>
+<p>
+    The important columns in the {@link android.provider.ContactsContract.RawContacts} table are
+    listed in table 1. Please read the notes that follow after the table:
+</p>
+<p class="table-caption" id="table1">
+    <strong>Table 1.</strong> Important raw contact columns.
+</p>
+<table>
+    <tr>
+        <th scope="col">Column name</th>
+        <th scope="col">Use</th>
+        <th scope="col">Notes</th>
+    </tr>
+    <tr>
+        <td>
+            {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_NAME}
+        </td>
+        <td>
+            The account name for the account type that's the source of this raw contact.
+            For example, the account name of a Google account is one of the device owner's Gmail
+            addresses. See the next entry for
+            {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE} for more
+            information.
+        </td>
+        <td>
+            The format of this name is specific to its account type. It is not
+            necessarily an email address.
+        </td>
+    </tr>
+    <tr>
+        <td>
+            {@link android.provider.ContactsContract.SyncColumns#ACCOUNT_TYPE}
+        </td>
+        <td>
+            The account type that's the source of this raw contact. For example, the account
+            type of a Google account is <code>com.google</code>. Always qualify your account type
+            with a domain identifier for a domain you own or control. This will ensure that your
+            account type is unique.
+        </td>
+        <td>
+            An account type that offers contacts data usually has an associated sync adapter that
+            synchronizes with the Contacts Provider.
+    </tr>
+    <tr>
+        <td>
+            {@link android.provider.ContactsContract.RawContactsColumns#DELETED}
+        </td>
+        <td>
+            The "deleted" flag for a raw contact.
+        </td>
+        <td>
+            This flag allows the Contacts Provider to maintain the row internally until sync
+            adapters are able to delete the row from their servers and then finally delete the row
+            from the repository.
+        </td>
+    </tr>
+</table>
+<h4>Notes</h4>
+<p>
+    The following are important notes about the
+    {@link android.provider.ContactsContract.RawContacts} table:
+</p>
+<ul>
+    <li>
+        A raw contact's name is not stored in its row in
+        {@link android.provider.ContactsContract.RawContacts}. Instead, it's stored in
+        the {@link android.provider.ContactsContract.Data} table, in a
+        {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} row. A raw contact
+        has only one row of this type in the {@link android.provider.ContactsContract.Data} table.
+    </li>
+    <li>
+        <strong>Caution:</strong> To use your own account data in a raw contact row, it must
+        first be registered with the {@link android.accounts.AccountManager}. To do this, prompt
+        users to add the account type and their account name to the list of accounts. If you don't
+        do this, the Contacts Provider will automatically delete your raw contact row.
+        <p>
+            For example, if you want your app to maintain contacts data for your web-based service
+            with the domain {@code com.example.dataservice}, and the user's account for your service
+            is {@code becky.sharp@dataservice.example.com}, the user must first add the account
+            "type" ({@code com.example.dataservice}) and account "name"
+            ({@code becky.smart@dataservice.example.com}) before your app can add raw contact rows.
+            You can explain this requirement to the user in documentation, or you can prompt the
+            user to add the type and name, or both. Account types and account names
+            are described in more detail in the next section.
+    </li>
+</ul>
+<h3 id="RawContactsExample">Sources of raw contacts data</h3>
+<p>
+    To understand how raw contacts work, consider the user "Emily Dickinson" who has the following
+    three user accounts defined on her device:
+</p>
+<ul>
+    <li><code>emily.dickinson@gmail.com</code></li>
+    <li><code>emilyd@gmail.com</code></li>
+    <li>Twitter account "belle_of_amherst"</li>
+</ul>
+<p>
+    This user has enabled <em>Sync Contacts</em> for all three of these accounts in the
+    <em>Accounts</em> settings.
+</p>
+<p>
+    Suppose Emily Dickinson opens a browser window, logs into Gmail as
+    <code>emily.dickinson@gmail.com</code>, opens
+    Contacts, and adds "Thomas Higginson". Later on, she logs into Gmail as
+    <code>emilyd@gmail.com</code> and sends an email to "Thomas Higginson", which automatically
+    adds him as a contact. She also follows "colonel_tom" (Thomas Higginson's Twitter ID) on
+    Twitter.
+</p>
+<p>
+    The Contacts Provider creates three raw contacts as a result of this work:
+</p>
+<ol>
+    <li>
+        A raw contact for "Thomas Higginson" associated with <code>emily.dickinson@gmail.com</code>.
+        The user account type is Google.
+    </li>
+    <li>
+        A second raw contact for "Thomas Higginson" associated with <code>emilyd@gmail.com</code>.
+        The user account type is also Google. There is a second raw contact even
+        though the name is identical to a previous name, because the person was added for a
+        different user account.
+    </li>
+    <li>
+        A third raw contact for "Thomas Higginson" associated with "belle_of_amherst". The user
+        account type is Twitter.
+    </li>
+</ol>
+<h2 id="DataBasics">Data</h2>
+<p>
+    As noted previously, the data for a raw contact is stored in a
+    {@link android.provider.ContactsContract.Data} row that is linked to the raw contact's
+    <code>_ID</code> value. This allows a single raw contact to have multiple instances of the same
+    type of data such as email addresses or phone numbers. For example, if
+    "Thomas Higginson" for {@code emilyd@gmail.com}  (the raw contact row for Thomas Higginson
+    associated with the Google account <code>emilyd@gmail.com</code>) has a home email address of
+    <code>thigg@gmail.com</code> and a work email address of
+    <code>thomas.higginson@gmail.com</code>, the Contacts Provider stores the two email address
+    rows and links them both to the raw contact.
+</p>
+<p>
+    Notice that different types of data are stored in this single table. Display name,
+    phone number, email, postal address, photo, and website detail rows are all found in the
+    {@link android.provider.ContactsContract.Data} table. To help manage this, the
+    {@link android.provider.ContactsContract.Data} table has some columns with descriptive names,
+    and others with generic names. The contents of a descriptive-name column have the same meaning
+    regardless of the type of data in the row, while the contents of a generic-name column have
+    different meanings depending on the type of data.
+</p>
+<h3 id="DescriptiveColumns">Descriptive column names</h3>
+<p>
+    Some examples of descriptive column names are:
+</p>
+<dl>
+    <dt>
+        {@link android.provider.ContactsContract.Data#RAW_CONTACT_ID}
+    </dt>
+    <dd>
+        The value of the <code>_ID</code> column of the raw contact for this data.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.Data#MIMETYPE}
+    </dt>
+    <dd>
+        The type of data stored in this row, expressed as a custom MIME type. The Contacts Provider
+        uses the MIME types defined in the subclasses of
+        {@link android.provider.ContactsContract.CommonDataKinds}. These MIME types are open source,
+        and can be used by any application or sync adapter that works with the Contacts Provider.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.DataColumns#IS_PRIMARY}
+    </dt>
+    <dd>
+        If this type of data row can occur more than once for a raw contact, the
+        {@link android.provider.ContactsContract.DataColumns#IS_PRIMARY} column flags
+        the data row that contains the primary data for the type. For example, if
+        the user long-presses a phone number for a contact and selects <strong>Set default</strong>,
+        then the {@link android.provider.ContactsContract.Data} row containing that number
+        has its {@link android.provider.ContactsContract.DataColumns#IS_PRIMARY} column set to a
+        non-zero value.
+    </dd>
+</dl>
+<h3 id="GenericColumns">Generic column names</h3>
+<p>
+    There are 15 generic columns named <code>DATA1</code> through
+    <code>DATA15</code> that are generally available and an additional four generic
+    columns <code>SYNC1</code> through <code>SYNC4</code> that should only be used by sync
+    adapters. The generic column name constants always work, regardless of the type of
+    data the row contains.
+</p>
+<p>
+    The <code>DATA1</code> column is indexed.  The Contacts Provider always uses this column for
+    the data that the provider expects will be the most frequent target of a query. For example,
+    in an email row, this column contains the actual email address.
+</p>
+<p>
+    By convention, the column <code>DATA15</code> is reserved for storing Binary Large Object
+    (BLOB) data such as photo thumbnails.
+</p>
+<h3 id="TypeSpecificNames">Type-specific column names</h3>
+<p>
+    To facilitate working with the columns for a particular type of row, the Contacts Provider
+    also provides type-specific column name constants, defined in subclasses of
+    {@link android.provider.ContactsContract.CommonDataKinds}. The constants simply give a
+    different constant name to the same column name, which helps you access data in a row of a
+    particular type.
+</p>
+<p>
+    For example, the {@link android.provider.ContactsContract.CommonDataKinds.Email} class defines
+    type-specific column name constants for a {@link android.provider.ContactsContract.Data} row
+    that has the MIME type
+    {@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_ITEM_TYPE
+    Email.CONTENT_ITEM_TYPE}. The class contains the constant
+    {@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS} for the email address
+    column. The actual value of
+    {@link android.provider.ContactsContract.CommonDataKinds.Email#ADDRESS} is "data1", which is
+    the same as the column's generic name.
+</p>
+<p class="caution">
+    <strong>Caution:</strong> Don't add your own custom data to the
+    {@link android.provider.ContactsContract.Data} table using a row that has one of the
+    provider's pre-defined MIME types. If you do, you may lose the data or cause the provider to
+    malfunction. For example, you should not add a row with the MIME type
+    {@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_ITEM_TYPE
+    Email.CONTENT_ITEM_TYPE} that contains a user name instead of an email address in the
+    column <code>DATA1</code>. If you use your own custom MIME type for the row, then you are free
+    to define your own type-specific column names and use the columns however you wish.
+</p>
+<p>
+    Figure 2 shows how descriptive columns and data columns appear in a
+    {@link android.provider.ContactsContract.Data} row, and how type-specific column names "overlay"
+    the generic column names
+</p>
+<img src="{@docRoot}images/providers/data_columns.png"
+    alt="How type-specific column names map to generic column names"
+    height="311" id="figure2" />
+<p class="img-caption">
+  <strong>Figure 2.</strong> Type-specific column names and generic column names.
+</p>
+<h3 id="ColumnMaps">Type-specific column name classes</h3>
+<p>
+    Table 2 lists the most commonly-used type-specific column name classes:
+</p>
+<p class="table-caption" id="table2">
+  <strong>Table 2.</strong> Type-specific column name classes</p>
+<table>
+  <tr>
+    <th scope="col">Mapping class</th>
+    <th scope="col">Type of data</th>
+    <th scope="col">Notes</th>
+  </tr>
+  <tr>
+    <td>{@link android.provider.ContactsContract.CommonDataKinds.StructuredName}</td>
+    <td>The name data for the raw contact associated with this data row.</td>
+    <td>A raw contact has only one of these rows.</td>
+  </tr>
+  <tr>
+    <td>{@link android.provider.ContactsContract.CommonDataKinds.Photo}</td>
+    <td>The main photo for the raw contact associated with this data row.</td>
+    <td>A raw contact has only one of these rows.</td>
+  </tr>
+  <tr>
+    <td>{@link android.provider.ContactsContract.CommonDataKinds.Email}</td>
+    <td>An email address for the raw contact associated with this data row.</td>
+    <td>A raw contact can have multiple email addresses.</td>
+  </tr>
+  <tr>
+    <td>{@link android.provider.ContactsContract.CommonDataKinds.StructuredPostal}</td>
+    <td>A postal address for the raw contact associated with this data row.</td>
+    <td>A raw contact can have multiple postal addresses.</td>
+  </tr>
+  <tr>
+    <td>{@link android.provider.ContactsContract.CommonDataKinds.GroupMembership}</td>
+    <td>An identifier that links the raw contact to one of the groups in the Contacts Provider.</td>
+    <td>
+        Groups are an optional feature of an account type and account name. They're described in
+        more detail in the section <a href="#Groups">Contact groups</a>.
+    </td>
+  </tr>
+</table>
+<h3 id="ContactBasics">Contacts</h3>
+<p>
+    The Contacts Provider combines the raw contact rows across all account types and account names
+    to form a <strong>contact</strong>. This facilitates displaying and modifying all the data a
+    user has collected for a person. The Contacts Provider manages the creation of new contact
+    rows, and the aggregation of raw contacts with an existing contact row. Neither applications nor
+    sync adapters are allowed to add contacts, and some columns in a contact row are read-only.
+</p>
+<p class="note">
+    <strong>Note:</strong> If you try to add a contact to the Contacts Provider with an
+    {@link android.content.ContentResolver#insert(Uri,ContentValues) insert()}, you'll get
+    an {@link java.lang.UnsupportedOperationException} exception. If you try to update a column
+    that's listed as "read-only," the update is ignored.
+</p>
+<p>
+    The Contacts Provider creates a new contact in response to the addition of a new raw contact
+    that doesn't match any existing contacts. The provider also does this if an existing raw
+    contact's data changes in such a way that it no longer matches the contact to which it was
+    previously attached. If an application or sync adapter creates a new raw contact that
+    <em>does</em> match an existing contact, the new raw contact is aggregated to the existing
+    contact.
+</p>
+<p>
+    The Contacts Provider links a contact row to its raw contact rows with the contact row's
+    <code>_ID</code> column in the {@link android.provider.ContactsContract.Contacts Contacts}
+    table. The <code>CONTACT_ID</code> column of the raw contacts table
+    {@link android.provider.ContactsContract.RawContacts} contains <code>_ID</code> values for
+    the contacts row associated with each raw contacts row.
+</p>
+<p>
+    The {@link android.provider.ContactsContract.Contacts} table also has the column
+    {@link android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} that is a
+    "permanent" link to the contact row. Because the Contacts Provider maintains contacts
+    automatically, it may change a contact row's {@link android.provider.BaseColumns#_ID} value
+    in response to an aggregation or sync. Even If this happens, the content URI
+    {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI} combined with
+    contact's {@link android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} will still
+    point to the contact row, so you can use
+    {@link android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY}
+    to maintain links to "favorite" contacts, and so forth. This column has its own format that is
+    unrelated to the format of the {@link android.provider.BaseColumns#_ID} column.
+</p>
+<p>
+    Figure 3 shows how the three main tables relate to each other.
+</p>
+<img src="{@docRoot}images/providers/contacts_tables.png" alt="Contacts provider main tables"
+    height="514" id="figure4" />
+<p class="img-caption">
+  <strong>Figure 3.</strong> Contacts, Raw Contacts, and Details table relationships.
+</p>
+<h2 id="Sources">Data From Sync Adapters</h2>
+<p>
+    Users enter contacts data directly into the device, but data also flows into the Contacts
+    Provider from web services via <strong>sync adapters</strong>, which automate
+    the transfer of data between the device and services. Sync adapters run in the background
+    under the control of the system, and they call {@link android.content.ContentResolver} methods
+    to manage data.
+</p>
+<p>
+    In Android, the web service that a sync adapter works with is identified by an account type.
+    Each sync adapter works with one account type, but it can support multiple account names for
+    that type. Account types and account names are described briefly in the section
+    <a href="#RawContactsExample">Sources of raw contacts data</a>. The following definitions offer
+    more detail, and describe how account type and name relate to sync adapters and services.
+</p>
+<dl>
+    <dt>
+        Account type
+    </dt>
+    <dd>
+        Identifies a service in which the user has stored data. Most of the time, the user has to
+        authenticate with the service. For example, Google Contacts is an account type, identified
+        by the code <code>google.com</code>. This value corresponds to the account type used by
+        {@link android.accounts.AccountManager}.
+    </dd>
+    <dt>
+        Account name
+    </dt>
+    <dd>
+        Identifies a particular account or login for an account type. Google Contacts accounts
+        are the same as Google accounts, which have an email address as an account name.
+        Other services may use a single-word username or numeric id.
+    </dd>
+</dl>
+<p>
+    Account types don't have to be unique. A user can configure multiple Google Contacts accounts
+    and download their data to the Contacts Provider; this may happen if the user has one set of
+    personal contacts for a personal account name, and another set for work. Account names are
+    usually unique. Together, they identify a specific data flow between the Contacts Provider and
+    an external service.
+</p>
+<p>
+    If you want to transfer your service's data to the Contacts Provider, you need to write your
+    own sync adapter. This is described in more detail in the section
+    <a href="#SyncAdapters">Contacts Provider Sync Adapters</a>.
+</p>
+<p>
+    Figure 4 shows how the Contacts Provider fits into the flow of data
+    about people. In the box marked "sync adapters," each adapter is labeled by its account type.
+</p>
+<img src="{@docRoot}images/providers/ContactsDataFlow.png" alt="Flow of data about people"
+    height="252" id="figure5" />
+<p class="img-caption">
+  <strong>Figure 4.</strong> The Contacts Provider flow of data.
+</p>
+<h2 id="Permissions">Required Permissions</h2>
+<p>
+    Applications that want to access the Contacts Provider must request the following
+    permissions:
+</p>
+<dl>
+    <dt>Read access to one or more tables</dt>
+    <dd>
+        {@link android.Manifest.permission#READ_CONTACTS}, specified in
+        <code>AndroidManifest.xml</code> with the
+        <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+        &lt;uses-permission&gt;</a></code> element as
+        <code>&lt;uses-permission android:name="android.permission.READ_CONTACTS"&gt;</code>.
+    </dd>
+    <dt>Write access to one or more tables</dt>
+    <dd>
+        {@link android.Manifest.permission#WRITE_CONTACTS}, specified in
+        <code>AndroidManifest.xml</code> with the
+        <code><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+        &lt;uses-permission&gt;</a></code> element as
+        <code>&lt;uses-permission android:name="android.permission.WRITE_CONTACTS"&gt;</code>.
+    </dd>
+</dl>
+<p>
+    These permissions do not extend to the user profile data. The user profile and its
+    required permissions are discussed in the following section,
+    <a href="#UserProfile">The User Profile</a>.
+</p>
+<p>
+    Remember that the user's contacts data is personal and sensitive. Users are concerned about
+    their privacy, so they don't want applications collecting data about them or their contacts.
+    If it's not obvious why you need permission to access their contacts data, they may give
+    your application low ratings or simply refuse to install it.
+</p>
+<h2 id="UserProfile">The User Profile</h2>
+<p>
+    The {@link android.provider.ContactsContract.Contacts} table has a single row containing
+    profile data for the device's user. This data describes the device's <code>user</code> rather
+    than one of the user's contacts. The profile contacts row is linked to a raw
+    contacts row for each system that uses a profile.
+    Each profile raw contact row can have multiple data rows. Constants for accessing the user
+    profile are available in the {@link android.provider.ContactsContract.Profile} class.
+</p>
+<p>
+    Access to the user profile requires special permissions. In addition to the
+    {@link android.Manifest.permission#READ_CONTACTS} and
+    {@link android.Manifest.permission#WRITE_CONTACTS} permissions needed to read and write, access
+    to the user profile requires the {@link android.Manifest.permission#READ_PROFILE} and
+    {@link android.Manifest.permission#WRITE_PROFILE} permissions for read and write access,
+    respectively.
+</p>
+<p>
+    Remember that you should consider a user's profile to be sensitive. The permission
+    {@link android.Manifest.permission#READ_PROFILE} allows you to access the device user's
+    personally-identifying data. Make sure to tell the user why
+    you need user profile access permissions in the description of your application.
+</p>
+<p>
+    To retrieve the contact row that contains the user's profile,
+    call {@link android.content.ContentResolver#query(Uri,String[], String, String[], String)
+    ContentResolver.query()}. Set the content URI to
+    {@link android.provider.ContactsContract.Profile#CONTENT_URI} and don't provide any
+    selection criteria. You can also use this content URI as the base URI for retrieving raw
+    contacts or data for the profile. For example, this snippet retrieves data for the profile:
+</p>
+<pre>
+// Sets the columns to retrieve for the user profile
+mProjection = new String[]
+    {
+        Profile._ID,
+        Profile.DISPLAY_NAME_PRIMARY,
+        Profile.LOOKUP_KEY,
+        Profile.PHOTO_THUMBNAIL_URI
+    };
+
+// Retrieves the profile from the Contacts Provider
+mProfileCursor =
+        getContentResolver().query(
+                Profile.CONTENT_URI,
+                mProjection ,
+                null,
+                null,
+                null);
+</pre>
+<p class="note">
+    <strong>Note:</strong> If you retrieve multiple contact rows, and you want to determine if one of them
+    is the user profile, test the row's
+    {@link android.provider.ContactsContract.ContactsColumns#IS_USER_PROFILE} column. This column
+    is set to "1" if the contact is the user profile.
+</p>
+<h2 id="ContactsProviderMetadata">Contacts Provider Metadata</h2>
+<p>
+    The Contacts Provider manages data that keeps track of the state of contacts data in the
+    repository. This metadata about the repository is stored in various places, including the
+    Raw Contacts, Data, and Contacts table rows, the
+    {@link android.provider.ContactsContract.Settings} table, and the
+    {@link android.provider.ContactsContract.SyncState} table. The following table shows the
+    effect of each of these pieces of metadata:
+</p>
+<p class="table-caption" id="table3">
+  <strong>Table 3.</strong> Metadata in the Contacts Provider</p>
+<table>
+    <tr>
+        <th scope="col">Table</th>
+        <th scope="col">Column</th>
+        <th scope="col">Values</th>
+        <th scope="col">Meaning</th>
+    </tr>
+    <tr>
+        <td rowspan="2">{@link android.provider.ContactsContract.RawContacts}</td>
+        <td rowspan="2">{@link android.provider.ContactsContract.SyncColumns#DIRTY}</td>
+        <td>"0" - not changed since the last sync.</td>
+        <td rowspan="2">
+            Marks raw contacts that were changed on the device and have to be synced back to the
+            server. The value is set automatically by the Contacts Provider when Android
+            applications update a row.
+            <p>
+                Sync adapters that modify the raw contact or data tables should always append the
+                string {@link android.provider.ContactsContract#CALLER_IS_SYNCADAPTER} to the
+                content URI they use. This prevents the provider from marking rows as dirty.
+                Otherwise, sync adapter modifications appear to be local modifications and are
+                sent to the server, even though the server was the source of the modification.
+            </p>
+        </td>
+    </tr>
+    <tr>
+            <td>"1" - changed since last sync, needs to be synced back to the server.</td>
+    </tr>
+    <tr>
+        <td>{@link android.provider.ContactsContract.RawContacts}</td>
+        <td>{@link android.provider.ContactsContract.SyncColumns#VERSION}</td>
+        <td>The version number of this row.</td>
+        <td>
+            The Contacts Provider automatically increments this value whenever the row or
+            its related data changes.
+        </td>
+    </tr>
+    <tr>
+        <td>{@link android.provider.ContactsContract.Data}</td>
+        <td>{@link android.provider.ContactsContract.DataColumns#DATA_VERSION}</td>
+        <td>The version number of this row.</td>
+        <td>
+            The Contacts Provider automatically increments this value whenever the data row
+            is changed.
+        </td>
+    </tr>
+    <tr>
+        <td>{@link android.provider.ContactsContract.RawContacts}</td>
+        <td>{@link android.provider.ContactsContract.SyncColumns#SOURCE_ID}</td>
+        <td>
+            A string value that uniquely identifies this raw contact to the account in
+            which it was created.
+        </td>
+        <td>
+            When a sync adapter creates a new raw contact, this column should be set to the
+            server's unique ID for the raw contact. When an Android application creates a new
+            raw contact, the application should leave this column empty. This signals the sync
+            adapter that it should create a new raw contact on the server, and get a
+            value for the {@link android.provider.ContactsContract.SyncColumns#SOURCE_ID}.
+            <p>
+                In particular, the source id must be <strong>unique</strong> for each account
+                type and should be stable across syncs:
+            </p>
+                <ul>
+                    <li>
+                        Unique: Each raw contact for an account must have its own source id. If you
+                        don't enforce this, you'll cause problems in the contacts application.
+                        Notice that two raw contacts for the same account <em>type</em> may have
+                        the same source id. For example, the raw contact "Thomas Higginson" for the
+                        account {@code emily.dickinson@gmail.com} is allowed to have the same source
+                        id as the raw contact "Thomas Higginson" for the account
+                        {@code emilyd@gmail.com}.
+                    </li>
+                    <li>
+                        Stable: Source ids are a permanent part of the online service's data for
+                        the raw contact. For example, if the user clears Contacts Storage from the
+                        Apps settings and re-syncs, the restored raw contacts should have the same
+                        source ids as before. If you don't enforce this, shortcuts will stop
+                        working.
+                    </li>
+                </ul>
+        </td>
+    </tr>
+    <tr>
+        <td rowspan="2">{@link android.provider.ContactsContract.Groups}</td>
+        <td rowspan="2">{@link android.provider.ContactsContract.GroupsColumns#GROUP_VISIBLE}</td>
+        <td>"0" - Contacts in this group should not be visible in Android application UIs.</td>
+        <td>
+            This column is for compatibility with servers that allow a user to hide contacts in
+            certain groups.
+        </td>
+    </tr>
+    <tr>
+        <td>"1" - Contacts in this group are allowed to be visible in application UIs.</td>
+    </tr>
+    <tr>
+        <td rowspan="2">{@link android.provider.ContactsContract.Settings}</td>
+        <td rowspan="2">
+            {@link android.provider.ContactsContract.SettingsColumns#UNGROUPED_VISIBLE}</td>
+        <td>
+            "0" - For this account and account type, contacts that don't belong to a group are
+            invisible to Android application UIs.
+        </td>
+        <td rowspan="2">
+            By default, contacts are invisible if none of their raw contacts belongs to a group
+            (Group membership for a raw contact is indicated by one or more
+            {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership} rows
+            in the {@link android.provider.ContactsContract.Data} table).
+            By setting this flag in the {@link android.provider.ContactsContract.Settings} table row
+            for an account type and account, you can force contacts without groups to be visible.
+            One use of this flag is to show contacts from servers that don't use groups.
+        </td>
+    </tr>
+    <tr>
+        <td>
+            "1" - For this account and account type, contacts that don't belong to a group are
+            visible to application UIs.
+        </td>
+
+    </tr>
+    <tr>
+        <td>{@link android.provider.ContactsContract.SyncState}</td>
+        <td>(all)</td>
+        <td>
+            Use this table to store metadata for your sync adapter.
+        </td>
+        <td>
+            With this table you can store sync state and other sync-related data persistently on
+            the device.
+        </td>
+    </tr>
+</table>
+<h2 id="Access">Contacts Provider Access</h2>
+<p>
+    This section describes guidelines for accessing data from the Contacts Provider, focusing on
+    the following:
+</p>
+<ul>
+    <li>
+        Entity queries.
+    </li>
+    <li>
+        Batch modification.
+    </li>
+    <li>
+        Retrieval and modification with intents.
+    </li>
+    <li>
+        Data integrity.
+    </li>
+</ul>
+<p>
+    Making modifications from a sync adapter is also covered in more detail in the section
+    <a href="#SyncAdapters">Contacts Provider Sync Adapters</a>.
+</p>
+<h3 id="Entities">Querying entities</h3>
+<p>
+    Because the Contacts Provider tables are organized in a hierarchy, it's often useful to
+    retrieve a row and all of the "child" rows that are linked to it. For example, to display
+    all the information for a person, you may want to retrieve all the
+    {@link android.provider.ContactsContract.RawContacts} rows for a single
+    {@link android.provider.ContactsContract.Contacts} row, or all the
+    {@link android.provider.ContactsContract.CommonDataKinds.Email} rows for a single
+    {@link android.provider.ContactsContract.RawContacts} row. To facilitate this, the Contacts
+    Provider offers <strong>entity</strong> constructs, which act like database joins between
+    tables.
+</p>
+<p>
+    An entity is like a table composed of selected columns from a parent table and its child table.
+    When you query an entity, you supply a projection and search criteria based on the columns
+    available from the entity. The result is a {@link android.database.Cursor} that contains
+    contains one row for each child table row that was retrieved. For example, if you query
+    {@link android.provider.ContactsContract.Contacts.Entity} for a contact name
+    and all the {@link android.provider.ContactsContract.CommonDataKinds.Email} rows for all the
+    raw contacts for that name, you get back a {@link android.database.Cursor} containing one row
+    for each {@link android.provider.ContactsContract.CommonDataKinds.Email} row.
+</p>
+<p>
+    Entities simplify queries. Using an entity, you can retrieve all of the contacts data for a
+    contact or raw contact at once, instead of having to query the parent table first to get an
+    ID, and then having to query the child table with that ID. Also, the Contacts Provider processes
+    a query against an entity in a single transaction, which ensures that the retrieved data is
+    internally consistent.
+</p>
+<p class="note">
+    <strong>Note:</strong> An entity usually doesn't contain all the columns of the parent and
+    child table. If you attempt to work with a column name that isn't in the list of column name
+    constants for the entity, you'll get an {@link java.lang.Exception}.
+</p>
+<p>
+    The following snippet shows how to retrieve all the raw contact rows for a contact. The snippet
+    is part of a larger application that has two activities, "main" and "detail". The main activity
+    shows a list of contact rows; when the user select one, the activity sends its ID to the detail
+    activity. The detail activity uses the {@link android.provider.ContactsContract.Contacts.Entity}
+    to display all of the data rows from all of the raw contacts associated with the selected
+    contact.
+</p>
+<p>
+    This snippet is taken from the "detail" activity:
+</p>
+<pre>
+...
+    /*
+     * Appends the entity path to the URI. In the case of the Contacts Provider, the
+     * expected URI is content://com.google.contacts/#/entity (# is the ID value).
+     */
+    mContactUri = Uri.withAppendedPath(
+            mContactUri,
+            ContactsContract.Contacts.Entity.CONTENT_DIRECTORY);
+
+    // Initializes the loader identified by LOADER_ID.
+    getLoaderManager().initLoader(
+            LOADER_ID,  // The identifier of the loader to initialize
+            null,       // Arguments for the loader (in this case, none)
+            this);      // The context of the activity
+
+    // Creates a new cursor adapter to attach to the list view
+    mCursorAdapter = new SimpleCursorAdapter(
+            this,                        // the context of the activity
+            R.layout.detail_list_item,   // the view item containing the detail widgets
+            mCursor,                     // the backing cursor
+            mFromColumns,                // the columns in the cursor that provide the data
+            mToViews,                    // the views in the view item that display the data
+            0);                          // flags
+
+    // Sets the ListView's backing adapter.
+    mRawContactList.setAdapter(mCursorAdapter);
+...
+&#64;Override
+public Loader&lt;Cursor&gt; onCreateLoader(int id, Bundle args) {
+
+    /*
+     * Sets the columns to retrieve.
+     * RAW_CONTACT_ID is included to identify the raw contact associated with the data row.
+     * DATA1 contains the first column in the data row (usually the most important one).
+     * MIMETYPE indicates the type of data in the data row.
+     */
+    String[] projection =
+        {
+            ContactsContract.Contacts.Entity.RAW_CONTACT_ID,
+            ContactsContract.Contacts.Entity.DATA1,
+            ContactsContract.Contacts.Entity.MIMETYPE
+        };
+
+    /*
+     * Sorts the retrieved cursor by raw contact id, to keep all data rows for a single raw
+     * contact collated together.
+     */
+    String sortOrder =
+            ContactsContract.Contacts.Entity.RAW_CONTACT_ID +
+            " ASC";
+
+    /*
+     * Returns a new CursorLoader. The arguments are similar to
+     * ContentResolver.query(), except for the Context argument, which supplies the location of
+     * the ContentResolver to use.
+     */
+    return new CursorLoader(
+            getApplicationContext(),  // The activity's context
+            mContactUri,              // The entity content URI for a single contact
+            projection,               // The columns to retrieve
+            null,                     // Retrieve all the raw contacts and their data rows.
+            null,                     //
+            sortOrder);               // Sort by the raw contact ID.
+}
+</pre>
+<p>
+    When the load is finished, {@link android.app.LoaderManager} invokes a callback to
+    {@link android.app.LoaderManager.LoaderCallbacks#onLoadFinished(Loader, D)
+    onLoadFinished()}. One of the incoming arguments to this method is a
+    {@link android.database.Cursor} with the results of the query. In your own app, you can get the
+    data from this {@link android.database.Cursor} to display it or work with it further.
+</p>
+<h3 id="Transactions">Batch modification</h3>
+<p>
+    Whenever possible, you should insert, update, and delete data in the Contacts Provider in
+    "batch mode", by creating an {@link java.util.ArrayList} of
+    {@link android.content.ContentProviderOperation} objects and calling
+    {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}. Because
+    the Contacts Provider performs all of the operations in an
+    {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} in a single
+    transaction, your modifications will never leave the contacts repository in an inconsistent
+    state. A batch modification also facilitates inserting a raw contact and its detail data at
+    the same time.
+</p>
+<p class="note">
+    <strong>Note:</strong> To modify a <em>single</em> raw contact, consider sending an intent to
+    the device's contacts application rather than handling the modification in your app.
+    Doing this is described in more detail in the section
+    <a href="#Intents">Retrieval and modification with intents</a>.
+</p>
+<h4>Yield points</h4>
+<p>
+    A batch modification containing a large number of operations can block other processes,
+    resulting in a bad overall user experience. To organize all the modifications you want to
+    perform in as few separate lists as possible, and at the same time prevent them from
+    blocking the system, you should set <strong>yield points</strong> for one or more operations.
+    A yield point is a {@link android.content.ContentProviderOperation} object that has its
+    {@link android.content.ContentProviderOperation#isYieldAllowed()} value set to
+    <code>true</code>. When the Contacts Provider encounters a yield point, it pauses its work to
+    let other processes run and closes the current transaction. When the provider starts again, it
+    continues with the next operation in the {@link java.util.ArrayList} and starts a new
+    transaction.
+</p>
+<p>
+    Yield points do result in more than one transaction per call to
+    {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}. Because of
+    this, you should set a yield point for the last operation for a set of related rows.
+    For example, you should set a yield point for the last operation in a set that adds a
+    raw contact rows and its associated data rows, or the last operation for a set of rows related
+    to a single contact.
+</p>
+<p>
+    Yield points are also a unit of atomic operation. All accesses between two yield points will
+    either succeed or fail as a single unit. If you don't set any yield points, the smallest
+    atomic operation is the entire batch of operations. If you do use yield points, you prevent
+    operations from degrading system performance, while at the same time ensuring that a subset of
+    operations is atomic.
+</p>
+<h4>Modification back references</h4>
+<p>
+    When you're inserting a new raw contact row and its associated data rows as a set of
+    {@link android.content.ContentProviderOperation} objects, you have to link the data rows to
+    the raw contact row by inserting the raw contact's
+    {@link android.provider.BaseColumns#_ID} value as the
+    {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID} value. However, this
+    value isn't available when you're creating the {@link android.content.ContentProviderOperation}
+    for the data row, because you haven't yet applied the
+    {@link android.content.ContentProviderOperation} for the raw contact row. To work around this,
+    the {@link android.content.ContentProviderOperation.Builder} class has the method
+    {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}.
+    This method allows you to insert or modify a column with the
+    result of a previous operation.
+</p>
+<p>
+    The {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}
+    method has two arguments:
+</p>
+    <dl>
+        <dt>
+            <code>key</code>
+        </dt>
+        <dd>
+            The key of a key-value pair. The value of this argument should be the name of a column
+            in the table that you're modifying.
+        </dd>
+        <dt>
+            <code>previousResult</code>
+        </dt>
+        <dd>
+            The 0-based index of a value in the array of
+            {@link android.content.ContentProviderResult} objects from
+            {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}. As
+            the batch operations are applied, the result of each operation is stored in an
+            intermediate array of results. The <code>previousResult</code> value is the index
+            of one of these results, which is retrieved and stored with the <code>key</code>
+            value. This allows you to insert a new raw contact record and get back its
+            {@link android.provider.BaseColumns#_ID} value, then make a "back reference" to the
+            value when you add a {@link android.provider.ContactsContract.Data} row.
+            <p>
+                The entire result array is created when you first call
+                {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()},
+                with a size equal to the size of the {@link java.util.ArrayList} of
+                {@link android.content.ContentProviderOperation} objects you provide. However, all
+                the elements in the result array are set to <code>null</code>, and if you try
+                to do a back reference to a result for an operation that hasn't yet been applied,
+{@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}
+                throws an {@link java.lang.Exception}.
+
+            </p>
+        </dd>
+    </dl>
+<p>
+    The following snippets show how to insert a new raw contact and data in batch. They
+    includes code that establishes a yield point and uses a back reference. The snippets are an
+    expanded version of the <code>createContacEntry()</code> method, which is part of the
+    <code>ContactAdder</code> class in the
+    <code><a href="{@docRoot}resources/samples/ContactManager/index.html">
+    Contact Manager</a></code> sample application.
+</p>
+<p>
+    The first snippet retrieves contact data from the UI. At this point, the user has already
+    selected the account for which the new raw contact should be added.
+</p>
+<pre>
+// Creates a contact entry from the current UI values, using the currently-selected account.
+protected void createContactEntry() {
+    /*
+     * Gets values from the UI
+     */
+    String name = mContactNameEditText.getText().toString();
+    String phone = mContactPhoneEditText.getText().toString();
+    String email = mContactEmailEditText.getText().toString();
+
+    int phoneType = mContactPhoneTypes.get(
+            mContactPhoneTypeSpinner.getSelectedItemPosition());
+
+    int emailType = mContactEmailTypes.get(
+            mContactEmailTypeSpinner.getSelectedItemPosition());
+</pre>
+<p>
+    The next snippet creates an operation to insert the raw contact row into the
+    {@link android.provider.ContactsContract.RawContacts} table:
+</p>
+<pre>
+    /*
+     * Prepares the batch operation for inserting a new raw contact and its data. Even if
+     * the Contacts Provider does not have any data for this person, you can't add a Contact,
+     * only a raw contact. The Contacts Provider will then add a Contact automatically.
+     */
+
+     // Creates a new array of ContentProviderOperation objects.
+    ArrayList&lt;ContentProviderOperation&gt; ops =
+            new ArrayList&lt;ContentProviderOperation&gt;();
+
+    /*
+     * Creates a new raw contact with its account type (server type) and account name
+     * (user's account). Remember that the display name is not stored in this row, but in a
+     * StructuredName data row. No other data is required.
+     */
+    ContentProviderOperation.Builder op =
+            ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
+            .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType())
+            .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName());
+
+    // Builds the operation and adds it to the array of operations
+    ops.add(op.build());
+</pre>
+<p>
+    Next, the code creates data rows for the display name, phone, and email rows.
+</p>
+<p>
+    Each operation builder object uses
+    {@link android.content.ContentProviderOperation.Builder#withValueBackReference(String, int) withValueBackReference()}
+    to get the
+    {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}. The reference points
+    back to the {@link android.content.ContentProviderResult} object from the first operation,
+    which adds the raw contact row and returns its new {@link android.provider.BaseColumns#_ID}
+    value. As a result, each data row is automatically linked by its
+    {@link android.provider.ContactsContract.DataColumns#RAW_CONTACT_ID}
+    to the new {@link android.provider.ContactsContract.RawContacts} row to which it belongs.
+</p>
+<p>
+    The {@link android.content.ContentProviderOperation.Builder} object that adds the email row is
+    flagged with {@link android.content.ContentProviderOperation.Builder#withYieldAllowed(boolean)
+    withYieldAllowed()}, which sets a yield point:
+</p>
+<pre>
+    // Creates the display name for the new raw contact, as a StructuredName data row.
+    op =
+            ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+            /*
+             * withValueBackReference sets the value of the first argument to the value of
+             * the ContentProviderResult indexed by the second argument. In this particular
+             * call, the raw contact ID column of the StructuredName data row is set to the
+             * value of the result returned by the first operation, which is the one that
+             * actually adds the raw contact row.
+             */
+            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+
+            // Sets the data row's MIME type to StructuredName
+            .withValue(ContactsContract.Data.MIMETYPE,
+                    ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
+
+            // Sets the data row's display name to the name in the UI.
+            .withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name);
+
+    // Builds the operation and adds it to the array of operations
+    ops.add(op.build());
+
+    // Inserts the specified phone number and type as a Phone data row
+    op =
+            ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+            /*
+             * Sets the value of the raw contact id column to the new raw contact ID returned
+             * by the first operation in the batch.
+             */
+            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+
+            // Sets the data row's MIME type to Phone
+            .withValue(ContactsContract.Data.MIMETYPE,
+                    ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
+
+            // Sets the phone number and type
+            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, phone)
+            .withValue(ContactsContract.CommonDataKinds.Phone.TYPE, phoneType);
+
+    // Builds the operation and adds it to the array of operations
+    ops.add(op.build());
+
+    // Inserts the specified email and type as a Phone data row
+    op =
+            ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
+            /*
+             * Sets the value of the raw contact id column to the new raw contact ID returned
+             * by the first operation in the batch.
+             */
+            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
+
+            // Sets the data row's MIME type to Email
+            .withValue(ContactsContract.Data.MIMETYPE,
+                    ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
+
+            // Sets the email address and type
+            .withValue(ContactsContract.CommonDataKinds.Email.ADDRESS, email)
+            .withValue(ContactsContract.CommonDataKinds.Email.TYPE, emailType);
+
+    /*
+     * Demonstrates a yield point. At the end of this insert, the batch operation's thread
+     * will yield priority to other threads. Use after every set of operations that affect a
+     * single contact, to avoid degrading performance.
+     */
+    op.withYieldAllowed(true);
+
+    // Builds the operation and adds it to the array of operations
+    ops.add(op.build());
+</pre>
+<p>
+    The last snippet shows the call to
+    {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()} that
+    inserts the new raw contact and data rows.
+</p>
+<pre>
+    // Ask the Contacts Provider to create a new contact
+    Log.d(TAG,"Selected account: " + mSelectedAccount.getName() + " (" +
+            mSelectedAccount.getType() + ")");
+    Log.d(TAG,"Creating contact: " + name);
+
+    /*
+     * Applies the array of ContentProviderOperation objects in batch. The results are
+     * discarded.
+     */
+    try {
+
+            getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
+    } catch (Exception e) {
+
+            // Display a warning
+            Context ctx = getApplicationContext();
+
+            CharSequence txt = getString(R.string.contactCreationFailure);
+            int duration = Toast.LENGTH_SHORT;
+            Toast toast = Toast.makeText(ctx, txt, duration);
+            toast.show();
+
+            // Log exception
+            Log.e(TAG, "Exception encountered while inserting contact: " + e);
+    }
+}
+</pre>
+<p>
+    Batch operations also allow you to implement <strong>optimistic concurrency control</strong>,
+    a method of applying modification transactions without having to lock the underlying repository.
+    To use this method, you apply the transaction and then check for other modifications that
+    may have been made at the same time. If you find an inconsistent modification has occurred, you
+    roll back your transaction and retry it.
+</p>
+<p>
+    Optimistic concurrency control is useful for a mobile device, where there's only one user at
+    a time, and simultaneous accesses to a data repository are rare. Because locking isn't used,
+    no time is wasted on setting locks or waiting for other transactions to release their locks.
+</p>
+<p>
+    To use optimistic concurrency control while updating a single
+    {@link android.provider.ContactsContract.RawContacts} row, follow these steps:
+</p>
+<ol>
+    <li>
+        Retrieve the raw contact's {@link android.provider.ContactsContract.SyncColumns#VERSION}
+        column along with the other data you retrieve.
+    </li>
+    <li>
+        Create a {@link android.content.ContentProviderOperation.Builder} object suitable for
+        enforcing a constraint, using the method
+        {@link android.content.ContentProviderOperation#newAssertQuery(Uri)}. For the content URI,
+        use {@link android.provider.ContactsContract.RawContacts#CONTENT_URI
+        RawContacts.CONTENT_URI}
+        with the raw contact's {@link android.provider.BaseColumns#_ID} appended to it.
+    </li>
+    <li>
+        For the {@link android.content.ContentProviderOperation.Builder} object, call
+        {@link android.content.ContentProviderOperation.Builder#withValue(String, Object)
+        withValue()} to compare the {@link android.provider.ContactsContract.SyncColumns#VERSION}
+        column to the version number you just retrieved.
+    </li>
+    <li>
+        For the same {@link android.content.ContentProviderOperation.Builder}, call
+        {@link android.content.ContentProviderOperation.Builder#withExpectedCount(int)
+        withExpectedCount()} to ensure that only one row is tested by this assertion.
+    </li>
+    <li>
+        Call {@link android.content.ContentProviderOperation.Builder#build()} to create the
+        {@link android.content.ContentProviderOperation} object, then add this object as the
+        first object in the {@link java.util.ArrayList} that you pass to
+        {@link android.content.ContentResolver#applyBatch(String, ArrayList) applyBatch()}.
+    </li>
+    <li>
+        Apply the batch transaction.
+    </li>
+</ol>
+<p>
+    If the raw contact row is updated by another operation between the time you read the row and
+    the time you attempt to modify it, the "assert" {@link android.content.ContentProviderOperation}
+    will fail, and the entire batch of operations will be backed out. You can then choose to retry
+    the batch or take some other action.
+</p>
+<p>
+    The following snippet demonstrates how to create an "assert"
+    {@link android.content.ContentProviderOperation} after querying for a single raw contact using
+    a {@link android.content.CursorLoader}:
+</p>
+<pre>
+/*
+ * The application uses CursorLoader to query the raw contacts table. The system calls this method
+ * when the load is finished.
+ */
+public void onLoadFinished(Loader&lt;Cursor&gt; loader, Cursor cursor) {
+
+    // Gets the raw contact's _ID and VERSION values
+    mRawContactID = cursor.getLong(cursor.getColumnIndex(BaseColumns._ID));
+    mVersion = cursor.getInt(cursor.getColumnIndex(SyncColumns.VERSION));
+}
+
+...
+
+// Sets up a Uri for the assert operation
+Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, mRawContactID);
+
+// Creates a builder for the assert operation
+ContentProviderOperation.Builder assertOp = ContentProviderOperation.netAssertQuery(rawContactUri);
+
+// Adds the assertions to the assert operation: checks the version and count of rows tested
+assertOp.withValue(SyncColumns.VERSION, mVersion);
+assertOp.withExpectedCount(1);
+
+// Creates an ArrayList to hold the ContentProviderOperation objects
+ArrayList ops = new ArrayList&lt;ContentProviderOperationg&gt;;
+
+ops.add(assertOp.build());
+
+// You would add the rest of your batch operations to "ops" here
+
+...
+
+// Applies the batch. If the assert fails, an Exception is thrown
+try
+    {
+        ContentProviderResult[] results =
+                getContentResolver().applyBatch(AUTHORITY, ops);
+
+    } catch (OperationApplicationException e) {
+
+        // Actions you want to take if the assert operation fails go here
+    }
+</pre>
+<h3 id="Intents">Retrieval and modification with intents</h3>
+<p>
+    Sending an intent to the device's contacts application allows you to access the Contacts
+    Provider indirectly. The intent starts the device's contacts application UI, in which users can
+    do contacts-related work. With this type of access, users can:
+    <ul>
+        <li>Pick a contact from a list and have it returned to your app for further work.</li>
+        <li>Edit an existing contact's data.</li>
+        <li>Insert a new raw contact for any of their accounts.</li>
+        <li>Delete a contact or contacts data.</li>
+    </ul>
+<p>
+    If the user is inserting or updating data, you can collect the data first and send it as
+    part of the intent.
+</p>
+<p>
+    When you use intents to access the Contacts Provider via the device's contacts application, you
+    don't have to write your own UI or code for accessing the provider. You also don't have to
+    request permission to read or write to the provider. The device's contacts application can
+    delegate read permission for a contact to you, and because you're making modifications to the
+    provider through another application, you don't have to have write permissions.
+</p>
+<p>
+    The general process of sending an intent to access a provider is described in detail in the
+    <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+    Content Provider Basics</a> guide in the section "Data access via intents." The action,
+    MIME type, and data values you use for the available tasks are summarized in Table 4, while the
+    extras values you can use with
+    {@link android.content.Intent#putExtra(String, String) putExtra()} are listed in the
+    reference documentation for {@link android.provider.ContactsContract.Intents.Insert}:
+</p>
+<p class="table-caption" id="table4">
+  <strong>Table 4.</strong> Contacts Provider Intents.
+</p>
+<table style="width:75%">
+    <tr>
+        <th scope="col" style="width:10%">Task</th>
+        <th scope="col" style="width:5%">Action</th>
+        <th scope="col" style="width:10%">Data</th>
+        <th scope="col" style="width:10%">MIME type</th>
+        <th scope="col" style="width:25%">Notes</th>
+    </tr>
+    <tr>
+        <td><strong>Pick a contact from a list</strong></td>
+        <td>{@link android.content.Intent#ACTION_PICK}</td>
+        <td>
+            One of:
+            <ul>
+                <li>
+{@link android.provider.ContactsContract.Contacts#CONTENT_URI Contacts.CONTENT_URI},
+                    which displays a list of contacts.
+                </li>
+                <li>
+{@link android.provider.ContactsContract.CommonDataKinds.Phone#CONTENT_URI Phone.CONTENT_URI},
+                    which displays a list of phone numbers for a raw contact.
+                </li>
+                <li>
+{@link android.provider.ContactsContract.CommonDataKinds.StructuredPostal#CONTENT_URI
+StructuredPostal.CONTENT_URI},
+                    which displays a list of postal addresses for a raw contact.
+                </li>
+                <li>
+{@link android.provider.ContactsContract.CommonDataKinds.Email#CONTENT_URI Email.CONTENT_URI},
+                    which displays a list of email addresses for a raw contact.
+                </li>
+            </ul>
+        </td>
+        <td>
+            Not used
+        </td>
+        <td>
+            Displays a list of raw contacts or a list of data from a raw contact, depending on the
+            content URI type you supply.
+            <p>
+                Call
+         {@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()},
+                which returns the content URI of the selected row. The form of the URI is the
+                table's content URI with the row's <code>LOOKUP_ID</code> appended to it.
+                The device's contacts app delegates read and write permissions to this content URI
+                for the life of your activity. See the
+                <a href="{@docRoot}guide/topics/providers/content-provider-basics.html">
+                Content Provider Basics</a> guide for more details.
+            </p>
+        </td>
+    </tr>
+    <tr>
+        <td><strong>Insert a new raw contact</strong></td>
+        <td>{@link android.provider.ContactsContract.Intents.Insert#ACTION Insert.ACTION}</td>
+        <td>N/A</td>
+        <td>
+            {@link android.provider.ContactsContract.RawContacts#CONTENT_TYPE
+            RawContacts.CONTENT_TYPE}, MIME type for a set of raw contacts.
+        </td>
+        <td>
+            Displays the device's contacts application's <strong>Add Contact</strong> screen. The
+            extras values you add to the intent are displayed. If sent with
+        {@link android.app.Activity#startActivityForResult(Intent, int) startActivityForResult()},
+            the content URI of the newly-added raw contact is passed back to your activity's
+            {@link android.app.Activity#onActivityResult(int, int, Intent) onActivityResult()}
+            callback method in the {@link android.content.Intent} argument, in the
+            "data" field. To get the value, call {@link android.content.Intent#getData()}.
+        </td>
+    </tr>
+    <tr>
+        <td><strong>Edit a contact</strong></td>
+        <td>{@link android.content.Intent#ACTION_EDIT}</td>
+        <td>
+            {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI} for
+            the contact. The editor activity will allow the user to edit any of the data associated
+            with this contact.
+        </td>
+        <td>
+            {@link android.provider.ContactsContract.Contacts#CONTENT_ITEM_TYPE
+            Contacts.CONTENT_ITEM_TYPE}, a single contact.</td>
+        <td>
+            Displays the Edit Contact screen in the contacts application. The extras values you add
+            to the intent are displayed. When the user clicks <strong>Done</strong> to save the
+            edits, your activity returns to the foreground.
+        </td>
+    </tr>
+    <tr>
+        <td><strong>Display a picker that can also add data.</strong></td>
+        <td>{@link android.content.Intent#ACTION_INSERT_OR_EDIT}</td>
+        <td>
+            N/A
+        </td>
+        <td>
+            {@link android.provider.ContactsContract.Contacts#CONTENT_ITEM_TYPE}
+        </td>
+         <td>
+            This intent always displays the contacts app's picker screen. The user can either
+            pick a contact to edit, or add a new contact. Either the edit or the add screen
+            appears, depending on the user's choice, and the extras data you pass in the intent
+            is displayed. If your app displays contact data such as an email or phone number, use
+            this intent to allow the user to add the data to an existing contact.
+            contact,
+            <p class="note">
+                <strong>Note:</strong> There's no need to send a name value in this intent's extras,
+                because the user always picks an existing name or adds a new one. Moreover,
+                if you send a name, and the user chooses to do an edit, the contacts app will
+                display the name you send, overwriting the previous value. If the user doesn't
+                notice this and saves the edit, the old value is lost.
+            </p>
+         </td>
+    </tr>
+</table>
+<p>
+    The device's contacts app doesn't allow you to delete a raw contact or any of its data with an
+    intent. Instead, to delete a raw contact, use
+    {@link android.content.ContentResolver#delete(Uri, String, String[]) ContentResolver.delete()}
+    or {@link android.content.ContentProviderOperation#newDelete(Uri)
+    ContentProviderOperation.newDelete()}.
+</p>
+<p>
+    The following snippet shows how to construct and send an intent that inserts a new raw
+    contact and data:
+</p>
+<pre>
+// Gets values from the UI
+String name = mContactNameEditText.getText().toString();
+String phone = mContactPhoneEditText.getText().toString();
+String email = mContactEmailEditText.getText().toString();
+
+String company = mCompanyName.getText().toString();
+String jobtitle = mJobTitle.getText().toString();
+
+// Creates a new intent for sending to the device's contacts application
+Intent insertIntent = new Intent(ContactsContract.Intents.Insert.ACTION);
+
+// Sets the MIME type to the one expected by the insertion activity
+insertIntent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
+
+// Sets the new contact name
+insertIntent.putExtra(ContactsContract.Intents.Insert.NAME, name);
+
+// Sets the new company and job title
+insertIntent.putExtra(ContactsContract.Intents.Insert.COMPANY, company);
+insertIntent.putExtra(ContactsContract.Intents.Insert.JOB_TITLE, jobtitle);
+
+/*
+ * Demonstrates adding data rows as an array list associated with the DATA key
+ */
+
+// Defines an array list to contain the ContentValues objects for each row
+ArrayList&lt;ContentValues&gt; contactData = new ArrayList&lt;ContentValues&gt;();
+
+
+/*
+ * Defines the raw contact row
+ */
+
+// Sets up the row as a ContentValues object
+ContentValues rawContactRow = new ContentValues();
+
+// Adds the account type and name to the row
+rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_TYPE, mSelectedAccount.getType());
+rawContactRow.put(ContactsContract.RawContacts.ACCOUNT_NAME, mSelectedAccount.getName());
+
+// Adds the row to the array
+contactData.add(rawContactRow);
+
+/*
+ * Sets up the phone number data row
+ */
+
+// Sets up the row as a ContentValues object
+ContentValues phoneRow = new ContentValues();
+
+// Specifies the MIME type for this data row (all data rows must be marked by their type)
+phoneRow.put(
+        ContactsContract.Data.MIMETYPE,
+        ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE
+);
+
+// Adds the phone number and its type to the row
+phoneRow.put(ContactsContract.CommonDataKinds.Phone.NUMBER, phone);
+
+// Adds the row to the array
+contactData.add(phoneRow);
+
+/*
+ * Sets up the email data row
+ */
+
+// Sets up the row as a ContentValues object
+ContentValues emailRow = new ContentValues();
+
+// Specifies the MIME type for this data row (all data rows must be marked by their type)
+emailRow.put(
+        ContactsContract.Data.MIMETYPE,
+        ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE
+);
+
+// Adds the email address and its type to the row
+emailRow.put(ContactsContract.CommonDataKinds.Email.ADDRESS, email);
+
+// Adds the row to the array
+contactData.add(emailRow);
+
+/*
+ * Adds the array to the intent's extras. It must be a parcelable object in order to
+ * travel between processes. The device's contacts app expects its key to be
+ * Intents.Insert.DATA
+ */
+insertIntent.putParcelableArrayListExtra(ContactsContract.Intents.Insert.DATA, contactData);
+
+// Send out the intent to start the device's contacts app in its add contact activity.
+startActivity(insertIntent);
+</pre>
+<h3 id="DataIntegrity">Data integrity</h3>
+<p>
+    Because the contacts repository contains important and sensitive data that users expect to be
+    correct and up-to-date, the Contacts Provider has well-defined rules for data integrity. It's
+    your responsibility to conform to these rules when you modify contacts data. The important
+    rules are listed here:
+</p>
+<dl>
+    <dt>
+        Always add a {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} row
+        for every {@link android.provider.ContactsContract.RawContacts} row you add.
+    </dt>
+    <dd>
+        A {@link android.provider.ContactsContract.RawContacts} row without a
+        {@link android.provider.ContactsContract.CommonDataKinds.StructuredName} row in the
+        {@link android.provider.ContactsContract.Data} table may cause problems during
+        aggregation.
+    </dd>
+    <dt>
+        Always link new {@link android.provider.ContactsContract.Data} rows to their parent
+        {@link android.provider.ContactsContract.RawContacts} row.
+    </dt>
+    <dd>
+        A {@link android.provider.ContactsContract.Data} row that isn't linked to a
+        {@link android.provider.ContactsContract.RawContacts} won't be visible in the device's
+        contacts application, and it might cause problems with sync adapters.
+    </dd>
+    <dt>
+        Change data only for those raw contacts that you own.
+    </dt>
+    <dd>
+        Remember that the Contacts Provider is usually managing data from several different
+        account types/online services. You need to ensure that your application only modifies
+        or deletes data for rows that belong to you, and that it only inserts data with an
+        account type and name that you control.
+    </dd>
+    <dt>
+        Always use the constants defined in {@link android.provider.ContactsContract} and its
+        subclasses for authorities, content URIs, URI paths, column names, MIME types, and
+        {@link android.provider.ContactsContract.CommonDataKinds.CommonColumns#TYPE} values.
+    </dt>
+    <dd>
+        Using these constants helps you to avoid errors. You'll also be notified with compiler
+        warnings if any of the constants is deprecated.
+    </dd>
+</dl>
+<h3 id="CustomData">Custom data rows</h3>
+<p>
+    By creating and using your own custom MIME types, you can insert, edit, delete, and retrieve
+    your own data rows in the {@link android.provider.ContactsContract.Data} table. Your rows
+    are limited to using the column defined in
+    {@link android.provider.ContactsContract.DataColumns}, although you can map your own
+    type-specific column names to the default column names. In the device's contacts application,
+    the data for your rows is displayed but can't be edited or deleted, and users can't add
+    additional data. To allow users to modify your custom data rows, you must provide an editor
+    activity in your own application.
+</p>
+<p>
+    To display your custom data, provide a <code>contacts.xml</code> file containing a
+    <code>&lt;ContactsAccountType&gt;</code> element and one or more of its
+    <code>&lt;ContactsDataKind&gt;</code> child elements. This is described in more detail in the
+    section <a href="#SocialStreamDataKind"><code>&lt;ContactsDataKind&gt; element</code></a>.
+</p>
+<p>
+    To learn more about custom MIME types, read the
+    <a href="{@docRoot}guide/topics/providers/content-provider-creating.html">
+    Creating a Content Provider</a> guide.
+</p>
+<h2 id="SyncAdapters">Contacts Provider Sync Adapters</h2>
+<p>
+    The Contacts Provider is specifically designed for handling <strong>synchronization</strong>
+    of contacts data between a device and an online service. This allows users to download
+    existing data to a new device and upload existing data to a new account.
+    Synchronization also ensures that users have the latest data at hand, regardless
+    of the source of additions and changes. Another advantage of synchronization is that it makes
+    contacts data available even when the device is not connected to the network.
+</p>
+<p>
+    Although you can implement synchronization in a variety of ways, the Android system provides
+    a plug-in synchronization framework that automates the following tasks:
+    <ul>
+
+    <li>
+        Checking network availability.
+    </li>
+    <li>
+        Scheduling and executing synchronization, based on user preferences.
+    </li>
+    <li>
+        Restarting synchronizations that have stopped.
+    </li>
+    </ul>
+<p>
+    To use this framework, you supply a sync adapter plug-in. Each sync adapter is unique to a
+    service and content provider, but can handle multiple account names for the same service. The
+    framework also allows multiple sync adapters for the same service and provider.
+</p>
+<h3 id="SyncClassesFiles">Sync adapter classes and files</h3>
+<p>
+    You implement a sync adapter as a subclass of
+    {@link android.content.AbstractThreadedSyncAdapter} and install it as part of an Android
+    application. The system learns about the sync adapter from elements in your application
+    manifest, and from a special XML file pointed to by the manifest. The XML file defines the
+    account type for the online service and the authority for the content provider, which together
+    uniquely identify the adapter. The sync adapter does not become active until the user adds an
+    account for the sync adapter's  account type and enables synchronization for the content
+    provider the sync adapter syncs with.  At that point, the system starts managing the adapter,
+    calling it as necessary to synchronize between the content provider and the server.
+</p>
+<p class="note">
+    <strong>Note:</strong> Using an account type as part of the sync adapter's identification allows
+    the system to detect and group together sync adapters that access different services from the
+    same organization. For example, sync adapters for Google online services all have the same
+    account type <code>com.google</code>. When users add a Google account to their devices, all
+    of the installed sync adapters for Google services are listed together; each sync adapter
+    listed syncs with a different content provider on the device.
+</p>
+<p>
+    Because most services require users to verify their identity before accessing
+    data, the Android system offers an authentication framework that is similar to, and often
+    used in conjunction with, the sync adapter framework. The authentication framework uses
+    plug-in authenticators that are subclasses of
+    {@link android.accounts.AbstractAccountAuthenticator}. An authenticator verifies
+    the user's identity in the following steps:
+    <ol>
+        <li>
+            Collects the user's name, password or similar information (the user's
+            <strong>credentials</strong>).
+        </li>
+        <li>
+            Sends the credentials to the service
+        </li>
+        <li>
+            Examines the service's reply.
+        </li>
+    </ol>
+<p>
+    If the service accepts the credentials, the authenticator can
+    store the credentials for later use. Because of the plug-in authenticator framework, the
+    {@link android.accounts.AccountManager} can provide access to any authtokens an authenticator
+    supports and chooses to expose, such as OAuth2 authtokens.
+</p>
+<p>
+    Although authentication is not required, most contacts services use it.
+    However, you're not required to use the Android authentication framework to do authentication.
+</p>
+<h3 id="SyncAdapterImplementing">Sync adapter implementation</h3>
+<p>
+    To implement a sync adapter for the Contacts Provider, you start by creating an
+    Android application that contains the following:
+</p>
+    <dl>
+        <dt>
+            A {@link android.app.Service} component that responds to requests from the system to
+            bind to the sync adapter.
+        </dt>
+        <dd>
+            When the system wants to run a synchronization, it calls the service's
+            {@link android.app.Service#onBind(Intent) onBind()} method to get an
+            {@link android.os.IBinder} for the sync adapter. This allows the system to do
+            cross-process calls to the adapter's methods.
+            <p>
+                In the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+                Sample Sync Adapter</a> sample app, the class name of this service is
+                <code>com.example.android.samplesync.syncadapter.SyncService</code>.
+            </p>
+        </dd>
+        <dt>
+            The actual sync adapter, implemented as a concrete subclass of
+            {@link android.content.AbstractThreadedSyncAdapter}.
+        </dt>
+        <dd>
+            This class does the work of downloading data from the server, uploading data from the
+            device, and resolving conflicts. The main work of the adapter is
+            done in the method {@link android.content.AbstractThreadedSyncAdapter#onPerformSync(
+            Account, Bundle, String, ContentProviderClient, SyncResult)
+            onPerformSync()}. This class must be instantiated as a singleton.
+            <p>
+                In the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+                Sample Sync Adapter</a> sample app, the sync adapter is defined in the class
+                <code>com.example.android.samplesync.syncadapter.SyncAdapter</code>.
+            </p>
+        </dd>
+        <dt>
+            A subclass of {@link android.app.Application}.
+        </dt>
+        <dd>
+            This class acts as a factory for the sync adapter singleton. Use the
+            {@link android.app.Application#onCreate()} method to instantiate the sync adapter, and
+            provide a static "getter" method to return the singleton to the
+            {@link android.app.Service#onBind(Intent) onBind()} method of the sync adapter's
+            service.
+        </dd>
+        <dt>
+            <strong>Optional:</strong> A {@link android.app.Service} component that responds to
+            requests from the system for user authentication.
+        </dt>
+        <dd>
+            {@link android.accounts.AccountManager} starts this service to begin the authentication
+            process. The service's {@link android.app.Service#onCreate()} method instantiates an
+            authenticator object. When the system wants to authenticate a user account for the
+            application's sync adapter, it calls the service's
+            {@link android.app.Service#onBind(Intent) onBind()} method to get an
+            {@link android.os.IBinder} for the authenticator. This allows the system to do
+            cross-process calls to the authenticator's methods..
+            <p>
+                In the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+                Sample Sync Adapter</a> sample app, the class name of this service is
+                <code>com.example.android.samplesync.authenticator.AuthenticationService</code>.
+            </p>
+        </dd>
+        <dt>
+            <strong>Optional:</strong> A concrete subclass of
+            {@link android.accounts.AbstractAccountAuthenticator} that handles requests for
+            authentication.
+        </dt>
+        <dd>
+            This class provides methods that the {@link android.accounts.AccountManager} invokes
+            to authenticate the user's credentials with the server. The details of the
+            authentication process vary widely, based on the server technology in use. You should
+            refer to the documentation for your server software to learn more about authentication.
+            <p>
+                In the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+                Sample Sync Adapter</a> sample app, the authenticator is defined in the class
+                <code>com.example.android.samplesync.authenticator.Authenticator</code>.
+            </p>
+        </dd>
+        <dt>
+            XML files that define the sync adapter and authenticator to the system.
+        </dt>
+        <dd>
+            The sync adapter and authenticator service components described previously are
+            defined in
+<code>&lt;<a href="{@docRoot}guide/topics/manifest/service-element.html">service</a>&gt;</code>
+            elements in the application manifest. These elements
+            contain
+<code>&lt;<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>&gt;</code>
+child elements that provide specific data to the
+            system:
+            <ul>
+                <li>
+                    The
+<code>&lt;<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>&gt;</code>
+                    element for the sync adapter service points to the
+                    XML file <code>res/xml/syncadapter.xml</code>. In turn, this file specifies
+                    a URI for the web service that will be synchronized with the Contacts Provider,
+                    and an account type for the web service.
+                </li>
+                <li>
+                    <strong>Optional:</strong> The
+<code>&lt;<a href="{@docRoot}guide/topics/manifest/meta-data-element.html">meta-data</a>&gt;</code>
+                    element for the authenticator points to the XML file
+                    <code>res/xml/authenticator.xml</code>. In turn, this file specifies the
+                    account type that this authenticator supports, as well as UI resources that
+                    appear during the authentication process. The account type specified in this
+                    element must be the same as the account type specified for the sync
+                    adapter.
+                </li>
+            </ul>
+        </dd>
+    </dl>
+<h2 id="SocialStream">Social Stream Data</h2>
+<p>
+    The {@link android.provider.ContactsContract.StreamItems} and
+    {@link android.provider.ContactsContract.StreamItemPhotos} tables
+    manage incoming data from social networks. You can write a sync adapter that adds stream data
+    from your own network to these tables, or you can read stream data from these tables and
+    display it in your own application, or both. With these features, your social networking
+    services and applications can be integrated into Android's social networking experience.
+</p>
+<h3 id="StreamText">Social stream text</h3>
+<p>
+    Stream items are always associated with a raw contact. The
+    {@link android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID} links to the
+    <code>_ID</code> value for the raw contact. The account type and account name of the raw
+    contact are also stored in the stream item row.
+</p>
+<p>
+    Store the data from your stream in the following columns:
+</p>
+<dl>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemsColumns#ACCOUNT_TYPE}
+    </dt>
+    <dd>
+        <strong>Required.</strong> The user's account type for the raw contact associated with this
+        stream item. Remember to set this value when you insert a stream item.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemsColumns#ACCOUNT_NAME}
+    </dt>
+    <dd>
+        <strong>Required.</strong> The user's account name for the raw contact associated with this
+        stream item. Remember to set this value when you insert a stream item.
+    </dd>
+    <dt>
+        Identifier columns
+    </dt>
+    <dd>
+        <strong>Required.</strong> You must insert the following identifier columns when you
+        insert a stream item:
+        <ul>
+            <li>
+                {@link android.provider.ContactsContract.StreamItemsColumns#CONTACT_ID}: The
+                {@link android.provider.BaseColumns#_ID} value of the contact that this stream
+                item is associated with.
+            </li>
+            <li>
+                {@link android.provider.ContactsContract.StreamItemsColumns#CONTACT_LOOKUP_KEY}: The
+                {@link android.provider.ContactsContract.ContactsColumns#LOOKUP_KEY} value of the
+                contact this stream item is associated with.
+            </li>
+            <li>
+                {@link android.provider.ContactsContract.StreamItemsColumns#RAW_CONTACT_ID}: The
+                {@link android.provider.BaseColumns#_ID} value of the raw contact that this stream
+                item is associated with.
+            </li>
+        </ul>
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemsColumns#COMMENTS}
+    </dt>
+    <dd>
+        Optional. Stores summary information that you can display at the beginning of a stream item.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemsColumns#TEXT}
+    </dt>
+    <dd>
+        The text of the stream item, either the content that was posted by the source of the item,
+        or a description of some action that generated the stream item. This column can contain
+        any formatting and embedded resource images that can be rendered by
+        {@link android.text.Html#fromHtml(String) fromHtml()}. The provider may truncate or
+        ellipsize long content, but it will try to avoid breaking tags.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP}
+    </dt>
+    <dd>
+        A text string containing the time the stream item was inserted or updated, in the form
+        of <em>milliseconds</em> since epoch. Applications that insert or update stream items are
+        responsible for maintaining this column; it is not automatically maintained by the
+        Contacts Provider.
+    </dd>
+</dl>
+<p>
+    To display identifying information for your stream items, use the
+    {@link android.provider.ContactsContract.StreamItemsColumns#RES_ICON},
+    {@link android.provider.ContactsContract.StreamItemsColumns#RES_LABEL}, and
+    {@link android.provider.ContactsContract.StreamItemsColumns#RES_PACKAGE} to link to resources
+    in your application.
+</p>
+<p>
+    The {@link android.provider.ContactsContract.StreamItems} table also contains the columns
+    {@link android.provider.ContactsContract.StreamItemsColumns#SYNC1} through
+    {@link android.provider.ContactsContract.StreamItemsColumns#SYNC4} for the exclusive use of
+    sync adapters.
+</p>
+<h3 id="StreamPhotos">Social stream photos</h3>
+<p>
+   The {@link android.provider.ContactsContract.StreamItemPhotos} table stores photos associated
+   with a stream item. The table's
+   {@link android.provider.ContactsContract.StreamItemPhotosColumns#STREAM_ITEM_ID} column
+   links to values in the {@link android.provider.BaseColumns#_ID} column of
+   {@link android.provider.ContactsContract.StreamItems} table. Photo references are stored in the
+   table in these columns:
+</p>
+<dl>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemPhotos#PHOTO} column (a BLOB).
+    </dt>
+    <dd>
+        A binary representation of the photo, resized by the provider for storage and display.
+        This column is available for backwards compatibility with previous versions of the Contacts
+        Provider that used it for storing photos. However, in the current version
+        you should not use this column to store photos. Instead, use
+        either {@link android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID} or
+        {@link android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_URI} (both of
+        which are described in the following points) to store photos in a file. This column now
+        contains a thumbnail of the photo, which is available for reading.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_FILE_ID}
+    </dt>
+    <dd>
+        A numeric identifier of a photo for a raw contact. Append this value to the constant
+        {@link android.provider.ContactsContract.DisplayPhoto#CONTENT_URI DisplayPhoto.CONTENT_URI}
+        to get a content URI pointing to a single photo file, and then call
+        {@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String)
+        openAssetFileDescriptor()} to get a handle to the photo file.
+    </dd>
+    <dt>
+        {@link android.provider.ContactsContract.StreamItemPhotosColumns#PHOTO_URI}
+    </dt>
+    <dd>
+        A content URI pointing directly to the photo file for the photo represented by this row.
+        Call {@link android.content.ContentResolver#openAssetFileDescriptor(Uri, String)
+        openAssetFileDescriptor()} with this URI to get a handle to the photo file.
+    </dd>
+</dl>
+<h3 id="SocialStreamTables">Using the social stream tables</h3>
+<p>
+    These tables work the same as the other main tables in the Contacts Provider, except that:
+</p>
+    <ul>
+        <li>
+            These tables require additional access permissions. To read from them, your application
+            must have the permission {@link android.Manifest.permission#READ_SOCIAL_STREAM}. To
+            modify them, your application must have the permission
+            {@link android.Manifest.permission#WRITE_SOCIAL_STREAM}.
+        </li>
+        <li>
+            For the {@link android.provider.ContactsContract.StreamItems} table, the number of rows
+            stored for each raw contact is limited. Once this limit is reached,
+            the Contacts Provider makes space for new stream item rows by automatically deleting
+            the rows having the oldest
+            {@link android.provider.ContactsContract.StreamItemsColumns#TIMESTAMP}. To get the
+            limit, issue a query to the content URI
+            {@link android.provider.ContactsContract.StreamItems#CONTENT_LIMIT_URI}. You can leave
+            all the arguments other than the content URI set to <code>null</code>. The query
+            returns a Cursor containing a single row, with the single column
+            {@link android.provider.ContactsContract.StreamItems#MAX_ITEMS}.
+        </li>
+    </ul>
+
+<p>
+    The class {@link android.provider.ContactsContract.StreamItems.StreamItemPhotos} defines a
+    sub-table of {@link android.provider.ContactsContract.StreamItemPhotos} containing the photo
+    rows for a single stream item.
+</p>
+<h3 id="SocialStreamInteraction">Social stream interactions</h3>
+<p>
+    The social stream data managed by the Contacts Provider, in conjunction with the
+    device's contacts application, offers a powerful way to connect your social networking system
+    with existing contacts. The following features are available:
+</p>
+    <ul>
+        <li>
+            By syncing your social networking service to the Contacts Provider with a sync
+            adapter, you can retrieve recent activity for a user's contacts and store it in
+            the {@link android.provider.ContactsContract.StreamItems} and
+            {@link android.provider.ContactsContract.StreamItemPhotos} tables for later use.
+        </li>
+        <li>
+            Besides regular synchronization, you can trigger your sync adapter to retrieve
+            additional data when the user selects a contact to view. This allows your sync adapter
+            to retrieve high-resolution photos and the most recent stream items for the contact.
+        </li>
+        <li>
+            By registering a notification with the device's contacts application and the Contacts
+            Provider, you can <em>receive</em> an intent when a contact is viewed, and at that point
+            update the contact's status from your service. This approach may be faster and use less
+            bandwidth than doing a full sync with a sync adapter.
+        </li>
+        <li>
+            Users can add a contact to your social networking service while looking at the contact
+            in the device's contacts application. You enable this with the "invite contact" feature,
+            which you enable with a combination of an activity that adds an existing contact to your
+            network, and an XML file that provides the device's contacts application and the
+            Contacts Provider with the details of your application.
+        </li>
+    </ul>
+<p>
+    Regular synchronization of stream items with the Contacts Provider is the same as
+    other synchronizations. To learn more about synchronization, see the section
+    <a href="#SyncAdapters">Contacts Provider Sync Adapters</a>. Registering notifications and
+    inviting contacts are covered in the next two sections.
+</p>
+<h4>Registering to handle social networking views</h4>
+<p>
+    To register your sync adapter to receive notifications when the user views a contact that's
+    managed by your sync adapter:
+</p>
+<ol>
+    <li>
+        Create a file named <code>contacts.xml</code> in your project's <code>res/xml/</code>
+        directory. If you already have this file, you can skip this step.
+    </li>
+    <li>
+        In this file, add the element
+<code>&lt;ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"&gt;</code>.
+        If this element already exists, you can skip this step.
+    </li>
+    <li>
+        To register a service that is notified when the user opens a contact's detail page in
+        the device's contacts application, add the attribute
+        <code>viewContactNotifyService="<em>serviceclass</em>"</code> to the element, where
+        <code><em>serviceclass</em></code> is the fully-qualified classname of the service
+        that should receive the intent from the device's contacts application. For the notifier
+        service, use a class that extends {@link android.app.IntentService}, to allow the service to
+        receive intents. The data in the incoming intent contains the content URI of the raw
+        contact the user clicked. From the notifier service, you can bind to and then call your
+        sync adapter to update the data for the raw contact.
+    </li>
+</ol>
+<p>
+    To register an activity to be called when the user clicks on a stream item or photo or both:
+</p>
+<ol>
+    <li>
+        Create a file named <code>contacts.xml</code> in your project's <code>res/xml/</code>
+        directory. If you already have this file, you can skip this step.
+    </li>
+    <li>
+        In this file, add the element
+<code>&lt;ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"&gt;</code>.
+        If this element already exists, you can skip this step.
+    </li>
+    <li>
+        To register one of your activities to handle the user clicking on a stream item in the
+        device's contacts application, add the attribute
+        <code>viewStreamItemActivity="<em>activityclass</em>"</code> to the element, where
+        <code><em>activityclass</em></code> is the fully-qualified classname of the activity
+        that should receive the intent from the device's contacts application.
+    </li>
+    <li>
+        To register one of your activities to handle the user clicking on a stream photo in the
+        device's contacts application, add the attribute
+        <code>viewStreamItemPhotoActivity="<em>activityclass</em>"</code> to the element, where
+        <code><em>activityclass</em></code> is the fully-qualified classname of the activity
+        that should receive the intent from the device's contacts application.
+    </li>
+</ol>
+<p>
+    The <code>&lt;ContactsAccountType&gt;</code> element is described in more detail in the
+    section <a href="#SocialStreamAcctType">&lt;ContactsAccountType&gt; element</a>.
+</p>
+<p>
+    The incoming intent contains the content URI of the item or photo that the user clicked.
+    To have separate activities for text items and for photos, use both attributes in the same file.
+</p>
+<h4>Interacting with your social networking service</h4>
+<p>
+    Users don't have to leave the device's contacts application to invite a contact to your social
+    networking site. Instead, you can have the device's contacts app send an intent for inviting the
+    contact to one of your activities. To set this up:
+</p>
+<ol>
+    <li>
+        Create a file named <code>contacts.xml</code> in your project's <code>res/xml/</code>
+        directory. If you already have this file, you can skip this step.
+    </li>
+    <li>
+        In this file, add the element
+<code>&lt;ContactsAccountType xmlns:android="http://schemas.android.com/apk/res/android"&gt;</code>.
+        If this element already exists, you can skip this step.
+    </li>
+    <li>
+        Add the following attributes:
+        <ul>
+            <li><code>inviteContactActivity="<em>activityclass</em>"</code></li>
+            <li>
+                <code>inviteContactActionLabel="&#64;string/<em>invite_action_label</em>"</code>
+            </li>
+        </ul>
+        The <code><em>activityclass</em></code> value is the fully-qualified classname of the
+        activity that should receive the intent. The <code><em>invite_action_label</em></code>
+        value is a text string that's displayed in the <strong>Add Connection</strong> menu in the
+        device's contacts application.
+    </li>
+</ol>
+<p class="note">
+    <strong>Note:</strong> <code>ContactsSource</code> is a deprecated tag name for
+    <code>ContactsAccountType</code>.
+</p>
+<h3 id="ContactsFile">contacts.xml reference</h3>
+<p>
+    The file <code>contacts.xml</code> contains XML elements that control the interaction of your
+    sync adapter and application with the contacts application and the Contacts Provider. These
+    elements are described in the following sections.
+</p>
+<h4 id="SocialStreamAcctType">&lt;ContactsAccountType&gt; element</h4>
+<p>
+    The <code>&lt;ContactsAccountType&gt;</code> element controls the interaction of your
+    application with the contacts application. It has the following syntax:
+</p>
+<pre>
+&lt;ContactsAccountType
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        inviteContactActivity="<em>activity_name</em>"
+        inviteContactActionLabel="<em>invite_command_text</em>"
+        viewContactNotifyService="<em>view_notify_service</em>"
+        viewGroupActivity="<em>group_view_activity</em>"
+        viewGroupActionLabel="<em>group_action_text</em>"
+        viewStreamItemActivity="<em>viewstream_activity_name</em>"
+        viewStreamItemPhotoActivity="<em>viewphotostream_activity_name</em>"&gt;
+</pre>
+<p>
+    <strong>contained in:</strong>
+</p>
+<p>
+    <code>res/xml/contacts.xml</code>
+</p>
+<p>
+    <strong>can contain:</strong>
+</p>
+<p>
+    <strong><code>&lt;ContactsDataKind&gt;</code></strong>
+</p>
+<p>
+    <strong>Description:</strong>
+</p>
+<p>
+    Declares Android components and UI labels that allow users to invite one of their contacts to
+    a social network, notify users when one of their social networking streams is updated, and
+    so forth.
+</p>
+<p>
+    Notice that the attribute prefix <code>android:</code> is not necessary for the attributes
+    of <code>&lt;ContactsAccountType&gt;</code>.
+</p>
+<p>
+    <strong>Attributes:</strong>
+</p>
+<dl>
+    <dt>{@code inviteContactActivity}</dt>
+    <dd>
+        The fully-qualified class name of the activity in your application that you want to
+        activate when the user selects <strong>Add connection</strong> from the device's
+        contacts application.
+    </dd>
+    <dt>{@code inviteContactActionLabel}</dt>
+    <dd>
+        A text string that is displayed for the activity specified in
+        {@code inviteContactActivity}, in the <strong>Add connection</strong> menu.
+        For example, you can use the string "Follow in my network". You can use a string resource
+        identifier for this label.
+    </dd>
+    <dt>{@code viewContactNotifyService}</dt>
+    <dd>
+        The fully-qualified class name of a service in your application that should receive
+        notifications when the user views a contact. This notification is sent by the device's
+        contacts application; it allows your application to postpone data-intensive operations
+        until they're needed. For example, your application can respond to this notification
+        by reading in and displaying the contact's high-resolution photo and most recent
+        social stream items. This feature is described in more detail in the section
+        <a href="#SocialStreamInteraction">Social stream interactions</a>. You can see an
+        example of the notification service in the <code>NotifierService.java</code> file in the
+        <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">SampleSyncAdapter</a>
+        sample app.
+    </dd>
+    <dt>{@code viewGroupActivity}</dt>
+    <dd>
+        The fully-qualified class name of an activity in your application that can display
+        group information. When the user clicks the group label in the device's contacts
+        application, the UI for this activity is displayed.
+    </dd>
+    <dt>{@code viewGroupActionLabel}</dt>
+    <dd>
+        The label that the contacts application displays for a UI control that allows
+        the user to look at groups in your application.
+        <p>
+            For example, if you install the Google+ application on your device and you sync
+            Google+ with the contacts application, you'll see Google+ circles listed as groups
+            in your contacts application's <strong>Groups</strong> tab. If you click on a
+            Google+ circle, you'll see people in that circle listed as a "group". At the top of
+            the display, you'll see a Google+ icon; if you click it, control switches to the
+            Google+ app. The contacts application does this with the
+            {@code viewGroupActivity}, using the Google+ icon as the value of
+            {@code viewGroupActionLabel}.
+        </p>
+        <p>
+            A string resource identifier is allowed for this attribute.
+        </p>
+    </dd>
+    <dt>{@code viewStreamItemActivity}</dt>
+    <dd>
+        The fully-qualified class name of an activity in your application that the device's
+        contacts application launches when the user clicks a stream item for a raw contact.
+    </dd>
+    <dt>{@code viewStreamItemPhotoActivity}</dt>
+    <dd>
+        The fully-qualified class name of an activity in your application that the device's
+        contacts application launches when the user clicks a photo in the stream item
+        for a raw contact.
+    </dd>
+</dl>
+<h4 id="SocialStreamDataKind">&lt;ContactsDataKind&gt; element</h4>
+<p>
+    The <code>&lt;ContactsDataKind&gt;</code> element controls the display of your application's
+    custom data rows in the contacts application's UI. It has the following syntax:
+</p>
+<pre>
+&lt;ContactsDataKind
+        android:mimeType="<em>MIMEtype</em>"
+        android:icon="<em>icon_resources</em>"
+        android:summaryColumn="<em>column_name</em>"
+        android:detailColumn="<em>column_name</em>"&gt;
+</pre>
+<p>
+    <strong>contained in:</strong>
+</p>
+<code>&lt;ContactsAccountType&gt;</code>
+<p>
+    <strong>Description:</strong>
+</p>
+<p>
+    Use this element to have the contacts application display the contents of a custom data row as
+    part of the details of a raw contact. Each <code>&lt;ContactsDataKind&gt;</code> child element
+    of <code>&lt;ContactsAccountType&gt;</code> represents a type of custom data row that your sync
+    adapter adds to the {@link android.provider.ContactsContract.Data} table. Add one
+    <code>&lt;ContactsDataKind&gt;</code> element for each custom MIME type you use. You don't have
+    to add the element if you have a custom data row for which you don't want to display data.
+</p>
+<p>
+    <strong>Attributes:</strong>
+</p>
+<dl>
+    <dt>{@code android:mimeType}</dt>
+    <dd>
+        The custom MIME type you've defined for one of your custom data row types in the
+        {@link android.provider.ContactsContract.Data} table. For example, the value
+        <code>vnd.android.cursor.item/vnd.example.locationstatus</code> could be a custom
+        MIME type for a data row that records a contact's last known location.
+    </dd>
+    <dt>{@code android:icon}</dt>
+    <dd>
+        An Android
+        <a href="{@docRoot}guide/topics/resources/drawable-resource.html">drawable resource</a>
+        that the contacts application displays next to your data. Use this to indicate to the
+        user that the data comes from your service.
+    </dd>
+    <dt>{@code android:summaryColumn}</dt>
+    <dd>
+        The column name for the first of two values retrieved from the data row. The
+        value is displayed as the first line of the entry for this data row. The first line is
+        intended to be used as a summary of the data, but that is optional. See also
+        <a href="#detailColumn">android:detailColumn</a>.
+    </dd>
+    <dt>{@code android:detailColumn}</dt>
+    <dd>
+        The column name for the second of two values retrieved from the data row. The value is
+        displayed as the second line of the entry for this data row. See also
+        {@code android:summaryColumn}.
+    </dd>
+</dl>
+<h2 id="AdditionalFeatures">Additional Contacts Provider Features</h2>
+<p>
+    Besides the main features described in previous sections, the Contacts Provider offers
+    these useful features for working with contacts data:
+</p>
+    <ul>
+       <li>Contact groups</li>
+       <li>Photo features</li>
+    </ul>
+<h3 id="Groups">Contact groups</h3>
+<p>
+    The Contacts Provider can optionally label collections of related contacts with
+    <strong>group</strong> data. If the server associated with a user account
+    wants to maintain groups, the sync adapter for the account's account type should transfer
+    groups data between the Contacts Provider and the server. When users add a new contact to the
+    server and then put this contact in a new group, the sync adapter must add the new group
+    to the {@link android.provider.ContactsContract.Groups} table. The group or groups a raw
+    contact belongs to are stored in the {@link android.provider.ContactsContract.Data} table, using
+    the {@link android.provider.ContactsContract.CommonDataKinds.GroupMembership} MIME type.
+</p>
+<p>
+    If you're designing a sync adapter that will add raw contact data from
+    server to the Contacts Provider, and you aren't using groups, then you need to tell the
+    Provider to make your data visible. In the code that is executed when a user adds an account
+    to the device, update the {@link android.provider.ContactsContract.Settings}
+    row that the Contacts Provider adds for the account. In this row, set the value of the
+    {@link android.provider.ContactsContract.SettingsColumns#UNGROUPED_VISIBLE
+    Settings.UNGROUPED_VISIBLE} column to 1. When you do this, the Contacts Provider will always
+    make your contacts data visible, even if you don't use groups.
+</p>
+<h3 id="Photos">Contact photos</h3>
+<p>
+    The {@link android.provider.ContactsContract.Data} table stores photos as rows with MIME type
+    {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE
+    Photo.CONTENT_ITEM_TYPE}. The row's
+    {@link android.provider.ContactsContract.RawContactsColumns#CONTACT_ID} column is linked to the
+    {@link android.provider.BaseColumns#_ID} column of the raw contact to which it belongs.
+    The class {@link android.provider.ContactsContract.Contacts.Photo} defines a sub-table of
+    {@link android.provider.ContactsContract.Contacts} containing photo information for a contact's
+    primary photo, which is the primary photo of the contact's primary raw contact. Similarly,
+    the class {@link android.provider.ContactsContract.RawContacts.DisplayPhoto} defines a sub-table
+    of {@link android.provider.ContactsContract.RawContacts} containing photo information for a
+    raw contact's primary photo.
+</p>
+<p>
+    The reference documentation for {@link android.provider.ContactsContract.Contacts.Photo} and
+    {@link android.provider.ContactsContract.RawContacts.DisplayPhoto} contain examples of
+    retrieving photo information. There is no convenience class for retrieving the primary
+    thumbnail for a raw contact, but you can send a query to the
+    {@link android.provider.ContactsContract.Data} table, selecting on the raw contact's
+    {@link android.provider.BaseColumns#_ID}, the
+    {@link android.provider.ContactsContract.CommonDataKinds.Photo#CONTENT_ITEM_TYPE
+    Photo.CONTENT_ITEM_TYPE}, and the {@link android.provider.ContactsContract.Data#IS_PRIMARY}
+    column to find the raw contact's primary photo row.
+</p>
+<p>
+    Social stream data for a person may also include photos. These are stored in the
+    {@link android.provider.ContactsContract.StreamItemPhotos} table, which is described in more
+    detail in the section <a href="#StreamPhotos">Social stream photos</a>.
+</p>
diff --git a/docs/html/guide/topics/providers/content-provider-basics.jd b/docs/html/guide/topics/providers/content-provider-basics.jd
index de89568..b1d6827 100644
--- a/docs/html/guide/topics/providers/content-provider-basics.jd
+++ b/docs/html/guide/topics/providers/content-provider-basics.jd
@@ -371,7 +371,7 @@
     ContentResolver.query()} on the "UI thread"". In actual code, however, you should
     do queries asynchronously on a separate thread. One way to do this is to use the
     {@link android.content.CursorLoader} class, which is described
-    in more detail in the <a href="{@docRoot}guide/topics/fundamentals/loaders.html">
+    in more detail in the <a href="{@docRoot}guide/components/loaders.html">
     Loaders</a> guide. Also, the lines of code are snippets only; they don't show a complete
     application.
 </p>
@@ -941,7 +941,7 @@
     <li>
         Asynchronous queries: You should do queries in a separate thread. One way to do this is to
         use a {@link android.content.CursorLoader} object. The examples in the
-        <a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> guide demonstrate
+        <a href="{@docRoot}guide/components/loaders.html">Loaders</a> guide demonstrate
         how to do this.
     </li>
     <li>
diff --git a/docs/html/guide/topics/providers/content-provider-creating.jd b/docs/html/guide/topics/providers/content-provider-creating.jd
index 4ebdb50..bad5390 100644
--- a/docs/html/guide/topics/providers/content-provider-creating.jd
+++ b/docs/html/guide/topics/providers/content-provider-creating.jd
@@ -551,7 +551,7 @@
         All of these methods except {@link android.content.ContentProvider#onCreate() onCreate()}
         can be called by multiple threads at once, so they must be thread-safe. To learn
         more about multiple threads, see the topic
-        <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">
+        <a href="{@docRoot}guide/components/processes-and-threads.html">
         Processes and Threads</a>.
     </li>
     <li>
@@ -1211,5 +1211,5 @@
 <p>
     Handling an incoming intent that wishes to modify your provider's data is no different from
     handling other intents. You can learn more about using intents by reading the topic
-    <a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>.
+    <a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>.
 </p>
diff --git a/docs/html/guide/topics/providers/content-providers.jd b/docs/html/guide/topics/providers/content-providers.jd
index 1707f03..751fc95 100644
--- a/docs/html/guide/topics/providers/content-providers.jd
+++ b/docs/html/guide/topics/providers/content-providers.jd
@@ -18,6 +18,9 @@
     <li>
         <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Calendar Provider</a>
     </li>
+    <li>
+        <a href="{@docRoot}guide/topics/providers/contacts-provider.html">Contacts Provider</a>
+    </li>
 </ol>
 
     <!-- Related Samples -->
@@ -38,6 +41,10 @@
         href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html">
         &quot;Cursor (Phones)&quot;</a>
         </li>
+        <li>
+            <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">
+            Sample Sync Adapter</a>
+        </li>
     </ol>
 </div>
 </div>
@@ -93,4 +100,11 @@
     <dd>
         How to access the Calendar Provider that is part of the Android platform.
     </dd>
+    <dt>
+        <strong><a href="{@docRoot}guide/topics/providers/contacts-provider.html">
+        Contacts Provider</a></strong>
+    </dt>
+    <dd>
+        How to access the Contacts Provider that is part of the Android platform.
+    </dd>
 </dl>
diff --git a/docs/html/guide/topics/renderscript/graphics.jd b/docs/html/guide/topics/renderscript/graphics.jd
deleted file mode 100644
index 462a990..0000000
--- a/docs/html/guide/topics/renderscript/graphics.jd
+++ /dev/null
@@ -1,993 +0,0 @@
-page.title=Graphics
-parent.title=Renderscript
-parent.link=index.html
-
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li>
-          <a href="#creating-graphics-rs">Creating a Graphics Renderscript</a>
-          <ol>
-            <li><a href="#creating-native">Creating the Renderscript file</a></li>
-            <li><a href="#creating-entry">Creating the Renderscript entry point class</a></li>
-            <li><a href="#creating-view">Creating the view class</a></li>
-            <li><a href="#creating-activity">Creating the activity class</a></li>
-          </ol>
-        </li>
-        <li>
-          <a href="#drawing">Drawing</a>
-          <ol>
-            <li><a href="#drawing-rsg">Simple drawing</a></li>
-            <li><a href="#drawing-mesh">Drawing with a mesh</a></li>
-          </ol>
-        </li>
-        <li>
-          <a href="#shaders">Shaders</a>
-          <ol>
-            <li><a href="#shader-bindings">Shader bindings</a></li>
-            <li><a href="#shader-sampler">Defining a sampler</a></li>
-          </ol>
-        </li>
-        <li>
-          <a href="#fbo">Rendering to a Framebuffer Object</a>
-        </li>
-      </ol>
-
-      <h2>Related Samples</h2>
-
-      <ol>
-        <li><a href="{@docRoot}resources/samples/RenderScript/Balls/index.html">Balls</a></li>
-
-        <li><a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a></li>
-
-        <li><a href="{@docRoot}resources/samples/RenderScript/FountainFbo/index.html">FountainFbo</a></li>        
-
-        <li><a href="{@docRoot}resources/samples/RenderScript/HelloWorld/index.html">Hello World</a></li>
-
-        <li><a
-href="{@docRoot}resources/samples/RenderScript/MiscSamples/index.html">Misc Samples</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Renderscript provides a number of graphics APIs for rendering, both at the Android
-  framework level as well as at the Renderscript runtime level. For instance, the Android framework APIs let you
-  create meshes and define shaders to customize the graphical rendering pipeline. The native
-  Renderscript graphics APIs let you draw the actual meshes to render your scene. You need to
-  be familiar with both APIs to appropriately render graphics on an Android-powered device.</p>
-
-  <h2 id="creating-graphics-rs">Creating a Graphics Renderscript</h2>
-
-  <p>Renderscript applications require various layers of code, so it is useful to create the following
-  files to help keep your application organized:</p>
-
-  <dl>
-    <dt>The Renderscript <code>.rs</code> file</dt>
-
-    <dd>This file contains the logic to do the graphics rendering.</dd>
-
-    <dt>The Renderscript entry point <code>.java</code> class</dt>
-
-    <dd>This class allows the view class to interact with the code defined in the <code>.rs</code>
-    file. This class contains a Renderscript object (instance of
-    <code>ScriptC_<em>renderscript_file</em></code>), which allows your Android framework code to
-    call the Renderscript code. In general, this class does much of the setup for Renderscript
-    such as shader and mesh building and memory allocation and binding. The SDK samples follow the
-    convention of naming this file ActivityRS.java,
-    where Activity is the name of your main activity class.</dd>
-
-    <dt>The view <code>.java</code> class</dt>
-
-    <dd>This class extends {@link android.renderscript.RSSurfaceView} or {@link
-    android.renderscript.RSTextureView} to provide a surface to render on. A {@link
-    android.renderscript.RSSurfaceView} consumes a whole window, but a {@link
-    android.renderscript.RSTextureView} allows you to draw Renderscript graphics inside of a
-    view and add it to a {@link android.view.ViewGroup} alongside
-    other views. In this class, you create a {@link android.renderscript.RenderScriptGL} context object
-    with a call to {@link android.renderscript.RSSurfaceView#createRenderScriptGL
-    RSSurfaceView.createRenderscriptGL()} or {@link android.renderscript.RSTextureView#createRenderScriptGL
-    RSTextureView.createRenderscriptGL()}. The {@link android.renderscript.RenderScriptGL} context object
-    contains information about the current rendering state of Renderscript such as the vertex and
-    fragment shaders. You pass this context object to the Renderscript entry point class, so that
-    class can modify the rendering context if needed and bind the Renderscript code to the context. Once bound,
-    the view class can use the Renderscript code to display graphics.
-    The view class should also implement callbacks for events inherited from {@link
-    android.view.View}, such as {@link android.view.View#onTouchEvent onTouchEvent()} and {@link
-    android.view.View#onKeyDown onKeyDown()} if you want to detect these types of user interactions.
-    The SDK samples follow the convention of naming this file ActivityView.java,
-    where Activity is the name of your main activity class</dd>
-
-    <dt>The activity <code>.java</code> class</dt>
-
-    <dd>This class is the main activity class and sets your {@link android.renderscript.RSSurfaceView} as the main content
-    view for this activity or uses the {@link android.renderscript.RSTextureView} alongside other views.</dd>
-  </dl>
-  <p>Figure 1 describes how these classes interact with one another in a graphics Renderscript:</p>
-  
-  <img src="{@docRoot}images/rs_graphics.png">
-  <p class="img-caption"><strong>Figure 1.</strong> Graphics Renderscript overview</p>
-
-
-  <p>The following sections describe how to create an application that uses a graphics Renderscript by using
-  the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Renderscript Fountain
-  sample</a> that is provided in the SDK as a guide (some code has been modified from its original
-  form for simplicity).</p>
-
-  <h3 id="creating-native">Creating the Renderscript file</h3>
-
-  <p>Your Renderscript code resides in <code>.rs</code> and <code>.rsh</code> (headers) files in the
-  <code>&lt;project_root&gt;/src/</code> directory. This code contains the logic to render your
-  graphics and declares all other necessary items such as variables, structs,
-  and pointers. Every graphics <code>.rs</code> file generally contains the following items:</p>
-
-  <ul>
-    <li>A pragma declaration (<code>#pragma rs java_package_name(<em>package.name</em>)</code>) that declares
-    the package name of the <code>.java</code> reflection of this Renderscript.</li>
-
-    <li>A pragma declaration (<code>#pragma version(1)</code>) that declares the version of Renderscript that
-    you are using (1 is the only value for now).</li>
-
-    <li>A <code>#include "rs_graphics.rsh"</code> declaration.</li>
-
-    <li>A <code>root()</code> function. This is the main worker function for your Renderscript and
-    calls Renderscript graphics functions to render scenes. This function is called every time a
-    frame refresh occurs, which is specified as its return value. A <code>0</code> (zero) specified for
-    the return value says to only render the frame when a property of the scene that you are
-    rendering changes. A non-zero positive integer specifies the refresh rate of the frame in
-    milliseconds.
-
-      <p class="note"><strong>Note:</strong> The Renderscript runtime makes its best effort to
-      refresh the frame at the specified rate. For example, if you are creating a live wallpaper
-      and set the return value to 20, the Renderscript runtime renders the wallpaper at 50fps if it has just
-      enough or more resources to do so. It renders as fast as it can if not enough resources
-      are available.</p>
-
-      <p>For more information on using the Renderscript graphics functions, see the <a href=
-      "#drawing">Drawing</a> section.</p>
-    </li>
-
-    <li>An <code>init()</code> function. This allows you to do initialization of your
-    Renderscript before the <code>root()</code> function runs, such as assigning values to variables. This
-    function runs once and is called automatically when the Renderscript starts, before anything
-    else in your Renderscript. Creating this function is optional.</li>
-
-    <li>Any variables, pointers, and structures that you wish to use in your Renderscript code (can
-    be declared in <code>.rsh</code> files if desired)</li>
-  </ul>
-
-  <p>The following code shows how the <code>fountain.rs</code> file is implemented:</p>
-  <pre>
-#pragma version(1)
-
-// Tell which java package name the reflected files should belong to
-#pragma rs java_package_name(com.example.android.rs.fountain)
-
-//declare shader binding
-#pragma stateFragment(parent)
-
-// header with graphics APIs, must include explicitly
-#include "rs_graphics.rsh"
-
-static int newPart = 0;
-
-// the mesh to render
-rs_mesh partMesh;
-
-// the point representing where a particle is rendered
-typedef struct __attribute__((packed, aligned(4))) Point {
-    float2 delta;
-    float2 position;
-    uchar4 color;
-} Point_t;
-Point_t *point;
-
-// main worker function that renders particles onto the screen
-int root() {
-    float dt = min(rsGetDt(), 0.1f);
-    rsgClearColor(0.f, 0.f, 0.f, 1.f);
-    const float height = rsgGetHeight();
-    const int size = rsAllocationGetDimX(rsGetAllocation(point));
-    float dy2 = dt * (10.f);
-    Point_t * p = point;
-    for (int ct=0; ct &lt; size; ct++) {
-        p-&gt;delta.y += dy2;
-        p-&gt;position += p-&gt;delta;
-        if ((p-&gt;position.y &gt; height) &amp;&amp; (p-&gt;delta.y &gt; 0)) {
-            p-&gt;delta.y *= -0.3f;
-        }
-        p++;
-    }
-
-    rsgDrawMesh(partMesh);
-    return 1;
-}
-
-// adds particles to the screen to render
-static float4 partColor[10];
-void addParticles(int rate, float x, float y, int index, bool newColor)
-{
-    if (newColor) {
-        partColor[index].x = rsRand(0.5f, 1.0f);
-        partColor[index].y = rsRand(1.0f);
-        partColor[index].z = rsRand(1.0f);
-    }
-    float rMax = ((float)rate) * 0.02f;
-    int size = rsAllocationGetDimX(rsGetAllocation(point));
-    uchar4 c = rsPackColorTo8888(partColor[index]);
-
-    Point_t * np = &amp;point[newPart];
-    float2 p = {x, y};
-    while (rate--) {
-        float angle = rsRand(3.14f * 2.f);
-        float len = rsRand(rMax);
-        np-&gt;delta.x = len * sin(angle);
-        np-&gt;delta.y = len * cos(angle);
-        np-&gt;position = p;
-        np-&gt;color = c;
-        newPart++;
-        np++;
-        if (newPart &gt;= size) {
-            newPart = 0;
-            np = &amp;point[newPart];
-        }
-    }
-}
-</pre>
-
-  <h3 id="creating-entry">Creating the Renderscript entry point class</h3>
-
-  <p>When you create a Renderscript (<code>.rs</code>) file, it is helpful to create a
-  corresponding Android framework class that is an entry point into the <code>.rs</code> file.
-  The most important thing this class does is receive a {@link android.renderscript.RenderScriptGL} rendering context
-  object from the <a href="#creating-view">view class</a> and binds the actual Renderscript
-  code to the rendering context. This notifies your view class of the code that it needs
-  to render graphics.
-  </p>
-
-  <p>In addition, this class should contain all of the things needed to set up Renderscript.
-  Some important things that you need to do in this class are:</p>
-
-  <ul>
-    <li>Create a Renderscript object 
-  <code>ScriptC_<em>rs_filename</em></code>. The Renderscript object is attached to the Renderscript bytecode, which is platform-independent and
-  gets compiled on the device when the Renderscript application runs. The bytecode is referenced
-  as a raw resource and is passed into the constructor for the Renderscript object.
-  For example, this is how the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a>
-  sample creates the Renderscript object:
-  <pre>
-  RenderScriptGL rs;  //obtained from the view class
-  Resources res;      //obtained from the view class
-  ...
-  ScriptC_fountain mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
-  </pre>
-  </li>
-  <li>Allocate any necessary memory and bind it to your Renderscript code via the Renderscript object.</li>
-  <li>Build any necessary meshes and bind them to the Renderscript code via the Renderscript object.</li>
-  <li>Create any necessary programs and bind them to the Renderscript code via the Renderscript object.</li>
-  </ul>
-
-  <p>The following code shows how the <a href=
-  "{@docRoot}resources/samples/RenderScript/Fountain/src/com/example/android/rs/fountain/FountainRS.html">
-  FountainRS</a> class is implemented:</p>
-  <pre>
-package com.example.android.rs.fountain;
-
-import android.content.res.Resources;
-import android.renderscript.*;
-import android.util.Log;
-
-public class FountainRS {
-    public static final int PART_COUNT = 50000;
-
-    public FountainRS() {
-    }
-
-    /**
-     * This provides us with the Renderscript context and resources
-     * that allow us to create the Renderscript object
-     */
-    private Resources mRes;
-    private RenderScriptGL mRS;
-
-    // Renderscript object
-    private ScriptC_fountain mScript;
-
-    // Called by the view class to initialize the Renderscript context and renderer
-    public void init(RenderScriptGL rs, Resources res) {
-        mRS = rs;
-        mRes = res;
-
-        /**
-         * Create a shader and bind to the Renderscript context
-         */
-        ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
-        pfb.setVaryingColor(true);
-        rs.bindProgramFragment(pfb.create());
-
-        /**
-         * Allocate memory for the particles to render and create the mesh to draw
-         */
-        ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);
-        Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
-        smb.addVertexAllocation(points.getAllocation());
-        smb.addIndexSetType(Mesh.Primitive.POINT);
-        Mesh sm = smb.create();
-
-       /**
-        * Create and bind the Renderscript object to the Renderscript context
-        */
-        mScript = new ScriptC_fountain(mRS, mRes, R.raw.fountain);
-        mScript.set_partMesh(sm);
-        mScript.bind_point(points);
-        mRS.bindRootScript(mScript);
-    }
-
-    boolean holdingColor[] = new boolean[10];
-
-    /**
-     * Calls Renderscript functions (invoke_addParticles)
-     * via the Renderscript object to add particles to render
-     * based on where a user touches the screen.
-     */
-    public void newTouchPosition(float x, float y, float pressure, int id) {
-        if (id &gt;= holdingColor.length) {
-            return;
-        }
-        int rate = (int)(pressure * pressure * 500.f);
-        if (rate &gt; 500) {
-            rate = 500;
-        }
-        if (rate &gt; 0) {
-            mScript.invoke_addParticles(rate, x, y, id, !holdingColor[id]);
-            holdingColor[id] = true;
-        } else {
-            holdingColor[id] = false;
-        }
-
-    }
-}
-</pre>
-
-
-  <h3 id="creating-view">Creating the view class</h3>
-
-
-  <p>To display graphics, you need a view to render on. Create a class that extends {@link
-  android.renderscript.RSSurfaceView} or {@link android.renderscript.RSTextureView}. This class
-  allows you to create a {@link android.renderscript.RenderScriptGL} context object by calling and
-  pass it to the Rendscript entry point class to bind the two. Once bound, the content is aware
-  of the code that it needs to use to render graphics with. If your Renderscript code
-  depends on any type of information that the view is aware of, such as touches from the user,
-  you can also use this class to relay that information to the Renderscript entry point class.
-  The following code shows how the <code>FountainView</code> class is implemented:</p>
-  <pre>
-package com.example.android.rs.fountain;
-
-import android.renderscript.RSTextureView;
-import android.renderscript.RenderScriptGL;
-import android.content.Context;
-import android.view.MotionEvent;
-
-public class FountainView extends RSTextureView {
-
-    public FountainView(Context context) {
-        super(context);
-    }
-    // Renderscript context
-    private RenderScriptGL mRS;
-    // Renderscript entry point object that calls Renderscript code
-    private FountainRS mRender;
-
-    /**
-     * Create Renderscript context and initialize Renderscript entry point
-     */
-    &#064;Override
-    protected void onAttachedToWindow() {
-        super.onAttachedToWindow();
-        android.util.Log.e("rs", "onAttachedToWindow");
-        if (mRS == null) {
-            RenderScriptGL.SurfaceConfig sc = new RenderScriptGL.SurfaceConfig();
-            mRS = createRenderScriptGL(sc);
-            mRender = new FountainRS();
-            mRender.init(mRS, getResources());
-        }
-    }
-
-    &#064;Override
-    protected void onDetachedFromWindow() {
-        super.onDetachedFromWindow();
-        android.util.Log.e("rs", "onDetachedFromWindow");
-        if (mRS != null) {
-            mRS = null;
-            destroyRenderScriptGL();
-        }
-    }
-
-
-    /**
-     * Use callbacks to relay data to Renderscript entry point class
-     */
-    &#064;Override
-    public boolean onTouchEvent(MotionEvent ev)
-    {
-        int act = ev.getActionMasked();
-        if (act == ev.ACTION_UP) {
-            mRender.newTouchPosition(0, 0, 0, ev.getPointerId(0));
-            return false;
-        } else if (act == MotionEvent.ACTION_POINTER_UP) {
-            // only one pointer going up, we can get the index like this
-            int pointerIndex = ev.getActionIndex();
-            int pointerId = ev.getPointerId(pointerIndex);
-            mRender.newTouchPosition(0, 0, 0, pointerId);
-        }
-        int count = ev.getHistorySize();
-        int pcount = ev.getPointerCount();
-
-        for (int p=0; p &lt; pcount; p++) {
-            int id = ev.getPointerId(p);
-            mRender.newTouchPosition(ev.getX(p),
-                                     ev.getY(p),
-                                     ev.getPressure(p),
-                                     id);
-
-            for (int i=0; i &lt; count; i++) {
-                mRender.newTouchPosition(ev.getHistoricalX(p, i),
-                                         ev.getHistoricalY(p, i),
-                                         ev.getHistoricalPressure(p, i),
-                                         id);
-            }
-        }
-        return true;
-    }
-}
-</pre>
-
-  <h3 id="creating-activity">Creating the activity class</h3>
-
-  <p>Applications that use Renderscript still behave like normal Android applications, so you
-   need an activity class that handles activity lifecycle callback events appropriately. The activity class
-   also sets your {@link android.renderscript.RSSurfaceView} view class to be the main content view of the
-   activity or uses your {@link android.renderscript.RSTextureView}
-  in a {@link android.view.ViewGroup} alongside other views.</p>
-
-  <p>The following code shows how the <a href="{@docRoot}resources/samples/RenderScript/Fountain/index.html">Fountain</a>
-  sample declares its activity class:</p>
-  <pre>
-package com.example.android.rs.fountain;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.util.Log;
-
-public class Fountain extends Activity {
-
-    private static final String LOG_TAG = "libRS_jni";
-    private static final boolean DEBUG  = false;
-    private static final boolean LOG_ENABLED = false;
-
-    private FountainView mView;
-
-    &#064;Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        // Create our Preview view and set it as 
-        // the content of our activity
-        mView = new FountainView(this);
-        setContentView(mView);
-    }
-
-    &#064;Override
-    protected void onResume() {
-        Log.e("rs", "onResume");
-
-        // Ideally a game should implement onResume() and onPause()
-        // to take appropriate action when the activity looses focus
-        super.onResume();
-        mView.resume();
-    }
-
-    &#064;Override
-    protected void onPause() {
-        Log.e("rs", "onPause");
-
-        // Ideally a game should implement onResume() and onPause()
-        // to take appropriate action when the activity looses focus
-        super.onPause();
-        mView.pause();
-
-    }
-
-    static void log(String message) {
-        if (LOG_ENABLED) {
-            Log.v(LOG_TAG, message);
-        }
-    }
-}
-</pre>
-
-<p>Now that you have an idea of what is involved in a Renderscript graphics application, you can
-start building your own. It might be easiest to begin with one of the
-<a href="{@docRoot}resources/samples/RenderScript/index.html">Renderscript samples</a> as a starting
-point if this is your first time using Renderscript.</p>
-
-  <h2 id="drawing">Drawing</h2>
-  <p>The following sections describe how to use the graphics functions to draw with Renderscript.</p>
-
-  <h3 id="drawing-rsg">Simple drawing</h3>
-
-  <p>The native Renderscript APIs provide a few convenient functions to easily draw a polygon or text to
-  the screen. You call these in your <code>root()</code> function to have them render to the {@link
-  android.renderscript.RSSurfaceView} or {@link android.renderscript.RSTextureView}. These functions are
-  available for simple drawing and should not be used for complex graphics rendering:</p>
-
-  <ul>
-    <li><code>rsgDrawRect()</code>: Sets up a mesh and draws a rectangle to the screen. It uses the
-    top left vertex and bottom right vertex of the rectangle to draw.</li>
-
-    <li><code>rsgDrawQuad()</code>: Sets up a mesh and draws a quadrilateral to the screen.</li>
-
-    <li><code>rsgDrawQuadTexCoords()</code>: Sets up a mesh and draws a quadrilateral to the screen
-    using the provided coordinates of a texture.</li>
-
-    <li><code>rsgDrawText()</code>: Draws specified text to the screen. Use <code>rsgFontColor()</code>
-    to set the color of the text.</li>
-  </ul>
-
-  <h3 id="drawing-mesh">Drawing with a mesh</h3>
-
-  <p>When you want to render complex scenes to the screen, instantiate a {@link
-  android.renderscript.Mesh} and draw it with <code>rsgDrawMesh()</code>. A {@link
-  android.renderscript.Mesh} is a collection of allocations that represent vertex data (positions,
-  normals, texture coordinates) and index data that provides information on how to draw triangles
-  and lines with the provided vertex data. You can build a Mesh in three different ways:</p>
-
-  <ul>
-    <li>Build the mesh with the {@link android.renderscript.Mesh.TriangleMeshBuilder} class, which
-    allows you to specify a set of vertices and indices for each triangle that you want to draw.</li>
-
-    <li>Build the mesh using an {@link android.renderscript.Allocation} or a set of {@link
-    android.renderscript.Allocation}s with the {@link android.renderscript.Mesh.AllocationBuilder}
-    class. This approach allows you to build a mesh with vertices already stored in memory, which allows you
-    to specify the vertices in Renderscript or Android framework code.</li>
-
-    <li>Build the mesh with the {@link android.renderscript.Mesh.Builder} class. You should use
-    this convenience method when you know the data types you want to use to build your mesh, but
-    don't want to make separate memory allocations like with {@link
-    android.renderscript.Mesh.AllocationBuilder}. You can specify the types that you want and this
-    mesh builder automatically creates the memory allocations for you.</li>
-  </ul>
-
-  <p>To create a mesh using the {@link android.renderscript.Mesh.TriangleMeshBuilder}, you need to
-  supply it with a set of vertices and the indices for the vertices that comprise the triangle. For
-  example, the following code specifies three vertices, which are added to an internal array,
-  indexed in the order they were added. The call to {@link
-  android.renderscript.Mesh.TriangleMeshBuilder#addTriangle addTriangle()} draws the triangle with
-  vertex 0, 1, and 2 (the vertices are drawn counter-clockwise).</p>
-  <pre>
-int float2VtxSize = 2;
-Mesh.TriangleMeshBuilder triangles = new Mesh.TriangleMeshBuilder(renderscriptGL,
-float2VtxSize, Mesh.TriangleMeshBuilder.COLOR);
-triangles.addVertex(300.f, 300.f);
-triangles.addVertex(150.f, 450.f);
-triangles.addVertex(450.f, 450.f);
-triangles.addTriangle(0 , 1, 2);
-Mesh smP = triangle.create(true);
-script.set_mesh(smP);
-</pre>
-
-  <p>To draw a mesh using the {@link android.renderscript.Mesh.AllocationBuilder}, you need to
-  supply it with one or more allocations that contain the vertex data:</p>
-  <pre>
-Allocation vertices;
-
-...
-Mesh.AllocationBuilder triangle = new Mesh.AllocationBuilder(mRS);
-smb.addVertexAllocation(vertices.getAllocation());
-smb.addIndexSetType(Mesh.Primitive.TRIANGLE);
-Mesh smP = smb.create();
-script.set_mesh(smP);
-</pre>
-
-  <p>In your Renderscript code, draw the built mesh to the screen:</p>
-  <pre>
-rs_mesh mesh;
-...
-
-int root(){
-...
-rsgDrawMesh(mesh);
-...
-return 0; //specify a non zero, positive integer to specify the frame refresh.
-          //0 refreshes the frame only when the mesh changes.
-}
-</pre>
-
-  <h2 id="shader">Programs</h2>
-
-  <p>You can attach four program objects to the {@link android.renderscript.RenderScriptGL} context
-  to customize the rendering pipeline. For example, you can create vertex and fragment shaders in
-  GLSL or build a raster program object that controls culling. The four programs mirror a
-  traditional graphical rendering pipeline:</p>
-
-  <table>
-    <tr>
-      <th>Android Object Type</th>
-
-      <th>Renderscript Native Type</th>
-
-      <th>Description</th>
-    </tr>
-
-    <tr>
-      <td>{@link android.renderscript.ProgramVertex}</td>
-
-      <td>rs_program_vertex</td>
-
-      <td>
-        <p>The Renderscript vertex program, also known as a vertex shader, describes the stage in
-        the graphics pipeline responsible for manipulating geometric data in a user-defined way.
-        The object is constructed by providing Renderscript with the following data:</p>
-
-        <ul>
-          <li>An {@link android.renderscript.Element} describing its varying inputs or attributes</li>
-
-          <li>GLSL shader string that defines the body of the program</li>
-
-          <li>a {@link android.renderscript.Type} that describes the layout of an
-          Allocation containing constant or uniform inputs</li>
-        </ul>
-
-        <p>Once the program is created, bind it to the {@link android.renderscript.RenderScriptGL}
-        graphics context by calling {@link android.renderscript.RenderScriptGL#bindProgramVertex
-        bindProgramVertex()}. It is then used for all subsequent draw calls until you bind a new
-        program. If the program has constant inputs, the user needs to bind an allocation
-        containing those inputs. The allocation's type must match the one provided during creation.
-        </p>
-
-        <p>The Renderscript runtime then does all the necessary plumbing to send those constants to
-        the graphics hardware. Varying inputs to the shader, such as position, normal, and texture
-        coordinates are matched by name between the input {@link android.renderscript.Element}
-        and the mesh object that is being drawn. The signatures don't have to be exact or in any
-        strict order. As long as the input name in the shader matches a channel name and size
-        available on the mesh, the Renderscript runtime handles connecting the two. Unlike OpenGL
-        there is no need to link the vertex and fragment programs.</p>
-
-        <p>To bind shader constants to the program, declare a <code>struct</code> that contains the necessary
-        shader constants in your Renderscript code. This <code>struct</code> is generated into a
-        reflected class that you can use as a constant input element during the program's creation.
-        It is an easy way to create an instance of this <code>struct</code> as an allocation. You would then
-        bind this {@link android.renderscript.Allocation} to the program and the
-        Renderscript runtime sends the data that is contained in the <code>struct</code> to the hardware
-        when necessary. To update shader constants, you change the values in the
-        {@link android.renderscript.Allocation} and notify the Renderscript
-        code of the change.</p>
-
-        <p>The {@link android.renderscript.ProgramVertexFixedFunction.Builder} class also
-        lets you build a simple vertex shader without writing GLSL code.
-        </p>
-      </td>
-    </tr>
-
-    <tr>
-      <td>{@link android.renderscript.ProgramFragment}</td>
-
-      <td>rs_program_fragment</td>
-
-      <td>
-        <p>The Renderscript fragment program, also known as a fragment shader, is responsible for
-        manipulating pixel data in a user-defined way. It's constructed from a GLSL shader string
-        containing the program body, texture inputs, and a {@link android.renderscript.Type}
-        object that describes the constants
-        used by the program. Like the vertex programs, when an {@link android.renderscript.Allocation}
-        with constant input
-        values is bound to the shader, its values are sent to the graphics program automatically.
-        Note that the values inside the {@link android.renderscript.Allocation} are not explicitly tracked.
-        If they change between two draw calls using the same program object, notify the runtime of that change by
-        calling <code>rsgAllocationSyncAll()</code>, so it can send the new values to hardware. Communication
-        between the vertex and fragment programs is handled internally in the GLSL code. For
-        example, if the fragment program is expecting a varying input called <code>varTex0</code>, the GLSL code
-        inside the program vertex must provide it.</p>
-
-        <p>To bind shader constructs to the program, declare a <code>struct</code> that contains the necessary
-        shader constants in your Renderscript code. This <code>struct</code> is generated into a
-        reflected class that you can use as a constant input element during the program's creation.
-        It is an easy way to create an instance of this <code>struct</code> as an allocation. You would then
-        bind this {@link android.renderscript.Allocation} to the program and the
-        Renderscript runtime sends the data that is contained in the <code>struct</code> to the hardware
-        when necessary. To update shader constants, you change the values in the
-        {@link android.renderscript.Allocation} and notify the Renderscript
-        code of the change.</p>
-
-        <p>The {@link android.renderscript.ProgramFragmentFixedFunction.Builder} class also
-        lets you build a simple fragment shader without writing GLSL code.
-        </p>
-      </td>
-    </tr>
-
-    <tr>
-      <td>{@link android.renderscript.ProgramStore}</td>
-
-      <td>rs_program_store</td>
-
-      <td>The Renderscript store program contains a set of parameters that control how the graphics
-      hardware writes to the framebuffer. It could be used to enable and disable depth writes and
-      testing, setup various blending modes for effects like transparency and define write masks
-      for color components.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.renderscript.ProgramRaster}</td>
-
-      <td>rs_program_raster</td>
-
-      <td>The Renderscript raster program is primarily used to specify whether point sprites are enabled and to
-      control the culling mode. By default back faces are culled.</td>
-    </tr>
-  </table>
-
-  <p>The following example defines a vertex shader in GLSL and binds it to a Renderscript context object:</p>
-  <pre>
-    private RenderScriptGL glRenderer;      //rendering context
-    private ScriptField_Point mPoints;      //vertices
-    private ScriptField_VpConsts mVpConsts; //shader constants
-
-    ...
-
-     ProgramVertex.Builder sb = new ProgramVertex.Builder(glRenderer);
-        String t =  "varying vec4 varColor;\n" +
-                    "void main() {\n" +
-                    "  vec4 pos = vec4(0.0, 0.0, 0.0, 1.0);\n" +
-                    "  pos.xy = ATTRIB_position;\n" +
-                    "  gl_Position = UNI_MVP * pos;\n" +
-                    "  varColor = vec4(1.0, 1.0, 1.0, 1.0);\n" +
-                    "  gl_PointSize = ATTRIB_size;\n" +
-                    "}\n";
-        sb.setShader(t);
-        sb.addConstant(mVpConsts.getType());
-        sb.addInput(mPoints.getElement());
-        ProgramVertex pvs = sb.create();
-        pvs.bindConstants(mVpConsts.getAllocation(), 0);
-        glRenderer.bindProgramVertex(pvs);
-</pre>
-
-
-  <p>The <a href=
-  "{@docRoot}resources/samples/RenderScript/MiscSamples/src/com/example/android/rs/miscsamples/RsRenderStatesRS.html">
-  RsRenderStatesRS</a> sample has many examples on how to create a shader without writing GLSL.</p>
-
-  <h3 id="shader-bindings">Program bindings</h3>
-
-  <p>You can also declare four pragmas that control default program bindings to the {@link
-  android.renderscript.RenderScriptGL} context when the script is executing:</p>
-
-  <ul>
-    <li><code>stateVertex</code></li>
-
-    <li><code>stateFragment</code></li>
-
-    <li><code>stateRaster</code></li>
-
-    <li><code>stateStore</code></li>
-  </ul>
-
-  <p>The possible values for each pragma are <code>parent</code> or <code>default</code>. Using
-  <code>default</code> binds the shaders to the graphical context with the system defaults.</p>
-
-  <p>Using <code>parent</code> binds the shaders in the same manner as it is bound in the calling
-  script. If this is the root script, the parent state is taken from the bind points that are set
-  by the {@link android.renderscript.RenderScriptGL} bind methods.</p>
-
-  <p>For example, you can define this at the top of your graphics Renderscript code to have
-  the vertex and store programs inherent the bind properties from their parent scripts:</p>
-  <pre>
-#pragma stateVertex(parent)
-#pragma stateStore(parent)
-</pre>
-
-  <h3 id="shader-sampler">Defining a sampler</h3>
-
-  <p>A {@link android.renderscript.Sampler} object defines how data is extracted from textures.
-  Samplers are bound to a {@link android.renderscript.ProgramFragment} alongside the texture
-  whose sampling they control. These
-  objects are used to specify such things as edge clamping behavior, whether mip-maps are used, and
-  the amount of anisotropy required. There might be situations where hardware does not support the
-  desired behavior of the sampler. In these cases, the Renderscript runtime attempts to provide the
-  closest possible approximation. For example, the user requested 16x anisotropy, but only 8x was
-  set because it's the best available on the hardware.</p>
-
-  <p>The <a href=
-  "{@docRoot}resources/samples/RenderScript/MiscSamples/src/com/example/android/rs/miscsamples/RsRenderStatesRS.html">
-  RsRenderStatesRS</a> sample has many examples on how to create a sampler and bind it to a
-  Fragment program.</p>
-
-
-
-<h2 id="fbo">Rendering to a Framebuffer Object</h2>
-
-<p>Framebuffer objects allow you to render offscreen instead of in the default onscreen
-framebuffer. This approach might be useful for situations where you need to post-process a texture before
-rendering it to the screen, or when you want to composite two scenes in one such as rendering a rear-view
-mirror of a car. There are two buffers associated with a framebuffer object: a color buffer
-and a depth buffer. The color buffer (required) contains the actual pixel data of the scene
-that you are rendering, and the depth buffer (optional) contains the values necessary to figure
-out what vertices are drawn depending on their z-values.</p>
-
-<p>In general, you need to do the following to render to a framebuffer object:</p>
-
-<ul>
-  <li>Create {@link android.renderscript.Allocation} objects for the color buffer and
-  depth buffer (if needed). Specify the {@link
-  android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} usage attribute for these
-  allocations to notify the Renderscript runtime to use these allocations for the framebuffer
-  object. For the color buffer allocation, you most likely need to declare the {@link
-  android.renderscript.Allocation#USAGE_GRAPHICS_TEXTURE} usage attribute
-  to use the color buffer as a texture, which is the most common use of the framebuffer object.</li>
-
-  <li>Tell the Renderscript runtime to render to the framebuffer object instead of the default
-  framebuffer by calling <code>rsgBindColorTarget()</code> and passing it the color buffer
-  allocation. If applicable, call <code>rsgBindDepthTarget()</code> passing in the depth buffer
-  allocation as well.</li>
-
-  <li>Render your scene normally with the <code>rsgDraw</code> functions. The scene will be
-  rendered into the color buffer instead of the default onscreen framebuffer.</li>
-
-  <li>When done, tell the Renderscript runtime stop rendering to the color buffer and back
-  to the default framebuffer by calling <code>rsgClearAllRenderTargets()</code>.</li>
-
-  <li>Create a fragment shader and bind a the color buffer to it as a texture.</li>
-
-  <li>Render your scene to the default framebuffer. The texture will be used according
-  to the way you setup your fragment shader.</li>
-</ul>
-
-<p>The following example shows you how to render to a framebuffer object by modifying the
-<a href="{@docRoot}guide/resources/renderscript/Fountain/">Fountain</a> Renderscript sample. The end
-result is the <a href="{@docRoot}guide/resources/renderscript/FountainFBO/">FountainFBO</a> sample.
-The modifications render the exact same scene into a framebuffer object as it does the default
-framebuffer. The framebuffer object is then rendered into the default framebuffer in a small
-area at the top left corner of the screen.</p>
-
-<ol>
-  <li>Modify <code>fountain.rs</code> and add the following global variables. This creates setter
-  methods when this file is reflected into a <code>.java</code> file, allowing you to allocate
-  memory in your Android framework code and binding it to the Renderscript runtime.
-<pre>
-//allocation for color buffer
-rs_allocation gColorBuffer;
-//fragment shader for rendering without a texture (used for rendering to framebuffer object)
-rs_program_fragment gProgramFragment;
-//fragment shader for rendering with a texture (used for rendering to default framebuffer)
-rs_program_fragment gTextureProgramFragment;
-</pre>
-  </li>
-
-  <li>Modify the root function of <code>fountain.rs</code> to look like the following code. The
-  modifications are commented:
-<pre>
-int root() {
-    float dt = min(rsGetDt(), 0.1f);
-    rsgClearColor(0.f, 0.f, 0.f, 1.f);
-    const float height = rsgGetHeight();
-    const int size = rsAllocationGetDimX(rsGetAllocation(point));
-    float dy2 = dt * (10.f);
-    Point_t * p = point;
-    for (int ct=0; ct < size; ct++) {
-        p->delta.y += dy2;
-        p->position += p->delta;
-        if ((p->position.y > height) && (p->delta.y > 0)) {
-            p->delta.y *= -0.3f;
-        }
-        p++;
-    }
-    //Tell Renderscript runtime to render to the frame buffer object
-    rsgBindColorTarget(gColorBuffer, 0);
-    //Begin rendering on a white background
-    rsgClearColor(1.f, 1.f, 1.f, 1.f);
-    rsgDrawMesh(partMesh);
-
-    //When done, tell Renderscript runtime to stop rendering to framebuffer object
-    rsgClearAllRenderTargets();
-
-    //Bind a new fragment shader that declares the framebuffer object to be used as a texture
-    rsgBindProgramFragment(gTextureProgramFragment);
-
-    //Bind the framebuffer object to the fragment shader at slot 0 as a texture
-    rsgBindTexture(gTextureProgramFragment, 0, gColorBuffer);
-    //Draw a quad using the framebuffer object as the texture
-    float startX = 10, startY = 10;
-    float s = 256;
-    rsgDrawQuadTexCoords(startX, startY, 0, 0, 1,
-                         startX, startY + s, 0, 0, 0,
-                         startX + s, startY + s, 0, 1, 0,
-                         startX + s, startY, 0, 1, 1);
-
-    //Rebind the original fragment shader to render as normal
-    rsgBindProgramFragment(gProgramFragment);
-
-    //Render the main scene
-    rsgDrawMesh(partMesh);
-
-    return 1;
-}
-</pre>
-  </li>
-
-  <li>In the <code>FountainRS.java</code> file, modify the <code>init()</code> method to look
-  like the following code. The modifications are commented:
-
-<pre>
-/* Add necessary members */
-private ScriptC_fountainfbo mScript;
-private Allocation mColorBuffer;
-private ProgramFragment mProgramFragment;
-private ProgramFragment mTextureProgramFragment;
-
-public void init(RenderScriptGL rs, Resources res) {
-    mRS = rs;
-    mRes = res;
-
-    ScriptField_Point points = new ScriptField_Point(mRS, PART_COUNT);
-
-    Mesh.AllocationBuilder smb = new Mesh.AllocationBuilder(mRS);
-    smb.addVertexAllocation(points.getAllocation());
-    smb.addIndexSetType(Mesh.Primitive.POINT);
-    Mesh sm = smb.create();
-
-    mScript = new ScriptC_fountainfbo(mRS, mRes, R.raw.fountainfbo);
-    mScript.set_partMesh(sm);
-    mScript.bind_point(points);
-
-    ProgramFragmentFixedFunction.Builder pfb = new ProgramFragmentFixedFunction.Builder(rs);
-    pfb.setVaryingColor(true);
-    mProgramFragment = pfb.create();
-    mScript.set_gProgramFragment(mProgramFragment);
-
-    /* Second fragment shader to use a texture (framebuffer object) to draw with */
-    pfb.setTexture(ProgramFragmentFixedFunction.Builder.EnvMode.REPLACE,
-        ProgramFragmentFixedFunction.Builder.Format.RGBA, 0);
-
-    /* Set the fragment shader in the Renderscript runtime */
-    mTextureProgramFragment = pfb.create();
-    mScript.set_gTextureProgramFragment(mTextureProgramFragment);
-
-    /* Create the allocation for the color buffer */
-    Type.Builder colorBuilder = new Type.Builder(mRS, Element.RGBA_8888(mRS));
-    colorBuilder.setX(256).setY(256);
-    mColorBuffer = Allocation.createTyped(mRS, colorBuilder.create(),
-    Allocation.USAGE_GRAPHICS_TEXTURE |
-    Allocation.USAGE_GRAPHICS_RENDER_TARGET);
-
-    /* Set the allocation in the Renderscript runtime */
-    mScript.set_gColorBuffer(mColorBuffer);
-
-    mRS.bindRootScript(mScript);
-}
-</pre>
-
-<p class="note"><strong>Note:</strong> This sample doesn't use a depth buffer, but the following code
-shows you how to declare an example depth buffer if you need to use
-one for your application. The depth buffer must have the same dimensions as the color buffer:
-
-<pre>
-Allocation mDepthBuffer;
-
-...
-
-Type.Builder b = new Type.Builder(mRS, Element.createPixel(mRS, DataType.UNSIGNED_16,
-    DataKind.PIXEL_DEPTH));
-b.setX(256).setY(256);
-mDepthBuffer = Allocation.createTyped(mRS, b.create(),
-Allocation.USAGE_GRAPHICS_RENDER_TARGET);
-
-</pre>
-</p>
-</li>
-
-  <li>Run and use the sample. The smaller, white quad on the top-left corner is using the
-  framebuffer object as a texture, which renders the same scene as the main rendering.</li>
-</ol>
diff --git a/docs/html/guide/topics/resources/animation-resource.jd b/docs/html/guide/topics/resources/animation-resource.jd
index 6473155..3af52aa 100644
--- a/docs/html/guide/topics/resources/animation-resource.jd
+++ b/docs/html/guide/topics/resources/animation-resource.jd
@@ -18,7 +18,7 @@
     <h2>See also</h2>
     <ol>
       <li><a href="{@docRoot}guide/topics/graphics/view-animation.html">View Animation</a></li>
-      <li><a href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a></li>
+      <li><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a></li>
     </ol>
   </div>
 </div>
@@ -334,7 +334,7 @@
 <dt>see also:</dt>
 <dd>
 <ul>
-  <li><a href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a></li>
+  <li><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a></li>
   <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API Demos</a> for examples
   on how to use the property animation system.</li>
 </ul>
diff --git a/docs/html/guide/topics/resources/index.jd b/docs/html/guide/topics/resources/index.jd
index 3f0f1ee..386abf5 100644
--- a/docs/html/guide/topics/resources/index.jd
+++ b/docs/html/guide/topics/resources/index.jd
@@ -1,103 +1,55 @@
-page.title=Application Resources
+page.title=App Resources
+page.landing=true
+page.landing.intro=It takes more than just code to build a great app. Resources are the additional files and static content that your code uses, such as bitmaps, layout definitions, user interface strings, animation instructions, and more.  
+page.landing.image=images/develop/resources.png
+
 @jd:body
 
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>Topics</h2>
-  <ol>
-    <li><a href="providing-resources.html">Providing Resources</a></li>
-    <li><a href="accessing-resources.html">Accessing Resources</a></li>
-    <li><a href="runtime-changes.html">Handling Runtime Changes</a></li>
-    <li><a href="localization.html">Localization</a></li>
-  </ol>
+<div class="landing-docs">
 
-  <h2>Reference</h2>
-  <ol>
-    <li><a href="available-resources.html">Resource Types</a></li>
-  </ol>
-</div>
-</div>
+  <div class="col-6">
+    <h3>Blog Articles</h3>
 
+    <a
+href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
+      <h4>New Tools For Managing Screen Sizes</h4>
+      <p>Android 3.2 includes new tools for supporting devices with a wide range of screen sizes.
+One important result is better support for a new size of screen; what is typically called a ?7-inch?
+tablet. This release also offers several new APIs to simplify developers? work in adjusting to
+different screen sizes.</p>
+    </a>
 
-<p>You should always externalize resources such as images and strings from your application
-code, so that you can maintain them independently. Externalizing your
-resources also allows you to provide alternative resources that support specific device
-configurations such as different languages or screen sizes, which becomes increasingly
-important as more Android-powered devices become available with different configurations. In order
-to provide compatibility with different configurations, you must organize resources in your
-project's {@code res/} directory, using various sub-directories that group resources by type and
-configuration.</p>
+    <a href="http://android-developers.blogspot.com/2012/01/holo-everywhere.html">
+      <h4>Holo Everywhere</h4>
+      <p>Before Android 4.0 the variance in system themes from device to device could make it
+difficult to design an app with a single predictable look and feel. We set out to improve this
+situation for the developer community in Ice Cream Sandwich and beyond.</p>
+    </a>
+    
+    <a
+href="http://android-developers.blogspot.com/2011/07/new-mode-for-apps-on-large-screens.html">
+      <h4>New Mode for Apps on Large Screens</h4>
+      <p>Android tablets are becoming more popular, and we're pleased to note that the vast majority
+of apps resize to the larger screens just fine. To keep the few apps that don't resize well from
+frustrating users with awkward-looking apps on their tablets, Android 3.2 introduces a screen
+compatibility mode that makes these apps more usable on tablets.</p>
+    </a>
+  </div>
 
-<div class="figure" style="width:429px">
-<img src="{@docRoot}images/resources/resource_devices_diagram1.png" height="167" alt="" />
-<p class="img-caption">
-<strong>Figure 1.</strong> Two different devices, each using the default layout
-(the app provides no alternative layouts).</p>
-</div>
+  <div class="col-6">
+    <h3>Training</h3>
 
-<div class="figure" style="width:429px">
-<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
-<p class="img-caption">
-<strong>Figure 2.</strong> Two different devices, each using a different layout provided
-for different screen sizes.</p>
-</div>
-
-<p>For any type of resource, you can specify <em>default</em> and multiple
-<em>alternative</em> resources for your application:</p>
-<ul>
-  <li>Default resources are those that should be used regardless of
-the device configuration or when there are no alternative resources that match the current
-configuration.</li>
-  <li>Alternative resources are those that you've designed for use with a specific
-configuration. To specify that a group of resources are for a specific configuration,
-append an appropriate configuration qualifier to the directory name.</li>
-</ul>
-
-<p>For example, while your default UI
-layout is saved in the {@code res/layout/} directory, you might specify a different layout to
-be used when the screen is in landscape orientation, by saving it in the {@code res/layout-land/}
-directory. Android automatically applies the appropriate resources by matching the
-device's current configuration to your resource directory names.</p>
-
-<p>Figure 1 illustrates how the system applies the same layout for
-two different devices when there are no alternative resources available. Figure 2 shows
-the same application when it adds an alternative layout resource for larger screens.</p>
-
-<p>The following documents provide a complete guide to how you can organize your application resources,
-specify alternative resources, access them in your application, and more:</p>
-
-<dl>
-  <dt><strong><a href="providing-resources.html">Providing Resources</a></strong></dt>
-  <dd>What kinds of resources you can provide in your app, where to save them, and how to create
-alternative resources for specific device configurations.</dd>
-  <dt><strong><a href="accessing-resources.html">Accessing Resources</a></strong></dt>
-  <dd>How to use the resources you've provided, either by referencing them from your application
-code or from other XML resources.</dd>
-  <dt><strong><a href="runtime-changes.html">Handling Runtime Changes</a></strong></dt>
-  <dd>How to manage configuration changes that occur while your Activity is running.</dd>
-  <dt><strong><a href="localization.html">Localization</a></strong></dt>
-  <dd>A bottom-up guide to localizing your application using alternative resources. While this is
-just one specific use of alternative resources, it is very important in order to reach more
-users.</dd>
-  <dt><strong><a href="available-resources.html">Resource Types</a></strong></dt>
-  <dd>A reference of various resource types you can provide, describing their XML elements,
-attributes, and syntax. For example, this reference shows you how to create a resource for
-application menus, drawables, animations, and more.</dd>
-</dl>
-
-<!--
-<h2>Raw Assets</h2>
-
-<p>An alternative to saving files in {@code res/} is to save files in the {@code
-assets/} directory. This should only be necessary if you need direct access to original files and
-directories by name. Files saved in the {@code assets/} directory will not be given a resource
-ID, so you can't reference them through the {@code R} class or from XML resources. Instead, you can
-query data in the {@code assets/} directory like an ordinary file system, search through the
-directory and
-read raw data using {@link android.content.res.AssetManager}. For example, this can be more useful
-when dealing with textures for a game. However, if you only need to read raw data from a file
-(such as a video or audio file), then you should save files into the {@code res/raw/} directory and
-then read a stream of bytes using {@link android.content.res.Resources#openRawResource(int)}. This
-is uncommon, but if you need direct access to original files in {@code assets/}, refer to the {@link
-android.content.res.AssetManager} documentation.</p>
--->
+    <a href="http://developer.android.com/training/basics/supporting-devices/index.html">
+      <h4>Supporting Different Devices</h4>
+      <p>This class teaches you how to use basic platform features that leverage alternative
+resources and other features so your app can provide an optimized user experience on a variety of
+Android-compatible devices, using a single application package (APK).</p>
+    </a>
+    
+    <a href="http://developer.android.com/training/multiscreen/index.html">
+      <h4>Designing for Multiple Screens</h4>
+      <p>This class shows you how to implement a user interface that's optimized for several screen
+configurations.</p>
+    </a>
+  </div>
+</div><!-- end landing-docs -->
diff --git a/docs/html/guide/topics/resources/layout-resource.jd b/docs/html/guide/topics/resources/layout-resource.jd
index 286e3d1..5643075 100644
--- a/docs/html/guide/topics/resources/layout-resource.jd
+++ b/docs/html/guide/topics/resources/layout-resource.jd
@@ -7,7 +7,7 @@
   <div id="qv">
     <h2>See also</h2>
     <ol>
-      <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li>
+      <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li>
     </ol>
   </div>
 </div>
@@ -128,7 +128,7 @@
       <p>More attributes are supported by the {@link android.view.View}
       base class, and many more are supported by each implementation of
       {@link android.view.View}. Read <a
-href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a> for more information. For
+href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a> for more information. For
 a reference of all available attributes,
       see the corresponding reference documentation (for example, the <a
       href="{@docRoot}reference/android/widget/TextView.html#lattrs">TextView XML attributes</a>).</p>
@@ -275,7 +275,7 @@
 <dt>see also:</dt>
 <dd>
 <ul>
-  <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li>
+  <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li>
   <li>{@link android.view.View}</li>
   <li>{@link android.view.ViewGroup}</li>
 </ul>
diff --git a/docs/html/guide/topics/resources/localization.jd b/docs/html/guide/topics/resources/localization.jd
index c2b668d..41961a3 100755
--- a/docs/html/guide/topics/resources/localization.jd
+++ b/docs/html/guide/topics/resources/localization.jd
@@ -38,7 +38,6 @@
   <li><a href="#emulator">Testing on an Emulator</a></li>
   <li><a href="#test-for-default">Testing for Default Resources</a></li>
   </ol>
-<li><a href="#publishing">Publishing</a></li>
 <li><a href="#checklist">Localization Checklists</a></li>
   <ol>
   <li><a href="#planning-checklist">Planning and Design Checklist</a></li>
@@ -52,7 +51,7 @@
   <li><a
 href="{@docRoot}resources/tutorials/localization/index.html">Hello, L10N Tutorial</a></li>
     <li><a href="{@docRoot}guide/topics/resources/providing-resources.html">Providing Resources</a></li>
-    <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">XML Layouts</a></li>
+    <li><a href="{@docRoot}guide/topics/ui/declaring-layout.html">Layouts</a></li>
     <li><a href="{@docRoot}reference/android/app/Activity.html#ActivityLifecycle">Activity Lifecycle</a></li>
 </ol>
 </div>
@@ -430,7 +429,7 @@
 <h3 id="emulator">Testing on an Emulator</h3>
 
 <p>For details about using the emulator, see See <a
-href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a>.</p>
+href="{@docRoot}tools/help/emulator.html">Android Emulator</a>.</p>
 <h4>Creating and using a custom locale</h4>
 
 <p>A &quot;custom&quot; locale is a language/region combination that the Android
@@ -505,26 +504,6 @@
 	<code>res/layout-port/main.xml</code>, then set the emulator or device to 
 	portrait orientation and see if the application will run. 
 
-<h2 id="publishing">Publishing Localized Applications</h2>
-
-<p>The Google Play is
-  the main application distribution system for Android devices. To publish a 
-  localized application, you need to sign your application, version it, and go
-through all the other steps described in <a
-href="{@docRoot}guide/publishing/preparing.html">Preparing to Publish</a>. </p>
-
-<p>If you split your application in several .apk files, each targeted to a
-different locale, follow these guidelines:</p>
-
-<ul>
-  <li>Sign each .apk file with the same certificate. For more about this, see <a
-href="{@docRoot}guide/publishing/app-signing.html#strategies">Signing
-Strategies</a>. </li>
-  <li>Give each .apk file a different application name. Currently it is
-impossible to publish two applications on Google Play that have exactly the
-same name.</li>
-<li>Include a complete set of default resources in each .apk file.</li>
-</ul>
 
 <h2 id="checklist">Localization Checklists</h2>
 
@@ -640,8 +619,6 @@
 border="0"></td>
     <td>Upload your .apk file or files to Google Play, selecting the appropriate
 languages as
-    you upload. (For more details, see <a
-href="{@docRoot}guide/publishing/publishing.html">Publishing Your
-Applications</a>.)</td>
+    you upload.</td>
   </tr>
 </table>
\ No newline at end of file
diff --git a/docs/html/guide/topics/resources/menu-resource.jd b/docs/html/guide/topics/resources/menu-resource.jd
index fb7612e..b2d6eb3 100644
--- a/docs/html/guide/topics/resources/menu-resource.jd
+++ b/docs/html/guide/topics/resources/menu-resource.jd
@@ -111,7 +111,7 @@
 callback to {@link android.app.Activity#onOptionsItemSelected onOptionsItemSelected()}. See the
 example at the bottom.
           <p class="warning"><strong>Warning:</strong> If you obfuscate your code using <a
-href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> (or a similar tool),
+href="{@docRoot}tools/help/proguard.html">ProGuard</a> (or a similar tool),
 be sure to exclude the method you specify in this attribute from renaming, because it can break the
 functionality.</p>
           <p>Introduced in API Level 11.</p></dd>
@@ -133,7 +133,8 @@
 bar. Setting multiple items to always appear as action items can result in them overlapping
 with other UI in the action bar.</td></tr>
             <tr><td><code>collapseActionView</code></td><td>The action view associated
-with this action item (as declared by <code>android:actionViewLayout</code>) is
+with this action item (as declared by <code>android:actionLayout</code> or
+<code>android:actionViewClass</code>) is
 collapsible.<br/>Introduced in API Level 14.</td></tr>
           </table>
           <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer 
@@ -141,7 +142,7 @@
           <p>Introduced in API Level 11.</p>
         </dd>
 
-        <dt><code>android:actionViewLayout</code></dt>
+        <dt><code>android:actionLayout</code></dt>
           <dd><em>Layout resource</em>. A layout to use as the action view.
           <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer 
 guide for more information.</p>
@@ -154,7 +155,7 @@
           <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer 
 guide for more information.</p>
           <p class="warning"><strong>Warning:</strong> If you obfuscate your code using <a
-href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> (or a similar tool),
+href="{@docRoot}tools/help/proguard.html">ProGuard</a> (or a similar tool),
 be sure to exclude the class you specify in this attribute from renaming, because it can break the
 functionality.</p>
           <p>Introduced in API Level 11.</p></dd>
@@ -166,7 +167,7 @@
           <p>See the <a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer
 guide for more information.</p>
           <p class="warning"><strong>Warning:</strong> If you obfuscate your code using <a
-href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> (or a similar tool),
+href="{@docRoot}tools/help/proguard.html">ProGuard</a> (or a similar tool),
 be sure to exclude the class you specify in this attribute from renaming, because it can break the
 functionality.</p>
           <p>Introduced in API Level 14.</p></dd>
diff --git a/docs/html/guide/topics/resources/overview.jd b/docs/html/guide/topics/resources/overview.jd
new file mode 100644
index 0000000..c3bd0bf
--- /dev/null
+++ b/docs/html/guide/topics/resources/overview.jd
@@ -0,0 +1,103 @@
+page.title=Resources Overview
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>Topics</h2>
+  <ol>
+    <li><a href="providing-resources.html">Providing Resources</a></li>
+    <li><a href="accessing-resources.html">Accessing Resources</a></li>
+    <li><a href="runtime-changes.html">Handling Runtime Changes</a></li>
+    <li><a href="localization.html">Localization</a></li>
+  </ol>
+
+  <h2>Reference</h2>
+  <ol>
+    <li><a href="available-resources.html">Resource Types</a></li>
+  </ol>
+</div>
+</div>
+
+
+<p>You should always externalize resources such as images and strings from your application
+code, so that you can maintain them independently. Externalizing your
+resources also allows you to provide alternative resources that support specific device
+configurations such as different languages or screen sizes, which becomes increasingly
+important as more Android-powered devices become available with different configurations. In order
+to provide compatibility with different configurations, you must organize resources in your
+project's {@code res/} directory, using various sub-directories that group resources by type and
+configuration.</p>
+
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram1.png" height="167" alt="" />
+<p class="img-caption">
+<strong>Figure 1.</strong> Two different devices, each using the default layout
+(the app provides no alternative layouts).</p>
+</div>
+
+<div class="figure" style="width:429px">
+<img src="{@docRoot}images/resources/resource_devices_diagram2.png" height="167" alt="" />
+<p class="img-caption">
+<strong>Figure 2.</strong> Two different devices, each using a different layout provided
+for different screen sizes.</p>
+</div>
+
+<p>For any type of resource, you can specify <em>default</em> and multiple
+<em>alternative</em> resources for your application:</p>
+<ul>
+  <li>Default resources are those that should be used regardless of
+the device configuration or when there are no alternative resources that match the current
+configuration.</li>
+  <li>Alternative resources are those that you've designed for use with a specific
+configuration. To specify that a group of resources are for a specific configuration,
+append an appropriate configuration qualifier to the directory name.</li>
+</ul>
+
+<p>For example, while your default UI
+layout is saved in the {@code res/layout/} directory, you might specify a different layout to
+be used when the screen is in landscape orientation, by saving it in the {@code res/layout-land/}
+directory. Android automatically applies the appropriate resources by matching the
+device's current configuration to your resource directory names.</p>
+
+<p>Figure 1 illustrates how the system applies the same layout for
+two different devices when there are no alternative resources available. Figure 2 shows
+the same application when it adds an alternative layout resource for larger screens.</p>
+
+<p>The following documents provide a complete guide to how you can organize your application resources,
+specify alternative resources, access them in your application, and more:</p>
+
+<dl>
+  <dt><strong><a href="providing-resources.html">Providing Resources</a></strong></dt>
+  <dd>What kinds of resources you can provide in your app, where to save them, and how to create
+alternative resources for specific device configurations.</dd>
+  <dt><strong><a href="accessing-resources.html">Accessing Resources</a></strong></dt>
+  <dd>How to use the resources you've provided, either by referencing them from your application
+code or from other XML resources.</dd>
+  <dt><strong><a href="runtime-changes.html">Handling Runtime Changes</a></strong></dt>
+  <dd>How to manage configuration changes that occur while your Activity is running.</dd>
+  <dt><strong><a href="localization.html">Localization</a></strong></dt>
+  <dd>A bottom-up guide to localizing your application using alternative resources. While this is
+just one specific use of alternative resources, it is very important in order to reach more
+users.</dd>
+  <dt><strong><a href="available-resources.html">Resource Types</a></strong></dt>
+  <dd>A reference of various resource types you can provide, describing their XML elements,
+attributes, and syntax. For example, this reference shows you how to create a resource for
+application menus, drawables, animations, and more.</dd>
+</dl>
+
+<!--
+<h2>Raw Assets</h2>
+
+<p>An alternative to saving files in {@code res/} is to save files in the {@code
+assets/} directory. This should only be necessary if you need direct access to original files and
+directories by name. Files saved in the {@code assets/} directory will not be given a resource
+ID, so you can't reference them through the {@code R} class or from XML resources. Instead, you can
+query data in the {@code assets/} directory like an ordinary file system, search through the
+directory and
+read raw data using {@link android.content.res.AssetManager}. For example, this can be more useful
+when dealing with textures for a game. However, if you only need to read raw data from a file
+(such as a video or audio file), then you should save files into the {@code res/raw/} directory and
+then read a stream of bytes using {@link android.content.res.Resources#openRawResource(int)}. This
+is uncommon, but if you need direct access to original files in {@code assets/}, refer to the {@link
+android.content.res.AssetManager} documentation.</p>
+-->
diff --git a/docs/html/guide/topics/resources/providing-resources.jd b/docs/html/guide/topics/resources/providing-resources.jd
index 82b5e29..b0d5d6f 100644
--- a/docs/html/guide/topics/resources/providing-resources.jd
+++ b/docs/html/guide/topics/resources/providing-resources.jd
@@ -44,7 +44,7 @@
 <p>You should always externalize application resources such as images and strings from your
 code, so that you can maintain them independently. You should also provide alternative resources for
 specific device configurations, by grouping them in specially-named resource directories. At
-runtime, Android uses uses the appropriate resource based on the current configuration. For
+runtime, Android uses the appropriate resource based on the current configuration. For
 example, you might want to provide a different UI layout depending on the screen size or different
 strings depending on the language setting.</p>
 
@@ -89,7 +89,7 @@
 
   <tr>
     <td><code>animator/</code></td>
-    <td>XML files that define <a href="{@docRoot}guide/topics/graphics/animation.html">property
+    <td>XML files that define <a href="{@docRoot}guide/topics/graphics/prop-animation.html">property
 animations</a>.</td>
   </tr>
 
@@ -744,7 +744,7 @@
         <p>The API level supported by the device. For example, <code>v1</code> for API level
 1 (devices with Android 1.0 or higher) and <code>v4</code> for API level 4 (devices with Android
 1.6 or higher). See the <a
-href="{@docRoot}guide/appendix/api-levels.html">Android API levels</a> document for more information
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API levels</a> document for more information
 about these values.</p>
         <p class="caution"><strong>Caution:</strong> Android 1.5 and 1.6 only match resources
 with this qualifier when it exactly matches the platform version. See the section below about <a
@@ -976,7 +976,7 @@
 notlong} resources in the corresponding default resource directory.</p>
   </li>
 
-  <li>Ensure that your <a href="{@docRoot}sdk/tools-notes.html">SDK Tools</a> version
+  <li>Ensure that your <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools</a> version
 is r6 or greater.
 
     <p>You need SDK Tools, Revision 6 (or greater), because it includes a new packaging tool that
diff --git a/docs/html/guide/topics/resources/runtime-changes.jd b/docs/html/guide/topics/resources/runtime-changes.jd
index 871b063..f5475b4 100644
--- a/docs/html/guide/topics/resources/runtime-changes.jd
+++ b/docs/html/guide/topics/resources/runtime-changes.jd
@@ -32,7 +32,7 @@
 
 <p>To properly handle a restart, it is important that your activity restores its previous
 state through the normal <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity
+href="{@docRoot}guide/components/activities.html#Lifecycle">Activity
 lifecycle</a>, in which Android calls
 {@link android.app.Activity#onSaveInstanceState(Bundle) onSaveInstanceState()} before it destroys
 your activity so that you can save data about the application state. You can then restore the state
@@ -45,7 +45,7 @@
 user data or state in order to handle events such as configuration changes or when the user receives
 an incoming phone call and then returns to your application much later after your application
 process may have been destroyed. To learn how you can restore your activity state, read about the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activity lifecycle</a>.</p>
+href="{@docRoot}guide/components/activities.html#Lifecycle">Activity lifecycle</a>.</p>
 
 <p>However, you might encounter a situation in which restarting your application and
 restoring significant amounts of data can be costly and create a poor user experience. In such a
diff --git a/docs/html/guide/topics/search/index.jd b/docs/html/guide/topics/search/index.jd
index 218511b..2ee624b 100644
--- a/docs/html/guide/topics/search/index.jd
+++ b/docs/html/guide/topics/search/index.jd
@@ -1,4 +1,4 @@
-page.title=Search
+page.title=Search Overview
 @jd:body
 
 <div id="qv-wrapper">
diff --git a/docs/html/guide/topics/search/search-dialog.jd b/docs/html/guide/topics/search/search-dialog.jd
index 8b8e75b..49451ac 100644
--- a/docs/html/guide/topics/search/search-dialog.jd
+++ b/docs/html/guide/topics/search/search-dialog.jd
@@ -561,7 +561,7 @@
 events are triggered once the user executes a search (the current activity receives {@link
 android.app.Activity#onPause()} and so forth, as
 described in the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activities</a>
+href="{@docRoot}guide/components/activities.html#Lifecycle">Activities</a>
 document). If, however, the current activity is the searchable activity, then one of two
 things happens:</p>
 
diff --git a/docs/html/guide/topics/security/index.jd b/docs/html/guide/topics/security/index.jd
new file mode 100644
index 0000000..775fc03
--- /dev/null
+++ b/docs/html/guide/topics/security/index.jd
@@ -0,0 +1,65 @@
+page.title=Security and Permissions
+page.landing=true
+page.landing.intro=Android's security architecture gives the user full control over what resources are accessible to each app, protecting the system itself and all apps in it. Learn how to use system permissions to request access to the resources your app needs and design your app for optimal security. 
+page.landing.image=
+
+@jd:body
+
+<div style="width=100%;padding-left:1em;">
+
+  <div style="float:left;clear:both;padding-top:20px;">
+    <p style="text-transform:uppercase;"><b style="color:#666;font-size:14px;">Blog Articles</b></p>
+
+    <div class="" style="border-top:2px solid #DDD;margin:1em 0;background-color:#F7F7F7;width:336px">
+
+      <div style="float:left;padding:8px;padding-right:16px;">
+        <img src="/assets/images/resource-article.png">
+      </div>
+
+      <div class="caption">
+        <p style="margin:0;padding:0;font-weight:bold;"><a href="">Accessibility: Are You Serving All Your Users?</a></p>
+        <p style="margin:0;padding:0">In the upcoming weeks, some of the older Client Login authentication keys will expire. 
+        If you generated the token you’re currently using to authenticate with the C2DM servers before October 2011, it will stop working.</p>
+
+        <p style="margin:0;padding:0;font-weight:bold;"><a href="">Android C2DM — Client Login key expiration</a></p>
+        <p  style="margin:0;padding:0">Accessibility is about making sure that Android users who have limited vision or other physical impairments can use your application just as well</p>
+
+        <p style="margin:0;padding:0;font-weight:bold;"><a href="">A Faster Emulator with Better Hardware Support</a></p>
+        <p  style="margin:0;padding:0">The Android emulator is a key tool for Android developers in building and testing their apps.
+        As the power and diversity of Android devices has grown quickly, it’s been hard for the emulator keep pace. </p>
+
+        <a href="">More &raquo;</a>
+      </div>
+    </div>
+  </div>
+
+  <div style="float:right;padding-top:20px;">
+    <p style="text-transform:uppercase;"><b style="color:#666;font-size:14px;">Training</b></p>
+
+    <div class="" style="border-top:2px solid #DDD;bordddser-top:2px solid #FF8800;margin:1em 0;background-color:#F7F7F7;width:336px">
+
+      <div style="float:left;padding:8px;padding-right:16px;">
+        <img src="/assets/images/resource-tutorial.png">
+      </div>
+
+      <div class="caption">
+        <p style="margin:0;padding:0;font-weight:bold;"><a href="">Managing the Activity Lifecycle</a></p>
+        <p  style="margin:0;padding:0">This class explains important lifecycle callback methods that each Activity
+        instance receives and how you can use them so your activity does what the user expects and does not consume system
+        resources when your activity doesn't need them.</p>
+
+        <p style="margin:0;padding:0;font-weight:bold;"><a href="">Supporting Different Devices</a></p>
+        <p  style="margin:0;padding:0">This class teaches you how to use basic platform features that leverage alternative
+        resources and other features so your app can provide an optimized user experience on a variety of Android-compatible devices,
+        using a single application package (APK).</p>
+
+        <p style="margin:0;padding:0;font-weight:bold;"><a href="">Sharing Content</a></p>
+        <p  style="margin:0;padding:0">This class covers some common ways you can send and receive content between
+        applications using Intent APIs and the ActionProvider object.</p>
+
+        <a href="">More &raquo;</a>
+      </div>
+    </div>
+</div>
+
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/security/permissions.jd b/docs/html/guide/topics/security/permissions.jd
new file mode 100644
index 0000000..3013e38
--- /dev/null
+++ b/docs/html/guide/topics/security/permissions.jd
@@ -0,0 +1,407 @@
+page.title=Permissions
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+<li><a href="#arch">Security Architecture</a></li>
+<li><a href="#signing">Application Signing</a></li>
+<li><a href="#userid">User IDs and File Access</a></li>
+<li><a href="#permissions">Using Permissions</a></li>
+<li><a href="#declaring">Declaring and Enforcing Permissions</a>
+	<ol>
+	<li><a href="#manifest">...in AndroidManifest.xml</a></li>
+	<li><a href="#broadcasts">...when Sending Broadcasts</a></li>
+	<li><a href="#enforcement">Other Permission Enforcement</a></li>
+	</ol></li>
+<li><a href="#uri">URI Permissions</a></li>
+</ol>
+</div>
+</div>
+<p>This document describes how application developers can use the
+security features provided by Android.  A more general <a
+href="http://source.android.com/tech/security/index.html"> Android Security
+Overview</a> is provided in the Android Open Source Project.</p>
+
+<p>Android is a privilege-separated operating system, in which each
+application runs with a distinct system identity (Linux user ID and group
+ID).  Parts of the system are also separated into distinct identities.
+Linux thereby isolates applications from each other and from the system.</p>
+
+<p>Additional finer-grained security features are provided through a
+"permission" mechanism that enforces restrictions on the specific operations
+that a particular process can perform, and per-URI permissions for granting
+ad-hoc access to specific pieces of data.</p>
+
+<a name="arch"></a>
+<h2>Security Architecture</h2>
+
+<p>A central design point of the Android security architecture is that no
+application, by default, has permission to perform any operations that would
+adversely impact other applications, the operating system, or the user.  This
+includes reading or writing the user's private data (such as contacts or
+e-mails), reading or writing another application's files, performing
+network access, keeping the device awake, etc.</p>
+
+<p>Because Android sandboxes applications from each other, applications
+must explicitly share resources and data. They do this by declaring the
+<em>permissions</em> they need for additional capabilities not provided by
+the basic sandbox. Applications statically declare the permissions they
+require, and the Android system prompts the user for consent at the time the
+application is installed. Android has no mechanism for granting permissions
+dynamically (at run-time) because it complicates the user experience to the
+detriment of security.</p>
+
+<p>The application sandbox does not depend on the technology used to build
+an application. In particular the Dalvik VM is not a security boundary, and
+any app can run native code (see <a href="/sdk/ndk/index.html">the Android
+NDK</a>). All types of applications &mdash; Java, native, and hybrid &mdash;
+are sandboxed in the same way and have the same degree of security from each
+other.</p>
+
+<a name="signing"></a>
+<h2>Application Signing</h2>
+
+<p>All Android applications (.apk files) must be signed with a certificate
+whose private key is held by their developer.  This certificate identifies
+the author of the application.  The certificate does <em>not</em> need to be
+signed by a certificate authority: it is perfectly allowable, and typical,
+for Android applications to use self-signed certificates. The purpose of
+certificates in Android is to distinguish application authors. This allows
+the system to grant or deny applications access to <a
+href="/guide/topics/manifest/permission-element.html#plevel">signature-level
+permissions</a> and to grant or deny an application's <a
+href="/guide/topics/manifest/manifest-element.html#uid">request to be given
+the same Linux identity</a> as another application.</p>
+
+<a name="userid"></a>
+<h2>User IDs and File Access</h2>
+
+<p>At install time, Android gives each package a distinct Linux user ID. The
+identity remains constant for the duration of the package's life on that
+device. On a different device, the same package may have a different UID;
+what matters is that each package has a distinct UID on a given device.</p>
+
+<p>Because security enforcement happens at the
+process level, the code of any two packages can not normally
+run in the same process, since they need to run as different Linux users.
+You can use the {@link android.R.attr#sharedUserId} attribute in the
+<code>AndroidManifest.xml</code>'s
+{@link android.R.styleable#AndroidManifest manifest} tag of each package to
+have them assigned the same user ID.  By doing this, for purposes of security
+the two packages are then treated as being the same application, with the same
+user ID and file permissions.  Note that in order to retain security, only two applications
+signed with the same signature (and requesting the same sharedUserId) will
+be given the same user ID.</p>
+
+<p>Any data stored by an application will be assigned that application's user
+ID, and not normally accessible to other packages.  When creating a new file
+with {@link android.content.Context#getSharedPreferences},
+{@link android.content.Context#openFileOutput}, or
+{@link android.content.Context#openOrCreateDatabase},
+you can use the
+{@link android.content.Context#MODE_WORLD_READABLE} and/or
+{@link android.content.Context#MODE_WORLD_WRITEABLE} flags to allow any other
+package to read/write the file.  When setting these flags, the file is still
+owned by your application, but its global read and/or write permissions have
+been set appropriately so any other application can see it.</p>
+
+
+<a name="permissions"></a>
+<h2>Using Permissions</h2>
+
+<p>A basic Android application has no permissions associated with it,
+meaning it can not do anything that would adversely impact the user experience
+or any data on the device.  To make use of protected features of the device,
+you must include in your <code>AndroidManifest.xml</code> one or more
+<code>{@link android.R.styleable#AndroidManifestUsesPermission &lt;uses-permission&gt;}</code>
+tags declaring the permissions that your application needs.</p>
+
+<p>For example, an application that needs to monitor incoming SMS messages would
+specify:</p>
+
+<pre>&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
+    package=&quot;com.android.app.myapp&quot; &gt;
+    &lt;uses-permission android:name=&quot;android.permission.RECEIVE_SMS&quot; /&gt;
+    ...
+&lt;/manifest&gt;</pre>
+
+<p>At application install time, permissions requested by the application are
+granted to it by the package installer, based on checks against the
+signatures of the applications declaring those permissions and/or interaction
+with the user. <em>No</em> checks with the user
+are done while an application is running: it either was granted a particular
+permission when installed, and can use that feature as desired, or the
+permission was not granted and any attempt to use the feature will fail
+without prompting the user.</p>
+
+<p>Often times a permission failure will result in a {@link
+java.lang.SecurityException} being thrown back to the application. However,
+this is not guaranteed to occur everywhere. For example, the {@link
+android.content.Context#sendBroadcast} method checks permissions as data is
+being delivered to each receiver, after the method call has returned, so you
+will not receive an exception if there are permission failures. In almost all
+cases, however, a permission failure will be printed to the system log.</p>
+
+<p>The permissions provided by the Android system can be found at {@link
+android.Manifest.permission}. Any application may also define and enforce its
+own permissions, so this is not a comprehensive list of all possible
+permissions.</p>
+
+<p>A particular permission may be enforced at a number of places during your
+program's operation:</p>
+
+<ul>
+<li>At the time of a call into the system, to prevent an application from
+executing certain functions.</li>
+<li>When starting an activity, to prevent applications from launching
+activities of other applications.</li>
+<li>Both sending and receiving broadcasts, to control who can receive
+your broadcast or who can send a broadcast to you.</li>
+<li>When accessing and operating on a content provider.</li>
+<li>Binding to or starting a service.</li>
+</ul>
+
+
+<a name="declaring"></a>
+<h2>Declaring and Enforcing Permissions</h2>
+
+<p>To enforce your own permissions, you must first declare them in your
+<code>AndroidManifest.xml</code> using one or more
+<code>{@link android.R.styleable#AndroidManifestPermission &lt;permission&gt;}</code>
+tags.</p>
+
+<p>For example, an application that wants to control who can start one
+of its activities could declare a permission for this operation as follows:</p>
+
+<pre>&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
+    package=&quot;com.me.app.myapp&quot; &gt;
+    &lt;permission android:name=&quot;com.me.app.myapp.permission.DEADLY_ACTIVITY&quot;
+        android:label=&quot;&#64;string/permlab_deadlyActivity&quot;
+        android:description=&quot;&#64;string/permdesc_deadlyActivity&quot;
+        android:permissionGroup=&quot;android.permission-group.COST_MONEY&quot;
+        android:protectionLevel=&quot;dangerous&quot; /&gt;
+    ...
+&lt;/manifest&gt;</pre>
+
+<p>The {@link android.R.styleable#AndroidManifestPermission_protectionLevel
+&lt;protectionLevel&gt;} attribute is required, telling the system how the
+user is to be informed of applications requiring the permission, or who is
+allowed to hold that permission, as described in the linked documentation.</p>
+
+<p>The {@link android.R.styleable#AndroidManifestPermission_permissionGroup
+&lt;permissionGroup&gt;} attribute is optional, and only used to help the system display
+permissions to the user.  You will usually want to set this to either a standard
+system group (listed in {@link android.Manifest.permission_group
+android.Manifest.permission_group}) or in more rare cases to one defined by
+yourself.  It is preferred to use an existing group, as this simplifies the
+permission UI shown to the user.</p>
+
+<p>Note that both a label and description should be supplied for the
+permission. These are string resources that can be displayed to the user when
+they are viewing a list of permissions
+(<code>{@link android.R.styleable#AndroidManifestPermission_label android:label}</code>)
+or details on a single permission (
+<code>{@link android.R.styleable#AndroidManifestPermission_description android:description}</code>).
+The label should be short, a few words
+describing the key piece of functionality the permission is protecting. The
+description should be a couple sentences describing what the permission allows
+a holder to do. Our convention for the description is two sentences, the first
+describing the permission, the second warning the user of what bad things
+can happen if an application is granted the permission.</p>
+
+<p>Here is an example of a label and description for the CALL_PHONE
+permission:</p>
+
+<pre>
+    &lt;string name=&quot;permlab_callPhone&quot;&gt;directly call phone numbers&lt;/string&gt;
+    &lt;string name=&quot;permdesc_callPhone&quot;&gt;Allows the application to call
+        phone numbers without your intervention. Malicious applications may
+        cause unexpected calls on your phone bill. Note that this does not
+        allow the application to call emergency numbers.&lt;/string&gt;
+</pre>
+
+<p>You can look at the permissions currently defined in the system with the
+Settings app and the shell command <code>adb shell pm list permissions</code>.
+To use the Settings app, go to Settings &gt; Applications.  Pick an app and
+scroll down to see the permissions that the app uses. For developers, the adb '-s'
+option displays the permissions in a form similar to how the user will see them:</p>
+
+<pre>
+$ adb shell pm list permissions -s
+All Permissions:
+
+Network communication: view Wi-Fi state, create Bluetooth connections, full
+Internet access, view network state
+
+Your location: access extra location provider commands, fine (GPS) location,
+mock location sources for testing, coarse (network-based) location
+
+Services that cost you money: send SMS messages, directly call phone numbers
+
+...</pre>
+
+<a name="manifest"></a>
+<h3>Enforcing Permissions in AndroidManifest.xml</h3>
+
+<p>High-level permissions restricting access to entire components of the
+system or application can be applied through your
+<code>AndroidManifest.xml</code>. All that this requires is including an {@link
+android.R.attr#permission android:permission} attribute on the desired
+component, naming the permission that will be used to control access to
+it.</p>
+
+<p><strong>{@link android.app.Activity}</strong> permissions
+(applied to the
+{@link android.R.styleable#AndroidManifestActivity &lt;activity&gt;} tag)
+restrict who can start the associated
+activity.  The permission is checked during
+{@link android.content.Context#startActivity Context.startActivity()} and
+{@link android.app.Activity#startActivityForResult Activity.startActivityForResult()};
+if the caller does not have
+the required permission then {@link java.lang.SecurityException} is thrown
+from the call.</p>
+
+<p><strong>{@link android.app.Service}</strong> permissions
+(applied to the
+{@link android.R.styleable#AndroidManifestService &lt;service&gt;} tag)
+restrict who can start or bind to the
+associated service.  The permission is checked during
+{@link android.content.Context#startService Context.startService()},
+{@link android.content.Context#stopService Context.stopService()} and
+{@link android.content.Context#bindService Context.bindService()};
+if the caller does not have
+the required permission then {@link java.lang.SecurityException} is thrown
+from the call.</p>
+
+<p><strong>{@link android.content.BroadcastReceiver}</strong> permissions
+(applied to the
+{@link android.R.styleable#AndroidManifestReceiver &lt;receiver&gt;} tag)
+restrict who can send broadcasts to the associated receiver.
+The permission is checked <em>after</em>
+{@link android.content.Context#sendBroadcast Context.sendBroadcast()} returns,
+as the system tries
+to deliver the submitted broadcast to the given receiver.  As a result, a
+permission failure will not result in an exception being thrown back to the
+caller; it will just not deliver the intent.  In the same way, a permission
+can be supplied to
+{@link android.content.Context#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, String, android.os.Handler)
+Context.registerReceiver()}
+to control who can broadcast to a programmatically registered receiver.
+Going the other way, a permission can be supplied when calling
+{@link android.content.Context#sendBroadcast(Intent, String) Context.sendBroadcast()}
+to restrict which BroadcastReceiver objects are allowed to receive the broadcast (see
+below).</p>
+
+<p><strong>{@link android.content.ContentProvider}</strong> permissions
+(applied to the
+{@link android.R.styleable#AndroidManifestProvider &lt;provider&gt;} tag)
+restrict who can access the data in
+a {@link android.content.ContentProvider}.  (Content providers have an important
+additional security facility available to them called
+<a href="#uri">URI permissions</a> which is described later.)
+Unlike the other components,
+there are two separate permission attributes you can set:
+{@link android.R.attr#readPermission android:readPermission} restricts who
+can read from the provider, and
+{@link android.R.attr#writePermission android:writePermission} restricts
+who can write to it.  Note that if a provider is protected with both a read
+and write permission, holding only the write permission does not mean
+you can read from a provider.  The permissions are checked when you first
+retrieve a provider (if you don't have either permission, a SecurityException
+will be thrown), and as you perform operations on the provider.  Using
+{@link android.content.ContentResolver#query ContentResolver.query()} requires
+holding the read permission; using
+{@link android.content.ContentResolver#insert ContentResolver.insert()},
+{@link android.content.ContentResolver#update ContentResolver.update()},
+{@link android.content.ContentResolver#delete ContentResolver.delete()}
+requires the write permission.
+In all of these cases, not holding the required permission results in a
+{@link java.lang.SecurityException} being thrown from the call.</p>
+
+
+<a name="broadcasts"></a>
+<h3>Enforcing Permissions when Sending Broadcasts</h3>
+
+<p>In addition to the permission enforcing who can send Intents to a
+registered {@link android.content.BroadcastReceiver} (as described above), you
+can also specify a required permission when sending a broadcast. By calling {@link
+android.content.Context#sendBroadcast(android.content.Intent,String)
+Context.sendBroadcast()} with a
+permission string, you require that a receiver's application must hold that
+permission in order to receive your broadcast.</p>
+
+<p>Note that both a receiver and a broadcaster can require a permission. When
+this happens, both permission checks must pass for the Intent to be delivered
+to the associated target.</p>
+
+
+<a name="enforcement"></a>
+<h3>Other Permission Enforcement</h3>
+
+<p>Arbitrarily fine-grained permissions can be enforced at any call into a
+service. This is accomplished with the {@link
+android.content.Context#checkCallingPermission Context.checkCallingPermission()}
+method. Call with a desired
+permission string and it will return an integer indicating whether that
+permission has been granted to the current calling process. Note that this can
+only be used when you are executing a call coming in from another process,
+usually through an IDL interface published from a service or in some other way
+given to another process.</p>
+
+<p>There are a number of other useful ways to check permissions. If you have
+the pid of another process, you can use the Context method {@link
+android.content.Context#checkPermission(String, int, int) Context.checkPermission(String, int, int)}
+to check a permission against that pid. If you have the package name of another
+application, you can use the direct PackageManager method {@link
+android.content.pm.PackageManager#checkPermission(String, String)
+PackageManager.checkPermission(String, String)}
+to find out whether that particular package has been granted a specific permission.</p>
+
+
+<a name="uri"></a>
+<h2>URI Permissions</h2>
+
+<p>The standard permission system described so far is often not sufficient
+when used with content providers.  A content provider may want to
+protect itself with read and write permissions, while its direct clients
+also need to hand specific URIs to other applications for them to operate on.
+A typical example is attachments in a mail application.  Access to the mail
+should be protected by permissions, since this is sensitive user data.  However,
+if a URI to an image attachment is given to an image viewer, that image viewer
+will not have permission to open the attachment since it has no reason to hold
+a permission to access all e-mail.</p>
+
+<p>The solution to this problem is per-URI permissions: when starting an
+activity or returning a result to an activity, the caller can set
+{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION
+Intent.FLAG_GRANT_READ_URI_PERMISSION} and/or
+{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION
+Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.  This grants the receiving activity
+permission access the specific data URI in the Intent, regardless of whether
+it has any permission to access data in the content provider corresponding
+to the Intent.</p>
+
+<p>This mechanism allows a common capability-style model where user interaction
+(opening an attachment, selecting a contact from a list, etc) drives ad-hoc
+granting of fine-grained permission.  This can be a key facility for reducing
+the permissions needed by applications to only those directly related to their
+behavior.</p>
+
+<p>The granting of fine-grained URI permissions does, however, require some
+cooperation with the content provider holding those URIs.  It is strongly
+recommended that content providers implement this facility, and declare that
+they support it through the
+{@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
+android:grantUriPermissions} attribute or
+{@link android.R.styleable#AndroidManifestGrantUriPermission
+&lt;grant-uri-permissions&gt;} tag.</p>
+
+<p>More information can be found in the
+{@link android.content.Context#grantUriPermission Context.grantUriPermission()},
+{@link android.content.Context#revokeUriPermission Context.revokeUriPermission()}, and
+{@link android.content.Context#checkUriPermission Context.checkUriPermission()}
+methods.</p>
+
diff --git a/docs/html/guide/topics/security/security.jd b/docs/html/guide/topics/security/security.jd
index 1fd9ba0..eeaac44 100644
--- a/docs/html/guide/topics/security/security.jd
+++ b/docs/html/guide/topics/security/security.jd
@@ -1,407 +1,770 @@
-page.title=Security and Permissions
+page.title=﻿Designing for Security
 @jd:body
 
 <div id="qv-wrapper">
 <div id="qv">
-
 <h2>In this document</h2>
 <ol>
-<li><a href="#arch">Security Architecture</a></li>
-<li><a href="#signing">Application Signing</a></li>
-<li><a href="#userid">User IDs and File Access</a></li>
-<li><a href="#permissions">Using Permissions</a></li>
-<li><a href="#declaring">Declaring and Enforcing Permissions</a>
-	<ol>
-	<li><a href="#manifest">...in AndroidManifest.xml</a></li>
-	<li><a href="#broadcasts">...when Sending Broadcasts</a></li>
-	<li><a href="#enforcement">Other Permission Enforcement</a></li>
-	</ol></li>
-<li><a href="#uri">URI Permissions</a></li>
+<li><a href="#Dalvik">Using Davlik Code</a></li>
+<li><a href="#Native">Using Native Code</a></li>
+<li><a href="#Data">Storing Data</a></li>
+<li><a href="#IPC">Using IPC</a></li>
+<li><a href="#Permissions">Using Permissions</a></li>
+<li><a href="#Networking">Using Networking</a></li>
+<li><a href="#DynamicCode">Dynamically Loading Code</a></li>
+<li><a href="#Input">Performing Input Validation</a></li>
+<li><a href="#UserData">Handling User Data</a></li>
+<li><a href="#Crypto">Using Cryptography</a></li>
 </ol>
-</div>
-</div>
-<p>This document describes how application developers can use the
-security features provided by Android.  A more general <a
-href="http://source.android.com/tech/security/index.html"> Android Security
-Overview</a> is provided in the Android Open Source Project.</p>
+<h2>See also</h2>
+<ol>
+<li><a href="http://source.android.com/tech/security/index.html">Android
+Security Overview</a></li>
+<li><a href="{@docRoot}guide/topics/security/security.html">Android Security
+And Permissions</a></li>
+</ol>
+</div></div>
+<p>Android was designed so that most developers will be able to build
+applications using the default settings and not be confronted with difficult
+decisions about security.  Android also has a number of security features built
+into the operating system that significantly reduce the frequency and impact of
+application security issues.</p>
 
-<p>Android is a privilege-separated operating system, in which each
-application runs with a distinct system identity (Linux user ID and group
-ID).  Parts of the system are also separated into distinct identities.
-Linux thereby isolates applications from each other and from the system.</p>
+<p>Some of the security features that help developers build secure applications
+include:
+<ul>
+<li>The Android Application Sandbox that isolates data and code execution on a
+per-application basis.</li>
+<li>Android application framework with robust implementations of common
+security functionality such as cryptography, permissions, and secure IPC.</li>
+<li>Technologies like ASLR, NX, ProPolice, safe_iop, OpenBSD dlmalloc, OpenBSD
+calloc, and Linux mmap_min_addr to mitigate risks associated with common memory
+management errors</li>
+<li>An encrypted filesystem that can be enabled to protect data on lost or
+stolen devices.</li>
+</ul></p>
 
-<p>Additional finer-grained security features are provided through a
-"permission" mechanism that enforces restrictions on the specific operations
-that a particular process can perform, and per-URI permissions for granting
-ad-hoc access to specific pieces of data.</p>
+<p>Nevertheless, it is important for developers to be familiar with Android
+security best practices to make sure they take advantage of these capabilities
+and to reduce the likelihood of inadvertently introducing security issues that
+can affect their applications.</p>
 
-<a name="arch"></a>
-<h2>Security Architecture</h2>
+<p>This document is organized around common APIs and development techniques
+that can have security implications for your application and its users. As
+these best practices are constantly evolving, we recommend you check back
+occasionally throughout your application development process.</p>
 
-<p>A central design point of the Android security architecture is that no
-application, by default, has permission to perform any operations that would
-adversely impact other applications, the operating system, or the user.  This
-includes reading or writing the user's private data (such as contacts or
-e-mails), reading or writing another application's files, performing
-network access, keeping the device awake, etc.</p>
+<a name="Dalvik"></a>
+<h2>Using Dalvik Code</h2>
+<p>Writing secure code that runs in virtual machines is a well-studied topic
+and many of the issues are not specific to Android.  Rather than attempting to
+rehash these topics, we’d recommend that you familiarize yourself with the
+existing literature. Two of the more popular resources are:
+<ul>
+<li><a href="http://www.securingjava.com/toc.html">
+http://www.securingjava.com/toc.html</a></li>
+<li><a
+href="https://www.owasp.org/index.php/Java_Security_Resources">
+https://www.owasp.org/index.php/Java_Security_Resources</a></li>
+</ul></p>
 
-<p>Because Android sandboxes applications from each other, applications
-must explicitly share resources and data. They do this by declaring the
-<em>permissions</em> they need for additional capabilities not provided by
-the basic sandbox. Applications statically declare the permissions they
-require, and the Android system prompts the user for consent at the time the
-application is installed. Android has no mechanism for granting permissions
-dynamically (at run-time) because it complicates the user experience to the
-detriment of security.</p>
+<p>This document is focused on the areas which are Android specific and/or
+different from other environments.  For developers experienced with VM
+programming in other environments, there are two broad issues that may be
+different about writing apps for Android:
+<ul>
+<li>Some virtual machines, such as the JVM or .net runtime, act as a security
+boundary, isolating code from the underlying operating system capabilities.  On
+Android, the Dalvik VM is not a security boundary -- the application sandbox is
+implemented at the OS level, so Dalvik can interoperate with native code in the
+same application without any security constraints.</li>
+<li>Given the limited storage on mobile devices, it’s common for developers
+to want to build modular applications and use dynamic class loading.  When
+doing this consider both the source where you retrieve your application logic
+and where you store it locally. Do not use dynamic class loading from sources
+that are not verified, such as unsecured network sources or external storage,
+since that code can be modified to include malicious behavior.</li>
+</ul></p>
 
-<p>The application sandbox does not depend on the technology used to build
-an application. In particular the Dalvik VM is not a security boundary, and
-any app can run native code (see <a href="/sdk/ndk/index.html">the Android
-NDK</a>). All types of applications &mdash; Java, native, and hybrid &mdash;
-are sandboxed in the same way and have the same degree of security from each
-other.</p>
+<a name="Native"></a>
+<h2>Using Native Code</h2>
 
-<a name="signing"></a>
-<h2>Application Signing</h2>
+<p>In general, we encourage developers to use the Android SDK for most
+application development, rather than using native code.   Applications built
+with native code are more complex, less portable, and more like to include
+common memory corruption errors such as buffer overflows.</p>
 
-<p>All Android applications (.apk files) must be signed with a certificate
-whose private key is held by their developer.  This certificate identifies
-the author of the application.  The certificate does <em>not</em> need to be
-signed by a certificate authority: it is perfectly allowable, and typical,
-for Android applications to use self-signed certificates. The purpose of
-certificates in Android is to distinguish application authors. This allows
-the system to grant or deny applications access to <a
-href="/guide/topics/manifest/permission-element.html#plevel">signature-level
-permissions</a> and to grant or deny an application's <a
-href="/guide/topics/manifest/manifest-element.html#uid">request to be given
-the same Linux identity</a> as another application.</p>
+<p>Android is built using the Linux kernel and being familiar with Linux
+development security best practices is especially useful if you are going to
+use native code. This document is too short to discuss all of those best
+practices, but one of the most popular resources is  “Secure Programming for
+Linux and Unix HOWTO”, available at <a
+href="http://www.dwheeler.com/secure-programs">
+http://www.dwheeler.com/secure-programs</a>.</p>
 
-<a name="userid"></a>
-<h2>User IDs and File Access</h2>
+<p>An important difference between Android and most Linux environments is the
+Application Sandbox.  On Android, all applications run in the Application
+Sandbox, including those written with native code.  At the most basic level, a
+good way to think about it for developers familiar with Linux is to know that
+every application is given a unique UID with very limited permissions. This is
+discussed in more detail in the <a
+href="http://source.android.com/tech/security/index.html">Android Security
+Overview</a> and you should be familiar with application permissions even if
+you are using native code.</p>
 
-<p>At install time, Android gives each package a distinct Linux user ID. The
-identity remains constant for the duration of the package's life on that
-device. On a different device, the same package may have a different UID;
-what matters is that each package has a distinct UID on a given device.</p>
+<a name="Data"></a>
+<h2>Storing Data</h2>
 
-<p>Because security enforcement happens at the
-process level, the code of any two packages can not normally
-run in the same process, since they need to run as different Linux users.
-You can use the {@link android.R.attr#sharedUserId} attribute in the
-<code>AndroidManifest.xml</code>'s
-{@link android.R.styleable#AndroidManifest manifest} tag of each package to
-have them assigned the same user ID.  By doing this, for purposes of security
-the two packages are then treated as being the same application, with the same
-user ID and file permissions.  Note that in order to retain security, only two applications
-signed with the same signature (and requesting the same sharedUserId) will
-be given the same user ID.</p>
+<h3>Using internal files</h3>
 
-<p>Any data stored by an application will be assigned that application's user
-ID, and not normally accessible to other packages.  When creating a new file
-with {@link android.content.Context#getSharedPreferences},
-{@link android.content.Context#openFileOutput}, or
-{@link android.content.Context#openOrCreateDatabase},
-you can use the
-{@link android.content.Context#MODE_WORLD_READABLE} and/or
-{@link android.content.Context#MODE_WORLD_WRITEABLE} flags to allow any other
-package to read/write the file.  When setting these flags, the file is still
-owned by your application, but its global read and/or write permissions have
-been set appropriately so any other application can see it.</p>
+<p>By default, files created on <a
+href="{@docRoot}guide/topics/data/data-storage.html#filesInternal">internal
+storage</a> are only accessible to the application that created the file. This
+protection is implemented by Android and is sufficient for most
+applications.</p>
 
+<p>Use of <a
+href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_WRITEABLE">
+world writable</a> or <a
+href="{@docRoot}reference/android/content/Context.html#MODE_WORLD_READABLE">world
+readable</a> files for IPC is discouraged because it does not provide
+the ability to limit data access to particular applications, nor does it
+provide any control on data format. As an alternative, you might consider using
+a ContentProvider which provides read and write permissions, and can make
+dynamic permission grants on a case-by-case basis.</p>
 
-<a name="permissions"></a>
-<h2>Using Permissions</h2>
+<p>To provide additional protection for sensitive data, some applications
+choose to encrypt local files using a key that is not accessible to the
+application. (For example, a key can be placed in a <code><a
+href={@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> and
+protected with a user password that is not stored on the device).  While this
+does not protect data from a root compromise that can monitor the user
+inputting the password,  it can provide protection for a lost device without <a
+href="http://source.android.com/tech/encryption/index.html">file system
+encryption</a>.</p>
 
-<p>A basic Android application has no permissions associated with it,
-meaning it can not do anything that would adversely impact the user experience
-or any data on the device.  To make use of protected features of the device,
-you must include in your <code>AndroidManifest.xml</code> one or more
-<code>{@link android.R.styleable#AndroidManifestUsesPermission &lt;uses-permission&gt;}</code>
-tags declaring the permissions that your application needs.</p>
+<h3>Using external storage</h3>
 
-<p>For example, an application that needs to monitor incoming SMS messages would
-specify:</p>
+<p>Files created on <a
+href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
+storage</a>, such as SD Cards, are globally readable and writable.  Since
+external storage can be removed by the user and also modified by any
+application,  applications should not store sensitive information using
+external storage.</p>
 
-<pre>&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-    package=&quot;com.android.app.myapp&quot; &gt;
-    &lt;uses-permission android:name=&quot;android.permission.RECEIVE_SMS&quot; /&gt;
-    ...
-&lt;/manifest&gt;</pre>
+<p>As with data from any untrusted source, applications should perform input
+validation when handling data from external storage (see Input Validation
+section).  We strongly recommend that applications not store executables or
+class files on external storage prior to dynamic loading.  If an application
+does retrieve executable files from external storage they should be signed and
+cryptographically verified prior to dynamic loading.</p>
 
-<p>At application install time, permissions requested by the application are
-granted to it by the package installer, based on checks against the
-signatures of the applications declaring those permissions and/or interaction
-with the user. <em>No</em> checks with the user
-are done while an application is running: it either was granted a particular
-permission when installed, and can use that feature as desired, or the
-permission was not granted and any attempt to use the feature will fail
-without prompting the user.</p>
+<h3>Using content providers</h3>
 
-<p>Often times a permission failure will result in a {@link
-java.lang.SecurityException} being thrown back to the application. However,
-this is not guaranteed to occur everywhere. For example, the {@link
-android.content.Context#sendBroadcast} method checks permissions as data is
-being delivered to each receiver, after the method call has returned, so you
-will not receive an exception if there are permission failures. In almost all
-cases, however, a permission failure will be printed to the system log.</p>
+<p>ContentProviders provide a structured storage mechanism that can be limited
+to your own application, or exported to allow access by other applications. By
+default, a <code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html">
+ContentProvider</a></code> is
+<a href="{@docRoot}guide/topics/manifest/provider-element.html#exported">exported
+</a> for use by other applications.  If you do not intend to provide other
+applications with access to your<code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html">
+ContentProvider</a></code>, mark them as <code><a
+href="{@docRoot}guide/topics/manifest/provider-element.html#exported">
+android:exported=false</a></code> in the application manifest.</p>
 
-<p>The permissions provided by the Android system can be found at {@link
-android.Manifest.permission}. Any application may also define and enforce its
-own permissions, so this is not a comprehensive list of all possible
+<p>When creating a <code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html">ContentProvider
+</a></code> that will be exported for use by other applications, you can specify
+a single
+<a href="{@docRoot}guide/topics/manifest/provider-element.html#prmsn">permission
+</a> for reading and writing, or distinct permissions for reading and writing
+within the manifest. We recommend that you limit your permissions to those
+required to accomplish the task at hand. Keep in mind that it’s usually
+easier to add permissions later to expose new functionality than it is to take
+them away and break existing users.</p>
+
+<p>If you are using a <code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html">
+ContentProvider</a></code> for sharing data between applications built by the
+same developer, it is preferable to use
+<a href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">signature
+level permissions</a>.  Signature permissions do not require user confirmation,
+so they provide a better user experience and more controlled access to the
+<code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html">
+ContentProvider</a></code>.</p>
+
+<p>ContentProviders can also provide more granular access by declaring the <a
+href="{@docRoot}guide/topics/manifest/provider-element.html#gprmsn">
+grantUriPermissions</a> element and using the <code><a
+href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_READ_URI_PERMISSION">FLAG_GRANT_READ_URI_PERMISSION</a></code>
+and <code><a
+href="{@docRoot}reference/android/content/Intent.html#FLAG_GRANT_WRITE_URI_PERMISSION">FLAG_GRANT_WRITE_URI_PERMISSION</a></code>
+flags in the Intent object
+that activates the component.  The scope of these permissions can be further
+limited by the <code><a
+href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">
+grant-uri-permission element</a></code>.</p>
+
+<p>When accessing a <code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html">
+ContentProvider</a></code>, use parameterized query methods such as <code>
+<a href="{@docRoot}reference/android/content/ContentProvider.html#query(android.net.Uri,%20java.lang.String[],%20java.lang.String,%20java.lang.String[],%20java.lang.String)">query()</a></code>, <code><a
+href="{@docRoot}reference/android/content/ContentProvider.html#update(android.net.Uri,%20android.content.ContentValues,%20java.lang.String,%20java.lang.String[])">update()</a></code>, and <code><a
+href="{@docRoot}reference/android/content/ContentProvider.html#delete(android.net.Uri,%20java.lang.String,%20java.lang.String[])">delete()</a></code> to avoid
+potential <a href="http://en.wikipedia.org/wiki/SQL_injection">SQL
+Injection</a> from untrusted data. Note that using parameterized methods is not
+sufficient if the <code>selection</code> is built by concatenating user data
+prior to submitting it to the method.</p>
+
+<p>Do not have a false sense of security about the write permission.  Consider
+that the write permission allows SQL statements which make it possible for some
+data to be confirmed using creative <code>WHERE</code> clauses and parsing the
+results. For example, an attacker might probe for presence of a specific phone
+number in a call-log by modifying a row only if that phone number already
+exists. If the content provider data has predictable structure, the write
+permission may be equivalent to providing both reading and writing.</p>
+
+<a name="IPC"></a>
+<h2>Using Interprocess Communication (IPC)</h2>
+
+<p>Some Android applications attempt to implement IPC using traditional Linux
+techniques such as network sockets and shared files.  We strongly encourage the
+use of Android system functionality for IPC such as Intents, Binders, Services,
+and Receivers.  The Android IPC mechanisms allow you to verify the identity of
+the application connecting to your IPC and set security policy for each IPC
+mechanism.</p>
+
+<p>Many of the security elements are shared across IPC mechanisms. <a
+href="{@docRoot}reference/android/content/BroadcastReceiver.html">
+Broadcast Receivers</a>, <a
+href="{@docRoot}reference/android/R.styleable.html#AndroidManifestActivity">
+Activities</a>, and <a
+href="{@docRoot}reference/android/R.styleable.html#AndroidManifestService">
+Services</a> are all declared in the application manifest.  If your IPC mechanism is
+not intended for use by other applications, set the <a
+href="{@docRoot}guide/topics/manifest/service-element.html#exported">{@code android:exported}</a>
+property to false.  This is useful for applications that consist of multiple processes
+within the same UID, or if you decide late in development that you do not
+actually want to expose functionality as IPC but you don’t want to rewrite
+the code.</p>
+
+<p>If your IPC is intended to be accessible to other applications, you can
+apply a security policy by using the <a
+href="{@docRoot}reference/android/R.styleable.html#AndroidManifestPermission">
+Permission</a> tag. If IPC is between applications built by the same developer,
+it is preferable to use <a
+href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">signature
+level permissions</a>.  Signature permissions do not require user confirmation,
+so they provide a better user experience and more controlled access to the IPC
+mechanism.</p>
+
+<p>One area that can introduce confusion is the use of intent filters. Note
+that Intent filters should not be considered a security feature -- components
+can be invoked directly and may not have data that would conform to the intent
+filter. You should perform input validation within your intent receiver to
+confirm that it is properly formatted for the invoked receiver, service, or
+activity.</p>
+
+<h3>Using intents</h3>
+
+<p>Intents are the preferred mechanism for asynchronous IPC in Android.
+Depending on your application requirements, you might use <code><a
+href="{@docRoot}reference/android/content/Context.html#sendBroadcast(android.content.Intent)">sendBroadcast()</a></code>, 
+<code><a
+href="{@docRoot}reference/android/content/Context.html#sendOrderedBroadcast(android.content.Intent,%20java.lang.String)">sendOrderedBroadcast()</a></code>,
+or direct an intent to a specific application component.</p>
+
+<p>Note that ordered broadcasts can be “consumed” by a recipient, so they
+may not be delivered to all applications.  If you are sending an Intent where
+delivery to a specific receiver is required, the intent must be delivered
+directly to the receiver.</p>
+
+<p>Senders of an intent can verify that the recipient has a permission
+specifying a non-Null Permission upon sending.  Only applications with that
+Permission will receive the intent.  If data within a broadcast intent may be
+sensitive, you should consider applying a permission to make sure that
+malicious applications cannot register to receive those messages without
+appropriate permissions.  In those circumstances, you may also consider
+invoking the receiver directly, rather than raising a broadcast.</p>
+
+<h3>Using binder and AIDL interfaces</h3>
+
+<p><a href="{@docRoot}reference/android/os/Binder.html">Binders</a> are the
+preferred mechanism for RPC-style IPC in Android. They provide a well-defined
+interface that enables mutual authentication of the endpoints, if required.</p>
+
+<p>We strongly encourage designing interfaces in a manner that does not require
+interface specific permission checks. Binders are not declared within the
+application manifest, and therefore you cannot apply declarative permissions
+directly to a Binder.  Binders generally inherit permissions declared in the
+application manifest for the Service or Activity within which they are
+implemented.  If you are creating an interface that requires authentication
+and/or access controls on a specific binder interface, those controls must be
+explicitly added as code in the interface.</p>
+
+<p>If providing an interface that does require access controls, use <code><a
+href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(java.lang.String)">checkCallingPermission()</a></code>
+to verify whether the
+caller of the Binder has a required permission. This is especially important
+before accessing a Service on behalf of the caller, as the identify of your
+application is passed to other interfaces.  If invoking an interface provided
+by a Service, the <code><a
+href="{@docRoot}reference/android/content/Context.html#bindService(android.content.Intent,%20android.content.ServiceConnection,%20int)">bindService()</a></code>
+ invocation may fail if you do not have permission to access the given Service.
+ If calling an interface provided locally by your own application, it may be
+useful to use the <code><a
+href="{@docRoot}reference/android/os/Binder.html#clearCallingIdentity()">
+clearCallingIdentity()</a></code> to satisfy internal security checks.</p>
+
+<h3>Using broadcast receivers</h3>
+
+<p>Broadcast receivers are used to handle asynchronous requests initiated via
+an intent.</p>
+
+<p>By default, receivers are exported and can be invoked by any other
+application. If your <code><a
+href="{@docRoot}reference/android/content/BroadcastReceiver.html">
+BroadcastReceivers</a></code> is intended for use by other applications, you
+may want to apply security permissions to receivers using the <code><a
+href="{@docRoot}guide/topics/manifest/receiver-element.html">
+&lt;receiver&gt;</a></code> element within the application manifest.  This will
+prevent applications without appropriate permissions from sending an intent to
+the <code><a
+href="{@docRoot}reference/android/content/BroadcastReceiver.html">
+BroadcastReceivers</a></code>.</p>
+
+<h3>Using Services</h3>
+
+<p>Services are often used to supply functionality for other applications to
+use. Each service class must have a corresponding <service> declaration in its
+package's AndroidManifest.xml.</p>
+
+<p>By default, Services are exported and can be invoked by any other
+application.  Services can be protected using the <a
+href="{@docRoot}guide/topics/manifest/service-element.html#prmsn">{@code android:permission}</a>
+attribute
+within the manifest’s <code><a
+href="{@docRoot}guide/topics/manifest/service-element.html">
+&lt;service&gt;</a></code> tag. By doing so, other applications will need to declare
+a corresponding <code><a
+href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission&gt;</a>
+</code> element in their own manifest to be
+able to start, stop, or bind to the service.</p>
+
+<p>A Service can protect individual IPC calls into it with permissions, by
+calling <code><a
+href="{@docRoot}reference/android/content/Context.html#checkCallingPermission(java.lang.String)">checkCallingPermission()</a></code>
+before executing
+the implementation of that call.  We generally recommend using the
+declarative permissions in the manifest, since those are less prone to
+oversight.</p>
+
+<h3>Using Activities</h3>
+
+<p>Activities are most often used for providing the core user-facing
+functionality of an application. By default, Activities are exported and
+invokable by other applications only if they have an intent filter or binder
+declared.  In general, we recommend that you specifically declare a Receiver or
+Service to handle IPC, since this modular approach reduces the risk of exposing
+functionality that is not intended for use by other applications.</p>
+
+<p>If you do expose an Activity for purposes of IPC, the  <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html#prmsn">android:permission</a></code>
+attribute in the  <code><a
+href="{@docRoot}guide/topics/manifest/activity-element.html">
+&lt;activity&gt;</a></code> declaration in the application manifest can be used to
+restrict access to only those applications which have the stated
 permissions.</p>
 
-<p>A particular permission may be enforced at a number of places during your
-program's operation:</p>
+<a name="Permissions"></a>
+<h2>Using Permissions</h2>
 
+<h3>Requesting Permissions</h3>
+
+<p>We recommend minimizing the number of permissions requested by an
+application. Not having access to sensitive permissions reduces the risk of
+inadvertently misusing those permissions, can improve user adoption, and makes
+applications less attractive targets for attackers.</p>
+
+<p>If it is possible to design your application in a way that does not require
+a permission, that is preferable.  For example, rather than requesting access
+to device information to create an identifier, create a <a
+href="{@docRoot}reference/java/util/UUID.html">GUID</a> for your application.
+(This specific example is also discussed in Handling User Data) Or, rather than
+using external storage, store data in your application directory.</p>
+
+<p>If a permission is not required, do not request it.  This sounds simple, but
+there has been quite a bit of research into the frequency of over-requesting
+permissions. If you’re interested in the subject you might start with this
+research paper published by U.C. Berkeley: <a
+href="http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-48.pdf">
+http://www.eecs.berkeley.edu/Pubs/TechRpts/2011/EECS-2011-48.pdf</a></p>
+
+<p>In addition to requesting permissions, your application can use <a
+href="{@docRoot}guide/topics/manifest/permission-element.html">permissions</a>
+to protect IPC that is security sensitive and will be exposed to other
+applications -- such as a <code><a
+href="{@docRoot}reference/android/content/ContentProvider.html">
+ContentProvider</a></code>.  In general, we recommend using access controls
+other than user confirmed permissions where possible since permissions can
+be confusing for users. For example, consider using the <a
+href="{@docRoot}guide/topics/manifest/permission-element.html#plevel">signature
+protection level</a> on permissions for IPC communication between applications
+provided by a single developer.</p>
+
+<p>Do not cause permission re-delegation.  This occurs when an app exposes data
+over IPC that is only available because it has a specific permission, but does
+not require that permission of any clients of it’s IPC interface. More
+details on the potential impacts, and frequency of this type of problem is
+provided in this research paper published at USENIX: <a
+href="http://www.cs.berkeley.edu/~afelt/felt_usenixsec2011.pdf">http://www.cs.be
+rkeley.edu/~afelt/felt_usenixsec2011.pdf</a></p>
+
+<h3>Creating Permissions</h3>
+
+<p>Generally, you should strive to create as few permissions as possible while
+satisfying your security requirements.  Creating a new permission is relatively
+uncommon for most applications, since <a
+href="{@docRoot}reference/android/Manifest.permission.html">system-defined
+permissions</a> cover many situations.  Where appropriate,
+perform access checks using existing permissions.</p>
+
+<p>If you must create a new permission, consider whether you can accomplish
+your task with a Signature permission.  Signature permissions are transparent
+to the user and only allow access by applications signed by the same developer
+as application performing the permission check.  If you create a Dangerous
+permission, then the user needs to decide whether to install the application.
+This can be confusing for other developers, as well as for users.</p>
+
+<p>If you create a Dangerous permission, there are a number of complexities
+that you need to consider.
 <ul>
-<li>At the time of a call into the system, to prevent an application from
-executing certain functions.</li>
-<li>When starting an activity, to prevent applications from launching
-activities of other applications.</li>
-<li>Both sending and receiving broadcasts, to control who can receive
-your broadcast or who can send a broadcast to you.</li>
-<li>When accessing and operating on a content provider.</li>
-<li>Binding to or starting a service.</li>
-</ul>
+<li>The permission must have a string that concisely expresses to a user the
+security decision they will be required to make.</li>
+<li>The permission string must be localized to many different languages.</li>
+<li>Uses may choose not to install an application because a permission is
+confusing or perceived as risky.</li>
+<li>Applications may request the permission when the creator of the permission
+has not been installed.</li>
+</ul></p>
+
+<p>Each of these poses a significant non-technical challenge for an application
+developer, which is why we discourage the use of Dangerous permission.</p>
+
+<a name="Networking"></a>
+<h2>Using Networking</h2>
+
+<h3>Using IP Networking</h3>
+
+<p>Networking on Android is not significantly different from Linux
+environments.  The key consideration is making sure that appropriate protocols
+are used for sensitive data, such as <a
+href="{@docRoot}reference/javax/net/ssl/HttpsURLConnection.html">HTTPS</a> for
+web traffic.   We prefer use of HTTPS over HTTP anywhere that HTTPS is
+supported on the server, since mobile devices frequently connect on networks
+that are not secured, such as public WiFi hotspots.</p>
+
+<p>Authenticated, encrypted socket-level communication can be easily
+implemented using the <code><a
+href="{@docRoot}reference/javax/net/ssl/SSLSocket.html">SSLSocket</a></code>
+class.  Given the frequency with which Android devices connect to unsecured
+wireless networks using WiFi, the use of secure networking is strongly
+encouraged for all applications.</p>
+
+<p>We have seen some applications use <a
+href="http://en.wikipedia.org/wiki/Localhost">localhost</a> network ports for
+handling sensitive IPC.  We discourage this approach since these interfaces are
+accessible by other applications on the device.  Instead, use an Android IPC
+mechanism where authentication is possible such as a Service and Binder.  (Even
+worse than using loopback is to bind to INADDR_ANY since then your application
+may receive requests from anywhere.  We’ve seen that, too.)</p>
+
+<p>Also, one common issue that warrants repeating is to make sure that you do
+not trust data downloaded from HTTP or other insecure protocols.  This includes
+validation of input in <code><a
+href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code> and
+any responses to intents issued against HTTP.</p>
+
+<h3>Using Telephony Networking</h3>
+
+<p>SMS is the telephony protocol most frequently used by Android developers.
+Developers should keep in mind that this protocol was primarily designed for
+user-to-user communication and is not well-suited for some application
+purposes. Due to the limitations of SMS, we strongly recommend the use of <a
+href="http://code.google.com/android/c2dm/">C2DM</a> and IP networking for
+sending data messages to devices.</p>
+
+<p>Many developers do not realize that SMS is not encrypted or strongly
+authenticated on the network or on the device.  In particular, any SMS receiver
+should expect that a malicious user may have sent the SMS to your application
+-- do not rely on unauthenticated SMS data to perform sensitive commands.
+Also, you should be aware that SMS may be subject to spoofing and/or
+interception on the network.  On the Android-powered device itself, SMS
+messages are transmitted as Broadcast intents, so they may be read or captured
+by other applications that have the READ_SMS permission.</p>
+
+<a name="DynamicCode"></a>
+<h2>Dynamically Loading Code</h2>
+
+<p>We strongly discourage loading code from outside of the application APK.
+Doing so significantly increases the likelihood of application compromise due
+to code injection or code tampering.  It also adds complexity around version
+management and application testing.  Finally, it can make it impossible to
+verify the behavior of an application, so it may be prohibited in some
+environments.</p>
+
+<p>If your application does dynamically load code, the most important thing to
+keep in mind about dynamically loaded code is that it runs with the same
+security permissions as the application APK.  The user made a decision to
+install your application based on your identity, and they are expecting that
+you provide any code run within the application, including code that is
+dynamically loaded.</p>
+
+<p>The major security risk associated with dynamically loading code is that the
+code needs to come from a verifiable source. If the modules are included
+directly within your APK, then they cannot be modified by other applications.
+This is true whether the code is a native library or a class being loaded using
+<a href="{@docRoot}reference/dalvik/system/DexClassLoader.html">
+<code>DexClassLoader</code></a>.  We have seen many instances of applications
+attempting to load code from insecure locations, such as downloaded from the
+network over unencrypted protocols or from world writable locations such as
+external storage. These locations could allow someone on the network to modify
+the content in transit, or another application on a users device to modify the
+content, respectively.</p>
 
 
-<a name="declaring"></a>
-<h2>Declaring and Enforcing Permissions</h2>
+<h3>Using WebView</h3>
 
-<p>To enforce your own permissions, you must first declare them in your
-<code>AndroidManifest.xml</code> using one or more
-<code>{@link android.R.styleable#AndroidManifestPermission &lt;permission&gt;}</code>
-tags.</p>
+<p>Since WebView consumes web content that can include HTML and JavaScript,
+improper use can introduce common web security issues such as <a
+href="http://en.wikipedia.org/wiki/Cross_site_scripting">cross-site-scripting</a
+> (JavaScript injection).  Android includes a number of mechanisms to reduce
+the scope of these potential issues by limiting the capability of WebView to
+the minimum functionality required by your application.</p>
 
-<p>For example, an application that wants to control who can start one
-of its activities could declare a permission for this operation as follows:</p>
+<p>If your application does not directly use JavaScript within a <code><a
+href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, do
+not call
+<a href="{@docRoot}reference/android/webkit/WebSettings.html#setJavaScriptEnabled(boolean)">
+<code>setJavaScriptEnabled()</code></a>. We have seen this method invoked
+in sample code that might be repurposed in production application -- so
+remove it if necessary. By default, <code><a
+href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code> does
+not execute JavaScript so cross-site-scripting is not possible.</p>
 
-<pre>&lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-    package=&quot;com.me.app.myapp&quot; &gt;
-    &lt;permission android:name=&quot;com.me.app.myapp.permission.DEADLY_ACTIVITY&quot;
-        android:label=&quot;&#64;string/permlab_deadlyActivity&quot;
-        android:description=&quot;&#64;string/permdesc_deadlyActivity&quot;
-        android:permissionGroup=&quot;android.permission-group.COST_MONEY&quot;
-        android:protectionLevel=&quot;dangerous&quot; /&gt;
-    ...
-&lt;/manifest&gt;</pre>
+<p>Use <code><a
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> with
+particular care because it allows JavaScript to invoke operations that are
+normally reserved for Android applications.  Only expose <code><a
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
+sources from which all input is trustworthy.  If untrusted input is allowed,
+untrusted JavaScript may be able to invoke Android methods.  In general, we
+recommend only exposing <code><a
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> to
+JavaScript that is contained within your application APK.</p>
 
-<p>The {@link android.R.styleable#AndroidManifestPermission_protectionLevel
-&lt;protectionLevel&gt;} attribute is required, telling the system how the
-user is to be informed of applications requiring the permission, or who is
-allowed to hold that permission, as described in the linked documentation.</p>
+<p>Do not trust information downloaded over HTTP, use HTTPS instead.  Even if
+you are connecting only to a single website that you trust or control, HTTP is
+subject to <a
+href="http://en.wikipedia.org/wiki/Man-in-the-middle_attack">MiTM</a> attacks
+and interception of data.  Sensitive capabilities using <code><a
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code> should
+not ever be exposed to unverified script downloaded over HTTP. Note that even
+with the use of HTTPS,
+<code><a
+href="{@docRoot}reference/android/webkit/WebView.html#addJavascriptInterface(java.lang.Object,%20java.lang.String)">addJavaScriptInterface()</a></code>
+increases the attack surface of your application to include the server
+infrastructure and all CAs trusted by the Android-powered device.</p>
 
-<p>The {@link android.R.styleable#AndroidManifestPermission_permissionGroup
-&lt;permissionGroup&gt;} attribute is optional, and only used to help the system display
-permissions to the user.  You will usually want to set this to either a standard
-system group (listed in {@link android.Manifest.permission_group
-android.Manifest.permission_group}) or in more rare cases to one defined by
-yourself.  It is preferred to use an existing group, as this simplifies the
-permission UI shown to the user.</p>
+<p>If your application accesses sensitive data with a <code><a
+href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, you
+may want to use the <code><a
+href="{@docRoot}reference/android/webkit/WebView.html#clearCache(boolean)">
+clearCache()</a></code> method to delete any files stored locally. Server side
+headers like no-cache can also be used to indicate that an application should
+not cache particular content.</p>
 
-<p>Note that both a label and description should be supplied for the
-permission. These are string resources that can be displayed to the user when
-they are viewing a list of permissions
-(<code>{@link android.R.styleable#AndroidManifestPermission_label android:label}</code>)
-or details on a single permission (
-<code>{@link android.R.styleable#AndroidManifestPermission_description android:description}</code>).
-The label should be short, a few words
-describing the key piece of functionality the permission is protecting. The
-description should be a couple sentences describing what the permission allows
-a holder to do. Our convention for the description is two sentences, the first
-describing the permission, the second warning the user of what bad things
-can happen if an application is granted the permission.</p>
+<a name="Input"></a>
+<h2>Performing Input Validation</h2>
 
-<p>Here is an example of a label and description for the CALL_PHONE
-permission:</p>
+<p>Insufficient input validation is one of the most common security problems
+affecting applications, regardless of what platform they run on. Android does
+have platform-level countermeasures that reduce the exposure of applications to
+input validation issues, you should use those features where possible. Also
+note that selection of type-safe languages tends to reduce the likelihood of
+input validation issues.  We strongly recommend building your applications with
+the Android SDK.</p>
 
-<pre>
-    &lt;string name=&quot;permlab_callPhone&quot;&gt;directly call phone numbers&lt;/string&gt;
-    &lt;string name=&quot;permdesc_callPhone&quot;&gt;Allows the application to call
-        phone numbers without your intervention. Malicious applications may
-        cause unexpected calls on your phone bill. Note that this does not
-        allow the application to call emergency numbers.&lt;/string&gt;
-</pre>
+<p>If you are using native code, then any data read from files, received over
+the network, or received from an IPC has the potential to introduce a security
+issue.  The most common problems are <a
+href="http://en.wikipedia.org/wiki/Buffer_overflow">buffer overflows</a>, <a
+href="http://en.wikipedia.org/wiki/Double_free#Use_after_free">use after
+free</a>, and <a
+href="http://en.wikipedia.org/wiki/Off-by-one_error">off-by-one errors</a>.
+Android provides a number of technologies like ASLR and DEP that reduce the
+exploitability of these errors, but they do not solve the underlying problem.
+These can be prevented by careful handling of pointers and managing of
+buffers.</p>
 
-<p>You can look at the permissions currently defined in the system with the
-Settings app and the shell command <code>adb shell pm list permissions</code>.
-To use the Settings app, go to Settings &gt; Applications.  Pick an app and
-scroll down to see the permissions that the app uses. For developers, the adb '-s'
-option displays the permissions in a form similar to how the user will see them:</p>
+<p>Dynamic, string based languages such as JavaScript and SQL are also subject
+to input validation problems due to escape characters and <a
+href="http://en.wikipedia.org/wiki/Code_injection">script injection</a>.</p>
 
-<pre>
-$ adb shell pm list permissions -s
-All Permissions:
+<p>If you are using data within queries that are submitted to SQL Database or a
+Content Provider, SQL Injection may be an issue.  The best defense is to use
+parameterized queries, as is discussed in the ContentProviders section.
+Limiting permissions to read-only or write-only can also reduce the potential
+for harm related to SQL Injection.</p>
 
-Network communication: view Wi-Fi state, create Bluetooth connections, full
-Internet access, view network state
+<p>If you are using <code><a
+href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, then
+you must consider the possibility of XSS.  If your application does not
+directly use JavaScript within a <code><a
+href="{@docRoot}reference/android/webkit/WebView.html">WebView</a></code>, do
+not call setJavaScriptEnabled() and XSS is no longer possible. If you must
+enable JavaScript then the WebView section provides other security best
+practices.</p>
 
-Your location: access extra location provider commands, fine (GPS) location,
-mock location sources for testing, coarse (network-based) location
+<p>If you cannot use the security features above, we strongly recommend the use
+of well-structured data formats and verifying that the data conforms to the
+expected format. While blacklisting of characters or character-replacement can
+be an effective strategy, these techniques are error-prone in practice and
+should be avoided when possible.</p>
 
-Services that cost you money: send SMS messages, directly call phone numbers
+<a name="UserData"></a>
+<h2>Handling User Data</h2>
 
-...</pre>
+<p>In general, the best approach is to minimize use of APIs that access
+sensitive or personal user data. If you have access to data and can avoid
+storing or transmitting the information, do not store or transmit the data.
+Finally, consider if there is a way that your application logic can be
+implemented using a hash or non-reversible form of the data.  For example, your
+application might use the hash of an an email address as a primary key, to
+avoid transmitting or storing the email address.  This reduces the chances of
+inadvertently exposing data, and it also reduces the chance of attackers
+attempting to exploit your application.</p>
 
-<a name="manifest"></a>
-<h3>Enforcing Permissions in AndroidManifest.xml</h3>
+<p>If your application accesses personal information such as passwords or
+usernames, keep in mind that some jurisdictions may require you to provide a
+privacy policy explaining your use and storage of that data.  So following the
+security best practice of minimizing access to user data may also simplify
+compliance.</p>
 
-<p>High-level permissions restricting access to entire components of the
-system or application can be applied through your
-<code>AndroidManifest.xml</code>. All that this requires is including an {@link
-android.R.attr#permission android:permission} attribute on the desired
-component, naming the permission that will be used to control access to
-it.</p>
+<p>You should also consider whether your application might be inadvertently
+exposing personal information to other parties such as third-party components
+for advertising or third-party services used by your application. If you don't
+know why a component or service requires a personal information, don’t
+provide it.  In general, reducing the access to personal information by your
+application will reduce the potential for problems in this area.</p>
 
-<p><strong>{@link android.app.Activity}</strong> permissions
-(applied to the
-{@link android.R.styleable#AndroidManifestActivity &lt;activity&gt;} tag)
-restrict who can start the associated
-activity.  The permission is checked during
-{@link android.content.Context#startActivity Context.startActivity()} and
-{@link android.app.Activity#startActivityForResult Activity.startActivityForResult()};
-if the caller does not have
-the required permission then {@link java.lang.SecurityException} is thrown
-from the call.</p>
+<p>If access to sensitive data is required, evaluate whether that information
+must be transmitted to a server, or whether the operation can be performed on
+the client.  Consider running any code using sensitive data on the client to
+avoid transmitting user data.</p>
 
-<p><strong>{@link android.app.Service}</strong> permissions
-(applied to the
-{@link android.R.styleable#AndroidManifestService &lt;service&gt;} tag)
-restrict who can start or bind to the
-associated service.  The permission is checked during
-{@link android.content.Context#startService Context.startService()},
-{@link android.content.Context#stopService Context.stopService()} and
-{@link android.content.Context#bindService Context.bindService()};
-if the caller does not have
-the required permission then {@link java.lang.SecurityException} is thrown
-from the call.</p>
+<p>Also, make sure that you do not inadvertently expose user data to other
+application on the device through overly permissive IPC, world writable files,
+or network sockets. This is a special case of permission redelegation,
+discussed in the Requesting Permissions section.</p>
 
-<p><strong>{@link android.content.BroadcastReceiver}</strong> permissions
-(applied to the
-{@link android.R.styleable#AndroidManifestReceiver &lt;receiver&gt;} tag)
-restrict who can send broadcasts to the associated receiver.
-The permission is checked <em>after</em>
-{@link android.content.Context#sendBroadcast Context.sendBroadcast()} returns,
-as the system tries
-to deliver the submitted broadcast to the given receiver.  As a result, a
-permission failure will not result in an exception being thrown back to the
-caller; it will just not deliver the intent.  In the same way, a permission
-can be supplied to
-{@link android.content.Context#registerReceiver(android.content.BroadcastReceiver, android.content.IntentFilter, String, android.os.Handler)
-Context.registerReceiver()}
-to control who can broadcast to a programmatically registered receiver.
-Going the other way, a permission can be supplied when calling
-{@link android.content.Context#sendBroadcast(Intent, String) Context.sendBroadcast()}
-to restrict which BroadcastReceiver objects are allowed to receive the broadcast (see
-below).</p>
+<p>If a GUID is required, create a large, unique number and store it.  Do not
+use phone identifiers such as the phone number or IMEI which may be associated
+with personal information.  This topic is discussed in more detail in the <a
+href="http://android-developers.blogspot.com/2011/03/identifying-app-installations.html">Android Developer Blog</a>.</p>
 
-<p><strong>{@link android.content.ContentProvider}</strong> permissions
-(applied to the
-{@link android.R.styleable#AndroidManifestProvider &lt;provider&gt;} tag)
-restrict who can access the data in
-a {@link android.content.ContentProvider}.  (Content providers have an important
-additional security facility available to them called
-<a href="#uri">URI permissions</a> which is described later.)
-Unlike the other components,
-there are two separate permission attributes you can set:
-{@link android.R.attr#readPermission android:readPermission} restricts who
-can read from the provider, and
-{@link android.R.attr#writePermission android:writePermission} restricts
-who can write to it.  Note that if a provider is protected with both a read
-and write permission, holding only the write permission does not mean
-you can read from a provider.  The permissions are checked when you first
-retrieve a provider (if you don't have either permission, a SecurityException
-will be thrown), and as you perform operations on the provider.  Using
-{@link android.content.ContentResolver#query ContentResolver.query()} requires
-holding the read permission; using
-{@link android.content.ContentResolver#insert ContentResolver.insert()},
-{@link android.content.ContentResolver#update ContentResolver.update()},
-{@link android.content.ContentResolver#delete ContentResolver.delete()}
-requires the write permission.
-In all of these cases, not holding the required permission results in a
-{@link java.lang.SecurityException} being thrown from the call.</p>
+<p>Application developers should be careful writing to on-device logs.
+In Android, logs are a shared resource, and are available
+to an application with the
+<a href="{@docRoot}reference/android/Manifest.permission.html#READ_LOGS">
+<code>READ_LOGS</code></a> permission. Even though the phone log data
+is temporary and erased on reboot, inappropriate logging of user information
+could inadvertently leak user data to other applications.</p>
 
 
-<a name="broadcasts"></a>
-<h3>Enforcing Permissions when Sending Broadcasts</h3>
+<h3>Handling Credentials</h3>
 
-<p>In addition to the permission enforcing who can send Intents to a
-registered {@link android.content.BroadcastReceiver} (as described above), you
-can also specify a required permission when sending a broadcast. By calling {@link
-android.content.Context#sendBroadcast(android.content.Intent,String)
-Context.sendBroadcast()} with a
-permission string, you require that a receiver's application must hold that
-permission in order to receive your broadcast.</p>
+<p>In general, we recommend minimizing the frequency of asking for user
+credentials -- to make phishing attacks more conspicuous, and less likely to be
+successful.  Instead use an authorization token and refresh it.</p>
 
-<p>Note that both a receiver and a broadcaster can require a permission. When
-this happens, both permission checks must pass for the Intent to be delivered
-to the associated target.</p>
+<p>Where possible, username and password should not be stored on the device.
+Instead, perform initial authentication using the username and password
+supplied by the user, and then use a short-lived, service-specific
+authorization token.</p>
 
+<p>Services that will be accessible to multiple applications should be accessed
+using <code>
+<a href="{@docRoot}reference/android/accounts/AccountManager.html">
+AccountManager</a></code>. If possible, use the <code><a
+href="{@docRoot}reference/android/accounts/AccountManager.html">
+AccountManager</a></code> class to invoke a cloud-based service and do not store
+passwords on the device.</p>
 
-<a name="enforcement"></a>
-<h3>Other Permission Enforcement</h3>
+<p>After using <code><a
+href="{@docRoot}reference/android/accounts/AccountManager.html">
+AccountManager</a></code> to retrieve an Account, check the <code><a
+href="{@docRoot}reference/android/accounts/Account.html#CREATOR">CREATOR</a>
+</code> before passing in any credentials, so that you do not inadvertently pass
+credentials to the wrong application.</p>
 
-<p>Arbitrarily fine-grained permissions can be enforced at any call into a
-service. This is accomplished with the {@link
-android.content.Context#checkCallingPermission Context.checkCallingPermission()}
-method. Call with a desired
-permission string and it will return an integer indicating whether that
-permission has been granted to the current calling process. Note that this can
-only be used when you are executing a call coming in from another process,
-usually through an IDL interface published from a service or in some other way
-given to another process.</p>
+<p>If credentials are to be used only by applications that you create, then you
+can verify the application which accesses the <code><a
+href="{@docRoot}reference/android/accounts/AccountManager.html">
+AccountManager</a></code> using <code><a
+href="{@docRoot}reference/android/content/pm/PackageManager.html#checkSignatures(java.lang.String,%20java.lang.String)">checkSignature()</a></code>.
+Alternatively, if only one application will use the credential, you might use a
+<code><a
+href={@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> for
+storage.</p>
 
-<p>There are a number of other useful ways to check permissions. If you have
-the pid of another process, you can use the Context method {@link
-android.content.Context#checkPermission(String, int, int) Context.checkPermission(String, int, int)}
-to check a permission against that pid. If you have the package name of another
-application, you can use the direct PackageManager method {@link
-android.content.pm.PackageManager#checkPermission(String, String)
-PackageManager.checkPermission(String, String)}
-to find out whether that particular package has been granted a specific permission.</p>
+<a name="Crypto"></a>
+<h2>Using Cryptography</h2>
 
+<p>In addition to providing data isolation, supporting full-filesystem
+encryption, and providing secure communications channels Android provides a
+wide array of algorithms for protecting data using cryptography.</p>
 
-<a name="uri"></a>
-<h2>URI Permissions</h2>
+<p>In general, try to use the highest level of pre-existing framework
+implementation that can  support your use case.  If you need to securely
+retrieve a file from a known location, a simple HTTPS URI may be adequate and
+require no knowledge of cryptography on your part.  If you need a secure
+tunnel, consider using
+<a href="{@docRoot}reference/javax/net/ssl/HttpsURLConnection.html">
+<code>HttpsURLConnection</code></a> or <code><a
+href="{@docRoot}reference/javax/net/ssl/SSLSocket.html">SSLSocket</a></code>,
+rather than writing your own protocol.</p>
 
-<p>The standard permission system described so far is often not sufficient
-when used with content providers.  A content provider may want to
-protect itself with read and write permissions, while its direct clients
-also need to hand specific URIs to other applications for them to operate on.
-A typical example is attachments in a mail application.  Access to the mail
-should be protected by permissions, since this is sensitive user data.  However,
-if a URI to an image attachment is given to an image viewer, that image viewer
-will not have permission to open the attachment since it has no reason to hold
-a permission to access all e-mail.</p>
+<p>If you do find yourself needing to implement your own protocol, we strongly
+recommend that you not implement your own cryptographic algorithms. Use
+existing cryptographic algorithms such as those in the implementation of AES or
+RSA provided in the <code><a
+href="{@docRoot}reference/javax/crypto/Cipher.html">Cipher</a></code> class.</p>
 
-<p>The solution to this problem is per-URI permissions: when starting an
-activity or returning a result to an activity, the caller can set
-{@link android.content.Intent#FLAG_GRANT_READ_URI_PERMISSION
-Intent.FLAG_GRANT_READ_URI_PERMISSION} and/or
-{@link android.content.Intent#FLAG_GRANT_WRITE_URI_PERMISSION
-Intent.FLAG_GRANT_WRITE_URI_PERMISSION}.  This grants the receiving activity
-permission access the specific data URI in the Intent, regardless of whether
-it has any permission to access data in the content provider corresponding
-to the Intent.</p>
+<p>Use a secure random number generator (
+<a href="{@docRoot}reference/java/security/SecureRandom.html">
+<code>SecureRandom</code></a>) to initialize any cryptographic keys (<a
+href="{@docRoot}reference/javax/crypto/KeyGenerator.html">
+<code>KeyGenerator</code></a>). Use of a key that is not generated with a secure random
+number generator significantly weakens the strength of the algorithm, and may
+allow offline attacks.</p>
 
-<p>This mechanism allows a common capability-style model where user interaction
-(opening an attachment, selecting a contact from a list, etc) drives ad-hoc
-granting of fine-grained permission.  This can be a key facility for reducing
-the permissions needed by applications to only those directly related to their
-behavior.</p>
+<p>If you need to store a key for repeated use, use a mechanism like <code><a
+href="{@docRoot}reference/java/security/KeyStore.html">KeyStore</a></code> that
+provides a mechanism for long term storage and retrieval of cryptographic
+keys.</p>
 
-<p>The granting of fine-grained URI permissions does, however, require some
-cooperation with the content provider holding those URIs.  It is strongly
-recommended that content providers implement this facility, and declare that
-they support it through the
-{@link android.R.styleable#AndroidManifestProvider_grantUriPermissions
-android:grantUriPermissions} attribute or
-{@link android.R.styleable#AndroidManifestGrantUriPermission
-&lt;grant-uri-permissions&gt;} tag.</p>
+<h2>Conclusion</h2>
 
-<p>More information can be found in the
-{@link android.content.Context#grantUriPermission Context.grantUriPermission()},
-{@link android.content.Context#revokeUriPermission Context.revokeUriPermission()}, and
-{@link android.content.Context#checkUriPermission Context.checkUriPermission()}
-methods.</p>
+<p>Android provides developers with the ability to design applications with a
+broad range of security requirements.  These best practices will help you make
+sure that your application takes advantage of the security benefits provided by
+the platform.</p>
 
+<p>You can receive more information on these topics and discuss security best
+practices with other developers in the <a
+href="http://groups.google.com/group/android-security-discuss">Android Security
+Discuss</a> Google Group</p>
diff --git a/docs/html/guide/topics/sensors/index.jd b/docs/html/guide/topics/sensors/index.jd
index 43903dc..a045899 100644
--- a/docs/html/guide/topics/sensors/index.jd
+++ b/docs/html/guide/topics/sensors/index.jd
@@ -1,88 +1,40 @@
-page.title=Sensors
+page.title=Location and Sensors
+page.landing=true
+page.landing.intro=Use sensors on the device to add rich location and motion capabilities to your app, from GPS or network location to accelerometer, gyroscope, temperature, barometer, and more. 
+page.landing.image=
+
 @jd:body
 
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>Topics</h2>
-    <ol>
-      <li><a href="{@docRoot}guide/topics/sensors/sensors_overview.html">Sensors Overview</a></li>
-      <li><a href="{@docRoot}guide/topics/sensors/sensors_motion.html">Motion Sensors</a></li>
-      <li><a href="{@docRoot}guide/topics/sensors/sensors_position.html">Position
-          Sensors</a></li>
-      <li><a href="{@docRoot}guide/topics/sensors/sensors_environment.html">Environment
-          Sensors</a></li>
-    </ol>
-  <h2>Key classes and interfaces</h2>
-    <ol>
-      <li>{@link android.hardware.Sensor}</li>
-      <li>{@link android.hardware.SensorEvent}</li>
-      <li>{@link android.hardware.SensorManager}</li>
-      <li>{@link android.hardware.SensorEventListener}</li>
-    </ol>
-  <h2>Related samples</h2>
-    <ol>
-      <li><a href="{@docRoot}resources/samples/AccelerometerPlay/index.html">Accelerometer
-          Play</a></li>
-      <li><a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html">
-API Demos (OS - RotationVectorDemo)</a></li>
-      <li><a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html">API Demos
-(OS - Sensors)</a></li>
-    </ol>
+<div class="landing-docs">
+
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2010/09/one-screen-turn-deserves-another.html">
+      <h4>One Screen Turn Deserves Another</h4>
+      <p>However, there’s a new wrinkle: recently, a few devices have shipped (see here and here)
+that run Android on screens that are naturally landscape in their orientation. That is, when held in
+the default position, the screens are wider than they are tall. This introduces a few fairly subtle
+issues that we’ve noticed causing problems in some apps.</p>
+    </a>
+    
+    <a href="android-developers.blogspot.com/2011/06/deep-dive-into-location.html">
+      <h4>A Deep Dive Into Location</h4>
+      <p>I’ve written an open-source reference app that incorporates all of the tips, tricks, and
+cheats I know to reduce the time between opening an app and seeing an up-to-date list of nearby
+venues - as well as providing a reasonable level of offline support</p>
+    </a>
   </div>
-</div>
 
-<p>Most Android-powered devices have built-in sensors that measure motion, orientation,
-and various environmental conditions. These sensors are capable of providing raw data with high
-precision and accuracy, and are useful if you want to monitor three-dimensional device movement or
-positioning, or you want to monitor changes in the ambient environment near a device. For example, a
-game might track readings from a device's gravity sensor to infer complex user gestures
-and motions, such as tilt, shake, rotation, or swing. Likewise, a weather application might use a
-device's temperature sensor and humidity sensor to calculate and report the dewpoint, or a travel
-application might use the geomagnetic field sensor and accelerometer to report a compass
-bearing.</p>
+  <div class="col-6">
+    <h3>Training</h3>
+    
+    <a href="http://developer.android.com/training/basics/location/index.html">
+      <h4>Making Your App Location Aware</h4>
+      <p>This class teaches you how to incorporate location based services in your Android
+application. You'll learn a number of methods to receive location updates and related best
+practices.</p>
+    </a>
+  </div>
 
-<p>The Android platform supports three broad categories of sensors:</p>
-
-<ul>
-  <li>Motion sensors
-    <p>These sensors measure acceleration forces and rotational forces along three axes. This
-      category includes accelerometers, gravity sensors, gyroscopes, and rotational vector
-      sensors.</p>
-  </li>
-  <li>Environmental sensors
-    <p>These sensors measure various environmental parameters, such as ambient air temperature
-      and pressure, illumination, and humidity. This category includes barometers, photometers, and
-      thermometers.</p>
-  </li>
-  <li>Position sensors
-    <p>These sensors measure the physical position of a device. This category includes
-      orientation sensors and magnetometers.</p>
-  </li>
-</ul>
-
-<p>To access these sensors, you can use the Android sensor framework. The sensor framework provides
-several classes and interfaces that help you perform a wide variety of sensor-related tasks. To
-learn more about the framework and the sensors that are supported on the Android system, read the
-following documents:</p>
-
-<dl>
-  <dt><strong><a href="{@docRoot}guide/topics/sensors/sensors_overview.html">Sensors
-        Overview</a></strong></dt>
-    <dd>Learn how to list the sensors that are on a device, set up sensor event listeners, and
-      acquire sensor data. Also learn best practices for accessing and using sensors.</dd>
-  <dt><strong><a href="{@docRoot}guide/topics/sensors/sensors_motion.html">Motion
-        Sensors</a></strong></dt>
-    <dd>Learn how to use the sensors that provide acceleration data, such as the accelerometer,
-      gravity sensor, and linear acceleration sensor. Also learn how to use the sensors that
-      provide rotational data, such as gyroscopes and rotational vector sensors.</dd>
-  <dt><strong><a href="{@docRoot}guide/topics/sensors/sensors_position.html">Position
-      Sensors</a></strong></dt>
-    <dd>Learn how to use the sensors that provide orientation and compass data, such as the
-      orientation sensor and the geomagnetic field sensor.</dd>
-  <dt><strong><a href="{@docRoot}guide/topics/sensors/sensors_environment.html">Environment
-        Sensors</a></strong></dt>
-    <dd>Learn how to use the sensors that provide environmental data, such as the light,
-      humidity, pressure, temperature, and proximity sensors.</dd>
-</dl>
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/sensors/sensors_overview.jd b/docs/html/guide/topics/sensors/sensors_overview.jd
index 543872c..e38a843 100644
--- a/docs/html/guide/topics/sensors/sensors_overview.jd
+++ b/docs/html/guide/topics/sensors/sensors_overview.jd
@@ -50,13 +50,39 @@
   </div>
 </div>
 
-<p>Most Android-powered devices have sensors that let you monitor changes in device
-position and motion. Many devices also have sensors that let you determine ambient environmental
-conditions, such as temperature, pressure, humidity, and lighting. You can access these
-sensors and acquire raw sensor data by using the Android sensor framework.</p>
+<p>Most Android-powered devices have built-in sensors that measure motion, orientation,
+and various environmental conditions. These sensors are capable of providing raw data with high
+precision and accuracy, and are useful if you want to monitor three-dimensional device movement or
+positioning, or you want to monitor changes in the ambient environment near a device. For example, a
+game might track readings from a device's gravity sensor to infer complex user gestures
+and motions, such as tilt, shake, rotation, or swing. Likewise, a weather application might use a
+device's temperature sensor and humidity sensor to calculate and report the dewpoint, or a travel
+application might use the geomagnetic field sensor and accelerometer to report a compass
+bearing.</p>
 
-<p>The sensor framework provides several classes and interfaces that help you perform a wide variety
-of sensor-related tasks. For example, you can use the sensor framework to do the following:</p>
+<p>The Android platform supports three broad categories of sensors:</p>
+
+<ul>
+  <li>Motion sensors
+    <p>These sensors measure acceleration forces and rotational forces along three axes. This
+      category includes accelerometers, gravity sensors, gyroscopes, and rotational vector
+      sensors.</p>
+  </li>
+  <li>Environmental sensors
+    <p>These sensors measure various environmental parameters, such as ambient air temperature
+      and pressure, illumination, and humidity. This category includes barometers, photometers, and
+      thermometers.</p>
+  </li>
+  <li>Position sensors
+    <p>These sensors measure the physical position of a device. This category includes
+      orientation sensors and magnetometers.</p>
+  </li>
+</ul>
+
+
+<p>You can access sensors available on the device and acquire raw sensor data by using the Android
+sensor framework. The sensor framework provides several classes and interfaces that help you perform a wide
+variety of sensor-related tasks. For example, you can use the sensor framework to do the following:</p>
 
 <ul>
    <li>Determine which sensors are available on a device.</li>
diff --git a/docs/html/guide/topics/testing/activity_testing.jd b/docs/html/guide/topics/testing/activity_testing.jd
deleted file mode 100644
index 51121f4..0000000
--- a/docs/html/guide/topics/testing/activity_testing.jd
+++ /dev/null
@@ -1,394 +0,0 @@
-page.title=Activity Testing
-parent.title=Testing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-      <a href="#ActivityTestAPI">The Activity Testing API</a>
-      <ol>
-        <li>
-            <a href="#ActivityInstrumentationTestCase2">ActivityInstrumentationTestCase2</a>
-        </li>
-        <li>
-            <a href="#ActivityUnitTestCase">ActivityUnitTestCase</a>
-        </li>
-        <li>
-            <a href="#SingleLaunchActivityTestCase">SingleLaunchActivityTestCase</a>
-        </li>
-        <li>
-            <a href="#MockObjectNotes">Mock objects and activity testing</a>
-        </li>
-        <li>
-            <a href="#AssertionNotes">Assertions for activity testing</a>
-        </li>
-      </ol>
-    </li>
-    <li>
-        <a href="#WhatToTest">What to Test</a>
-    </li>
-    <li>
-        <a href="#NextSteps">Next Steps</a>
-    </li>
-    <li>
-      <a href="#UITesting">Appendix: UI Testing Notes</a>
-      <ol>
-        <li>
-          <a href="#RunOnUIThread">Testing on the UI thread</a>
-        </li>
-        <li>
-          <a href="#NotouchMode">Turning off touch mode</a>
-        </li>
-        <li>
-          <a href="#UnlockDevice">Unlocking the Emulator or Device</a>
-        </li>
-        <li>
-          <a href="#UITestTroubleshooting">Troubleshooting UI tests</a>
-        </li>
-      </ol>
-    </li>
-    </ol>
-<h2>Key Classes</h2>
-    <ol>
-      <li>{@link android.test.InstrumentationTestRunner}</li>
-      <li>{@link android.test.ActivityInstrumentationTestCase2}</li>
-      <li>{@link android.test.ActivityUnitTestCase}</li>
-    </ol>
-<h2>Related Tutorials</h2>
-    <ol>
-      <li>
-        <a href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">
-        Hello, Testing</a>
-      </li>
-      <li>
-         <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-      </li>
-    </ol>
-<h2>See Also</h2>
-      <ol>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-          Testing in Eclipse, with ADT</a>
-        </li>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-          Testing in Other IDEs</a>
-        </li>
-      </ol>
-  </div>
-</div>
-<p>
-    Activity testing is particularly dependent on the the Android instrumentation framework.
-    Unlike other components, activities have a complex lifecycle based on callback methods; these
-    can't be invoked directly except by instrumentation. Also, the only way to send events to the
-    user interface from a program is through instrumentation.
-</p>
-<p>
-    This document describes how to test activities using instrumentation and other test
-    facilities. The document assumes you have already read
-    <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
-    the introduction to the Android testing and instrumentation framework.
-</p>
-<h2 id="ActivityTestAPI">The Activity Testing API</h2>
-<p>
-    The activity testing API base class is {@link android.test.InstrumentationTestCase},
-    which provides instrumentation to the test case subclasses you use for Activities.
-</p>
-<p>
-    For activity testing, this base class provides these functions:
-</p>
-<ul>
-    <li>
-        Lifecycle control: With instrumentation, you can start the activity under test, pause it,
-        and destroy it, using methods provided by the test case classes.
-    </li>
-    <li>
-        Dependency injection: Instrumentation allows you to create mock system objects such as
-        Contexts or Applications and use them to run the activity under test. This
-        helps you control the test environment and isolate it from production systems. You can
-        also set up customized Intents and start an activity with them.
-    </li>
-    <li>
-        User interface interaction: You use instrumentation to send keystrokes or touch events
-        directly to the UI of the activity under test.
-    </li>
-</ul>
-<p>
-    The activity testing classes also provide the JUnit framework by extending
-    {@link junit.framework.TestCase} and {@link junit.framework.Assert}.
-</p>
-<p>
-    The two main testing subclasses are {@link android.test.ActivityInstrumentationTestCase2} and
-    {@link android.test.ActivityUnitTestCase}. To test an Activity that is launched in a mode
-    other than <code>standard</code>, you use {@link android.test.SingleLaunchActivityTestCase}.
-</p>
-<h3 id="ActivityInstrumentationTestCase2">ActivityInstrumentationTestCase2</h3>
-<p>
-    The {@link android.test.ActivityInstrumentationTestCase2} test case class is designed to do
-    functional testing of one or more Activities in an application, using a normal system
-    infrastructure. It runs the Activities in a normal instance of the application under test,
-    using a standard system Context. It allows you to send mock Intents to the activity under
-    test, so you can use it to test an activity that responds to multiple types of intents, or
-    an activity that expects a certain type of data in the intent, or both. Notice, though, that it
-    does not allow mock Contexts or Applications, so you can not isolate the test from the rest of
-    a production system.
-</p>
-<h3 id="ActivityUnitTestCase">ActivityUnitTestCase</h3>
-<p>
-    The {@link android.test.ActivityUnitTestCase} test case class tests a single activity in
-    isolation. Before you start the activity, you can inject a mock Context or Application, or both.
-    You use it to run activity tests in isolation, and to do unit testing of methods
-    that do not interact with Android. You can not send mock Intents to the activity under test,
-    although you can call
-    {@link android.app.Activity#startActivity(Intent) Activity.startActivity(Intent)} and then
-    look at arguments that were received.
-</p>
-<h3 id="SingleLaunchActivityTestCase">SingleLaunchActivityTestCase</h3>
-<p>
-    The {@link android.test.SingleLaunchActivityTestCase} class is a convenience class for
-    testing a single activity in an environment that doesn't change from test to test.
-    It invokes {@link junit.framework.TestCase#setUp() setUp()} and
-    {@link junit.framework.TestCase#tearDown() tearDown()} only once, instead of once per
-    method call. It does not allow you to inject any mock objects.
-</p>
-<p>
-    This test case is useful for testing an activity that runs in a mode other than
-    <code>standard</code>. It ensures that the test fixture is not reset between tests. You
-    can then test that the activity handles multiple calls correctly.
-</p>
-<h3 id="MockObjectNotes">Mock objects and activity testing</h3>
-<p>
-    This section contains notes about the use of the mock objects defined in
-    {@link android.test.mock} with activity tests.
-</p>
-<p>
-    The mock object {@link android.test.mock.MockApplication} is only available for activity
-    testing if you use the {@link android.test.ActivityUnitTestCase} test case class.
-    By default, <code>ActivityUnitTestCase</code>, creates a hidden <code>MockApplication</code>
-    object that is used as the application under test. You can inject your own object using
-    {@link android.test.ActivityUnitTestCase#setApplication(Application) setApplication()}.
-</p>
-<h3 id="AssertionNotes">Assertions for activity testing</h3>
-<p>
-    {@link android.test.ViewAsserts} defines assertions for Views. You use it to verify the
-    alignment and position of View objects, and to look at the state of ViewGroup objects.
-</p>
-<h2 id="WhatToTest">What To Test</h2>
-<ul>
-    <li>
-        Input validation: Test that an activity responds correctly to input values in an
-        EditText View. Set up a keystroke sequence, send it to the activity, and then
-        use {@link android.view.View#findViewById(int)} to examine the state of the View. You can
-        verify that a valid keystroke sequence enables an OK button, while an invalid one leaves the
-        button disabled. You can also verify that the Activity responds to invalid input by
-        setting error messages in the View.
-    </li>
-    <li>
-        Lifecycle events: Test that each of your application's activities handles lifecycle events
-        correctly. In general, lifecycle events are actions, either from the system or from the
-        user, that trigger a callback method such as <code>onCreate()</code> or
-        <code>onClick()</code>. For example, an activity should respond to pause or destroy events
-        by saving its state. Remember that even a change in screen orientation causes the current
-        activity to be destroyed, so you should test that accidental device movements don't
-        accidentally lose the application state.
-    </li>
-    <li>
-        Intents: Test that each activity correctly handles the intents listed in the intent
-        filter specified in its manifest. You can use
-        {@link android.test.ActivityInstrumentationTestCase2} to send mock Intents to the
-        activity under test.
-    </li>
-    <li>
-        Runtime configuration changes: Test that each activity responds correctly to the
-        possible changes in the device's configuration while your application is running. These
-        include a change to the device's orientation, a change to the current language, and so
-        forth. Handling these changes is described in detail in the topic
-        <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
-        Changes</a>.
-    </li>
-    <li>
-        Screen sizes and resolutions: Before you publish your application, make sure to test it on
-        all of the screen sizes and densities on which you want it to run. You can test the
-        application on multiple sizes and densities using AVDs, or you can test your application
-        directly on the devices that you are targeting. For more information, see the topic
-        <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.
-    </li>
-</ul>
-<h2 id="NextSteps">Next Steps</h2>
-<p>
-    To learn how to set up and run tests in Eclipse, please refer to <a
-    href="{@docRoot}guide/developing/testing/testing_eclipse.html">Testing in
-    Eclipse, with ADT</a>. If you're not working in Eclipse, refer to <a
-    href="{@docRoot}guide/developing/testing/testing_otheride.html">Testing in Other
-    IDEs</a>.
-</p>
-<p>
-    If you want a step-by-step introduction to testing activities, try one of the
-    testing tutorials:
-</p>
-<ul>
-    <li>
-        The <a
-        href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">Hello,
-        Testing</a> tutorial introduces basic testing concepts and procedures in the
-        context of the Hello, World application.
-    </li>
-    <li>
-        The <a
-        href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity
-        Testing</a> tutorial is an excellent follow-up to the Hello, Testing tutorial.
-        It guides you through a more complex testing scenario that you develop against a
-        more realistic activity-oriented application.
-    </li>
-</ul>
-<h2 id="UITesting">Appendix: UI Testing Notes</h2>
-<p>
-    The following sections have tips for testing the UI of your Android application, specifically
-    to help you handle actions that run in the UI thread, touch screen and keyboard events, and home
-    screen unlock during testing.
-</p>
-<h3 id="RunOnUIThread">Testing on the UI thread</h3>
-<p>
-    An application's activities run on the application's <strong>UI thread</strong>. Once the
-    UI is instantiated, for example in the activity's <code>onCreate()</code> method, then all
-    interactions with the UI must run in the UI thread. When you run the application normally, it
-    has access to the thread and does not have to do anything special.
-</p>
-<p>
-    This changes when you run tests against the application. With instrumentation-based classes,
-    you can invoke methods against the UI of the application under test. The other test classes
-    don't allow this. To run an entire test method on the UI thread, you can annotate the thread
-    with <code>@UIThreadTest</code>. Notice that this will run <em>all</em> of the method statements
-    on the UI thread.  Methods that do not interact with the UI are not allowed; for example, you
-    can't invoke <code>Instrumentation.waitForIdleSync()</code>.
-</p>
-<p>
-    To run a subset of a test method on the UI thread, create an anonymous class of type
-    <code>Runnable</code>, put the statements you want in the <code>run()</code> method, and
-    instantiate a new instance of the class as a parameter to the method
-    <code><em>appActivity</em>.runOnUiThread()</code>, where <code><em>appActivity</em></code> is
-    the instance of the application you are testing.
-</p>
-<p>
-    For example, this code instantiates an activity to test, requests focus (a UI action) for the
-    Spinner displayed by the activity, and then sends a key to it. Notice that the calls to
-    <code>waitForIdleSync</code> and <code>sendKeys</code> aren't allowed to run on the UI thread:
-</p>
-<pre>
-  private MyActivity mActivity; // MyActivity is the class name of the app under test
-  private Spinner mSpinner;
-
-  ...
-
-  protected void setUp() throws Exception {
-      super.setUp();
-      mInstrumentation = getInstrumentation();
-
-      mActivity = getActivity(); // get a references to the app under test
-
-      /*
-       * Get a reference to the main widget of the app under test, a Spinner
-       */
-      mSpinner = (Spinner) mActivity.findViewById(com.android.demo.myactivity.R.id.Spinner01);
-
-  ...
-
-  public void aTest() {
-      /*
-       * request focus for the Spinner, so that the test can send key events to it
-       * This request must be run on the UI thread. To do this, use the runOnUiThread method
-       * and pass it a Runnable that contains a call to requestFocus on the Spinner.
-       */
-      mActivity.runOnUiThread(new Runnable() {
-          public void run() {
-              mSpinner.requestFocus();
-          }
-      });
-
-      mInstrumentation.waitForIdleSync();
-
-      this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
-</pre>
-
-<h3 id="NotouchMode">Turning off touch mode</h3>
-<p>
-    To control the emulator or a device with key events you send from your tests, you must turn off
-    touch mode. If you do not do this, the key events are ignored.
-</p>
-<p>
-    To turn off touch mode, you invoke
-    <code>ActivityInstrumentationTestCase2.setActivityTouchMode(false)</code>
-    <em>before</em> you call <code>getActivity()</code> to start the activity. You must invoke the
-    method in a test method that is <em>not</em> running on the UI thread. For this reason, you
-    can't invoke the touch mode method from a test method that is annotated with
-    <code>@UIThread</code>. Instead, invoke the touch mode method from <code>setUp()</code>.
-</p>
-<h3 id="UnlockDevice">Unlocking the emulator or device</h3>
-<p>
-    You may find that UI tests don't work if the emulator's or device's home screen is disabled with
-    the keyguard pattern. This is because the application under test can't receive key events sent
-    by <code>sendKeys()</code>. The best way to avoid this is to start your emulator or device
-    first and then disable the keyguard for the home screen.
-</p>
-<p>
-    You can also explicitly disable the keyguard. To do this,
-    you need to add a permission in the manifest file (<code>AndroidManifest.xml</code>) and
-    then disable the keyguard in your application under test. Note, though, that you either have to
-    remove this before you publish your application, or you have to disable it with code in
-    the published application.
-</p>
-<p>
-    To add the the permission, add the element
-    <code>&lt;uses-permission android:name="android.permission.DISABLE_KEYGUARD"/&gt;</code>
-    as a child of the <code>&lt;manifest&gt;</code> element. To disable the KeyGuard, add the
-    following code to the <code>onCreate()</code> method of activities you intend to test:
-</p>
-<pre>
-  mKeyGuardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
-  mLock = mKeyGuardManager.newKeyguardLock("<em>activity_classname</em>");
-  mLock.disableKeyguard();
-</pre>
-<p>where <code><em>activity_classname</em></code> is the class name of the activity.</p>
-<h3 id="UITestTroubleshooting">Troubleshooting UI tests</h3>
-<p>
-    This section lists some of the common test failures you may encounter in UI testing, and their
-    causes:
-</p>
-<dl>
-    <dt><code>WrongThreadException</code></dt>
-    <dd>
-      <p><strong>Problem:</strong></p>
-      For a failed test, the Failure Trace contains the following error message:
-      <code>
-        android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created
-        a view hierarchy can touch its views.
-      </code>
-      <p><strong>Probable Cause:</strong></p>
-        This error is common if you tried to send UI events to the UI thread from outside the UI
-        thread. This commonly happens if you send UI events from the test application, but you don't
-        use the <code>@UIThread</code> annotation or the <code>runOnUiThread()</code> method. The
-        test method tried to interact with the UI outside the UI thread.
-      <p><strong>Suggested Resolution:</strong></p>
-        Run the interaction on the UI thread. Use a test class that provides instrumentation. See
-        the previous section <a href="#RunOnUIThread">Testing on the UI Thread</a>
-        for more details.
-    </dd>
-    <dt><code>java.lang.RuntimeException</code></dt>
-    <dd>
-      <p><strong>Problem:</strong></p>
-        For a failed test, the Failure Trace contains the following error message:
-      <code>
-        java.lang.RuntimeException: This method can not be called from the main application thread
-      </code>
-      <p><strong>Probable Cause:</strong></p>
-        This error is common if your test method is annotated with <code>@UiThreadTest</code> but
-        then tries to do something outside the UI thread or tries to invoke
-        <code>runOnUiThread()</code>.
-      <p><strong>Suggested Resolution:</strong></p>
-        Remove the <code>@UiThreadTest</code> annotation, remove the <code>runOnUiThread()</code>
-        call, or re-factor your tests.
-    </dd>
-</dl>
diff --git a/docs/html/guide/topics/testing/contentprovider_testing.jd b/docs/html/guide/topics/testing/contentprovider_testing.jd
deleted file mode 100644
index edaae8c..0000000
--- a/docs/html/guide/topics/testing/contentprovider_testing.jd
+++ /dev/null
@@ -1,225 +0,0 @@
-page.title=Content Provider Testing
-parent.title=Testing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-        <a href="#DesignAndTest">Content Provider Design and Testing</a>
-    </li>
-    <li>
-      <a href="#ContentProviderTestAPI">The Content Provider Testing API</a>
-      <ol>
-        <li>
-          <a href="#ProviderTestCase2">ProviderTestCase2 </a>
-        </li>
-        <li>
-          <a href="#MockObjects">Mock object classes</a>
-        </li>
-      </ol>
-    </li>
-    <li>
-        <a href="#WhatToTest">What To Test</a>
-    </li>
-    <li>
-        <a href="#NextSteps">Next Steps</a>
-    </li>
-  </ol>
-  <h2>Key Classes</h2>
-    <ol>
-      <li>{@link android.test.InstrumentationTestRunner}</li>
-      <li>{@link android.test.ProviderTestCase2}</li>
-      <li>{@link android.test.IsolatedContext}</li>
-      <li>{@link android.test.mock.MockContentResolver}</li>
-    </ol>
-  <h2>See Also</h2>
-      <ol>
-        <li>
-          <a
-          href="{@docRoot}guide/topics/testing/testing_android.html">
-          Testing Fundamentals</a>
-        </li>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-          Testing in Eclipse, with ADT</a>
-        </li>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-          Testing in Other IDEs</a>
-        </li>
-      </ol>
-  </div>
-</div>
-<p>
-    Content providers, which store and retrieve data and make it accessible across applications,
-    are a key part of the Android API. As an application developer you're allowed to provide your
-    own public providers for use by other applications. If you do, then you should test them
-    using the API you publish.
-</p>
-<p>
-    This document describes how to test public content providers, although the information is
-    also applicable to providers that you keep private to your own application. If you aren't
-    familiar with content  providers or the Android testing framework, please read
-    <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>,
-    the guide to developing content providers, and
-    <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
-    the introduction to the Android testing and instrumentation framework.
-</p>
-<h2 id="DesignAndTest">Content Provider Design and Testing</h2>
-<p>
-    In Android, content providers are viewed externally as data APIs that provide
-    tables of data, with their internals hidden from view. A content provider may have many
-    public constants, but it usually has few if any public methods and no public variables.
-    This suggests that you should write your tests based only on the provider's public members.
-    A content provider that is designed like this is offering a contract between itself and its
-    users.
-</p>
-<p>
-    The base test case class for content providers,
-    {@link android.test.ProviderTestCase2}, allows you to test your content provider in an
-    isolated environment. Android mock objects such as {@link android.test.IsolatedContext} and
-    {@link android.test.mock.MockContentResolver} also help provide an isolated test environment.
-</p>
-<p>
-    As with other Android tests, provider test packages are run under the control of the test
-    runner {@link android.test.InstrumentationTestRunner}. The section
-    <a href="{@docRoot}guide/topics/testing/testing_android.html#InstrumentationTestRunner">
-    Running Tests With InstrumentationTestRunner</a> describes the test runner in
-    more detail. The topic <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-    Testing in Eclipse, with ADT</a> shows you how to run a test package in Eclipse, and the
-    topic <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-    Testing in Other IDEs</a>
-    shows you how to run a test package from the command line.
-</p>
-<h2 id="ContentProviderTestAPI">Content Provider Testing API</h2>
-<p>
-    The main focus of the provider testing API is to provide an isolated testing environment. This
-    ensures that tests always run against data dependencies set explicitly in the test case. It
-    also prevents tests from modifying actual user data. For example, you want to avoid writing
-    a test that fails because there was data left over from a previous test, and you want to
-    avoid adding or deleting contact information in a actual provider.
-</p>
-<p>
-    The test case class and mock object classes for provider testing set up this isolated testing
-    environment for you.
-</p>
-<h3 id="ProviderTestCase2">ProviderTestCase2</h3>
-<p>
-    You test a provider with a subclass of {@link android.test.ProviderTestCase2}. This base class
-    extends {@link android.test.AndroidTestCase}, so it provides the JUnit testing framework as well
-    as Android-specific methods for testing application permissions. The most important
-    feature of this class is its initialization, which creates the isolated test environment.
-</p>
-<p>
-    The initialization is done in the constructor for {@link android.test.ProviderTestCase2}, which
-    subclasses call in their own constructors. The {@link android.test.ProviderTestCase2}
-    constructor creates an {@link android.test.IsolatedContext} object that allows file and
-    database operations but stubs out other interactions with the Android system.
-    The file and database operations themselves take place in a directory that is local to the
-    device or emulator and has a special prefix.
-</p>
-<p>
-    The constructor then creates a {@link android.test.mock.MockContentResolver} to use as the
-    resolver for the test. The {@link android.test.mock.MockContentResolver} class is described in
-    detail in the section
-    <a href="{@docRoot}guide/topics/testing/testing_android.html#MockObjectClasses">Mock object
-classes</a>.
-</p>
-<p>
-    Lastly, the constructor creates an instance of the provider under test. This is a normal
-    {@link android.content.ContentProvider} object, but it takes all of its environment information
-    from the {@link android.test.IsolatedContext}, so it is restricted to
-    working in the isolated test environment. All of the tests done in the test case class run
-    against this isolated object.
-</p>
-<h3 id="MockObjects">Mock object classes</h3>
-<p>
-    {@link android.test.ProviderTestCase2} uses {@link android.test.IsolatedContext} and
-    {@link android.test.mock.MockContentResolver}, which are standard mock object classes. To
-    learn more about them, please read
-    <a href="{@docRoot}guide/topics/testing/testing_android.html#MockObjectClasses">
-    Testing Fundamentals</a>.
-</p>
-<h2 id="WhatToTest">What To Test</h2>
-<p>
-    The topic <a href="{@docRoot}guide/topics/testing/what_to_test.html">What To Test</a>
-    lists general considerations for testing Android components.
-    Here are some specific guidelines for testing content providers.
-</p>
-<ul>
-    <li>
-        Test with resolver methods: Even though you can instantiate a provider object in
-        {@link android.test.ProviderTestCase2}, you should always test with a resolver object
-        using the appropriate URI. This ensures that you are testing the provider using the same
-        interaction that a regular application would use.
-    </li>
-    <li>
-        Test a public provider as a contract: If you intent your provider to be public and
-        available to other applications, you should test it as a contract. This includes
-        the following ideas:
-        <ul>
-            <li>
-                Test with constants that your provider publicly exposes. For
-                example, look for constants that refer to column names in one of the provider's
-                data tables. These should always be constants publicly defined by the provider.
-            </li>
-            <li>
-                Test all the URIs offered by your provider. Your provider may offer several URIs,
-                each one referring to a different aspect of the data. The
-                <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample,
-                for example, features a provider that offers one URI for retrieving a list of notes,
-                another for retrieving an individual note by it's database ID, and a third for
-                displaying notes in a live folder.
-            </li>
-            <li>
-                Test invalid URIs: Your unit tests should deliberately call the provider with an
-                invalid URI, and look for errors. Good provider design is to throw an
-                IllegalArgumentException for invalid URIs.
-
-            </li>
-        </ul>
-    </li>
-    <li>
-        Test the standard provider interactions: Most providers offer six access methods:
-        query, insert, delete, update, getType, and onCreate(). Your tests should verify that all
-        of these methods work. These are described in more detail in the topic
-        <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
-    </li>
-    <li>
-        Test business logic: Don't forget to test the business logic that your provider should
-        enforce. Business logic includes handling of invalid values, financial or arithmetic
-        calculations, elimination or combining of duplicates, and so forth. A content provider
-        does not have to have business logic, because it may be implemented by activities that
-        modify the data. If the provider does implement business logic, you should test it.
-    </li>
-</ul>
-<h2 id="NextSteps">Next Steps</h2>
-<p>
-    To learn how to set up and run tests in Eclipse, please refer to <a
-    href="{@docRoot}guide/developing/testing/testing_eclipse.html">Testing in
-    Eclipse, with ADT</a>. If you're not working in Eclipse, refer to <a
-    href="{@docRoot}guide/developing/testing/testing_otheride.html">Testing in Other
-    IDEs</a>.
-</p>
-<p>
-    If you want a step-by-step introduction to testing activities, try one of the
-    testing tutorials:
-</p>
-<ul>
-    <li>
-        The <a
-        href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">Hello,
-        Testing</a> tutorial introduces basic testing concepts and procedures in the
-        context of the Hello, World application.
-    </li>
-    <li>
-        The <a
-        href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity
-        Testing</a> tutorial is an excellent follow-up to the Hello, Testing tutorial.
-        It guides you through a more complex testing scenario that you develop against a
-        more realistic activity-oriented application.
-    </li>
-</ul>
diff --git a/docs/html/guide/topics/testing/index.jd b/docs/html/guide/topics/testing/index.jd
deleted file mode 100644
index cf87187..0000000
--- a/docs/html/guide/topics/testing/index.jd
+++ /dev/null
@@ -1,86 +0,0 @@
-page.title=Testing
-@jd:body
-<p>
-    The Android development environment includes an integrated testing framework that helps you
-    test all aspects of your application.
-</p>
-<h4>Fundamentals</h4>
-<p>
-    To start learning how to use the framework to create tests for your applications, please
-    read the topic <a href="{@docRoot}guide/topics/testing/testing_android.html">
-    Testing Fundamentals</a>.
-</p>
-<h4>Concepts</h4>
-<ul>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/activity_testing.html">
-        Activity Testing</a> focuses on testing activities. It describes how instrumentation allows
-        you to control activities outside the normal application lifecycle. It also lists
-        activity-specific features you should test, and it provides tips for testing Android
-        user interfaces.
-    </li>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/contentprovider_testing.html">
-        Content Provider Testing</a> focuses on testing content providers. It describes the
-        mock system objects you can use, provides tips for designing providers so that they
-        can be tested, and lists provider-specific features you should test.
-    </li>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/service_testing.html">
-        Service Testing</a> focuses on testing services. It also lists service-specific features
-        you should test.
-    </li>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/what_to_test.html">What to Test</a>
-        is an overview of the types of testing you should do. It focuses on testing
-        system-wide aspects of Android that can affect every component in your application.
-    </li>
-</ul>
-<h4>Procedures</h4>
-<ul>
-    <li>
-        The topic <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-        Testing in Eclipse, with ADT</a> describes how to create and run tests in Eclipse with ADT.
-    </li>
-    <li>
-        The topic <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-        Testing in other IDEs</a> describes how to create and run tests with command-line tools.
-    </li>
-</ul>
-<h4>Tutorials</h4>
-<ul>
-    <li>
-        The <a href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">
-        Hello, Testing</a> tutorial introduces basic testing concepts and procedures.
-    </li>
-    <li>
-        For a more advanced tutorial, try
-        <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>,
-        which guides you through a more complex testing scenario.
-    </li>
-</ul>
-<h4>Tools</h4>
-<ul>
-    <li>
-        The
-        <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a>,
-        usually called Monkey, is a command-line tool that sends pseudo-random
-        streams of keystrokes, touches, and gestures to a device.
-    </li>
-    <li>
-     The <a href="{@docRoot}guide/developing/tools/monkeyrunner_concepts.html">monkeyrunner</a> tool
-        is an API and execution environment. You use monkeyrunner with Python programs
-        to test applications and devices.
-    </li>
-</ul>
-<!--
-<h4>Samples</h4>
-<ul>
-    <li>
-        The <a href="{@docRoot}resources/samples/AlarmServiceTest.html">Alarm Service Test</a>
-        is a test package for the <a href="{@docRoot}resources/samples/Alarm.html">Alarm</a>
-        sample application. It provides a simple example of unit
-        testing a {@link android.app.Service}.
-    </li>
-</ul>
--->
diff --git a/docs/html/guide/topics/testing/service_testing.jd b/docs/html/guide/topics/testing/service_testing.jd
deleted file mode 100644
index eae8607..0000000
--- a/docs/html/guide/topics/testing/service_testing.jd
+++ /dev/null
@@ -1,180 +0,0 @@
-page.title=Service Testing
-parent.title=Testing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-        <a href="#DesignAndTest">Service Design and Testing</a>
-    </li>
-    <li>
-        <a href="#ServiceTestCase">ServiceTestCase</a>
-    </li>
-    <li>
-        <a href="#MockObjects">Mock object classes</a>
-    </li>
-    <li>
-        <a href="#TestAreas">What to Test</a>
-    </li>
-  </ol>
-  <h2>Key Classes</h2>
-    <ol>
-      <li>{@link android.test.InstrumentationTestRunner}</li>
-      <li>{@link android.test.ServiceTestCase}</li>
-      <li>{@link android.test.mock.MockApplication}</li>
-      <li>{@link android.test.RenamingDelegatingContext}</li>
-    </ol>
-  <h2>Related Tutorials</h2>
-    <ol>
-        <li>
-            <a href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">
-            Hello, Testing</a>
-        </li>
-        <li>
-            <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-        </li>
-    </ol>
-  <h2>See Also</h2>
-      <ol>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-          Testing in Eclipse, with ADT</a>
-        </li>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-          Testing in Other IDEs</a>
-        </li>
-      </ol>
-  </div>
-</div>
-<p>
-    Android provides a testing framework for Service objects that can run them in
-    isolation and provides mock objects. The test case class for Service objects is
-    {@link android.test.ServiceTestCase}. Since the Service class assumes that it is separate
-    from its clients, you can test a Service object without using instrumentation.
-</p>
-<p>
-    This document describes techniques for testing Service objects. If you aren't familiar with the
-    Service class, please read the <a href="{@docRoot}guide/topics/fundamentals/services.html">
-    Services</a> document. If you aren't familiar with Android testing, please read
-    <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Fundamentals</a>,
-    the introduction to the Android testing and instrumentation framework.
-</p>
-<h2 id="DesignAndTest">Service Design and Testing</h2>
-<p>
-    When you design a Service, you should consider how your tests can examine the various states
-    of the Service lifecycle. If the lifecycle methods that start up your Service, such as
-    {@link android.app.Service#onCreate() onCreate()} or
-    {@link android.app.Service#onStartCommand(Intent, int, int) onStartCommand()} do not normally
-    set a global variable to indicate that they were successful, you may want to provide such a
-    variable for testing purposes.
-</p>
-<p>
-    Most other testing is facilitated by the methods in the {@link android.test.ServiceTestCase}
-    test case class. For example, the {@link android.test.ServiceTestCase#getService()} method
-    returns a handle to the Service under test, which you can test to confirm that the Service is
-    running even at the end of your tests.
-</p>
-<h2 id="ServiceTestCase">ServiceTestCase</h2>
-<p>
-    {@link android.test.ServiceTestCase} extends the JUnit {@link junit.framework.TestCase} class
-    with with methods for testing application permissions and for controlling the application and
-    Service under test. It also provides mock application and Context objects that isolate your
-    test from the rest of the system.
-</p>
-<p>
-    {@link android.test.ServiceTestCase} defers initialization of the test environment until you
-    call {@link android.test.ServiceTestCase#startService(Intent) ServiceTestCase.startService()} or
-    {@link android.test.ServiceTestCase#bindService(Intent) ServiceTestCase.bindService()}. This
-    allows you to set up your test environment, particularly your mock objects, before the Service
-    is started.
-</p>
-<p>
-    Notice that the parameters to <code>ServiceTestCase.bindService()</code>are different from
-    those for <code>Service.bindService()</code>. For the <code>ServiceTestCase</code> version,
-    you only provide an Intent. Instead of returning a boolean,
-    <code>ServiceTestCase.bindService()</code> returns an object that subclasses
-    {@link android.os.IBinder}.
-</p>
-<p>
-    The {@link android.test.ServiceTestCase#setUp()} method for {@link android.test.ServiceTestCase}
-    is called before each test. It sets up the test fixture by making a copy of the current system
-    Context before any test methods touch it. You can retrieve this Context by calling
-    {@link android.test.ServiceTestCase#getSystemContext()}. If you override this method, you must
-    call <code>super.setUp()</code> as the first statement in the override.
-</p>
-<p>
-    The methods {@link android.test.ServiceTestCase#setApplication(Application) setApplication()}
-    and {@link android.test.AndroidTestCase#setContext(Context)} setContext()} allow you to set
-    a mock Context or mock Application (or both) for the Service, before you start it. These mock
-    objects are described in <a href="#MockObjects">Mock object classes</a>.
-</p>
-<p>
-    By default, {@link android.test.ServiceTestCase} runs the test method
-    {@link android.test.AndroidTestCase#testAndroidTestCaseSetupProperly()}, which asserts that
-    the base test case class successfully set up a Context before running.
-</p>
-<h2 id="MockObjects">Mock object classes</h2>
-<p>
-    <code>ServiceTestCase</code> assumes that you will use a mock Context or mock Application
-    (or both) for the test environment. These objects isolate the test environment from the
-    rest of the system. If you don't provide your own instances of these objects before you
-    start the Service, then {@link android.test.ServiceTestCase} will create its own internal
-    instances and inject them into the Service. You can override this behavior by creating and
-    injecting your own instances before starting the Service
-</p>
-<p>
-    To inject a mock Application object into the Service under test, first create a subclass of
-    {@link android.test.mock.MockApplication}. <code>MockApplication</code> is a subclass of
-    {@link android.app.Application} in which all the methods throw an Exception, so to use it
-    effectively you subclass it and override the methods you need. You then inject it into the
-    Service with the
-    {@link android.test.ServiceTestCase#setApplication(Application) setApplication()} method.
-    This mock object allows you to control the application values that the Service sees, and
-    isolates it from the real system. In addition, any hidden dependencies your Service has on
-    its application reveal themselves as exceptions when you run the test.
-</p>
-<p>
-    You inject a mock Context into the Service under test with the
-    {@link android.test.AndroidTestCase#setContext(Context) setContext()} method. The mock
-    Context classes you can use are described in more detail in
-    <a href="{@docRoot}guide/topics/testing/testing_android.html#MockObjectClasses">
-    Testing Fundamentals</a>.
-</p>
-<h2 id="TestAreas">What to Test</h2>
-<p>
-    The topic <a href="{@docRoot}guide/topics/testing/what_to_test.html">What To Test</a>
-    lists general considerations for testing Android components.
-    Here are some specific guidelines for testing a Service:
-</p>
-<ul>
-    <li>
-        Ensure that the {@link android.app.Service#onCreate()} is called in response to
-        {@link android.content.Context#startService(Intent) Context.startService()} or
-    {@link android.content.Context#bindService(Intent,ServiceConnection,int) Context.bindService()}.
-        Similarly, you should ensure that {@link android.app.Service#onDestroy()} is called in
-        response to {@link android.content.Context#stopService(Intent) Context.stopService()},
-        {@link android.content.Context#unbindService(ServiceConnection) Context.unbindService()},
-        {@link android.app.Service#stopSelf()}, or
-        {@link android.app.Service#stopSelfResult(int) stopSelfResult()}.
-    </li>
-    <li>
-        Test that your Service correctly handles multiple calls from
-        <code>Context.startService()</code>. Only the first call triggers
-        <code>Service.onCreate()</code>, but all calls trigger a call to
-        <code>Service.onStartCommand()</code>.
-        <p>
-            In addition, remember that <code>startService()</code> calls don't
-            nest, so a single call to <code>Context.stopService()</code> or
-            <code>Service.stopSelf()</code> (but not <code>stopSelf(int)</code>)
-            will stop the Service. You should test that your Service stops at the correct point.
-        </p>
-    </li>
-    <li>
-        Test any business logic that your Service implements. Business logic includes checking for
-        invalid values, financial and arithmetic calculations, and so forth.
-    </li>
-</ul>
diff --git a/docs/html/guide/topics/testing/testing_android.jd b/docs/html/guide/topics/testing/testing_android.jd
deleted file mode 100755
index adbc59d..0000000
--- a/docs/html/guide/topics/testing/testing_android.jd
+++ /dev/null
@@ -1,666 +0,0 @@
-page.title=Testing Fundamentals
-parent.title=Testing
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-        <a href="#TestStructure">Test Structure</a>
-    </li>
-    <li>
-        <a href="#TestProjects">Test Projects</a>
-    </li>
-    <li>
-      <a href="#TestAPI">The Testing API</a>
-      <ol>
-        <li>
-          <a href="#JUnit">JUnit</a>
-        </li>
-        <li>
-          <a href="#Instrumentation">Instrumentation</a>
-        </li>
-        <li>
-            <a href="#TestCaseClasses">Test case classes</a>
-        </li>
-        <li>
-          <a href="#AssertionClasses">Assertion classes</a>
-        </li>
-        <li>
-          <a href="#MockObjectClasses">Mock object classes</a>
-        </li>
-      </ol>
-    </li>
-    <li>
-        <a href="#InstrumentationTestRunner">Running Tests</a>
-    </li>
-    <li>
-        <a href="#TestResults">Seeing Test Results</a>
-    </li>
-    <li>
-        <a href="#Monkeys">monkey and monkeyrunner</a>
-    </li>
-    <li>
-       <a href="#PackageNames">Working With Package Names</a>
-    </li>
-    <li>
-        <a href="#WhatToTest">What To Test</a>
-    </li>
-    <li>
-        <a href="#NextSteps">Next Steps</a>
-    </li>
-  </ol>
-  <h2>Key classes</h2>
-    <ol>
-      <li>{@link android.test.InstrumentationTestRunner}</li>
-      <li>{@link android.test}</li>
-      <li>{@link android.test.mock}</li>
-      <li>{@link junit.framework}</li>
-    </ol>
-  <h2>Related tutorials</h2>
-    <ol>
-        <li>
-            <a href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">
-            Hello, Testing</a>
-        </li>
-        <li>
-            <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-        </li>
-    </ol>
-  <h2>See also</h2>
-      <ol>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_eclipse.html">
-          Testing in Eclipse, with ADT</a>
-        </li>
-        <li>
-          <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-          Testing in Other IDEs</a>
-        </li>
-        <li>
-          <a href="{@docRoot}guide/developing/tools/monkeyrunner_concepts.html">
-          monkeyrunner</a>
-        </li>
-        <li>
-     <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a>
-        </li>
-      </ol>
-  </div>
-</div>
-<p>
-    The Android testing framework, an integral part of the development environment,
-    provides an architecture and powerful tools that help you test every aspect of your application
-    at every level from unit to framework.
-</p>
-<p>
-    The testing framework has these key features:
-</p>
-<ul>
-    <li>
-        Android test suites are based on JUnit. You can use plain JUnit to test a class that doesn't
-        call the Android API, or Android's JUnit extensions to test Android components. If you're
-        new to Android testing, you can start with general-purpose test case classes such as {@link
-        android.test.AndroidTestCase} and then go on to use more sophisticated classes.
-    </li>
-    <li>
-        The Android JUnit extensions provide component-specific test case classes. These classes
-        provide helper methods for creating mock objects and methods that help you control the
-        lifecycle of a component.
-    </li>
-    <li>
-        Test suites are contained in test packages that are similar to main application packages, so
-        you don't need to learn a new set of tools or techniques for designing and building tests.
-    </li>
-    <li>
-        The SDK tools for building and tests are available in Eclipse with ADT, and also in
-        command-line form for use with other IDES. These tools get information from the project of
-        the application under test and use this information to automatically create the build files,
-        manifest file, and directory structure for the test package.
-    </li>
-    <li>
-        The SDK also provides
-  <a href="{@docRoot}guide/developing/tools/monkeyrunner_concepts.html">monkeyrunner</a>, an API
-        testing devices with Python programs, and <a
-        href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a>,
-        a command-line tool for stress-testing UIs by sending pseudo-random events to a device.
-    </li>
-</ul>
-<p>
-    This document describes the fundamentals of the Android testing framework, including the
-    structure of tests, the APIs that you use to develop tests, and the tools that you use to run
-    tests and view results. The document assumes you have a basic knowledge of Android application
-    programming and JUnit testing methodology.
-</p>
-<p>
-    The following diagram summarizes the testing framework:
-</p>
-<div style="width: 70%; margin-left:auto; margin-right:auto;">
-<a href="{@docRoot}images/testing/test_framework.png">
-    <img src="{@docRoot}images/testing/test_framework.png"
-        alt="The Android testing framework"/>
-</a>
-</div>
-<h2 id="TestStructure">Test Structure</h2>
-<p>
-    Android's build and test tools assume that test projects are organized into a standard
-    structure of tests, test case classes, test packages, and test projects.
-</p>
-<p>
-    Android testing is based on JUnit. In general, a JUnit test is a method whose
-    statements test a part of the application under test. You organize test methods into classes
-    called test cases (or test suites). Each test is an isolated test of an individual module in
-    the application under test. Each class is a container for related test methods, although it
-    often provides helper methods as well.
-</p>
-<p>
-    In JUnit, you build one or more test source files into a class file. Similarly, in Android you
-    use the SDK's build tools to build one or more test source files into class files in an
-    Android test package. In JUnit, you use a test runner to execute test classes. In Android, you
-    use test tools to load the test package and the application under test, and the tools then
-    execute an Android-specific test runner.
-</p>
-<h2 id="TestProjects">Test Projects</h2>
-<p>
-    Tests, like Android applications, are organized into projects.
-</p>
-<p>
-    A test project is a directory or Eclipse project in which you create the source code, manifest
-    file, and other files for a test package. The Android SDK contains tools for Eclipse with ADT
-    and for the command line that create and update test projects for you. The tools create the
-    directories you use for source code and resources and the manifest file for the test package.
-    The command-line tools also create the Ant build files you need.
-</p>
-<p>
-    You should always use Android tools to create a test project. Among other benefits,
-    the tools:
-</p>
-    <ul>
-        <li>
-            Automatically set up your test package to use
-            {@link android.test.InstrumentationTestRunner} as the test case runner. You must use
-            <code>InstrumentationTestRunner</code> (or a subclass) to run JUnit tests.
-        </li>
-        <li>
-            Create an appropriate name for the test package. If the application
-            under test has a package name of <code>com.mydomain.myapp</code>, then the
-            Android tools set the test package name to <code>com.mydomain.myapp.test</code>. This
-            helps you identify their relationship, while preventing conflicts within the system.
-        </li>
-        <li>
-            Automatically create the proper build files, manifest file, and directory
-            structure for the test project. This helps you to build the test package without
-            having to modify build files and sets up the linkage between your test package and
-            the application under test.
-            The
-        </li>
-    </ul>
-<p>
-    You can create a test project anywhere in your file system, but the best approach is to
-    add the test project so that its root directory <code>tests/</code> is at the same level
-    as the <code>src/</code> directory of the main application's project. This helps you find the
-    tests associated with an application. For example, if your application project's root directory
-    is <code>MyProject</code>, then you should use the following directory structure:
-</p>
-<pre class="classic no-pretty-print">
-  MyProject/
-      AndroidManifest.xml
-      res/
-          ... (resources for main application)
-      src/
-          ... (source code for main application) ...
-      tests/
-          AndroidManifest.xml
-          res/
-              ... (resources for tests)
-          src/
-              ... (source code for tests)
-</pre>
-<h2 id="TestAPI">The Testing API</h2>
-<p>
-    The Android testing API is based on the JUnit API and extended with a instrumentation
-    framework and Android-specific testing classes.
-</p>
-<h3 id="JUnit">JUnit</h3>
-<p>
-    You can use the JUnit {@link junit.framework.TestCase TestCase} class to do unit testing on
-    a plain Java object. <code>TestCase</code> is also the base class for
-    {@link android.test.AndroidTestCase}, which you can use to test Android-dependent objects.
-    Besides providing the JUnit framework, AndroidTestCase offers Android-specific setup,
-    teardown, and helper methods.
-</p>
-<p>
-    You use the JUnit {@link junit.framework.Assert} class to display test results.
-    The assert methods compare values you expect from a test to the actual results and
-    throw an exception if the comparison fails. Android also provides a class of assertions that
-    extend the possible types of comparisons, and another class of assertions for testing the UI.
-    These are described in more detail in the section <a href="#AssertionClasses">
-    Assertion classes</a>
-</p>
-<p>
-    To learn more about JUnit, you can read the documentation on the
-    <a href="http://www.junit.org">junit.org</a> home page.
-    Note that the Android testing API supports JUnit 3 code style, but not JUnit 4. Also, you must
-    use Android's instrumented test runner {@link android.test.InstrumentationTestRunner} to run
-    your test case classes. This test runner is described in the
-    section <a href="#InstrumentationTestRunner">Running Tests</a>.
-</p>
-<h3 id="Instrumentation">Instrumentation</h3>
-<p>
-    Android instrumentation is a set of control methods or "hooks" in the Android system. These hooks
-    control an Android component independently of its normal lifecycle. They also control how
-    Android loads applications.
-</p>
-<p>
-    Normally, an Android component runs in a lifecycle determined by the system. For example, an
-    Activity object's lifecycle starts when the Activity is activated by an Intent. The object's
-    <code>onCreate()</code> method is called, followed by <code>onResume()</code>. When the user
-    starts another application, the <code>onPause()</code> method is called. If the Activity
-    code calls the <code>finish()</code> method, the <code>onDestroy()</code> method is called.
-    The Android framework API does not provide a way for your code to invoke these callback
-    methods directly, but you can do so using instrumentation.
-</p>
-<p>
-    Also, the system runs all the components of an application into the same
-    process. You can allow some components, such as content providers, to run in a separate process,
-    but you can't force an application to run in the same process as another application that is
-    already running.
-</p>
-<p>
-    With Android instrumentation, though, you can invoke callback methods in your test code.
-    This allows you to run through the lifecycle of a component step by step, as if you were
-    debugging the component. The following test code snippet demonstrates how to use this to
-    test that an Activity saves and restores its state:
-</p>
-<a name="ActivitySnippet"></a>
-<pre>
-    // Start the main activity of the application under test
-    mActivity = getActivity();
-
-    // Get a handle to the Activity object's main UI widget, a Spinner
-    mSpinner = (Spinner)mActivity.findViewById(com.android.example.spinner.R.id.Spinner01);
-
-    // Set the Spinner to a known position
-    mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);
-
-    // Stop the activity - The onDestroy() method should save the state of the Spinner
-    mActivity.finish();
-
-    // Re-start the Activity - the onResume() method should restore the state of the Spinner
-    mActivity = getActivity();
-
-    // Get the Spinner's current position
-    int currentPosition = mActivity.getSpinnerPosition();
-
-    // Assert that the current position is the same as the starting position
-    assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
-</pre>
-<p>
-    The key method used here is
-    {@link android.test.ActivityInstrumentationTestCase2#getActivity()}, which is a
-    part of the instrumentation API. The Activity under test is not started until you call this
-    method. You can set up the test fixture in advance, and then call this method to start the
-    Activity.
-</p>
-<p>
-    Also, instrumentation can load both a test package and the application under test into the
-    same process. Since the application components and their tests are in the same process, the
-    tests can invoke methods in the components, and modify and examine fields in the components.
-</p>
-<h3 id="TestCaseClasses">Test case classes</h3>
-<p>
-    Android provides several test case classes that extend {@link junit.framework.TestCase} and
-    {@link junit.framework.Assert} with Android-specific setup, teardown, and helper methods.
-</p>
-<h4 id="AndroidTestCase">AndroidTestCase</h4>
-<p>
-    A useful general test case class, especially if you are
-    just starting out with Android testing, is {@link android.test.AndroidTestCase}. It extends
-    both {@link junit.framework.TestCase} and {@link junit.framework.Assert}. It provides the
-    JUnit-standard <code>setUp()</code> and <code>tearDown()</code> methods, as well as
-    all of JUnit's Assert methods. In addition, it provides methods for testing permissions, and a
-    method that guards against memory leaks by clearing out certain class references.
-</p>
-<h4 id="ComponentTestCase">Component-specific test cases</h4>
-<p>
-    A key feature of the Android testing framework is its component-specific test case classes.
-    These address specific component testing needs with methods for fixture setup and
-    teardown and component lifecycle control. They also provide methods for setting up mock objects.
-    These classes are described in the component-specific testing topics:
-</p>
-<ul>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/activity_testing.html">Activity Testing</a>
-    </li>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/contentprovider_testing.html">
-        Content Provider Testing</a>
-    </li>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/service_testing.html">Service Testing</a>
-    </li>
-</ul>
-<p>
-    Android does not provide a separate test case class for BroadcastReceiver. Instead, test a
-    BroadcastReceiver by testing the component that sends it Intent objects, to verify that the
-    BroadcastReceiver responds correctly.
-</p>
-<h4 id="ApplicationTestCase">ApplicationTestCase</h4>
-<p>
-    You use the {@link android.test.ApplicationTestCase} test case class to test the setup and
-    teardown of {@link android.app.Application} objects. These objects maintain the global state of
-    information that applies to all the components in an application package. The test case can
-    be useful in verifying that the &lt;application&gt; element in the manifest file is correctly
-    set up. Note, however, that this test case does not allow you to control testing of the
-    components within your application package.
-</p>
-<h4 id="InstrumentationTestCase">InstrumentationTestCase</h4>
-<p>
-    If you want to use instrumentation methods in a test case class, you must use
-    {@link android.test.InstrumentationTestCase} or one of its subclasses. The
-    {@link android.app.Activity} test cases extend this base class with other functionality that
-    assists in Activity testing.
-</p>
-
-<h3 id="AssertionClasses">Assertion classes</h3>
-<p>
-    Because Android test case classes extend JUnit, you can use assertion methods to display the
-    results of tests. An assertion method compares an actual value returned by a test to an
-    expected value, and throws an AssertionException if the comparison test fails. Using assertions
-    is more convenient than doing logging, and provides better test performance.
-</p>
-<p>
-    Besides the JUnit {@link junit.framework.Assert} class methods, the testing API also provides
-    the {@link android.test.MoreAsserts} and {@link android.test.ViewAsserts} classes:
-</p>
-<ul>
-    <li>
-        {@link android.test.MoreAsserts} contains more powerful assertions such as
-        {@link android.test.MoreAsserts#assertContainsRegex}, which does regular expression
-        matching.
-    </li>
-    <li>
-        {@link android.test.ViewAsserts} contains useful assertions about Views. For example
-        it contains {@link android.test.ViewAsserts#assertHasScreenCoordinates} that tests if a View
-        has a particular X and Y position on the visible screen. These asserts simplify testing of
-        geometry and alignment in the UI.
-    </li>
-</ul>
-<h3 id="MockObjectClasses">Mock object classes</h3>
-<p>
-    To facilitate dependency injection in testing, Android provides classes that create mock system
-    objects such as {@link android.content.Context} objects,
-    {@link android.content.ContentProvider} objects, {@link android.content.ContentResolver}
-    objects, and {@link android.app.Service} objects. Some test cases also provide mock
-    {@link android.content.Intent} objects. You use these mocks both to isolate tests
-    from the rest of the system and to facilitate dependency injection for testing. These classes
-    are found in the Java packages {@link android.test} and {@link android.test.mock}.
-</p>
-<p>
-    Mock objects isolate tests from a running system by stubbing out or overriding
-    normal operations. For example, a {@link android.test.mock.MockContentResolver}
-    replaces the normal resolver framework with its own local framework, which is isolated
-    from the rest of the system. MockContentResolver also stubs out the
-    {@link android.content.ContentResolver#notifyChange(Uri, ContentObserver, boolean)} method
-    so that observer objects outside the test environment are not accidentally triggered.
-</p>
-<p>
-    Mock object classes also facilitate dependency injection by providing a subclass of the
-    normal object that is non-functional except for overrides you define. For example, the
-    {@link android.test.mock.MockResources} object provides a subclass of
-    {@link android.content.res.Resources} in which all the methods throw Exceptions when called.
-    To use it, you override only those methods that must provide information.
-</p>
-<p>
-    These are the mock object classes available in Android:
-</p>
-<h4 id="SimpleMocks">Simple mock object classes</h4>
-<p>
-    {@link android.test.mock.MockApplication}, {@link android.test.mock.MockContext},
-    {@link android.test.mock.MockContentProvider}, {@link android.test.mock.MockCursor},
-    {@link android.test.mock.MockDialogInterface}, {@link android.test.mock.MockPackageManager}, and
-    {@link android.test.mock.MockResources} provide a simple and useful mock strategy. They are
-    stubbed-out versions of the corresponding system object class, and all of their methods throw an
-    {@link java.lang.UnsupportedOperationException} exception if called. To use them, you override
-    the methods you need in order to provide mock dependencies.
-</p>
-<p class="Note"><strong>Note:</strong>
-    {@link android.test.mock.MockContentProvider}
-    and {@link android.test.mock.MockCursor} are new as of API level 8.
-</p>
-<h4 id="ResolverMocks">Resolver mock objects</h4>
-<p>
-    {@link android.test.mock.MockContentResolver} provides isolated testing of content providers by
-    masking out the normal system resolver framework. Instead of looking in the system to find a
-    content provider given an authority string, MockContentResolver uses its own internal table. You
-    must explicitly add providers to this table using
-    {@link android.test.mock.MockContentResolver#addProvider(String,ContentProvider)}.
-</p>
-<p>
-    With this feature, you can associate a mock content provider with an authority. You can create
-    an instance of a real provider but use test data in it. You can even set the provider for an
-    authority to <code>null</code>. In effect, a MockContentResolver object isolates your test
-    from providers that contain real data. You can control the
-    function of the provider, and you can prevent your test from affecting real data.
-</p>
-<h3 id="ContextMocks">Contexts for testing</h3>
-<p>
-    Android provides two Context classes that are useful for testing:
-</p>
-<ul>
-    <li>
-        {@link android.test.IsolatedContext} provides an isolated {@link android.content.Context},
-        File, directory, and database operations that use this Context take place in a test area.
-        Though its functionality is limited, this Context has enough stub code to respond to
-        system calls.
-        <p>
-            This class allows you to test an application's data operations without affecting real
-            data that may be present on the device.
-        </p>
-    </li>
-    <li>
-        {@link android.test.RenamingDelegatingContext} provides a Context in which
-        most functions are handled by an existing {@link android.content.Context}, but
-        file and database operations are handled by a {@link android.test.IsolatedContext}.
-        The isolated part uses a test directory and creates special file and directory names.
-        You can control the naming yourself, or let the constructor determine it automatically.
-        <p>
-            This object provides a quick way to set up an isolated area for data operations,
-            while keeping normal functionality for all other Context operations.
-        </p>
-    </li>
-</ul>
-<h2 id="InstrumentationTestRunner">Running Tests</h2>
-<p>
-    Test cases are run by a test runner class that loads the test case class, set ups,
-    runs, and tears down each test. An Android test runner must also be instrumented, so that
-    the system utility for starting applications can control how the test package
-    loads test cases and the application under test. You tell the Android platform
-    which instrumented test runner to use by setting a value in the test package's manifest file.
-</p>
-<p>
-    {@link android.test.InstrumentationTestRunner} is the primary Android test runner class. It
-    extends the JUnit test runner framework and is also instrumented. It can run any of the test
-    case classes provided by Android and supports all possible types of testing.
-</p>
-<p>
-    You specify <code>InstrumentationTestRunner</code> or a subclass in your test package's
-    manifest file, in the <a href="{@docRoot}guide/topics/manifest/instrumentation-element.html">
-    instrumentation</a> element. Also, <code>InstrumentationTestRunner</code> code resides
-    in the shared library <code>android.test.runner</code>,  which is not normally linked to
-    Android code. To include it, you must specify it in a
-    <a href="{@docRoot}guide/topics/manifest/uses-library-element.html">uses-library</a> element.
-    You do not have to set up these elements yourself. Both Eclipse with ADT and the
-    <code>android</code> command-line tool construct them automatically and add them to your
-    test package's manifest file.
-</p>
-<p class="Note">
-    <strong>Note:</strong> If you use a test runner other than
-    <code>InstrumentationTestRunner</code>, you must change the &lt;instrumentation&gt;
-    element to point to the class you want to use.
-</p>
-<p>
-    To run {@link android.test.InstrumentationTestRunner}, you use internal system classes called by
-    Android tools. When you run a test in Eclipse with ADT, the classes are called automatically.
-    When you run a test from the command line, you run these classes with
-    <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge (adb)</a>.
-</p>
-<p>
-    The system classes load and start the test package, kill any processes that
-    are running an instance of the application under test, and then load a new instance of the
-    application under test. They then pass control to
-    {@link android.test.InstrumentationTestRunner}, which runs
-    each test case class in the test package. You can also control which test cases and
-    methods are run using settings in Eclipse with ADT, or using flags with the command-line tools.
-</p>
-<p>
-    Neither the system classes nor {@link android.test.InstrumentationTestRunner} run
-    the application under test. Instead, the test case does this directly. It either calls methods
-    in the application under test, or it calls its own methods that trigger lifecycle events in
-    the application under test. The application is under the complete control of the test case,
-    which allows it to set up the test environment (the test fixture) before running a test. This
-    is demonstrated in the previous <a href="#ActivitySnippet">code snippet</a> that tests an
-    Activity that displays a Spinner widget.
-</p>
-<p>
-    To learn more about running tests, please read the topics
-    <a href="{@docRoot}guide/developing/testing/testing_eclipse.html"">
-    Testing in Eclipse, with ADT</a> or
-    <a href="{@docRoot}guide/developing/testing/testing_otheride.html">
-    Testing in Other IDes</a>.
-</p>
-<h2 id="TestResults">Seeing Test Results</h2>
-<p>
-    The Android testing framework returns test results back to the tool that started the test.
-    If you run a test in Eclipse with ADT, the results are displayed in a new JUnit view pane. If
-    you run a test from the command line, the results are displayed in <code>STDOUT</code>. In
-    both cases, you see a test summary that displays the name of each test case and method that
-    was run. You also see all the assertion failures that occurred. These include pointers to the
-    line in the test code where the failure occurred. Assertion failures also list the expected
-    value and actual value.
-</p>
-<p>
-    The test results have a format that is specific to the IDE that you are using. The test
-    results format for Eclipse with ADT is described in
-    <a href="{@docRoot}guide/developing/testing/testing_eclipse.html#RunTestEclipse">
-    Testing in Eclipse, with ADT</a>. The test results format for tests run from the
-    command line is described in
-    <a href="{@docRoot}guide/developing/testing/testing_otheride.html#RunTestsCommand">
-    Testing in Other IDEs</a>.
-</p>
-<h2 id="Monkeys">monkey and monkeyrunner</h2>
-<p>
-    The SDK provides two tools for functional-level application testing:
-</p>
-    <ul>
-        <li>
-The <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a>,
-            usually called "monkey", is a command-line tool that sends pseudo-random streams of
-            keystrokes, touches, and gestures to a device. You run it with the
-            <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a> (adb) tool.
-            You use it to stress-test your application and report back errors that are encountered.
-            You can repeat a stream of events by running the tool each time with the same random
-            number seed.
-        </li>
-        <li>
-    The <a href="{@docRoot}guide/developing/tools/monkeyrunner_concepts.html">monkeyrunner</a> tool
-            is an API and execution environment for test programs written in Python. The API
-            includes functions for connecting to a device, installing and uninstalling packages,
-            taking screenshots, comparing two images, and running a test package against an
-            application. Using the API, you can write a wide range of large, powerful, and complex
-            tests. You run programs that use the API with the <code>monkeyrunner</code> command-line
-            tool.
-        </li>
-    </ul>
-<h2 id="PackageNames">Working With Package names</h2>
-<p>
-    In the test environment, you work with both Android application package names and
-    Java package identifiers. Both use the same naming format, but they represent substantially
-    different entities. You need to know the difference to set up your tests correctly.
-</p>
-<p>
-    An Android package name is a unique system name for a <code>.apk</code> file, set by the
-    &quot;android:package&quot; attribute of the &lt;manifest&gt; element in the package's
-    manifest. The Android package name of your test package must be different from the
-    Android package name of the application under test. By default, Android tools create the
-    test package name by appending ".test" to the package name of the application under test.
-</p>
-<p>
-    The test package also uses an Android package name to target the application package it
-    tests. This is set in the &quot;android:targetPackage&quot; attribute of the
-    &lt;instrumentation&gt; element in the test package's manifest.
-</p>
-<p>
-    A Java package identifier applies to a source file. This package name reflects the directory
-    path of the source file. It also affects the visibility of classes and members to each other.
-</p>
-<p>
-    Android tools that create test projects set up an Android test package name for you.
-    From your input, the tools set up the test package name and the target package name for the
-    application under test. For these tools to work, the application project must already exist.
-</p>
-<p>
-    By default, these tools set the Java package identifier for the test class to be the same
-    as the Android package identifier. You may want to change this if you want to expose
-    members in the application under test by giving them package visibility. If you do this,
-    change only the Java package identifier, not the Android package names, and change only the
-    test case source files. Do not change the Java package name of the generated
-    <code>R.java</code> class in your test package, because it will then conflict with the
-    <code>R.java</code> class in the application under test. Do not change the Android package name
-    of your test package to be the same as the application it tests, because then their names
-    will no longer be unique in the system.
-</p>
-<h2 id="WhatToTest">What to Test</h2>
-<p>
-    The topic <a href="{@docRoot}guide/topics/testing/what_to_test.html">What To Test</a>
-    describes the key functionality you should test in an Android application, and the key
-    situations that might affect that functionality.
-</p>
-<p>
-    Most unit testing is specific to the Android component you are testing.
-    The topics <a href="{@docRoot}guide/topics/testing/activity_testing.html">Activity Testing</a>,
-    <a href="{@docRoot}guide/topics/testing/contentprovider_testing.html">
-    Content Provider Testing</a>, and <a href="{@docRoot}guide/topics/testing/service_testing.html">
-    Service Testing</a> each have a section entitled "What To Test" that lists possible testing
-    areas.
-</p>
-<p>
-    When possible, you should run these tests on an actual device. If this is not possible, you can
-    use the <a href="{@docRoot}guide/developing/devices/emulator.html">Android Emulator</a> with
-    Android Virtual Devices configured for the hardware, screens, and versions you want to test.
-</p>
-<h2 id="NextSteps">Next Steps</h2>
-<p>
-    To learn how to set up and run tests in Eclipse, please refer to <a
-    href="{@docRoot}guide/developing/testing/testing_eclipse.html">Testing in
-    Eclipse, with ADT</a>. If you're not working in Eclipse, refer to <a
-    href="{@docRoot}guide/developing/testing/testing_otheride.html">Testing in Other
-    IDEs</a>.
-</p>
-<p>
-    If you want a step-by-step introduction to Android testing, try one of the
-    testing tutorials or sample test packages:
-</p>
-<ul>
-    <li>
-        The <a
-        href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">Hello,
-        Testing</a> tutorial introduces basic testing concepts and procedures in the
-        context of the Hello, World application.
-    </li>
-    <li>
-        The <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity
-        Testing</a> tutorial is an excellent follow-up to the Hello, Testing tutorial.
-        It guides you through a more complex testing scenario that you develop against a
-        more realistic application.
-    </li>
-    <!-- sample is not available
-    <li>
-        The sample test package <a href="{@docRoot}resources/samples/AlarmServiceTest/index.html">
-        Alarm Service Test</a> is an example of testing a {@link android.app.Service}. It contains
-        a set of unit tests for the Alarm Service sample application's {@link android.app.Service}.
-    </li>
-    -->
-</ul>
-
diff --git a/docs/html/guide/topics/testing/what_to_test.jd b/docs/html/guide/topics/testing/what_to_test.jd
deleted file mode 100644
index 99061df..0000000
--- a/docs/html/guide/topics/testing/what_to_test.jd
+++ /dev/null
@@ -1,86 +0,0 @@
-page.title=What To Test
-parent.title=Testing
-parent.link=index.html
-@jd:body
-<p>
-    As you develop Android applications, knowing what to test is as important as knowing how to
-    test. This document lists some most common Android-related situations that you should consider
-    when you test, even at the unit test level. This is not an exhaustive list, and you consult the
-    documentation for the features that you use for more ideas. The
-    <a href="http://groups.google.com/group/android-developers">android-developers</a> Google Groups
-    site is another resource for information about testing.
-</p>
-<h2 id="Tests">Ideas for Testing</h2>
-<p>
-    The following sections are organized by behaviors or situations that you should test. Each
-    section contains a scenario that further illustrates the situation and the test or tests you
-    should do.
-</p>
-<h4>Change in orientation</h4>
-<p>
-    For devices that support multiple orientations, Android detects a change in orientation when
-    the user turns the device so that the display is "landscape" (long edge is horizontal) instead
-    of "portrait" (long edge is vertical).
-</p>
-<p>
-    When Android detects a change in orientation, its default behavior is to destroy and then
-    re-start the foreground Activity. You should consider testing the following:
-</p>
-<ul>
-    <li>
-        Is the screen re-drawn correctly? Any custom UI code you have should handle changes in the
-        orientation.
-    </li>
-    <li>
-        Does the application maintain its state? The Activity should not lose anything that the
-        user has already entered into the UI. The application should not "forget" its place in the
-        current transaction.
-    </li>
-</ul>
-<h4>Change in configuration</h4>
-<p>
-    A situation that is more general than a change in orientation is a change in the device's
-    configuration, such as a change in the availability of a keyboard or a change in system
-    language.
-</p>
-<p>
-    A change in configuration also triggers the default behavior of destroying and then restarting
-    the foreground Activity. Besides testing that the application maintains the UI and its
-    transaction state, you should also test that the application updates itself to respond
-    correctly to the new configuration.
-</p>
-<h4>Battery life</h4>
-<p>
-    Mobile devices primarily run on battery power. A device has finite "battery budget", and when it
-    is gone, the device is useless until it is recharged. You need to write your application to
-    minimize battery usage, you need to test its battery performance, and you need to test the
-    methods that manage battery usage.
-</p>
-<p>
-    Techniques for minimizing battery usage were presented at the 2010 Google I/O conference in the
-    presentation
-    <a href="http://code.google.com/events/io/2009/sessions/CodingLifeBatteryLife.html">
-    Coding for Life -- Battery Life, That Is</a>. This presentation describes the impact on battery
-    life of various operations, and the ways you can design your application to minimize these
-    impacts. When you code your application to reduce battery usage, you also write the
-    appropriate unit tests.
-</p>
-<h4>Dependence on external resources</h4>
-<p>
-    If your application depends on network access, SMS, Bluetooth, or GPS, then you should
-    test what happens when the resource or resources are not available.
-</p>
-<p>
-    For example, if your application uses the network,it can notify the user if access is
-    unavailable, or disable network-related features, or do both. For GPS, it can switch to
-    IP-based location awareness. It can also wait for WiFi access before doing large data transfers,
-    since WiFi transfers maximize battery usage compared to transfers over 3G or EDGE.
-</p>
-<p>
-    You can use the emulator to test network access and bandwidth. To learn more, please see
-    <a href="{@docRoot}guide/developing/tools/emulator.html#netspeed">Network Speed Emulation</a>.
-    To test GPS, you can use the emulator console and {@link android.location.LocationManager}. To
-    learn more about the emulator console, please see
-    <a href="{@docRoot}guide/developing/tools/emulator.html#console">
-    Using the Emulator Console</a>.
-</p>
diff --git a/docs/html/guide/topics/clipboard/copy-paste.jd b/docs/html/guide/topics/text/copy-paste.jd
similarity index 100%
rename from docs/html/guide/topics/clipboard/copy-paste.jd
rename to docs/html/guide/topics/text/copy-paste.jd
diff --git a/docs/html/guide/topics/text/creating-input-method.jd b/docs/html/guide/topics/text/creating-input-method.jd
new file mode 100644
index 0000000..e49610f
--- /dev/null
+++ b/docs/html/guide/topics/text/creating-input-method.jd
@@ -0,0 +1,528 @@
+page.title=Creating an Input Method
+parent.title=Articles
+parent.link=../browser.html?tag=article
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>See also</h2>
+<ol>
+    <li>
+        <a href="http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html">Onscreen Input Methods</a>
+    </li>
+    <li>
+        <a href="{@docRoot}resources/samples/SoftKeyboard/index.html">Soft Keyboard sample</a>
+    </li>
+</ol>
+</div>
+</div>
+<p>
+    An input method editor (IME) is a user control that enables users to enter text. Android 
+    provides an extensible input method framework that allows applications to provide users 
+    alternative input methods, such as on-screen keyboards or even speech input. Once installed, 
+    users can select which IME they want to use from the system settings and use it across the 
+    entire system; only one IME may be enabled at a time.
+</p>
+<p>
+    To add an IME to the Android system, you create an Android application
+    containing a class that extends {@link android.inputmethodservice.InputMethodService}. In 
+    addition, you usually create a "settings" activity that passes options to the IME
+    service. You can also define a settings UI that's displayed as part of the system settings.
+</p>
+<p>This article covers the following:</p>
+<ul>
+    <li>The IME lifecycle.</li>
+    <li>Declaring IME components in the application manifest.</li>
+    <li>The IME API.</li>
+    <li>Designing an IME UI.</li>
+    <li>Sending text from an IME to an application.</li>
+    <li>Working with IME subtypes.</li>
+</ul>
+<p>
+    If you haven't worked with IMEs before, you should read the introductory article 
+    <a href="http://android-developers.blogspot.com/2009/04/updating-applications-for-on-screen.html">Onscreen Input Methods</a> first.
+    Also, the Soft Keyboard sample app included in the SDK contains sample code that you can modify
+    to start building your own IME.
+</p>
+<h2 id="InputMethodLifecycle">The IME Lifecycle</h2>
+<p>
+    The following diagram describes the life cycle of an IME:
+</p>
+<img src="{@docRoot}resources/articles/images/inputmethod_lifecycle_image.png" alt="" height="845"
+    id="figure1" />
+<p class="img-caption">
+    <strong>Figure 1.</strong> The life cycle of an IME.
+</p>
+<p>
+    The following sections describe how to implement the UI and code associated with an IME that
+    follows this lifecycle.
+</p>
+<h2 id="DefiningIME">Declaring IME Components in the Manifest</h2>
+<p>
+    In the Android system, an IME is an Android application that contains a special IME service.
+    The application's manifest file must declare the service, request the necessary permissions, 
+    provide an intent filter that matches the action <code>action.view.InputMethod</code>, and 
+    provide metadata that defines characteristics of the IME. In addition, to provide a settings
+    interface that allows the user to modify the behavior of the IME, you can define a "settings"
+    activity that can be launched from System Settings.
+</p>
+<p>
+    The following snippet declares IME service. It requests the permission {@link
+    android.Manifest.permission#BIND_INPUT_METHOD} to allow the service to connect the IME to 
+    the system, sets up an intent filter that matches the action 
+    <code>android.view.InputMethod</code>, and defines metadata for the IME:
+</p>
+<pre>
+&lt;!-- Declares the input method service --&gt;
+    &lt;service android:name="FastInputIME"
+        android:label="&#64;string/fast_input_label"
+        android:permission="android.permission.BIND_INPUT_METHOD"&gt;
+        &lt;intent-filter&gt;
+            &lt;action android:name="android.view.InputMethod" /&gt;
+        &lt;/intent-filter&gt;
+        &lt;meta-data android:name="android.view.im" android:resource="&#64;xml/method" /&gt;
+    &lt;/service&gt;
+</pre>
+<p>
+    This next snippet declares the settings activity for the IME. It has an intent filter for
+    {@link android.content.Intent#ACTION_MAIN} that indicates this activity is the main entry point
+    for the IME application:</p>
+<pre>
+    &lt;!-- Optional: an activity for controlling the IME settings --&gt;
+    &lt;activity android:name="FastInputIMESettings" 
+        android:label="&#64;string/fast_input_settings"&gt;
+        &lt;intent-filter&gt;
+            &lt;action android:name="android.intent.action.MAIN"/&gt;
+        &lt;/intent-filter&gt;
+    &lt;/activity&gt;
+</pre>
+<p>
+    You can also provide access to the IME's settings directly from its UI.
+</p>
+<h2 id="IMEAPI">The Input Method API</h2>
+<p>
+    Classes specific to IMEs are found in the {@link android.inputmethodservice} and {@link
+    android.view.inputmethod} packages. The {@link android.view.KeyEvent} class is important for
+    handling keyboard characters.
+</p>
+<p>
+    The central part of an IME is a service component, a class that extends 
+    {@link android.inputmethodservice.InputMethodService}. In addition to implementing the 
+    normal service lifecycle, this class has callbacks for providing your IME's UI, handling user 
+    input, and delivering text to the field that currently has focus. By default, the
+    {@link android.inputmethodservice.InputMethodService} class provides most of the implementation 
+    for managing the state and visibility of the IME and communicating with the current 
+    input field.
+</p>
+<p>
+    The following classes are also important:
+</p>
+<dl>
+    <dt>{@link android.view.inputmethod.BaseInputConnection}</dt>
+    <dd>
+        Defines the communication channel from an {@link android.view.inputmethod.InputMethod}
+        back to the application that is receiving its input. You use it to read text around the
+        cursor, commit text to the text box, and send raw key events to the application.
+        Applications should extend this class rather than implementing the base interface 
+        {@link android.view.inputmethod.InputConnection}.
+    </dd>
+    <dt>{@link android.inputmethodservice.KeyboardView}</dt>
+    <dd>
+        An extension of {@link android.view.View} that renders a keyboard and responds to user
+        input events. The keyboard layout is specified by an instance of 
+        {@link android.inputmethodservice.Keyboard}, which you can define in an XML file.
+    </dd>
+</dl>
+<h2 id="IMEUI">Designing the Input Method UI</h2>
+<p>
+    There are two main visual elements for an IME: the <strong>input</strong> view and the
+    <strong>candidates</strong> view. You only have to implement the elements that are relevant to
+    the input method you're designing.
+</p>
+<h3 id="InputView">Input view</h3>
+<p>
+    The input view is the UI where the user inputs text, in the form of keyclicks, handwriting or
+    gestures. When the iIME is displayed for the first time, the system calls the 
+    {@link android.inputmethodservice.InputMethodService#onCreateInputView()} callback. In your
+    implementation of this method, you create the layout you want to display in the IME
+    window and return the layout to the system. This snippet is an example of implementing the
+    {@link android.inputmethodservice.InputMethodService#onCreateInputView()} method:
+<pre>
+    &#64;Override 
+    public View onCreateInputView() { 
+        MyKeyboardView inputView = 
+            (MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);
+    
+        inputView.setOnKeyboardActionListener(this); inputView.setKeyboard(mLatinKeyboard); 
+        
+        return mInputView; 
+    } 
+</pre>
+<p>
+    In this example, {@code MyKeyboardView} is an instance of a custom implementation of 
+    {@link android.inputmethodservice.KeyboardView} that renders a 
+    {@link android.inputmethodservice.Keyboard}. If you’re building a traditional QWERTY keyboard, 
+    see the <a href=”{@docRoot}resources/samples/SoftKeyboard/index.html”>Soft Keyboard</a> sample 
+    app for an example of how to extend the {@link android.inputmethodservice.KeyboardView} class.
+</p>
+<h3 id="CandidateView">Candidates view</h3>
+<p>
+    The candidates view is the UI where the IME displays potential word corrections or
+    suggestions for the user to select. In the IME lifecycle, the system calls 
+    {@link android.inputmethodservice.InputMethodService#onCreateCandidatesView()} when it's ready 
+    to display the candidate view. In your implementation of this method, return a layout that shows
+    word suggestions, or return null if you don’t want to show anything (a null response is the
+    default behavior, so you don’t have to implement this if you don’t provide suggestions).</p>
+<p>
+    For an example implementation that provides user suggestions, see the 
+    <a href=”{@docRoot}resources/samples/SoftKeyboard/index.html”>Soft Keyboard</a> sample app.
+</p>
+<h3 id="DesignConsiderations">UI design considerations</h3>
+<p>
+    This section describes some specific UI design considerations for IMEs.
+</p>
+<h4>Handling multiple screen sizes</h4>
+<p>
+    The UI for your IME must be able to scale for different screen sizes, and it also
+    must handle both landscape and portrait orientations. In non-fullscreen IME mode, leave
+    sufficient space for the application to show the text field and any associated context, so that
+    no more than half the screen is occupied by the IME. In fullscreen IME mode this is not an
+    issue.
+</p>
+<h4>Handling different input types</h4>
+<p>
+    Android text fields allow you to set a specific input type, such as free form text, numbers,
+    URLs, email addresses, and search strings. When you implement a new IME, you need to
+    detect the input type of each field and provide the appropriate interface for it. However, you
+    don't have to set up your IME to check that the user entered text that's valid for the
+    input type; that's the responsibility of the application that owns the text field.
+</p>
+<p>
+    For example, here are screenshots of the interfaces that the Latin IME provided with the
+    Android platform provides for text and phone number inputs:
+</p>
+<img src="{@docRoot}resources/articles/images/inputmethod_text_type_screenshot.png" alt=""
+    height="142" id="figure2" />
+<img src="{@docRoot}resources/articles/images/inputmethod_numeric_type_screenshot.png" alt=""
+    height="120" id="figure2a" />
+<p class="img-caption">
+    <strong>Figure 2.</strong> Latin IME input types.
+</p>
+<p>
+    When an input field receives focus and your IME starts, the system calls 
+    {@link android.inputmethodservice.InputMethodService#onStartInputView(EditorInfo, boolean)
+    onStartInputView()}, passing in an {@link android.view.inputmethod.EditorInfo} object that 
+    contains details about the input type and other attributes of the text field. In this object, 
+    the {@link android.view.inputmethod.EditorInfo#inputType} field contains the text field's input
+    type.
+</p>
+<p>
+    The {@link android.view.inputmethod.EditorInfo#inputType} field is an <code>int</code>
+    that contains bit patterns for various input type settings. To test it for the text field's
+    input type, mask it with the constant {@link android.text.InputType#TYPE_MASK_CLASS}, like
+    this:
+</p>
+<pre>
+inputType &amp; InputType.TYPE_MASK_CLASS 
+</pre>
+<p>
+The input type bit pattern can have one of several values, including:
+</p>
+<dl>
+    <dt>{@link android.text.InputType#TYPE_CLASS_NUMBER}</dt>
+    <dd>
+        A text field for entering numbers. As illustrated in the previous screen shot, the
+        Latin IME displays a number pad for fields of this type.
+    </dd>
+    <dt>{@link android.text.InputType#TYPE_CLASS_DATETIME}</dt>
+    <dd>
+        A text field for entering a date and time.
+    </dd>
+    <dt>{@link android.text.InputType#TYPE_CLASS_PHONE}</dt>
+    <dd>
+        A text field for entering telephone numbers.
+    </dd>
+    <dt>{@link android.text.InputType#TYPE_CLASS_TEXT}</dt>
+    <dd>
+        A text field for entering all supported characters.
+    </dd>
+</dl>
+<p>
+    These constants are described in more detail in the reference documentation for 
+    {@link android.text.InputType}.
+</p>
+<p>
+    The {@link android.view.inputmethod.EditorInfo#inputType} field can contain other bits that
+    indicate a variant of the text field type, such as:
+</p>
+<dl>
+    <dt>{@link android.text.InputType#TYPE_TEXT_VARIATION_PASSWORD}</dt>
+    <dd>
+        A variant of {@link android.text.InputType#TYPE_CLASS_TEXT} for entering passwords. The
+        input method will display dingbats instead of the actual text.
+    </dd>
+    <dt>{@link android.text.InputType#TYPE_TEXT_VARIATION_URI}</dt>
+    <dd>
+        A variant of {@link android.text.InputType#TYPE_CLASS_TEXT} for entering web URLs and
+        other Uniform Resource Identifiers (URIs).
+    </dd>
+    <dt>{@link android.text.InputType#TYPE_TEXT_FLAG_AUTO_COMPLETE}</dt>
+    <dd>
+        A variant of {@link android.text.InputType#TYPE_CLASS_TEXT} for entering text that the
+        application "auto-completes" from a dictionary, search, or other facility.
+    </dd>
+</dl>
+<p>
+    Remember to mask {@link android.view.inputmethod.EditorInfo#inputType} with the appropriate
+    constant when you test for these variants. The available mask constants are listed in the
+    reference documentation for {@link android.text.InputType}.
+</p>
+<p class="caution">
+    <strong>Caution:</strong> In your own IME, make sure you handle text correctly when you send it
+    to a password field. Hide the password in your UI both in the input view and in the candidates
+    view. Also remember that you shouldn't store passwords on a device. To learn more, see the <a
+        href="{@docRoot}guide/practices/security.html">Designing for Security</a> guide.
+</p>
+<h2 id="SendText">Sending Text to the Application</h2>
+<p>
+    As the user inputs text with your IME, you can send text to the application by
+    sending individual key events or by editing the text around the cursor in the application's text
+    field. In either case, you use an instance of {@link android.view.inputmethod.InputConnection} 
+    to deliver the text. To get this instance, call 
+    {@link android.inputmethodservice.InputMethodService#getCurrentInputConnection
+    InputMethodService.getCurrentInputConnection()}.
+</p>
+<h3 id="EditingCursor">Editing the text around the cursor</h3>
+<p>
+    When you're handling the editing of existing text in a text field, some of the more useful
+    methods in {@link android.view.inputmethod.BaseInputConnection} are:
+</p>
+<dl>
+    <dt>
+        {@link android.view.inputmethod.BaseInputConnection#getTextBeforeCursor(int, int)
+        getTextBeforeCursor()}</dt>
+    <dd>
+        Returns a {@link java.lang.CharSequence} containing the number of requested characters
+        before the current cursor position.
+    </dd>
+    <dt>
+        {@link android.view.inputmethod.BaseInputConnection#getTextAfterCursor(int, int)
+        getTextAfterCursor()}
+    </dt>
+    <dd>
+        Returns a {@link java.lang.CharSequence} containing the number of requested characters
+        following the current cursor position.
+    </dd>
+    <dt>
+        {@link android.view.inputmethod.BaseInputConnection#deleteSurroundingText(int, int)
+        deleteSurroundingText()}
+    </dt>
+    <dd>
+        Deletes the specified number of characters before and following the current cursor
+        position.
+    </dd>
+    <dt>
+        {@link android.view.inputmethod.BaseInputConnection#commitText(CharSequence, int)
+        commitText()}
+    </dt>
+    <dd>
+        Commit a {@link java.lang.CharSequence} to the text field and set a new cursor
+        position.
+    </dd>
+</dl>
+<p>
+    For example, the following snippet shows how to replace the text "Fell" to the left of the
+    with the text "Hello!":
+</p>
+<pre>
+    InputConnection ic = getCurrentInputConnection();
+    
+    ic.deleteSurroundingText(4, 0);
+    
+    ic.commitText("Hello", 1);
+    
+    ic.commitText("!", 1);
+</pre>
+<h3 id="ComposeThenCommit">Composing text before committing</h3>
+<p>
+    If your IME does text prediction or requires multiple steps to compose a glyph or
+    word, you can show the progress in the text field until the user commits the word, and then you
+    can replace the partial composition with the completed text. You may give special treatment to 
+    the text by adding a "span" to it when you pass it to InputConnection#setComposingText().
+</p>
+<p>
+    The following snippet shows how to show progress in a text field:
+</p>
+<pre>
+    InputConnection ic = getCurrentInputConnection();
+
+    ic.setComposingText("Composi", 1);
+...
+
+    ic.setComposingText("Composin", 1);
+
+...
+
+    ic.commitText("Composing ", 1);
+</pre>
+<p>
+    The following screenshots show how this appears to the user:
+</p>
+<img src="{@docRoot}resources/articles/images/inputmethod_composing_text_1.png" alt="" height="54"
+    id="figure3a" />
+<img src="{@docRoot}resources/articles/images/inputmethod_composing_text_2.png" alt="" height="53"
+    id="figure3b" />
+<img src="{@docRoot}resources/articles/images/inputmethod_composing_text_3.png" alt="" height="31"
+    id="figure3c" />
+<p class="img-caption">
+    <strong>Figure 3.</strong> Composing text before committing.
+</p>
+<h3 id="HardwareKeyEvents">Intercepting hardware key events</h3>
+<p>
+    Even though the input method window doesn't have explicit focus, it receives hardware key
+    events first and can choose to consume them or forward them along to the application. For
+    example, you may want to consume the directional keys to navigate within your UI for candidate
+    selection during composition. You may also want to trap the back key to dismiss any popups
+    originating from the input method window.</p>
+<p>
+    To intercept hardware keys, override 
+    {@link android.inputmethodservice.InputMethodService#onKeyDown(int, KeyEvent) onKeyDown()}
+    and {@link android.inputmethodservice.InputMethodService#onKeyUp(int, KeyEvent) onKeyUp()}. 
+    See the <a href=”{@docRoot}resources/samples/SoftKeyboard/index.html”>Soft Keyboard</a> sample 
+    app for an example.
+</p>
+<p>
+    Remember to call the <code>super()</code> method for keys you don't want to handle yourself.
+</p>
+<h2 id="IMESubTypes">Creating an IME Subtype</h2>
+<p>
+    Subtypes allow the IME to expose multiple input modes and languages supported by an IME. A 
+    subtype can represent:
+</p>
+<ul>
+    <li>A locale such as en_US or fr_FR</li>
+    <li>An input mode such as voice, keyboard, or handwriting</li>
+    <li>
+        Other input styles, forms, or properties specific to the IME, such as 10-key or qwerty
+        keyboard layouts.
+    </li>
+</ul>
+<p>
+    Basically, the mode can be any text such as "keyboard", "voice", and so forth.
+</p>
+<p>A subtype can also expose a combination of these.</p>
+<p>
+    Subtype information is used for an IME switcher dialog that's available from the notification
+    bar and also for IME settings. The information also allows the framework to bring up a
+    specific subtype of an IME directly. When you build an IME, use the subtype facility, because 
+    it helps the user identify and switch between different IME languages and modes.
+</p>
+<p>
+    You define subtypes in one of the input method's XML resource files, using the
+    <code>&lt;subtype&gt;</code> element. The following snippet defines an IME with two 
+    subtypes: a keyboard subtype for the US English locale, and another keyboard subtype for the 
+    French language locale for France:
+</p>
+<pre>
+&lt;input-method xmlns:android="http://schemas.android.com/apk/res/android"
+        android:settingsActivity="com.example.softkeyboard.Settings"
+        android:icon="&#64;drawable/ime_icon"
+    &lt;subtype android:name="&#64;string/display_name_english_keyboard_ime"
+            android:icon="&#64;drawable/subtype_icon_english_keyboard_ime"
+            android:imeSubtypeLanguage="en_US"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="somePrivateOption=true"
+    /&gt;
+    &lt;subtype android:name="&#64;string/display_name_french_keyboard_ime"
+            android:icon="&#64;drawable/subtype_icon_french_keyboard_ime"
+            android:imeSubtypeLanguage="fr_FR"
+            android:imeSubtypeMode="keyboard"
+            android:imeSubtypeExtraValue="foobar=30,someInternalOption=false"
+    /&gt;
+    &lt;subtype android:name="&#64;string/display_name_german_keyboard_ime"
+            ...
+    /&gt;
+/&gt;
+</pre>
+<p>
+    To ensure that your subtypes are labeled correctly in the UI, use %s to get a subtype label
+    that is the same as the subtype’s locale label. This is demonstrated in the next two snippets.
+    The first snippet shows part of the input method's XML file:
+</p>
+<pre>
+    &lt;subtype
+        android:label="&#64;string/label_subtype_generic"
+        android:imeSubtypeLocale="en_US"
+        android:icon="&#64;drawable/icon_en_us"
+        android:imeSubtypeMode="keyboard" /&gt;
+</pre>
+<p>
+    The next snippet is part of the IME's <code>strings.xml</code> file. The string 
+    resource <code>label_subtype_generic</code>, which is used by the input method UI definition to 
+    set the subtype's label, is defined as:
+</p>
+<pre>
+&lt;string name="label_subtype_generic"&gt;%s&lt;/string&gt;
+</pre>
+<p>
+    This sets the subtype’s display name to “English (United States)” in any English language
+    locale, or to the appropriate localization in other locales.
+</p>
+<h3 id="SubtypeProcessing">Choosing IME subtypes from the notification bar</h3>
+<p>
+    The Android system manages all subtypes exposed by all IMEs. IME subtypes are
+    treated as modes of the IME they belong to. In the notification bar, a user can select an
+    available subtype for the currently-set IME, as shown in the following screenshot:
+</p>
+<img src="{@docRoot}resources/articles/images/inputmethod_subtype_notification.png" alt=""
+    height="85" id="figure4" />
+<p class="img-caption">
+    <strong>Figure 4.</strong> Choosing an IME subtype from the notification bar.
+</p>
+<img src="{@docRoot}resources/articles/images/inputmethod_subtype_preferences.png" alt=""
+    height="165" id="figure5" />
+<p class="img-caption">
+    <strong>Figure 5.</strong> Setting subtype preferences in System Settings.
+</p>
+<h3 id="SubtypeSettings">Choosing IME subtypes from System Settings</h3>
+<p>
+    A user can control how subtypes are used in the “Language &amp; input” settings panel in the
+    System Settings area. In the Soft Keyboard sample, the file 
+    <code>InputMethodSettingsFragment.java</code> contains an implementation that 
+    facilitates a subtype enabler in the IME settings. Please refer to the SoftKeyboard sample in 
+    the Android SDK for more information about how to support Input Method Subtypes in your IME.
+</p>
+<img src="{@docRoot}resources/articles/images/inputmethod_subtype_settings.png" alt=""
+    height="210" id="figure6" />
+<p class="img-caption">
+    <strong>Figure 6.</strong> Choosing a language for the IME.
+</p>
+<h2 id="GeneralDesign">General IME Considerations</h2>
+<p>
+    Here are some other things to consider as you're implementing your IME:
+</p>
+<ul>
+<li>
+    Provide a way for users to set options directly from the IME's UI.
+</li>
+<li>
+    Because multiple IMEs may be installed on the device, provide a way for the user to switch to a 
+    different IME directly from the input method UI.
+</li>
+<li>
+    Bring up the IME's UI quickly. Preload or load on demand any large resources so that users 
+    see the IME as soon as they tap on a text field. Cache resources and views for subsequent 
+    invocations of the input method.
+</li>
+<li>
+    Conversely, you should release large memory allocations soon after the input method window is 
+    hidden, so that applications can have sufficient memory to run. Consider using a delayed message
+    to release resources if the IME is in a hidden state for a few seconds.
+</li>    
+<li>
+    Make sure that users can enter as many characters as possible for the language or locale 
+    associated with the IME. Remember that users may use punctuation in passwords or user 
+    names, so your IME has to provide many different characters to allow users to enter a
+    password and get access to the device.
+</li>
+</ul>
diff --git a/docs/html/guide/topics/text/index.jd b/docs/html/guide/topics/text/index.jd
new file mode 100644
index 0000000..3865f25
--- /dev/null
+++ b/docs/html/guide/topics/text/index.jd
@@ -0,0 +1,40 @@
+page.title=Text and Input
+page.landing=true
+page.landing.intro=Use text services to add conventient features such as copy/paste and spell checking to your app. You can also develop your own text services to offer custom IMEs, dictionaries, and spelling checkers that you can distribute to users as applications.
+page.landing.image=
+
+@jd:body
+
+<div class="landing-docs">
+
+  <div class="col-12">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2011/12/add-voice-typing-to-your-ime.html">
+      <h4>Add Voice Typing To Your IME</h4>
+      <p>A new feature available in Android 4.0 is voice typing: the difference for users is that
+the recognition results appear in the text box while they are still speaking. If you are an IME
+developer, you can easily integrate with voice typing.</p>
+    </a>
+
+    <a href="http://android-developers.blogspot.com/2010/03/speech-input-api-for-android.html">
+      <h4>Speech Input API for Android</h4>
+      <p>We believe speech can fundamentally change the mobile experience. We would like to invite
+every Android application developer to consider integrating speech input capabilities via the
+Android SDK.</p>
+    </a>
+
+    <a href="http://android-developers.blogspot.com/2010/06/making-sense-of-multitouch.html">
+      <h4>Making Sense of Multitouch</h4>
+      <p>The word "multitouch" gets thrown around quite a bit and it’s not always clear what people
+are referring to. For some it’s about hardware capability, for others it refers to specific gesture
+support in software. Whatever you decide to call it, today we’re going to look at how to make your
+apps and views behave nicely with multiple fingers on the screen.</p>
+    </a>
+  </div>
+
+  <div class="col-6">
+
+  </div>
+
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/topics/text/spell-checker-framework.jd b/docs/html/guide/topics/text/spell-checker-framework.jd
new file mode 100644
index 0000000..05b6890
--- /dev/null
+++ b/docs/html/guide/topics/text/spell-checker-framework.jd
@@ -0,0 +1,236 @@
+page.title=Spelling Checker Framework
+parent.title=Articles
+parent.link=../browser.html?tag=article
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In This Document</h2>
+<ol>
+    <li>
+        <a href="#SpellCheckLifeCycle">Spell Check Lifecycle</a> 
+    </li>
+    <li>
+        <a href="#SpellCheckImplementation">Implementing a Spell Checker Service</a>
+    </li>
+    <li>
+        <a href="#SpellCheckClient">Implementing a Spell Checker Client</a>
+    </li>
+</ol>
+  <h2>See also</h2>
+  <ol>
+    <li>
+        <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
+        Spell Checker Service</a> sample app
+    </li>
+    <li>
+        <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
+        Spell Checker Client</a> sample app
+    </li>
+  </ol>
+</div>
+</div>
+
+<p>
+    The Android platform offers a spelling checker framework that lets you implement   
+    and access spell checking in your application. The framework is one of the 
+    Text Service APIs offered by the Android platform.
+</p>
+<p>
+    To use the framework in your app, you create a special type of Android service that 
+    generates a spelling checker <strong>session</strong> object. Based on text you provide,
+    the session object returns spelling suggestions generated by the spelling checker.
+</p>
+<h2 id="SpellCheckLifeCycle">Spell Checker Lifecycle</h2>
+<p>
+    The following diagram shows the lifecycle of the spelling checker service:
+</p>
+<img src="{@docRoot}resources/articles/images/spellcheck_lifecycle.png" alt="" height="596"
+    id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> The spelling checker service lifecycle.
+</p>
+<p>
+    To initiate spell checking, your app starts its implementation of the spelling checker
+    service. Clients in your app, such as activities or individual UI elements, request a
+    spelling checker session from the service, then use the session to get suggestions for text.
+    As a client terminates its operation, it closes its spelling checker session. If necessary, your
+    app can shut down the spelling checker service at any time.
+</p>
+<h2 id="SpellCheckImplementation">Implementing a Spell Checker Service</h2>
+<p>
+    To use the spelling checker framework in your app, add a spelling checker service component including
+    the session object definition. You can also add to your app an optional activity that
+    controls settings. You must also add an XML metadata file that describes
+    the spelling checker service, and add the appropriate elements to your manifest file.
+</p>
+<h3 id="SpellCheckCode">Spell checker classes</h3>
+<p>
+    Define the service and session object with the following classes:
+</p>
+<dl>
+    <dt>
+        A subclass of {@link android.service.textservice.SpellCheckerService}
+    </dt>
+    <dd>
+        The {@link android.service.textservice.SpellCheckerService} implements both the
+        {@link android.app.Service} class and the spelling checker framework interface. Within your
+        subclass, you must implement the following method:
+        <dl>
+            <dt>{@link android.service.textservice.SpellCheckerService#createSession()}</dt>
+            <dd>
+                A factory method that returns a
+                {@link android.service.textservice.SpellCheckerService.Session} object to a
+                client that wants to do spell checking.
+            </dd>
+        </dl>
+        <p>
+            See the
+            <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
+            Spell Checker Service</a> sample app to learn more about implementing this class.
+        </p>
+    </dd>
+    <dt>
+        An implementation of {@link android.service.textservice.SpellCheckerService.Session}
+    </dt>
+    <dd>
+        An object that the spelling checker service provides to clients, to let them pass text to
+        the spelling checker and receive suggestions. Within this class, you must implement the
+        following methods:
+        <dl>
+            <dt>
+                {@link android.service.textservice.SpellCheckerService.Session#onCreate()}
+            </dt>
+            <dd>
+                Called by the system in response to
+                {@link android.service.textservice.SpellCheckerService#createSession()}. In this
+                method, you can initialize the
+                {@link android.service.textservice.SpellCheckerService.Session} object based on
+                the current locale and so forth.
+            </dd>
+            <dt>
+     {@link android.service.textservice.SpellCheckerService.Session#onGetSuggestions(TextInfo, int)
+     onGetSuggestions()}
+            </dt>
+            <dd>
+                Does the actual spell checking. This method returns an object containing
+                suggestions for the text passed to it.
+            </dd>
+        </dl>
+        <p>
+            Optionally, you can implement
+            {@link android.service.textservice.SpellCheckerService.Session#onCancel()}, which
+            handles requests to cancel spell checking, or
+{@link android.service.textservice.SpellCheckerService.Session#onGetSuggestionsMultiple(TextInfo[], int, boolean)
+onGetSuggestionsMultiple()}, which handles batches of suggestion requests, or both.
+        </p>
+        <p>
+            See the
+            <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
+            Spell Checker Client</a> sample app to learn more about implementing this class.
+        </p>
+    </dd>
+</dl>
+<p class="note">
+    <strong>Note:</strong> You must implement all aspects of spell checking as asynchronous and
+    thread-safe. A spelling checker may be called simultaneously by different threads running on
+    different cores. The {@link android.service.textservice.SpellCheckerService} and
+    {@link android.service.textservice.SpellCheckerService.Session} take care of this
+    automatically.
+</p>
+<h3 id="SpellCheckXML">Spell checker manifest and metadata</h3>
+<p>
+    In addition to code, you need to provide the appropriate manifest file and a metadata file for
+    the spelling checker.
+</p>
+<p>
+    The manifest file defines the application, the service, and the activity for controlling
+    settings, as shown in the following snippet:
+</p>
+<pre>
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.samplespellcheckerservice" &gt;
+    &lt;application
+        android:label="&#64;string/app_name" &gt;
+        &lt;service
+            android:label="&#64;string/app_name"
+            android:name=".SampleSpellCheckerService"
+            android:permission="android.permission.BIND_TEXT_SERVICE" &gt;
+            &lt;intent-filter &gt;
+                &lt;action android:name="android.service.textservice.SpellCheckerService" /&gt;
+            &lt;/intent-filter&gt;
+
+            &lt;meta-data
+                android:name="android.view.textservice.scs"
+                android:resource="&#64;xml/spellchecker" /&gt;
+        &lt;/service&gt;
+
+        &lt;activity
+            android:label="&#64;string/sample_settings"
+            android:name="SpellCheckerSettingsActivity" &gt;
+            &lt;intent-filter &gt;
+                &lt;action android:name="android.intent.action.MAIN" /&gt;
+            &lt;/intent-filter&gt;
+        &lt;/activity&gt;
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+<p>
+    Notice that components that want to use the service must request the permission
+    {@link android.Manifest.permission#BIND_TEXT_SERVICE} to ensure that only the system binds to
+    the service. The service's definition also specifies the <code>spellchecker.xml</code> metadata
+    file, which is described in the next section.
+</p>
+<p>
+    The metadata file <code>spellchecker.xml</code> contains the following XML:
+</p>
+<pre>
+&lt;spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
+        android:label="&#64;string/spellchecker_name"
+        android:settingsActivity="com.example.SpellCheckerSettingsActivity"&gt;
+    &lt;subtype
+            android:label="&#64;string/subtype_generic"
+            android:subtypeLocale="en”
+    /&gt;
+    &lt;subtype
+            android:label="&#64;string/subtype_generic"
+            android:subtypeLocale="fr”
+    /&gt;
+&lt;/spell-checker&gt;
+</pre>
+<p>
+    The metadata specifies the activity that the spelling checker uses for controlling settings. It
+    also defines subtypes for the spelling checker; in this case, the subtypes define locales that
+    the spelling checker can handle.
+</p>
+
+
+<!--  Accessing the Spell Checker Service from a Client -->
+<h2 id="SpellCheckClient">Accessing the Spell Checker Service from a Client</h2>
+<p>
+    Applications that use {@link android.widget.TextView} views automatically benefit from spell
+    checking,  because {@link android.widget.TextView} automatically uses a spelling checker. The
+    following screenshots show this:
+</p>
+<img src="{@docRoot}resources/articles/images/textview_spellcheck_screenshot_1.png" alt=""
+    height="45" id="figure2a" />
+<br>
+<img src="{@docRoot}resources/articles/images/textview_spellcheck_screenshot_2.png" alt=""
+    height="121" id="figure2b" />
+<p class="img-caption">
+  <strong>Figure 2.</strong> Spell checking in TextView.
+</p>
+<p>
+    However, you may want to interact directly with a spelling checker service in other cases as well.
+    The following diagram shows the flow of control for interacting with a spelling checker service:
+</p>
+<img src="{@docRoot}resources/articles/images/spellcheck_client_flow.png" alt=""
+    height="394" id="figure3" />
+<p class="img-caption">
+  <strong>Figure 3.</strong> Interacting with a spelling checker service.
+</p>
+<p>
+    The <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
+    Spell Checker Client</a> sample app shows how to interact with a spelling checker service. The
+    LatinIME input method editor in the Android Open Source Project also contains an example of
+    spell checking.
+</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/accessibility/apps.jd b/docs/html/guide/topics/ui/accessibility/apps.jd
index dc91638..d23512b 100644
--- a/docs/html/guide/topics/ui/accessibility/apps.jd
+++ b/docs/html/guide/topics/ui/accessibility/apps.jd
@@ -328,7 +328,7 @@
   <li>If your application targets Android 4.0 (API level 14) and higher, override and implement the
 accessibility methods listed above directly in your custom view class.</li>
   <li>If your custom view is intended to be compatible with Android 1.6 (API Level 4) and above, add
-the Android <a href="{@docRoot}sdk/compatibility-library.html">Support Library</a>, revision 5 or
+the Android <a href="{@docRoot}tools/extras/support-library.html">Support Library</a>, revision 5 or
 higher, to your project. Then, within your custom view class, call the
 {@link android.support.v4.view.ViewCompat#setAccessibilityDelegate
 ViewCompat.setAccessibilityDelegate()} method to implement the accessibility methods
@@ -467,7 +467,7 @@
 <p>The example code below shows how override these three methods by using
 {@link android.support.v4.view.ViewCompat#setAccessibilityDelegate
 ViewCompat.setAccessibilityDelegate()}. Note that this sample code requires that the Android
-<a href="{@docRoot}sdk/compatibility-library.html">Support Library</a> for API Level 4 (revision 5
+<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> for API Level 4 (revision 5
 or higher) is added to your project.</p>
 
 <pre>
@@ -511,7 +511,7 @@
 
 <p>On applications targeting Android 4.0 (API Level 14) and higher, these methods can be implemented
 directly in your custom view class. For another example of this approach, see the Android
-<a href="{@docRoot}sdk/compatibility-library.html">Support Library</a> (revision 5 or higher) sample
+<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> (revision 5 or higher) sample
 {@code AccessibilityDelegateSupportActivity} in 
 ({@code &lt;sdk&gt;/extras/android/support/v4/samples/Support4Demos/}).</p>
 
@@ -567,7 +567,7 @@
 
 <p>As part of your accessibility testing, you can test navigation of your application using focus,
 even if your test devices does not have a directional controller. The <a
-href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a> provides a
+href="{@docRoot}tools/help/emulator.html">Android Emulator</a> provides a
 simulated directional controller that you can easily use to test navigation. You can also use a
 software-based directional controller, such as the one provided by the
 <a href="https://play.google.com/store/apps/details?id=com.googlecode.eyesfree.inputmethod.latin">
diff --git a/docs/html/guide/topics/ui/accessibility/index.jd b/docs/html/guide/topics/ui/accessibility/index.jd
index 414d5f3..6fd71e2 100644
--- a/docs/html/guide/topics/ui/accessibility/index.jd
+++ b/docs/html/guide/topics/ui/accessibility/index.jd
@@ -47,9 +47,9 @@
   <dd>Development practices and API features to ensure your application is accessible to users with
 disabilities.</dd>
 
-  <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/service.html">Building Accessibility
+  <dt><strong><a href="{@docRoot}guide/topics/ui/accessibility/services.html">Building Accessibility
 Services</a></strong>
   </dt>
   <dd>How to use API features to build services that make other applications more accessible for
 users.</dd>
-</dl>
\ No newline at end of file
+</dl>
diff --git a/docs/html/guide/topics/ui/accessibility/services.jd b/docs/html/guide/topics/ui/accessibility/services.jd
index 0dad4ec..0c1d065 100644
--- a/docs/html/guide/topics/ui/accessibility/services.jd
+++ b/docs/html/guide/topics/ui/accessibility/services.jd
@@ -50,7 +50,7 @@
 Support Library was also updated with the release of Android 4.0 to provide support for these
 enhanced accessibility features back to Android 1.6. Developers aiming for widely compatible
 accessibility services are encouraged to use the
-<a href="{@docRoot}sdk/compatibility-library.html">Support Library</a> and develop for the more
+<a href="{@docRoot}tools/extras/support-library.html">Support Library</a> and develop for the more
 advanced accessibility features introduced in Android 4.0.</p>
 
 
@@ -279,7 +279,7 @@
 accessibility services that are compatible with Android 1.6 (API Level 4) and higher.</li>
   <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/accessibility/TaskBackService.html">TaskBackService</a>
  - This service is based on the enhanced accessibility APIs introduced in Android 4.0 (API Level
-14). However, you can use the Android <a href="{@docRoot}sdk/compatibility-library.html">Support
+14). However, you can use the Android <a href="{@docRoot}tools/extras/support-library.html">Support
 Libary</a> to substitute classes introduced in later API levels (e.g.,
 {@link android.view.accessibility.AccessibilityRecord},
 {@link android.view.accessibility.AccessibilityNodeInfo}
diff --git a/docs/html/guide/topics/ui/actionbar.jd b/docs/html/guide/topics/ui/actionbar.jd
index bf7369a..4842000 100644
--- a/docs/html/guide/topics/ui/actionbar.jd
+++ b/docs/html/guide/topics/ui/actionbar.jd
@@ -6,13 +6,6 @@
 <div id="qv-wrapper">
 <div id="qv">
 
-  <h2>Quickview</h2>
-  <ul>
-    <li>A title bar that includes the application icon and activity title</li>
-    <li>Provides access to menu items and navigation modes such as tabs</li>
-    <li>Requires API level 11 or greater</li>
-  </ul>
-
   <h2>In this document</h2>
 <ol>
   <li><a href="#Adding">Adding the Action Bar</a>
@@ -102,7 +95,7 @@
 
   <li>Provide consistent navigation and view refinement across different applications.
     <p>The action bar provides built-in tab navigation for switching between <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">fragments</a>. It also offers a drop-down
+href="{@docRoot}guide/components/fragments.html">fragments</a>. It also offers a drop-down
 list you can use as an alternative navigation mode or to refine the current view (such as to sort
 a list by different criteria).</p>
   </li>
@@ -120,7 +113,7 @@
 </li>
 </ul>
 
-<img src="{@docRoot}images/ui/actionbar.png" alt="" />
+<img src="{@docRoot}images/ui/actionbar.png" alt="" width="440" />
 <p class="img-caption"><strong>Figure 1.</strong> Action bar from the <a
 href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a> app (on a
 landscape handset), showing the logo on the left, navigation tabs, and an action item on the
@@ -510,7 +503,7 @@
 </pre>
 
 <p>For more information about these flags and other back stack behaviors, read the <a
-href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
+href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>
 developer guide.</p>
 
 <p class="note"><strong>Note:</strong> If you're using the icon to navigate to the home
@@ -955,7 +948,7 @@
 <p>To switch between fragments using the tabs, you must perform a fragment
 transaction each time a tab is selected. If you're not familiar with how to change fragments
 using {@link android.app.FragmentTransaction}, first read the <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</p>
 
 <p>To get started, your layout must include a {@link android.view.ViewGroup} in which you place each
 {@link android.app.Fragment} associated with a tab. Be sure the {@link android.view.ViewGroup} has a
@@ -1092,7 +1085,7 @@
 
 
 <p>If your activity stops, you should retain the currently selected tab with the <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#SavingActivityState">saved instance
+href="{@docRoot}guide/components/activities.html#SavingActivityState">saved instance
 state</a> so you can open the appropriate tab when the user returns. When it's time to save the
 state, you can query the currently selected tab with {@link
 android.app.ActionBar#getSelectedNavigationIndex()}. This returns the index position of the selected
@@ -1101,7 +1094,7 @@
 <p class="caution"><strong>Caution:</strong> It's important that you save the state of each fragment
 as necessary, so that when users switch fragments with the tabs and then return to a previous
 fragment, it looks the way it did when they left. For information about saving the state of your
-fragment, see the <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>
+fragment, see the <a href="{@docRoot}guide/components/fragments.html">Fragments</a>
 developer guide.</p>
 
 
diff --git a/docs/html/guide/topics/ui/binding.jd b/docs/html/guide/topics/ui/binding.jd
index 26364ee..e8b49d5 100644
--- a/docs/html/guide/topics/ui/binding.jd
+++ b/docs/html/guide/topics/ui/binding.jd
@@ -1,4 +1,4 @@
-page.title=Binding to Data with AdapterView
+page.title=AdapterView
 parent.title=User Interface
 parent.link=index.html
 @jd:body
@@ -20,32 +20,7 @@
 </div>
 </div>
 
-<p>The {@link android.widget.AdapterView} is a ViewGroup subclass whose child Views are determined by an {@link android.widget.Adapter Adapter} that 
-binds to data of some type. AdapterView is useful whenever you need to display stored data (as opposed to resource strings or drawables) in your layout.</p>
 
-<p>{@link android.widget.Gallery Gallery}, {@link android.widget.ListView ListView}, and  {@link android.widget.Spinner Spinner} are examples of AdapterView subclasses that you can use to bind to a specific type of data and display it in a certain way. </p>
-
-
-<p>AdapterView objects have two main responsibilities: </p>
-<ul>
-    <li>Filling the layout with data
-    </li>
-    <li>Handling user selections
-    </li>
-</ul>
-
-
-<h2 id="FillingTheLayout">Filling the Layout with Data</h2>
-<p>Inserting data into the layout is typically done by binding the AdapterView class to an {@link
-android.widget.Adapter}, which retrieves data from an external source (perhaps a list that
-the code supplies or query results from the device's database). </p>
-<p>The following code sample does the following:</p>
-<ol>
-  <li>Creates a {@link android.widget.Spinner Spinner} with an existing View and binds it to a new ArrayAdapter
-that reads an array of colors from the local resources.</li>
-  <li>Creates another Spinner object from a View and binds it to a new SimpleCursorAdapter that will read 
-people's names from the device contacts (see {@link android.provider.Contacts.People}).</li>
-</ol>
 
 <pre>
 // Get a Spinner and bind it to an ArrayAdapter that 
diff --git a/docs/html/guide/topics/ui/controls.jd b/docs/html/guide/topics/ui/controls.jd
new file mode 100644
index 0000000..83bb0c8
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls.jd
@@ -0,0 +1,92 @@
+page.title=Input Controls
+parent.title=User Interface
+parent.link=index.html
+@jd:body
+
+<div class="figure" style="margin:0">
+  <img src="{@docRoot}images/ui/ui-controls.png" alt="" style="margin:0" />
+</div>
+
+<p>Input controls are the interactive components in your app's user interface. Android provides a
+wide variety of controls you can use in your UI, such as buttons, text fields, seek bars,
+checkboxes, zoom buttons, toggle buttons, and many more.</p>
+
+<p>Adding an input control to your UI is as simple as adding an XML element to your <a
+href="{@docRoot}guide/topics/ui/declaring-layout.html">XML layout</a>. For example, here's a
+layout with a text field and button:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:orientation="horizontal">
+    &lt;EditText android:id="@+id/edit_message"
+        android:layout_weight="1"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:hint="@string/edit_message" />
+    &lt;Button android:id="@+id/button_send"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/button_send"
+        android:onClick="sendMessage" />
+&lt;/LinearLayout>
+</pre>
+
+<p>Each input control supports a specific set of input events so you can handle events such as when
+the user enters text or touches a button.</p>
+
+
+<h2 id="CommonControls">Common Controls</h2>
+<p>Here's a list of some common controls that you can use in your app. Follow the links to learn
+more about using each one.</p>
+
+<p class="note"><strong>Note:</strong> Android provides several more controls than are listed
+here. Browse the {@link android.widget} package to discover more. If your app requires a
+specific kind of input control, you can build your own <a
+href="{@docRoot}guide/topics/ui/custom-components.html">custom components</a>.</p>
+
+<table>
+    <tr>
+        <th scope="col">Control Type</th>
+        <th scope="col">Description</th>
+	<th scope="col">Related Classes</th>
+    </tr>
+    <tr>
+        <td><a href="controls/button.html">Button</a></td>
+        <td>A push-button that can be pressed, or clicked, by the user to perform an action.</td>
+	<td>{@link android.widget.Button Button} </td>
+    </tr>
+    <tr>
+        <td><a href="controls/text.html">Text field</a></td>
+        <td>An editable text field. You can use the <code>AutoCompleteTextView</code> widget to create a text entry widget that provides auto-complete suggestions</td>
+	<td>{@link android.widget.EditText EditText}, {@link android.widget.AutoCompleteTextView}</td>
+    </tr>
+    <tr>
+        <td><a href="controls/checkbox.html">Checkbox</a></td>
+        <td>An on/off switch that can be toggled by the user. You should use checkboxes when presenting users with a group of selectable options that are not mutually exclusive.</td>
+	<td>{@link android.widget.CheckBox CheckBox} </td>
+    </tr>
+    <tr>
+        <td><a href="controls/radiobutton.html">Radio button</a></td>
+        <td>Similar to checkboxes, except that only one option can be selected in the group.</td>
+	<td>{@link android.widget.RadioGroup RadioGroup} 
+	<br>{@link android.widget.RadioButton RadioButton} </td>
+    </tr>
+    <tr>
+        <td><a href="controls/togglebutton.html" style="white-space:nowrap">Toggle button</a></td>
+        <td>An on/off button with a light indicator.</td>
+	<td>{@link android.widget.ToggleButton ToggleButton} </td>
+    </tr>
+    <tr>
+        <td><a href="controls/spinner.html">Spinner</a></td>
+        <td>A drop-down list that allows users to select one value from a set.</td>
+	<td>{@link android.widget.Spinner Spinner} </td>
+    </tr>
+    <tr>
+        <td><a href="controls/pickers.html">Pickers</a></td>
+        <td>A dialog for users to select a single value for a set by using up/down buttons or via a swipe gesture. Use a <code>DatePicker</code>code> widget to enter the values for the date (month, day, year) or a <code>TimePicker</code> widget to enter the values for a time (hour, minute, AM/PM), which will be formatted automatically for the user's locale.</td>
+	<td>{@link android.widget.DatePicker}, {@link android.widget.TimePicker}</td>
+    </tr>
+</table>
diff --git a/docs/html/guide/topics/ui/controls/button.jd b/docs/html/guide/topics/ui/controls/button.jd
new file mode 100644
index 0000000..8d48e9c
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/button.jd
@@ -0,0 +1,245 @@
+page.title=Buttons
+parent.title=Input Controls
+parent.link=../controls.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#HandlingEvents">Responding to Click Events</a>
+    <ol>
+      <li><a href="#ClickListener">Using an OnClickListener</a></li>
+    </ol>
+  </li>
+  <li><a href="#Style">Styling Your Button</a>
+    <ol>
+      <li><a href="#Borderless">Borderless button</a></li>
+      <li><a href="#CustomBackground">Custom background</a></li>
+    </ol>
+  </li>
+</ol>
+  <h2>Key classes</h2>
+  <ol>
+    <li>{@link android.widget.Button}</li>
+    <li>{@link android.widget.ImageButton}</li>
+  </ol>
+</div>
+</div>
+
+
+<p>A button consists of text or an icon (or both text and an icon) that communicates what action
+occurs when the user touches it.</p>
+
+<img src="{@docRoot}images/ui/button-types.png" alt="" />
+
+<p>Depending on whether you want a button with text, an icon, or both, you can create the
+button in your layout in three ways:</p>
+<ul>
+  <li>With text, using the {@link android.widget.Button} class:
+<pre>
+&lt;Button
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:text="@string/button_text"
+    ... />
+</pre>
+  </li>
+  <li>With an icon, using the {@link android.widget.ImageButton} class:
+<pre>
+&lt;ImageButton
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:src="@drawable/button_icon"
+    ... />
+</pre>
+  </li>
+  <li>With text and an icon, using the {@link android.widget.Button} class with the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:drawableLeft">{@code
+android:drawableLeft}</a> attribute:
+<pre>
+&lt;Button
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:text="@string/button_text"
+    android:drawableLeft="@drawable/button_icon"
+    ... />
+</pre>
+</li>
+</ul>
+
+<h2 id="HandlingEvents">Responding to Click Events</h2>
+
+<p>When the user clicks a button, the {@link android.widget.Button} object receives
+an on-click event.</p>
+
+<p>To define the click event handler for a button, add the {@link
+android.R.attr#onClick android:onClick} attribute to the {@code &lt;Button&gt;} element in your XML
+layout. The value for this attribute must be the name of the method you want to call in response
+to a click event. The {@link android.app.Activity} hosting the layout must then implement the
+corresponding method.</p>
+
+<p>For example, here's a layout with a button using {@link
+android.R.attr#onClick android:onClick}:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;Button xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/button_send"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:text="@string/button_send"
+    android:onClick="sendMessage" />
+</pre>
+
+<p>Within the {@link android.app.Activity} that hosts this layout, the following method handles
+the click event:</p>
+
+<pre>
+/** Called when the user touches the button */
+public void sendMessage(View view) {
+    // Do something in response to button click
+}
+</pre>
+
+<p>The method you declare in the {@link android.R.attr#onClick android:onClick} attribute must have
+a signature exactly as shown above. Specifically, the method must:</p>
+<ul>
+  <li>Be public</li>
+  <li>Return void</li>
+  <li>Define a {@link android.view.View} as its only parameter (this will be the {@link
+android.view.View} that was clicked)</li>
+</ul>
+
+
+<h3 id="ClickListener">Using an OnClickListener</h3>
+
+<p>You can also declare the click event handler pragmatically rather than in an XML layout. This
+might be necessary if you instantiate the {@link android.widget.Button} at runtime or you need to
+declare the click behavior in a {@link android.app.Fragment} subclass.</p>
+
+<p>To declare the event handler programmatically, create an {@link
+android.view.View.OnClickListener} object and assign it to the button by calling {@link
+android.view.View#setOnClickListener}. For example:</p>
+
+<pre>
+Button button = (Button) findViewById(R.id.button_send);
+button.setOnClickListener(new View.OnClickListener() {
+    public void onClick(View v) {
+        // Do something in response to button click
+    }
+});
+</pre>
+
+
+<h2 id="Style">Styling Your Button</h2>
+
+<p>The appearance of your button (background image and font) may vary from one device to
+another, because devices by different manufacturers often have different default styles for
+input controls.</p>
+
+<p>You can control exactly how your controls are styled using a theme that you apply to your
+entire application. For instance, to ensure that all devices running Android 4.0 and higher use
+the Holo theme in your app, declare {@code android:theme="@android:style/Theme.Holo"} in your
+manifest's {@code &lt;application&gt;} element. Also read the blog post, <a
+href="http://android-developers.blogspot.com/2012/01/holo-everywhere.html">Holo Everywhere</a>
+for information about using the Holo theme while supporting older devices.</p>
+
+<p>To customize individual buttons with a different background, specify the {@link
+android.R.attr#background android:background} attribute with a drawable or color resource.
+Alternatively, you can apply a <em>style</em> for the button, which works in a manner similar to
+HTML styles to define multiple style properties such as the background, font, size, and others.
+For more information about applying styles, see <a
+href="{@docRoot}guide/topics/ui/themes.html">Styles and Themes</a>.</p>
+
+
+<h3 id="Borderless">Borderless button</h3>
+
+<p>One design that can be useful is a "borderless" button. Borderless buttons resemble
+basic buttons except that they have no borders or background but still change appearance during
+different states, such as when clicked.</p>
+
+<p>To create a borderless button, apply the {@link android.R.attr#borderlessButtonStyle}
+style to the button. For example:</p>
+
+<pre>
+&lt;Button
+    android:id="@+id/button_send"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:text="@string/button_send"
+    android:onClick="sendMessage"
+    style="?android:attr/borderlessButtonStyle" />
+</pre>
+
+
+
+<h3 id="CustomBackground">Custom background</h3>
+
+<p>If you want to truly redefine the appearance of your button, you can specify a custom
+background. Instead of supplying a simple bitmap or color, however, your background should be a
+state list resource that changes appearance depending on the button's current state.</p>
+
+<p>You can define the state list in an XML file that defines three different images or colors to use
+for the different button states.</p>
+
+<p>To create a state list drawable for your button background:</p>
+
+<ol>
+  <li>Create three bitmaps for the button background that represent the default, pressed, and
+focused button states.
+    <p>To ensure that your images fit buttons of various sizes, create the bitmaps as <a
+href="{@docRoot}guide/topics/graphics/2d-graphics.html#nine-patch">Nine-patch</a> bitmaps.</p>
+  </li>
+  <li>Place the bitmaps into the <code>res/drawable/</code> directory of
+your project. Be sure each bitmap is named properly to reflect the button state that they each
+represent, such as {@code button_default.9.png}, {@code button_pressed.9.png}, and {@code
+button_focused.9.png}.</li>
+  <li>Create a new XML file in the <code>res/drawable/</code> directory (name it something like
+<code>button_custom.xml</code>). Insert the following XML:
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;selector xmlns:android="http://schemas.android.com/apk/res/android">
+    &lt;item android:drawable="@drawable/button_pressed"
+          android:state_pressed="true" />
+    &lt;item android:drawable="@drawable/button_focused"
+          android:state_focused="true" />
+    &lt;item android:drawable="@drawable/button_default" />
+&lt;/selector>
+</pre>
+  <p>This defines a single drawable resource, which will change its image based on the current
+state of the button.</p>
+<ul>
+  <li>The first <code>&lt;item></code> defines the bitmap to use when the button is
+pressed (activated).</li>
+  <li>The second <code>&lt;item></code> defines the bitmap to use when the button is
+focused (when the button is highlighted using the trackball or directional
+pad).</li>
+  <li>The third <code>&lt;item></code> defines the bitmap to use when the button is in the 
+default state (it's neither pressed nor focused).</li>
+</ul>
+  <p class="note"><strong>Note:</strong> The order of the <code>&lt;item></code> elements is
+important. When this drawable is referenced, the  <code>&lt;item></code> elements are traversed
+in-order to determine which one is appropriate for the current button state. Because the default
+bitmap is last, it is only applied when the conditions <code>android:state_pressed</code> and
+<code>android:state_focused</code> have both evaluated as false.</p>
+  <p>This XML file now represents a single
+drawable resource and when referenced by a {@link android.widget.Button} for its background,
+the image displayed will change based on these three states.</p>
+</li>
+  <li>Then simply apply the drawable XML file as the button background:
+<pre>
+&lt;Button
+    android:id="@+id/button_send"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:text="@string/button_send"
+    android:onClick="sendMessage"
+    android:background="@drawable/button_custom"  />
+</pre>
+</ol>
+
+  <p>For more information about this XML syntax, including how to define a disabled, hovered, or
+other button states, read about <a
+href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">State List
+Drawable</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/controls/checkbox.jd b/docs/html/guide/topics/ui/controls/checkbox.jd
new file mode 100644
index 0000000..35b8f56
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/checkbox.jd
@@ -0,0 +1,101 @@
+page.title=Checkboxes
+parent.title=Input Controls
+parent.link=../controls.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#HandlingEvents">Responding to Click Events</a></li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.widget.CheckBox}</li>
+</ol>
+</div>
+</div>
+
+<p>Checkboxes allow the user to select one or more options from a set. Typically, you should
+present each checkbox option in a vertical list.</p>
+
+<img src="{@docRoot}images/ui/checkboxes.png" alt="" />
+
+<p>To create each checkbox option, create a {@link android.widget.CheckBox} in your layout. Because
+a set of checkbox options allows the user to select multiple items, each checkbox is managed
+separately and you must register a click listener for each one.</p>
+
+<h2 id="HandlingEvents">Responding to Click Events</h2>
+
+<p>When the user selects a checkbox, the {@link android.widget.CheckBox} object receives an
+on-click event.</p>
+
+<p>To define the click event handler for a checkbox, add the <code><a
+href="/reference/android/R.attr.html#onClick">android:onClick</a></code> attribute to the
+<code>&lt;CheckBox&gt;</code> element in your XML
+layout. The value for this attribute must be the name of the method you want to call in response
+to a click event. The {@link android.app.Activity} hosting the layout must then implement the
+corresponding method.</p>
+
+<p>For example, here are a couple {@link android.widget.CheckBox} objects in a list:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:orientation="vertical"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    &lt;CheckBox android:id="&#64;+id/checkbox_meat"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="&#64;string/meat"
+        android:onClick="onCheckboxClicked"/>
+    &lt;CheckBox android:id="&#64;+id/checkbox_cheese"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="&#64;string/cheese"
+        android:onClick="onCheckboxClicked"/>
+&lt;/LinearLayout>
+</pre>
+
+<p>Within the {@link android.app.Activity} that hosts this layout, the following method handles the
+click event for both checkboxes:</p>
+
+<pre>
+public void onCheckboxClicked(View view) {
+    // Is the view now checked?
+    boolean checked = (CheckBox) view).isChecked();
+    
+    // Check which checkbox was clicked
+    switch(view.getId()) {
+        case R.id.checkbox_meat:
+            if (checked)
+                // Put some meat on the sandwich
+            else
+                // Remove the meat
+            break;
+        case R.id.checkbox_cheese:
+            if (checked)
+                // Cheese me
+            else
+                // I'm lactose intolerant
+            break;
+        // TODO: Veggie sandwich
+    }
+}
+</pre>
+
+<p>The method you declare in the {@link android.R.attr#onClick android:onClick} attribute
+must have a signature exactly as shown above. Specifically, the method must:</p>
+<ul>
+  <li>Be public</li>
+  <li>Return void</li>
+  <li>Define a {@link android.view.View} as its only parameter (this will be the {@link
+android.view.View} that was clicked)</li>
+</ul>
+
+<p class="note"><strong>Tip:</strong> If you need to change the radio button state
+yourself (such as when loading a saved {@link android.preference.CheckBoxPreference}),
+use the {@link android.widget.CompoundButton#setChecked(boolean)} or {@link
+android.widget.CompoundButton#toggle()} method.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/controls/pickers.jd b/docs/html/guide/topics/ui/controls/pickers.jd
new file mode 100644
index 0000000..cf90f1d
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/pickers.jd
@@ -0,0 +1,259 @@
+page.title= Pickers
+parent.title=Form Controls
+parent.link=controls-form.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#TimePicker">Creating a Time Picker</a>
+    <ol>
+      <li><a href="#TimePickerFragment">Extending DialogFragment for a time picker</a></li>
+      <li><a href="#ShowingTheTimePicker">Showing the time picker</a></li>
+    </ol>
+  </li>
+  <li><a href="#DatePicker">Creating a Date Picker</a>
+    <ol>
+      <li><a href="#DatePickerFragment">Extending DialogFragment for a date picker</a></li>
+      <li><a href="#ShowingTheDatePicker">Showing the date picker</a></li>
+    </ol>
+  </li>
+</ol>
+  <h2>Key classes</h2>
+  <ol>
+    <li>{@link android.app.DatePickerDialog}</li>
+    <li>{@link android.app.TimePickerDialog}</li>
+    <li>{@link android.support.v4.app.DialogFragment}</li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
+  </ol>
+</div>
+</div>
+
+<p>Android provides controls for the user to pick a time or pick a date as ready-to-use dialogs.
+Each picker provides controls for selecting each part of the time (hour, minute, AM/PM) or date
+(month, day, year). Using these pickers helps ensure that your users can pick a time or date that
+is valid, formatted correctly, and adjusted to the user's locale.</p>
+
+<img src="{@docRoot}images/ui/pickers.png" alt="" />
+
+<p>We recommend that you use {@link android.support.v4.app.DialogFragment} to host each time or date
+picker. The {@link android.support.v4.app.DialogFragment} manages the dialog lifecycle for you and
+allows you to display the pickers in different layout configurations,
+such as in a basic dialog on handsets or as an embedded part of the layout on large screens.</p>
+
+<p>Although {@link android.app.DialogFragment} was first added to the platform in Android 3.0 (API
+level 11), if your app supports versions of Android older than 3.0&mdash;even as low as Android
+1.6&mdash;you can use the {@link android.support.v4.app.DialogFragment} class that's available in
+the <a href="{@docRoot}tools/extras/support-library.html">support library</a> for backward
+compatibility.</p>
+
+<p class="note"><strong>Note:</strong> The code samples below show how to create dialogs for a time
+picker and date picker using the <a href="{@docRoot}tools/extras/support-library.html">support
+library</a> APIs for {@link android.support.v4.app.DialogFragment}. If your app's <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> is 11 or
+higher, you can instead use the platform version of {@link android.app.DialogFragment}.</p>
+
+
+
+<h2 id="TimePicker">Creating a Time Picker</h2>
+
+<p>To display a {@link android.app.TimePickerDialog} using {@link
+android.support.v4.app.DialogFragment}, you need to define a fragment class that extends {@link
+android.support.v4.app.DialogFragment} and return a {@link android.app.TimePickerDialog} from the
+fragment's {@link android.support.v4.app.DialogFragment#onCreateDialog onCreateDialog()} method.</p>
+
+<p class="note"><strong>Note:</strong> If your app supports versions of Android older than 3.0,
+be sure you've set up your Android project with the support library as described in <a
+href="{@docRoot}tools/extras/support-library.html#SettingUp">Setting Up a Project to Use a
+Library</a>.</p>
+
+<h3 id="TimePickerFragment">Extending DialogFragment for a time picker</h3>
+
+<p>To define a {@link
+android.support.v4.app.DialogFragment} for a {@link android.app.TimePickerDialog}, you
+must:</p>
+<ul>
+  <li>Define the {@link android.support.v4.app.DialogFragment#onCreateDialog onCreateDialog()}
+method to return an instance of {@link android.app.TimePickerDialog}</li>
+  <li>Implement the
+{@link android.app.TimePickerDialog.OnTimeSetListener} interface to receive a callback when the user
+sets the time.</li>
+</ul>
+
+<p>Here's an example:</p>
+
+<pre>
+public static class TimePickerFragment extends DialogFragment
+                            implements TimePickerDialog.OnTimeSetListener {
+
+    &#64;Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Use the current time as the default values for the picker
+        final Calendar c = Calendar.getInstance();
+        int hour = c.get(Calendar.HOUR_OF_DAY);
+        int minute = c.get(Calendar.MINUTE);
+
+        // Create a new instance of TimePickerDialog and return it
+        return new TimePickerDialog(getActivity(), this, hour, minute,
+                DateFormat.is24HourFormat(getActivity()));
+    }
+
+    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+        // Do something with the time chosen by the user
+    }
+}
+</pre>
+
+<p>See the {@link android.app.TimePickerDialog} class for information about the constructor
+arguments.</p>
+
+<p>Now all you need is an event that adds an instance of this fragment to your activity.</p>
+
+
+<h3 id="ShowingTheTimePicker">Showing the time picker</h3>
+
+<p>Once you've defined a {@link android.support.v4.app.DialogFragment} like the one shown above,
+you can display the time picker by creating an instance of the {@link
+android.support.v4.app.DialogFragment} and calling {@link
+android.support.v4.app.DialogFragment#show show()}.</p>
+
+<p>For example, here's a button that, when clicked, calls a method to show the dialog:</p>
+
+<pre>
+&lt;Button 
+    android:layout_width="wrap_content" 
+    android:layout_height="wrap_content"
+    android:text="@string/pick_time" 
+    android:onClick="showTimePickerDialog" />
+</pre>
+
+<p>When the user clicks this button, the system calls the following method:</p>
+  
+<pre>
+public void showTimePickerDialog(View v) {
+    DialogFragment newFragment = new TimePickerFragment();
+    newFragment.show(getSupportFragmentManager(), "timePicker");
+}
+</pre>
+
+<p>This method calls {@link
+android.support.v4.app.DialogFragment#show show()} on a new instance of the {@link
+android.support.v4.app.DialogFragment} defined above. The {@link
+android.support.v4.app.DialogFragment#show show()} method requires an instance of {@link
+android.support.v4.app.FragmentManager} and a unique tag name for the fragment.</p>
+
+<p class="caution"><strong>Caution:</strong> If your app supports versions of Android lower than
+3.0, be sure that you call {@link
+android.support.v4.app.FragmentActivity#getSupportFragmentManager()} to acquire an instance of
+{@link android.support.v4.app.FragmentManager}. Also make sure that your activity that displays the
+time picker extends {@link android.support.v4.app.FragmentActivity} instead of the standard {@link
+android.app.Activity} class.</p>
+
+
+
+
+
+
+
+
+
+<h2 id="DatePicker">Creating a Date Picker</h2>
+
+<p>Creating a {@link android.app.DatePickerDialog} is just like creating a {@link
+android.app.TimePickerDialog}. The only difference is the dialog you create for the fragment.</p>
+
+<p>To display a {@link android.app.DatePickerDialog} using {@link
+android.support.v4.app.DialogFragment}, you need to define a fragment class that extends {@link
+android.support.v4.app.DialogFragment} and return a {@link android.app.DatePickerDialog} from the
+fragment's {@link android.support.v4.app.DialogFragment#onCreateDialog onCreateDialog()} method.</p>
+
+<p class="note"><strong>Note:</strong> If your app supports versions of Android older than 3.0,
+be sure you've set up your Android project with the support library as described in <a
+href="{@docRoot}tools/extras/support-library.html#SettingUp">Setting Up a Project to Use a
+Library</a>.</p>
+
+<h3 id="DatePickerFragment">Extending DialogFragment for a date picker</h3>
+
+<p>To define a {@link
+android.support.v4.app.DialogFragment} for a {@link android.app.DatePickerDialog}, you
+must:</p>
+<ul>
+  <li>Define the {@link android.support.v4.app.DialogFragment#onCreateDialog onCreateDialog()}
+method to return an instance of {@link android.app.DatePickerDialog}</li>
+  <li>Implement the
+{@link android.app.DatePickerDialog.OnDateSetListener} interface to receive a callback when the user
+sets the date.</li>
+</ul>
+
+<p>Here's an example:</p>
+
+<pre>
+public static class DatePickerFragment extends DialogFragment
+                            implements DatePickerDialog.OnDateSetListener {
+
+    &#64;Override
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        // Use the current date as the default date in the picker
+        final Calendar c = Calendar.getInstance();
+        int year = c.get(Calendar.YEAR);
+        int month = c.get(Calendar.MONTH);
+        int day = c.get(Calendar.DAY_OF_MONTH);
+
+        // Create a new instance of DatePickerDialog and return it
+        return new DatePickerDialog(getActivity(), this, year, month, day);
+    }
+
+    public void onDateSet(DatePicker view, int year, int month, int day) {
+        // Do something with the date chosen by the user
+    }
+}
+</pre>
+
+<p>See the {@link android.app.DatePickerDialog} class for information about the constructor
+arguments.</p>
+
+<p>Now all you need is an event that adds an instance of this fragment to your activity.</p>
+
+
+<h3 id="ShowingTheDatePicker">Showing the date picker</h3>
+
+<p>Once you've defined a {@link android.support.v4.app.DialogFragment} like the one shown above,
+you can display the date picker by creating an instance of the {@link
+android.support.v4.app.DialogFragment} and calling {@link
+android.support.v4.app.DialogFragment#show show()}.</p>
+
+<p>For example, here's a button that, when clicked, calls a method to show the dialog:</p>
+
+<pre>
+&lt;Button 
+    android:layout_width="wrap_content" 
+    android:layout_height="wrap_content"
+    android:text="@string/pick_date" 
+    android:onClick="showDatePickerDialog" />
+</pre>
+
+<p>When the user clicks this button, the system calls the following method:</p>
+  
+<pre>
+public void showDatePickerDialog(View v) {
+    DialogFragment newFragment = new DatePickerFragment();
+    newFragment.show(getSupportFragmentManager(), "datePicker");
+}
+</pre>
+
+<p>This method calls {@link
+android.support.v4.app.DialogFragment#show show()} on a new instance of the {@link
+android.support.v4.app.DialogFragment} defined above. The {@link
+android.support.v4.app.DialogFragment#show show()} method requires an instance of {@link
+android.support.v4.app.FragmentManager} and a unique tag name for the fragment.</p>
+
+<p class="caution"><strong>Caution:</strong> If your app supports versions of Android lower than
+3.0, be sure that you call {@link
+android.support.v4.app.FragmentActivity#getSupportFragmentManager()} to acquire an instance of
+{@link android.support.v4.app.FragmentManager}. Also make sure that your activity that displays the
+time picker extends {@link android.support.v4.app.FragmentActivity} instead of the standard {@link
+android.app.Activity} class.</p>
diff --git a/docs/html/guide/topics/ui/controls/radiobutton.jd b/docs/html/guide/topics/ui/controls/radiobutton.jd
new file mode 100644
index 0000000..f6f6d49
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/radiobutton.jd
@@ -0,0 +1,103 @@
+page.title=Radio Buttons
+parent.title=Input Controls
+parent.link=../controls.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#HandlingEvents">Responding to Click Events</a></li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.widget.RadioButton}</li>
+  <li>{@link android.widget.RadioGroup}</li>
+</ol>
+</div>
+</div>
+
+<p>Radio buttons allow the user to select one option from a set. You should use radio buttons for
+optional sets that are mutually exclusive if you think that the user needs to see all available
+options side-by-side. If it's not necessary to show all options side-by-side, use a <a
+href="{@docRoot}guide/topics/ui/controls/spinner.html">spinner</a> instead.</p>
+
+<img src="{@docRoot}images/ui/radiobuttons.png" alt="" />
+
+<p>To create each radio button option, create a {@link android.widget.RadioButton} in your layout.
+However, because radio buttons are mutually exclusive, you must group them together inside a
+{@link android.widget.RadioGroup}. By grouping them together, the system ensures that only one
+radio button can be selected at a time.</p>
+
+<h2 id="HandlingEvents">Responding to Click Events</h2>
+
+<p>When the user selects one of the radio buttons, the corresponding {@link
+android.widget.RadioButton} object receives an on-click event.</p>
+
+<p>To define the click event handler for a button, add the <code><a
+href="/reference/android/R.attr.html#onClick">android:onClick</a></code> attribute to the
+<code>&lt;RadioButton&gt;</code> element in your XML
+layout. The value for this attribute must be the name of the method you want to call in response
+to a click event. The {@link android.app.Activity} hosting the layout must then implement the
+corresponding method.</p>
+
+<p>For example, here are a couple {@link android.widget.RadioButton} objects:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical">
+    &lt;RadioButton android:id="@+id/radio_pirates"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/pirates"
+        android:onClick="onRadioButtonClicked"/>
+    &lt;RadioButton android:id="@+id/radio_ninjas"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/ninjas"
+        android:onClick="onRadioButtonClicked"/>
+&lt;/RadioGroup>
+</pre>
+
+<p class="note"><strong>Note:</strong> The {@link android.widget.RadioGroup} is a subclass of
+{@link android.widget.LinearLayout} that has a vertical orientation by default.</p>
+
+<p>Within the {@link android.app.Activity} that hosts this layout, the following method handles the
+click event for both radio buttons:</p>
+
+<pre>
+public void onRadioButtonClicked(View view) {
+    // Is the button now checked?
+    boolean checked = (RadioButton) view).isChecked();
+    
+    // Check which radio button was clicked
+    switch(view.getId()) {
+        case R.id.radio_pirates:
+            if (checked)
+                // Pirates are the best
+            break;
+        case R.id.radio_ninjas:
+            if (checked)
+                // Ninjas rule
+            break;
+    }
+}
+</pre>
+
+<p>The method you declare in the {@link android.R.attr#onClick android:onClick} attribute
+must have a signature exactly as shown above. Specifically, the method must:</p>
+<ul>
+  <li>Be public</li>
+  <li>Return void</li>
+  <li>Define a {@link android.view.View} as its only parameter (this will be the {@link
+android.view.View} that was clicked)</li>
+</ul>
+
+<p class="note"><strong>Tip:</strong> If you need to change the radio button state
+yourself (such as when loading a saved {@link android.preference.CheckBoxPreference}),
+use the {@link android.widget.CompoundButton#setChecked(boolean)} or {@link
+android.widget.CompoundButton#toggle()} method.</p>
diff --git a/docs/html/guide/topics/ui/controls/spinner.jd b/docs/html/guide/topics/ui/controls/spinner.jd
new file mode 100644
index 0000000..deba3e6
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/spinner.jd
@@ -0,0 +1,147 @@
+page.title= Spinners
+parent.title=Input Controls
+parent.link=../controls.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Populate">Populate the Spinner with User Choices</a></li>
+  <li><a href="#SelectListener">Responding to User Selections</a></li>
+</ol>
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.widget.Spinner}</li>
+  <li>{@link android.widget.SpinnerAdapter}</li>
+  <li>{@link android.widget.AdapterView.OnItemSelectedListener}</li>
+</ol>
+
+</div>
+</div>
+
+<p>Spinners provide a quick way to select one value from a set. In the default state, a spinner
+shows its currently selected value. Touching the spinner displays a dropdown menu with all other
+available values, from which the user can select a new one.</p>
+
+<img src="{@docRoot}images/ui/spinner.png" alt="" />
+
+<p>You can add a spinner to your layout with the {@link android.widget.Spinner} object. You
+should usually do so in your XML layout with a {@code &lt;Spinner&gt;} element. For example:</p>
+
+<pre>
+&lt;Spinner
+    android:id="@+id/planets_spinner"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content" />
+</pre>
+
+<p>To populate the spinner with a list of choices, you then need to specify a {@link
+android.widget.SpinnerAdapter} in your {@link android.app.Activity} or {@link android.app.Fragment}
+source code.</p>
+
+<h2 id="Populate">Populate the Spinner with User Choices</h2>
+
+<p>The choices you provide for the spinner can come from any source, but must be provided through
+an {@link android.widget.SpinnerAdapter}, such as an {@link android.widget.ArrayAdapter} if the
+choices are available in an array or a {@link android.widget.CursorAdapter} if the choices are
+available from a database query.</p>
+
+<p>For instance, if the available choices for your spinner are pre-determined, you can provide
+them with a string array defined in a <a
+href="{@docRoot}guide/topics/resources/string-resource.html">string
+resource file</a>:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;resources>
+    &lt;string-array name="planets_array">
+        &lt;item>Mercury&lt;/item>
+        &lt;item>Venus&lt;/item>
+        &lt;item>Earth&lt;/item>
+        &lt;item>Mars&lt;/item>
+        &lt;item>Jupiter&lt;/item>
+        &lt;item>Saturn&lt;/item>
+        &lt;item>Uranus&lt;/item>
+        &lt;item>Neptune&lt;/item>
+    &lt;/string-array>
+&lt;/resources>
+</pre>
+
+  <p>With an array such as this one, you can use the following code in your {@link
+android.app.Activity} or {@link android.app.Fragment} to supply the spinner with the array using
+an instance of {@link android.widget.ArrayAdapter}:
+
+<pre>
+Spinner spinner = (Spinner) findViewById(R.id.spinner);
+// Create an ArrayAdapter using the string array and a default spinner layout
+ArrayAdapter&lt;CharSequence> adapter = ArrayAdapter.createFromResource(this,
+        R.array.planets_array, android.R.layout.simple_spinner_item);
+// Specify the layout to use when the list of choices appears
+adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+// Apply the adapter to the spinner
+spinner.setAdapter(adapter);
+</pre>
+
+<p>The {@link
+android.widget.ArrayAdapter#createFromResource(Context,int,int) createFromResource()} method allows
+you to create an {@link  android.widget.ArrayAdapter} from the string array. The third argument for
+this method is a layout resource that defines how the selected choice appears in the
+spinner control. The {@link android.R.layout#simple_spinner_item} layout is provided by the
+platform and is the default layout you should use unless you'd like to define your own layout
+for the spinner's appearance.</p>
+
+<p>You should then call {@link android.widget.ArrayAdapter#setDropDownViewResource(int)} to specify
+the layout the adapter should use to display the list of spinner choices ({@link
+android.R.layout#simple_spinner_dropdown_item} is another standard layout defined by the
+platform).</p>
+
+<p>Call {@link android.widget.AdapterView#setAdapter setAdapter()} to apply the adapter to your
+{@link android.widget.Spinner}.</p>
+
+
+<h2 id="SelectListener">Responding to User Selections</h2>
+
+<p>When the user selects an item from the drop-down, the {@link android.widget.Spinner} object
+receives an on-item-selected event.</p>
+
+<p>To define the selection event handler for a spinner, implement the {@link
+android.widget.AdapterView.OnItemSelectedListener} interface and the corresponding {@link
+android.widget.AdapterView.OnItemSelectedListener#onItemSelected onItemSelected()} callback method.
+For example, here's an implementation of the interface in an {@link android.app.Activity}:</p>
+
+<pre>
+public class SpinnerActivity extends Activity implements OnItemSelectedListener {
+    ...
+    
+    public void onItemSelected(AdapterView&lt;?> parent, View view, 
+            int pos, long id) {
+        // An item was selected. You can retrieve the selected item using
+        // parent.getItemAtPosition(pos)
+    }
+
+    public void onNothingSelected(AdapterView&lt;?> parent) {
+        // Another interface callback
+    }
+}
+</pre>
+
+<p>The {@link android.widget.AdapterView.OnItemSelectedListener} requires the {@link
+android.widget.AdapterView.OnItemSelectedListener#onItemSelected(AdapterView,View,int,long)
+onItemSelected()} and {@link
+android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(AdapterView)
+onNothingSelected()} callback methods.</p>
+
+<p>Then you need to specify the interface implementation by calling {@link
+android.widget.AdapterView#setOnItemSelectedListener setOnItemSelectedListener()}:</p>
+
+<pre>
+Spinner spinner = (Spinner) findViewById(R.id.spinner);
+spinner.setOnItemSelectedListener(this);
+</pre>
+
+<p>If you implement the {@link
+android.widget.AdapterView.OnItemSelectedListener} interface with your {@link
+android.app.Activity} or {@link android.app.Fragment} (such as in the example above), you can pass
+<code>this</code> as the interface instance.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/controls/text.jd b/docs/html/guide/topics/ui/controls/text.jd
new file mode 100644
index 0000000..2d9d215
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/text.jd
@@ -0,0 +1,306 @@
+page.title=Text Fields
+parent.title=Input Controls
+parent.link=../controls.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Keyboard">Specifying the Keyboard Type</a>
+    <ol>
+      <li><a href="#Behaviors">Controlling other behaviors</a></li>
+    </ol>
+  </li>
+  <li><a href="#Actions">Specifying Keyboard Actions</a>
+    <ol>
+      <li><a href="#ActionEvent">Responding to action button events</a></li>
+      <li><a href="#ActionLabel">Setting a custom action button label</a></li>
+    </ol>
+  </li>
+  <li><a href="#Flags">Adding Other Keyboard Flags</a></li>
+  <li><a href="#AutoComplete">Providing Auto-complete Suggestions</a></li>
+</ol>
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.widget.EditText}</li>
+  <li>{@link android.widget.AutoCompleteTextView}</li>
+</ol>
+
+</div>
+</div>
+
+<p>A text field allows the user to type text into your app. It can be either single line or
+multi-line. Touching a text field places the cursor and automatically displays the keyboard. In
+addition to typing, text fields allow for a variety of other activities, such as text selection
+(cut, copy, paste) and data look-up via auto-completion.</p>
+
+<p>You can add a text field to you layout with the {@link android.widget.EditText} object. You
+should usually do so in your XML layout with a {@code &lt;EditText&gt;} element.</p>
+
+<img src="{@docRoot}images/ui/edittext-noextract.png" alt="" />
+
+
+
+<h2 id="Keyboard">Specifying the Keyboard Type</h2>
+
+<div class="figure" style="width:300px;margin-top:0">
+<img src="{@docRoot}images/ui/edittext-text.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> The default {@code text} input type.</p>
+</div>
+
+<div class="figure" style="width:300px">
+<img src="{@docRoot}images/ui/edittext-email.png" alt="" />
+<p class="img-caption"><strong>Figure 2.</strong> The {@code textEmailAddress} input type.</p>
+</div>
+
+<div class="figure" style="width:300px">
+<img src="{@docRoot}images/ui/edittext-phone.png" alt="" />
+<p class="img-caption"><strong>Figure 3.</strong> The {@code phone} input type.</p>
+</div>
+
+<p>Text fields can have different input types, such as number, date, password, or email address. The
+type determines what kind of characters are allowed inside the field, and may prompt the virtual
+keyboard to optimize its layout for frequently used characters.</p>
+
+<p>You can specify the type of keyboard you want for your {@link android.widget.EditText} object
+with the <a href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code
+android:inputType}</a> attribute. For example, if you want the user to input an email address, you
+should use the {@code textEmailAddress} input type:</p>
+
+<pre>
+&lt;EditText
+    android:id="&#64;+id/email_address"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:hint="&#64;string/email_hint"
+    android:inputType="textEmailAddress" />
+</pre>
+
+
+<p>There are several different input types available for different situations. You can find
+them all listed with the documentation for <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code
+android:inputType}</a>.</p>
+
+<p class="note"><strong>Tip:</strong> To allow users to input long strings of text with line
+breaks, use the {@code "textMultiLine"} input type. By default, an {@link android.widget.EditText}
+object is restricted to one line of text and scrolls horizontally when the text exceeds the
+available width.</p>
+
+
+<h3 id="Behaviors">Controlling other behaviors</h3>
+
+<p>The <a href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code
+android:inputType}</a> also allows you to specify certain keyboard behaviors, such as whether to
+capitalize all new words or use features like auto-complete and spelling suggestions.</p>
+
+<p>The <a href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code
+android:inputType}</a> attribute allows bitwise combinations so you can specify both a keyboard
+layout and one or more behaviors at once. For example, here's how you can collect a postal
+address, capitalize each word, and disable text suggestions:</p>
+
+<pre>
+&lt;EditText
+    android:id="@+id/postal_address"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:hint="&#64;string/postal_address_hint"
+    android:inputType="textPostalAddress|
+                       textCapWords|
+                       textNoSuggestions" />
+</pre>
+
+<p>All behaviors are also listed with the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:inputType">{@code
+android:inputType}</a> documentation.</p>
+
+
+<h2 id="Actions">Specifying Keyboard Actions</h2>
+
+<div class="figure" style="width:300px">
+<img src="{@docRoot}images/ui/edittext-actionsend.png" alt="" />
+<p class="img-caption"><strong>Figure 4.</strong> If you declare {@code
+android:imeOptions="actionSend"}, the keyboard includes the Send action.</p>
+</div>
+
+<p>In addition to changing the keyboard's input type, Android allows you to specify an action to be
+made when users have completed their input. The action specifies the button that appears in place of
+the carriage return key and the action to be made, such as "Search" or "Send."</p>
+
+<p>You can specify the action by setting the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeOptions">{@code
+android:imeOptions}</a> attribute. For example, here's how you can specify the Send action:</p>
+
+<pre>
+&lt;EditText
+    android:id="@+id/search"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:hint="@string/search_hint"
+    android:inputType="text"
+    android:imeOptions="actionSend" />
+</pre>
+
+<p>If you do not explicitly specify an input action then the system attempts to determine if there
+are any subsequent <a
+href="{@docRoot}reference/android/view/View.html#attr_android:focusable">{@code
+android:focusable}</a> fields. If any focusable fields are found following this one, the system
+applies the (@code actionNext} action to the current {@link android.widget.EditText} so the user can
+select Next to move to the next field. If there's no subsequent focusable field, the system applies
+the {@code "actionDone"} action. You can override this by setting the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeOptions">{@code
+android:imeOptions}</a> attribute to any other value such as {@code "actionSend"} or {@code
+"actionSearch"} or suppress the default behavior by using the {@code "actionNone"} action.</p>
+
+
+<h3 id="ActionEvent">Responding to action button events</h3>
+
+<p>If you have specified a keyboard action for the input method using <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeOptions">{@code
+android:imeOptions}</a> attribute (such as {@code "actionSend"}), you can listen for the specific
+action event using an {@link android.widget.TextView.OnEditorActionListener}. The {@link
+android.widget.TextView.OnEditorActionListener} interface provides a callback method called {@link
+android.widget.TextView.OnEditorActionListener#onEditorAction onEditorAction()} that indicates the
+action type invoked with an action ID such as {@link
+android.view.inputmethod.EditorInfo#IME_ACTION_SEND} or {@link
+android.view.inputmethod.EditorInfo#IME_ACTION_SEARCH}.</p>
+
+<p>For example, here's how you can listen for when the user clicks the Send button on the
+keyboard:</p>
+
+<pre>
+EditText editText = (EditText) findViewById(R.id.search);
+editText.setOnEditorActionListener(new OnEditorActionListener() {
+    &#64;Override
+    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
+        boolean handled = false;
+        if (actionId == EditorInfo.IME_ACTION_SEND) {
+            // Send the user message
+            handled = true;
+        }
+        return handled;
+    }
+});
+</pre>
+
+
+<h3 id="ActionLabel">Setting a custom action button label</h3>
+
+<p>If the keyboard is too large to reasonably share space with the underlying application (such as
+when a handset device is in landscape orientation) then fullscreen ("extract mode") is triggered. In
+this mode, a labeled action button is displayed next to the input. You can customize the text of
+this button by setting the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeActionLabel">{@code
+android:imeActionLabel}</a> attribute:</p>
+
+<pre>
+&lt;EditText
+    android:id="&#64;+id/launch_codes"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content"
+    android:hint="&#64;string/enter_launch_codes"
+    android:inputType="number"
+    android:imeActionLabel="&#64;string/launch" />
+</pre>
+
+<img src="{@docRoot}images/ui/edittext-actionlabel.png" alt="" />
+<p class="img-caption"><strong>Figure 5.</strong> A custom action label with <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeActionLabel">{@code
+android:imeActionLabel}</a>.</p>
+
+
+
+<h2 id="Flags">Adding Other Keyboard Flags</h2>
+
+<p>In addition to the actions you can specify with the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeOptions">{@code
+android:imeOptions}</a> attribute, you can add additional flags to specify other keyboard
+behaviors. All available flags are listed along with the actions in the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeOptions">{@code
+android:imeOptions}</a> documentation.</p>
+
+<p>For example, figure 5 shows how the system enables a fullscreen text field when a handset device
+is in landscape orientation (or the screen space is otherwise constrained for space). You can
+disable the fullscreen input mode with {@code flagNoExtractUi} in the <a
+href="{@docRoot}reference/android/widget/TextView.html#attr_android:imeOptions">{@code
+android:imeOptions}</a> attribute, as shown in figure 6.</p>
+
+<img src="{@docRoot}images/ui/edittext-noextract.png" alt="" />
+<p class="img-caption"><strong>Figure 6.</strong> The fullscreen text field ("extract mode") is
+disabled with {@code android:imeOptions="flagNoExtractUi"}.</p>
+
+
+
+
+<h2 id="AutoComplete">Providing Auto-complete Suggestions</h2>
+
+<p>If you want to provide suggestions to users as they type, you can use a subclass of {@link
+android.widget.EditText} called {@link android.widget.AutoCompleteTextView}. To implement
+auto-complete, you must specify an (@link android.widget.Adapter) that provides the text
+suggestions. There are several kinds of adapters available, depending on where the data is coming
+from, such as from a database or an array.</p>
+
+<img src="{@docRoot}images/ui/edittext-autocomplete.png" alt="" />
+<p class="img-caption"><strong>Figure 7.</strong> Example of {@link
+android.widget.AutoCompleteTextView} with text suggestions.</p>
+
+<p>The following procedure describes how to set up an {@link android.widget.AutoCompleteTextView}
+that provides suggestions from an array, using {@link android.widget.ArrayAdapter}:
+
+<ol>
+  <li>Add the {@link android.widget.AutoCompleteTextView} to your layout. Here's a
+layout with only the text field:
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;AutoCompleteTextView xmlns:android="http://schemas.android.com/apk/res/android" 
+    android:id="&#64;+id/autocomplete_country"
+    android:layout_width="fill_parent"
+    android:layout_height="wrap_content" />
+</pre>
+</li>
+
+<li>Define the array that contains all text suggestions. For example, here's an array of country
+names that's defined in an XML resource file ({@code res/values/strings.xml}):
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;resources>
+    &lt;string-array name="countries_array">
+        &lt;item>Afghanistan&lt;/item>
+        &lt;item>Albania&lt;/item>
+        &lt;item>Algeria&lt;/item>
+        &lt;item>American Samoa&lt;/item>
+        &lt;item>Andorra&lt;/item>
+        &lt;item>Angola&lt;/item>
+        &lt;item>Anguilla&lt;/item>
+        &lt;item>Antarctica&lt;/item>
+        ...
+    &lt;/string-array>
+&lt;/resources>
+</pre>
+</li>
+
+<li>In your {@link android.app.Activity} or {@link android.app.Fragment}, use the following
+code to specify the adapter that supplies the suggestions:
+<pre>
+// Get a reference to the AutoCompleteTextView in the layout
+AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
+// Get the string array
+String[] countries = getResources().getStringArray(R.array.countries_array);
+// Create the adapter and set it to the AutoCompleteTextView 
+ArrayAdapter&lt;String> adapter = 
+        new ArrayAdapter&lt;String>(this, android.R.layout.simple_list_item_1, countries);
+textView.setAdapter(adapter);
+</pre>
+
+<p>Here, a new {@link
+android.widget.ArrayAdapter} is initialized to bind each item in the <code>COUNTRIES</code>
+string array to a {@link android.widget.TextView} that exists in the {@code simple_list_item_1}
+layout (this is a layout provided by Android that provides a standard appearance for text in a
+list).</p>
+<p>Then assign the adapter to the {@link android.widget.AutoCompleteTextView} by
+calling {@link android.widget.AutoCompleteTextView#setAdapter setAdapter()}.</p>
+</li>
+</ol>
+
diff --git a/docs/html/guide/topics/ui/controls/togglebutton.jd b/docs/html/guide/topics/ui/controls/togglebutton.jd
new file mode 100644
index 0000000..dd7634b
--- /dev/null
+++ b/docs/html/guide/topics/ui/controls/togglebutton.jd
@@ -0,0 +1,124 @@
+page.title=Toggle Buttons
+parent.title=Input Controls
+parent.link=../controls.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#HandlingEvents">Responding to Click Events</a>
+    <ol>
+      <li><a href="#ClickListener">Using an OnCheckedChangeListener</a></li>
+    </ol>
+  </li>
+</ol>
+  <h2>Key classes</h2>
+  <ol>
+    <li>{@link android.widget.ToggleButton}</li>
+    <li>{@link android.widget.Switch}</li>
+  </ol>
+</div>
+</div>
+
+<p>A toggle button allows the user to change a setting between two states.</p>
+
+<p>You can add a basic toggle button to your layout with the {@link android.widget.ToggleButton}
+object. Android 4.0 (API level 14) introduces another kind of toggle button called a switch that
+provides a slider control, which you can add with a {@link android.widget.Switch} object.</p>
+
+<div style="float:left;width:200px">
+<img src="{@docRoot}images/ui/togglebutton.png" alt="" />
+<p class="img-caption"><em>Toggle buttons</em></p>
+</div>
+
+<div style="float:left;width:200px;margin-top:24px">
+<img src="{@docRoot}images/ui/switch.png" alt="" />
+<p class="img-caption"><em>Switches (in Android 4.0+)</em></p>
+</div>
+
+<p style="clear:left">The {@link android.widget.ToggleButton} and {@link android.widget.Switch}
+controls are subclasses of {@link android.widget.CompoundButton} and function in the same manner, so
+you can implement their behavior the same way.</p>
+
+<h2 id="HandlingEvents">Responding to Click Events</h2>
+
+<p>When the user selects a {@link android.widget.ToggleButton} and {@link android.widget.Switch},
+the object receives an on-click event.</p>
+
+<p>To define the click event handler, add the <code><a
+href="/reference/android/R.attr.html#onClick">android:onClick</a></code> attribute to the
+<code>&lt;ToggleButton&gt;</code> or <code>&lt;Switch&gt;</code> element in your XML
+layout. The value for this attribute must be the name of the method you want to call in response
+to a click event. The {@link android.app.Activity} hosting the layout must then implement the
+corresponding method.</p>
+
+<p>For example, here's a {@link android.widget.ToggleButton} with the <code><a
+href="/reference/android/R.attr.html#onClick">android:onClick</a></code> attribute:</p>
+
+<pre>
+&lt;ToggleButton 
+    android:id="@+id/togglebutton"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:textOn="Vibrate on"
+    android:textOff="Vibrate off"
+    android:onClick="onToggleClicked"/>
+</pre>
+
+<p>Within the {@link android.app.Activity} that hosts this layout, the following method handles the
+click event:</p>
+
+<pre>
+public void onToggleClicked(View view) {
+    // Is the toggle on?
+    boolean on = ((ToggleButton) view).isChecked();
+    
+    if (on) {
+        // Enable vibrate
+    } else {
+        // Disable vibrate
+    }
+}
+</pre>
+
+<p>The method you declare in the {@link android.R.attr#onClick android:onClick} attribute
+must have a signature exactly as shown above. Specifically, the method must:</p>
+<ul>
+  <li>Be public</li>
+  <li>Return void</li>
+  <li>Define a {@link android.view.View} as its only parameter (this will be the {@link
+android.view.View} that was clicked)</li>
+</ul>
+
+<p class="note"><strong>Tip:</strong> If you need to change the state
+yourself,
+use the {@link android.widget.CompoundButton#setChecked(boolean)} or {@link
+android.widget.CompoundButton#toggle()} method to change the state.</p>
+
+
+
+<h3 id="ClickListener">Using an OnCheckedChangeListener</h3>
+
+<p>You can also declare a click event handler pragmatically rather than in an XML layout. This
+might be necessary if you instantiate the {@link android.widget.ToggleButton} or {@link
+android.widget.Switch} at runtime or you need to
+declare the click behavior in a {@link android.app.Fragment} subclass.</p>
+
+<p>To declare the event handler programmatically, create an {@link
+android.widget.CompoundButton.OnCheckedChangeListener} object and assign it to the button by calling
+{@link
+android.widget.CompoundButton#setOnCheckedChangeListener}. For example:</p>
+
+<pre>
+ToggleButton toggle = (ToggleButton) findViewById(R.id.togglebutton);
+toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+        if (isChecked) {
+            // The toggle is enabled
+        } else {
+            // The toggle is disabled
+        }
+    }
+});
+</pre>
diff --git a/docs/html/guide/topics/ui/declaring-layout.jd b/docs/html/guide/topics/ui/declaring-layout.jd
index 8af4a1c..3c9faa8 100644
--- a/docs/html/guide/topics/ui/declaring-layout.jd
+++ b/docs/html/guide/topics/ui/declaring-layout.jd
@@ -1,4 +1,4 @@
-page.title=XML Layouts
+page.title=Layouts
 parent.title=User Interface
 parent.link=index.html
 @jd:body
@@ -6,18 +6,25 @@
 <div id="qv-wrapper">
 <div id="qv">
   <h2>In this document</h2>
-  <ol>
-    <li><a href="#write">Write the XML</a></li>
-    <li><a href="#load">Load the XML Resource</a></li>
-    <li><a href="#attributes">Attributes</a>
-      <ol>
-        <li><a href="#id">ID</a></li>
-        <li><a href="#layout-params">Layout Parameters</a></li>
-      </ol>
-    </li>
-    <li><a href="#Position">Position</a></li>
-    <li><a href="#SizePaddingMargins">Size, Padding and Margins</a></li>
-  </ol>
+<ol>
+  <li><a href="#write">Write the XML</a></li>
+  <li><a href="#load">Load the XML Resource</a></li>
+  <li><a href="#attributes">Attributes</a>
+    <ol>
+      <li><a href="#id">ID</a></li>
+      <li><a href="#layout-params">Layout Parameters</a></li>
+    </ol>
+  </li>
+  <li><a href="#Position">Layout Position</a></li>
+  <li><a href="#SizePaddingMargins">Size, Padding and Margins</a></li>
+  <li><a href="#CommonLayouts">Common Layouts</a></li>
+  <li><a href="#AdapterViews">Building Layouts with an Adapter</a>
+    <ol>
+      <li><a href="#FillingTheLayout">Filling an adapter view with data</a></li>
+      <li><a href="#HandlingUserSelections">Handling click events</a></li>
+    </ol>
+  </li>
+</ol>
 
   <h2>Key classes</h2>
   <ol>
@@ -43,15 +50,15 @@
 <div class="sidebox-wrapper">
 <div class="sidebox">
   <ul>
-  <li>The <a href="{@docRoot}sdk/eclipse-adt.html">ADT
+  <li>The <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT
   Plugin for Eclipse</a> offers a layout preview of your XML &mdash; 
   with the XML file opened, select the <strong>Layout</strong> tab.</li>
   <li>You should also try the 
-  <a href="{@docRoot}guide/developing/debugging/debugging-ui.html#hierarchyViewer">Hierarchy Viewer</a> tool, 
+  <a href="{@docRoot}tools/debugging/debugging-ui.html#hierarchyViewer">Hierarchy Viewer</a> tool, 
   for debugging layouts &mdash; it reveals layout property values, 
   draws wireframes with padding/margin indicators, and full rendered views while 
   you debug on the emulator or device.</li>
-  <li>The <a href="{@docRoot}guide/developing/debugging/debugging-ui.html#layoutopt">layoutopt</a> tool lets
+  <li>The <a href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">layoutopt</a> tool lets
   you quickly analyze your layouts and hierarchies for inefficiencies or other problems.</li>
 </div>
 </div>
@@ -125,7 +132,7 @@
 
 <p>The <code>onCreate()</code> callback method in your Activity is called by the Android framework when
 your Activity is launched (see the discussion about lifecycles, in the 
-<a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">Activities</a>
+<a href="{@docRoot}guide/components/activities.html#Lifecycle">Activities</a>
 document).</p>
 
 
@@ -300,5 +307,213 @@
    </p>
    
 
+   
+   
+
+
+<style type="text/css">
+div.layout {
+  float:left;
+  width:200px;
+  margin:0 0 20px 20px;
+}
+div.layout.first {
+  margin-left:0;
+  clear:left;
+}
+</style>
+
+
+
+
+<h2 id="CommonLayouts">Common Layouts</h2>
+
+<p>Each subclass of the {@link android.view.ViewGroup} class provides a unique way to display
+the views you nest within it. Below are some of the more common layout types that are built
+into the Android platform.</p>
+
+<p class="note"><strong>Note:</strong> Although you can nest one or more layouts within another
+layout to acheive your UI design, you should strive to keep your layout hierarchy as shallow as
+possible. Your layout draws faster if it has fewer nested layouts (a wide view hierarchy is
+better than a deep view hierarchy).</p>
+
+<!-- 
+<h2 id="framelayout">FrameLayout</h2>
+<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
+object. It's basically a blank space on your screen that you can
+later fill with a single object &mdash; for example, a picture that you'll swap in and out.
+All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
+specify a different location for a child view. Subsequent child views will simply be drawn over
+previous ones,
+partially or totally obscuring them (unless the newer object is transparent).
+</p>
+-->
+
+
+<div class="layout first">
+  <h4><a href="layout/linear.html">Linear Layout</a></h4>
+  <a href="layout/linear.html"><img src="{@docRoot}images/ui/linearlayout-small.png" alt="" /></a>
+  <p>A layout that organizes its children into a single horizontal or vertical row. It
+  creates a scrollbar if the length of the window exceeds the length of the screen.</p>
+</div>
+
+<div class="layout">
+  <h4><a href="layout/relative.html">Relative Layout</a></h4>
+  <a href="layout/relative.html"><img src="{@docRoot}images/ui/relativelayout-small.png" alt=""
+/></a>
+  <p>Enables you to specify the location of child objects relative to each other (child A to
+the left of child B) or to the parent (aligned to the top of the parent).</p>
+</div>
+      
+<!--
+<div class="layout">
+  <h4><a href="layout/tabs.html">Tabs</a></h4>
+  <a href="layout/tabs.html"><img src="{@docRoot}images/ui/tabs-small.png" alt="" /></a>
+  <p>Provides a tab selection list that monitors clicks and enables the application to change
+the screen whenever a tab is clicked.</p>
+</div>
+      
+<div class="layout first">
+  <h4><a href="layout/grid.html">Table Layout</a></h4>
+  <a href="layout/table.html"><img src="{@docRoot}images/ui/gridlayout-small.png" alt="" /></a>
+  <p>A tabular layout with an arbitrary number of rows and columns, each cell holding the
+widget of your choice. The rows resize to fit the largest column. The cell borders are not
+visible.</p>
+</div>
+-->
+
+<div class="layout">
+  <h4><a href="{@docRoot}guide/webapps/webview.html">Web View</a></h4>
+  <a href="{@docRoot}guide/webapps/webview.html"><img src="{@docRoot}images/ui/webview-small.png"
+alt="" /></a>
+  <p>Displays web pages.</p>
+</div>
+
+
+
+
+<h2 id="AdapterViews" style="clear:left">Building Layouts with an Adapter</h2>
+
+<p>When the content for your layout is dynamic or not pre-determined, you can use a layout that
+subclasses {@link android.widget.AdapterView} to populate the layout with views at runtime. A
+subclass of the {@link android.widget.AdapterView} class uses an {@link android.widget.Adapter} to
+bind data to its layout. The {@link android.widget.Adapter} behaves as a middle-man between the data
+source and the {@link android.widget.AdapterView} layout&mdash;the {@link android.widget.Adapter}
+retreives the data (from a source such as an array or a database query) and converts each entry
+into a view that can be added into the {@link android.widget.AdapterView} layout.</p>
+
+<p>Common layouts backed by an adapter include:</p>
+
+<div class="layout first">
+  <h4><a href="layout/listview.html">List View</a></h4>
+  <a href="layout/list.html"><img src="{@docRoot}images/ui/listview-small.png" alt="" /></a>
+  <p>Displays a scrolling single column list.</p>
+</div>
+
+<div class="layout">
+  <h4><a href="layout/gridview.html">Grid View</a></h4>
+  <a href="layout/grid.html"><img src="{@docRoot}images/ui/gridview-small.png" alt="" /></a>
+  <p>Displays a scrolling grid of columns and rows.</p>
+</div>
+
+
+
+<h3 id="FillingTheLayout" style="clear:left">Filling an adapter view with data</h3>
+
+<p>You can populate an {@link android.widget.AdapterView} such as {@link android.widget.ListView} or
+{@link android.widget.GridView} by binding the {@link android.widget.AdapterView} instance to an
+{@link android.widget.Adapter}, which retrieves data from an external source and creates a {@link
+android.view.View} that represents each data entry.</p>
+
+<p>Android provides several subclasses of {@link android.widget.Adapter} that are useful for
+retrieving different kinds of data and building views for an {@link android.widget.AdapterView}. The
+two most common adapters are:</p>
+
+<dl>
+  <dt>{@link android.widget.ArrayAdapter}</dt>
+    <dd>Use this adapter when your data source is an array. By default, {@link
+android.widget.ArrayAdapter} creates a view for each array item by calling {@link
+java.lang.Object#toString()} on each item and placing the contents in a {@link
+android.widget.TextView}.
+      <p>For example, if you have an array of strings you want to display in a {@link
+android.widget.ListView}, initialize a new {@link android.widget.ArrayAdapter} using a
+constructor to specify the layout for each string and the string array:</p>
+<pre>
+ArrayAdapter adapter = new ArrayAdapter&lt;String>(this, 
+        android.R.layout.simple_list_item_1, myStringArray);
+</pre>
+<p>The arguments for this constructor are:</p>
+<ul>
+  <li>Your app {@link android.content.Context}</li>
+  <li>The layout that contains a {@link android.widget.TextView} for each string in the array</li>
+  <li>The string array</li>
+</ul>
+<p>Then simply call
+{@link android.widget.ListView#setAdapter setAdapter()} on your {@link android.widget.ListView}:</p>
+<pre>
+ListView listView = (ListView) findViewById(R.id.listview);
+listView.setAdapter(adapter);
+</pre>
+
+      <p>To customize the appearance of each item you can override the {@link
+java.lang.Object#toString()} method for the objects in your array. Or, to create a view for each
+item that's something other than a {@link android.widget.TextView} (for example, if you want an
+{@link android.widget.ImageView} for each array item), extend the {@link
+android.widget.ArrayAdapter} class and override {@link android.widget.ArrayAdapter#getView
+getView()} to return the type of view you want for each item.</p>
+
+</dd>
+
+  <dt>{@link android.widget.SimpleCursorAdapter}</dt>
+    <dd>Use this adapter when your data comes from a {@link android.database.Cursor}. When
+using {@link android.widget.SimpleCursorAdapter}, you must specify a layout to use for each
+row in the {@link android.database.Cursor} and which columns in the {@link android.database.Cursor}
+should be inserted into which views of the layout. For example, if you want to create a list of
+people's names and phone numbers, you can perform a query that returns a {@link
+android.database.Cursor} containing a row for each person and columns for the names and
+numbers. You then create a string array specifying which columns from the {@link
+android.database.Cursor} you want in the layout for each result and an integer array specifying the
+corresponding views that each column should be placed:</p>
+<pre>
+String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME, 
+                        ContactsContract.CommonDataKinds.Phone.NUMBER};
+int[] toViews = {R.id.display_name, R.id.phone_number};
+</pre>
+<p>When you instantiate the {@link android.widget.SimpleCursorAdapter}, pass the layout to use for
+each result, the {@link android.database.Cursor} containing the results, and these two arrays:</p>
+<pre>
+SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
+        R.layout.person_name_and_number, cursor, fromColumns, toViews, 0);
+ListView listView = getListView();
+listView.setAdapter(adapter);
+</pre>
+<p>The {@link android.widget.SimpleCursorAdapter} then creates a view for each row in the
+{@link android.database.Cursor} using the provided layout by inserting each {@code
+fromColumns} item into the corresponding {@code toViews} view.</p>.</dd>
+</dl>
+
+
+<p>If, during the course of your application's life, you change the underlying data that is read by
+your adapter, you should call {@link android.widget.ArrayAdapter#notifyDataSetChanged()}. This will
+notify the attached view that the data has been changed and it should refresh itself.</p>
+
+
+
+<h3 id="HandlingUserSelections">Handling click events</h3>
+
+<p>You can respond to click events on each item in an {@link android.widget.AdapterView} by
+implementing the {@link android.widget.AdapterView.OnItemClickListener} interface. For example:</p>
+
+<pre>
+// Create a message handling object as an anonymous class.
+private OnItemClickListener mMessageClickedHandler = new OnItemClickListener() {
+    public void onItemClick(AdapterView parent, View v, int position, long id) {
+        // Do something in response to the click
+    }
+};
+
+listView.setOnItemClickListener(mMessageClickedHandler); 
+</pre>
+
 
 
diff --git a/docs/html/guide/topics/ui/dialogs.jd b/docs/html/guide/topics/ui/dialogs.jd
index 82cbfd1..9c28058 100644
--- a/docs/html/guide/topics/ui/dialogs.jd
+++ b/docs/html/guide/topics/ui/dialogs.jd
@@ -313,7 +313,7 @@
 
 <p class="note"><strong>Note:</strong> To save the selection when the user leaves or
 pauses the Activity, you must properly save and restore the setting throughout
-the <a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">activity lifecycle</a>. 
+the <a href="{@docRoot}guide/components/activities.html#Lifecycle">activity lifecycle</a>. 
 To permanently save the selections, even when the Activity process is completely shutdown, 
 you need to save the settings
 with one of the <a href="{@docRoot}guide/topics/data/data-storage.html">Data
diff --git a/docs/html/resources/tutorials/views/images/android_focused.png b/docs/html/guide/topics/ui/images/android_focused.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/android_focused.png
rename to docs/html/guide/topics/ui/images/android_focused.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/android_normal.png b/docs/html/guide/topics/ui/images/android_normal.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/android_normal.png
rename to docs/html/guide/topics/ui/images/android_normal.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/android_pressed.png b/docs/html/guide/topics/ui/images/android_pressed.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/android_pressed.png
rename to docs/html/guide/topics/ui/images/android_pressed.png
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-gallery.png b/docs/html/guide/topics/ui/images/hello-gallery.png
similarity index 100%
rename from docs/html/guide/tutorials/views/images/hello-gallery.png
rename to docs/html/guide/topics/ui/images/hello-gallery.png
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-gridview.png b/docs/html/guide/topics/ui/images/hello-gridview.png
similarity index 100%
rename from docs/html/guide/tutorials/views/images/hello-gridview.png
rename to docs/html/guide/topics/ui/images/hello-gridview.png
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-linearlayout.png b/docs/html/guide/topics/ui/images/hello-linearlayout.png
similarity index 100%
rename from docs/html/guide/tutorials/views/images/hello-linearlayout.png
rename to docs/html/guide/topics/ui/images/hello-linearlayout.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-listview.png b/docs/html/guide/topics/ui/images/hello-listview.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/hello-listview.png
rename to docs/html/guide/topics/ui/images/hello-listview.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-mapview.png b/docs/html/guide/topics/ui/images/hello-mapview.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/hello-mapview.png
rename to docs/html/guide/topics/ui/images/hello-mapview.png
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-relativelayout.png b/docs/html/guide/topics/ui/images/hello-relativelayout.png
similarity index 100%
rename from docs/html/guide/tutorials/views/images/hello-relativelayout.png
rename to docs/html/guide/topics/ui/images/hello-relativelayout.png
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-tablelayout.png b/docs/html/guide/topics/ui/images/hello-tablelayout.png
similarity index 100%
rename from docs/html/guide/tutorials/views/images/hello-tablelayout.png
rename to docs/html/guide/topics/ui/images/hello-tablelayout.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-tabwidget.png b/docs/html/guide/topics/ui/images/hello-tabwidget.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/hello-tabwidget.png
rename to docs/html/guide/topics/ui/images/hello-tabwidget.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-webview.png b/docs/html/guide/topics/ui/images/hello-webview.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/hello-webview.png
rename to docs/html/guide/topics/ui/images/hello-webview.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/ic_tab_artists_grey.png b/docs/html/guide/topics/ui/images/ic_tab_artists_grey.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/ic_tab_artists_grey.png
rename to docs/html/guide/topics/ui/images/ic_tab_artists_grey.png
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/ic_tab_artists_white.png b/docs/html/guide/topics/ui/images/ic_tab_artists_white.png
similarity index 100%
rename from docs/html/resources/tutorials/views/images/ic_tab_artists_white.png
rename to docs/html/guide/topics/ui/images/ic_tab_artists_white.png
Binary files differ
diff --git a/docs/html/guide/topics/ui/index.jd b/docs/html/guide/topics/ui/index.jd
index be07249..f342b06 100644
--- a/docs/html/guide/topics/ui/index.jd
+++ b/docs/html/guide/topics/ui/index.jd
@@ -1,236 +1,61 @@
 page.title=User Interface
+page.landing=true
+page.landing.intro=Your app's user interface is everything that the user can see and interact with. Android provides a variety of pre-build UI components such as structured layout objects and UI controls that allow you to build the graphical user interface for your app. Android also provides other UI modules for special interfaces such as dialogs, notifications, and menus.  
+page.landing.image=images/ui/ui_index.png
+page.landing.next=overview.html
+
 @jd:body
 
-<div id="qv-wrapper">
-<div id="qv">
+<div class="landing-docs">
 
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#ViewHierarchy">View Hierarchy</a></li>
-    <li><a href="#Layout">Layout</a></li>
-    <li><a href="#Widgets">Widgets</a></li>
-    <li><a href="#Events">Input Events</a></li>
-    <li><a href="#Menus">Menus</a></li>
-    <li><a href="#Advanced">Advanced Topics</a>
-      <ol>
-        <li><a href="#Adapters">Adapters</a></li>
-        <li><a href="#StylesAndThemes">Styles and Themes</a></li>
-      </ol>
-    </li>
-  </ol>
+  <div class="col-6">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2012/01/say-goodbye-to-menu-button.html">
+      <h4>Say Goodbye to the Menu Button</h4>
+      <p>As Ice Cream Sandwich rolls out to more devices, it’s important that you begin to migrate
+your designs to the action bar in order to promote a consistent Android user experience.</p> </a>
 
-  <h2>Key classes</h2>
-  <ol>
-    <li>{@link android.view.View}</li>
-    <li>{@link android.view.ViewGroup}</li>
-    <li>{@link android.widget Widget classes}</li>
-  </ol>
-</div>
+    <a href="http://android-developers.blogspot.com/2011/11/new-layout-widgets-space-and-gridlayout.html">
+      <h4>New Layout Widgets: Space and GridLayout</h4>
+      <p>Ice Cream Sandwich (ICS) sports two new widgets that have been designed to support the
+richer user interfaces made possible by larger displays: Space and GridLayout.</p> </a>
+
+    <a href="http://android-developers.blogspot.com/2011/04/customizing-action-bar.html">
+      <h4>Customizing the Action Bar</h4>
+      <p>By using the Action Bar in your Honeycomb-targeted apps, you'll give your users a familiar
+way to interact with your application.</p> </a>
+
+    <a href="http://android-developers.blogspot.com/2011/08/horizontal-view-swiping-with-viewpager.html">
+      <h4>Horizontal View Swiping with ViewPager</h4>
+      <p>Whether you have just started out in Android app development or are a veteran of the craft,
+it probably won’t be too long before you’ll need to implement horizontally scrolling sets of views.
+</p> </a>
+  </div>
+
+  <div class="col-6">
+    <h3>Training</h3>
+    
+    <a href="http://developer.android.com/training/implementing-navigation/index.html">
+      <h4>Implementing Effective Navigation</h4>
+      <p>This class shows you how to plan out the high-level screen hierarchy for your application
+and then choose appropriate forms of navigation to allow users to effectively and intuitively
+traverse your content.</p> </a>
+
+    <a href="http://developer.android.com/training/multiscreen/index.html">
+      <h4>Designing for Multiple Screens</h4>
+      <p>Android powers hundreds of device types with several different screen sizes, ranging from
+small phones to large TV sets. This class shows you how to implement a user interface that's
+optimized for several screen configurations.</p>
+    </a>
+
+    <a href="http://developer.android.com/training/improving-layouts/index.html">
+      <h4>Improving Layout Performance</h4>
+      <p>Layouts are a key part of Android applications that directly affect the user experience. If
+implemented poorly, your layout can lead to a memory hungry application with slow UIs. This
+class shows you how to avoid such problems.</p>
+    </a>
+  </div>
+
 </div>
 
-<p>In an Android application, the user interface is built using {@link android.view.View} and 
-{@link android.view.ViewGroup} objects. There are many types of views and view groups, each of which 
-is a descendant of the {@link android.view.View} class.</p>
-
-<p>View objects are the basic units of user interface expression on the Android platform. 
-The View class serves as the base for subclasses called "widgets," which offer fully implemented
-UI objects, like text fields and buttons. The ViewGroup class serves as the base for subclasses called "layouts,"
-which offer different kinds of layout architecture, like linear, tabular and relative.</p>
-
-<p>A View object is a data structure whose properties store the layout parameters and content for a specific 
-rectangular area of the screen. A View object handles its own measurement, layout, drawing, focus change, 
-scrolling, and key/gesture interactions for the rectangular area of the screen in which it resides. As an
-object in the user interface, a View is also a point of interaction for the user and the receiver
-of the interaction events.</p>
-
-
-<h2 id="ViewHierarchy">View Hierarchy</h2>
-
-<p>On the Android platform, you define an Activity's UI using a hierarchy of View and ViewGroup nodes, 
-as shown in the diagram below. This hierarchy tree can be as simple or complex as you need it to be, and you 
-can build it up using Android's set of predefined widgets and layouts, or with custom Views that you 
-create yourself.</p>
-
-<img src="{@docRoot}images/viewgroup.png" alt="" />
-
-<p>
-In order to attach the view hierarchy tree to the screen for rendering, your Activity must call the
-<code>{@link android.app.Activity#setContentView(int) setContentView()}</code> 
-method and pass a reference to the root node object. The Android system
-receives this reference and uses it to invalidate, measure, and draw the tree. The root node of the hierarchy requests 
-that its child nodes draw themselves &mdash; in turn, each view group node is responsible for calling 
-upon each of its own child views to draw themselves.
-The children may request a size and location within the parent, but the parent object has the final 
-decision on where how big each child can be.  Android parses 
-the elements of your layout in-order (from the top of the hierarchy tree), instantiating the Views and 
-adding them to their parent(s). Because these are drawn in-order, if there are elements that
-overlap positions, the last one to be drawn will lie on top of others previously drawn to that space.</p>
-
-<p>For a more detailed discussion on how view hierarchies are measured
-and drawn, read <a href="how-android-draws.html">How Android Draws Views</a>.</p>
-
-
-<h2 id="Layout">Layout</h2>
-
-<p>The most common way to define your layout and express the view hierarchy is with an XML layout file.
-XML offers a human-readable structure for the layout, much like HTML. Each element in XML is 
-either a View or ViewGroup object (or descendant thereof). View objects are leaves in the tree, 
-ViewGroup objects are branches in the tree (see the View Hierarchy figure above).</p>
-<p>The name of an XML element
-is respective to the Java class that it represents. So a <code>&lt;TextView></code> element creates
-a {@link android.widget.TextView} in your UI, and a <code>&lt;LinearLayout></code> element creates
-a {@link android.widget.LinearLayout} view group. When you load a layout resource, 
-the Android system initializes these run-time objects, corresponding to the elements in your layout.</p>
-
-<p>For example, a simple vertical layout with a text view and a button looks like this:</p>
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:layout_width="fill_parent" 
-              android:layout_height="fill_parent"
-              android:orientation="vertical" >
-    &lt;TextView android:id="@+id/text"
-              android:layout_width="wrap_content"
-              android:layout_height="wrap_content"
-              android:text="Hello, I am a TextView" />
-    &lt;Button android:id="@+id/button"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="Hello, I am a Button" />
-&lt;/LinearLayout>
-</pre>
-
-<p>Notice that the LinearLayout element contains both the TextView and the Button. You can nest
-another LinearLayout (or other type of view group) inside here, to lengthen the view hierarchy and create a more
-complex layout.</p>
-
-<p>For more on building a UI layout, read <a href="declaring-layout.html">XML Layouts</a>.
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <p><b>Tip:</b> You can also draw View and ViewGroups objects in Java code, 
-  using the <code>{@link android.view.ViewGroup#addView(View)}</code> methods 
-  to dynamically insert new View and ViewGroup objects.</p>
-</div>
-</div>
-
-<p>There are a variety of ways in which you can layout your views. Using more and different kinds of view groups,
-you can structure child views and view groups in an infinite number of ways.
-Some pre-defined view groups offered by Android (called layouts) include LinearLayout, RelativeLayout,
-TableLayout, GridLayout and others. Each offers a unique set of layout parameters that are used to define the
-positions of child views and layout structure.</p>
-<p>To learn about some of the different kinds of view groups used for a layout, 
-read <a href="layout-objects.html">Common Layout Objects</a>.</p>
-
-
-<h2 id="Widgets">Widgets</h2>
-
-<p>A widget is a View object that serves as an interface for interaction with the user. 
-Android provides a set of fully implemented 
-widgets, like buttons, checkboxes, and text-entry fields, so you can quickly build your UI. 
-Some widgets provided by Android are more complex, like a date picker, a clock, and zoom controls.
-But you're not limited to the kinds of widgets provided by the Android platform. If you'd
-like to do something more customized and create your own actionable elements, you can, by defining your own 
-View object or by extending and combining existing widgets.</p>
-<p>Read more in the <a href="custom-components.html">Custom Components</a> developer guide.</p>
-
-<p>For a list of the widgets provided by Android, see the {@link android.widget} package.</p>
-
-
-<h2 id="Events">Input Events</h2>
-
-<p>Once you've added some Views/widgets to the UI, you probably want to know about the 
-user's interaction with them, so you can perform actions. To be informed of user input events, you
-need to do one of two things:</p>
-<ul>
-  <li><strong>Define an event listener and register it with the View.</strong> More often than not,
-this is how you'll listen for events. The View class contains a collection of nested interfaces named
-On<em>&lt;something></em>Listener, each with a callback method called <code>On<em>&lt;something></em>()</code>.
-For example, {@link android.view.View.OnClickListener} (for handling "clicks" on a View),
-{@link android.view.View.OnTouchListener} (for handling touch screen events in a View), and
-{@link android.view.View.OnKeyListener} if you want to handle hardware key presses within a View. So if you want your View
-to be notified when it is "clicked" (such as when a button is selected), implement OnClickListener and define
-its <code>onClick()</code> callback method (where you perform the action upon click), and register it
-to the View with <code>{@link android.view.View#setOnClickListener(View.OnClickListener) setOnClickListener()}</code>.
-</li>
-  <li><strong>Override an existing callback method for the View.</strong> This is
-what you should do when you've implemented your own View class and want to listen for specific events 
-that occur within it. Example events you can handle include when the
-screen is touched (<code>{@link android.view.View#onTouchEvent(MotionEvent) onTouchEvent()}</code>), when
-the trackball is moved (<code>{@link android.view.View#onTrackballEvent(MotionEvent) onTrackballEvent()}</code>), 
-or when a <em>hardware</em> key on the device is pressed (<code>{@link android.view.View#onKeyDown(int, KeyEvent)
-onKeyDown()}</code>). This allows you to define the default behavior for each event inside your custom View and determine
-whether the event should be passed on to some other child View. Again, these are callbacks to the View class,
-so your only chance to define them is when you 
-<a href="{@docRoot}guide/topics/ui/custom-components.html">build a custom component</a>.
-</li>
-</ul>
-
-<p>Continue reading about handling user interaction with Views in the <a
-href="ui-events.html">Input Events</a> document.</p>
-
-
-<h2 id="Menus">Menus</h2>
-
-<p>Application menus are another important part of an application's UI. Menus offers a reliable interface that reveals
-application functions and settings. The most common application menu is revealed by pressing
-the <em>Menu</em> button on the device. However, you can also add Context Menus, which may be
-revealed when the user presses
-and holds down on an item.</p>
-
-<p>Menus are also structured using a View hierarchy, but you don't define this structure yourself. Instead,
-you define the <code>{@link android.app.Activity#onCreateOptionsMenu(Menu) onCreateOptionsMenu()}</code> or 
-<code>{@link android.app.Activity#onCreateContextMenu(ContextMenu,View,ContextMenu.ContextMenuInfo) onCreateContextMenu()}</code> 
-callback methods for your Activity and declare the items that you want to include in your menu. 
-At the appropriate time, Android will automatically create the necessary View hierarchy for the menu and 
-draw each of your menu items in it.</p>
-
-<p>Menus also handle their own events, so there's no need to register event listeners on the items in your menu.
-When an item in your menu is selected, the <code>{@link android.app.Activity#onOptionsItemSelected(MenuItem) 
-onOptionsItemSelected()}</code> or 
-<code>{@link android.app.Activity#onContextItemSelected(MenuItem) onContextItemSelected()}</code>
-method will be called by the framework.</p>
-
-<p>And just like your application layout, you have the option to declare the items for you menu in an XML file.</p>
-
-<p>Read <a href="{@docRoot}guide/topics/ui/menus.html">Menus</a> to learn more.</p>
-
-
-<h2 id="Advanced">Advanced Topics</h2>
-
-<p>Once you've grappled the fundamentals of creating a user interface, you can explore
-some advanced features for creating a more complex application interface.</p>
-
-<h3 id="Adapters">Adapters</h3>
-
-<p>Sometimes you'll want to populate a view group with some information that can't be hard-coded, instead, 
-you want to bind your view to an external source of data. To do this, you use an AdapterView as
-your view group and each child View is initialized and populated with data from the Adapter.</p>
-<p>The AdapterView object is an implementation of ViewGroup that determines its child views
-based on a given Adapter object. The Adapter acts like a courier between your data source (perhaps an
-array of external strings) and the AdapterView, which displays it. There are several implementations
-of the Adapter class, for specific tasks, such as the CursorAdapter for reading database data from a Cursor,
-or an ArrayAdapter for reading from an arbitrary array.</p>
-<p>To learn more about using an Adapter to populate your views, read 
-<a href="binding.html">Binding to Data with AdapterView</a>.</p>
-
-
-<h3 id="StylesAndThemes">Styles and Themes</h3>
-
-<p>Perhaps you're not satisfied with the look of the standard widgets. To revise them, you can create some 
-of your own styles and themes.</p>
-
-<ul>
-  <li>A style is a set of one or more formatting attributes that you can apply as a unit to individual elements 
-in your layout. For example, you could define a style that specifies a certain text size and color, then 
-apply it to only specific View elements.</li>
-  <li>A theme is a set of one or more formatting attributes that you can apply as a unit to all activities in 
-an application, or just a single activity. For example, you could define a theme that sets specific colors for 
-the window frame and the panel background, and sets text sizes and colors for menus. This theme can then be 
-applied to specific activities or the entire application.</li>
-</ul>
-
-<p>Styles and themes are resources. Android provides some default style and theme resources that you can use, 
-or you can declare your own custom style and theme resources.</p>
-<p>Learn more about using styles and themes in the
-<a href="themes.html">Styles and Themes</a> document.</p>
diff --git a/docs/html/guide/topics/ui/layout-objects.jd b/docs/html/guide/topics/ui/layout-objects.jd
index e251fe9..1d15ad6 100644
--- a/docs/html/guide/topics/ui/layout-objects.jd
+++ b/docs/html/guide/topics/ui/layout-objects.jd
@@ -1,291 +1,6 @@
-page.title=Common Layout Objects
+page.title=Layouts
 parent.title=User Interface
 parent.link=index.html
 @jd:body
 
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#framelayout">FrameLayout</a></li>
-    <li><a href="#linearlayout">LinearLayout</a></li>
-    <li><a href="#tablelayout">TableLayout</a></li>
-    <li><a href="#relativelayout">RelativeLayout</a></li>
-    <li><a href="#viewgroupsummary">Summary of Important View Groups</a></li>
-  </ol>
-</div>
-</div>
-
-<p>This section describes some of the more common types of layout objects
-to use in your applications. Like all layouts, they are subclasses of {@link android.view.ViewGroup ViewGroup}.</p>
-
-<p>Also see the <a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a> tutorials for
-some guidance on using more Android View layouts.</p>
-
-<h2 id="framelayout">FrameLayout</h2>
-<p>{@link android.widget.FrameLayout FrameLayout} is the simplest type of layout
-object. It's basically a blank space on your screen that you can
-later fill with a single object &mdash; for example, a picture that you'll swap in and out.
-All child elements of the FrameLayout are pinned to the top left corner of the screen; you cannot
-specify a different location for a child view. Subsequent child views will simply be drawn over previous ones,
-partially or totally obscuring them (unless the newer object is transparent).
-</p>
-
-
-<h2 id="linearlayout">LinearLayout</h2>
-<p>{@link android.widget.LinearLayout LinearLayout} aligns all children in a
-single direction &mdash; vertically or horizontally, depending on how you 
-define the <code>orientation</code> attribute. All children are
-stacked one after the other, so a vertical list will only have one child per
-row, no matter how wide they are, and a horizontal list will only be one row
-high (the height of the tallest child, plus padding). A {@link
-android.widget.LinearLayout LinearLayout} respects <em>margin</em>s between children
-and the <em>gravity</em> (right, center, or left alignment) of each child. </p>
-
-<p>{@link android.widget.LinearLayout LinearLayout} also supports assigning a
-<em>weight</em> to individual children. This attribute assigns an "importance" value to a view,
-and allows it to expand to fill any remaining space in the parent view. 
-Child views can specify an integer weight value, and then any remaining space in the view group is
-assigned to children in the proportion of their declared weight. Default
-weight is zero. For example, if there are three text boxes and two of
-them declare a weight of 1, while the other is given no weight (0), the third text box without weight
-will not grow and will only occupy the area required by its content.
-The other two will expand equally to fill the space remaining after all three boxes are measured. 
-If the third box is then given a weight of 2 (instead of 0), then it is now declared 
-"more important" than both the others, so it gets half the total remaining space, while the first two
-share the rest equally.</p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<p><strong>Tip</strong>: To create a proportionate size
-layout on the screen, create a container view group object with the 
-<code>layout_width</code> and <code>layout_height</code> attributes set to <var>fill_parent</var>; assign
-the children <code>height</code> or <code>width</code> to <code>0</code> (zero); then assign relative 
-<code>weight</code> values
-to each child, depending on what proportion of the screen each should
-have.</p>
-</div>
-</div>
-
-<p>The following two forms represent a {@link android.widget.LinearLayout LinearLayout} with a set of elements: a
-button, some labels and text boxes. The text boxes have their width set to <var>fill_parent</var>; other
-elements are set to <var>wrap_content</var>. The gravity, by default, is left. 
-The difference between the two versions of the form is that the form
-on the left has weight values unset (0 by default), while the form on the right has
-the comments text box weight set to 1. If the Name textbox had also been set
-to 1, the Name and Comments text boxes would be the same height. </p>
-
-<img src="{@docRoot}images/linearlayout.png" alt="" />
-
-<p>Within a horizontal {@link android.widget.LinearLayout LinearLayout}, items are aligned by the position of
-their text base line (the first line of the first list element &mdash; topmost or
-leftmost &mdash; is considered the reference line). This is so that people scanning
-elements in a form shouldn't have to jump up and down to read element text in
-neighboring elements. This can be turned off by setting
-<code>android:baselineAligned=&quot;false&quot;</code> in the layout XML. </p>
-
-<p>To view other sample code, see the 
-<a href="{@docRoot}resources/tutorials/views/hello-linearlayout.html">Hello LinearLayout</a> tutorial.</p>
-
-
-<h2 id="tablelayout">TableLayout</h2>
-<p>{@link android.widget.TableLayout} positions its children into rows
-    and columns. TableLayout containers do not display border lines for their rows, columns,
-    or cells. The table will have as many columns as the row with the most cells. A table can leave
-cells empty, but cells cannot span columns, as they can in HTML.</p>
-<p>{@link android.widget.TableRow} objects are the child views of a TableLayout
-(each TableRow defines a single row in the table).
-Each row has zero or more cells, each of which is defined by any kind of other View. So, the cells of a row may be
-composed of a variety of View objects, like ImageView or TextView objects.
-A cell may also be a ViewGroup object (for example, you can nest another TableLayout as a cell).</p>
-<p>The following sample layout has two rows and two cells in each. The accompanying screenshot shows the 
-result, with cell borders displayed as dotted lines (added for visual effect). </p>
-
-<table class="columns">
-    <tr>
-        <td>
-        <pre>
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:stretchColumns="1">
-    &lt;TableRow>
-        &lt;TextView
-            android:text="@string/table_layout_4_open"
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="@string/table_layout_4_open_shortcut"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:text="@string/table_layout_4_save"
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="@string/table_layout_4_save_shortcut"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-&lt;/TableLayout>
-</pre></td>
-        <td><img src="{@docRoot}images/table_layout.png" alt="" style="margin:0" /></td>
-    </tr>
-</table>
-
-<p>Columns can be hidden, marked to stretch and fill the available screen space,
-    or can be marked as shrinkable to force the column to shrink until the table
-    fits the screen. See the {@link android.widget.TableLayout TableLayout reference} 
-documentation for more details. </p>
-
-<p>To view sample code, see the <a href="{@docRoot}resources/tutorials/views/hello-tablelayout.html">Hello
-TableLayout</a> tutorial.</p>
-
-
-<h2 id="relativelayout">RelativeLayout</h2>
-<p>{@link android.widget.RelativeLayout} lets child views specify their
-    position relative to the parent view or to each other (specified by ID). So you can
-    align two elements by right border, or make one below another, centered in
-    the screen, centered left, and so on. Elements are rendered in the order given, so if the first element
-    is centered in the screen, other elements aligning themselves to that element
-    will be aligned relative to screen center. Also, because of this ordering, if using XML to specify this layout, 
-    the element that you will reference (in order to position other view objects) must be listed in the XML 
-file before you refer to it from the other views via its reference ID. </p>
-<p>The example below shows an XML file and the resulting screen in the UI. 
-Note that the attributes that refer to relative elements (e.g., <var>layout_toLeft</var>)
-refer to the ID using the syntax of a relative resource
-(<var>@id/<em>id</em></var>). </p>
-
-<table class="columns">
-    <tr>
-        <td>
-        <pre>
-&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android"
-                android:layout_width=&quot;fill_parent&quot; 
-                android:layout_height=&quot;wrap_content&quot;
-                android:background=&quot;@drawable/blue&quot;
-                android:padding=&quot;10px&quot; &gt;
-
-    &lt;TextView android:id=&quot;@+id/label&quot; 
-              android:layout_width=&quot;fill_parent&quot; 
-              android:layout_height=&quot;wrap_content&quot; 
-              android:text=&quot;Type here:&quot; /&gt;
-
-    &lt;EditText android:id=&quot;@+id/entry&quot; 
-              android:layout_width=&quot;fill_parent&quot; 
-              android:layout_height=&quot;wrap_content&quot; 
-              android:background=&quot;@android:drawable/editbox_background&quot;
-              android:layout_below=&quot;@id/label&quot; /&gt;
-  
-    &lt;Button android:id=&quot;@+id/ok&quot; 
-            android:layout_width=&quot;wrap_content&quot; 
-            android:layout_height=&quot;wrap_content&quot; 
-            android:layout_below=&quot;@id/entry&quot;
-            android:layout_alignParentRight=&quot;true&quot;
-            android:layout_marginLeft=&quot;10px&quot;
-            android:text=&quot;OK&quot; /&gt;
-
-    &lt;Button android:layout_width=&quot;wrap_content&quot; 
-            android:layout_height=&quot;wrap_content&quot;
-            android:layout_toLeftOf=&quot;@id/ok&quot;
-            android:layout_alignTop=&quot;@id/ok&quot;
-            android:text=&quot;Cancel&quot; /&gt;
-&lt;/RelativeLayout&gt;
-</pre></td>
-        <td><img src="{@docRoot}images/designing_ui_layout_example.png" alt="" style="margin:0"  /></td>
-    </tr>
-</table>
-
-
-<p>Some of these properties are supported directly by
-    the element, and some are supported by its LayoutParams member (subclass RelativeLayout
-    for all the elements in this screen, because all elements are children of a RelativeLayout
-    parent object). The defined RelativeLayout parameters are: <code>width</code>, <code>height</code>, 
-    <code>below</code>, <code>alignTop</code>, <code>toLeft</code>, <code>padding[Bottom|Left|Right|Top]</code>, 
-    and <code>margin[Bottom|Left|Right|Top]</code>. Note that some of these parameters specifically support
-    relative layout positions &mdash; their values must be the ID of the element to which you'd like this view laid relative.
-    For example, assigning the parameter <code>toLeft="my_button"</code> to a TextView would place the TextView to 
-    the left of the View with the ID <var>my_button</var> (which must be written in the XML <em>before</em> the TextView). </p>
-
-<p>To view this sample code, see the <a href="{@docRoot}resources/tutorials/views/hello-relativelayout.html">Hello
-RelativeLayout</a> tutorial.</p>
-
-
-<h2 id="viewgroupsummary">Summary of Important View Groups</h2>
-<p>These objects all hold child UI elements. Some provide their own form of a visible UI, while others
-    are invisible structures that only manage the layout of their child views.  </p>
-<table width="100%" border="1">
-    <tr>
-        <th scope="col">Class</th>
-        <th scope="col">Description</th>
-    </tr>
-    <tr>
-        <td>{@link android.widget.FrameLayout FrameLayout}</td>
-        <td>Layout that acts as a view frame to display
-            a single object. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.Gallery Gallery} </td>
-        <td>A horizontal scrolling display of images, from a bound list. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.GridView GridView} </td>
-        <td>Displays a scrolling grid of m columns and n rows.</td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.LinearLayout LinearLayout} </td>
-        <td>A layout that organizes its children into a single horizontal or vertical
-            row. It creates a scrollbar if the length of the window exceeds the length
-            of the screen. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.ListView ListView} </td>
-        <td>Displays a scrolling single column list. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.RelativeLayout RelativeLayout} </td>
-        <td>Enables you to specify the location of child objects relative to each
-            other (child A to the left of child B) or to the parent (aligned to the
-            top of the parent). </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.ScrollView ScrollView} </td>
-        <td>A vertically scrolling column of elements. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.Spinner Spinner} </td>
-        <td>Displays a single item at a time from a bound list, inside a one-row
-            textbox. Rather like a one-row listbox that can scroll either horizontally
-            or vertically. </td>
-    </tr>
-    <tr>
-        <td>{@link android.view.SurfaceView SurfaceView} </td>
-        <td>Provides direct access to a dedicated drawing surface. It can hold child
-            views layered on top of the surface, but is intended for applications
-            that need to draw pixels, rather than using widgets. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.TabHost TabHost} </td>
-        <td>Provides a tab selection list that monitors clicks and enables the application
-            to change the screen whenever a tab is clicked. </td>
-    </tr>
-	<tr>
-        <td>{@link android.widget.TableLayout TableLayout} </td>
-        <td>A tabular layout with an arbitrary number of rows and columns, each cell
-            holding the widget of your choice. The rows resize to fit the largest
-            column. The cell borders are not
-            visible. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.ViewFlipper ViewFlipper} </td>
-        <td>A list that displays one item at a time, inside a one-row textbox. It
-            can be set to swap items at timed intervals, like a slide show. </td>
-    </tr>
-    <tr>
-        <td>{@link android.widget.ViewSwitcher ViewSwitcher} </td>
-        <td>Same as ViewFlipper. </td>
-    </tr>
-</table>
+<p>You should have been redirected to <a href="declaring-layout.html">Layouts</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/layout/grid.jd b/docs/html/guide/topics/ui/layout/grid.jd
new file mode 100644
index 0000000..52f453b
--- /dev/null
+++ b/docs/html/guide/topics/ui/layout/grid.jd
@@ -0,0 +1,187 @@
+page.title=Table
+parent.title=Layouts
+parent.link=layout-objects.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+  <ol>
+    <li><a href="#example">Example</a></li>
+  </ol>
+  <h2>Key classes</h2>
+  <ol>
+  <li>{@link android.widget.TableLayout}</li>
+  <li>{@link android.widget.TableRow}</li>
+  <li>{@link android.widget.TextView}</li>
+  </ol>
+</div>
+</div>
+<p>{@link android.widget.TableLayout} is a {@link android.view.ViewGroup} that
+displays child {@link android.view.View} elements in rows and columns.</p>
+
+
+<img src="{@docRoot}images/ui/gridlayout.png" alt="" />
+
+<p>{@link android.widget.TableLayout} positions its children into rows
+    and columns. TableLayout containers do not display border lines for their rows, columns,
+    or cells. The table will have as many columns as the row with the most cells. A table can leave
+cells empty, but cells cannot span columns, as they can in HTML.</p>
+<p>{@link android.widget.TableRow} objects are the child views of a TableLayout
+(each TableRow defines a single row in the table).
+Each row has zero or more cells, each of which is defined by any kind of other View. So, the cells of a row may be
+composed of a variety of View objects, like ImageView or TextView objects.
+A cell may also be a ViewGroup object (for example, you can nest another TableLayout as a cell).</p>
+<p>The following sample layout has two rows and two cells in each. The accompanying screenshot shows the 
+result, with cell borders displayed as dotted lines (added for visual effect). </p>
+
+<table class="columns">
+    <tr>
+        <td>
+        <pre>
+&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
+&lt;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:stretchColumns="1">
+    &lt;TableRow>
+        &lt;TextView
+            android:text="@string/table_layout_4_open"
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="@string/table_layout_4_open_shortcut"
+            android:gravity="right"
+            android:padding="3dip" />
+    &lt;/TableRow>
+
+    &lt;TableRow>
+        &lt;TextView
+            android:text="@string/table_layout_4_save"
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="@string/table_layout_4_save_shortcut"
+            android:gravity="right"
+            android:padding="3dip" />
+    &lt;/TableRow>
+&lt;/TableLayout>
+</pre></td>
+        <td><img src="{@docRoot}images/table_layout.png" alt="" style="margin:0" /></td>
+    </tr>
+</table>
+
+<p>Columns can be hidden, marked to stretch and fill the available screen space,
+    or can be marked as shrinkable to force the column to shrink until the table
+    fits the screen. See the {@link android.widget.TableLayout TableLayout reference} 
+documentation for more details. </p>
+
+
+<h2 id="example">Example</h2>
+<ol>
+  <li>Start a new project named <em>HelloTableLayout</em>.</li>
+  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:stretchColumns="1">
+
+    &lt;TableRow>
+        &lt;TextView
+            android:layout_column="1"
+            android:text="Open..."
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="Ctrl-O"
+            android:gravity="right"
+            android:padding="3dip" />
+    &lt;/TableRow>
+
+    &lt;TableRow>
+        &lt;TextView
+            android:layout_column="1"
+            android:text="Save..."
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="Ctrl-S"
+            android:gravity="right"
+            android:padding="3dip" />
+    &lt;/TableRow>
+
+    &lt;TableRow>
+        &lt;TextView
+            android:layout_column="1"
+            android:text="Save As..."
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="Ctrl-Shift-S"
+            android:gravity="right"
+            android:padding="3dip" />
+    &lt;/TableRow>
+
+    &lt;View
+        android:layout_height="2dip"
+        android:background="#FF909090" />
+
+    &lt;TableRow>
+        &lt;TextView
+            android:text="X"
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="Import..."
+            android:padding="3dip" />
+    &lt;/TableRow>
+
+    &lt;TableRow>
+        &lt;TextView
+            android:text="X"
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="Export..."
+            android:padding="3dip" />
+        &lt;TextView
+            android:text="Ctrl-E"
+            android:gravity="right"
+            android:padding="3dip" />
+    &lt;/TableRow>
+
+    &lt;View
+        android:layout_height="2dip"
+        android:background="#FF909090" />
+
+    &lt;TableRow>
+        &lt;TextView
+            android:layout_column="1"
+            android:text="Quit"
+            android:padding="3dip" />
+    &lt;/TableRow>
+&lt;/TableLayout>
+</pre>
+<p>Notice how this resembles the structure of an HTML table. The {@link android.widget.TableLayout}
+element is like the HTML <code>&lt;table&gt;</code> element; {@link android.widget.TableRow} is like
+a <code>>&lt;tr>&gt;</code> element;
+but for the cells, you can use any kind of {@link android.view.View} element. In this example, a
+{@link android.widget.TextView} is used for each cell. In between some of the rows, there is also a
+basic {@link android.view.View}, which is used to draw a horizontal line.</p>
+
+</li>
+<li>Make sure your <em>HelloTableLayout</em> Activity loads this layout in the
+{@link android.app.Activity#onCreate(Bundle) onCreate()} method:
+<pre>
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+    setContentView(R.layout.main);
+}
+</pre>
+<p>The {@link android.app.Activity#setContentView(int)} method loads the
+layout file for the {@link android.app.Activity}, specified by the resource
+ID &mdash; <code>R.layout.main</code> refers to the <code>res/layout/main.xml</code> layout
+file.</p>
+</li>
+<li>Run the application.</li>
+</ol>
+<p>You should see the following:</p>
+<img src="images/hello-tablelayout.png" width="150px" />
+
+
+
diff --git a/docs/html/guide/topics/ui/layout/gridview.jd b/docs/html/guide/topics/ui/layout/gridview.jd
new file mode 100644
index 0000000..284a25a
--- /dev/null
+++ b/docs/html/guide/topics/ui/layout/gridview.jd
@@ -0,0 +1,191 @@
+page.title=Grid
+parent.title=Layouts
+parent.link=layout-objects.html
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+  <ol>
+    <li><a href="#example">Example</a></li>
+  </ol>
+  <h2>Key classes</h2>
+  <ol>
+	<li>{@link android.widget.GridView}</li>
+	<li>{@link android.widget.ImageView}</li>
+	<li>{@link android.widget.BaseAdapter}</li>
+  	<li>{@link android.widget.AdapterView.OnItemClickListener}</li>
+  </ol>
+</div>
+</div>
+<p>{@link android.widget.GridView} is a {@link android.view.ViewGroup} that displays items in a
+two-dimensional,
+scrollable grid. The grid items are automatically inserted to the layout using a {@link
+android.widget.ListAdapter}.</p>
+
+<img src="{@docRoot}images/ui/gridview.png" alt="" />
+
+
+<h2 id="example">Example</h2>
+<p>In this tutorial, you'll create a grid of image thumbnails. When an item is selected, a
+toast message will display the position of the image.</p>
+
+
+<ol>
+  <li>Start a new project named <em>HelloGridView</em>.</li>
+  <li>Find some photos you'd like to use, or <a
+href="{@docRoot}shareables/sample_images.zip">download these sample images</a>. Save the image files
+into the project's
+<code>res/drawable/</code> directory.</li>
+  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;GridView xmlns:android="http://schemas.android.com/apk/res/android" 
+    android:id="@+id/gridview"
+    android:layout_width="fill_parent" 
+    android:layout_height="fill_parent"
+    android:columnWidth="90dp"
+    android:numColumns="auto_fit"
+    android:verticalSpacing="10dp"
+    android:horizontalSpacing="10dp"
+    android:stretchMode="columnWidth"
+    android:gravity="center"
+/>
+</pre>
+  <p>This {@link android.widget.GridView} will fill the entire screen. The attributes are rather
+self explanatory. For more information about valid attributes, see the {@link
+android.widget.GridView} reference.</p>
+</li>
+  <li>Open <code>HelloGridView.java</code> and insert the following code for the
+{@link android.app.Activity#onCreate(Bundle) onCreate()} method:
+<pre>
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+    setContentView(R.layout.main);
+
+    GridView gridview = (GridView) findViewById(R.id.gridview);
+    gridview.setAdapter(new ImageAdapter(this));
+
+    gridview.setOnItemClickListener(new OnItemClickListener() {
+        public void onItemClick(AdapterView&lt;?> parent, View v, int position, long id) {
+            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
+        }
+    });
+}
+</pre>
+  <p>After the {@code main.xml} layout is set for the content view, the
+{@link android.widget.GridView} is captured from the layout with {@link
+android.app.Activity#findViewById(int)}. The {@link
+android.widget.GridView#setAdapter(T) setAdapter()} method then sets a custom adapter ({@code
+ImageAdapter}) as the source for all items to be displayed in the grid. The {@code ImageAdapter} is
+created in the next step.</p>
+<p>To do something when an item in the grid is clicked, the {@link
+android.widget.AdapterView#setOnItemClickListener(OnItemClickListener) setOnItemClickListener()}
+method is passed a new {@link android.widget.AdapterView.OnItemClickListener}. This anonymous
+instance defines the {@link
+android.widget.AdapterView.OnItemClickListener#onItemClick(AdapterView,View,int,long)
+onItemClick()} callback method to show a {@link android.widget.Toast} that displays the index
+position (zero-based) of the selected item (in a real world scenario, the position could be used to
+get the full sized
+image for some other task).</p>
+
+</li>
+<li>Create a new class called <code>ImageAdapter</code> that extends {@link
+android.widget.BaseAdapter}:
+<pre>
+public class ImageAdapter extends BaseAdapter {
+    private Context mContext;
+
+    public ImageAdapter(Context c) {
+        mContext = c;
+    }
+
+    public int getCount() {
+        return mThumbIds.length;
+    }
+
+    public Object getItem(int position) {
+        return null;
+    }
+
+    public long getItemId(int position) {
+        return 0;
+    }
+
+    // create a new ImageView for each item referenced by the Adapter
+    public View getView(int position, View convertView, ViewGroup parent) {
+        ImageView imageView;
+        if (convertView == null) {  // if it's not recycled, initialize some attributes
+            imageView = new ImageView(mContext);
+            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
+            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
+            imageView.setPadding(8, 8, 8, 8);
+        } else {
+            imageView = (ImageView) convertView;
+        }
+
+        imageView.setImageResource(mThumbIds[position]);
+        return imageView;
+    }
+
+    // references to our images
+    private Integer[] mThumbIds = {
+            R.drawable.sample_2, R.drawable.sample_3,
+            R.drawable.sample_4, R.drawable.sample_5,
+            R.drawable.sample_6, R.drawable.sample_7,
+            R.drawable.sample_0, R.drawable.sample_1,
+            R.drawable.sample_2, R.drawable.sample_3,
+            R.drawable.sample_4, R.drawable.sample_5,
+            R.drawable.sample_6, R.drawable.sample_7,
+            R.drawable.sample_0, R.drawable.sample_1,
+            R.drawable.sample_2, R.drawable.sample_3,
+            R.drawable.sample_4, R.drawable.sample_5,
+            R.drawable.sample_6, R.drawable.sample_7
+    };
+}
+</pre>
+<p>First, this implements some required methods inherited from {@link
+android.widget.BaseAdapter}. The constructor and {@link
+android.widget.Adapter#getCount()} are self-explanatory. Normally, {@link
+android.widget.Adapter#getItem(int)} should return the actual object at the specified position in
+the adapter, but it's ignored for this example. Likewise, {@link
+android.widget.Adapter#getItemId(int)} should return the row id of the item, but it's not
+needed here.</p>
+
+<p>The first method necessary is {@link android.widget.Adapter#getView(int,View,ViewGroup)
+getView()}. This method creates a new {@link android.view.View} for each image added to the {@code
+ImageAdapter}. When this is called, a {@link android.view.View} is passed in, which is normally a
+recycled object (at least after this has been called once), so there's a check to see if the
+object is null. If it <em>is</em> null, an {@link android.widget.ImageView} is instantiated and
+configured with desired properties for the image presentation:</p>
+<ul>
+  <li>{@link android.view.View#setLayoutParams(ViewGroup.LayoutParams)} sets
+the height and width for the View&mdash;this ensures that, no matter the size of the drawable, each
+image is resized and cropped to fit in these dimensions, as appropriate.</li>
+  <li>{@link android.widget.ImageView#setScaleType(ImageView.ScaleType)} declares that images should
+be cropped toward the center (if necessary).</li>
+  <li>{@link android.widget.ImageView#setPadding(int,int,int,int)} defines the padding for all
+sides. (Note that, if the images have different aspect-ratios, then less
+padding will cause for more cropping of the image if it does not match
+the dimensions given to the ImageView.)</li>
+</ul>
+
+<p>If the {@link android.view.View} passed to {@link
+android.widget.Adapter#getView(int,View,ViewGroup) getView()} is <em>not</em> null, then the local
+{@link android.widget.ImageView} is initialized with the recycled {@link android.view.View}
+object.</p>
+
+<p>At the end of the {@link android.widget.Adapter#getView(int,View,ViewGroup) getView()} method,
+the {@code
+position} integer passed into the method is used to select an image from the {@code mThumbIds}
+array, which is set as the image resource for the {@link android.widget.ImageView}.</p>
+<p>All that's left is to define the {@code mThumbIds} array of drawable resources.</p>
+</li>
+<li>Run the application.</li>
+</ol>
+
+<p>Try experimenting with the behaviors of the {@link android.widget.GridView} and {@link
+android.widget.ImageView} elements by adjusting their properties. For example, instead of using
+{@link android.view.View#setLayoutParams(ViewGroup.LayoutParams)}, try using
+{@link android.widget.ImageView#setAdjustViewBounds(boolean)}. </p>
+
+
diff --git a/docs/html/guide/topics/ui/layout/linear.jd b/docs/html/guide/topics/ui/layout/linear.jd
new file mode 100644
index 0000000..8e33706
--- /dev/null
+++ b/docs/html/guide/topics/ui/layout/linear.jd
@@ -0,0 +1,116 @@
+page.title=Linear Layout
+parent.title=Layouts
+parent.link=layout-objects.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Weight">Layout Weight</a></li>
+  <li><a href="#Example">Example</a></li>
+</ol>
+
+<h2>Key classes</h2>
+<ol>
+  <li>{@link android.widget.LinearLayout}</li>
+  <li>{@link android.widget.LinearLayout.LayoutParams}</li>
+</ol>
+</div>
+</div>
+
+<p>{@link android.widget.LinearLayout} is a view group that aligns all children in a single
+direction, vertically or horizontally. You can specify the layout direction with the
+<a href="{@docRoot}reference/android/widget/LinearLayout.html#attr_android:orientation">{@code
+android:orientation}</a> attribute.</p>
+
+<img src="{@docRoot}images/ui/linearlayout.png" alt="" />
+
+<p>All children of a {@link android.widget.LinearLayout} are
+stacked one after the other, so a vertical list will only have one child per
+row, no matter how wide they are, and a horizontal list will only be one row
+high (the height of the tallest child, plus padding). A {@link
+android.widget.LinearLayout LinearLayout} respects <em>margin</em>s between children
+and the <em>gravity</em> (right, center, or left alignment) of each child. </p>
+
+
+<h2 id="Weight">Layout Weight</h2>
+
+<div class="sidebox-wrapper">
+<div class="sidebox">
+  <h3>Equally weighted children</h3>
+<p>To create a linear layout in which each child uses the same amount of
+space on the screen, set the <a
+href="{@docRoot}reference/android/view/ViewGroup.LayoutParams.html#attr_android:layout_height"
+>{@code android:layout_height}</a> of each view to {@code "0dp"} (for a
+vertical layout) or the <a
+href="{@docRoot}reference/android/view/ViewGroup.LayoutParams.html#attr_android:layout_width"
+>{@code android:layout_width}</a> of each view to {@code "0dp"} (for a
+horizontal
+layout). Then set the <a
+href="{@docRoot}reference/android/widget/LinearLayout.LayoutParams.html#attr_android:layout_weight"
+>{@code android:layout_weight}</a> of each view to {@code "1"}.</p>
+</div>
+</div>
+
+
+<p>{@link android.widget.LinearLayout} also supports assigning a
+<em>weight</em> to individual children with the <a
+href="{@docRoot}reference/android/widget/LinearLayout.LayoutParams.html#attr_android:layout_weight"
+>{@code android:layout_weight}</a> attribute.
+This attribute assigns an "importance" value to a view in
+terms of how much space is should occupy on the screen. A larger weight value allows it to expand
+to fill any remaining space in the parent view. 
+Child views can specify a weight value, and then any remaining space in the view group is
+assigned to children in the proportion of their declared weight. Default
+weight is zero.</p>
+
+<p>For example, if there are three text fields and two of them declare a weight of 1, while the
+other is given no weight, the third text field without weight will not grow and will only occupy the
+area required by its content. The other two will expand equally to fill the space remaining after
+all three fields are measured. If the third field is then given a weight of 2 (instead of 0), then
+it is now declared more important than both the others, so it gets half the total remaining space,
+while the first two
+share the rest equally.</p>
+
+
+<h2 id="Example">Example</h2>
+
+<div class="figure" style="width:220px;margin-top:0">
+<img src="{@docRoot}images/ui/sample-linearlayout.png" alt="" />
+</div>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:paddingLeft="16dp"
+    android:paddingRight="16dp"
+    android:orientation="vertical" >
+    &lt;EditText
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/to" />
+    &lt;EditText
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/subject" />
+    &lt;EditText
+        android:layout_width="fill_parent"
+        android:layout_height="0dp"
+        android:layout_weight="1"
+        android:gravity="top"
+        android:hint="@string/message" />
+    &lt;Button
+        android:layout_width="100dp"
+        android:layout_height="wrap_content"
+        android:layout_gravity="right"
+        android:text="@string/send" />
+&lt;/LinearLayout>
+</pre>
+
+<p>For details about the attributes available to each child view of a {@link
+android.widget.LinearLayout}, see {@link android.widget.LinearLayout.LayoutParams}.</p>
+
+
diff --git a/docs/html/guide/topics/ui/layout/listview.jd b/docs/html/guide/topics/ui/layout/listview.jd
new file mode 100644
index 0000000..26a7597
--- /dev/null
+++ b/docs/html/guide/topics/ui/layout/listview.jd
@@ -0,0 +1,151 @@
+page.title=List View
+parent.title=Layouts
+parent.link=declaring-layout.html
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+  <ol>
+    <li><a href="#Loader">Using a Loader</a></li>
+    <li><a href="#Example">Example</a></li>
+  </ol>
+  <h2>Key classes</h2>
+  <ol>
+    <li>{@link android.widget.ListView}</li>
+    <li>{@link android.widget.Adapter}</li>
+    <li>{@link android.support.v4.content.CursorLoader}</li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a
+href="{@docRoot}guide/components/loaders.html">Loaders</a></li>
+  </ol>
+</div>
+</div>
+
+<p>{@link android.widget.ListView} is a view group that displays a list of
+scrollable items. The list items are automatically inserted to the list using an {@link
+android.widget.Adapter} that pulls content from a source such as an array or database query and
+converts each item result into a view that's placed into the list.</p>
+
+<img src="{@docRoot}images/ui/listview.png" alt="" />
+
+<h2 id="Loader">Using a Loader</h2>
+
+<p>Using a {@link
+android.support.v4.content.CursorLoader} is the standard way to query a {@link
+android.database.Cursor} as an asynchronous task in order to avoid blocking your app's main thread
+with the query. When the {@link android.support.v4.content.CursorLoader} receives the {@link
+android.database.Cursor} result, the {@link android.support.v4.app.LoaderManager.LoaderCallbacks
+LoaderCallbacks} receives a callback to {@link
+android.support.v4.app.LoaderManager.LoaderCallbacks#onLoadFinished onLoadFinished()}, which is
+where you update your {@link
+android.widget.Adapter} with the new {@link android.database.Cursor} and the list view then
+displays the results.</p>
+
+<p>Although the {@link android.support.v4.content.CursorLoader} APIs were first introduced in
+Android 3.0 (API level 11), they are also available in the <a
+href="{@docRoot}tools/extras/support-library.html">Support Library</a> so that your app may use them
+while supporting devices running Android 1.6 or higher.</p>
+
+<p>For more information about using a {@link
+android.support.v4.content.Loader} to asynchronously load data, see the <a
+href="{@docRoot}guide/components/loaders.html">Loaders</a> guide.</p>
+
+
+<h2 id="Example">Example</h2>
+
+<p>The following example uses {@link android.app.ListActivity}, which is an activity that includes
+a {@link android.widget.ListView} as its only layout element by default. It performs a query to
+the <a
+href="{@docRoot}guide/topics/providers/contacts-provider.html">Contacts
+Provider</a> for a list of names and phone numbers.</p>
+
+<p>The activity implements the {@link android.support.v4.app.LoaderManager.LoaderCallbacks
+LoaderCallbacks} interface in order to use a {@link android.support.v4.content.CursorLoader} that
+dynamically loads the data for the list view.</p>
+
+<pre>
+public class ListViewLoader extends ListActivity
+        implements LoaderManager.LoaderCallbacks&lt;Cursor> {
+
+    // This is the Adapter being used to display the list's data
+    SimpleCursorAdapter mAdapter;
+
+    // These are the Contacts rows that we will retrieve
+    static final String[] PROJECTION = new String[] {ContactsContract.Data._ID,
+            ContactsContract.Data.DISPLAY_NAME};
+
+    // This is the select criteria
+    static final String SELECTION = "((" + 
+            ContactsContract.Data.DISPLAY_NAME + " NOTNULL) AND (" +
+            ContactsContract.Data.DISPLAY_NAME + " != '' ))";
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Create a progress bar to display while the list loads
+        ProgressBar progressBar = new ProgressBar(this);
+        progressBar.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
+                LayoutParams.WRAP_CONTENT, Gravity.CENTER));
+        progressBar.setIndeterminate(true);
+        getListView().setEmptyView(progressBar);
+
+        // Must add the progress bar to the root of the layout
+        ViewGroup root = (ViewGroup) findViewById(android.R.id.content);
+        root.addView(progressBar);
+
+        // For the cursor adapter, specify which columns go into which views
+        String[] fromColumns = {ContactsContract.Data.DISPLAY_NAME};
+        int[] toViews = {android.R.id.text1}; // The TextView in simple_list_item_1
+
+        // Create an empty adapter we will use to display the loaded data.
+        // We pass null for the cursor, then update it in onLoadFinished()
+        mAdapter = new SimpleCursorAdapter(this, 
+                android.R.layout.simple_list_item_1, null,
+                fromColumns, toViews, 0);
+        setListAdapter(mAdapter);
+
+        // Prepare the loader.  Either re-connect with an existing one,
+        // or start a new one.
+        getLoaderManager().initLoader(0, null, this);
+    }
+
+    // Called when a new Loader needs to be created
+    public Loader&lt;Cursor> onCreateLoader(int id, Bundle args) {
+        // Now create and return a CursorLoader that will take care of
+        // creating a Cursor for the data being displayed.
+        return new CursorLoader(this, ContactsContract.Data.CONTENT_URI,
+                PROJECTION, SELECTION, null, null);
+    }
+
+    // Called when a previously created loader has finished loading
+    public void onLoadFinished(Loader&lt;Cursor> loader, Cursor data) {
+        // Swap the new cursor in.  (The framework will take care of closing the
+        // old cursor once we return.)
+        mAdapter.swapCursor(data);
+    }
+
+    // Called when a previously created loader is reset, making the data unavailable
+    public void onLoaderReset(Loader&lt;Cursor> loader) {
+        // This is called when the last Cursor provided to onLoadFinished()
+        // above is about to be closed.  We need to make sure we are no
+        // longer using it.
+        mAdapter.swapCursor(null);
+    }
+
+    &#64;Override 
+    public void onListItemClick(ListView l, View v, int position, long id) {
+        // Do something when a list item is clicked
+    }
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> Because this sample performs a query on the <a
+href="{@docRoot}guide/topics/providers/contacts-provider.html">Contacts
+Provider</a>, if you want to
+try this code, your app must request the {@link android.Manifest.permission#READ_CONTACTS}
+permission in the manifest file:<br/>
+<code>&lt;uses-permission android:name="android.permission.READ_CONTACTS" /></p>
+
diff --git a/docs/html/guide/topics/ui/layout/relative.jd b/docs/html/guide/topics/ui/layout/relative.jd
new file mode 100644
index 0000000..ee6cf02
--- /dev/null
+++ b/docs/html/guide/topics/ui/layout/relative.jd
@@ -0,0 +1,118 @@
+page.title=Relative Layout
+parent.title=Layouts
+parent.link=layout-objects.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+  <ol>
+    <li><a href="#Position">Positioning Views</a></li>
+    <li><a href="#Example">Example</a></li>
+  </ol>
+  <h2>Key classes</h2>
+  <ol>
+  <li>{@link android.widget.RelativeLayout}</li>
+  <li>{@link android.widget.RelativeLayout.LayoutParams}</li>
+  </ol>
+</div>
+</div>
+
+<p>{@link android.widget.RelativeLayout} is a view group that displays child views in relative
+positions. The position of each view can be specified as relative to sibling elements (such as to
+the left-of or below another view) or in positions relative to the parent {@link
+android.widget.RelativeLayout} area (such as aligned to the bottom, left of center).</p>
+
+<img src="{@docRoot}images/ui/relativelayout.png" alt="" />
+
+<p>A {@link android.widget.RelativeLayout} is a very powerful utility for designing a user interface
+because it can eliminate nested view groups and keep your layout hierarchy flat, which improves
+performance. If you find yourself using several nested {@link android.widget.LinearLayout} groups,
+you may be able to replace them with a single {@link android.widget.RelativeLayout}.</p>
+
+
+<h2 id="Position">Positioning Views</h2>
+
+<p>{@link android.widget.RelativeLayout} lets child views specify their position relative to the
+parent view or to each other (specified by ID). So you can align two elements by right border, or
+make one below another, centered in the screen, centered left, and so on. By default, all child
+views are drawn at the top-left of the layout, so you must define the position of each view
+using the various layout properties available from {@link
+android.widget.RelativeLayout.LayoutParams}.</p>
+ 
+<p>Some of the many layout properties available to views in a {@link android.widget.RelativeLayout}
+include:</p>
+<dl>
+  <dt><a
+href="{docRoot}reference/android/widget/RelativeLayout.LayoutParams.html#attr_android:layout_alignParentTop"
+>{@code android:layout_alignParentTop}</a></dt>
+    <dd>If {@code "true"}, makes the top edge of this view match the top edge of the parent. </dd>
+  <dt><a
+href="{docRoot}reference/android/widget/RelativeLayout.LayoutParams.html#attr_android:layout_centerVertical"
+>{@code android:layout_centerVertical}</a></dt>
+    <dd>If {@code "true"}, centers this child vertically within its parent.</dd>
+  <dt><a
+href="{docRoot}reference/android/widget/RelativeLayout.LayoutParams.html#attr_android:layout_below"
+>{@code android:layout_below}</a></dt>
+    <dd>Positions the top edge of this view below the view specified with a resource ID.</dd>
+  <dt><a
+href="{docRoot}reference/android/widget/RelativeLayout.LayoutParams.html#attr_android:layout_toRightOf"
+>{@code android:layout_toRightOf}</a></dt>
+    <dd>Positions the left edge of this view to the right of the view specified with a resource ID.</dd>
+</dl>
+
+<p>These are just a few examples. All layout attributes are documented at {@link
+android.widget.RelativeLayout.LayoutParams}.</p>
+
+<p>The value for each layout property is either a boolean to
+enable a layout position relative to the parent {@link android.widget.RelativeLayout} or an ID that
+references another view in the layout against which the view should be positioned.</p>
+
+<p>In your XML layout, dependencies against other views in the layout can be declared in any order.
+For example, you can declare that "view1" be positioned below "view2" even if "view2" is the last
+view declared in the hierarchy. The example below demonstrates such a scenario.</p>
+
+
+<h2 id="Example">Example</h2>
+
+<p>Each of the attributes that control the relative position of each view are emphasized.</p>
+<div class="figure" style="width:220px;margin-top:0">
+<img src="{@docRoot}images/ui/sample-relativelayout.png" alt="" />
+</div>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent"
+    android:paddingLeft="16dp"
+    android:paddingRight="16dp" >
+    &lt;EditText
+        android:id="@+id/name"
+        android:layout_width="fill_parent"
+        android:layout_height="wrap_content"
+        android:hint="@string/reminder" />
+    &lt;Spinner
+        android:id="@+id/dates"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        <strong>android:layout_below="@id/name"</strong>
+        <strong>android:layout_alignParentLeft="true"</strong>
+        <strong>android:layout_toLeftOf="@+id/times"</strong> />
+    &lt;Spinner
+        android:id="@id/times"
+        android:layout_width="96dp"
+        android:layout_height="wrap_content"
+        <strong>android:layout_below="@id/name"</strong>
+        <strong>android:layout_alignParentRight="true"</strong> />
+    &lt;Button
+        android:layout_width="96dp"
+        android:layout_height="wrap_content"
+        <strong>android:layout_below="@id/times"</strong>
+        <strong>android:layout_alignParentRight="true"</strong>
+        android:text="@string/done" />
+&lt;/RelativeLayout>
+</pre>
+
+<p>For details about all the layout attributes available to each child view of a {@link
+android.widget.RelativeLayout}, see {@link android.widget.RelativeLayout.LayoutParams}.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/ui/layout/tabs.jd b/docs/html/guide/topics/ui/layout/tabs.jd
new file mode 100644
index 0000000..62663de
--- /dev/null
+++ b/docs/html/guide/topics/ui/layout/tabs.jd
@@ -0,0 +1,219 @@
+page.title=Tabbed
+parent.title=Layouts
+parent.link=layout-objects.html
+@jd:body
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+  <ol>
+    <li><a href="#example">Example</a></li>
+  </ol>
+  <h2>Key classes</h2>
+  <ol>
+<li>{@link android.widget.TabWidget}</li>
+<li>{@link android.widget.TabHost}</li>
+<li>{@link android.widget.TabHost.TabSpec}</li>
+<li>{@link android.widget.FrameLayout}</li>
+  </ol>
+</div>
+</div>
+<p>To create a tabbed UI, you need to use a {@link android.widget.TabHost} and a {@link
+android.widget.TabWidget}. The {@link android.widget.TabHost} must be the root node for the layout,
+which contains both the {@link android.widget.TabWidget} for displaying the tabs and a {@link
+android.widget.FrameLayout} for displaying the tab content.</p>
+
+<img src="{@docRoot}images/ui/tabs.png" alt="" />
+
+<p>You can implement your tab content in one of two ways: use the tabs to swap
+{@link android.view.View}s within the same {@link android.app.Activity}, or use the tabs to change
+between entirely separate activities. Which method you want for your application will depend on your
+demands, but if each tab provides a distinct user activity, then it probably makes sense to use
+a separate {@link android.app.Activity} for each tab, so that you can better manage the application
+in discrete groups, rather than one massive application and layout.</p>
+<h2 id="example">Example</h2>
+<p>In this tutorial, you'll create a tabbed UI that uses a separate {@link
+android.app.Activity} for each tab.</p>
+
+<ol>
+  <li>Start a new project named <em>HelloTabWidget</em>.</li>
+  <li>First, create three separate {@link android.app.Activity} classes in your project:
+<code>ArtistsActivity</code>, <code>AlbumsActivity</code>, and <code>SongsActivity</code>. These
+will each represent a separate tab. For now, make each one display a simple message using a {@link
+android.widget.TextView}. For example:
+<pre>
+public class ArtistsActivity extends Activity {
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        TextView textview = new TextView(this);
+        textview.setText("This is the Artists tab");
+        setContentView(textview);
+    }
+}
+</pre>
+  <p>Notice that this doesn't use a layout file. Just create a {@link
+android.widget.TextView}, give it some text and set that as the content. Duplicate this for
+each of the three activities, and add the corresponding <code>&lt;activity/&gt;</code> tags to the Android Manifest file.</p>
+
+  <li>You need an icon for each of your tabs. For each icon, you should create two versions: one
+for when the tab is selected and one for when it is unselected. The
+general design recommendation is for the selected icon to be a dark color (grey), and the
+unselected icon to be a light color (white). (See the <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#tabstructure">Icon Design
+Guidelines</a>.) For example:
+  <p>
+  <img src="images/ic_tab_artists_white.png" title="unselected tab icon"  alt="" />
+  <img src="images/ic_tab_artists_grey.png" title="selected tab icon" alt="" />
+  </p>
+  <p>For this tutorial, you can copy these images and use them for all three tabs. (When you
+create tabs in your own application, you should create customized tab icons.)</p>
+  <p>Now create a <a
+href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state-list drawable</a>
+that specifies which image to use for each tab state:</p>
+  <ol>
+    <li>Save the icon images in your project <code>res/drawable/</code> directory.</li>
+    <li>Create a new XML file in <code>res/drawable/</code>
+named <code>ic_tab_artists.xml</code> and insert the following:
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;selector xmlns:android="http://schemas.android.com/apk/res/android">
+    &lt;!-- When selected, use grey -->
+    &lt;item android:drawable="@drawable/ic_tab_artists_grey"
+          android:state_selected="true" />
+    &lt;!-- When not selected, use white-->
+    &lt;item android:drawable="@drawable/ic_tab_artists_white" />
+&lt;/selector>
+</pre>
+  <p>This is a <a
+href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state-list drawable</a>,
+which you will apply as the tab image. When the tab state changes, the tab icon will
+automatically switch between the images defined here.</p>
+    </li>
+  </ol>
+  </li>
+
+  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
+  <pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;TabHost xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/tabhost"
+    android:layout_width="fill_parent"
+    android:layout_height="fill_parent">
+    &lt;LinearLayout
+        android:orientation="vertical"
+        android:layout_width="fill_parent"
+        android:layout_height="fill_parent"
+        android:padding="5dp">
+        &lt;TabWidget
+            android:id="@android:id/tabs"
+            android:layout_width="fill_parent"
+            android:layout_height="wrap_content" />
+        &lt;FrameLayout
+            android:id="@android:id/tabcontent"
+            android:layout_width="fill_parent"
+            android:layout_height="fill_parent"
+            android:padding="5dp" />
+    &lt;/LinearLayout>
+&lt;/TabHost>
+</pre>
+    <p>This is the layout that will display the tabs and provide navigation between each {@link
+    android.app.Activity} created above.</p>
+    <p>The {@link android.widget.TabHost} requires that a {@link android.widget.TabWidget} and a
+{@link android.widget.FrameLayout} both live somewhere within it. To position the {@link
+android.widget.TabWidget} and {@link android.widget.FrameLayout} vertically, a {@link
+android.widget.LinearLayout} is used. The {@link android.widget.FrameLayout} is where the content
+for each tab goes, which is empty now because the {@link android.widget.TabHost} will automatically
+embed each {@link android.app.Activity} within it.</p>
+    <p>Notice that the {@link android.widget.TabWidget} and the {@link android.widget.FrameLayout}
+    elements have the IDs {@code tabs} and {@code tabcontent}, respectively. These names
+    must be used so that the {@link android.widget.TabHost} can retrieve references to each of
+    them. It expects exactly these names.</p>
+  </li>
+
+  <li>Now open <code>HelloTabWidget.java</code> and make it extend {@link
+  android.app.TabActivity}:</p>
+<pre>
+public class HelloTabWidget extends TabActivity {
+</pre>
+  </li>
+  <li>Use the following code for the {@link android.app.Activity#onCreate(Bundle) onCreate()}
+  method:
+<pre>
+public void onCreate(Bundle savedInstanceState) {
+    super.onCreate(savedInstanceState);
+    setContentView(R.layout.main);
+
+    Resources res = getResources(); // Resource object to get Drawables
+    TabHost tabHost = getTabHost();  // The activity TabHost
+    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
+    Intent intent;  // Reusable Intent for each tab
+
+    // Create an Intent to launch an Activity for the tab (to be reused)
+    intent = new Intent().setClass(this, ArtistsActivity.class);
+
+    // Initialize a TabSpec for each tab and add it to the TabHost
+    spec = tabHost.newTabSpec("artists").setIndicator("Artists",
+                      res.getDrawable(R.drawable.ic_tab_artists))
+                  .setContent(intent);
+    tabHost.addTab(spec);
+
+    // Do the same for the other tabs
+    intent = new Intent().setClass(this, AlbumsActivity.class);
+    spec = tabHost.newTabSpec("albums").setIndicator("Albums",
+                      res.getDrawable(R.drawable.ic_tab_albums))
+                  .setContent(intent);
+    tabHost.addTab(spec);
+
+    intent = new Intent().setClass(this, SongsActivity.class);
+    spec = tabHost.newTabSpec("songs").setIndicator("Songs",
+                      res.getDrawable(R.drawable.ic_tab_songs))
+                  .setContent(intent);
+    tabHost.addTab(spec);
+
+    tabHost.setCurrentTab(2);
+}
+</pre>
+    <p>This sets up each tab with their text and icon, and assigns each one an {@link
+android.app.Activity}.</p>
+    <p>A reference to the {@link android.widget.TabHost} is first captured with {@link
+android.app.TabActivity#getTabHost()}. Then, for
+each tab, a {@link android.widget.TabHost.TabSpec} is created to define the tab properties. The
+{@link android.widget.TabHost#newTabSpec(String)} method creates a new {@link
+android.widget.TabHost.TabSpec} identified by the given string tag. For each
+{@link android.widget.TabHost.TabSpec}, {@link
+android.widget.TabHost.TabSpec#setIndicator(CharSequence,Drawable)} is called to set the text and
+icon for the tab, and {@link android.widget.TabHost.TabSpec#setContent(Intent)} is called to specify
+the {@link android.content.Intent} to open the appropriate {@link android.app.Activity}. Each
+{@link android.widget.TabHost.TabSpec} is then added to the {@link android.widget.TabHost} by
+calling {@link android.widget.TabHost#addTab(TabHost.TabSpec)}.</p>
+
+    <p>At the very end, {@link
+    android.widget.TabHost#setCurrentTab(int)} opens the tab to be displayed by default, specified
+    by the index position of the tab.</p>
+
+    <p>Notice that not once was the {@link android.widget.TabWidget} object referenced. This is
+    because a {@link android.widget.TabWidget} must always be a child of a {@link
+    android.widget.TabHost}, which is what you use for almost all interaction with the tabs. So when
+    a tab is added to the {@link android.widget.TabHost}, it's automatically added to the child
+    {@link android.widget.TabWidget}.</p>
+  </li>
+
+  <li>Now open the Android Manifest file and add the <code>NoTitleBar</code> theme to the
+<em>HelloTabWidget</em>'s
+  <code>&lt;activity></code> tag. This will remove the default application title from the top
+  of the layout, leaving more space for the tabs, which effectively operate as their own titles.
+  The <code>&lt;activity></code> tag should look like this:
+<pre>
+&lt;activity android:name=".HelloTabWidget" android:label="@string/app_name"
+          android:theme="&#64;android:style/Theme.NoTitleBar">
+</pre>
+  </li>
+
+  <li>Run the application.</li>
+</ol>
+
+
+<p>Your application should look like this (though your icons may be different):</p>
+<img src="images/hello-tabwidget.png" width="150px" />
+
+
diff --git a/docs/html/guide/topics/ui/menus.jd b/docs/html/guide/topics/ui/menus.jd
index d51a378..01d373e 100644
--- a/docs/html/guide/topics/ui/menus.jd
+++ b/docs/html/guide/topics/ui/menus.jd
@@ -1040,7 +1040,7 @@
 </pre>
 
 <p>Read more about writing intent filters in the
-<a href="/guide/topics/intents/intents-filters.html">Intents and Intent Filters</a> document.</p>
+<a href="/guide/components/intents-filters.html">Intents and Intent Filters</a> document.</p>
 
 <p>For a sample application using this technique, see the 
 <a href="{@docRoot}resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html">Note
diff --git a/docs/html/guide/topics/ui/notifiers/index.jd b/docs/html/guide/topics/ui/notifiers/index.jd
index c61d4f0..caf0df7 100644
--- a/docs/html/guide/topics/ui/notifiers/index.jd
+++ b/docs/html/guide/topics/ui/notifiers/index.jd
@@ -21,7 +21,7 @@
 <ul>
   <li>A <a href="#Toast">Toast Notification</a>, for brief messages that come 
   from the background.</li>
-  <li>A <a href="#StatusBar">Status Bar Notification</a>, for persistent reminders 
+  <li>A <a href="#StatusBar">Status Notification</a>, for persistent reminders 
   that come from the background and request the user's response.</li>
   <li>A <a href="#Dialog">Dialog Notification</a>, for Activity-related notifications.</li>
 </ul>
@@ -44,16 +44,16 @@
 when you're fairly certain the user is paying attention 
 to the screen. A toast can not accept user interaction events; if you'd like
 the user to respond and take action, consider using a 
-<a href="#StatusBar">Status Bar Notification</a> instead.</p>
+<a href="#StatusBar">Status Notification</a> instead.</p>
 
 <p>For more information, refer to <a href="toasts.html">Toast Notifications</a>.</p>
 
 
-<h2 id="StatusBar">Status Bar Notification</h2>
+<h2 id="StatusBar">Status Notification</h2>
 
 <img src="{@docRoot}images/notifications_window.png" alt="" style="float:right; clear:right;" />
 
-<p>A status bar notification adds an icon to the system's status bar 
+<p>A status notification adds an icon to the system's status bar 
 (with an optional ticker-text message) and an expanded message in the "Notifications" window.
 When the user selects the expanded message, Android fires an 
 {@link android.content.Intent} that is defined by the notification (usually to launch an 
@@ -68,7 +68,7 @@
 <a href="#Dialog">Dialog Notification</a> instead.</p>
 
 <p>For more information, refer to 
-<a href="notifications.html">Status Bar Notifications</a>.</p>
+<a href="notifications.html">Status Notifications</a>.</p>
 
 
 <h2 id="Dialog">Dialog Notification</h2>
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index d104b4b..52092f9 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -1,4 +1,4 @@
-page.title=Status Bar Notifications
+page.title=Status Notifications
 parent.title=Notifications
 parent.link=index.html
 @jd:body
@@ -7,7 +7,7 @@
   <div id="qv">
     <h2>Quickview</h2>
     <ul>
-      <li>A status bar notification allows your application to notify the user of an event
+      <li>A status notification allows your application to notify the user of an event
 without interupting their current activity</li>
       <li>You can attach an intent to your notification that the system will initiate when the
 user clicks it</li>
@@ -43,7 +43,7 @@
   </div>
 </div>
 
-<p>A status bar notification adds an icon to the system's status bar
+<p>A status notification adds an icon to the system's status bar
 (with an optional ticker-text message) and a notification message in the notifications window.
 When the user selects the notification, Android fires an
 {@link android.content.Intent} that is defined by the {@link android.app.Notification} (usually to
@@ -51,11 +51,11 @@
 You can also configure the notification to alert the user with a sound, a vibration, and flashing
 lights on the device.</p>
 
-<p>A status bar notification should be used for any case in
+<p>A status notification should be used for any case in
 which a background service needs to alert the user about an event that requires a response. A
 background service
 <strong>should never</strong> launch an activity on its own in order to receive user interaction.
-The service should instead create a status bar notification that will launch the activity
+The service should instead create a status notification that will launch the activity
 when selected by the user.</p>
 
 <p>Figure 1 shows the status bar with a notification icon on the left side.</p>
@@ -78,9 +78,9 @@
 
 <h2 id="Basics">The Basics</h2>
 
-<p>An {@link android.app.Activity} or {@link android.app.Service} can initiate a status bar
+<p>An {@link android.app.Activity} or {@link android.app.Service} can initiate a status
 notification. Because an activity can perform actions only while it is
-running in the foreground and its window has focus, you will usually create status bar notifications
+running in the foreground and its window has focus, you will usually create status notifications
 from a
 service. This way, the notification can be created from the background,
 while the user is using another application or
@@ -88,9 +88,9 @@
 classes: {@link android.app.Notification} and {@link android.app.NotificationManager}.</p>
 
 <p>Use an instance of the {@link android.app.Notification} class to define the properties of your
-status bar notification, such as the status bar icon, the notification message, and extra settings
+status notification, such as the status icon, the notification message, and extra settings
 such as a sound to play. The {@link android.app.NotificationManager} is an Android system service
-that executes and manages all status bar notifications. You do not instantiate the
+that executes and manages all status notifications. You do not instantiate the
 {@link android.app.NotificationManager} directly. In order
 to give it your {@link android.app.Notification}, you must retrieve a reference to the
 {@link android.app.NotificationManager} with
@@ -98,7 +98,7 @@
 then, when you want to notify the user, pass it your {@link android.app.Notification} with
 {@link android.app.NotificationManager#notify(int,Notification) notify()}. </p>
 
-<p>To create a status bar notification:</p>
+<p>To create a status notification:</p>
 <ol>
   <li>Get a reference to the {@link android.app.NotificationManager}:
 <pre>
@@ -277,7 +277,7 @@
 NotificationManager mNotificationManager = (NotificationManager) getSystemService(ns);
 </pre>
 
-<p>When you want to deliver your status bar notification, pass the {@link android.app.Notification}
+<p>When you want to deliver your status notification, pass the {@link android.app.Notification}
 to the {@link android.app.NotificationManager} with {@link
 android.app.NotificationManager#notify(int,Notification)}.
 The first parameter is the unique ID for the notification and the second is the {@link
@@ -287,7 +287,7 @@
 your application manages different kinds of notifications) select the appropriate action
 when the user returns to your application via the intent defined in the notification.</p>
 
-<p>To clear the status bar notification when the user selects it from the notifications
+<p>To clear the status notification when the user selects it from the notifications
 window, add the "FLAG_AUTO_CANCEL" flag to your {@link android.app.Notification}. You can
 also clear it manually with {@link android.app.NotificationManager#cancel(int)}, passing it the
 notification ID, or clear all your notifications with {@link
@@ -300,14 +300,14 @@
 message that is displayed in the status bar and notifications window, and any other
 alert settings, such as sounds and blinking lights.</p>
 
-<p>A status bar notification <em>requires</em> all of the following:</p>
+<p>A status notification <em>requires</em> all of the following:</p>
 <ul>
   <li>An icon for the status bar</li>
   <li>A title and message, unless you define a
     <a href="#CustomExpandedView">custom notification layout</a></li>
   <li>A {@link android.app.PendingIntent}, to be fired when the notification is selected</li>
 </ul>
-<p>Optional settings for the status bar notification include:</p>
+<p>Optional settings for the status notification include:</p>
 <ul>
   <li>A ticker-text message for the status bar</li>
   <li>An alert sound</li>
@@ -339,7 +339,7 @@
 
 <h3 id="Updating">Updating the notification</h3>
 
-<p>You can update the information in your status bar notification as events
+<p>You can update the information in your status notification as events
 continue to occur in your application. For example, when a new SMS text message arrives
 before previous messages have been read, the Messaging application updates the existing
 notification to display the total number of new messages received.
@@ -484,7 +484,7 @@
   your notification is on-going.</dd>
   <dt>{@link android.app.Notification#number} field</dt>
   <dd>This value indicates the current number of events represented by the notification.
-  The appropriate number is overlaid on top of the status bar icon.
+  The appropriate number is overlaid on top of the status icon.
   If you intend to use this field, then you must start with "1" when the Notification is first
   created. (If you change the value from zero to anything greater during an update, the number
   is not shown.)</dd>
diff --git a/docs/html/guide/topics/ui/overview.jd b/docs/html/guide/topics/ui/overview.jd
new file mode 100644
index 0000000..41f7cc7
--- /dev/null
+++ b/docs/html/guide/topics/ui/overview.jd
@@ -0,0 +1,74 @@
+page.title=UI Overview
+@jd:body
+
+
+<p>All user interface elements in an Android app are built using {@link android.view.View} and
+{@link android.view.ViewGroup} objects. A {@link android.view.View} is an object that draws
+something on the screen that the user can interact with. A {@link android.view.ViewGroup} is an
+object that holds other {@link android.view.View} (and {@link android.view.ViewGroup}) objects in
+order to define the layout of the interface.</p>
+
+<p>Android provides a collection of both {@link android.view.View} and {@link
+android.view.ViewGroup} subclasses that offer you common input controls (such as buttons and text
+fields) and various layout models (such as a linear or relative layout).</p>
+
+
+<h2 id="Layout">User Interface Layout</h2>
+
+<p>The user interface for each component of your app is defined using a hierarchy of {@link
+android.view.View} and {@link android.view.ViewGroup} objects, as shown in figure 1. Each view group
+is an invisible container that organizes child views, while the child views may be input
+controls or other widgets that
+draw some part of the UI. This hierarchy tree can be as simple or complex as you need
+it to be (but simplicity is best for performance).</p>
+
+<img src="{@docRoot}images/viewgroup.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> Illustration of a view hierarchy, which defines a
+UI layout.</p>
+
+<p>To declare your layout, you can instantiate {@link android.view.View} objects in code and start
+building a tree, but the easiest and most effective way to define your layout is with an XML file.
+XML offers a human-readable structure for the layout, similar to HTML.</p>
+
+<p>The name of an XML element for a view is respective to the Android class it represents. So a
+<code>&lt;TextView&gt;</code> element creates a {@link android.widget.TextView} widget in your UI,
+and a <code>&lt;LinearLayout&gt;</code> element creates a {@link android.widget.LinearLayout} view
+group. </p>
+
+<p>For example, a simple vertical layout with a text view and a button looks like this:</p>
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+              android:layout_width="fill_parent" 
+              android:layout_height="fill_parent"
+              android:orientation="vertical" >
+    &lt;TextView android:id="@+id/text"
+              android:layout_width="wrap_content"
+              android:layout_height="wrap_content"
+              android:text="I am a TextView" />
+    &lt;Button android:id="@+id/button"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="I am a Button" />
+&lt;/LinearLayout>
+</pre>
+
+<p>When you load a layout resource in your app, Android initializes each node of the layout into a
+runtime object you can use to define additional behaviors, query the object state, or modify the
+layout.</p>
+
+<p>For a complete guide to creating a UI layout, see <a href="declaring-layout.html">XML
+Layouts</a>.
+
+  
+<h2 id="UIComponents">User Interface Components</h2>
+
+<p>You don't have to build all of your UI using {@link android.view.View} and {@link
+android.view.ViewGroup} objects. Android provides several app components that offer
+a standard UI layout for which you simply need to define the content. These UI components each
+have a unique set of APIs that are described in their respective documents, such as <a
+href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>, <a
+href="{@docRoot}guide/topics/ui/dialogs.html">Dialogs</a>, and <a
+href="{@docRoot}guide/topics/ui/notifiers/notifications.html">Status Notifications</a>.</p>
+
+
diff --git a/docs/html/guide/topics/ui/sharables/sample_images.zip b/docs/html/guide/topics/ui/sharables/sample_images.zip
new file mode 100644
index 0000000..007a68a
--- /dev/null
+++ b/docs/html/guide/topics/ui/sharables/sample_images.zip
Binary files differ
diff --git a/docs/html/guide/topics/usb/accessory.jd b/docs/html/guide/topics/usb/accessory.jd
deleted file mode 100644
index 8b74bc0..0000000
--- a/docs/html/guide/topics/usb/accessory.jd
+++ /dev/null
@@ -1,462 +0,0 @@
-page.title=USB Accessory
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li>
-          <a href="#choosing">Choosing the Right USB Accessory APIs</a>
-
-          <ol>
-            <li><a href="#installing">Installing the Google APIs add-on library</a></li>
-          </ol>
-        </li>
-
-        <li>
-          <a href="#api">API Overview</a>
-
-          <ol>
-            <li><a href="#usage">Usage differences between the add-on library and the platform
-            APIs</a></li>
-          </ol>
-        </li>
-
-        <li><a href="#manifest">Android Manifest Requirements</a></li>
-
-        <li>
-          <a href="#working-a">Working with accessories</a>
-
-          <ol>
-            <li><a href="#discovering-a">Discovering an accessory</a></li>
-
-            <li><a href="#permission-a">Obtaining permission to communicate with an
-            accessory</a></li>
-
-            <li><a href="#communicating-a">Communicating with an accessory</a></li>
-
-            <li><a href="#terminating-a">Terminating communication with an accessory</a></li>
-          </ol>
-        </li>
-      </ol>
-
-      <h2>See also</h2>
-
-      <ol>
-        <li><a href="http://accessories.android.com/demokit">Android USB Accessory Development
-        Kit</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>USB accessory mode allows users to connect
-  USB host hardware specifically designed for Android-powered devices. The accessories must adhere
-  to the Android accessory protocol outlined in the <a href=
-  "http://accessories.android.com/demokit">Android Accessory Development Kit</a> documentation.
-  This allows Android-powered devices that cannot act as a USB host to still interact with USB
-  hardware. When an Android-powered device is in USB accessory mode, the attached Android USB
-  accessory acts as the host, provides power to the USB bus, and enumerates connected devices.
-  Android 3.1 (API level 12) supports USB accessory mode and the feature is also backported to
-  Android 2.3.4 (API level 10) to enable support for a broader range of devices.</p>
-
-  <h2 id="choosing">Choosing the Right USB Accessory APIs</h2>
-
-  <p>Although the USB accessory APIs were introduced to the platform in Android 3.1, they are also
-  available in Android 2.3.4 using the Google APIs add-on library. Because these APIs were
-  backported using an external library, there are two packages that you can import to support USB
-  accessory mode. Depending on what Android-powered devices you want to support, you might have to
-  use one over the other:</p>
-
-  <ul>
-    <li><code>com.android.future.usb</code>: To support USB accessory mode in Android 2.3.4, the
-    <a href="http://code.google.com/android/add-ons/google-apis/index.html">Google APIs add-on
-    library</a> includes the backported USB accessory APIs and they are contained in this
-    namespace. Android 3.1 also supports importing and calling the classes within this namespace to
-    support applications written with the add-on library. This add-on library is a thin wrapper
-    around the {@link android.hardware.usb} accessory APIs and does not support USB host mode. If
-    you want to support the widest range of devices that support USB accessory mode, use the add-on
-    library and import this package. It is important to note that not all Android 2.3.4 devices are
-    required to support the USB accessory feature. Each individual device manufacturer decides
-    whether or not to support this capability, which is why you must declare it in your manifest
-    file.</li>
-
-    <li>{@link android.hardware.usb}: This namespace contains the classes that support USB
-    accessory mode in Android 3.1. This package is included as part of the framework APIs, so
-    Android 3.1 supports USB accessory mode without the use of an add-on library. Use this package
-    if you only care about Android 3.1 or newer devices that have hardware support for USB
-    accessory mode, which you can declare in your manifest file.</li>
-  </ul>
-
-  <h3 id="installing">Installing the Google APIs add-on library</h3>
-
-  <p>If you want to install the add-on, you can do so by installing the Google APIs Android API 10
-  package with the SDK Manager. See <a href=
-  "http://code.google.com/android/add-ons/google-apis/installing.html">Installing the Google APIs
-  Add-on</a> for more information on installing the add-on library.</p>
-
-  <h2 id="api">API Overview</h2>
-
-  <p>Because the add-on library is a wrapper for the framework APIs, the classes that support the
-  USB accessory feature are similar. You can use the reference documentation for the {@link
-  android.hardware.usb} even if you are using the add-on library.</p>
-
-  <p class="note"><strong>Note:</strong> There is, however, a minor <a href="#usage">usage
-  difference</a> between the add-on library and framework APIs that you should be aware of.</p>
-
-  <p>The following table describes the classes that support the USB accessory APIs:</p>
-
-  <table>
-    <tr>
-      <th>Class</th>
-
-      <th>Description</th>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbManager}</td>
-
-      <td>Allows you to enumerate and communicate with connected USB accessories.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbAccessory}</td>
-
-      <td>Represents a USB accessory and contains methods to access its identifying
-      information.</td>
-    </tr>
-  </table>
-
-  <h3 id="usage">Usage differences between the add-on library and platform APIs</h3>
-
-  <p>There are two usage differences between using the Google APIs add-on library and the platform
-  APIs.</p>
-
-  <p>If you are using the add-on library, you must obtain the {@link
-  android.hardware.usb.UsbManager} object in the following manner:</p>
-  <pre>
-UsbManager manager = UsbManager.getInstance(this);
-</pre>
-
-  <p>If you are not using the add-on library, you must obtain the {@link
-  android.hardware.usb.UsbManager} object in the following manner:</p>
-  <pre>
-UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
-</pre>
-
-  <p>When you filter for a connected accessory with an intent filter, the {@link
-  android.hardware.usb.UsbAccessory} object is contained inside the intent that is passed to your
-  application. If you are using the add-on library, you must obtain the {@link
-  android.hardware.usb.UsbAccessory} object in the following manner:</p>
-  <pre>
-UsbAccessory accessory = UsbManager.getAccessory(intent);
-</pre>
-
-  <p>If you are not using the add-on library, you must obtain the {@link
-  android.hardware.usb.UsbAccessory} object in the following manner:</p>
-  <pre>
-UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
-</pre>
-
-  <h2 id="manifest">Android Manifest requirements</h2>
-
-  <p>The following list describes what you need to add to your application's manifest file before
-  working with the USB accesory APIs. The <a href="#manifest-example">manifest and resource file
-  examples</a> show how to declare these items:</p>
-
-  <ul>
-    <li>Because not all Android-powered devices are guaranteed to support the USB accessory APIs,
-    include a <code>&lt;uses-feature&gt;</code> element that declares that your application uses
-    the <code>android.hardware.usb.accessory</code> feature.</li>
-
-    <li>If you are using the 
-    <a href="http://code.google.com/android/add-ons/google-apis/index.html">add-on library</a>,
-    add the <code>&lt;uses-library&gt;</code> element specifying
-    <code>com.android.future.usb.accessory</code> for the library.</li>
-
-    <li>Set the minimum SDK of the application to API Level 10 if you are using the add-on library
-    or 12 if you are using the {@link android.hardware.usb} package.</li>
-
-    <li>
-      <p>If you want your application to be notified of an attached USB accessory, specify an
-      <code>&lt;intent-filter&gt;</code> and <code>&lt;meta-data&gt;</code> element pair for the
-      <code>android.hardware.usb.action.USB_ACCESSORY_ATTACHED</code> intent in your main activity.
-      The <code>&lt;meta-data&gt;</code> element points to an external XML resource file that
-      declares identifying information about the accessory that you want to detect.</p>
-
-      <p>In the XML resource file, declare <code>&lt;usb-accessory&gt;</code> elements for the
-      accessories that you want to filter. Each <code>&lt;usb-accessory&gt;</code> can have the
-      following attributes:</p>
-
-      <ul>
-        <li><code>manufacturer</code></li>
-
-        <li><code>model</code></li>
-
-        <li><code>version</code></li>
-      </ul>
-
-      <p>Save the resource file in the <code>res/xml/</code> directory. The resource file name
-      (without the .xml extension) must be the same as the one you specified in the
-      <code>&lt;meta-data&gt;</code> element. The format for the XML resource file is also shown in
-      the <a href="#example">example</a> below.</p>
-    </li>
-  </ul>
-
-  <h3 id="manifest-example">Manifest and resource file examples</h3>
-
-  <p>The following example shows a sample manifest and its corresponding resource file:</p>
-  <pre>
-&lt;manifest ...&gt;
-    &lt;uses-feature android:name="android.hardware.usb.accessory" /&gt;
-    <!-- version must be either 10 or 12 -->
-    &lt;uses-sdk android:minSdkVersion="&lt;<em>version</em>&gt;" /&gt;
-    ...
-    &lt;application&gt;
-      &lt;uses-library android:name="com.android.future.usb.accessory" /&gt;
-        &lt;activity ...&gt;
-            ...
-            &lt;intent-filter&gt;
-                &lt;action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /&gt;
-            &lt;/intent-filter&gt;
-
-            &lt;meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
-                android:resource="@xml/accessory_filter" /&gt;
-        &lt;/activity&gt;
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-  <p>In this case, the following resource file should be saved in
-  <code>res/xml/accessory_filter.xml</code> and specifies that any accessory that has the
-  corresponding model, manufacturer, and version should be filtered. The accessory sends these
-  attributes the Android-powered device:</p>
-  <pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;resources&gt;
-    &lt;usb-accessory model="DemoKit" manufacturer="Google" version="1.0"/&gt;
-&lt;/resources&gt;
-</pre>
-
-  <h2 id="working-a">Working with Accessories</h2>
-
-  <p>When users connect USB accessories to an Android-powered device, the Android system can
-  determine whether your application is interested in the connected accessory. If so, you can set
-  up communication with the accessory if desired. To do this, your application has to:</p>
-
-  <ol>
-    <li>Discover connected accessories by using an intent filter that filters for accessory
-    attached events or by enumerating connected accessories and finding the appropriate one.</li>
-
-    <li>Ask the user for permission to communicate with the accessory, if not already
-    obtained.</li>
-
-    <li>Communicate with the accessory by reading and writing data on the appropriate interface
-    endpoints.</li>
-  </ol>
-
-  <h3 id="discovering-a">Discovering an accessory</h3>
-
-  <p>Your application can discover accessories by either using an intent filter to be notified when
-  the user connects an accessory or by enumerating accessories that are already connected. Using an
-  intent filter is useful if you want to be able to have your application automatically detect a
-  desired accessory. Enumerating connected accessories is useful if you want to get a list of all
-  connected accessories or if your application did not filter for an intent.</p>
-
-  <h4 id="discover-a-intent">Using an intent filter</h4>
-
-  <p>To have your application discover a particular USB accessory, you can specify an intent filter
-  to filter for the <code>android.hardware.usb.action.USB_ACCESSORY_ATTACHED</code> intent. Along
-  with this intent filter, you need to specify a resource file that specifies properties of the USB
-  accessory, such as manufacturer, model, and version. When users connect an accessory that matches
-  your accessory filter,</p>
-
-  <p>The following example shows how to declare the intent filter:</p>
-  <pre>
-&lt;activity ...&gt;
-    ...
-    &lt;intent-filter&gt;
-        &lt;action android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED" /&gt;
-    &lt;/intent-filter&gt;
-
-    &lt;meta-data android:name="android.hardware.usb.action.USB_ACCESSORY_ATTACHED"
-        android:resource="@xml/accessory_filter" /&gt;
-&lt;/activity&gt;
-</pre>
-
-  <p>The following example shows how to declare the corresponding resource file that specifies the
-  USB accessories that you're interested in:</p>
-  <pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;resources&gt;
-    &lt;usb-accessory manufacturer="Google, Inc." model="DemoKit" version="1.0" /&gt;
-&lt;/resources&gt;
-</pre>
-
-  <p>In your activity, you can obtain the {@link android.hardware.usb.UsbAccessory} that represents
-  the attached accessory from the intent like this (with the add-on library):</p>
-  <pre>
-UsbAccessory accessory = UsbManager.getAccessory(intent);
-</pre>
-
-  <p>or like this (with the platform APIs):</p>
-  <pre>
-UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
-</pre>
-
-  <h4 id="discover-a-enumerate">Enumerating accessories</h4>
-
-  <p>You can have your application enumerate accesories that have identified themselves while your
-  application is running.</p>
-
-  <p>Use the {@link android.hardware.usb.UsbManager#getAccessoryList() getAccessoryList()} method
-  to get an array all the USB accessories that are connected:</p>
-  <pre>
-UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
-UsbAccessory[] accessoryList = manager.getAcccessoryList();
-</pre>
-
-  <p class="note"><strong>Note:</strong> Currently, only one connected accessory is supported at
-  one time, but the API is designed to support multiple accessories in the future.</p>
-
-  <h3 id="permission-a">Obtaining permission to communicate with an accessory</h3>
-
-  <p>Before communicating with the USB accessory, your applicaton must have permission from your
-  users.</p>
-
-  <p class="note"><strong>Note:</strong> If your application <a href="#using-intents">uses an
-  intent filter</a> to discover accessories as they're connected, it automatically receives
-  permission if the user allows your application to handle the intent. If not, you must request
-  permission explicitly in your application before connecting to the accessory.</p>
-
-  <p>Explicitly asking for permission might be neccessary in some situations such as when your
-  application enumerates accessories that are already connected and then wants to communicate with
-  one. You must check for permission to access an accessory before trying to communicate with it.
-  If not, you will receive a runtime error if the user denied permission to access the
-  accessory.</p>
-
-  <p>To explicitly obtain permission, first create a broadcast receiver. This receiver listens for
-  the intent that gets broadcast when you call {@link
-  android.hardware.usb.UsbManager#requestPermission requestPermission()}. The call to {@link
-  android.hardware.usb.UsbManager#requestPermission requestPermission()} displays a dialog to the
-  user asking for permission to connect to the accessory. The following sample code shows how to
-  create the broadcast receiver:</p>
-  <pre>
-private static final String ACTION_USB_PERMISSION =
-    "com.android.example.USB_PERMISSION";
-private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
- 
-    public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-        if (ACTION_USB_PERMISSION.equals(action)) {
-            synchronized (this) {
-                UsbAccessory accessory = (UsbAccessory) intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
-
-                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
-                    if(accessory != null){
-                        //call method to set up accessory communication
-                    }
-                }
-                else {
-                    Log.d(TAG, "permission denied for accessory " + accessory);
-                }
-            }
-        }
-    }
-};
-</pre>
-
-  <p>To register the broadcast receiver, put this in your <code>onCreate()</code> method in your
-  activity:</p>
-  <pre>
-UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
-private static final String ACTION_USB_PERMISSION =
-    "com.android.example.USB_PERMISSION";
-...
-mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
-IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
-registerReceiver(mUsbReceiver, filter);
-</pre>
-
-  <p>To display the dialog that asks users for permission to connect to the accessory, call the
-  {@link android.hardware.usb.UsbManager#requestPermission requestPermission()} method:</p>
-  <pre>
-UsbAccessory accessory;
-...
-mUsbManager.requestPermission(accessory, mPermissionIntent);
-</pre>
-
-  <p>When users reply to the dialog, your broadcast receiver receives the intent that contains the
-  {@link android.hardware.usb.UsbManager#EXTRA_PERMISSION_GRANTED} extra, which is a boolean
-  representing the answer. Check this extra for a value of true before connecting to the
-  accessory.</p>
-
-  <h3 id="communicating-a">Communicating with an accessory</h3>
-
-  <p>You can communicate with the accessory by using the {@link android.hardware.usb.UsbManager} to
-  obtain a file descriptor that you can set up input and output streams to read and write data to
-  descriptor. The streams represent the accessory's input and output bulk endpoints. You should set
-  up the communication between the device and accessory in another thread, so you don't lock the
-  main UI thread. The following example shows how to open an accessory to communicate with:</p>
-  <pre>
-UsbAccessory mAccessory;
-ParcelFileDescriptor mFileDescriptor;
-FileInputStream mInputStream;
-FileOutputStream mOutputStream;
-
-...
-
-private void openAccessory() {
-    Log.d(TAG, "openAccessory: " + accessory);
-    mFileDescriptor = mUsbManager.openAccessory(mAccessory);
-    if (mFileDescriptor != null) {
-        FileDescriptor fd = mFileDescriptor.getFileDescriptor();
-        mInputStream = new FileInputStream(fd);
-        mOutputStream = new FileOutputStream(fd);
-        Thread thread = new Thread(null, this, "AccessoryThread");
-        thread.start();
-    }
-}
-</pre>
-
-  <p>In the thread's <code>run()</code> method, you can read and write to the accessory by using
-  the {@link java.io.FileInputStream} or {@link java.io.FileOutputStream} objects. When reading
-  data from an accessory with a {@link java.io.FileInputStream} object, ensure that the buffer that
-  you use is big enough to store the USB packet data. The Android accessory protocol supports
-  packet buffers up to 16384 bytes, so you can choose to always declare your buffer to be of this
-  size for simplicity.</p>
-
-  <p class="note"><strong>Note:</strong> At a lower level, the packets are 64 bytes for USB
-  full-speed accessories and 512 bytes for USB high-speed accessories. The Android accessory
-  protocol bundles the packets together for both speeds into one logical packet for simplicity.</p>
-
-  <p>For more information about using threads in Android, see <a href=
-  "{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes and
-  Threads</a>.</p>
-
-  <h3 id="terminating-a">Terminating communication with an accessory</h3>
-
-  <p>When you are done communicating with an accessory or if the accessory was detached, close the
-  file descriptor that you opened by calling {@link android.os.ParcelFileDescriptor#close close()}.
-  To listen for detached events, create a broadcast receiver like below:</p>
-  <pre>
-BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
-    public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction(); 
-
-        if (UsbManager.ACTION_USB_ACCESSORY_DETACHED.equals(action)) {
-            UsbAccessory accessory = (UsbAccessory)intent.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
-            if (accessory != null) {
-                // call your method that cleans up and closes communication with the accessory
-            }
-        }
-    }
-};
-</pre>
-
-  <p>Creating the broadcast receiver within the application, and not the manifest, allows your
-  application to only handle detached events while it is running. This way, detached events are
-  only sent to the application that is currently running and not broadcast to all applications.</p>
-
diff --git a/docs/html/guide/topics/usb/adk.jd b/docs/html/guide/topics/usb/adk.jd
deleted file mode 100644
index c8949a3..0000000
--- a/docs/html/guide/topics/usb/adk.jd
+++ /dev/null
@@ -1,916 +0,0 @@
-page.title=Android Open Accessory Development Kit
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#components">ADK Components</a></li>
-        <li>
-
-          <a href="#getting-started">Getting Started with the ADK</a>
-
-          <ol>
-            <li><a href="#installing">Installing the Arduino software and necessary
-            libraries</a></li>
-
-            <li><a href="#installing-firmware">Installing the firmware to the ADK board</a></li>
-
-            <li><a href="#running-demokit">Running the DemoKit Android application</a></li>
-
-            <li><a href="#monitoring">Monitoring the ADK board</a></li>
-          </ol>
-        </li>
-
-        <li>
-          <a href="#accessory-protocol">Implementing the Android Accessory Protocol</a>
-
-          <ol>
-            <li><a href="#wait">Wait for and detect connected devices</a></li>
-
-            <li><a href="#determine">Determine the connected device's accessory mode
-            support</a></li>
-
-            <li><a href="#start">Attempt to start the device in accessory mode</a></li>
-
-            <li><a href="#establish">Establish communication with the device</a></li>
-          </ol>
-        </li>
-
-        <li>
-          <a href="#firmware">How the ADK board implements the Android Accessory Protocol</a>
-
-          <ol>
-            <li><a href="#wait-adk">Wait for and detect connected devices</a></li>
-
-            <li><a href="#determine-adk">Determine the connected device's accessory mode
-            support</a></li>
-
-            <li><a href="#start-adk">Attempt to start the device in accessory mode</a></li>
-
-            <li><a href="#establish-adk">Establish communication with the device</a></li>
-          </ol>
-        </li>
-      </ol>
-
-      <h2>Download</h2>
-      <ol>
-        <li><a href="https://dl-ssl.google.com/android/adk/adk_release_0512.zip">ADK package</a></li>
-      </ol>
-
-      <h2>See also</h2>
-
-      <ol>
-        <li><a href="http://www.youtube.com/watch?v=s7szcpXf2rE">Google I/O Session Video</a></li>
-        <li><a href="{@docRoot}guide/topics/usb/accessory.html">USB Accessory Dev Guide</a></li>
-      </ol>
-
-      <h2>Where to buy</h2>
-
-      <ol>
-
-      <li><a href="http://store.arduino.cc/">
-        Arduino Store</a></li>
-
-      <li><a href="https://store.diydrones.com/ProductDetails.asp?ProductCode=BR-PhoneDrone">
-        DIY Drones</a></li>
-
-      <li><a href=
-        "http://mbed.org/order/">
-        mbed</a></li>
-
-      <li><a href=
-        "http://www.microchip.com/android">
-        Microchip</a></li>
-
-      <li><a href="http://shop.moderndevice.com/products/freeduino-usb-host-board">
-        Modern Device</a></li>
-
-      <li><a href=
-        "http://www.rt-net.jp/shop/index.php?main_page=product_info&cPath=3_4&products_id=1">
-        RT Corp</a></li>
-
-      <li><a href="http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html">
-        Seeed Studio</a></li>
-
-      <li><a href="http://www.sparkfun.com/products/10748">
-        SparkFun</a></li>
-
-      <li><a href="http://troido.de/de/shoplsmallgbuy-android-stufflsmallg">
-        Troido</a></li>
-
-      </ol>
-    </div>
-  </div>
-
-  <p>The Android 3.1 platform (also backported to Android 2.3.4) introduces Android Open Accessory
-  support, which allows external USB hardware (an Android USB accessory) to interact with an
-  Android-powered device in a special "accessory" mode. When an Android-powered powered device is
-  in accessory mode, the connected accessory acts as the USB host (powers the bus and enumerates
-  devices) and the Android-powered device acts as the USB device. Android USB accessories are
-  specifically designed to attach to Android-powered devices and adhere to a simple protocol
-  (Android accessory protocol) that allows them to detect Android-powered devices that support
-  accessory mode. Accessories must also provide 500mA at 5V for charging power. Many previously
-  released Android-powered devices are only capable of acting as a USB device and cannot initiate
-  connections with external USB devices. Android Open Accessory support overcomes this limitation
-  and allows you to build accessories that can interact with an assortment of Android-powered
-  devices by allowing the accessory to initiate the connection.</p>
-
-  <p class="note"><strong>Note:</strong> Accessory mode is ultimately dependent on the device's
-  hardware and not all devices will support accessory mode. Devices that support accessory mode can
-  be filtered using a <code>&lt;uses-feature&gt;</code> element in your corresponding application's
-  Android manifest. For more information, see the <a href=
-  "{@docRoot}guide/topics/usb/accessory.html#manifest">USB Accessory</a> Developer Guide.</p>
-
-  <p>The following list of distributers are currently producing Android Open Accessory compatible
-  development boards:</p>
-
-  <ul>
-
-    <li>The <a href="http://store.arduino.cc/">Arduino Store</a> provides the Arduino Mega ADK
-    (in <a href="http://store.arduino.cc/eu/index.php?main_page=product_info&cPath=11_12&products_id=144">EU nations</a>
-    or <a href="http://store.arduino.cc/ww/index.php?main_page=product_info&cPath=11_12&products_id=144">non-EU nations</a>)
-    that is based on the ATmega2560 and supports the ADK firmware.</li>
-
-    <li><a href="https://store.diydrones.com/ProductDetails.asp?ProductCode=BR-PhoneDrone">DIY
-    Drones</a> provides an Arduino-compatible board geared towards RC (radio controlled) and UAV
-    (unmanned aerial vehicle) enthusiasts.</li>
-
-    <li><a href="http://mbed.org/order/">mbed</a> provides a microcontroller and a library
-    to develop accessories that support the Android accessory protocol. For more information, see
-    <a href="http://mbed.org/cookbook/mbed-with-Android-ADK">mbed with the Android ADK</a>.
-    </li>
-
-    <li><a href="http://www.microchip.com/android">Microchip</a> provides a PIC based USB
-    microcontroller board.</li>
-
-    <li><a href="http://shop.moderndevice.com/products/freeduino-usb-host-board">Modern
-    Device</a> provides an Arduino-compatible board that supports the ADK firmware.</li>
-
-    <li><a href="http://www.rt-net.jp/shop/index.php?main_page=product_info&cPath=3_4&products_id=1">
-    RT Corp</a> provides an Arduino-compatible board based on the Android ADK board design.</li>
-
-    <li><a href="http://www.seeedstudio.com/depot/seeeduino-adk-main-board-p-846.html">
-    Seeed Studio</a> provides an Arduino-compatible board that supports the ADK firmware.</li>
-
-    <li><a href="http://www.sparkfun.com/products/10748">
-    SparkFun</a>'s IOIO board now has beta support for the ADK firmware.</li>
-
-  </ul>
-
-  <p>We expect more hardware distributers to create a variety of kits, so please stay tuned for
-  further developments.</p>
-
-  <h2 id="components">ADK Components</h2>
-  <p>The Android Open Accessory Development Kit (ADK) provides an implementation of an Android USB
-  accessory that is based on the <a href="http://www.arduino.cc/">Arduino open source electronics
-  prototyping platform</a>, the accessory's hardware design files, code that implements the
-  accessory's firmware, and the Android application that interacts with the accessory. The hardware
-  design files and firmware code are contained in the <a href=
-  "https://dl-ssl.google.com/android/adk/adk_release_0512.zip">ADK package download</a>.</p>
-  <p>The main hardware and software components of the ADK include:</p>
-
-  <ul>
-    <li>A USB micro-controller board that is based on the Arduino Mega2560 and Circuits@Home USB
-    Host Shield designs (now referred to as the ADK board), which you will later implement as an
-    Android USB accessory. The ADK board provides input and output pins that you can implement
-    through the use of attachments called "shields." Custom firmware, written in C++, is installed
-    on the board to define the board's functionality and interaction with the attached shield and
-    Android-powered device. The hardware design files for the board are located in
-    <code>hardware/</code> directory.</li>
-
-    <li>An Android Demo Shield (ADK shield) that affixes atop the ADK board implements the input
-    and output points on the board. These implementations include a joystick, LED outputs, and
-    temperature and light sensors. You can create or buy your own shields or wire your own features
-    to the ADK board to implement custom functionality. The hardware design files for the shield
-    are located in <code>hardware/</code>.</li>
-
-    <li>A library based on the <a href=
-    "http://www.circuitsathome.com/arduino_usb_host_shield_projects">Arduino USB Host Shield</a>
-    library provides the logic for the USB micro-controller board to act as a USB Host. This allows
-    the board to initiate transactions with USB devices. Describing how to use this entire library
-    is out of the scope of this document. Where needed, this document points out important
-    interactions with the library. For more information, see the source code for the Arduino USB
-    Host Shield library in the <code>firmware/arduino_libs/USB_Host_Shield</code> directory.</li>
-
-    <li>An Arduino sketch, <code>firmware/demokit/demokit.pde</code>, defines the firmware that
-    runs on the ADK board and is written in C++. The sketch calls the Android accessory protocol
-    library to interact with the Android-powered device. It also sends data from the ADK board and
-    shield to the Android application and receives data from the Android application and outputs it
-    to the ADK board and shield.</li>
-
-    <li>The Android accessory protocol library, which is located in the
-    <code>firmware/arduino_libs/AndroidAccessory</code> directory. This library defines how to
-    enumerate the bus, find a connected Android-powered device that supports accessory mode, and
-    how to setup communication with the device.</li>
-
-    <li>Other third party libraries to support the ADK board's functionality:
-      <ul>
-        <li><a href="http://www.arduino.cc/playground/Main/CapSense">CapSense library</a></li>
-
-        <li><a href="http://www.arduino.cc/playground/Learning/I2C">I2C / TWI (Two-Wire Interface)
-        library</a></li>
-
-        <li><a href="http://www.arduino.cc/playground/ComponentLib/Servo">Servo library</a></li>
-
-        <li><a href="http://www.arduino.cc/playground/Code/Spi">Spi library</a></li>
-
-        <li><a href="http://www.arduino.cc/en/Reference/Wire">Wire library</a></li>
-
-        <li>An Android application, DemoKit, that communicates with the ADK board and shield. The
-        source for this project is in the <code>app/</code> directory.</li>
-      </ul>
-    </li>
-
-  </ul>
-
-  <h2 id="getting-started">Getting Started with the ADK</h2>
-
-  <p>The following sections describe how to install the Arduino software on your computer, use the
-  Arduino software to install the ADK board's firmware, and install and run the accompanying
-  Android application for the ADK board. Before you begin, download the following items to set up
-  your development environment:</p>
-
-  <ul>
-    <li><a href="http://www.arduino.cc/en/Main/software">Arduino Software</a>: contains libraries
-    and an IDE for coding and installing firmware to the ADK board.</li>
-
-    <li><a href="http://www.arduino.cc/playground/Main/CapSense">CapSense library</a>: contains the
-    libraries to sense human capacitance. This is needed for the capacative button that is located
-    on the ADK shield.</li>
-
-    <li><a href="https://dl-ssl.google.com/android/adk/adk_release_0512.zip">The ADK package</a>: contains the firmware for the ADK board and hardware design
-    files for the ADK board and shield.</li>
-  </ul>
-
-  <h3 id="installing">Installing the Arduino software and necessary libraries</h3>
-
-  <p>To install the Arduino software:</p>
-
-  <ol>
-    <li>
-      <a href="http://arduino.cc/en/Guide/HomePage">Download and install</a> the Arduino Software
-      as described on the Arduino website.
-
-      <p class="note"><strong>Note:</strong> If you are on a Mac, install the FTDI USB Serial
-      Driver that is included in the Arduino package, even though the installation instructions say
-      otherwise.</p>
-    </li>
-
-    <li><a href="https://dl-ssl.google.com/android/adk/adk_release_0512.zip">Download</a> and
-    extract the ADK package to a directory of your choice. You should have an <code>app</code>,
-    <code>firmware</code>, and <code>hardware</code> directories.</li>
-
-    <li>Extract the CapSense download to a directory of your choice.</li>
-
-    <li>Install the necessary libraries:
-
-      <p>On Windows:</p>
-
-      <ol type="a">
-        <li>Copy the <code>firmware/arduino_libs/AndroidAccessory</code> and
-        <code>firmware/arduino_libs/USB_Host_Shield</code> directories (the complete directories,
-        not just the files within) to the <code>&lt;arduino_installation_root&gt;/libraries/</code>
-        directory.</li>
-
-        <li>Create a CapSense directory in the
-        <code>&lt;arduino_installation_root&gt;/libraries/</code> directory</li>
-
-        <li>Copy <code>CapSense.cpp</code> and <code>CapSense.h</code> from the unzipped CapSense
-        download to the <code>CapSense</code> directory.</li>
-      </ol>
-
-      <p>On Mac:</p>
-
-      <ol type="a">
-        <li>Create, if it does not already exist, an <code>Arduino</code>
-        directory inside your user account's <code>Documents</code> directory, and within
-        that, a <code>libraries</code> directory.</li>
-
-        <li>Copy the <code>firmware/arduino_libs/AndroidAccessory</code> and
-        <code>firmware/arduino_libs/USB_Host_Shield</code> directories (the
-        complete directories, not just the files within) to your
-        <code>Documents/Arduino/libraries/</code> directory.</li>
-
-        <li>Create a <code>CapSense</code> directory in your
-        <code>Documents/Arduino/libraries/</code> directory.</li>
-
-        <li>Copy <code>CapSense.cpp</code> and <code>CapSense.h</code> from the unzipped CapSense
-        download to the <code>CapSense</code> directory.</li>
-      </ol>
-
-      <p>On Linux (Ubuntu):</p>
-
-      <ol type="a">
-        <li>Copy the <code>firmware/arduino_libs/AndroidAccessory</code> and
-        <code>firmware/arduino_libs/USB_Host_Shield</code> directories (the complete directories,
-        not just the files within) to the <code>&lt;arduino_installation_root&gt;/libraries/</code>
-        directory.</li>
-
-        <li>Create a <code>CapSense</code> directory in the
-        <code>&lt;arduino_installation_root&gt;/libraries/</code> directory.</li>
-
-        <li>Copy <code>CapSense.cpp</code> and <code>CapSense.h</code> from the unzipped CapSense
-        download to the <code>CapSense</code> directory.</li>
-
-        <li>Install the avr-libc library by entering <code>sudo apt-get install avr-libc</code>
-        from a shell prompt.</li>
-      </ol>
-    </li>
-  </ol>
-
-  <p>You should now have three new directories in the Arduino libraries directory:
-  <code>AndroidAccessory</code>, <code>USB_Host_Shield</code>, and <code>CapSense</code>.</p>
-
-  <h3 id="installing-firmware">Installing the firmware to the ADK board</h3>
-
-  <p>To install the firmware to the ADK board:</p>
-
-  <ol>
-    <li>Connect the ADK board to your computer using the micro-USB port, which allows two-way
-    communication and provides power to the ADK board.</li>
-
-    <li>Launch Arduino.</li>
-
-    <li>Click <strong>Tools &gt; Board &gt; Arduino Mega 2560</strong> to specify the ADK board's
-    type.</li>
-
-    <li>Select the appropriate USB port:
-
-      <ul>
-        <li>On Windows: click <strong>Tools &gt; Serial Port &gt; COM#</strong> to specify the port
-        of communication. The COM port number varies depending on your computer. COM1 is usually
-        reserved for serial port connections. You most likely want COM2 or COM3.</li>
-
-        <li>On Mac: Click <strong>Tools &gt; Serial Port &gt; dev/tty.usbserial-###</strong> to
-        specify the port of communication.</li>
-
-        <li>On Linux (Ubuntu): Click <strong>Tools &gt; Serial Port &gt; dev/ttyUSB#</strong> to
-        specify the port of communication.</li>
-      </ul>
-    </li>
-
-    <li>To open the firmware code (a sketch), click <strong>File &gt; Open</strong> and select
-    <code>firmware/demokit/demokit.pde</code>.</li>
-
-    <li>Click <strong>Sketch &gt; Verify/Compile</strong> to ensure that the sketch has no
-    errors.</li>
-
-    <li>Select <strong>File &gt; Upload to I/O Board</strong>. When Arduino outputs <strong>Done
-    uploading.</strong>, the board is ready to communicate with your Android-powered device.</li>
-  </ol>
-
-  <h3 id="running-demokit">Running the DemoKit Android application</h3>
-
-  <p>The DemoKit Android application runs on your Android-powered device and communicates with the
-  ADK board. The ADK board receives commands such as lighting up the board's LEDs or sends data
-  from the board such as joystick movement and temperature readings.</p>
-
-  <p>To install and run the application in Eclipse:</p>
-
-  <ol>
-    <li><a href="http://code.google.com/android/add-ons/google-apis/installing.html">Install the
-    Google APIs API Level 10 add-on library</a>, which includes the Open Accessory library for
-    2.3.4 devices that support accessory mode. This library is also forward compatible with Android
-    3.1 or newer devices that support accessory mode. If you only care about Android 3.1 or newer
-    devices, all you need is API Level 12. For more information on deciding which API level to use,
-    see the <a href="{@docRoot}guide/topics/usb/accessory.html#choosing">USB Accessory</a>
-    documentation.</li>
-
-    <li>Click <strong>File &gt; New &gt; Project...</strong>, then select <strong>Android &gt;
-    Android Project</strong></li>
-
-    <li>In the <strong>Project name:</strong> field, type DemoKit.</li>
-
-    <li>Choose <strong>Create project from existing source</strong>, click <strong>Browse</strong>,
-    select the <code>app</code> directory, click <strong>Open</strong> to close that dialog and then
-    click <strong>Finish</strong>.</li>
-
-    <li>For Build Target, select <strong>Google APIs</strong> (Platform 2.3.3, API Level 10).
-
-      <p class="note"><strong>Note:</strong> Even though the add-on is labeled as
-      <strong>2.3.3</strong>, the newest Google API add-on library for API level 10 adds USB Open
-      Accessory API support for 2.3.4 devices.</p>
-    </li>
-
-    <li>Click <strong>Finish</strong>.</li>
-
-    <li>Install the application to your device.</li>
-
-    <li>Connect the ADK board (USB-A) to your Android-powered device (micro-USB). Ensure that the
-    power cable to the accessory is plugged in or that the micro-USB port on the accesory is
-    connected to your computer for power (this also allows you to <a href="#monitoring">monitor the
-    ADK board</a>). When connected, accept the prompt that asks for whether or not to open the
-    DemoKit application to connect to the accessory. If the prompt does not show up, connect and
-    reconnect the accessory.</li>
-  </ol>
-
-  <p>You can now interact with the ADK board by moving the color LED or servo sliders (make sure
-  the servos are connected) or by pressing the relay buttons in the application. On the ADK shield,
-  you can press the buttons and move the joystick to see their outputs displayed in the
-  application.</p>
-
-  <h3 id="monitoring">Monitoring the ADK Board</h3>
-
-  <p>The ADK firmware consists of a few files that you should be looking at if you want to build
-  your own accessory. The files in the <code>firmware/arduino_libs/AndroidAccessory</code>
-  directory are the most important files and have the logic to detect and connect to
-  Android-powered devices that support accessory mode. Feel free to add debug statements (Arduino
-  <code>Serial.print()</code> statements) to the code located in the
-  <code>arduino_libraries_directory/AndroidAccessory</code> directory and
-  <code>firmware/demokit/demokit.pde</code> sketch and re-upload the sketch to the ADK board to
-  discover more about how the firmware works.</p>
-
-  <p>You can view the debug statements in the Arduino Serial Monitor by clicking <strong>Tools &gt;
-  Serial Monitor</strong> and setting the baud to 115200. The following sections about how
-  accessories communicate with Android-powered devices describe much of what you should be doing in
-  your own accessory.</p>
-
-  <h2 id="accessory-protocol">Implementing the Android Accessory Protocol</h2>
-
-  <p>An Android USB accessory must adhere to Android Accessory Protocol, which defines how
-  an accessory detects and sets up communication with an Android-powered device. In general, an
-  accessory should carry out the following steps:</p>
-
-  <ol>
-    <li>Wait for and detect connected devices</li>
-
-    <li>Determine the device's accessory mode support</li>
-
-    <li>Attempt to start the device in accessory mode if needed</li>
-
-    <li>Establish communication with the device if it supports the Android accessory protocol</li>
-  </ol>
-
-  <p>The following sections go into depth about how to implement these steps.</p>
-
-  <h3 id="wait">Wait for and detect connected devices</h3>
-
-  <p>Your accessory should have logic to continuously check
-  for connected Android-powered devices. When a device is connected, your accessory should
-  determine if the device supports accessory mode.</p>
-
-  <h3 id="determine">Determine the device's accessory mode support</h3>
-
-
-  <p>When an Android-powered device is connected, it can be in one of three states:</p>
-
-  <ol type="a">
-    <li>The attached device supports Android accessory mode and is already in accessory mode.</li>
-
-    <li>The attached device supports Android accessory mode, but it is not in accessory mode.</li>
-
-    <li>The attached device does not support Android accessory mode.</li>
-  </ol>
-
-  <p>During the initial connection, the accessory should check the vendor and product IDs of the
-  connected device's USB device descriptor. The vendor ID should match Google's ID (0x18D1) and the
-  product ID should be 0x2D00 or 0x2D01 if the device is already in accessory mode (case A). If so,
-  the accessory can now <a href="#establish">establish communication with the device</a> through
-  bulk transfer endpoints with its own communication protocol. There is no need to start the device
-  in accessory mode.</p>
-
-  <p class="note"><strong>Note:</strong> 0x2D00 is reserved for Android-powered devices that
-  support accessory mode. 0x2D01 is reserved for devices that support accessory mode as well as the
-  ADB (Android Debug Bridge) protocol, which exposes a second interface with two bulk endpoints for
-  ADB. You can use these endpoints for debugging the accessory application if you are simulating
-  the accessory on a computer. In general, do not use this interface unless your accessory is
-  implementing a passthrough to ADB on the device.</p>
-
-  <p>If the vendor and product ID do not match, there is no way to distinguish between states b and
-  c, so the accessory <a href="#start">attempts to start the device in accessory mode</a> to figure
-  out if the device is supported.</p>
-
-  <h3 id="start">Attempt to start the device in accessory mode</h3>
-
-  <p>If the vendor and product IDs do not correspond to an Android-powered device in accessory
-  mode, the accessory cannot discern whether the device supports accessory mode and is not in that
-  state, or if the device does not support accessory mode at all. This is because devices that
-  support accessory mode but aren't in it initially report the device's manufacturer vendor ID and
-  product ID, and not the special Android Open Accessory ones. In either case, the accessory should try to start
-  the device into accessory mode to figure out if the device supports it. The following steps
-  explain how to do this:</p>
-
-  <ol>
-    <li>Send a 51 control request ("Get Protocol") to figure out if the device supports the Android
-    accessory protocol. A non-zero number is returned if the protocol is supported, which
-    represents the version of the protocol that the device supports (currently, only version 1
-    exists). This request is a control request on endpoint 0 with the following characteristics:
-      <pre>
-requestType:    USB_DIR_IN | USB_TYPE_VENDOR
-request:        51
-value:          0
-index:          0
-data:           protocol version number (16 bits little endian sent from the device to the accessory)
-</pre>
-    </li>
-
-    <li>If the device returns a proper protocol version, send identifying string information to the
-    device. This information allows the device to figure out an appropriate application for this
-    accessory and also present the user with a URL if an appropriate application does not exist.
-    These requests are control requests on endpoint 0 (for each string ID) with the following
-    characteristics:
-      <pre>
-requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
-request:        52
-value:          0
-index:          string ID
-data            zero terminated UTF8 string sent from accessory to device
-</pre>
-
-      <p>The following string IDs are supported, with a maximum size of 256 bytes for each string
-      (must be zero terminated with \0).</p>
-      <pre>
-manufacturer name:  0
-model name:         1
-description:        2
-version:            3
-URI:                4
-serial number:      5
-</pre>
-    </li>
-
-    <li>When the identifying strings are sent, request the device start up in accessory mode. This
-    request is a control request on endpoint 0 with the following characteristics:
-      <pre>
-requestType:    USB_DIR_OUT | USB_TYPE_VENDOR
-request:        53
-value:          0
-index:          0
-data:           none
-</pre>
-    </li>
-  </ol>
-
-  <p>After sending the final control request, the connected USB device should re-introduce itself
-  on the bus in accessory mode and the accessory can re-enumerate the connected devices. The
-  algorithm jumps back to <a href="#determine">determining the device's accessory mode support</a>
-  to check for the vendor and product ID. The vendor ID and product ID of the device will be
-  different if the device successfully switched to accessory mode and will now correspond to
-  Google's vendor and product IDs instead of the device manufacturer's IDs. The accessory can now
-  <a href="#establish">establish communication with the device</a>.</p>
-
-  <p>If at any point these steps fail, the device does not support Android accessory mode and the
-  accessory should wait for the next device to be connected.</p>
-
-  <h3 id="establish">Establish communication with the device</h3>
-
-  <p>If an Android-powered device in accessory mode is detected, the accessory can query the
-  device's interface and endpoint descriptors to obtain the bulk endpoints to communicate with the
-  device. An Android-powered device that has a product ID of 0x2D00 has one interface with two bulk
-  endpoints for input and output communication. A device with product ID of 0x2D01 has two
-  interfaces with two bulk endpoints each for input and output communication. The first interface
-  is for standard communication while the second interface is for ADB communication. To communicate
-  on an interface, all you need to do is find the first bulk input and output endpoints, set the
-  device's configuration to a value of 1 with a SET_CONFIGURATION (0x09) device request, then
-  communicate using the endpoints.</p>
-
-  <h2 id="firmware">How the ADK board implements the Android Accessory protocol</h2>
-
-  <p>If you have access to the ADK board and shield, the following sections describe the firmware
-  code that you installed onto the ADK board. The firmware demonstrates a practical example of how
-  to implement the Android Accessory protocol. Even if you do not have the ADK board and shield,
-  reading through how the hardware detects and interacts with devices in accessory mode is still
-  useful if you want to port the code over for your own accessories.</p>
-
-  <p>The important pieces of the firmware are the
-  <code>accessory/demokit/demokit/demokit.pde</code> sketch, which is the code that receives and
-  sends data to the DemoKit application running on the Android-powered device. The code to detect
-  and set up communication with the Android-powered device is contained in the
-  <code>accessory/arduino_libs/AndroidAccessory/AndroidAccessory.h</code> and
-  <code>accessory/arduino_libs/AndroidAccessory/AndroidAccessory.cpp</code> files. This code
-  includes most of the logic that will help you implement your own accessory's firmware. It might
-  be useful to have all three of these files open in a text editor as you read through these next
-  sections.</p>
-
-  <p>The following sections describe the firmware code in the context of the algorithm described in
-  <a href="#accessory-protocol">Implementing the Android Accessory Protocol</a>.</p>
-
-  <h3 id="wait-adk">Wait for and detect connected devices</h3>
-
-  <p>In the firmware code (<code>demokit.pde</code>), the <code>loop()</code> function runs
-  repeatedly and calls <code>AndroidAccessory::isConnected()</code> to check for any connected
-  devices. If there is a connected device, it continuously updates the input and output streams
-  going to and from the board and application. If nothing is connected, it continuously checks for
-  a device to be connected:</p>
-  <pre>
-...
-
-AndroidAccessory acc("Google, Inc.",
-                     "DemoKit",
-                     "DemoKit Arduino Board",
-                     "1.0",
-                     "http://www.android.com",
-                     "0000000012345678");
-
-...
-void loop()
-{
-...
-    if (acc.isConnected()) {
-        //communicate with Android application
-    }
-    else{
-        //set the accessory to its default state
-    }
-...
-}
-</pre>
-
-  <h3 id="determine-adk">Determine the connected device's accessory mode support</h3>
-
-  <p>When a device is connected to the ADK board, it can already be in accessory mode, support
-  accessory mode and is not in that mode, or does not support accessory mode. The
-  <code>AndroidAccessory::isConnected()</code> method checks for these cases and responds
-  accordingly when the <code>loop()</code> function calls it. This function first checks to see if
-  the device that is connected hasn't already been handled. If not, it gets the connected device's
-  device descriptor to figure out if the device is already in accessory mode by calling
-  <code>AndroidAccessory::isAccessoryDevice()</code>. This method checks the vendor and product ID
-  of the device descriptor. A device in accessory mode has a vendor ID of 0x18D1 and a product ID
-  of 0x2D00 or 0x2D01. If the device is in accessory mode, then the ADK board can <a href=
-  "#establish">establish communication with the device</a>. If not, the board <a href=
-  "#start">attempts to start the device in accessory mode</a>.</p>
-  <pre>
-bool AndroidAccessory::isConnected(void)
-{
-    USB_DEVICE_DESCRIPTOR *devDesc = (USB_DEVICE_DESCRIPTOR *) descBuff;
-    byte err;
-
-    max.Task();
-    usb.Task();
-
-    if (!connected &amp;&amp;
-        usb.getUsbTaskState() &gt;= USB_STATE_CONFIGURING &amp;&amp;
-        usb.getUsbTaskState() != USB_STATE_RUNNING) {
-        Serial.print("\nDevice addressed... ");
-        Serial.print("Requesting device descriptor.");
-
-        err = usb.getDevDescr(1, 0, 0x12, (char *) devDesc);
-        if (err) {
-            Serial.print("\nDevice descriptor cannot be retrieved. Program Halted\n");
-            while(1);
-        }
-
-        if (isAccessoryDevice(devDesc)) {
-            Serial.print("found android accessory device\n");
-
-            connected = configureAndroid();
-        } else {
-            Serial.print("found possible device. switching to serial mode\n");
-            switchDevice(1);
-        }
-    } else if (usb.getUsbTaskState() == USB_DETACHED_SUBSTATE_WAIT_FOR_DEVICE) {
-        connected = false;
-    }
-
-    return connected;
-}
-</pre>
-
-  <h3 id="start-adk">Attempt to start the device in accessory mode</h3>
-
-  <p>If the device is not already in accessory mode, then the ADK board must determine whether or
-  not it supports it by sending control request 51 to check the version of the USB accessory
-  protocol that the device supports (see <code>AndroidAccessory::getProtocol()</code>). Protocol
-  version 1 is the only version for now, but this can be an integer greater than zero in the
-  future. If the appropriate protocol version is returned, the board sends control request 52 (one
-  for each string with <code>AndroidAcessory:sendString()</code>) to send it's identifying
-  information, and tries to start the device in accessory mode with control request 53. The
-  <code>AndroidAccessory::switchDevice()</code> method takes care of this:</p>
-  <pre>
-bool AndroidAccessory::switchDevice(byte addr)
-{
-    int protocol = getProtocol(addr);
-    if (protocol == 1) {
-        Serial.print("device supports protocol 1\n");
-    } else {
-        Serial.print("could not read device protocol version\n");
-        return false;
-    }
-
-    sendString(addr, ACCESSORY_STRING_MANUFACTURER, manufacturer);
-    sendString(addr, ACCESSORY_STRING_MODEL, model);
-    sendString(addr, ACCESSORY_STRING_DESCRIPTION, description);
-    sendString(addr, ACCESSORY_STRING_VERSION, version);
-    sendString(addr, ACCESSORY_STRING_URI, uri);
-    sendString(addr, ACCESSORY_STRING_SERIAL, serial);
-
-    usb.ctrlReq(addr, 0, USB_SETUP_HOST_TO_DEVICE | USB_SETUP_TYPE_VENDOR | USB_SETUP_RECIPIENT_DEVICE,
-                ACCESSORY_START, 0, 0, 0, 0, NULL);
-    return true;
-}
-</pre>If this method returns false, the board waits until a new device is connected. If it is
-successful, the device displays itself on the USB bus as being in accessory mode when the ADK board
-re-enumerates the bus. When the device is in accessory mode, the accessory then <a href=
-"#establish-adk">establishes communication with the device</a>.
-
-  <h3 id="establish-adk">Establish communication with the device</h3>
-
-  <p>If a device is detected as being in accessory mode, the accessory must find the proper bulk
-  endpoints and set up communication with the device. When the ADK board detects an Android-powered
-  device in accessory mode, it calls the <code>AndroidAccessory::configureAndroid()</code>
-  function:</p>
-  <pre>
-...
-if (isAccessoryDevice(devDesc)) {
-            Serial.print("found android acessory device\n");
-
-            connected = configureAndroid();
-        }
-...
-</pre>
-
-  <p>which in turn calls the <code>findEndpoints()</code> function:</p>
-  <pre>
-...
-bool AndroidAccessory::configureAndroid(void)
-{
-    byte err;
-    EP_RECORD inEp, outEp;
-
-    if (!findEndpoints(1, &amp;inEp, &amp;outEp))
-        return false;
-...
-</pre>
-
-  <p>The <code>AndroidAccessory::findEndpoints()</code> function queries the Android-powered
-  device's configuration descriptor and finds the bulk data endpoints in which to communicate with
-  the USB device. To do this, it first gets the device's first four bytes of the configuration
-  descriptor (only need descBuff[2] and descBuff[3]), which contains the information about the
-  total length of data returned by getting the descriptor. This data is used to determine whether
-  or not the descriptor can fit in the descriptor buffer. This descriptor also contains information
-  about all the interfaces and endpoint descriptors. If the descriptor is of appropriate size, the
-  method reads the entire configuration descriptor and fills the entire descriptor buffer with this
-  device's configuration descriptor. If for some reason the descriptor is no longer attainable, an
-  error is returned.</p>
-  <pre>
-...
-
-bool AndroidAccessory::findEndpoints(byte addr, EP_RECORD *inEp, EP_RECORD *outEp)
-{
-    int len;
-    byte err;
-    uint8_t *p;
-
-    err = usb.getConfDescr(addr, 0, 4, 0, (char *)descBuff);
-    if (err) {
-        Serial.print("Can't get config descriptor length\n");
-        return false;
-    }
-
-
-    len = descBuff[2] | ((int)descBuff[3] &lt;&lt; 8);
-    if (len &gt; sizeof(descBuff)) {
-        Serial.print("config descriptor too large\n");
-            /* might want to truncate here */
-        return false;
-    }
-
-    err = usb.getConfDescr(addr, 0, len, 0, (char *)descBuff);
-    if (err) {
-        Serial.print("Can't get config descriptor\n");
-        return false;
-    }
-
-...
-</pre>
-
-  <p>Once the descriptor is in memory, a pointer is assigned to the first position of the buffer
-  and is used to index the buffer for reading. There are two endpoint pointers (input and output)
-  that are passed into <code>AndroidAccessory::findEndpoints()</code> and their addresses are set
-  to 0, because the code hasn't found any suitable bulk endpoints yet. A loop reads the buffer,
-  parsing each configuration, interface, or endpoint descriptor. For each descriptor, Position 0
-  always contains the size of the descriptor in bytes and position 1 always contains the descriptor
-  type. Using these two values, the loop skips any configuration and interface descriptors and
-  increments the buffer with the <code>descLen</code> variable to get to the next descriptor.</p>
-
-  <p class="note"><strong>Note:</strong> An Android-powered device in accessory mode can
-  potentially have two interfaces, one for the default communication to the device and the other
-  for ADB communication. The default communication interface is always indexed first, so finding
-  the first input and output bulk endpoints will return the default communication endpoints, which
-  is what the <code>demokit.pde</code> sketch does. If you are writing your own firmware, the logic
-  to find the appropriate endpoints for your accessory might be different.</p>
-
-  <p>When it finds the first input and output endpoint descriptors, it sets the endpoint pointers
-  to those addresses. If the findEndpoints() function finds both an input and output endpoint, it
-  returns true. It ignores any other endpoints that it finds (the endpoints for the ADB interface,
-  if present).</p>
-  <pre>
-...
-    p = descBuff;
-    inEp-&gt;epAddr = 0;
-    outEp-&gt;epAddr = 0;
-    while (p &lt; (descBuff + len)){
-        uint8_t descLen = p[0];
-        uint8_t descType = p[1];
-        USB_ENDPOINT_DESCRIPTOR *epDesc;
-        EP_RECORD *ep;
-
-        switch (descType) {
-        case USB_DESCRIPTOR_CONFIGURATION:
-            Serial.print("config desc\n");
-            break;
-
-        case USB_DESCRIPTOR_INTERFACE:
-            Serial.print("interface desc\n");
-            break;
-
-        case USB_DESCRIPTOR_ENDPOINT:
-            epDesc = (USB_ENDPOINT_DESCRIPTOR *)p;
-            if (!inEp-&gt;epAddr &amp;&amp; (epDesc-&gt;bEndpointAddress &amp; 0x80))
-                ep = inEp;
-            else if (!outEp-&gt;epAddr)
-                ep = outEp;
-            else
-                ep = NULL;
-
-            if (ep) {
-                ep-&gt;epAddr = epDesc-&gt;bEndpointAddress &amp; 0x7f;
-                ep-&gt;Attr = epDesc-&gt;bmAttributes;
-                ep-&gt;MaxPktSize = epDesc-&gt;wMaxPacketSize;
-                ep-&gt;sndToggle = bmSNDTOG0;
-                ep-&gt;rcvToggle = bmRCVTOG0;
-            }
-            break;
-
-        default:
-            Serial.print("unkown desc type ");
-            Serial.println( descType, HEX);
-            break;
-        }
-
-        p += descLen;
-    }
-
-    if (!(inEp-&gt;epAddr &amp;&amp; outEp-&gt;epAddr))
-        Serial.println("can't find accessory endpoints");
-
-    return inEp-&gt;epAddr &amp;&amp; outEp-&gt;epAddr;
-}
-
-...
-</pre>
-
-  <p>Back in the <code>configureAndroid()</code> function, if there were endpoints found, they are
-  appropriately set up for communication. The device's configuration is set to 1 and the state of
-  the device is set to "running", which signifies that the device is properly set up to communicate
-  with your USB accessory. Setting this status prevents the device from being re-detected and
-  re-configured in the <code>AndroidAccessory::isConnected()</code> function.</p>
-  <pre>
-bool AndroidAccessory::configureAndroid(void)
-{
-    byte err;
-    EP_RECORD inEp, outEp;
-
-    if (!findEndpoints(1, &amp;inEp, &amp;outEp))
-        return false;
-
-    memset(&amp;epRecord, 0x0, sizeof(epRecord));
-
-    epRecord[inEp.epAddr] = inEp;
-    if (outEp.epAddr != inEp.epAddr)
-        epRecord[outEp.epAddr] = outEp;
-
-    in = inEp.epAddr;
-    out = outEp.epAddr;
-
-    Serial.print("inEp: ");
-    Serial.println(inEp.epAddr, HEX);
-    Serial.print("outEp: ");
-    Serial.println(outEp.epAddr, HEX);
-
-    epRecord[0] = *(usb.getDevTableEntry(0,0));
-    usb.setDevTableEntry(1, epRecord);
-
-    err = usb.setConf( 1, 0, 1 );
-    if (err) {
-        Serial.print("Can't set config to 1\n");
-        return false;
-    }
-
-    usb.setUsbTaskState( USB_STATE_RUNNING );
-
-    return true;
-}
-</pre>
-
-  <p>Lastly, methods to read and write to the appropriate endpoints are needed. The
-  <code>demokit.pde</code> sketch calls these methods depending on the data that is read from the
-  Android-powered device or sent by the ADK board. For instance, moving the joystick on the ADK
-  shield writes data that is read by the DemoKit application running on the Android-powered device.
-  Moving sliders on the DemoKit application is read by the <code>demokit.pde</code> sketch and
-  changes the state of the accessory, such as lighting up or changing the color of the LED
-  lights.</p>
-  <pre>
-int AndroidAccessory::read(void *buff, int len, unsigned int nakLimit) {
-  return usb.newInTransfer(1, in, len, (char *)buff, nakLimit); }
-
-int AndroidAccessory::write(void *buff, int len) {
-  usb.outTransfer(1, out, len, (char *)buff);
-  return len; }
-
-</pre>
-
-  <p>See the <code>firmware/demokit/demokit.pde</code> file for information about how the ADK board
-  reads and writes data.</p>
diff --git a/docs/html/guide/topics/usb/host.jd b/docs/html/guide/topics/usb/host.jd
deleted file mode 100644
index b561754..0000000
--- a/docs/html/guide/topics/usb/host.jd
+++ /dev/null
@@ -1,440 +0,0 @@
-page.title=USB Host
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#api">API Overview</a></li>
-
-        <li><a href="#usage">Android Manifest Requirements</a></li>
-
-        <li>
-          <a href="#working-d">Working with devices</a>
-
-          <ol>
-            <li><a href="#discovering-d">Discovering a device</a></li>
-
-            <li><a href="#permission-d">Obtaining permission to communicate with a device</a></li>
-
-            <li><a href="#communicating-d">Communicating with a device</a></li>
-
-            <li><a href="#terminating-d">Terminating communication with a device</a></li>
-          </ol>
-        </li>
-      </ol>
-
-      <h2>Related Samples</h2>
-
-      <ol>
-        <li><a href="{@docRoot}resources/samples/USB/AdbTest/index.html">AdbTest</a></li>
-
-        <li><a href=
-        "{@docRoot}resources/samples/USB/MissileLauncher/index.html">MissleLauncher</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>When your Android-powered device is in USB host mode, it acts as the USB host, powers the bus,
-  and enumerates connected USB devices. USB host mode is supported in Android 3.1 and higher.</p>
-
-  <h2 id="api">API Overview</h2>
-
-  <p>Before you begin, it is important to understand the classes that you need to work with. The
-  following table describes the USB host APIs in the {@link android.hardware.usb} package.</p>
-
-  <p class="table-caption"><strong>Table 1.</strong> USB Host APIs</p>
-
-  <table>
-    <tr>
-      <th>Class</th>
-
-      <th>Description</th>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbManager}</td>
-
-      <td>Allows you to enumerate and communicate with connected USB devices.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbDevice}</td>
-
-      <td>Represents a connected USB device and contains methods to access its identifying
-      information, interfaces, and endpoints.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbInterface}</td>
-
-      <td>Represents an interface of a USB device, which defines a set of functionality for the
-      device. A device can have one or more interfaces on which to communicate on.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbEndpoint}</td>
-
-      <td>Represents an interface endpoint, which is a communication channel for this interface. An
-      interface can have one or more endpoints, and usually has input and output endpoints for
-      two-way communication with the device.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbDeviceConnection}</td>
-
-      <td>Represents a connection to the device, which transfers data on endpoints. This class
-      allows you to send data back and forth sychronously or asynchronously.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbRequest}</td>
-
-      <td>Represents an asynchronous request to communicate with a device through a {@link
-      android.hardware.usb.UsbDeviceConnection}.</td>
-    </tr>
-
-    <tr>
-      <td>{@link android.hardware.usb.UsbConstants}</td>
-
-      <td>Defines USB constants that correspond to definitions in linux/usb/ch9.h of the Linux
-      kernel.</td>
-    </tr>
-  </table>
-
-  <p>In most situations, you need to use all of these classes ({@link
-  android.hardware.usb.UsbRequest} is only required if you are doing asynchronous communication)
-  when communicating with a USB device. In general, you obtain a {@link
-  android.hardware.usb.UsbManager} to retrieve the desired {@link android.hardware.usb.UsbDevice}.
-  When you have the device, you need to find the appropriate {@link
-  android.hardware.usb.UsbInterface} and the {@link android.hardware.usb.UsbEndpoint} of that
-  interface to communicate on. Once you obtain the correct endpoint, open a {@link
-  android.hardware.usb.UsbDeviceConnection} to communicate with the USB device.</p>
-
-  <h2 id="manifest">Android Manifest Requirements</h2>
-
-  <p>The following list describes what you need to add to your application's manifest file before
-  working with the USB host APIs:</p>
-
-  <ul>
-    <li>Because not all Android-powered devices are guaranteed to support the USB host APIs,
-    include a <code>&lt;uses-feature&gt;</code> element that declares that your application uses
-    the <code>android.hardware.usb.host</code> feature.</li>
-
-    <li>Set the minimum SDK of the application to API Level 12 or higher. The USB host APIs are not
-    present on earlier API levels.</li>
-
-    <li>If you want your application to be notified of an attached USB device, specify an
-    <code>&lt;intent-filter&gt;</code> and <code>&lt;meta-data&gt;</code> element pair for the
-    <code>android.hardware.usb.action.USB_DEVICE_ATTACHED</code> intent in your main activity. The
-    <code>&lt;meta-data&gt;</code> element points to an external XML resource file that declares
-    identifying information about the device that you want to detect.
-
-      <p>In the XML resource file, declare <code>&lt;usb-device&gt;</code> elements for the USB
-      devices that you want to filter. The following list describes the attributes of
-      <code>&lt;usb-device&gt;</code>. In general, use vendor and product ID if you want to filter
-      for a specific device and use class, subclass, and protocol if you want to filter for a group
-      of USB devices, such as mass storage devices or digital cameras. You can specify none or
-      all of these attributes. Specifying no attributes matches every USB device, so only do this
-      if your application requires it:</p>
-
-      <ul>
-        <li><code>vendor-id</code></li>
-
-        <li><code>product-id</code></li>
-
-        <li><code>class</code></li>
-
-        <li><code>subclass</code></li>
-
-        <li><code>protocol</code> (device or interface)</li>
-      </ul>
-
-      <p>Save the resource file in the <code>res/xml/</code> directory. The resource file name
-      (without the .xml extension) must be the same as the one you specified in the
-      <code>&lt;meta-data&gt;</code> element. The format for the XML resource file is in the
-      <a href="#example">example</a> below.</p>
-    </li>
-  </ul>
-
-  <h3 id="manifest-example">Manifest and resource file examples</h3>
-
-  <p>The following example shows a sample manifest and its corresponding resource file:</p>
-  <pre>
-&lt;manifest ...&gt;
-    &lt;uses-feature android:name="android.hardware.usb.host" /&gt;
-    &lt;uses-sdk android:minSdkVersion="12" /&gt;
-    ...
-    &lt;application&gt;
-        &lt;activity ...&gt;
-            ...
-            &lt;intent-filter&gt;
-                &lt;action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /&gt;
-            &lt;/intent-filter&gt;
-
-            &lt;meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
-                android:resource="@xml/device_filter" /&gt;
-        &lt;/activity&gt;
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-
-  <p>In this case, the following resource file should be saved in
-  <code>res/xml/device_filter.xml</code> and specifies that any USB device with the specified
-  attributes should be filtered:</p>
-  <pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;resources&gt;
-    &lt;usb-device vendor-id="1234" product-id="5678" class="255" subclass="66" protocol="1" /&gt;
-&lt;/resources&gt;
-</pre>
-
-  <h2 id="working-d">Working with Devices</h2>
-
-  <p>When users connect USB devices to an Android-powered device, the Android system can determine
-  whether your application is interested in the connected device. If so, you can set up
-  communication with the device if desired. To do this, your application has to:</p>
-
-  <ol>
-    <li>Discover connected USB devices by using an intent filter to be notified when the user
-    connects a USB device or by enumerating USB devices that are already connected.</li>
-
-    <li>Ask the user for permission to connect to the USB device, if not already obtained.</li>
-
-    <li>Communicate with the USB device by reading and writing data on the appropriate interface
-    endpoints.</li>
-  </ol>
-
-  <h3 id="discovering-d">Discovering a device</h3>
-
-  <p>Your application can discover USB devices by either using an intent filter to be notified when
-  the user connects a device or by enumerating USB devices that are already connected. Using an
-  intent filter is useful if you want to be able to have your application automatically detect a
-  desired device. Enumerating connected USB devices is useful if you want to get a list of all
-  connected devices or if your application did not filter for an intent.</p>
-
-  <h4 id="using-intents">Using an intent filter</h4>
-
-  <p>To have your application discover a particular USB device, you can specify an intent filter to
-  filter for the <code>android.hardware.usb.action.USB_DEVICE_ATTACHED</code> intent. Along with
-  this intent filter, you need to specify a resource file that specifies properties of the USB
-  device, such as product and vendor ID. When users connect a device that matches your device
-  filter, the system presents them with a dialog that asks if they want to start your application.
-  If users accept, your application automatically has permission to access the device until the
-  device is disconnected.</p>
-
-  <p>The following example shows how to declare the intent filter:</p>
-  <pre>
-&lt;activity ...&gt;
-...
-    &lt;intent-filter&gt;
-        &lt;action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /&gt;
-    &lt;/intent-filter&gt;
-
-    &lt;meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
-        android:resource="@xml/device_filter" /&gt;
-&lt;/activity&gt;
-</pre>
-
-  <p>The following example shows how to declare the corresponding resource file that specifies the
-  USB devices that you're interested in:</p>
-  <pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;resources&gt;
-    &lt;usb-device vendor-id="1234" product-id="5678" /&gt;
-&lt;/resources&gt;
-</pre><!-- REMEMBER TO ADD PROTOCOL, and device class and subclass, if applicable -->
-
-  <p>In your activity, you can obtain the {@link android.hardware.usb.UsbDevice} that represents
-  the attached device from the intent like this:</p>
-  <pre>
-UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
-</pre>
-
-  <h4>Enumerating devices</h4>
-
-  <p>If your application is interested in inspecting all of the USB devices currently connected
-  while your application is running, it can enumerate devices on the bus. Use the {@link
-  android.hardware.usb.UsbManager#getDeviceList() getDeviceList()} method to get a hash map of all
-  the USB devices that are connected. The hash map is keyed by the USB device's name if you want to
-  obtain a device from the map.</p>
-  <pre>
-UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
-...  
-HashMap&lt;String, UsbDevice&gt; deviceList = manager.getDeviceList();
-UsbDevice device = deviceList.get("deviceName");
-</pre>
-
-  <p>If desired, you can also just obtain an iterator from the hash map and process each device one
-  by one:</p>
-  <pre>
-UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE);
-...
-HashMap&lt;String, UsbDevice&gt; deviceList = manager.getDeviceList();
-Iterator&lt;UsbDevice&gt; deviceIterator = deviceList.values().iterator();
-while(deviceIterator.hasNext()){
-    UsbDevice device = deviceIterator.next()
-    //your code
-}
-</pre>
-
-  <h3 id="permission-d">Obtaining permission to communicate with a device</h3>
-
-  <p>Before communicating with the USB device, your applicaton must have permission from your
-  users.</p>
-
-  <p class="note"><strong>Note:</strong> If your application <a href="#using-intents">uses an
-  intent filter</a> to discover USB devices as they're connected, it automatically receives
-  permission if the user allows your application to handle the intent. If not, you must request
-  permission explicitly in your application before connecting to the device.</p>
-
-  <p>Explicitly asking for permission might be neccessary in some situations such as when your
-  application enumerates USB devices that are already connected and then wants to communicate with
-  one. You must check for permission to access a device before trying to communicate with it. If
-  not, you will receive a runtime error if the user denied permission to access the device.</p>
-
-  <p>To explicitly obtain permission, first create a broadcast receiver. This receiver listens for
-  the intent that gets broadcast when you call {@link
-  android.hardware.usb.UsbManager#requestPermission requestPermission()}. The call to {@link
-  android.hardware.usb.UsbManager#requestPermission requestPermission()} displays a dialog to the
-  user asking for permission to connect to the device. The following sample code shows how to
-  create the broadcast receiver:</p>
-  <pre>
-private static final String ACTION_USB_PERMISSION =
-    "com.android.example.USB_PERMISSION";
-private final BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
-
-    public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-        if (ACTION_USB_PERMISSION.equals(action)) {
-            synchronized (this) {
-                UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
-
-                if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
-                    if(device != null){
-                      //call method to set up device communication
-                   }
-                } 
-                else {
-                    Log.d(TAG, "permission denied for device " + device);
-                }
-            }
-        }
-    }
-};
-</pre>
-
-  <p>To register the broadcast receiver, add this in your <code>onCreate()</code> method in your
-  activity:</p>
-  <pre>
-UsbManager mUsbManager = (UsbManager) getSystemService(Context.USB_SERVICE);
-private static final String ACTION_USB_PERMISSION =
-    "com.android.example.USB_PERMISSION";
-...
-mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
-IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
-registerReceiver(mUsbReceiver, filter);
-</pre>
-
-  <p>To display the dialog that asks users for permission to connect to the device, call the {@link
-  android.hardware.usb.UsbManager#requestPermission requestPermission()} method:</p>
-  <pre>
-UsbDevice device;
-...
-mUsbManager.requestPermission(device, mPermissionIntent);
-</pre>
-
-  <p>When users reply to the dialog, your broadcast receiver receives the intent that contains the
-  {@link android.hardware.usb.UsbManager#EXTRA_PERMISSION_GRANTED} extra, which is a boolean
-  representing the answer. Check this extra for a value of true before connecting to the
-  device.</p>
-
-  <h3 id="communicating-d">Communicating with a device</h3>
-
-  <p>Communication with a USB device can be either synchronous or asynchronous. In either case, you
-  should create a new thread on which to carry out all data transmissions, so you don't block the
-  UI thread. To properly set up communication with a device, you need to obtain the appropriate
-  {@link android.hardware.usb.UsbInterface} and {@link android.hardware.usb.UsbEndpoint} of the
-  device that you want to communicate on and send requests on this endpoint with a {@link
-  android.hardware.usb.UsbDeviceConnection}. In general, your code should:</p>
-
-  <ul>
-    <li>Check a {@link android.hardware.usb.UsbDevice} object's attributes, such as product ID,
-    vendor ID, or device class to figure out whether or not you want to communicate with the
-    device.</li>
-
-    <li>When you are certain that you want to communicate with the device, find the appropriate
-    {@link android.hardware.usb.UsbInterface} that you want to use to communicate along with the
-    appropriate {@link android.hardware.usb.UsbEndpoint} of that interface. Interfaces can have one
-    or more endpoints, and commonly will have an input and output endpoint for two-way
-    communication.</li>
-
-    <li>When you find the correct endpoint, open a {@link android.hardware.usb.UsbDeviceConnection}
-    on that endpoint.</li>
-
-    <li>Supply the data that you want to transmit on the endpoint with the {@link
-    android.hardware.usb.UsbDeviceConnection#bulkTransfer bulkTransfer()} or {@link
-    android.hardware.usb.UsbDeviceConnection#controlTransfer controlTransfer()} method. You should
-    carry out this step in another thread to prevent blocking the main UI thread. For more
-    information about using threads in Android, see <a href=
-    "{@docRoot}guide/topics/fundamentals/processes-and-threads.html#Threads">Processes and
-    Threads</a>.</li>
-  </ul>
-
-  <p>The following code snippet is a trivial way to do a synchronous data transfer. Your code
-  should have more logic to correctly find the correct interface and endpoints to communicate on
-  and also should do any transferring of data in a different thread than the main UI thread:</p>
-  <pre>
-private Byte[] bytes
-private static int TIMEOUT = 0;
-private boolean forceClaim = true;
-
-...
-
-UsbInterface intf = device.getInterface(0);
-UsbEndpoint endpoint = intf.getEndpoint(0);
-UsbDeviceConnection connection = mUsbManager.openDevice(device); 
-connection.claimInterface(intf, forceClaim);
-connection.bulkTransfer(endpoint, bytes, bytes.length, TIMEOUT); //do in another thread
-</pre>
-
-  <p>To send data asynchronously, use the {@link android.hardware.usb.UsbRequest} class to {@link
-  android.hardware.usb.UsbRequest#initialize initialize} and {@link
-  android.hardware.usb.UsbRequest#queue queue} an asynchronous request, then wait for the result
-  with {@link android.hardware.usb.UsbDeviceConnection#requestWait requestWait()}.</p>
-
-  <p>For more information, see the <a href=
-  "{@docRoot}resources/samples/USB/AdbTest/index.html">AdbTest sample</a>, which shows how to do
-  asynchronous bulk transfers, and the <a href=
-  "{@docRoot}resources/samples/USB/MissileLauncher/index.html">MissleLauncher sample</a>, which
-  shows how to listen on an interrupt endpoint asynchronously.</p>
-
-  <h3 id="terminating-d">Terminating communication with a device</h3>
-
-  <p>When you are done communicating with a device or if the device was detached, close the {@link
-  android.hardware.usb.UsbInterface} and {@link android.hardware.usb.UsbDeviceConnection} by
-  calling {@link android.hardware.usb.UsbDeviceConnection#releaseInterface releaseInterface()} and
-  {@link android.hardware.usb.UsbDeviceConnection#close() close()}. To listen for detached events,
-  create a broadcast receiver like below:</p>
-  <pre>
-BroadcastReceiver mUsbReceiver = new BroadcastReceiver() {
-    public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction(); 
-
-      if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
-            UsbDevice device = (UsbDevice)intent.getParcelableExtra(UsbManager.EXTRA_DEVICE);
-            if (device != null) {
-                // call your method that cleans up and closes communication with the device
-            }
-        }
-    }
-};
-</pre>
-
-  <p>Creating the broadcast receiver within the application, and not the manifest, allows your
-  application to only handle detached events while it is running. This way, detached events are
-  only sent to the application that is currently running and not broadcast to all applications.</p>
-
diff --git a/docs/html/guide/topics/usb/index.jd b/docs/html/guide/topics/usb/index.jd
deleted file mode 100644
index ef53bdf..0000000
--- a/docs/html/guide/topics/usb/index.jd
+++ /dev/null
@@ -1,67 +0,0 @@
-page.title=USB Host and Accessory
-@jd:body
-
-  <div id="qv-wrapper">
-    <div id="qv">
-      <h2>Topics</h2>
-
-      <ol>
-        <li><a href="{@docRoot}guide/topics/usb/accessory.html">USB Accessory</a></li>
-
-        <li><a href="{@docRoot}guide/topics/usb/host.html">USB Host</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>Android supports a variety of USB peripherals and Android USB accessories (hardware that
-  implements the Android accessory protocol) through two modes: USB accessory and USB host. In USB
-  accessory mode, the external USB hardware act as the USB hosts. Examples of accessories might
-  include robotics controllers; docking stations; diagnostic and musical equipment; kiosks; card
-  readers; and much more. This gives Android-powered devices that do not have host capabilities the
-  ability to interact with USB hardware. Android USB accessories must be designed to work with
-  Android-powered devices and must adhere to the <a href=
-  "http://accessories.android.com/demokit">Android accessory communication protocol</a>. In USB
-  host mode, the Android-powered device acts as the host. Examples of devices include digital
-  cameras, keyboards, mice, and game controllers. USB devices that are designed for a wide range of
-  applications and environments can still interact with Android applications that can correctly
-  communicate with the device.</p>
-
-  <p>Figure 1 shows the differences between the two modes. When the Android-powered device is in
-  host mode, it acts as the USB host and powers the bus. When the Android-powered device is in USB
-  accessory mode, the connected USB hardware (an Android USB accessory in this case) acts as the
-  host and powers the bus.</p><img src="{@docRoot}images/usb-host-accessory.png" alt="">
-
-  <p class="img-caption"><strong>Figure 1.</strong> USB Host and Accessory Modes</p>
-
-  <p>USB accessory and host modes are directly supported in Android 3.1 (API level 12) or newer
-  platforms. USB accessory mode is also backported to Android 2.3.4 (API level 10) as an add-on
-  library to support a broader range of devices. Device manufacturers can choose whether or not to
-  include the add-on library on the device's system image.</p>
-
-  <p class="note"><strong>Note:</strong> Support for USB host and accessory modes are ultimately
-  dependant on the device's hardware, regardless of platform level. You can filter for devices that
-  support USB host and accessory through a <a href=
-  "{@docRoot}guide/topics/manifest/uses-feature-element.html">&lt;uses-feature&gt;</a> element. See
-  the USB <a href="{@docRoot}guide/topics/usb/accessory.html">accessory</a> and <a href=
-  "{@docRoot}guide/topics/usb/host.html">host</a> documentation for more details.</p>
-
-  <h2>Debugging considerations</h2>
-
-  <p>When debugging applications that use USB accessory or host features, you most likely will have
-  USB hardware connected to your Android-powered device. This will prevent you from having an
-  <code>adb</code> connection to the Android-powered device via USB. You can still access
-  <code>adb</code> over a network connection. To enable <code>adb</code> over a network
-  connection:</p>
-
-  <ol>
-    <li>Connect the Android-powered device via USB to your computer.</li>
-
-    <li>From your SDK <code>platform-tools/</code> directory, enter <code>adb tcpip 5555</code> at
-    the command prompt.</li>
-
-    <li>Enter <code>adb connect &lt;device-ip-address&gt;:5555</code> You should now be connected
-    to the Android-powered device and can issue the usual <code>adb</code> commands like <code>adb
-    logcat</code>.</li>
-
-    <li>To set your device to listen on USB, enter <code>adb usb</code>.</li>
-  </ol>
diff --git a/docs/html/guide/topics/views/custom-views.jd b/docs/html/guide/topics/views/custom-views.jd
deleted file mode 100644
index 8589b1a..0000000
--- a/docs/html/guide/topics/views/custom-views.jd
+++ /dev/null
@@ -1,544 +0,0 @@
-page.title=Building Custom Views
-parent.title=Views and Layout
-parent.link=index.html
-@jd:body
-
-<p>Android offers a sophisticated and powerful componentized model for building your UI, based on the fundamental building block classes {@link android.view.View} and {@link android.view.ViewGroup}. To start with, the platform includes a variety of prebuilt View and ViewGroup subclasses &mdash; called widgets and layouts, respectively &mdash; that you can use to construct your UI. The widgets and layouts are fully implemented and handle all of their own measuring and drawing, so you can use them right away. You can make new types of UI elements simply by nesting and grouping the widgets and layouts. Using widgets and layouts is the recommended approach to building a UI for your applications.</p>
-
-<p>A partial list of available widgets includes {@link android.widget.Button Button}, 
-{@link android.widget.TextView TextView}, 
-{@link android.widget.EditText EditText}, 
-{@link android.widget.ListView ListView},
-{@link android.widget.CheckBox CheckBox}, 
-{@link android.widget.RadioButton RadioButton}, 
-{@link android.widget.Gallery Gallery}, 
-{@link android.widget.Spinner Spinner}, and the more special-purpose 
-{@link android.widget.AutoCompleteTextView AutoCompleteTextView}, 
-{@link android.widget.ImageSwitcher ImageSwitcher}, and
-{@link android.widget.TextSwitcher TextSwitcher}. </p>
-
-<p>Among the layouts available are {@link android.widget.LinearLayout LinearLayout}, 
-{@link android.widget.FrameLayout FrameLayout}, {@link android.widget.AbsoluteLayout AbsoluteLayout}, and others. For more examples, see <a href="layout">Common Layout Objects</a>.</p>
-
-<p>If none of the prebuilt widgets or layouts meets your needs, you can also create your own View subclass, such as a layout group or compound control. If you only need to make small adjustments to an existing widget or layout, you can simply subclass the widget or layout and override its methods.
-</p>
-
-<p>Creating your own View subclasses gives you precise control over the appearance and function of a screen element. To give an idea of the control you get with custom views, here are some examples of what you could do with them:</p>
- 
-<ul>
-  <li>
-    You could create a completely custom-rendered View type, for example a "volume
-    control" knob rendered using 2D graphics, and which resembles an
-    analog electronic control.
-  </li>
-  <li>
-    You could combine a group of View components into a new single component, perhaps
-    to make something like a ComboBox (a combination of popup list and free
-    entry text field), a dual-pane selector control (a left and right pane
-    with a list in each where you can re-assign which item is in which
-    list), and so on.
-  </li>
-  <li>
-    You could override the way that an EditText component is rendered on the screen
-    (the <a href="{@docRoot}resources/samples/NotePad/">Notepad sample</a> uses this to good effect, 
-    to create a lined-notepad page).
-  </li>
-  <li>
-    You could capture other events like key presses and handle them in some custom
-    way (such as for a game).
-  </li>
-</ul>
-<p>
-The sections below explain how to create custom Views and use them in your application. 
-For detailed reference information, see the {@link android.view.View} class. </p>
-
-<p>This document covers the following:</p>
-<ol class="toc">
-  <li><a href="#basic">The Basic Approach</a></li>
-  <li><a href="#custom">Fully Customized Views</a></li>
-  <li><a href="#customexample">Customized View Example</a></li> 
-  <li><a href="#compound">Compound Controls</a></li>
-  <li><a href="#tweaking">Modifying an Existing Component Type</a></li>
-</ol>
-
-<a name="basic"></a> 
-<h2>The Basic Approach
-</h2>
-<p>
-These steps provide a high level overview of
-what you need to know to get started in creating your own
-View components:</p>
- 
-<ol>
-  <li>
-    Extend an existing {@link android.view.View View} class or subclass 
-	with your own class.
-  </li>
-  <li>
-    Override some of the methods from the superclass: the superclass methods 
-    to override start with '<code>on</code>', for
-    example, {@link android.view.View#onDraw onDraw()}, 
-    {@link android.view.View#onMeasure onMeasure()}, and 
-    {@link android.view.View#onKeyDown onKeyDown()}.
-    <ul>
-      <li>
-        This is similar to the <code>on...</code> events in {@link android.app.Activity
-	    Activity} or {@link android.app.ListActivity ListActivity}
-        that you override for life cycle and other functionality hooks.
-      </li>
-    </ul>
-  <li>
-    Use your new extension class: once completed, your new extension class 
-    can be used in place of the view upon which it was based, but now with the new 
-    functionality.
-  </li>
-</ol>  
-<p class="note"><strong>Tip:</strong>
-    Extension classes can be defined as inner classes inside the activities
-    that use them. This is useful because it controls access to them but
-    isn't necessary (perhaps you want to create a new public View for
-    wider use in your application).
-</p>
-
-<a name="custom"></a> 
-<h2>Fully Customized Components</h2>
-<p>
-Fully customized components can be used to create graphical components that
-appear however you wish. Perhaps a graphical VU
-meter that looks like an old analog gauge, or a sing-a-long text view where
-a bouncing ball moves along the words so you can sing along with a karaoke
-machine. Either way, you want something that the built-in components just
-won't do, no matter how you combine them.</p>
-<p>Fortunately, you can easily create components that look and behave in any
-way you like, limited perhaps only by your imagination, the size of the
-screen, and the available processing power (remember that ultimately your
-application might have to run on something with significantly less power
-than your desktop workstation).</p>
-<p>To create a fully customized component:</p> 
-<ol>
-  <li>
-    The most generic view you can extend is, unsurprisingly, {@link
-    android.view.View View}, so you will usually start by extending this to
-    create your new super component.
-  </li>
-  <li>
-    You can supply a constructor which can
-    take attributes and parameters from the XML, and you can also consume
-    your own such attributes and parameters (perhaps the color and range of
-    the VU meter, or the width and damping of the needle, etc.)
-  </li>
-  <li>
-    You will probably want to create your own event listeners,
-    property accessors and modifiers, and possibly more sophisticated
-    behavior in your component class as well.
-  </li>
-  <li>
-    You will almost certainly want to override <code>onMeasure()</code> and
-    are also likely to need to override <code>onDraw()</code> if you want
-    the component to show something. While both have default behavior,
-    the default <code>onDraw()</code> will do nothing, and the default
-    <code>onMeasure()</code> will always set a size of 100x100 &mdash; which is
-    probably not what you want.
-  </li>
-  <li>
-    Other <code>on...</code> methods may also be overridden as required.
-  </li>
-</ol>
-<h4><code>onDraw()</code> and <code>onMeasure()</code></h4>
-<p><code>onDraw()</code> delivers you a {@link android.graphics.Canvas Canvas}
-upon which you can implement anything you want: 2D graphics, other standard or
-custom components, styled text, or anything else you can think of.</p>
-<p><em>Note:</em>
-Except for 3D graphics. If you want to
-use 3D graphics, you must extend {@link android.view.SurfaceView SurfaceView}
-instead of View, and draw from a separate thread. See the
-GLSurfaceViewActivity sample
-for details.</p>
-<p><code>onMeasure()</code> is a little more involved. <code>onMeasure()</code>
-is a critical piece of the rendering contract between your component and its
-container. <code>onMeasure()</code> should be overridden to efficiently and
-accurately report the measurements of its contained parts. This is made
-slightly more complex by the requirements of limits from the parent
-(which are passed in to the <code>onMeasure()</code> method) and by the
-requirement to call the <code>setMeasuredDimension()</code> method with the
-measured width and height once they have been calculated. If you fail to
-call this method from an overridden <code>onMeasure()</code> method, the 
-result will be an exception at measurement time.</p>
-<p>At a high level, implementing <code>onMeasure()</code> looks something 
- like this:</p>
- 
-<ol>
-  <li>
-    The overridden <code>onMeasure()</code> method is called with width and
-    height measure specifications (<code>widthMeasureSpec</code> and
-    <code>heightMeasureSpec</code> parameters, both are integer codes
-    representing dimensions) which should be treated as requirements for
-    the restrictions on the width and height measurements you should produce. A
-    full reference to the kind of restrictions these specifications can require
-    can be found in the reference documentation under {@link
-    android.view.View#onMeasure View.onMeasure(int, int)} (this reference
-    documentation does a pretty good job of explaining the whole measurement
-    operation as well).
-  </li>
-  <li>
-    Your component's <code>onMeasure()</code> method should calculate a
-    measurement width and height which will be required to render the
-    component. It should try to stay within the specifications passed in,
-    although it can choose to exceed them (in this case, the parent can
-    choose what to do, including clipping, scrolling, throwing an exception, 
-    or asking the <code>onMeasure()</code> to try again, perhaps with
-    different measurement specifications).
-  </li>
-  <li>
-    Once the width and height are calculated, the <code>setMeasuredDimension(int
-    width, int height)</code> method must be called with the calculated
-    measurements. Failure to do this will result in an exception being
-    thrown.
-  </li>
-</ol>
-
-<p>
-Here's a summary of some of the other standard methods that the framework calls on views:
-</p>
-<table border="2" width="85%" align="center" cellpadding="5">
-       <thead>
-           <tr><th>Category</th> <th>Methods</th> <th>Description</th></tr>
-       </thead>
-       
-       <tbody>
-       <tr>
-           <td rowspan="2">Creation</td>
-           <td>Constructors</td>
-           <td>There is a form of the constructor that are called when the view
-           is created from code and a form that is called when the view is
-           inflated from a layout file. The second form should parse and apply
-           any attributes defined in the layout file.
-           </td>
-       </tr>
-       <tr>
-           <td><code>{@link android.view.View#onFinishInflate()}</code></td>
-           <td>Called after a view and all of its children has been inflated
-           from XML.</td>
-       </tr>
-       
-       <tr>
-           <td rowspan="3">Layout</td>
-           <td><code>{@link  android.view.View#onMeasure}</code></td>
-           <td>Called to determine the size requirements for this view and all
-           of its children.
-           </td>
-       </tr>
-       <tr>
-           <td><code>{@link  android.view.View#onLayout}</code></td>
-           <td>Called when this view should assign a size and position to all
-           of its children.
-           </td>
-       </tr>
-       <tr>
-           <td><code>{@link  android.view.View#onSizeChanged}</code></td>
-           <td>Called when the size of this view has changed.
-           </td>
-       </tr>
-       
-       <tr>
-           <td>Drawing</td>
-           <td><code>{@link  android.view.View#onDraw}</code></td>
-           <td>Called when the view should render its content.
-           </td>
-       </tr>
-  
-       <tr>
-           <td rowspan="4">Event processing</td>
-           <td><code>{@link  android.view.View#onKeyDown}</code></td>
-           <td>Called when a new key event occurs.
-           </td>
-       </tr>
-       <tr>
-           <td><code>{@link  android.view.View#onKeyUp}</code></td>
-           <td>Called when a key up event occurs.
-           </td>
-       </tr>   
-       <tr>
-           <td><code>{@link  android.view.View#onTrackballEvent}</code></td>
-           <td>Called when a trackball motion event occurs.
-           </td>
-       </tr>  
-       <tr>
-           <td><code>{@link  android.view.View#onTouchEvent}</code></td>
-           <td>Called when a touch screen motion event occurs.
-           </td>
-       </tr>  
-       
-       <tr>
-           <td rowspan="2">Focus</td>
-           <td><code>{@link  android.view.View#onFocusChanged}</code></td>
-           <td>Called when the view gains or loses focus.
-           </td>
-       </tr>
-       
-       <tr>
-           <td><code>{@link  android.view.View#onWindowFocusChanged}</code></td>
-           <td>Called when the window containing the view gains or loses focus.
-           </td>
-       </tr>
-       
-       <tr>
-           <td rowspan="3">Attaching</td>
-           <td><code>{@link  android.view.View#onAttachedToWindow()}</code></td>
-           <td>Called when the view is attached to a window.
-           </td>
-       </tr>
-  
-       <tr>
-           <td><code>{@link  android.view.View#onDetachedFromWindow}</code></td>
-           <td>Called when the view is detached from its window.
-           </td>
-       </tr>     
-  
-       <tr>
-           <td><code>{@link  android.view.View#onWindowVisibilityChanged}</code></td>
-           <td>Called when the visibility of the window containing the view
-           has changed.
-           </td>
-       </tr>     
-       </tbody>
-       
-   </table>
-
-
-<a name="customexample"></a>
-<h3>A Custom View Example</h3>
-<p>The CustomView sample in the 
-<a href="{@docRoot}samples/ApiDemos/index.html">API Demos</a> provides an example
-of a customized View. The custom View is defined in the
-<a href="{@docRoot}samples/ApiDemos/src/com/example/android/apis/view/LabelView.html">LabelView</a>
-class.</p>
-<p>The LabelView sample demonstrates a number of different aspects of custom components:</p>
-<ul>
-  <li>Extending the View class for a completely custom component.</li>
-  <li>Parameterized constructor that takes the view inflation parameters
-  (parameters defined in the XML). Some of these are passed through to the
-  View superclass, but more importantly, there are some custom attributes defined
-  and used for LabelView.</li>
-  <li>Standard public methods of the type you would expect to see for a label
-  component, for example <code>setText()</code>, <code>setTextSize()</code>,
-  <code>setTextColor()</code> and so on.</li>
-  <li>An overridden <code>onMeasure</code> method to determine and set the
-  rendering size of the component. (Note that in LabelView, the real work is done
-  by a private <code>measureWidth()</code> method.)</li>
-  <li>An overridden <code>onDraw()</code> method to draw the label onto the
-  provided canvas.</li>
-</ul>
-<p>You can see some sample usages of the LabelView custom View in
-<a href="{@docRoot}samples/ApiDemos/res/layout/custom_view_1.html">custom_view_1.xml</a>
-from the samples. In particular, you can see a mix of both <code>android:</code>
-namespace parameters and custom <code>app:</code> namespace parameters. These
-<code>app:</code> parameters are the custom ones that the LabelView recognizes
-and works with, and are defined in a styleable inner class inside of the
-samples R resources definition class.</p>
-
-<a name="compound"></a>  
-<h2>Compound Controls
-</h2>
-<p>If you don't want to create a completely customized component, but instead
-are looking to put together a reusable component that consists of a group of
-existing controls, then creating a Compound Component (or Compound Control) might
-fit the bill. In a nutshell, this brings together a number of more atomic
-controls (or views) into a logical group of items that can be treated as a
-single thing. For example, a Combo Box can be thought of as a
-combination of a single line EditText field and an adjacent button with an attached
- PopupList. If you press the button and select
-something from the list, it populates the EditText field, but the user can
-also type something directly into the EditText if they prefer.</p>
-<p>In Android, there are actually two other Views readily available to do
-this: {@link android.widget.Spinner Spinner} and 
-{@link android.widget.AutoCompleteTextView AutoCompleteTextView}, but 
-regardless, the concept of a Combo Box makes an easy-to-understand 
-example.</p>
-<p>To create a compound component:</p>
-<ol>
-  <li>
-    The usual starting point is a Layout of some kind, so create a class
-    that extends a Layout. Perhaps in the case of a Combo box we might use
-    a LinearLayout with horizontal orientation. Remember that other layouts
-    can be nested inside, so the compound component can be arbitrarily
-    complex and structured. Note that just like with an Activity, you can
-    use either the declarative (XML-based) approach to creating the
-    contained components, or you can nest them programmatically from your
-    code.
-  </li>
-  <li>
-    In the constructor for the new class, take whatever parameters the
-    superclass expects, and pass them through to the superclass constructor
-    first. Then you can set up the other views to use within your new
-    component; this is where you would create the EditText field and the
-    PopupList. Note that you also might introduce your own attributes and
-    parameters into the XML that can be pulled out and used by your
-    constructor.
-  </li>
-  <li>
-    You can also create listeners for events that your contained views might
-    generate, for example, a listener method for the List Item Click Listener
-    to update the contents of the EditText if a list selection is made.
-  </li>
-  <li>
-    You might also create your own properties with accessors and modifiers,
-    for example, allow the EditText value to be set initially in the
-    component and query for its contents when needed.
-  </li>
-  <li>
-    In the case of extending a Layout, you don't need to override the
-    <code>onDraw()</code> and <code>onMeasure()</code> methods since the
-    layout will have default behavior that will likely work just fine. However, 
-    you can still override them if you need to.
-  </li>
-  <li>
-    You might override other <code>on...</code> methods, like
-    <code>onKeyDown()</code>, to perhaps choose certain default values from
-    the popup list of a combo box when a certain key is pressed.
-  </li>
-</ol>
-<p>
- To summarize, the use of a Layout as the basis for a Custom Control has a
-number of advantages, including:</p>
- 
-<ul>
-  <li>
-    You can specify the layout using the declarative XML files just like
-    with an activity screen, or you can create views programmatically and
-    nest them into the layout from your code.
-  </li>
-  <li>
-    The <code>onDraw()</code> and <code>onMeasure()</code> methods (plus
-    most of the other <code>on...</code> methods) will likely have suitable behavior so
-    you don't have to override them.
-  </li>
-  <li>
-    In the end, you can very quickly construct arbitrarily complex compound
-    views and re-use them as if they were a single component.
-  </li>
-</ul>
-<h4>Examples of Compound Controls</h4>
-<p>In the API Demos project
- that comes with the SDK, there are two List
- examples &mdash; Example 4 and Example 6 under Views/Lists demonstrate a
- SpeechView which extends LinearLayout to make a component for displaying
- Speech quotes. The corresponding classes in the sample code are
- <code>List4.java</code> and <code>List6.java</code>.</p>
- 
-<a name="tweaking"></a>  
-<h2>Modifying an Existing View Type
-</h2>
-<p>There is an even easier option for creating a custom View which is
-useful in certain circumstances. If there is a component that is already very
-similar to what you want, you can simply extend that component and just
-override the behavior that you want to change. You can do all of the things
-you would do with a fully customized component, but by starting with a more
-specialized class in the View hierarchy, you can also get a lot of behavior for
-free that probably does exactly what you want.</p>
-<p>For example, the SDK includes a <a
-href="{@docRoot}samples/NotePad/index.html">NotePad application</a> in the
-samples. This demonstrates many aspects of using the Android platform, among
-them is extending an EditText View to make a lined notepad. This is not a
-perfect example, and the APIs for doing this might change from this early
-preview, but it does demonstrate the principles.</p>
-<p>If you haven't done so already, import the 
-NotePad sample into Eclipse (or
-just look at the source using the link provided). In particular look at the definition of
-<code>MyEditText</code> in the <a
-href="{@docRoot}samples/NotePad/src/com/example/android/notepad/NoteEditor.html">NoteEditor.java</a>
-file.</p>
-<p>Some points to note here</p>
-<ol>
-  <li>
-    <strong>The Definition</strong>
-    <p>The class is defined with the following line:</p>
-     <code>public static class MyEditText extends EditText</code><br><br>
-     
-    <ul>
-      <li>
-        It is defined as an inner class within the <code>NoteEditor</code>
-        activity, but it is public so that it could be accessed as
-        <code>NoteEditor.MyEditText</code> from outside of the <code>NoteEditor</code>
-        class if desired.
-      </li>
-      <li>
-        It is <code>static</code>, meaning it does not generate the so-called
-        "synthetic methods" that allow it to access data from the parent
-        class, which in turn means that it really behaves as a separate
-        class rather than something strongly related to <code>NoteEditor</code>.
-        This is a cleaner way to create inner classes if they do not need
-        access to state from the outer class, keeps the generated class
-        small, and allows it to be used easily from other classes.
-      </li>
-      <li>
-        It extends <code>EditText</code>, which is the View we have chosen to
-        customize in this case. When we are finished, the new class will be
-        able to substitute for a normal <code>EditText</code> view.<br>
-        <br>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <strong>Class Initialization</strong>
-    <p>As always, the super is called first. Furthermore, 
-    this is not a default constructor, but a parameterized one. The
-    EditText is created with these parameters when it is inflated from an
-    XML layout file, thus, our constructor needs to both take them and pass them
-    to the superclass constructor as well.</p>
-  </li>
-  <li>
-    <strong>Overridden Methods</strong>
-    <p>In this example, there is only one method to be overridden: 
-    <code>onDraw()</code> &mdash; but there could easily be others needed when you
-    create your own custom components.</p>
-    <p>For the NotePad sample, overriding the <code>onDraw()</code> method allows
-    us to paint the blue lines on the <code>EditText</code> view canvas (the
-    canvas is passed into the overridden <code>onDraw()</code> method). The
-    super.onDraw() method is called before the method ends. The
-    superclass method should be invoked, but in this case, we do it at the
-    end after we have painted the lines we want to include.</p>
-  <li>
-    <strong>Use the Custom Component</strong>
-    <p>We now have our custom component, but how can we use it? In the
-    NotePad example, the custom component is used directly from the
-    declarative layout, so take a look at <code>note_editor.xml</code> in the
-    <code>res/layout</code> folder.</p>
-    <pre>
-&lt;view xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; 
-  class=&quot;com.android.notepad.NoteEditor$MyEditText&quot; 
-  id=&quot;&#64;+id/note&quot;
-  android:layout_width=&quot;fill_parent&quot;
-  android:layout_height=&quot;fill_parent&quot;
-  android:background=&quot;&#64;android:drawable/empty&quot;
-  android:padding=&quot;10dip&quot;
-  android:scrollbars=&quot;vertical&quot;
-  android:fadingEdge=&quot;vertical&quot; /&gt; </pre>
-     
-    <ul>
-      <li>
-        The custom component is created as a generic view in the XML, and
-        the class is specified using the full package. Note also that the
-        inner class we defined is referenced using the
-        <code>NoteEditor$MyEditText</code> notation which is a standard way to
-        refer to inner classes in the Java programming language.
-      </li>
-      <li>
-        The other attributes and parameters in the definition are the ones
-        passed into the custom component constructor, and then passed
-        through to the EditText constructor, so they are the same
-        parameters that you would use for an EditText view. Note that it is
-        possible to add your own parameters as well, and we will touch on
-        this again below.
-      </li>
-    </ul>
-  </li>
-</ol>
-<p>And that's all there is to it. Admittedly this is a simple case, but
-that's the point &mdash; creating custom components is only as complicated as you
-need it to be.</p>
-<p>A more sophisticated component may override even more <code>on...</code> methods and
-introduce some of its own helper methods, substantially customizing its properties and
-behavior. The only limit is your imagination and what you need the component to
-do.</p>
-
diff --git a/docs/html/guide/topics/views/intro.jd b/docs/html/guide/topics/views/intro.jd
deleted file mode 100644
index f49f547..0000000
--- a/docs/html/guide/topics/views/intro.jd
+++ /dev/null
@@ -1,49 +0,0 @@
-page.title=Introduction to Views
-parent.title=Views and Layout
-parent.link=index.html
-@jd:body
-
-<p>The basic functional unit of an Android application is the <em>activity</em> &mdash; an object of the class {@link android.app.Activity android.app.Activity}. An activity can do many things, but by itself it does not have a  presence on the  screen. To give your activity a screen presence and design its UI, you work with <em>views</em> and <em>viewgroups</em> -- basic units of user interface expression on the Android platform.</p>
-
-<h2>Views</h2>
-<p>A view is an object of base class {@link android.view.View android.view.View}. It's a data structure whose   properties store the layout and content for a specific rectangular area of the screen. A View object handles measuring and layout, drawing, focus change, scrolling, and key/gestures for the screen area it represents. </p>
-<p>The View  class serves as a base  class for <em>widgets </em> &mdash; a set of fully implemented subclasses that draw interactive screen elements. Widgets handle their own measuring and drawing, so you can use them to build your UI more quickly. The list of  widgets available includes Text, EditText, InputMethod, MovementMethod, Button, RadioButton, Checkbox, and ScrollView.</p>
-
-<h2>Viewgroups </h2>
-
-<p>A viewgroup is an object of class {@link android.view.ViewGroup android.view.Viewgroup}. As its name indicates, a viewgroup is a special type of view object whose function is to contain and manage a subordinate set of views and other viewgroups, Viewgroups let you add structure to your UI and build up complex screen elements that can be addressed as a single entity. </p>
-
-<p>The Viewgroup class serves as a base class for <em>layouts</em> &mdash; a set of fully implemented subclasses that provide common types of screen layout. The layouts give you a way to build a structure for a set of views. </p>
-
-<h2>A Tree-Structured UI</h2>
-
-<p>On the Android platform, you define an Activity's UI using a tree of view and viewgroup nodes, as shown in the diagram below. The tree can be as simple or complex as you need to make it, and you can build it up using Android's set of predefined widgets and layouts  or  custom view types that you create yourself. </p>
-
-<img src={@docRoot}images/viewgroup.png alt="An example of a tree of views and viewgroups" width="312" height="211" align="center"/>
-
-<p>To attach the tree to the screen for rendering, your Activity calls its  setContentView() method and passes a reference to the root node  object. Once the Android system has the reference to the root node object, it can work directly with the node to invalidate, measure, and draw the tree. When your Activity becomes active and receives focus, the system notifies your activity and requests the root node to measure and draw the tree. The root node then requests that its child nodes draw themselves &mdash; in turn, each viewgroup node in the tree is responsible for drawing its direct children. </p>
-
-<p>As mentioned previously, each view group has the responsibility of
-  measuring its available space, laying out its children, and calling Draw() on
-  each child to let it render itself. The children may request a size and location
-  in the parent, but the parent object has the final decision on where how big
-  each child can be.</p>
-
-<h2>LayoutParams: How a Child Specifies Its Position and Size</h2>
-
-<p>Every viewgroup class uses a nested class that extends {@link
-android.view.ViewGroup.LayoutParams ViewGroup.LayoutParams}. This subclass
-  contains property types that define a child's size and position, in properties
-  appropriate for that view group class. </p>
-
-<img src={@docRoot}images/layoutparams.png alt="An example of layoutparams" width="632" height="369" align="center"/>
-
-<p>Note that every LayoutParams subclass has its own syntax for setting
-values. Each child element must define LayoutParams that are appropriate for its parent, although it may define different LayoutParams for its children. </p>
-
-<p>All viewgroups include width and height. Many also include margins and
-borders. You can specify width and height  exactly, though you probably won't want
-to do this often. More often you will tell your view to size itself either to
-the dimensions of its content, or to become as big as its containing object
-will allow.</p>
-
diff --git a/docs/html/guide/topics/views/ui-xml.jd b/docs/html/guide/topics/views/ui-xml.jd
deleted file mode 100644
index bcfa562..0000000
--- a/docs/html/guide/topics/views/ui-xml.jd
+++ /dev/null
@@ -1,138 +0,0 @@
-page.title=Declaring a UI in XML
-parent.title=Views and Layout
-parent.link=index.html
-@jd:body
-
-<p>You can create your application's user interface in two ways: 
-<ul>
-<li>You can declare UI elements statically, in XML. Android provides a straightforward XML vocabulary that corresponds to the View classes and subclasses, such as those for widgets and layouts. </li>
-<li>You can instantiate screen elements dynamically, at runtime, through code in your application. Your application can refer to or create View or other class objects and manipulate their properties programmatically. </li>
-</ul>
-
-<p>One advantage of declaring your UI in XML is that it enables you to better separate the presentation of your application from the code that controls it's behavior. Your UI description is external to your application code, which means that you can modify or adapt it without having to modify your source code and recompile. For example, you can create XML layouts for different screen orientations and for a variety of device screen sizes or languages. Additionally, declaring in XML makes it easier to see the elements and structure of your UI, so it's easier to debug problems. </p>
-
-<p>The Android framework gives you the flexibility to use either or both of these ways of declaring and managing your application's UI. For example, you could declare your application's default layouts in XML, including the screen elements that will appear in them and their properties. You could then add code in your application that would modify the state of the screen objects, including those declared in XML, at run time. </p>
-
-<p>You build your application's UI in approximately the same way, whether you are declaring it in XML or programmatically. In both cases, your UI will be a tree structure that may include multiple View or Viewgroup subclasses. <p>
-
-<p>In general, the XML vocabulary for declaring UI elements closely follows the structure and naming of the framework's UI-related classes and methods, where element names correspond to class names and attribute names correspond to methods. In fact, the correspondence is often so direct that you can guess what XML attribute corresponds to a class method, or guess what class corresponds to a given xml element. </p>
-
-<p>However, note that the XML vocabulary for defining UI is not entirely identical to the framework's classes and methods. In some cases, there are slight naming differences. For
-example, the EditText element has a <code>text</code> attribute that corresponds to
-EditText.setText. </p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<p>For your convenience, the API reference documentation for UI related classes
-lists the available XML attributes that correspond to the class methods, including inherited
-attributes.</p>
-
-<p>To learn more about the available XML elements and attributes, as well as the format of the XML file, see <a
-href="{@docRoot}reference/available-resources.html#layoutresources">Layout Resources</a>.</p>
-</div>
-</div>
-
-<p>Using Android's XML vocabulary, you can quickly design UI layouts and the screen elements they contain, in the same way you create HTML files &mdash; as a series of nested tags. </p>
-
-<p>Each layout file must contain exactly one root element, and the root element must be a View or ViewGroup object. Once you've defined the root element, you can add additional layout objects or controls as child elements of the root element, if needed. In the example below, the tree of XML elements evaluates to the outermost LinearLayout object.
-
-<p>After you've declared your layout in XML, you must save the file, with the <code>.xml</code> extension, in the proper location, so that it will be compiled correctly. The proper location for storing layout files is in your application's <code>res/layout/</code> directory. </p>
-
-<p>When you compile your application, each XML layout file is compiled into an
-android.view.View resource. You can then load the layout resource from your application code, by calling <code>setContentView(R.layout.<em>layout_file_name</em>)</code> in your {@link android.app.Activity#onCreate(android.os.Bundle) Activity.onCreate()} 
-implementation.</p>
-
-<p>When you load a layout resource, the Android system initializes run-time objects corresponding to the elements in your layout. It parses the elements of your layout in-order (depth-first), instantiating the Views and adding them to their parent(s). </p>
-
-<p>Attributes named <code>layout_<em>something</em></code> apply to that
-object's LayoutParams member. <a href="{@docRoot}reference/available-resources.html#layoutresources">Layout
-Resources</a> also describes how to learn the syntax for specifying
-LayoutParams properties. </p>
-
-<p>Also note that Android draws elements in the order in which they
-appear in the XML. Therefore, if elements overlap, the last one in the XML
-file will probably be drawn on top of any previously listed elements in that
-same space.</p>
-
-<p>The following values are supported for dimensions (described in {@link
-android.util.TypedValue TypedValue}):</p>
-
-<ul>
-    <li>px (pixels) </li>
-    <li>dip (device independent pixels) </li>
-    <li>sp (scaled pixels &mdash; best for text size) </li>
-    <li>pt (points) </li>
-    <li>in (inches) </li>
-    <li>mm (millimeters) </li>
-</ul>
-
-<p>Example: <code>android:layout_width=&quot;25px&quot;</code> </p>
-
-<p>For more information about these dimensions, see <a href="{@docRoot}reference/available-resources.html#dimension">Dimension Values</a>.</p>
-
-<p>The example below shows an XML file and the resulting screen in the UI. Note that the text on the
-top of the screen was set by calling {@link
-android.app.Activity#setTitle(java.lang.CharSequence) Activity.setTitle}. Note
-that the attributes that refer to relative elements (i.e., layout_toLeft)
-refer to the ID using the syntax of a relative resource
-(@id/<em>id_number</em>). </p>
-
-<table border="1">
-    <tr>
-        <td>
-        <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;!-- Demonstrates using a relative layout to create a form --&gt;
-&lt;RelativeLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android
-                android:layout_width=&quot;fill_parent&quot; 
-                android:layout_height=&quot;wrap_content&quot;
-                android:background=&quot;@drawable/blue&quot;
-                android:padding=&quot;10px&quot;&gt;
-
-    &lt;TextView id=&quot;@+id/label&quot; 
-              android:layout_width=&quot;fill_parent&quot; 
-              android:layout_height=&quot;wrap_content&quot; 
-              android:text=&quot;Type here:&quot;/&gt;
-
-    &lt;EditText id=&quot;@+id/entry&quot; 
-              android:layout_width=&quot;fill_parent&quot; 
-              android:layout_height=&quot;wrap_content&quot; 
-              android:background=&quot;@android:drawable/editbox_background&quot;
-              android:layout_below=&quot;@id/label&quot;/&gt;
-  
-    &lt;Button id=&quot;@+id/ok&quot; 
-            android:layout_width=&quot;wrap_content&quot; 
-            android:layout_height=&quot;wrap_content&quot; 
-            android:layout_below=&quot;@id/entry&quot;
-            android:layout_alignParentRight=&quot;true&quot;
-            android:layout_marginLeft=&quot;10px&quot;
-            android:text=&quot;OK&quot; /&gt;
-
-    &lt;Button android:layout_width=&quot;wrap_content&quot; 
-            android:layout_height=&quot;wrap_content&quot;
-            android:layout_toLeftOf=&quot;@id/ok&quot;
-            android:layout_alignTop=&quot;@id/ok&quot;
-            android:text=&quot;Cancel&quot; /&gt;
-&lt;/RelativeLayout&gt;</pre></td>
-        <td><img src="{@docRoot}images/designing_ui_layout_example.png" alt="Screen shot showing how this layout XML file is rendered."  /></td>
-    </tr>
-</table>
-
-<h3>Loading the XML Resource </h3>
-
-<p>Loading the compiled layout resource is very easy, and done with a single
-call in the activity's onCreate() method, as shown here:</p>
-
-<pre>
-protected void onCreate(Bundle savedValues)
-{
-   // Be sure to call the super class.
-   super.onCreate(savedValues);
-
-   // Load the compiled layout resource into the window's
-   // default ViewGroup.
-   // The source file is res/layout/hello_activity.xml
-    setContentView(R.layout.hello_activity);
-  
-   // Retrieve any important stored values.
-   restoreValues(savedValues);
-} </pre>
diff --git a/docs/html/guide/topics/wireless/bluetooth.jd b/docs/html/guide/topics/wireless/bluetooth.jd
deleted file mode 100644
index 0567799..0000000
--- a/docs/html/guide/topics/wireless/bluetooth.jd
+++ /dev/null
@@ -1,1086 +0,0 @@
-page.title=Bluetooth
-@jd:body
-
-<div id="qv-wrapper"> 
-<div id="qv"> 
- 
-  <h2>Quickview</h2> 
-  <ul> 
-    <li>Android's bluetooth APIs allow your application to perform wireless data transactions with
-other devices</li> 
-  </ul> 
- 
-  <h2>In this document</h2> 
-  <ol> 
-    <li><a href="#TheBasics">The Basics</a></li> 
-    <li><a href="#Permissions">Bluetooth Permissions</a></li> 
-    <li><a href="#SettingUp">Setting Up Bluetooth</a></li> 
-    <li><a href="#FindingDevices">Finding Devices</a> 
-      <ol> 
-        <li><a href="#QueryingPairedDevices">Querying paired devices</a></li> 
-        <li><a href="#DiscoveringDevices">Discovering devices</a></li> 
-      </ol></li> 
-    <li><a href="#ConnectingDevices">Connecting Devices</a> 
-      <ol> 
-        <li><a href="#ConnectingAsAServer">Connecting as a server</a></li> 
-        <li><a href="#ConnectingAsAClient">Connecting as a client</a></li> 
-      </ol></li> 
-    <li><a href="#ManagingAConnection">Managing a Connection</a></li>
-    <li><a href="#Profiles">Working with Profiles</a> 
-      <ol>
-        <li><a href="#AT-Commands">Vendor-specific AT commands</a>
-        <li><a href="#HDP">Health Device Profile</a>
-      </ol></li>
-  </ol> 
- 
-  <h2>Key classes</h2> 
-  <ol> 
-    <li>{@link android.bluetooth.BluetoothAdapter}</li> 
-    <li>{@link android.bluetooth.BluetoothDevice}</li> 
-    <li>{@link android.bluetooth.BluetoothSocket}</li> 
-    <li>{@link android.bluetooth.BluetoothServerSocket}</li> 
-  </ol> 
- 
-  <h2>Related samples</h2> 
-  <ol> 
-    <li><a href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat</a></li> 
-    <li><a href="{@docRoot}resources/samples/BluetoothHDP/index.html">Bluetooth HDP (Health Device Profile)</a></li>
-  </ol> 
- 
-</div> 
-</div> 
- 
- 
-<p>The Android platform includes support for the Bluetooth network stack,
-which allows a device to wirelessly exchange data with other Bluetooth devices.
-The application framework provides access to the Bluetooth functionality through
-the Android Bluetooth APIs. These APIs let applications wirelessly
-connect to other Bluetooth devices, enabling point-to-point and multipoint
-wireless features.</p> 
- 
-<p>Using the Bluetooth APIs, an Android application can perform the
-following:</p>
-<ul>
-  <li>Scan for other Bluetooth devices</li>
-  <li>Query the local Bluetooth adapter for paired Bluetooth devices</li>
-  <li>Establish RFCOMM channels</li>
-  <li>Connect to other devices through service discovery</li>
-  <li>Transfer data to and from other devices</li>
-  <li>Manage multiple connections</li>
-</ul>
-
-
-<h2 id="TheBasics">The Basics</h2>
-
-<p>This document describes how to use the Android Bluetooth APIs to accomplish
-the four major tasks necessary to communicate using Bluetooth: setting up
-Bluetooth, finding devices that are either paired or available in the local
-area, connecting devices, and transferring data between devices.</p> 
- 
-<p>All of the Bluetooth APIs are available in the {@link android.bluetooth}
-package. Here's a summary of the classes and interfaces you will need to create Bluetooth
-connections:</p> 
- 
-<dl> 
-<dt>{@link android.bluetooth.BluetoothAdapter}</dt> 
-<dd>Represents the local Bluetooth adapter (Bluetooth radio). The
-{@link android.bluetooth.BluetoothAdapter} is the entry-point for all Bluetooth
-interaction. Using this,
-you can discover other Bluetooth devices, query a list of bonded (paired)
-devices, instantiate a {@link android.bluetooth.BluetoothDevice} using a known
-MAC address, and create a {@link android.bluetooth.BluetoothServerSocket} to
-listen for communications
-from other devices.</dd> 
- 
-<dt>{@link android.bluetooth.BluetoothDevice}</dt> 
-<dd>Represents a remote Bluetooth device. Use this to request a connection
-with a remote device through a {@link android.bluetooth.BluetoothSocket} or
-query information about the
-device such as its name, address, class, and bonding state.</dd> 
- 
-<dt>{@link android.bluetooth.BluetoothSocket}</dt> 
-<dd>Represents the interface for a Bluetooth socket (similar to a TCP
-{@link java.net.Socket}). This is the connection point that allows
-an application to exchange data with another Bluetooth device via InputStream
-and OutputStream.</dd> 
- 
-<dt>{@link android.bluetooth.BluetoothServerSocket}</dt> 
-<dd>Represents an open server socket that listens for incoming requests
-(similar to a TCP {@link java.net.ServerSocket}). In order to connect two
-Android devices, one device must open a server socket with this class. When a
-remote Bluetooth device makes a connection request to the this device, the
-{@link android.bluetooth.BluetoothServerSocket} will return a connected {@link
-android.bluetooth.BluetoothSocket} when the
-connection is accepted.</dd> 
- 
-<dt>{@link android.bluetooth.BluetoothClass}</dt> 
-<dd>Describes the general characteristics and capabilities of a Bluetooth
-device. This is a read-only set of properties that define the device's major and
-minor device classes and its services. However, this does not reliably describe
-all Bluetooth profiles and services supported by the device, but is useful as a
-hint to the device type.</dd> 
- 
-<dt>{@link android.bluetooth.BluetoothProfile}</dt> <dd>An interface that
-represents a Bluetooth profile. A <em>Bluetooth profile</em> is a wireless
-interface specification for Bluetooth-based communication between devices. An
-example is the Hands-Free profile.  For more discussion of profiles, see <a
-href="#Profiles">Working with Profiles</a></dd> 
-
-<dt>{@link android.bluetooth.BluetoothHeadset}</dt> <dd>Provides support for
-Bluetooth headsets to be used with mobile phones. This includes both  Bluetooth
-Headset and Hands-Free (v1.5) profiles.</dd> 
-
-<dt>{@link android.bluetooth.BluetoothA2dp}</dt> <dd> Defines how high quality
-audio can be streamed from one device to another over a Bluetooth connection.
-"A2DP" stands for Advanced Audio Distribution Profile.</dd> 
-
-<dt>{@link android.bluetooth.BluetoothHealth}</dt>
-<dd> Represents a Health Device Profile proxy that controls the Bluetooth service.</dd>
-
-<dt>{@link android.bluetooth.BluetoothHealthCallback}</dt>
-
-<dd>An abstract class that you use to implement {@link
-android.bluetooth.BluetoothHealth} callbacks. You must extend this class and
-implement the callback methods to receive updates about changes in the
-application’s registration state and Bluetooth channel state.</dd>
-
-<dt>{@link android.bluetooth.BluetoothHealthAppConfiguration}</dt>
-
-<dd>Represents an application configuration that the Bluetooth Health third-party 
-application registers to communicate with a remote Bluetooth health
-device.</dd> 
-
-<dt>{@link android.bluetooth.BluetoothProfile.ServiceListener}</dt>
-
-<dd>An interface that notifies {@link android.bluetooth.BluetoothProfile} IPC
-clients when they have  been connected to or disconnected from the service (that
-is, the internal service that runs a particular profile). </dd>
- 
-</dl> 
- 
- 
- 
- 
-<h2 id="Permissions">Bluetooth Permissions</h2> 
- 
-<p>In order to use Bluetooth features in your application, you need to declare
-at least one of two Bluetooth permissions: {@link
-android.Manifest.permission#BLUETOOTH} and {@link
-android.Manifest.permission#BLUETOOTH_ADMIN}.</p> 
- 
-<p>You must request the {@link android.Manifest.permission#BLUETOOTH} permission
-in order to perform any Bluetooth communication, such as requesting a
-connection, accepting a connection, and transferring data.</p> 
- 
-<p>You must request the {@link android.Manifest.permission#BLUETOOTH_ADMIN}
-permission in order to initiate device discovery or manipulate Bluetooth
-settings. Most applications need this permission solely for the
-ability to discover local Bluetooth devices. The other abilities granted by this
-permission should not be used, unless the application is a "power manager" that
-will modify Bluetooth settings upon user request. <strong>Note:</strong> If you
-use {@link android.Manifest.permission#BLUETOOTH_ADMIN} permission, then must
-also have the {@link android.Manifest.permission#BLUETOOTH} permission.</p> 
- 
-<p>Declare the Bluetooth permission(s) in your application manifest file. For
-example:</p> 
- 
-<pre> 
-&lt;manifest ... >
-  &lt;uses-permission android:name="android.permission.BLUETOOTH" />
-  ...
-&lt;/manifest>
-</pre> 
- 
-<p>See the <a
-href="{@docRoot}guide/topics/manifest/uses-permission-element.html">&lt;uses-permission></a> 
-reference for more information about declaring application permissions.</p> 
- 
- 
-<h2 id="SettingUp">Setting Up Bluetooth</h2> 
- 
-<div class="figure" style="width:200px"> 
-<img src="{@docRoot}images/bt_enable_request.png" /> 
-<strong>Figure 1:</strong> The enabling Bluetooth dialog.
-</div> 
- 
-<p>Before your application can communicate over Bluetooth, you need to verify
-that Bluetooth is supported on the device, and if so, ensure that it is enabled.</p> 
- 
-<p>If Bluetooth is not supported, then you should gracefully disable any
-Bluetooth features. If Bluetooth is supported, but disabled, then you can request that the
-user enable Bluetooth without leaving your application. This setup is
-accomplished in two steps, using the {@link android.bluetooth.BluetoothAdapter}.</p> 
- 
- 
-<ol> 
-<li>Get the {@link android.bluetooth.BluetoothAdapter}
-<p>The {@link android.bluetooth.BluetoothAdapter} is required for any and all Bluetooth
-activity. To get the {@link android.bluetooth.BluetoothAdapter}, call the static {@link
-android.bluetooth.BluetoothAdapter#getDefaultAdapter()} method. This returns a
-{@link android.bluetooth.BluetoothAdapter} that represents the device's own
-Bluetooth adapter (the Bluetooth radio). There's one Bluetooth adapter for the
-entire system, and your application can interact with it using this object. If
-{@link android.bluetooth.BluetoothAdapter#getDefaultAdapter()} returns null,
-then the device does not support Bluetooth and your story ends here. For example:</p> 
-<pre> 
-BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-if (mBluetoothAdapter == null) {
-    // Device does not support Bluetooth
-}
-</pre> 
-</li> 
- 
-<li>Enable Bluetooth
-<p>Next, you need to ensure that Bluetooth is enabled. Call {@link
-android.bluetooth.BluetoothAdapter#isEnabled()} to check whether Bluetooth is
-currently enable. If this method returns false, then Bluetooth is disabled. To
-request that Bluetooth be enabled, call {@link
-android.app.Activity#startActivityForResult(Intent,int) startActivityForResult()}
-with the {@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} action Intent.
-This will issue a request to enable Bluetooth through the system settings (without
-stopping your application). For example:</p> 
-<pre> 
-if (!mBluetoothAdapter.isEnabled()) {
-    Intent enableBtIntent = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
-    startActivityForResult(enableBtIntent, REQUEST_ENABLE_BT);
-}
-</pre> 
- 
-<p>A dialog will appear requesting user permission to enable Bluetooth, as shown
-in Figure 1. If the user responds "Yes," the system will begin to enable Bluetooth
-and focus will return to your application once the process completes (or fails).</p> 
-
-<p>The {@code REQUEST_ENABLE_BT} constant passed to {@link
-android.app.Activity#startActivityForResult(Intent,int) startActivityForResult()} is a locally
-defined integer (which must be greater than 0), that the system passes back to you in your
-{@link
-android.app.Activity#onActivityResult(int,int,Intent) onActivityResult()} implementation as the
-<code>requestCode</code> parameter.</p>
-
-<p>If enabling Bluetooth succeeds, your activity receives the {@link
-android.app.Activity#RESULT_OK} result code in the {@link
-android.app.Activity#onActivityResult(int,int,Intent) onActivityResult()}
-callback. If Bluetooth was not enabled
-due to an error (or the user responded "No") then the result code is {@link
-android.app.Activity#RESULT_CANCELED}.</p>
-</li> 
-</ol> 
- 
-<p>Optionally, your application can also listen for the
-{@link android.bluetooth.BluetoothAdapter#ACTION_STATE_CHANGED} broadcast Intent, which
-the system will broadcast whenever the Bluetooth state has changed. This broadcast contains
-the extra fields {@link android.bluetooth.BluetoothAdapter#EXTRA_STATE} and {@link
-android.bluetooth.BluetoothAdapter#EXTRA_PREVIOUS_STATE}, containing the new and old
-Bluetooth states, respectively. Possible values for these extra fields are
-{@link android.bluetooth.BluetoothAdapter#STATE_TURNING_ON}, {@link
-android.bluetooth.BluetoothAdapter#STATE_ON}, {@link
-android.bluetooth.BluetoothAdapter#STATE_TURNING_OFF}, and {@link
-android.bluetooth.BluetoothAdapter#STATE_OFF}. Listening for this
-broadcast can be useful to detect changes made to the Bluetooth state while your
-app is running.</p> 
- 
-<p class="note"><strong>Tip:</strong> Enabling discoverability will automatically
-enable Bluetooth. If you plan to consistently enable device discoverability before
-performing Bluetooth activity, you can skip
-step 2 above. Read about <a href="#EnablingDiscoverability">enabling discoverability</a>,
-below.</p> 
- 
- 
-<h2 id="FindingDevices">Finding Devices</h2> 
- 
-<p>Using the {@link android.bluetooth.BluetoothAdapter}, you can find remote Bluetooth
-devices either through device discovery or by querying the list of paired (bonded)
-devices.</p> 
- 
-<p>Device discovery is a scanning procedure that searches the local area for
-Bluetooth enabled devices and then requesting some information about each one
-(this is sometimes referred to as "discovering," "inquiring" or "scanning").
-However, a Bluetooth device within the local area will respond to a discovery
-request only if it is currently enabled to be discoverable. If a device is
-discoverable, it will respond to the discovery request by sharing some
-information, such as the device name, class, and its unique MAC address. Using
-this information, the device performing discovery can then choose to initiate a
-connection to the discovered device.</p> 
- 
-<p>Once a connection is made with a remote device for the first time, a pairing
-request is automatically presented to the user. When a device is
-paired, the basic information about that device (such as the device name, class,
-and MAC address) is saved and can be read using the Bluetooth APIs. Using the
-known MAC address for a remote device, a connection can be initiated with it at
-any time without performing discovery (assuming the device is within range).</p> 
- 
-<p>Remember there is a difference between being paired and being connected. To
-be paired means that two devices are aware of each other's existence, have a
-shared link-key that can be used for authentication, and are capable of
-establishing an encrypted connection with each other. To be connected means that
-the devices currently share an RFCOMM channel and are able to transmit data with
-each other. The current Android Bluetooth API's require devices to be paired
-before an RFCOMM connection can be established. (Pairing is automatically performed
-when you initiate an encrypted connection with the Bluetooth APIs.)</p> 
- 
-<p>The following sections describe how to find devices that have been paired, or
-discover new devices using device discovery.</p> 
- 
-<p class="note"><strong>Note:</strong> Android-powered devices are not
-discoverable by default. A user can make
-the device discoverable for a limited time through the system settings, or an
-application can request that the user enable discoverability without leaving the
-application. How to <a href="#EnablingDiscoverability">enable discoverability</a> 
-is discussed below.</p> 
- 
- 
-<h3 id="QueryingPairedDevices">Querying paired devices</h3> 
- 
-<p>Before performing device discovery, its worth querying the set
-of paired devices to see if the desired device is already known. To do so,
-call {@link android.bluetooth.BluetoothAdapter#getBondedDevices()}. This
-will return a Set of {@link android.bluetooth.BluetoothDevice}s representing
-paired devices. For example, you can query all paired devices and then
-show the name of each device to the user, using an ArrayAdapter:</p> 
-<pre> 
-Set&lt;BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
-// If there are paired devices
-if (pairedDevices.size() > 0) {
-    // Loop through paired devices
-    for (BluetoothDevice device : pairedDevices) {
-        // Add the name and address to an array adapter to show in a ListView
-        mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
-    }
-}
-</pre> 
- 
-<p>All that's needed from the {@link android.bluetooth.BluetoothDevice} object
-in order to initiate a connection is the MAC address. In this example, it's saved
-as a part of an ArrayAdapter that's shown to the user. The MAC address can later
-be extracted in order to initiate the connection. You can learn more about creating
-a connection in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> 
- 
- 
-<h3 id="DiscoveringDevices">Discovering devices</h3> 
- 
-<p>To start discovering devices, simply call {@link
-android.bluetooth.BluetoothAdapter#startDiscovery()}. The
-process is asynchronous and the method will immediately return with a boolean
-indicating whether discovery has successfully started. The discovery process
-usually involves an inquiry scan of about 12 seconds, followed by a page scan of
-each found device to retrieve its Bluetooth name.</p> 
- 
-<p>Your application must register a BroadcastReceiver for the
-{@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent in
-order to receive information about each
-device discovered. For each device, the system will broadcast the
-{@link android.bluetooth.BluetoothDevice#ACTION_FOUND} Intent. This
-Intent carries the extra fields
-{@link android.bluetooth.BluetoothDevice#EXTRA_DEVICE} and
-{@link android.bluetooth.BluetoothDevice#EXTRA_CLASS}, containing a
-{@link android.bluetooth.BluetoothDevice} and a {@link
-android.bluetooth.BluetoothClass}, respectively. For example, here's how you can
-register to handle the broadcast when devices are discovered:</p> 
-<pre> 
-// Create a BroadcastReceiver for ACTION_FOUND
-private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
-    public void onReceive(Context context, Intent intent) {
-        String action = intent.getAction();
-        // When discovery finds a device
-        if (BluetoothDevice.ACTION_FOUND.equals(action)) {
-            // Get the BluetoothDevice object from the Intent
-            BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
-            // Add the name and address to an array adapter to show in a ListView
-            mArrayAdapter.add(device.getName() + "\n" + device.getAddress());
-        }
-    }
-};
-// Register the BroadcastReceiver
-IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
-registerReceiver(mReceiver, filter); // Don't forget to unregister during onDestroy
-</pre> 
- 
-<p>All that's needed from the {@link android.bluetooth.BluetoothDevice} object
-in order to initiate a
-connection is the MAC address. In this example, it's saved as a part of an
-ArrayAdapter that's shown to the user. The MAC address can later be extracted in
-order to initiate the connection. You can learn more about creating a connection
-in the section about <a href="#ConnectingDevices">Connecting Devices</a>.</p> 
- 
-<p class="caution"><strong>Caution:</strong> Performing device discovery is
-a heavy procedure for the Bluetooth
-adapter and will consume a lot of its resources. Once you have found a device to
-connect, be certain that you always stop discovery with
-{@link android.bluetooth.BluetoothAdapter#cancelDiscovery()} before
-attempting a connection. Also, if you
-already hold a connection with a device, then performing discovery can
-significantly reduce the bandwidth available for the connection, so you should
-not perform discovery while connected.</p> 
- 
-<h4 id="EnablingDiscoverability">Enabling discoverability</h4> 
- 
-<p>If you would like to make the local device discoverable to other devices,
-call {@link android.app.Activity#startActivityForResult(Intent,int)} with the
-{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE} action
-Intent. This will issue a request to enable discoverable mode through the system
-settings (without stopping your application). By default, the device will become
-discoverable for 120 seconds. You can define a different duration by adding the
-{@link android.bluetooth.BluetoothAdapter#EXTRA_DISCOVERABLE_DURATION} Intent
-extra. The maximum duration an app can set is 3600 seconds, and a value of 0
-means the device is always discoverable. Any value below 0 or above 3600 is
-automatically set to 120 secs). For example, this snippet sets the duration to
-300:</p> 
-
-<pre>Intent discoverableIntent = new
-Intent(BluetoothAdapter.ACTION_REQUEST_DISCOVERABLE);
-discoverableIntent.putExtra(BluetoothAdapter.EXTRA_DISCOVERABLE_DURATION, 300);
-startActivity(discoverableIntent);
-</pre> 
- 
-<div class="figure" style="width:200px"> 
-<img src="{@docRoot}images/bt_enable_discoverable.png" /> 
-<strong>Figure 2:</strong> The enabling discoverability dialog.
-</div> 
- 
-<p>A dialog will be displayed, requesting user permission to make the device
-discoverable, as shown in Figure 2. If the user responds "Yes," then the device
-will become discoverable for the specified amount of time. Your activity will
-then receive a call to the {@link android.app.Activity#onActivityResult(int,int,Intent)
-onActivityResult())} callback, with the result code equal to the duration that the device
-is discoverable. If the user responded "No" or if an error occurred, the result code will
-be {@link android.app.Activity#RESULT_CANCELED}.</p> 
- 
-<p class="note"><strong>Note:</strong> If Bluetooth has not been enabled on the device,
-then enabling device discoverability will automatically enable Bluetooth.</p> 
- 
-<p>The device will silently remain in discoverable mode for the allotted time.
-If you would like to be notified when the discoverable mode has changed, you can
-register a BroadcastReceiver for the {@link
-android.bluetooth.BluetoothAdapter#ACTION_SCAN_MODE_CHANGED}
-Intent. This will contain the extra fields {@link
-android.bluetooth.BluetoothAdapter#EXTRA_SCAN_MODE} and
-{@link android.bluetooth.BluetoothAdapter#EXTRA_PREVIOUS_SCAN_MODE}, which tell you the
-new and old scan mode, respectively. Possible values for each are
-{@link android.bluetooth.BluetoothAdapter#SCAN_MODE_CONNECTABLE_DISCOVERABLE},
-{@link android.bluetooth.BluetoothAdapter#SCAN_MODE_CONNECTABLE}, or {@link
-android.bluetooth.BluetoothAdapter#SCAN_MODE_NONE},
-which indicate that the device is either in discoverable mode, not in
-discoverable mode but still able to receive connections, or not in discoverable
-mode and unable to receive connections, respectively.</p> 
- 
-<p>You do not need to enable device discoverability if you will be initiating
-the connection to a remote device. Enabling discoverability is only necessary when
-you want your application to host a server socket that will accept incoming
-connections, because the remote devices must be able to discover the device
-before it can initiate the connection.</p> 
- 
- 
- 
-<h2 id="ConnectingDevices">Connecting Devices</h2> 
- 
-<p>In order to create a connection between your application on two devices, you
-must implement both the server-side and client-side mechanisms, because one
-device must open a server socket and the other one must initiate the connection
-(using the server device's MAC address to initiate a connection). The server and
-client are considered connected to each other when they each have a connected
-{@link android.bluetooth.BluetoothSocket} on the same RFCOMM channel. At this
-point, each device can obtain input and output streams and data transfer can
-begin, which is discussed in the section about <a
-href="#ManagingAConnection">Managing a Connection</a>. This section describes how
-to initiate the connection between two devices.</p> 
- 
-<p>The server device and the client device each obtain the required {@link
-android.bluetooth.BluetoothSocket} in different ways. The server will receive it
-when an incoming connection is accepted. The client will receive it when it
-opens an RFCOMM channel to the server.</p> 
- 
-<div class="figure" style="width:200px"> 
-<img src="{@docRoot}images/bt_pairing_request.png" /> 
-<strong>Figure 3:</strong> The Bluetooth pairing dialog.
-</div> 
- 
-<p>One implementation technique is to automatically prepare each device as a
-server, so that each one has a server socket open and listening for connections.
-Then either device can initiate a connection with the other and become the
-client. Alternatively, one device can explicitly "host" the connection and open
-a server socket on demand and the other device can simply initiate the
-connection.</p> 
- 
-<p class="note"><strong>Note:</strong> If the two devices have not been previously paired,
-then the Android framework will automatically show a pairing request notification or
-dialog to the user during the connection procedure, as shown in Figure 3. So
-when attempting to connect devices,
-your application does not need to be concerned about whether or not the devices are
-paired. Your RFCOMM connection attempt will block until the user has successfully paired,
-or will fail if the user rejects pairing, or if pairing fails or times out. </p> 
- 
- 
-<h3 id="ConnectingAsAServer">Connecting as a server</h3> 
- 
-<p>When you want to connect two devices, one must act as a server by holding an
-open {@link android.bluetooth.BluetoothServerSocket}. The purpose of the server
-socket is to listen for incoming connection requests and when one is accepted,
-provide a connected {@link android.bluetooth.BluetoothSocket}. When the {@link
-android.bluetooth.BluetoothSocket} is acquired from the {@link
-android.bluetooth.BluetoothServerSocket},
-the {@link android.bluetooth.BluetoothServerSocket} can (and should) be
-discarded, unless you want to accept more connections.</p> 
- 
-<div class="sidebox-wrapper"> 
-<div class="sidebox"> 
-<h2>About UUID</h2> 
- 
-<p>A Universally Unique Identifier (UUID) is a standardized 128-bit format for a string
-ID used to uniquely identify information. The point of a UUID is that it's big
-enough that you can select any random and it won't clash. In this case, it's
-used to uniquely identify your application's Bluetooth service. To get a UUID to
-use with your application, you can use one of the many random UUID generators on
-the web, then initialize a {@link java.util.UUID} with {@link
-java.util.UUID#fromString(String)}.</p> 
-</div> 
-</div> 
- 
-<p>Here's the basic procedure to set up a server socket and accept a
-connection:</p> 
- 
-<ol> 
-<li>Get a {@link android.bluetooth.BluetoothServerSocket} by calling the
-{@link
-android.bluetooth.BluetoothAdapter#listenUsingRfcommWithServiceRecord(String,
-UUID)}.
-<p>The string is an identifiable name of your service, which the system will
-automatically write to a new Service Discovery Protocol (SDP) database entry on
-the device (the name is arbitrary and can simply be your application name). The
-UUID is also included in the SDP entry and will be the basis for the connection
-agreement with the client device. That is, when the client attempts to connect
-with this device, it will carry a UUID that uniquely identifies the service with
-which it wants to connect. These UUIDs must match in order for the connection to
-be accepted (in the next step).</p> 
-</li> 
- 
-<li>Start listening for connection requests by calling
-{@link android.bluetooth.BluetoothServerSocket#accept()}.
-<p>This is a blocking call. It will return when either a connection has been
-accepted or an exception has occurred. A connection is accepted only when a
-remote device has sent a connection request with a UUID matching the one
-registered with this listening server socket. When successful, {@link
-android.bluetooth.BluetoothServerSocket#accept()} will
-return a connected {@link android.bluetooth.BluetoothSocket}.</p> 
-</li> 
- 
-<li>Unless you want to accept additional connections, call
-{@link android.bluetooth.BluetoothServerSocket#close()}.
-<p>This releases the server socket and all its resources, but does <em>not</em> close the
-connected {@link android.bluetooth.BluetoothSocket} that's been returned by {@link
-android.bluetooth.BluetoothServerSocket#accept()}. Unlike TCP/IP, RFCOMM only allows one
-connected client per channel at a time, so in most cases it makes sense to call {@link
-android.bluetooth.BluetoothServerSocket#close()} on the {@link
-android.bluetooth.BluetoothServerSocket} immediately after accepting a connected
-socket.</p> 
-</li> 
-</ol> 
- 
-<p>The {@link android.bluetooth.BluetoothServerSocket#accept()} call should not
-be executed in the main activity UI thread because it is a blocking call and
-will prevent any other interaction with the application. It usually makes
-sense to do all work with a {@link android.bluetooth.BluetoothServerSocket} or {@link
-android.bluetooth.BluetoothSocket} in a new
-thread managed by your application. To abort a blocked call such as {@link
-android.bluetooth.BluetoothServerSocket#accept()}, call {@link
-android.bluetooth.BluetoothServerSocket#close()} on the {@link
-android.bluetooth.BluetoothServerSocket} (or {@link
-android.bluetooth.BluetoothSocket}) from another thread and the blocked call will
-immediately return. Note that all methods on a {@link
-android.bluetooth.BluetoothServerSocket} or {@link android.bluetooth.BluetoothSocket}
-are thread-safe.</p> 
- 
-<h4>Example</h4> 
- 
-<p>Here's a simplified thread for the server component that accepts incoming
-connections:</p> 
-<pre> 
-private class AcceptThread extends Thread {
-    private final BluetoothServerSocket mmServerSocket;
- 
-    public AcceptThread() {
-        // Use a temporary object that is later assigned to mmServerSocket,
-        // because mmServerSocket is final
-        BluetoothServerSocket tmp = null;
-        try {
-            // MY_UUID is the app's UUID string, also used by the client code
-            tmp = mBluetoothAdapter.listenUsingRfcommWithServiceRecord(NAME, MY_UUID);
-        } catch (IOException e) { }
-        mmServerSocket = tmp;
-    }
- 
-    public void run() {
-        BluetoothSocket socket = null;
-        // Keep listening until exception occurs or a socket is returned
-        while (true) {
-            try {
-                socket = mmServerSocket.accept();
-            } catch (IOException e) {
-                break;
-            }
-            // If a connection was accepted
-            if (socket != null) {
-                // Do work to manage the connection (in a separate thread)
-                manageConnectedSocket(socket);
-                mmServerSocket.close();
-                break;
-            }
-        }
-    }
- 
-    /** Will cancel the listening socket, and cause the thread to finish */
-    public void cancel() {
-        try {
-            mmServerSocket.close();
-        } catch (IOException e) { }
-    }
-}
-</pre> 
- 
-<p>In this example, only one incoming connection is desired, so as soon as a
-connection is accepted and the {@link android.bluetooth.BluetoothSocket} is
-acquired, the application
-sends the acquired {@link android.bluetooth.BluetoothSocket} to a separate
-thread, closes the
-{@link android.bluetooth.BluetoothServerSocket} and breaks the loop.</p> 
- 
-<p>Note that when {@link android.bluetooth.BluetoothServerSocket#accept()}
-returns the {@link android.bluetooth.BluetoothSocket}, the socket is already
-connected, so you should <em>not</em> call {@link
-android.bluetooth.BluetoothSocket#connect()} (as you do from the
-client-side).</p> 
- 
-<p><code>manageConnectedSocket()</code> is a fictional method in the application
-that will
-initiate the thread for transferring data, which is discussed in the section
-about <a href="#ManagingAConnection">Managing a Connection</a>.</p> 
- 
-<p>You should usually close your {@link android.bluetooth.BluetoothServerSocket}
-as soon as you are done listening for incoming connections. In this example, {@link
-android.bluetooth.BluetoothServerSocket#close()} is called as soon
-as the {@link android.bluetooth.BluetoothSocket} is acquired. You may also want
-to provide a public method in your thread that can close the private {@link
-android.bluetooth.BluetoothSocket} in the event that you need to stop listening on the
-server socket.</p> 
- 
- 
-<h3 id="ConnectingAsAClient">Connecting as a client</h3> 
- 
-<p>In order to initiate a connection with a remote device (a device holding an
-open
-server socket), you must first obtain a {@link
-android.bluetooth.BluetoothDevice} object that represents the remote device.
-(Getting a {@link android.bluetooth.BluetoothDevice} is covered in the above
-section about <a
-href="#FindingDevices">Finding Devices</a>.) You must then use the
-{@link android.bluetooth.BluetoothDevice} to acquire a {@link
-android.bluetooth.BluetoothSocket} and initiate the connection.</p> 
- 
-<p>Here's the basic procedure:</p> 
- 
-<ol> 
-<li>Using the {@link android.bluetooth.BluetoothDevice}, get a {@link
-android.bluetooth.BluetoothSocket} by calling {@link
-android.bluetooth.BluetoothDevice#createRfcommSocketToServiceRecord(UUID)}.
-<p>This initializes a {@link android.bluetooth.BluetoothSocket} that will
-connect to the {@link android.bluetooth.BluetoothDevice}. The UUID passed here
-must match the UUID used by the server device when it opened its
-{@link android.bluetooth.BluetoothServerSocket} (with {@link
-android.bluetooth.BluetoothAdapter#listenUsingRfcommWithServiceRecord(String,
-UUID)}). Using the same UUID is simply a matter of hard-coding the UUID string
-into your application and then referencing it from both the server and client
-code.</p> 
-</li> 
- 
-<li>Initiate the connection by calling {@link
-android.bluetooth.BluetoothSocket#connect()}.
-<p>Upon this call, the system will perform an SDP lookup on the remote device in
-order to match the UUID. If the lookup is successful and the remote device
-accepts the connection, it will share the RFCOMM channel to use during the
-connection and {@link
-android.bluetooth.BluetoothSocket#connect()} will return. This method is a
-blocking call. If, for
-any reason, the connection fails or the {@link
-android.bluetooth.BluetoothSocket#connect()} method times out (after about
-12 seconds), then it will throw an exception.</p> 
-<p>Because {@link
-android.bluetooth.BluetoothSocket#connect()} is a blocking call, this connection
-procedure should always be performed in a thread separate from the main activity
-thread.</p> 
-<p class="note">Note: You should always ensure that the device is not performing
-device discovery when you call {@link
-android.bluetooth.BluetoothSocket#connect()}. If discovery is in progress, then
-the
-connection attempt will be significantly slowed and is more likely to fail.</p> 
-</li> 
-</ol> 
- 
-<h4>Example</h4> 
- 
-<p>Here is a basic example of a thread that initiates a Bluetooth
-connection:</p> 
-<pre> 
-private class ConnectThread extends Thread {
-    private final BluetoothSocket mmSocket;
-    private final BluetoothDevice mmDevice;
- 
-    public ConnectThread(BluetoothDevice device) {
-        // Use a temporary object that is later assigned to mmSocket,
-        // because mmSocket is final
-        BluetoothSocket tmp = null;
-        mmDevice = device;
- 
-        // Get a BluetoothSocket to connect with the given BluetoothDevice
-        try {
-            // MY_UUID is the app's UUID string, also used by the server code
-            tmp = device.createRfcommSocketToServiceRecord(MY_UUID);
-        } catch (IOException e) { }
-        mmSocket = tmp;
-    }
- 
-    public void run() {
-        // Cancel discovery because it will slow down the connection
-        mBluetoothAdapter.cancelDiscovery();
- 
-        try {
-            // Connect the device through the socket. This will block
-            // until it succeeds or throws an exception
-            mmSocket.connect();
-        } catch (IOException connectException) {
-            // Unable to connect; close the socket and get out
-            try {
-                mmSocket.close();
-            } catch (IOException closeException) { }
-            return;
-        }
- 
-        // Do work to manage the connection (in a separate thread)
-        manageConnectedSocket(mmSocket);
-    }
- 
-    /** Will cancel an in-progress connection, and close the socket */
-    public void cancel() {
-        try {
-            mmSocket.close();
-        } catch (IOException e) { }
-    }
-}
-</pre> 
- 
-<p>Notice that {@link android.bluetooth.BluetoothAdapter#cancelDiscovery()} is called
-before the connection is made. You should always do this before connecting and it is safe
-to call without actually checking whether it is running or not (but if you do want to
-check, call {@link android.bluetooth.BluetoothAdapter#isDiscovering()}).</p> 
- 
-<p><code>manageConnectedSocket()</code> is a fictional method in the application
-that will initiate the thread for transferring data, which is discussed in the section
-about <a href="#ManagingAConnection">Managing a Connection</a>.</p> 
- 
-<p>When you're done with your {@link android.bluetooth.BluetoothSocket}, always
-call {@link android.bluetooth.BluetoothSocket#close()} to clean up.
-Doing so will immediately close the connected socket and clean up all internal
-resources.</p> 
- 
- 
-<h2 id="ManagingAConnection">Managing a Connection</h2> 
- 
-<p>When you have successfully connected two (or more) devices, each one will
-have a connected {@link android.bluetooth.BluetoothSocket}. This is where the fun
-begins because you can share data between devices. Using the {@link
-android.bluetooth.BluetoothSocket}, the general procedure to transfer arbitrary data is
-simple:</p> 
-<ol> 
-<li>Get the {@link java.io.InputStream} and {@link java.io.OutputStream} that
-handle transmissions through the socket, via {@link
-android.bluetooth.BluetoothSocket#getInputStream()} and
-{@link android.bluetooth.BluetoothSocket#getOutputStream}, respectively.</li> 
- 
-<li>Read and write data to the streams with {@link
-java.io.InputStream#read(byte[])} and {@link java.io.OutputStream#write(byte[])}.</li> 
-</ol> 
- 
-<p>That's it.</p> 
- 
-<p>There are, of course, implementation details to consider. First and foremost,
-you should use a dedicated thread for all stream reading and writing. This is
-important because both {@link java.io.InputStream#read(byte[])} and {@link
-java.io.OutputStream#write(byte[])} methods are blocking calls. {@link
-java.io.InputStream#read(byte[])} will block until there is something to read
-from the stream. {@link java.io.OutputStream#write(byte[])} does not usually
-block, but can block for flow control if the remote device is not calling {@link
-java.io.InputStream#read(byte[])} quickly enough and the intermediate buffers are full.
-So, your main loop in the thread should be dedicated to reading from the {@link
-java.io.InputStream}. A separate public method in the thread can be used to initiate
-writes to the {@link java.io.OutputStream}.</p> 
- 
-<h4>Example</h4> 
- 
-<p>Here's an example of how this might look:</p> 
-<pre> 
-private class ConnectedThread extends Thread {
-    private final BluetoothSocket mmSocket;
-    private final InputStream mmInStream;
-    private final OutputStream mmOutStream;
- 
-    public ConnectedThread(BluetoothSocket socket) {
-        mmSocket = socket;
-        InputStream tmpIn = null;
-        OutputStream tmpOut = null;
- 
-        // Get the input and output streams, using temp objects because
-        // member streams are final
-        try {
-            tmpIn = socket.getInputStream();
-            tmpOut = socket.getOutputStream();
-        } catch (IOException e) { }
- 
-        mmInStream = tmpIn;
-        mmOutStream = tmpOut;
-    }
- 
-    public void run() {
-        byte[] buffer = new byte[1024];  // buffer store for the stream
-        int bytes; // bytes returned from read()
- 
-        // Keep listening to the InputStream until an exception occurs
-        while (true) {
-            try {
-                // Read from the InputStream
-                bytes = mmInStream.read(buffer);
-                // Send the obtained bytes to the UI activity
-                mHandler.obtainMessage(MESSAGE_READ, bytes, -1, buffer)
-                        .sendToTarget();
-            } catch (IOException e) {
-                break;
-            }
-        }
-    }
- 
-    /* Call this from the main activity to send data to the remote device */
-    public void write(byte[] bytes) {
-        try {
-            mmOutStream.write(bytes);
-        } catch (IOException e) { }
-    }
- 
-    /* Call this from the main activity to shutdown the connection */
-    public void cancel() {
-        try {
-            mmSocket.close();
-        } catch (IOException e) { }
-    }
-}
-</pre> 
- 
-<p>The constructor acquires the necessary streams and once executed, the thread
-will wait for data to come through the InputStream. When {@link
-java.io.InputStream#read(byte[])} returns with
-bytes from the stream, the data is sent to the main activity using a member
-Handler from the parent class. Then it goes back and waits for more bytes from
-the stream.</p> 
- 
-<p>Sending outgoing data is as simple as calling the thread's
-<code>write()</code> method from the main activity and passing in the bytes to
-be sent. This method then simply calls {@link
-java.io.OutputStream#write(byte[])} to send the data to the remote device.</p> 
- 
-<p>The thread's <code>cancel()</code> method is important so that the connection
-can be
-terminated at any time by closing the {@link android.bluetooth.BluetoothSocket}.
-This should always be called when you're done using the Bluetooth
-connection.</p> 
- 
-<div class="special"> 
-<p>For a  demonstration of using the Bluetooth APIs, see the <a
-href="{@docRoot}resources/samples/BluetoothChat/index.html">Bluetooth Chat sample app</a>.</p> 
-</div> 
-
-<h2 id="Profiles">Working with Profiles</h2> 
-
-<p>Starting in Android 3.0, the Bluetooth API includes support for working with
-Bluetooth profiles. A <em>Bluetooth profile</em> is a wireless interface
-specification for Bluetooth-based communication between devices. An example
-is the Hands-Free profile. For a mobile phone to connect to a wireless headset,
-both devices must support the Hands-Free profile. </p> 
-
-<p>You can implement the interface {@link android.bluetooth.BluetoothProfile} to write
-your own classes to support a particular Bluetooth profile. The Android
-Bluetooth API provides implementations for the following Bluetooth
-profiles:</p> 
-<ul> 
-
-  <li><strong>Headset</strong>. The Headset profile provides support for
-Bluetooth headsets to be used with mobile phones. Android provides the {@link
-android.bluetooth.BluetoothHeadset} class, which is a proxy for controlling the
-Bluetooth Headset Service via interprocess communication (<a
-href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html#IPC">IPC</a
->). This includes both  Bluetooth Headset and Hands-Free (v1.5) profiles. The
-{@link android.bluetooth.BluetoothHeadset} class includes support for AT commands.
-For more discussion of this topic, see <a href="#AT-Commands">Vendor-specific AT commands</a></li>
-
-  <li><strong>A2DP</strong>. The Advanced Audio Distribution Profile (A2DP)
-profile defines how high quality audio can be streamed from one device to
-another over a Bluetooth connection. Android provides the {@link
-android.bluetooth.BluetoothA2dp} class, which is a proxy for controlling
-the Bluetooth A2DP  Service via IPC.</li> 
-
- <li><strong>Health Device</strong>. Android 4.0 (API level 14) introduces
-support for the Bluetooth Health Device Profile (HDP). This lets you create
-applications that use Bluetooth to communicate with health devices that support
-Bluetooth, such as heart-rate monitors, blood meters, thermometers, scales, and
-so on. For a list of supported devices and their corresponding device data
-specialization codes, refer to <strong>Bluetooth Assigned Numbers</strong> at <a
-href="http://www.bluetooth.org">www.bluetooth.org</a>. Note that these values
-are also referenced in the ISO/IEEE 11073-20601 [7] specification as
-MDC_DEV_SPEC_PROFILE_* in the Nomenclature Codes Annex. For more discussion of
-HDP, see <a href="#HDP">Health Device Profile</a>.</li> 
-
-</ul> 
-
-<p>Here are the basic steps for working with a profile:</p> 
-<ol> 
-
-  <li>Get the default adapter, as described in
-    <a href="{@docRoot}guide/topics/wireless/bluetooth.html#SettingUp">Setting Up
-      Bluetooth</a>.</li> 
-
-  <li>Use {@link
-android.bluetooth.BluetoothAdapter#getProfileProxy(android.content.Context,
-android.bluetooth.BluetoothProfile.ServiceListener, int) getProfileProxy()} to
-establish a connection to the profile proxy object associated with the profile.
-In the example below, the profile proxy object is an instance of {@link
-android.bluetooth.BluetoothHeadset}. </li> 
-
-  <li>Set up a  {@link android.bluetooth.BluetoothProfile.ServiceListener}. This
-listener notifies {@link android.bluetooth.BluetoothProfile} IPC clients when
-they have been connected to or disconnected from the service.</li> 
-
-  <li>In {@link
-android.bluetooth.BluetoothProfile.ServiceListener#onServiceConnected(int,
-android.bluetooth.BluetoothProfile) onServiceConnected()}, get a handle
-to the profile proxy object.</li> 
-
-  <li>Once you have the profile proxy object, you can use it to monitor the
-state of the connection and perform other operations that are relevant to that
-profile.</li> 
-</ol> 
-
-<p> For example, this code snippet shows how to connect to a {@link
-android.bluetooth.BluetoothHeadset} proxy object so that you can control the
-Headset profile:</p> 
-
-<pre>BluetoothHeadset mBluetoothHeadset;
- 
-// Get the default adapter
-BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
- 
-// Establish connection to the proxy.
-mBluetoothAdapter.getProfileProxy(context, mProfileListener, BluetoothProfile.HEADSET);
- 
-private BluetoothProfile.ServiceListener mProfileListener = new BluetoothProfile.ServiceListener() {
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-        if (profile == BluetoothProfile.HEADSET) {
-            mBluetoothHeadset = (BluetoothHeadset) proxy;
-        }
-    }
-    public void onServiceDisconnected(int profile) {
-        if (profile == BluetoothProfile.HEADSET) {
-            mBluetoothHeadset = null;
-        }
-    }
-};
- 
-// ... call functions on mBluetoothHeadset
- 
-// Close proxy connection after use.
-mBluetoothAdapter.closeProfileProxy(mBluetoothHeadset);
-</pre> 
-
-
-
-<h3 id="AT-Commands">Vendor-specific AT commands</h3> 
-
-<p>Starting in Android 3.0, applications can register to receive system
-broadcasts of pre-defined vendor-specific AT commands sent by headsets (such as
-a Plantronics +XEVENT command). For example, an application could receive
-broadcasts that indicate a connected device's battery level and could notify the
-user or take other action as needed. Create a broadcast receiver for the {@link
-android.bluetooth.BluetoothHeadset#ACTION_VENDOR_SPECIFIC_HEADSET_EVENT} intent
-to handle vendor-specific AT commands for the headset.</p>
-
-<h3 id="HDP">Health Device Profile</h3>
-
-<p>Android 4.0 (API level 14) introduces support for the Bluetooth Health Device
-Profile (HDP). This lets you create applications that use Bluetooth to
-communicate with health devices that support Bluetooth, such as heart-rate
-monitors, blood meters, thermometers, and scales. The Bluetooth Health API
-includes the classes {@link android.bluetooth.BluetoothHealth}, {@link
-android.bluetooth.BluetoothHealthCallback}, and {@link
-android.bluetooth.BluetoothHealthAppConfiguration}, which are described in <a
-href="#TheBasics">The Basics</a>. </p>
-
-<p>In using the Bluetooth Health API, it's helpful to understand these key HDP concepts:</p>
-<table>
-  <tr>
-    <th>Concept</th>
-    <th>Description</th>
-  </tr>
-  <tr>
-    <td><strong>Source</strong></td>
-
-    <td>A role defined in HDP. A <em>source</em> is a  health device that
-transmits medical data (weight scale, glucose meter, thermometer, etc.) to a
-smart device such as an Android phone or tablet. </td>
-  </tr>
-  <tr>
-    <td><strong>Sink</strong></td>
-
-    <td>A role defined in HDP. In HDP, a <em>sink</em> is the smart device that
-receives the medical data. In an Android HDP application, the sink is
-represented by a {@link android.bluetooth.BluetoothHealthAppConfiguration}
-object.</td>
-  </tr>
-  <tr>
-    <td><strong>Registration</strong></td>
-    <td>Refers to registering a sink for a particular health device.</td>
-  </tr>
-  <tr>
-    <td><strong>Connection</strong></td>
-
-    <td>Refers to opening a channel between a health device and a smart device
-such as an Android phone or tablet.</td>
-  </tr>
-</table>
-
-<h4>Creating an HDP Application</h4>
-
-<p>Here are the basic steps involved in creating an Android HDP application:</p>
-<ol>
-
-  <li>Get a reference to the {@link android.bluetooth.BluetoothHealth} proxy
-object. <p>Similar to regular headset and A2DP profile devices, you must call
-{@link android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()}
-with a {@link android.bluetooth.BluetoothProfile.ServiceListener} and the {@link
-android.bluetooth.BluetoothProfile.ServiceListener#HEALTH} profile type to
-establish a connection with the profile proxy object.</p> </li>
-
-  <li>Create a {@link android.bluetooth.BluetoothHealthCallback} and register an
-application configuration 
-({@link android.bluetooth.BluetoothHealthAppConfiguration})
-that acts as a health
-sink.</li>
-
-  <li>Establish a connection to a health device.  Some devices will initiate the
-connection.  It is unnecessary to carry out this step for those devices.</li>
-
-  <li>When connected successfully to a health device, read/write to the health
-device using the file descriptor. <p>The received data needs to be interpreted
-using a health manager which implements the IEEE 11073-xxxxx
-specifications.</p></li>
-
-  <li>When done, close the health channel and unregister the application.  The
-channel also closes when there is extended inactivity.</li>
-</ol>
-
-<p>For a complete code sample that illustrates these steps, see <a
-href="{@docRoot}resources/samples/BluetoothHDP/index.html">Bluetooth HDP (Health
-Device Profile)</a>. </p>
diff --git a/docs/html/guide/topics/wireless/index.jd b/docs/html/guide/topics/wireless/index.jd
deleted file mode 100644
index 23d2f0f..0000000
--- a/docs/html/guide/topics/wireless/index.jd
+++ /dev/null
@@ -1,23 +0,0 @@
-page.title=Wireless Controls
-@jd:body
-
-Go away.
-
-<!--
-<h2>Wi-Fi</h2>
-<p>The Wi-Fi APIs provide a means by which application can communicate with the lower-level
-wireless stack that provides Wi-Fi network access. Almost all information from the device supplicant
-is available, including the connected network's link speed, IP address, negotiation state, and more. 
-It also provides information about all non-connected available networks. Some of the available network
-interactions include the ability to scan, add, dave, terminate and initiate connections.</p>
-
-
-<h2>Bluetooth</h2>
-<p>The Android platform includes support for the Bluetooth network stack, which allows a device to
-wirelessly exchange data with other Bluetooth devices. The application framework provides access to
-the Bluetooth functionality through the Android Bluetooth APIs. These APIs let applications
-wirelessly connect to other Bluetooth devices, enabling point-to-point and multipoint wireless
-features.</p>
--->
-
-
diff --git a/docs/html/guide/topics/wireless/wifi.jd b/docs/html/guide/topics/wireless/wifi.jd
deleted file mode 100644
index 761e463..0000000
--- a/docs/html/guide/topics/wireless/wifi.jd
+++ /dev/null
@@ -1,18 +0,0 @@
-page.title=Wi-Fi
-parent.title=Wireless Controls
-parent.link=index.html
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-
-  </ol>
-
-</div>
-</div>
-
-
-Go away.
\ No newline at end of file
diff --git a/docs/html/guide/tutorials/hello-world.html b/docs/html/guide/tutorials/hello-world.html
deleted file mode 100644
index 55187bd..0000000
--- a/docs/html/guide/tutorials/hello-world.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/tutorials/hello-world.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/resources/tutorials/hello-world.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/tutorials/images/hello_world_0.png b/docs/html/guide/tutorials/images/hello_world_0.png
deleted file mode 100644
index 330a07c..0000000
--- a/docs/html/guide/tutorials/images/hello_world_0.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_1.png b/docs/html/guide/tutorials/images/hello_world_1.png
deleted file mode 100644
index 1e5f7b0..0000000
--- a/docs/html/guide/tutorials/images/hello_world_1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_2.png b/docs/html/guide/tutorials/images/hello_world_2.png
deleted file mode 100644
index 3e9c58b..0000000
--- a/docs/html/guide/tutorials/images/hello_world_2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_3.png b/docs/html/guide/tutorials/images/hello_world_3.png
deleted file mode 100644
index 22901a9..0000000
--- a/docs/html/guide/tutorials/images/hello_world_3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_4.png b/docs/html/guide/tutorials/images/hello_world_4.png
deleted file mode 100644
index 5c41e80..0000000
--- a/docs/html/guide/tutorials/images/hello_world_4.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_5.png b/docs/html/guide/tutorials/images/hello_world_5.png
deleted file mode 100644
index 96b830a..0000000
--- a/docs/html/guide/tutorials/images/hello_world_5.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_8.png b/docs/html/guide/tutorials/images/hello_world_8.png
deleted file mode 100644
index 07db360..0000000
--- a/docs/html/guide/tutorials/images/hello_world_8.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/images/hello_world_9.png b/docs/html/guide/tutorials/images/hello_world_9.png
deleted file mode 100644
index a66526a..0000000
--- a/docs/html/guide/tutorials/images/hello_world_9.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/index.html b/docs/html/guide/tutorials/index.html
deleted file mode 100644
index e412dec..0000000
--- a/docs/html/guide/tutorials/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/browser.html?tag=tutorial">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/resources/browser.html?tag=tutorial">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/tutorials/localization/index.html b/docs/html/guide/tutorials/localization/index.html
deleted file mode 100644
index 2ea6661..0000000
--- a/docs/html/guide/tutorials/localization/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/tutorials/localization/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/resources/tutorials/localization/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/tutorials/notepad/codelab/NotepadCodeLab.zip b/docs/html/guide/tutorials/notepad/codelab/NotepadCodeLab.zip
deleted file mode 100644
index 24fefc1..0000000
--- a/docs/html/guide/tutorials/notepad/codelab/NotepadCodeLab.zip
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/notepad/index.html b/docs/html/guide/tutorials/notepad/index.html
deleted file mode 100644
index 01e4d09..0000000
--- a/docs/html/guide/tutorials/notepad/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/tutorials/notepad/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/resources/tutorials/notepad/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/tutorials/notepad/notepad-ex1.jd b/docs/html/guide/tutorials/notepad/notepad-ex1.jd
deleted file mode 100644
index cf7765e..0000000
--- a/docs/html/guide/tutorials/notepad/notepad-ex1.jd
+++ /dev/null
@@ -1,582 +0,0 @@
-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}resources/tutorials/hello-world.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}resources/tutorials/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/guide/tutorials/notepad/notepad-ex2.jd b/docs/html/guide/tutorials/notepad/notepad-ex2.jd
deleted file mode 100644
index fed40ab..0000000
--- a/docs/html/guide/tutorials/notepad/notepad-ex2.jd
+++ /dev/null
@@ -1,642 +0,0 @@
-Rpage.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(Menu menu, View v,
-        ContextMenu.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 the 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>Take a look at the
-    <a href="{@docRoot}resources/tutorials/views/index.html">Hello Views</a>
-    for some example layouts and how to use them. The ApiDemos sample project is also a
-    great resource from which to learn 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>
-      Find the edit and 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/guide/tutorials/notepad/notepad-ex3.jd b/docs/html/guide/tutorials/notepad/notepad-ex3.jd
deleted file mode 100644
index 557738e..0000000
--- a/docs/html/guide/tutorials/notepad/notepad-ex3.jd
+++ /dev/null
@@ -1,366 +0,0 @@
-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/topics/fundamentals/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/guide/tutorials/notepad/notepad-extra-credit.jd b/docs/html/guide/tutorials/notepad/notepad-extra-credit.jd
deleted file mode 100644
index 34f7063..0000000
--- a/docs/html/guide/tutorials/notepad/notepad-extra-credit.jd
+++ /dev/null
@@ -1,70 +0,0 @@
-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}guide/developing/debugging/debugging-tracing.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/guide/tutorials/notepad/notepad-index.jd b/docs/html/guide/tutorials/notepad/notepad-index.jd
deleted file mode 100644
index 151c50d..0000000
--- a/docs/html/guide/tutorials/notepad/notepad-index.jd
+++ /dev/null
@@ -1,143 +0,0 @@
-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/guide/tutorials/views/hello-autocomplete.jd b/docs/html/guide/tutorials/views/hello-autocomplete.jd
deleted file mode 100644
index 07235a1..0000000
--- a/docs/html/guide/tutorials/views/hello-autocomplete.jd
+++ /dev/null
@@ -1,116 +0,0 @@
-page.title=Hello, AutoCompleteTextView
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.AutoCompleteTextView} is an implementation of the EditText widget that will provide 
-auto-complete suggestions as the user types. The suggestions are extracted from a collection of strings.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloAutoComplete.</li>
-  <li>Open the layout file.
-    Make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:orientation="horizontal"
-    android:layout_width="fill_parent" 
-    android:layout_height="wrap_content">
-
-    &lt;TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Country" />
-
-    &lt;AutoCompleteTextView android:id="@+id/edit"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"/>
-
-&lt;/LinearLayout>
-</pre>
-</li>
-
-<li>Open HelloAutoComplete.java and insert the following as the <code>onCreate</code> method:
-<pre>
-&#64;Override
-protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.edit);
-    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
-            android.R.layout.simple_dropdown_item_1line, COUNTRIES);
-    textView.setAdapter(adapter);
-}
-</pre>
-	<p>Here, we create an AutoCompleteTextView from our layout. We then 
-	create an {@link android.widget.ArrayAdapter} that binds a <code>simple_dropdown_item_1line</code>
-	layout item to each entry in the <code>COUNTRIES</code> array (which we'll add next).
-	The last part sets the ArrayAdapter to associate with our AutoCompleteTextView.</p>
-</li>
-
-<li>After the <code>onCreate()</code> method, add the String array:
-<pre>
-static final String[] COUNTRIES = new String[] {
-  "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
-  "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
-  "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
-  "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
-  "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
-  "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
-  "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
-  "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
-  "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
-  "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
-  "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
-  "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
-  "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
-  "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
-  "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
-  "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
-  "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
-  "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
-  "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
-  "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
-  "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
-  "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
-  "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
-  "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
-  "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
-  "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
-  "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
-  "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
-  "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
-  "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
-  "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
-  "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
-  "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
-  "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
-  "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
-  "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
-  "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
-  "Ukraine", "United Arab Emirates", "United Kingdom",
-  "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
-  "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
-  "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
-};
-</pre>
-	<p>This is the list of suggestions that will be offered as the user types into the 
-	AutoCompleteTextView.</p>
-</li>
-
-<li>Now run it.</li>
-</ol>
-<p>As you type, you should see something like this:</p>
-<img src="images/hello-autocomplete.png" width="150px" />
-
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.R.layout}</li>
-	<li>{@link android.widget.ArrayAdapter}</li>
-	<li>{@link android.widget.AutoCompleteTextView}</li>
-</ul>
-
-
diff --git a/docs/html/guide/tutorials/views/hello-datepicker.jd b/docs/html/guide/tutorials/views/hello-datepicker.jd
deleted file mode 100644
index fcd43f3..0000000
--- a/docs/html/guide/tutorials/views/hello-datepicker.jd
+++ /dev/null
@@ -1,151 +0,0 @@
-page.title=Hello, DatePicker
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.DatePicker} is a widget that allows the user to select a month, day and year.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloDatePicker.</li>
-  <li>Open the layout file and make it like so:
-    <pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-
-    &lt;TextView android:id="@+id/dateDisplay"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text=""/>
-
-    &lt;Button android:id="@+id/pickDate"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:text="Change the date"/>
-
-&lt;/LinearLayout>
-</pre>
-	<p>For the layout, we're using a vertical LinearLayout, with a {@link android.widget.TextView} that
-	will display the date and a {@link android.widget.Button} that will initiate the DatePicker dialog.
-	With this layout, the TextView will sit above the Button.
-	The text value in the TextView is set empty, as it will be filled 
-	with the current date when our Activity runs.</p>
-    </li> 
-
-  <li>Open HelloDatePicker.java. Insert the following to the HelloDatePicker class:
-<pre>
-    private TextView mDateDisplay;
-    private Button mPickDate;
-
-    private int mYear;
-    private int mMonth;
-    private int mDay;
-
-    static final int DATE_DIALOG_ID = 0;
-
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-
-        // capture our View elements
-        mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
-        mPickDate = (Button) findViewById(R.id.pickDate);
-
-        // add a click listener to the button
-        mPickDate.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                showDialog(DATE_DIALOG_ID);
-            }
-        });
-
-        // get the current date
-        final Calendar c = Calendar.getInstance();
-        mYear = c.get(Calendar.YEAR);
-        mMonth = c.get(Calendar.MONTH);
-        mDay = c.get(Calendar.DAY_OF_MONTH);
-
-        // display the current date
-        updateDisplay();
-    }
-</pre>
-<p class="note"><strong>Tip:</strong> Press Ctrl(or Cmd) + Shift + O to import all needed packages.</p>
-	<p>We start by instantiating variables for our Views and date fields.
-	The <code>DATE_DIALOG_ID</code> is a static integer that uniquely identifies the Dialog. In the
-	<code>onCreate()</code> method, we get prepared by setting the layout and capturing the View elements. 
-	Then we create an on-click listener for the Button, so that when it is clicked it will
-	show our DatePicker dialog. The <code>showDialog()</code> method  will pop-up the date picker dialog
-        by calling the <code>onCreateDialog()</code> callback method 
-        (which we'll define in the next section). We then create an
-	instance of {@link java.util.Calendar} and get the current year, month and day. Finally, we call 
-	<code>updateDisplay()</code>&mdash;our own method (defined later) that will fill the TextView.</p>
-</li>
-
-<li>After the <code>onCreate()</code> method, add the <code>onCreateDialog()</code> callback method 
-(which is called by <code>showDialog()</code>)
-<pre>
-&#64;Override
-protected Dialog onCreateDialog(int id) {
-    switch (id) {
-    case DATE_DIALOG_ID:
-        return new DatePickerDialog(this,
-                    mDateSetListener,
-                    mYear, mMonth, mDay);
-    }
-    return null;
-}
-</pre>
-	<p>This method is passed the identifier we gave <code>showDialog()</code> and initializes
-	the DatePicker to the date we retrieved from our Calendar instance.</p>
-</li>
-
-<li>Following that, add the <code>updateDisplay()</code> method:
-<pre>
-    // updates the date we display in the TextView
-    private void updateDisplay() {
-        mDateDisplay.setText(
-            new StringBuilder()
-                    // Month is 0 based so add 1
-                    .append(mMonth + 1).append("-")
-                    .append(mDay).append("-")
-                    .append(mYear).append(" "));
-    }
-</pre>
-<p>This uses the member date values to write the date to our TextView.</p>
-</li>
-<li>Finally, add a listener that will be called when the user sets a new date:
-<pre>
-    // the callback received when the user "sets" the date in the dialog
-    private DatePickerDialog.OnDateSetListener mDateSetListener =
-            new DatePickerDialog.OnDateSetListener() {
-
-                public void onDateSet(DatePicker view, int year, 
-                                      int monthOfYear, int dayOfMonth) {
-                    mYear = year;
-                    mMonth = monthOfYear;
-                    mDay = dayOfMonth;
-                    updateDisplay();
-                }
-            };
-</pre>
-	<p>This <code>OnDateSetListener</code> method listens for when the user is done setting the date
-        (clicks the "Set" button). At that time, this fires and we update our member fields with
-	the new date defined by the user and update our TextView by calling <code>updateDisplay()</code>.</p>
-</li>
-
-<li>Now run it.</li>
-</ol>
-<p>When you press the "Change the date" button, you should see the following:</p>
-<img src="images/hello-datepicker.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-<li>{@link android.widget.DatePicker}</li>
-<li>{@link android.widget.Button}</li>
-<li>{@link android.widget.TextView}</li>
-<li>{@link java.util.Calendar}</li>
-</ul>
-
diff --git a/docs/html/guide/tutorials/views/hello-formstuff.jd b/docs/html/guide/tutorials/views/hello-formstuff.jd
deleted file mode 100644
index b554001..0000000
--- a/docs/html/guide/tutorials/views/hello-formstuff.jd
+++ /dev/null
@@ -1,262 +0,0 @@
-page.title=Hello, Form Stuff
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>This page introduces a variety of widgets, like image buttons,
-text fields, checkboxes and radio buttons.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloFormStuff.</li>
-  <li>Your layout file should have a basic LinearLayout:
-    <pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent" >
-    	
-&lt;/LinearLayout>
-</pre>
-    <p>For each widget you want to add, just put the respective View inside here.</p>
-</li>
-</ol>
-<p class="note"><strong>Tip:</strong> As you add new Android code, press Ctrl(or Cmd) + Shift + O 
-to import all needed packages.</p>
-
-
-<h2>ImageButton</h2>
-<p>A button with a custom image on it. 
-We'll make it display a message when pressed.</p>
-<ol>
-  <li><img src="images/android.png" align="right"/>
-	Drag the Android image on the right (or your own image) into the
-	res/drawable/ directory of your project. 
-        We'll use this for the button.</li>
-  <li>Open the layout file and, inside the LinearLayout, add the {@link android.widget.ImageButton} element:
-<pre>
-&lt;ImageButton
-    android:id="@+id/android_button"
-    android:layout_width="100dip"
-    android:layout_height="wrap_content"
-    android:src="@drawable/android" />	
-</pre>
-	<p>The source of the button
-	is from the res/drawable/ directory, where we've placed the android.png.</p>
-        <p class="note"><strong>Tip:</strong> You can also reference some of the many built-in
-        images from the Android {@link android.R.drawable} resources, 
-        like <code>ic_media_play</code>, for a "play" button image. To do so, change the source
-        attribute to <code>android:src="@android:drawable/ic_media_play"</code>.</p>
-</li>
-<li>To make the button to actually do something, add the following
-code at the end of the <code>onCreate()</code> method:
-<pre>
-final ImageButton button = (ImageButton) findViewById(R.id.android_button);
-button.setOnClickListener(new OnClickListener() {
-    public void onClick(View v) {
-        // Perform action on clicks
-        Toast.makeText(HelloFormStuff.this, "Beep Bop", Toast.LENGTH_SHORT).show();
-    }
-});
-</pre>
-<p>This captures our ImageButton from the layout, then adds an on-click listener to it.
-The {@link android.view.View.OnClickListener} must define the <code>onClick()</code> method, which
-defines the action to be made when the button is clicked. Here, we show a 
-{@link android.widget.Toast} message when clicked.</p>
-</li>
-<li>Run it.</li>
-</ol>
-
-
-<h2>EditText</h2>
-<p>A text field for user input. We'll make it display the text entered so far when the "Enter" key is pressed.</p>
-
-<ol>
-  <li>Open the layout file and, inside the LinearLayout, add the {@link android.widget.EditText} element:
-<pre>
-&lt;EditText
-    android:id="@+id/edittext"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"/>
-</pre>
-</li>
-<li>To do something with the text that the user enters, add the following code
-to the end of the <code>onCreate()</code> method:
-<pre>
-final EditText edittext = (EditText) findViewById(R.id.edittext);
-edittext.setOnKeyListener(new OnKeyListener() {
-    public boolean onKey(View v, int keyCode, KeyEvent event) {
-        if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) {
-          // Perform action on key press
-          Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
-          return true;
-        }
-        return false;
-    }
-});
-</pre>
-<p>This captures our EditText element from the layout, then adds an on-key listener to it.
-The {@link android.view.View.OnKeyListener} must define the <code>onKey()</code> method, which
-defines the action to be made when a key is pressed. In this case, we want to listen for the
-Enter key (when pressed down), then pop up a {@link android.widget.Toast} message with the 
-text from the EditText field. Be sure to return <var>true</var> after the event is handled, 
-so that the event doesn't bubble-up and get handled by the View (which would result in a
-carriage return in the text field).</p>
-<li>Run it.</li>
-</ol>
-
-
-<h2>CheckBox</h2>
-<p>A checkbox for selecting items. We'll make it display the the current state when pressed.</p>
-
-<ol>
-  <li>Open the layout file and, inside the LinearLayout, add the {@link android.widget.CheckBox} element:
-<pre>
-&lt;CheckBox android:id="@+id/checkbox"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:text="check it out" />
-</pre>
-</li>
-<li>To do something when the state is changed, add the following code
-to the end of the <code>onCreate()</code> method:
-<pre>
-final CheckBox checkbox = (CheckBox) findViewById(R.id.checkbox);
-checkbox.setOnClickListener(new OnClickListener() {
-    public void onClick(View v) {
-        // Perform action on clicks
-        if (checkbox.isChecked()) {
-            Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
-        } else {
-            Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
-        }
-    }
-});
-</pre>
-<p>This captures our CheckBox element from the layout, then adds an on-click listener to it.
-The {@link android.view.View.OnClickListener} must define the <code>onClick()</code> method, which
-defines the action to be made when the checkbox is clicked. Here, we query the current state of the
-checkbox, then pop up a {@link android.widget.Toast} message that displays the current state. 
-Notice that the CheckBox handles its own state change between checked and un-checked, so we just
-ask which it currently is.</p>
-<li>Run it.</li>
-</ol>
-<p class="note"><strong>Tip:</strong> If you find that you need to change the state
-in another way (such as when loading a saved {@link android.preference.CheckBoxPreference}),
-use <code>setChecked(true)</code> or <code>toggle()</code>.</p>
-
-
-<h2>RadioButton</h2>
-<p>Two mutually-exclusive radio buttons&mdash;enabling one disables the other. 
-When each is pressed, we'll pop up a message.</p>
-
-<ol>
-  <li>Open the layout file and, inside the LinearLayout, add two {@link android.widget.RadioButton}s,
-inside a {@link android.widget.RadioGroup}:
-<pre>
-&lt;RadioGroup
-  android:layout_width="fill_parent"
-  android:layout_height="wrap_content"
-  android:orientation="vertical">
-  
-  &lt;RadioButton android:id="@+id/radio_red"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:text="Red" />
-  
-  &lt;RadioButton android:id="@+id/radio_blue"
-      android:layout_width="wrap_content"
-      android:layout_height="wrap_content"
-      android:text="Blue" />
-  
-&lt;/RadioGroup>
-</pre>
-</li>
-<li>To do something when each is selected, we'll need an OnClickListener. Unlike the other 
-listeners we've created, instead of creating this one as an anonymous inner class, 
-we'll create it as a new object. This way, we can re-use the OnClickListener for 
-both RadioButtons. So, add the following code in the HelloFormStuff Activity
-(<em>outside</em> the <code>onCreate()</code> method):
-<pre>
-OnClickListener radio_listener = new OnClickListener() {
-    public void onClick(View v) {
-        // Perform action on clicks
-        RadioButton rb = (RadioButton) v;
-        Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
-    }
-};
-</pre>
-<p>Our <code>onClick()</code> method will be handed the View clicked, so the first thing to do
-is cast it into a RadioButton. Then we pop up a 
-{@link android.widget.Toast} message that displays the selection.</p>
-<li>Now, at the bottom of the <code>onCreate()</code> method, add the following:
-<pre>
-  final RadioButton radio_red = (RadioButton) findViewById(R.id.radio_red);
-  final RadioButton radio_blue = (RadioButton) findViewById(R.id.radio_blue);
-  radio_red.setOnClickListener(radio_listener);
-  radio_blue.setOnClickListener(radio_listener);
-</pre>
-<p>This captures each of the RadioButtons from our layout and adds the newly-created 
-OnClickListener to each.</p>
-<li>Run it.</li>
-</ol>
-<p class="note"><strong>Tip:</strong> If you find that you need to change the state of a
-RadioButton in another way (such as when loading a saved {@link android.preference.CheckBoxPreference}),
-use <code>setChecked(true)</code> or <code>toggle()</code>.</p>
-
-
-<h2>ToggleButton</h2>
-<p>A button used specifically for toggling something on and off.</p>
-
-<ol>
-  <li>Open the layout file and, inside the LinearLayout, add the {@link android.widget.ToggleButton} element:
-<pre>
-&lt;ToggleButton android:id="@+id/togglebutton"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content" />
-</pre>
-</li>
-<li>To do something when the state is changed, add the following code
-to the end of the <code>onCreate()</code> method:
-<pre>
-final ToggleButton togglebutton = (ToggleButton) findViewById(R.id.togglebutton);
-togglebutton.setOnClickListener(new OnClickListener() {
-    public void onClick(View v) {
-        // Perform action on clicks
-        if (togglebutton.isChecked()) {
-            Toast.makeText(HelloFormStuff.this, "ON", Toast.LENGTH_SHORT).show();
-        } else {
-            Toast.makeText(HelloFormStuff.this, "OFF", Toast.LENGTH_SHORT).show();
-        }
-    }
-});
-</pre>
-<p>This captures our ToggleButton element from the layout, then adds an on-click listener to it.
-The {@link android.view.View.OnClickListener} must define the <code>onClick()</code> method, which
-defines the action to be made when the button is clicked. Here, we query the current state of the
-ToggleButton, then pop up a {@link android.widget.Toast} message that displays the current state. 
-Notice that the ToggleButton handles its own state change between checked and un-checked, so we just
-ask which it is.</p>
-<li>Run it.</li>
-</ol>
-
-<p class="note"><strong>Tip:</strong> By default, the text on the button is "ON" and "OFF", but 
-you can change each of these with <code>setTextOn(<var>CharSequence</var>)</code> and 
-<code>setTextOff(<var>CharSequence</var>)</code>. And, if you find that you need to change the state
-in another way (such as when loading a saved {@link android.preference.CheckBoxPreference}),
-use <code>setChecked(true)</code> or <code>toggle()</code>. </p>
-
-
-<p>If you've added all the form items above, your application should look something like this:</p>
-<img src="images/hello-formstuff.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.ImageButton}</li>
-	<li>{@link android.widget.EditText}</li>
-	<li>{@link android.widget.CheckBox}</li>
-	<li>{@link android.widget.RadioButton}</li>
-	<li>{@link android.widget.ToggleButton}</li>
-</ul>
-
diff --git a/docs/html/guide/tutorials/views/hello-gallery.jd b/docs/html/guide/tutorials/views/hello-gallery.jd
deleted file mode 100644
index 084f912..0000000
--- a/docs/html/guide/tutorials/views/hello-gallery.jd
+++ /dev/null
@@ -1,135 +0,0 @@
-page.title=Hello, Gallery
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.Gallery} is a View commonly used to display items in a horizontally scrolling list
-that locks the current selection at the center. When one is selected, we'll show a message.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloGallery.</li>
-  <li>Add some images to your res/drawable/ directory.</li>
-  <li>Open the layout file and make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;Gallery xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:id="@+id/gallery"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-/>
-</pre>
-</li>
-
-
-<li>Open the HelloGallery.java file. Insert the following for the <code>onCreate()</code> method:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    Gallery g = (Gallery) findViewById(R.id.gallery);
-    g.setAdapter(new ImageAdapter(this));
-
-    g.setOnItemClickListener(new OnItemClickListener() {
-        public void onItemClick(AdapterView parent, View v, int position, long id) {
-            Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
-        }
-    });
-}
-</pre>
-	<p>We start as usual: set the layout and capture the View we want (our Gallery). 
-We then set an Adapter, called ImageAdapter for the Gallery&mdash;this is a new class that
-we'll create next. Then we create an item click listener for the Gallery. This is like a normal
-on-click listener (which you might be familiar with for buttons), but it listens to each item
-that we've added to the Gallery. The <code>onItemClick()</code> callback method 
-receives the AdapterView where the click occurred, the specific View that received the click, the 
-position of the View clicked (zero-based), and the row id of the item clicked (if applicable). All
-that we care about is the position, so that we can pop up a {@link android.widget.Toast} message that 
-tells us the index position of the item clicked. We do this with <code>Toast.makeText().show()</code>.
-</p>
-</li>
-
-<li>After the <code>onCreate()</code> method, add the <code>ImageAdapter</code> class:
-<pre>
-public class ImageAdapter extends BaseAdapter {
-    int mGalleryItemBackground;
-    private Context mContext;
-
-    private Integer[] mImageIds = {
-            R.drawable.sample_1,
-            R.drawable.sample_2,
-            R.drawable.sample_3,
-            R.drawable.sample_4,
-            R.drawable.sample_5,
-            R.drawable.sample_6,
-            R.drawable.sample_7
-    };
-
-    public ImageAdapter(Context c) {
-        mContext = c;
-        TypedArray a = obtainStyledAttributes(android.R.styleable.Theme);
-        mGalleryItemBackground = a.getResourceId(
-                android.R.styleable.Theme_galleryItemBackground, 0);
-        a.recycle();
-    }
-
-    public int getCount() {
-        return mImageIds.length;
-    }
-
-    public Object getItem(int position) {
-        return position;
-    }
-
-    public long getItemId(int position) {
-        return position;
-    }
-
-    public View getView(int position, View convertView, ViewGroup parent) {
-        ImageView i = new ImageView(mContext);
-
-        i.setImageResource(mImageIds[position]);
-        i.setLayoutParams(new Gallery.LayoutParams(150, 100));
-        i.setScaleType(ImageView.ScaleType.FIT_XY);
-        i.setBackgroundResource(mGalleryItemBackground);
-
-        return i;
-    }
-}
-</pre>
-<p>First, there are a few member variables, including an array of IDs that reference
-the images we placed in our drawable resources directory.</p>
-<p>Next is the constructor, where we define the member Context. The rest of the constructor
-sets up a reference for our Gallery them, which adds the nice framing for each Gallery item.
-Once we have our <code>mGalleryItemBackground</code>, it's important to recycle the 
-StyledAttribute for later re-use.</p>
-<p>The next three methods are required for basic member queries. 
-But then we have the <code>getView()</code> method, which is called
-for each item read by our ImageAdapter, when the Gallery is being built. Here, we 
-use our member Context to create a new {@link android.widget.ImageView}. We then define
-the image resource with the current position of the Gallery items (corresponding to our
-array of drawables), set the dimensions for the ImageView, 
-set the image scaling to fit the ImageView dimensions, then finally set the 
-background theme for the ImageView.</p>
-
-<p>See {@link android.widget.ImageView.ScaleType}
-for other image scaling options, in case you want to avoid stretching images that don't 
-exactly match the ImageView dimensions.</p>
-
-<li>Now run it.</li>
-</ol>
-<p>You should see something like this:</p>
-<img src="images/hello-gallery.png" width="150px" />
-
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.BaseAdapter}</li>
-	<li>{@link android.widget.Gallery}</li>
-	<li>{@link android.widget.ImageView}</li>
-	<li>{@link android.widget.Toast}</li>
-</ul>
-
-
diff --git a/docs/html/guide/tutorials/views/hello-gridview.jd b/docs/html/guide/tutorials/views/hello-gridview.jd
deleted file mode 100644
index 186c4e7..0000000
--- a/docs/html/guide/tutorials/views/hello-gridview.jd
+++ /dev/null
@@ -1,129 +0,0 @@
-page.title=Hello, GridView
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.GridView} displays items in a two-dimensional, scrolling grid. The items
-are acquired from a {@link android.widget.ListAdapter}.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloGridView.</li>
-  <li>Find some photos you'd like to use, or copy some from the SDK samples res/drawable/ 
-    folder of your project.</li>
-  <li>Open the layout and make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;GridView xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:id="@+id/gridview"
-    android:layout_width="fill_parent" 
-    android:layout_height="fill_parent"
-    android:numColumns="auto_fit"
-    android:verticalSpacing="10dp"
-    android:horizontalSpacing="10dp"
-    android:columnWidth="90dp"
-    android:stretchMode="columnWidth"
-    android:gravity="center"
-/>
-</pre>
-</li>
-  <li>Open the HelloGridView Java file. Insert the following for the <code>onCreate()</code> method:
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    GridView gridview = (GridView) findViewById(R.id.gridview);
-    gridview.setAdapter(new ImageAdapter(this));
-}
-</pre>
-    <p>Here, we get a handle on our GridView, from the layout, and give it an Adapter.
-    We're actually going to create our own Adapter called ImageAdapter.</p>
-</li>
-<li>Create a new class (nested or otherwise), called ImageAdapter, which extends {@link android.widget.BaseAdapter}:
-<pre>
-public class ImageAdapter extends BaseAdapter {
-    private Context mContext;
-
-    public ImageAdapter(Context c) {
-        mContext = c;
-    }
-
-    public int getCount() {
-        return mThumbIds.length;
-    }
-
-    public Object getItem(int position) {
-        return null;
-    }
-
-    public long getItemId(int position) {
-        return 0;
-    }
-
-    // create a new ImageView for each item referenced by the Adapter
-    public View getView(int position, View convertView, ViewGroup parent) {
-        ImageView imageView;
-        if (convertView == null) {  // if it's not recycled, initialize some attributes
-            imageView = new ImageView(mContext);
-            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
-            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-            imageView.setPadding(8, 8, 8, 8);
-        } else {
-            imageView = (ImageView) convertView;
-        }
-
-        imageView.setImageResource(mThumbIds[position]);
-        return imageView;
-    }
-
-    // references to our images
-    private Integer[] mThumbIds = {
-            R.drawable.sample_2, R.drawable.sample_3,
-            R.drawable.sample_4, R.drawable.sample_5,
-            R.drawable.sample_6, R.drawable.sample_7,
-            R.drawable.sample_0, R.drawable.sample_1,
-            R.drawable.sample_2, R.drawable.sample_3,
-            R.drawable.sample_4, R.drawable.sample_5,
-            R.drawable.sample_6, R.drawable.sample_7,
-            R.drawable.sample_0, R.drawable.sample_1,
-            R.drawable.sample_2, R.drawable.sample_3,
-            R.drawable.sample_4, R.drawable.sample_5,
-            R.drawable.sample_6, R.drawable.sample_7
-    };
-}
-</pre>
-    <p>First we take care of some required methods inherited from BaseAdapter.
-    The constructor and <code>getCount()</code> are self-explanatory. Normally, <code>getItem()</code>
-    should return the actual object at the specified position in our Adapter, but for this Hello World,
-    we're not going to bother. Likewise, <code>getItemId()</code> should return the row id of
-    the item, but right now we don't care.</p>
-    <p>However, <code>getView()</code> is the method we care about. This one creates a new View for each image that we
-    put in our ImageAdapter. So we're going to create an ImageView each time. When this is called, we're
-    going to receive a View, which is likely a recycled View object (at least after the first call), so we
-    check for this&mdash;if it's null, we initialize the ImageView and setup all the properties we want.
-    The <code>LayoutParams()</code> initialization sets the height and width of the View&mdash;this ensures
-    that no matter the drawable size, each image is resized and cropped to fit in the ImageView (if necessary).
-    With <code>setScaleType()</code>, we say that images should be cropped toward the center (if necessary).
-    And finally, we set the padding within the ImageView. (Note that, if the images have various aspect-ratios, 
-    as they do in this demo, then less padding will cause for more cropping of the image, if it does not match
-    the dimensions given to the ImageView.) At the end of <code>getView()</code> we set the image resource and 
-    return the ImageView.</p>
-    <p>All that's left is our array or drawable resources at the bottom.</p>
-</li>
-<li>Run it.</li>
-</ol>
-<p>Your grid layout should look something like this:</p>
-<img src="images/hello-gridview.png" width="150px" />
-
-<p>Try experimenting with the behaviors of the GridView and ImageView by adjusting their properties. For example,
-  instead of setting the ImageView LayoutParams, you can try using
-  {@link android.widget.ImageView#setAdjustViewBounds(boolean)}. </p>
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.GridView}</li>
-	<li>{@link android.widget.ImageView}</li>
-	<li>{@link android.widget.BaseAdapter}</li>
-</ul>
-
diff --git a/docs/html/guide/tutorials/views/hello-linearlayout.jd b/docs/html/guide/tutorials/views/hello-linearlayout.jd
deleted file mode 100644
index 0e8947c..0000000
--- a/docs/html/guide/tutorials/views/hello-linearlayout.jd
+++ /dev/null
@@ -1,130 +0,0 @@
-page.title=Hello, LinearLayout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.LinearLayout} is a GroupView that will lay child View elements
-vertically or horizontally.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloLinearLayout.</li>
-  <li>Open the layout file.
-    Make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-
-    &lt;LinearLayout
-	android:orientation="horizontal"
-	android:layout_width="fill_parent"
-	android:layout_height="fill_parent"
-	android:layout_weight="1">
-	
-	&lt;TextView
-	    android:text="red"
-	    android:gravity="center_horizontal"
-	    android:background="#aa0000"
-	    android:layout_width="wrap_content"
-	    android:layout_height="fill_parent"
-	    android:layout_weight="1"/>
-	
-	&lt;TextView
-	    android:text="green"
-	    android:gravity="center_horizontal"
-	    android:background="#00aa00"
-	    android:layout_width="wrap_content"
-	    android:layout_height="fill_parent"
-	    android:layout_weight="1"/>
-	
-	&lt;TextView
-	    android:text="blue"
-	    android:gravity="center_horizontal"
-	    android:background="#0000aa"
-	    android:layout_width="wrap_content"
-	    android:layout_height="fill_parent"
-	    android:layout_weight="1"/>
-	
-	&lt;TextView
-	    android:text="yellow"
-	    android:gravity="center_horizontal"
-	    android:background="#aaaa00"
-	    android:layout_width="wrap_content"
-	    android:layout_height="fill_parent"
-	    android:layout_weight="1"/>
-		
-    &lt;/LinearLayout>
-	
-    &lt;LinearLayout
-	android:orientation="vertical"
-	android:layout_width="fill_parent"
-	android:layout_height="fill_parent"
-	android:layout_weight="1">
-	
-	&lt;TextView
-	    android:text="row one"
-	    android:textSize="15pt"
-	    android:layout_width="fill_parent"
-	    android:layout_height="wrap_content"
-	    android:layout_weight="1"/>
-	
-	&lt;TextView
-	    android:text="row two"
-	    android:textSize="15pt"
-	    android:layout_width="fill_parent"
-	    android:layout_height="wrap_content"
-	    android:layout_weight="1"/>
-	
-	&lt;TextView
-	    android:text="row three"
-	    android:textSize="15pt"
-	    android:layout_width="fill_parent"
-	    android:layout_height="wrap_content"
-	    android:layout_weight="1"/>
-	
-	&lt;TextView
-	    android:text="row four"
-	    android:textSize="15pt"
-	    android:layout_width="fill_parent"
-	    android:layout_height="wrap_content"
-	    android:layout_weight="1"/>
-        
-    &lt;/LinearLayout>
-        
-&lt;/LinearLayout>
-</pre>
-        <p>Carefully inspect the XML. You'll notice how this layout works a lot like
-        an HTML layout. There is one parent LinearLayout that is defined to lay
-        its child elements vertically. The first child is another LinearLayout that uses a horizontal layout
-        and the second uses a vertical layout. Each LinearLayout contains several {@link android.widget.TextView}
-        elements.</p>
-</li>
-<li>Now open the HelloLinearLayout Activity and be sure it loads this layout in the <code>onCreate()</code> method:</p>
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p><code>R.layout.main</code> refers to the <code>main.xml</code> layout file.</p>
-</li>
-<li>Run it.</li>
-</ol>
-<p>You should see the following:</p>
-<img src="images/hello-linearlayout.png" width="150px" />
-
-<p>Notice how the various XML attributes define the View's behavior.
-Pay attention to the effect of the <code>layout_weight</code>. Try 
-	experimenting with different values to see how the screen real estate is 
-	distributed based on the weight of each element.</p>
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.LinearLayout}</li>
-<li>{@link android.widget.TextView}</li>
-</ul>
-
-
diff --git a/docs/html/guide/tutorials/views/hello-listview.jd b/docs/html/guide/tutorials/views/hello-listview.jd
deleted file mode 100644
index d90005b..0000000
--- a/docs/html/guide/tutorials/views/hello-listview.jd
+++ /dev/null
@@ -1,90 +0,0 @@
-page.title=Hello, ListView
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.ListView} is a View that shows items in a vertically scrolling list. The items are
- acquired from a {@link android.widget.ListAdapter}.</p>
-
-
-<ol>
-  <li>Start a new project/ListActivity called HelloListView.</li>
-  <li>Open the HelloListView Java file. Make the class extend ListActivity (instead of Activity).
-	<pre>public class HelloListView extends ListActivity {</pre>
-  </li>
-  <li>Insert the following for the <code>onCreate()</code> method:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-  super.onCreate(savedInstanceState);
-  
-  setListAdapter(new ArrayAdapter&lt;String>(this,
-          android.R.layout.simple_list_item_1, COUNTRIES));
-  getListView().setTextFilterEnabled(true);
-}
-</pre>
-	<p>Notice that we don't need to load a layout (at least, not in this case, because we're using
-	the whole screen for our list). Instead, we just call <code>setListAdapter()</code> (which automatically
-	adds a ListView to the ListActivity), and provide it with an ArrayAdapter that binds a 
-	<code>simple_list_item_1</code> layout item to each entry in the <code>COUNTRIES</code> 
-	array (added next). The next line of code adds a text filter to the ListView, so that when the user
-	begins typing, the list will filter the entire view to display only the items that match the entry.</p>
-  </li>
-  <li>Following the <code>onCreate()</code> method, add the String array:
-<pre>
-  static final String[] COUNTRIES = new String[] {
-    "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
-    "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
-    "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
-    "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
-    "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
-    "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
-    "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
-    "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
-    "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
-    "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
-    "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
-    "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
-    "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
-    "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
-    "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
-    "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
-    "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
-    "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
-    "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
-    "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
-    "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
-    "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
-    "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
-    "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
-    "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
-    "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
-    "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
-    "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
-    "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
-    "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
-    "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
-    "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
-    "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
-    "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
-    "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
-    "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
-    "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
-    "Ukraine", "United Arab Emirates", "United Kingdom",
-    "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
-    "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
-    "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
-  };
-</pre>
-</li>
-<li> Run it.</li>
-</ol>
-<p>You can scroll the list, or type to filter it. You should see something like this:</p>
-<img src="images/hello-listview.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.ListView}</li>
-	<li>{@link android.widget.ListAdapter}</li>
-</ul>
-
diff --git a/docs/html/guide/tutorials/views/hello-mapview.jd b/docs/html/guide/tutorials/views/hello-mapview.jd
deleted file mode 100644
index 5217b6b..0000000
--- a/docs/html/guide/tutorials/views/hello-mapview.jd
+++ /dev/null
@@ -1,245 +0,0 @@
-page.title=Hello, MapView 
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<div class="special">
-<p>This tutorial requires that you have the Google Maps external library
-installed in your SDK environment. By default the Android SDK includes the
-Google APIs add-on, which in turn includes the Maps external library. If you
-don't have the Google APIs SDK add-on, you can download it from this
-location:</p>
-
-<p style="margin-left:2em;"><a
-href="http://code.google.com/android/add-ons/google-apis">http://code.google.com/android/add-ons/google-apis</a></p>
-
-<p>The Google APIs add-on requires Android 1.5 SDK or later release. After
-installing the add-on in your SDK, set your project properties to use a <strong>Google
-APIs</strong> build target. See the instructions for setting a build
-target in <a href="{@docRoot}guide/developing/eclipse-adt.html">Developing in
-Eclipse with ADT</a> or <a
-href="{@docRoot}guide/developing/other-ide.html">Developing in Other IDEs</a>,
-as appropriate for your environment. </p>
-
-<p>You will also need to use the android tool to set up an AVD that uses the
-Google APIs deployment target. See <a
-href="{@docRoot}guide/developing/tools/avd.html">Android Virtual Devices</a> for
-more information. Once you have set up your environment, you will be able to
-build and run the project described in this tutorial</a></p>
-
-</div>
-
-<p>A MapView allows you to create your own map-viewing Activity. 
-First, we'll create a simple Activity that can view and navigate a map. Then we will add some overlay items.</p>
-
-<ol>
-  <li>Start a new project/Activity called HelloMapView.
-
-   <li>Because we're using the Google Maps library, 
-   which is not a part of the standard Android library, we need to 
-   declare it in the Android Manifest. Open the AndroidManifest.xml 
-   file and add the following as a child of the <code>&lt;application></code> element:
-
-    <pre>&lt;uses-library android:name="com.google.android.maps" /></pre>
-      </li>
-   <li>We also need access to the internet in order to retrieve the Google Maps tiles,
-    so the application must request the {@link android.Manifest.permission#INTERNET INTERNET} permissions.
-    In the manifest file, add the following as a child of the <code>&lt;manifest></code> element:
-    <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre>
-   </li>
-   <li>Now open the main layout file for your project. Define a layout with a com.google.android.maps.MapView 
-    inside a android.widget.RelativeLayout:
-
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/mainlayout"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent" >
-
-    &lt;com.google.android.maps.MapView
-        android:id="@+id/mapview"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:clickable="true"
-        android:apiKey="<em>Your Maps API Key</em>"
-    />
-
-&lt;/RelativeLayout>
-</pre>
-      <p>The <code>clickable</code> attribute defines whether you want to allow user-interaction with the map.
-      In this case, we set it "true" so that the user can navigate.</p>
-
-      <p>The <code>apiKey</code> attribute holds the Google Maps API Key that proves your application and signer
-      certificate has been registered with the Google Maps service. Because MapView uses Google Maps data, this key is required
-      in order to receive the map data, even while you are developing. Registration is free and it only takes a couple
-      minutes to register your certificate and receive a Maps API Key. For instructions on getting a key, read
-      <a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">Obtaining a Maps API Key</a>.
-      (For the purpose of this tutorial, you should register with the fingerprint of the SDK debug certificate.)
-      Once you've acquired the Maps API Key, insert it for the <code>apiKey</code> value.</p></li>
-
-   <li>Now open the HelloMapView.java file. For this Activity, we're going to extend the special sub-class of 
-      Activity called MapActivity, so change the class declaration to extend 
-      MapActivity, instead of Activity:</p>
-
-      <pre>public class HelloMapView extends MapActivity {</pre>
-
-   <li>The <code>isRouteDisplayed()</code> method is required, so add it inside the class:
-<pre>
-&#64;Override
-protected boolean isRouteDisplayed() {
-    return false;
-}
-</pre>
-<p>You can actually run this now, but all it does is allow you to pan around the map.</p>
-
-   <li>Now go back to the HelloMapView class. We'll now retrieve the ZoomControls object from 
-   the MapView and add it to our new layout element. First, at the top of the HelloMapView, 
-   instantiate handles for the MapView and LinearLayout, plus a ZoomControl object:
-<pre>
-LinearLayout linearLayout;
-MapView mapView;
-</pre>
-
-   <li>Then initialize each of these in <code>onCreate()</code>. We'll capture the LinearLayout and 
-   MapView through their layout resources. Then get the ZoomControls from the MapView::
-<pre>
-mapView = (MapView) findViewById(R.id.mapview);
-mapView.setBuiltInZoomControls(true);
-</pre>
-
-      <p>By using the built-in zoom control provided by MapView, we don't have to do any of the work
-      required to actually perform the zoom operations. The controls will appear whenever the user
-      touches the map, then disappear after a few moments of inactivity.</p></li>
-
-   <li>Run it.</li>
-</ol>
-
-<hr/>
-
-<p>So, we now have full interaction controls. All well and good, but what we really want our map 
-for is custom markers and layovers. Let's add some Overlay 
-objects to our map. To do this, we're going to 
-implement the ItemizedOverlay
-class, which can manage a whole set of Overlay items for us.</p>
-
-<ol>   
-  <li>Create a new Java class named HelloItemizedOverlay that implements ItemizedOverlay.
-
-      <p>When using Eclipse, right-click the package name in the Eclipse Package Explorer, and select New > Class. Fill-in 
-      the Name field as <em>HelloItemizedOverlay</em>. For the Superclass, enter 
-      <em>com.google.android.maps.ItemizedOverlay</em>. Click the checkbox for <em>Constructors from 
-      superclass</em>. Click Finish.</p></li>
-
-  <li> First thing, we need an OverlayItem ArrayList, in which we'll put each of the OverlayItem 
-   objects we want on our map. Add this at the top of the HelloItemizedOverlay class:
-
-      <pre>private ArrayList&lt;OverlayItem> mOverlays = new ArrayList&lt;OverlayItem>();</pre></li>
-
-   <li>All the constructor does is define the default marker to be used on each of the OverlayItems. 
-   In order for the Drawable to actually get drawn, it must have its bounds defined. And we want the 
-   center-point at the bottom of the image to be the point at which it's attached to the map 
-   coordinates. We handle all this with the boundCenterBottom() method. Wrap this around our 
-   defaultMarker, so the super constructor call looks like this:
-
-      <pre>super(boundCenterBottom(defaultMarker));</pre></li>
-
-   <li>In order to add new OverlayItems to our ArrayList, we need a new public method. We'll handle 
-   this with the following method:
-
-<pre>
-public void addOverlay(OverlayItem overlay) {
-    mOverlays.add(overlay);
-    populate();
-}</pre>
-
-      <p>Each time we add a new OverlayItem, we must call <code>populate()</code>, which will read each of out 
-      OverlayItems and prepare them to be drawn.</p></li>
-
-   <li>In order for the <code>populate()</code> method to read each OverlayItem, it will make a request to 
-   <code>createItem(int)</code>. We must define this method to properly read from our ArrayList. Replace the 
-   existing contents of the createItem method with a <code>get()</code> call to our ArrayList:
-
-<pre>
-&#64;Override
-protected OverlayItem createItem(int i) {
-  return mOverlays.get(i);
-}
-</pre></li>
-
-   <li>We're also required to override the <code>size()</code> method. Replace the existing contents of the 
-   method with a size request to our ArrayList:
-
-      <pre>return mOverlays.size();</pre></li>
-</ol>
-
-
-<p>That's it for the HelloItemizedOverlay class. We're now ready to use it.</p>
-
-<hr/>
-<p>Go back to the HelloMapView 
-class. We'll start by creating one OverlayItem, adding to an instance of our HelloItemizedOverlay, 
-and then adding this to the MapView.</p>
-
-<img src="images/androidmarker.png" align="right" />
-<p>First, we need the image that we'll use for our map overlay. Here, we'll use the Android on the 
-right as our marker. Drag this image (or your own) to the res/drawable/ directory of your project workspace.</p>
-
-<p>Now we're ready to work in the HelloMapView:</p>
-
-<ol>
-   <li>First we need some more types. Add the following at the top of the HelloMapView class:
-
-<pre>
-List&lt;Overlay> mapOverlays;
-Drawable drawable;
-HelloItemizedOverlay itemizedOverlay;</pre></li>
-
-   <li>Now pick up where we left off in the <code>onCreate()</code> method. Instantiate the 
-   new fields:
-
-<pre>
-mapOverlays = mapView.getOverlays();
-drawable = this.getResources().getDrawable(R.drawable.androidmarker);
-itemizedoverlay = new HelloItemizedOverlay(drawable);</pre>
-
-      <p>All overlay elements on a map are held by the MapView, so when we want to add some, we must 
-      first retrieve the List with <code>getOverlays()</code> methods. We instantiate the Drawable, which will 
-      be used as our map marker, by using our Context resources to get the Drawable we placed in 
-      the res/drawable/ directory (androidmarker.png). Our HelloItemizedOverlay takes the Drawable in order to set the 
-      default marker.</p></li>
-
-   <li>Now let's make our first OverlayItem by creating a GeoPoint
-    that defines our map coordinates, then pass it to a new OverlayItem:
-
-<pre>
-GeoPoint point = new GeoPoint(19240000,-99120000);
-OverlayItem overlayitem = new OverlayItem(point, "", "");</pre>
-
-      <p>GeoPoint coordinates are based in microdegrees (degrees * 1e6). The OverlayItem takes this 
-      GeoPoint and two strings. Here, we won't concern ourselves with the strings, which can display 
-      text when we click our marker, because we haven't yet written the click handler for the OverlayItem.</p></li>
-
-   <li>All that's left is for us to add this OverlayItem to our collection in the HelloItemizedOverlay, 
-   and add this to the List of Overlay objects retrieved from the MapView:
-
-<pre>
-itemizedoverlay.addOverlay(overlayitem);
-mapOverlays.add(itemizedoverlay);</pre></li>
-
-   <li>Run it!</li>
-</ol>
-
-<p>We've sent our droid to Mexico City. Hola, Mundo!</p>
-<p>You should see the following:</p>
-<img src="images/hello-mapview.png" width="150px" />
-
-<p>Because we created our ItemizedOverlay class with an ArrayList, we can continue adding new
-OverlayItems. Try adding another one. Before the <code>addOverlay()</code> method is called, add these lines:</p>
-<pre>
-GeoPoint point2 = new GeoPoint(35410000, 139460000);
-OverlayItem overlayitem2 = new OverlayItem(point2, "", "");
-</pre>
-<p>Run it again... We've sent a new droid to Tokyo. Sekai, konichiwa!</p>
-
diff --git a/docs/html/guide/tutorials/views/hello-relativelayout.jd b/docs/html/guide/tutorials/views/hello-relativelayout.jd
deleted file mode 100644
index 1b91537..0000000
--- a/docs/html/guide/tutorials/views/hello-relativelayout.jd
+++ /dev/null
@@ -1,75 +0,0 @@
-page.title=Hello, RelativeLayout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.RelativeLayout} is a ViewGroup that allows you to layout child elements
-in positions relative to the parent or siblings elements.</p>
-
-<ol>
-  <li>Start a new project/Activity called HelloRelativeLayout.</li>
-  <li>Open the layout file. Make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-
-    &lt;TextView
-        android:id="@+id/label"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="Type here:"/>
-
-    &lt;EditText
-        android:id="@+id/entry"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:background="@android:drawable/editbox_background"
-        android:layout_below="@id/label"/>
-
-    &lt;Button
-        android:id="@+id/ok"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@id/entry"
-        android:layout_alignParentRight="true"
-        android:layout_marginLeft="10dip"
-        android:text="OK" />
-
-    &lt;Button
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toLeftOf="@id/ok"
-        android:layout_alignTop="@id/ok"
-        android:text="Cancel" />
-
-&lt;/RelativeLayout>
-</pre>
-<p>Pay attention to each of the additional <code>layout_*</code> attributes (besides the 
-usual width and height, which are required for all elements). When using relative layout,
-we use attributes like <code>layout_below</code> and <code>layout_toLeftOf</code> to describe
-how we'd like to position each View. Naturally, these are different relative positions, and the
-value of the attribute is the id of the element we want the position relative to.</p>
-</li>
-<li>Make sure your Activity loads this layout in the <code>onCreate()</code> method:</p>
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p><code>R.layout.main</code> refers to the <code>main.xml</code> layout file.</p>
-</li>
-<li>Run it.</li>
-</ol>
-<p>You should see the following:</p>
-<img src="images/hello-relativelayout.png" width="150px" />
-
-<h3>Resources</h3>
-<ul>
-  <li>{@link android.widget.RelativeLayout}</li>
-  <li>{@link android.widget.TextView}</li>
-  <li>{@link android.widget.EditText}</li>
-  <li>{@link android.widget.Button}</li>
-</ul>
diff --git a/docs/html/guide/tutorials/views/hello-spinner.jd b/docs/html/guide/tutorials/views/hello-spinner.jd
deleted file mode 100644
index 3a04214..0000000
--- a/docs/html/guide/tutorials/views/hello-spinner.jd
+++ /dev/null
@@ -1,106 +0,0 @@
-page.title=Hello, Spinner
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.Spinner} is a widget that allows the user to select an item from a group.
-It is similar to a dropdown list and will allow scrolling when the 
-list exceeds the available vertical space on the screen.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloSpinner.</li>
-  <li>Open the layout file.
-    Make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:padding="10dip"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content">
-
-    &lt;TextView
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="10dip"
-        android:text="Please select a planet:"
-    />
-
-    &lt;Spinner 
-        android:id="@+id/spinner"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:drawSelectorOnTop="true"
-        android:prompt="@string/planet_prompt"
-    />
-
-&lt;/LinearLayout>
-</pre>
-	<p>Notice that the Spinner's <code>android:prompt</code> is a string resource. In
-        this case, Android does not allow it to be a string, it must be a reference to a resource. 
-        So...</p>
-</li>
-
-<li>Open the strings.xml file in res/values/ and add the following <code>&lt;string></code> 
-element inside the <code>&lt;resources></code> element:
-<pre>
-&lt;string name="planet_prompt">Choose a planet&lt;/string>
-</pre>
-</li>
-
-<li>Create a new XML file in res/values/ called arrays.xml. Insert the following:
-<pre>
-&lt;resources>
-
-    &lt;string-array name="planets">
-        &lt;item>Mercury&lt;/item>
-        &lt;item>Venus&lt;/item>
-        &lt;item>Earth&lt;/item>
-        &lt;item>Mars&lt;/item>
-        &lt;item>Jupiter&lt;/item>
-        &lt;item>Saturn&lt;/item>
-        &lt;item>Uranus&lt;/item>
-        &lt;item>Neptune&lt;/item>
-    &lt;/string-array>
-    
-&lt;/resources>
-</pre>
-	<p>This is the list of items (planets) that the user can select from in the Spinner widget.</p>
-</li>
-
-<li>Now open the HelloSpinner.java file. Insert the following code into the HelloSpinner class:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    Spinner s = (Spinner) findViewById(R.id.spinner);
-    ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
-            this, R.array.planets, android.R.layout.simple_spinner_item);
-    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-    s.setAdapter(adapter);
-}
-</pre>
-	<p>That's it. We start by creating a Spinner from our layout. We then create an {@link android.widget.ArrayAdapter} 
-	that binds each element of our string array to a layout view&mdash;we pass <code>createFromResource</code> our Context, 
-	the array of selectable items and the type of layout we'd like each one bound to. We then call
-	<code>setDropDownViewResource()</code> to define the type of layout in which to present the 
-	entire collection. Finally, we set this Adapter to associate with our Spinner, 
-        so the string items have a place to go.</p>
-</li>
-
-<li>Now run it.</li>
-</ol>
-<p>It should look like this:</p>
-<img src="images/hello-spinner.png" width="150px" />
-
-
-<h3>Resources</h3>
-<ul>
-	<li>{@link android.R.layout}</li>
-	<li>{@link android.widget.ArrayAdapter}</li>
-	<li>{@link android.widget.Spinner}</li>
-</ul>
-
diff --git a/docs/html/guide/tutorials/views/hello-tablelayout.jd b/docs/html/guide/tutorials/views/hello-tablelayout.jd
deleted file mode 100644
index 83d6f5d..0000000
--- a/docs/html/guide/tutorials/views/hello-tablelayout.jd
+++ /dev/null
@@ -1,118 +0,0 @@
-page.title=Hello, TableLayout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.TableLayout} is a ViewGroup that 
-will lay child View elements into rows and columns.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloTableLayout.</li>
-  <li>Open the layout file.
-    Make it like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:stretchColumns="1">
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Open..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-O"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Save..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-S"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Save As..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-Shift-S"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;View
-        android:layout_height="2dip"
-        android:background="#FF909090" />
-
-    &lt;TableRow>
-        &lt;TextView
-            android:text="X"
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Import..."
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:text="X"
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Export..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-E"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;View
-        android:layout_height="2dip"
-        android:background="#FF909090" />
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Quit"
-            android:padding="3dip" />
-    &lt;/TableRow>
-&lt;/TableLayout>
-</pre>
-<p>Notice how this resembles the structure of an HTML table. <code>TableLayout</code> is like the
-<code>table</code> element; <code>TableRow</code> is like a <code>tr</code> element; but for our cells like
-the html <code>td</code> element, we can use any kind of View. Here, we use <code>TextView</code> for the cells.</p>
-
-</li>
-<li>Make sure your Activity loads this layout in the <code>onCreate()</code> method:
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p><code>R.layout.main</code> refers to the <code>main.xml</code> layout file.</p>
-</li>
-<li>Run it.</li>
-</ol>
-<p>You should see the following:</p>
-<img src="images/hello-tablelayout.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-  <li>{@link android.widget.TableLayout}</li>
-  <li>{@link android.widget.TableRow}</li>
-  <li>{@link android.widget.TextView}</li>
-</ul>
-
-
diff --git a/docs/html/guide/tutorials/views/hello-tabwidget.jd b/docs/html/guide/tutorials/views/hello-tabwidget.jd
deleted file mode 100644
index 98dddf5..0000000
--- a/docs/html/guide/tutorials/views/hello-tabwidget.jd
+++ /dev/null
@@ -1,124 +0,0 @@
-page.title=Hello, TabWidget
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.TabWidget} offers the ability to easily draw an interface that uses
-tabs to navigate between different views.</p>
-
-<ol>
-  <li>Start a new project/Activity called HelloTabWidget.</li>
-  <li>Open the layout file and make it like so:</li>
-  <pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;TabHost xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/tabhost"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-    &lt;LinearLayout
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent">
-        &lt;TabWidget
-            android:id="@android:id/tabs"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content" />
-        &lt;FrameLayout
-            android:id="@android:id/tabcontent"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent">
-            &lt;TextView 
-                android:id="@+id/textview1"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent" 
-                android:text="this is a tab" />
-            &lt;TextView 
-                android:id="@+id/textview2"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent" 
-                android:text="this is another tab" />
-            &lt;TextView 
-                android:id="@+id/textview3"
-                android:layout_width="fill_parent"
-                android:layout_height="fill_parent" 
-                android:text="this is a third tab" />
-    	&lt;/FrameLayout>
-    &lt;/LinearLayout>
-&lt;/TabHost>
-</pre>
-    <p>Here, we've created a {@link android.widget.TabHost} that contains the entire layout of the Activity.
-    A TabHost requires two descendant elements: a {@link android.widget.TabWidget} and a {@link android.widget.FrameLayout}.
-    In order to properly layout these elements, we've put them inside a vertical {@link android.widget.LinearLayout}.
-    The FrameLayout is where we keep the content that will change with each tab. Each child in the FrameLayout will
-    be associated with a different tab.
-    In this case, each tab simply shows a different {@link android.widget.TextView} with some text. </p>
-    <p>Notice that the TabWidget and the FrameLayout elements have specific <code>android</code> namespace IDs. These are necessary
-    so that the TabHost can automatically retrieve references to them, populate the TabWidget with the tabs that we'll define
-    in our code, and swap the views in the FrameLayout. We've also defined our own IDs for each TextView, which we'll use to 
-    associate each tab with the view that it should reveal.</p>
-    <p>Of course, you can 
-    make these child views as large as complex as you'd like &mdash; instead of the TextView elements, 
-    you could start with other layout views and build a unique layout hierarchy for each tab.</p>
-  </li>
-  <li>Now we'll add our code. Open HelloTabWidget.java and make it a <code>TabActivity</code>.
-    <p>By default, Eclipse creates a class that extends <code>Activity</code>. Change it to 
-    extend <code>TabActivity</code>:</p>
-    <pre>
-public class HelloTabWidget extends TabActivity {
-</pre>  
-  </li>
-  <li>Now fill in the the <code>onCreate</code> method like this:
-  <pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    mTabHost = getTabHost();
-    
-    mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB 1").setContent(R.id.textview1));
-    mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB 2").setContent(R.id.textview2));
-    mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("TAB 3").setContent(R.id.textview3));
-    
-    mTabHost.setCurrentTab(0);
-}
-</pre>
-    <p>As usual, we start by setting our layout.</p>
-    <p>We then call the TabActivity method <code>getTabHost()</code>,
-    which returns us a reference to the TabHost we created in our layout. Upon our TabHost, we call <code>addTab()</code>
-    for each of the tabs that we want to add to the TabWidget. Each time we call this, we pass a 
-    {@link android.widget.TabHost.TabSpec} that we build on the fly, and with it, chain together two necessary methods:
-    <code>setIndicator()</code> to set the text for the tab button, and <code>setContent()</code> to define
-    which View we want to associate with the tab and reveal when pressed. Our indicator is just a text string and 
-    our content is an ID reference to the TextView elements we inserted in the FrameLayout.</p>
-    <p>At the end, we call <code>setCurrentTab()</code> to define which tab should be opened by default. The tabs
-    are saved like a zero-based array, so to open the first tab, we pass zero (<var>0</var>).</p>
-  </li>
-  <li>To clean-up the presentation a bit more, let's remove the window title that appears at the top of the layout.
-  Android includes a theme that removes that title for us. To add it, open the Android Manifest file and add
-  the <var>NoTitleBar</var> theme to the <code>&lt;application></code> tag. It should end up like this:
-    <pre>
-&lt;application android:icon="&#64;drawable/icon" android:theme="&#64;android:style/Theme.NoTitleBar">
-</pre>
-  </li>
-  <li>That's it. Run your application.</li>
-
-</ol>
-
-
-<p>Your application should look like this:</p>
-<img src="images/hello-tabwidget.png" width="150px" />
-
-<div class="special"><p>You can include icons in your tabs by passing a 
-{@link android.graphics.drawable.Drawable} when you call <code>setIndicator()</code>. Here's an example
-that uses a Drawable created from an image in the project resources:</p>
-<pre>setIndicator("TAB 1", getResources().getDrawable(R.drawable.tab_icon))</pre>
-</div>
-
-<h3>References</h3>
-<ul>
-<li>{@link android.widget.TabWidget}</li>
-<li>{@link android.widget.TabHost}</li>
-<li>{@link android.widget.TabHost.TabSpec}</li>
-<li>{@link android.widget.FrameLayout}</li>
-</ul>
-
diff --git a/docs/html/guide/tutorials/views/hello-timepicker.jd b/docs/html/guide/tutorials/views/hello-timepicker.jd
deleted file mode 100644
index 1a6c8f9..0000000
--- a/docs/html/guide/tutorials/views/hello-timepicker.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=Hello, TimePicker
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.widget.TimePicker} is a widget that allows the 
-user to select the time by hour, minute and AM or PM.</p>
-
-
-<ol>
-  <li>Start a new project/Activity called HelloTimePicker.</li>
-  <li>Open the layout file and make it like so:
-    <pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-
-    &lt;TextView android:id="@+id/timeDisplay"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text=""/>
-
-    &lt;Button android:id="@+id/pickTime"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Change the time"/>
-
-&lt;/LinearLayout>
-</pre>
-	<p>For the layout, we're using a vertical LinearLayout, with a {@link android.widget.TextView} that
-	will display the time and a {@link android.widget.Button} that will initiate the 
-        {@link android.widget.TimePicker} dialog.
-	With this layout, the TextView will sit above the Button.
-	The text value in the TextView is set empty, as it will be filled by our Activity
-	with the current time.</p>
-    </li> 
-
-  <li>Open HelloTimePicker.java. Insert the following to the HelloTimePicker class:
-<pre>
-private TextView mTimeDisplay;
-private Button mPickTime;
-
-private int mHour;
-private int mMinute;
-
-static final int TIME_DIALOG_ID = 0;
-
-&#64;Override
-protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-    
-    // capture our View elements
-    mTimeDisplay = (TextView) findViewById(R.id.timeDisplay);
-    mPickTime = (Button) findViewById(R.id.pickTime);
-
-    // add a click listener to the button
-    mPickTime.setOnClickListener(new View.OnClickListener() {
-        public void onClick(View v) {
-            showDialog(TIME_DIALOG_ID);
-        }
-    });
-
-    // get the current time
-    final Calendar c = Calendar.getInstance();
-    mHour = c.get(Calendar.HOUR_OF_DAY);
-    mMinute = c.get(Calendar.MINUTE);
-
-    // display the current date
-    updateDisplay();
-}
-</pre>
-<p class="note"><strong>Tip:</strong> Press Ctrl(or Cmd) + Shift + O to import all needed packages.</p>
-        <p>We start by instantiating variables for our View elements and time fields.
-	The <code>TIME_DIALOG_ID</code> is a static integer that uniquely identifies the dialog. In the
-	<code>onCreate()</code> method, we get prepared by setting the layout and capturing the View elements. 
-	We then set an on-click listener for the Button, so that when it is clicked, it will
-	show our TimePicker dialog. The <code>showDialog()</code> method will perform a callback
-	to our Activity. (We'll define this callback in the next section.) We then create an
-	instance of {@link java.util.Calendar} and get the current hour and minute. Finally, we call 
-	<code>updateDisplay()</code>&mdash;our own method that will fill the TextView with the time.</p>
-</li>
-
-<li>After the <code>onCreate()</code> method, add the <code>onCreateDialog()</code> callback method:
-<pre>
-&#64;Override
-protected Dialog onCreateDialog(int id) {
-    switch (id) {
-    case TIME_DIALOG_ID:
-        return new TimePickerDialog(this,
-                mTimeSetListener, mHour, mMinute, false);
-    }
-    return null;
-}
-</pre>
-	<p>This is passed the identifier we gave <code>showDialog()</code> and initializes
-	the TimePicker to the time we retrieved from our Calendar instance. It will be called by 
-        <code>showDialog()</code>.</p>
-</li>
-
-<li>Now add our <code>updateDisplay()</code> method:
-<pre>
-// updates the time we display in the TextView
-private void updateDisplay() {
-    mTimeDisplay.setText(
-        new StringBuilder()
-                .append(pad(mHour)).append(":")
-                .append(pad(mMinute)));
-}
-</pre>
-	<p>This simply takes our member fields for the time and inserts them in 
-	the <code>mTimeDisplay</code> TextView. Note that we call a new method, <code>pad()</code>,
-	on the hour and minute. (We'll create this method in the last step.)</p>
-</li>
-
-<li>Next, add a listener to be called when the time is reset:
-<pre>
-// the callback received when the user "sets" the time in the dialog
-private TimePickerDialog.OnTimeSetListener mTimeSetListener =
-    new TimePickerDialog.OnTimeSetListener() {
-        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
-            mHour = hourOfDay;
-            mMinute = minute;
-            updateDisplay();
-        }
-    };
-</pre>
-	<p>Now when the user is done setting the time (clicks the "Set" button), we update our member fields with
-	the new time and update our TextView.</p>
-</li>
-<li>Finally, add the <code>pad()</code> method that we called from the <code>updateDisplay()</code>:
-<pre>
-private static String pad(int c) {
-    if (c >= 10)
-        return String.valueOf(c);
-    else
-        return "0" + String.valueOf(c);
-}
-</pre>
-	<p>This method returns the appropriate String representation of the hour or minute.
-	It will prefix a zero to the number if it's a single digit.
-  	</p>
-</li>
-
-<li>Now run it.</li>
-</ol>
-<p>When you press the "Change the time" button, you should see the following:</p>
-<img src="images/hello-timepicker.png" width="150px" />
-
-<h3>References</h3>
-<ol>
-  <li>{@link android.widget.TimePicker}</li>
-  <li>{@link android.widget.Button}</li>
-  <li>{@link android.widget.TextView}</li>
-  <li>{@link java.util.Calendar}</li>
-</ol>
-
diff --git a/docs/html/guide/tutorials/views/hello-webview.jd b/docs/html/guide/tutorials/views/hello-webview.jd
deleted file mode 100644
index a927b04..0000000
--- a/docs/html/guide/tutorials/views/hello-webview.jd
+++ /dev/null
@@ -1,118 +0,0 @@
-page.title=Hello, WebView 
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>A {@link android.webkit.WebView} allows you to create your own web browser Activity. In this tutorial, 
-we'll create a simple Activity that can view web pages.</p>
-
-<ol>
-   <li>Create a new project/Activity called HelloWebView.</li>
-   <li>Open the layout file. Insert a WebView so it looks like so:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:orientation="vertical">
-
-    &lt;WebView 
-        android:id="@+id/webview"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-    />
-
-&lt;/LinearLayout>
-</pre></li>
-
-   <li>Now open the HelloWebView.java file.
-      At the top of the class, instantiate a WebView object:
-<pre>WebView webview;</pre>
-  <p> Then add the following  at the end of the <code>onCreate()</code> method:</p>
-<pre>
-webview = (WebView) findViewById(R.id.webview);
-webview.getSettings().setJavaScriptEnabled(true);
-webview.loadUrl("http://www.google.com");
-</pre>
-
-      <p>This captures the WebView we created in our layout, then requests a 
-	{@link android.webkit.WebSettings} object and enables JavaScript.
-	Then we load a URL.</p></li>
-
-   <li>Because we're accessing the internet, we need to add the appropriate 
-   permissions to the Android manifest file. So open the AndroidManifest.xml file 
-   and, add the following as a child of the <code>&lt;manifest></code> element:
-
-      <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre></li>
-
-   <li>Now run it.</li>
-</ol>
-<p> You now have the world's simplest web page viewer.
-   It's not quite a browser yet. It only loads the page we've requested.</p>
-
-<hr/>
-
-<p>We can load a page, but as soon as we click a link, the default Android web browser 
-handles the Intent, instead of our own WebView handling the action. So now we'll 
-override the {@link android.webkit.WebViewClient} to enable us to handle our own URL loading.</p>
-
-<ol>
-   <li>In the HelloAndroid Activity, add this nested private class:
-<pre>
-private class HelloWebViewClient extends WebViewClient {
-    &#64;Override
-    public boolean shouldOverrideUrlLoading(WebView view, String url) {
-        view.loadUrl(url);
-        return true;
-    }
-}</pre></li>
-
-   <li>Now, in the <code>onCreate()</code> method, set an instance of the <code>HelloWebViewClient</code>
-   as our WebViewClient:
-      <pre>webview.setWebViewClient(new HelloWebViewClient());</pre>
-
-      <p>This line should immediately follow the initialization of our WebView object.</p>
-      <p>What we've done is create a WebViewClient that will load any URL selected in our
-WebView in the same WebView. You can see this in the <code>shouldOverrideUrlLoading()</code>
-method, above&mdash;it is passed the current WebView and the URL, so all we do
-is load the URL in the given view. Returning <var>true</var> says that we've handled the URL
-ourselves and the event should not bubble-up.</p>
-      <p>If you try it again, new pages will now load in the HelloWebView Activity. However, you'll notice that 
-we can't navigate back. We need to handle the back button 
-on the device, so that it will return to the previous page, rather than exit the application.</p>
-    </li>
-
-   <li>To handle the back button key press, add the following method inside the HelloWebView 
-Activity:
-<pre> 
-&#64;Override
-public boolean onKeyDown(int keyCode, KeyEvent event) {
-    if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
-        webview.goBack();
-        return true;
-    }
-    return super.onKeyDown(keyCode, event);
-}</pre>
-      <p>The condition uses a {@link android.view.KeyEvent} to check
-      whether the key pressed is the BACK button and whether the 
-      WebView is actually capable of navigating back (if it has a history). If both are 
-      <em>not</em> true, then we send the event up the chain (and the Activity will close). 
-      But if both <em>are</em> true, then we call <code>goBack()</code>, 
-      which will navigate back one step in the history. We then return true to indicate 
-      that we've handled the event.</p>
-</li>
-</ol>
-<p>When you open the application, it should look like this:</p>
-<img src="images/hello-webview.png" width="150px" />
-
-<h3>Resource</h3>
-<ul>
-<li>{@link android.webkit.WebView}</li>
-<li>{@link android.webkit.WebViewClient}</li>
-<li>{@link android.view.KeyEvent}</li>
-</ul>
-
-      
-
-
-
diff --git a/docs/html/guide/tutorials/views/images/android.png b/docs/html/guide/tutorials/views/images/android.png
deleted file mode 100755
index 39a1ac7..0000000
--- a/docs/html/guide/tutorials/views/images/android.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/androidmarker.png b/docs/html/guide/tutorials/views/images/androidmarker.png
deleted file mode 100755
index 8c43d46..0000000
--- a/docs/html/guide/tutorials/views/images/androidmarker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-autocomplete.png b/docs/html/guide/tutorials/views/images/hello-autocomplete.png
deleted file mode 100755
index e1fd80d..0000000
--- a/docs/html/guide/tutorials/views/images/hello-autocomplete.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-datepicker.png b/docs/html/guide/tutorials/views/images/hello-datepicker.png
deleted file mode 100755
index 2075066..0000000
--- a/docs/html/guide/tutorials/views/images/hello-datepicker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-formstuff.png b/docs/html/guide/tutorials/views/images/hello-formstuff.png
deleted file mode 100755
index 3b4bf54..0000000
--- a/docs/html/guide/tutorials/views/images/hello-formstuff.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-listview.png b/docs/html/guide/tutorials/views/images/hello-listview.png
deleted file mode 100755
index a1cf7aa..0000000
--- a/docs/html/guide/tutorials/views/images/hello-listview.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-mapview.png b/docs/html/guide/tutorials/views/images/hello-mapview.png
deleted file mode 100755
index 0956760..0000000
--- a/docs/html/guide/tutorials/views/images/hello-mapview.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-spinner.png b/docs/html/guide/tutorials/views/images/hello-spinner.png
deleted file mode 100755
index 42e2a91..0000000
--- a/docs/html/guide/tutorials/views/images/hello-spinner.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-tabwidget.png b/docs/html/guide/tutorials/views/images/hello-tabwidget.png
deleted file mode 100644
index 6a52356..0000000
--- a/docs/html/guide/tutorials/views/images/hello-tabwidget.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-timepicker.png b/docs/html/guide/tutorials/views/images/hello-timepicker.png
deleted file mode 100755
index bd5a1ee..0000000
--- a/docs/html/guide/tutorials/views/images/hello-timepicker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/images/hello-webview.png b/docs/html/guide/tutorials/views/images/hello-webview.png
deleted file mode 100755
index 283ce7d..0000000
--- a/docs/html/guide/tutorials/views/images/hello-webview.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/guide/tutorials/views/index.html b/docs/html/guide/tutorials/views/index.html
deleted file mode 100644
index 41d6796..0000000
--- a/docs/html/guide/tutorials/views/index.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=http://developer.android.com/resources/tutorials/views/index.html">
-<title>Redirecting...</title>
-</head>
-<body>
-<p>You should have been redirected. Please <a
-href="http://developer.android.com/resources/tutorials/views/index.html">click here</a>.</p>
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/guide/webapps/debugging.jd b/docs/html/guide/webapps/debugging.jd
index c0dce48..1eef1ae 100644
--- a/docs/html/guide/webapps/debugging.jd
+++ b/docs/html/guide/webapps/debugging.jd
@@ -18,7 +18,7 @@
 
 <h2>See also</h2>
 <ol>
-  <li><a href="{@docRoot}guide/developing/debugging/index.html">Debugging</a></li>
+  <li><a href="{@docRoot}tools/debugging/index.html">Debugging</a></li>
 </ol>
 
 </div>
@@ -43,10 +43,10 @@
 those written using JavaScript {@code console} APIs.</p>
   <p>To run logcat and view messages, execute
 {@code adb logcat} from your Android SDK {@code tools/} directory, or, from DDMS, select
-<strong>Device > Run logcat</strong>. When using the <a href="{@docRoot}sdk/eclipse-adt.html">ADT
+<strong>Device > Run logcat</strong>. When using the <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT
 plugin for Eclipse</a>, you can also view logcat messages by opening the Logcat view, available from
 <strong>Window > Show View > Other > Android > Logcat</strong>.</p>
-  <p>See <a href="{@docRoot}guide/developing/debugging/debugging-log.html">Debugging</a>
+  <p>See <a href="{@docRoot}tools/debugging/debugging-log.html">Debugging</a>
   for more information about <codelogcat</code>.</p>
 </div>
 </div>
diff --git a/docs/html/guide/webapps/index.jd b/docs/html/guide/webapps/index.jd
index 069290a..df7ddbe 100644
--- a/docs/html/guide/webapps/index.jd
+++ b/docs/html/guide/webapps/index.jd
@@ -1,71 +1,16 @@
-page.title=Web Apps Overview
+page.title=Web Apps
+page.landing=true
+page.landing.intro=Android has always been about connectivity and providing a great web browsing experience, so building your app with web technologies can be a great opportunity. Not only can you build an app on the web and still optimize your designs for Android's various screen sizes and densities, but you can also embed web-based content into your Android app using WebView.
+page.landing.image=
+
 @jd:body
 
-<div class="figure" style="width:327px">
-  <img src="{@docRoot}images/webapps/webapps.png" alt="" />
-  <p class="img-caption"><strong>Figure 1.</strong> You can make your web content available to
-users in two ways: in a traditional web browser and in an Android application, by
-including a WebView in the layout.</p>
-</div>
+<div class="landing-docs">
 
-<p>There are essentially two ways to deliver an application on Android: as a
-client-side application (developed using the Android SDK and installed on user devices as an {@code
-.apk}) or as a web application (developed using web standards and accessed through a web
-browser&mdash;there's nothing to install on user devices).</p>
+  <div class="col-6">
+  </div>
 
-<p>The approach you choose for your application could depend on several factors, but Android makes
-the decision to develop a web application easier by providing:</p>
-<ul>
-  <li>Support for viewport properties that allow you to properly size your web application
-based on the screen size</li>
-  <li>CSS and JavaScript features that allow you to provide different styles and images
-based on the screen's pixel density (screen resolution)</li>
-</ul>
+  <div class="col-6">
+  </div>
 
-<p>Thus, your decision to develop a web application for Android can exclude consideration for
-screen support, because it's already easy to make your web pages look good on all types of screens
-powered by Android.</p>
-
-<p>Another great feature of Android is that you don't have to build your application purely on
-the client or purely on the web. You can mix the two together by developing a client-side Android
-application that embeds some web pages (using a {@link android.webkit.WebView} in your Android
-application layout). Figure 1 visualizes how you can provide access to your web pages from either
-a web browser or your Android application. However, you shouldn't develop an Android
-application simply as a means to launch your web site. Rather, the web pages you embed in your
-Android application should be designed especially for that environment. You can even define an
-interface between your Android application and your web pages that allows JavaScript in the web
-pages to call upon APIs in your Android application&mdash;providing Android APIs to your web-based
-application.</p>
-
-<p>Since Android 1.0, {@link android.webkit.WebView} has been available for Android
-applications to embed web content in their layout and bind JavaScript to Android APIs. After
-Android added support for more screen densities (adding support for high and low-density
-screens), Android 2.0 added features to the WebKit framework to allow web pages to specify
-viewport properties and query the screen density in order to modify styles
-and image assets, as mentioned above. Because these features are a part of Android's WebKit
-framework, both the Android Browser (the default web browser provided with the platform) and
-{@link android.webkit.WebView} support the same viewport and screen density features.</p>
-
-<p>To develop a web application for Android-powered devices, you should read the
-following documents:</p>
-
-<dl>
-  <dt><a href="{@docRoot}guide/webapps/targeting.html"><strong>Targeting Screens from Web
-Apps</strong></a></dt>
-  <dd>How to properly size your web app on Android-powered devices and support
-multiple screen densities. The information in this document is important if you're building a web
-application that you at least expect to be available on Android-powered devices (which you should
-assume for anything you publish on the web), but especially if you're targeting mobile devices
-or using {@link android.webkit.WebView}.</dd>
-  <dt><a href="{@docRoot}guide/webapps/webview.html"><strong>Building Web Apps in
-WebView</strong></a></dt>
-  <dd>How to embed web pages into your Android application using {@link android.webkit.WebView} and
-bind JavaScript to Android APIs.</dd>
-  <dt><a href="{@docRoot}guide/webapps/debugging.html"><strong>Debugging Web Apps</strong></a></dt>
-  <dd>How to debug web apps using JavaScript Console APIs.</dd>
-  <dt><a href="{@docRoot}guide/webapps/best-practices.html"><strong>Best Practices for Web
-Apps</strong></a></dt>
-  <dd>A list of practices you should follow, in order to provide an effective web application on
-Android-powered devices.</dd>
-</dl>
-
+</div>
\ No newline at end of file
diff --git a/docs/html/guide/webapps/overview.jd b/docs/html/guide/webapps/overview.jd
new file mode 100644
index 0000000..069290a
--- /dev/null
+++ b/docs/html/guide/webapps/overview.jd
@@ -0,0 +1,71 @@
+page.title=Web Apps Overview
+@jd:body
+
+<div class="figure" style="width:327px">
+  <img src="{@docRoot}images/webapps/webapps.png" alt="" />
+  <p class="img-caption"><strong>Figure 1.</strong> You can make your web content available to
+users in two ways: in a traditional web browser and in an Android application, by
+including a WebView in the layout.</p>
+</div>
+
+<p>There are essentially two ways to deliver an application on Android: as a
+client-side application (developed using the Android SDK and installed on user devices as an {@code
+.apk}) or as a web application (developed using web standards and accessed through a web
+browser&mdash;there's nothing to install on user devices).</p>
+
+<p>The approach you choose for your application could depend on several factors, but Android makes
+the decision to develop a web application easier by providing:</p>
+<ul>
+  <li>Support for viewport properties that allow you to properly size your web application
+based on the screen size</li>
+  <li>CSS and JavaScript features that allow you to provide different styles and images
+based on the screen's pixel density (screen resolution)</li>
+</ul>
+
+<p>Thus, your decision to develop a web application for Android can exclude consideration for
+screen support, because it's already easy to make your web pages look good on all types of screens
+powered by Android.</p>
+
+<p>Another great feature of Android is that you don't have to build your application purely on
+the client or purely on the web. You can mix the two together by developing a client-side Android
+application that embeds some web pages (using a {@link android.webkit.WebView} in your Android
+application layout). Figure 1 visualizes how you can provide access to your web pages from either
+a web browser or your Android application. However, you shouldn't develop an Android
+application simply as a means to launch your web site. Rather, the web pages you embed in your
+Android application should be designed especially for that environment. You can even define an
+interface between your Android application and your web pages that allows JavaScript in the web
+pages to call upon APIs in your Android application&mdash;providing Android APIs to your web-based
+application.</p>
+
+<p>Since Android 1.0, {@link android.webkit.WebView} has been available for Android
+applications to embed web content in their layout and bind JavaScript to Android APIs. After
+Android added support for more screen densities (adding support for high and low-density
+screens), Android 2.0 added features to the WebKit framework to allow web pages to specify
+viewport properties and query the screen density in order to modify styles
+and image assets, as mentioned above. Because these features are a part of Android's WebKit
+framework, both the Android Browser (the default web browser provided with the platform) and
+{@link android.webkit.WebView} support the same viewport and screen density features.</p>
+
+<p>To develop a web application for Android-powered devices, you should read the
+following documents:</p>
+
+<dl>
+  <dt><a href="{@docRoot}guide/webapps/targeting.html"><strong>Targeting Screens from Web
+Apps</strong></a></dt>
+  <dd>How to properly size your web app on Android-powered devices and support
+multiple screen densities. The information in this document is important if you're building a web
+application that you at least expect to be available on Android-powered devices (which you should
+assume for anything you publish on the web), but especially if you're targeting mobile devices
+or using {@link android.webkit.WebView}.</dd>
+  <dt><a href="{@docRoot}guide/webapps/webview.html"><strong>Building Web Apps in
+WebView</strong></a></dt>
+  <dd>How to embed web pages into your Android application using {@link android.webkit.WebView} and
+bind JavaScript to Android APIs.</dd>
+  <dt><a href="{@docRoot}guide/webapps/debugging.html"><strong>Debugging Web Apps</strong></a></dt>
+  <dd>How to debug web apps using JavaScript Console APIs.</dd>
+  <dt><a href="{@docRoot}guide/webapps/best-practices.html"><strong>Best Practices for Web
+Apps</strong></a></dt>
+  <dd>A list of practices you should follow, in order to provide an effective web application on
+Android-powered devices.</dd>
+</dl>
+
diff --git a/docs/html/images/about/growth-chart.png b/docs/html/images/about/growth-chart.png
new file mode 100644
index 0000000..fee4e09
--- /dev/null
+++ b/docs/html/images/about/growth-chart.png
Binary files differ
diff --git a/docs/html/images/activity_fragment_lifecycle.png b/docs/html/images/activity_fragment_lifecycle.png
index bab9579..c447774 100644
--- a/docs/html/images/activity_fragment_lifecycle.png
+++ b/docs/html/images/activity_fragment_lifecycle.png
Binary files differ
diff --git a/docs/html/images/activity_lifecycle.png b/docs/html/images/activity_lifecycle.png
index 357349c..879f51f 100644
--- a/docs/html/images/activity_lifecycle.png
+++ b/docs/html/images/activity_lifecycle.png
Binary files differ
diff --git a/docs/html/images/android-logo.png b/docs/html/images/android-logo.png
new file mode 100644
index 0000000..d72fed1
--- /dev/null
+++ b/docs/html/images/android-logo.png
Binary files differ
diff --git a/docs/html/images/billing_subscription_flow.png b/docs/html/images/billing_subscription_flow.png
new file mode 100644
index 0000000..a293228
--- /dev/null
+++ b/docs/html/images/billing_subscription_flow.png
Binary files differ
diff --git a/docs/html/images/brand/android_app_on_play_logo_large.png b/docs/html/images/brand/android_app_on_play_logo_large.png
new file mode 100644
index 0000000..a46bf35
--- /dev/null
+++ b/docs/html/images/brand/android_app_on_play_logo_large.png
Binary files differ
diff --git a/docs/html/images/brand/android_app_on_play_logo_small.png b/docs/html/images/brand/android_app_on_play_logo_small.png
new file mode 100644
index 0000000..2d8ef52
--- /dev/null
+++ b/docs/html/images/brand/android_app_on_play_logo_small.png
Binary files differ
diff --git a/docs/html/images/brand/droid.gif b/docs/html/images/brand/droid.gif
new file mode 100644
index 0000000..7c7b941
--- /dev/null
+++ b/docs/html/images/brand/droid.gif
Binary files differ
diff --git a/docs/html/images/brand/get_it_on_play_logo_large.png b/docs/html/images/brand/get_it_on_play_logo_large.png
new file mode 100644
index 0000000..8b48767
--- /dev/null
+++ b/docs/html/images/brand/get_it_on_play_logo_large.png
Binary files differ
diff --git a/docs/html/images/brand/get_it_on_play_logo_small.png b/docs/html/images/brand/get_it_on_play_logo_small.png
new file mode 100644
index 0000000..1fcbec8
--- /dev/null
+++ b/docs/html/images/brand/get_it_on_play_logo_small.png
Binary files differ
diff --git a/docs/html/images/brand/google_play_logo_450.png b/docs/html/images/brand/google_play_logo_450.png
new file mode 100644
index 0000000..59a1fcf
--- /dev/null
+++ b/docs/html/images/brand/google_play_logo_450.png
Binary files differ
diff --git a/docs/html/images/brand/learnmore.gif b/docs/html/images/brand/learnmore.gif
new file mode 100644
index 0000000..70a8e6b
--- /dev/null
+++ b/docs/html/images/brand/learnmore.gif
Binary files differ
diff --git a/docs/html/images/brand/logo_android.gif b/docs/html/images/brand/logo_android.gif
new file mode 100644
index 0000000..169c764
--- /dev/null
+++ b/docs/html/images/brand/logo_android.gif
Binary files differ
diff --git a/docs/html/images/brand/mediaplayer.gif b/docs/html/images/brand/mediaplayer.gif
new file mode 100644
index 0000000..860d110
--- /dev/null
+++ b/docs/html/images/brand/mediaplayer.gif
Binary files differ
diff --git a/docs/html/images/brand/norad.gif b/docs/html/images/brand/norad.gif
new file mode 100644
index 0000000..d8707bd
--- /dev/null
+++ b/docs/html/images/brand/norad.gif
Binary files differ
diff --git a/docs/html/images/dac-design-icon.png b/docs/html/images/dac-design-icon.png
new file mode 100644
index 0000000..245f080
--- /dev/null
+++ b/docs/html/images/dac-design-icon.png
Binary files differ
diff --git a/docs/html/images/debugging-tall.png b/docs/html/images/debugging-tall.png
new file mode 100644
index 0000000..d29c4d1
--- /dev/null
+++ b/docs/html/images/debugging-tall.png
Binary files differ
diff --git a/docs/html/images/develop-placeholder.png b/docs/html/images/develop-placeholder.png
new file mode 100644
index 0000000..35a8767
--- /dev/null
+++ b/docs/html/images/develop-placeholder.png
Binary files differ
diff --git a/docs/html/images/develop/app_components.png b/docs/html/images/develop/app_components.png
new file mode 100644
index 0000000..0e3460d
--- /dev/null
+++ b/docs/html/images/develop/app_components.png
Binary files differ
diff --git a/docs/html/images/develop/auth-code.png b/docs/html/images/develop/auth-code.png
new file mode 100644
index 0000000..6dfabf9
--- /dev/null
+++ b/docs/html/images/develop/auth-code.png
Binary files differ
diff --git a/docs/html/images/develop/connectivity.png b/docs/html/images/develop/connectivity.png
new file mode 100644
index 0000000..2c9dadb
--- /dev/null
+++ b/docs/html/images/develop/connectivity.png
Binary files differ
diff --git a/docs/html/images/develop/marquee-play.png b/docs/html/images/develop/marquee-play.png
new file mode 100644
index 0000000..de8802d
--- /dev/null
+++ b/docs/html/images/develop/marquee-play.png
Binary files differ
diff --git a/docs/html/images/develop/resources.png b/docs/html/images/develop/resources.png
new file mode 100644
index 0000000..f6cbf5d
--- /dev/null
+++ b/docs/html/images/develop/resources.png
Binary files differ
diff --git a/docs/html/images/distribute/feature-market.png b/docs/html/images/distribute/feature-market.png
new file mode 100644
index 0000000..e9d3abf
--- /dev/null
+++ b/docs/html/images/distribute/feature-market.png
Binary files differ
diff --git a/docs/html/images/distribute/feature-monetize.png b/docs/html/images/distribute/feature-monetize.png
new file mode 100644
index 0000000..4b1b509
--- /dev/null
+++ b/docs/html/images/distribute/feature-monetize.png
Binary files differ
diff --git a/docs/html/images/distribute/feature-register.png b/docs/html/images/distribute/feature-register.png
new file mode 100644
index 0000000..ad387bf
--- /dev/null
+++ b/docs/html/images/distribute/feature-register.png
Binary files differ
diff --git a/docs/html/images/distribute/marquee-play.png b/docs/html/images/distribute/marquee-play.png
new file mode 100644
index 0000000..1aa4823
--- /dev/null
+++ b/docs/html/images/distribute/marquee-play.png
Binary files differ
diff --git a/docs/html/images/editorschoice_ann.png b/docs/html/images/editorschoice_ann.png
new file mode 100644
index 0000000..c4f2c06
--- /dev/null
+++ b/docs/html/images/editorschoice_ann.png
Binary files differ
diff --git a/docs/html/images/fragment_lifecycle.png b/docs/html/images/fragment_lifecycle.png
index d207db4..fcaa63b 100644
--- a/docs/html/images/fragment_lifecycle.png
+++ b/docs/html/images/fragment_lifecycle.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_backstack.png b/docs/html/images/fundamentals/diagram_backstack.png
index bdb6893..5ddadcb 100644
--- a/docs/html/images/fundamentals/diagram_backstack.png
+++ b/docs/html/images/fundamentals/diagram_backstack.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png b/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png
index aab324d..b9e5ed4 100644
--- a/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png
+++ b/docs/html/images/fundamentals/diagram_backstack_singletask_multiactivity.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_multiple_instances.png b/docs/html/images/fundamentals/diagram_multiple_instances.png
index 64b476f..606f540 100644
--- a/docs/html/images/fundamentals/diagram_multiple_instances.png
+++ b/docs/html/images/fundamentals/diagram_multiple_instances.png
Binary files differ
diff --git a/docs/html/images/fundamentals/diagram_multitasking.png b/docs/html/images/fundamentals/diagram_multitasking.png
index e219599..ffe5c65 100644
--- a/docs/html/images/fundamentals/diagram_multitasking.png
+++ b/docs/html/images/fundamentals/diagram_multitasking.png
Binary files differ
diff --git a/docs/html/images/fundamentals/fragments.png b/docs/html/images/fundamentals/fragments.png
index bf986b1..cb7204b 100644
--- a/docs/html/images/fundamentals/fragments.png
+++ b/docs/html/images/fundamentals/fragments.png
Binary files differ
diff --git a/docs/html/images/fundamentals/restore_instance.png b/docs/html/images/fundamentals/restore_instance.png
index 57a95ec..698b83a 100644
--- a/docs/html/images/fundamentals/restore_instance.png
+++ b/docs/html/images/fundamentals/restore_instance.png
Binary files differ
diff --git a/docs/html/images/fundamentals/service_binding_tree_lifecycle.png b/docs/html/images/fundamentals/service_binding_tree_lifecycle.png
index 5265216..8b826f6 100644
--- a/docs/html/images/fundamentals/service_binding_tree_lifecycle.png
+++ b/docs/html/images/fundamentals/service_binding_tree_lifecycle.png
Binary files differ
diff --git a/docs/html/images/gp-apps-home.png b/docs/html/images/gp-apps-home.png
new file mode 100644
index 0000000..851f722
--- /dev/null
+++ b/docs/html/images/gp-apps-home.png
Binary files differ
diff --git a/docs/html/images/gp-buyer-currency.png b/docs/html/images/gp-buyer-currency.png
new file mode 100644
index 0000000..51b8108
--- /dev/null
+++ b/docs/html/images/gp-buyer-currency.png
Binary files differ
diff --git a/docs/html/images/gp-collectibles.png b/docs/html/images/gp-collectibles.png
new file mode 100644
index 0000000..a63cd50
--- /dev/null
+++ b/docs/html/images/gp-collectibles.png
Binary files differ
diff --git a/docs/html/images/gp-dc-countries.png b/docs/html/images/gp-dc-countries.png
new file mode 100644
index 0000000..00d0d5e
--- /dev/null
+++ b/docs/html/images/gp-dc-countries.png
Binary files differ
diff --git a/docs/html/images/gp-dc-details.png b/docs/html/images/gp-dc-details.png
new file mode 100644
index 0000000..567567e
--- /dev/null
+++ b/docs/html/images/gp-dc-details.png
Binary files differ
diff --git a/docs/html/images/gp-dc-home.png b/docs/html/images/gp-dc-home.png
new file mode 100644
index 0000000..381d0db
--- /dev/null
+++ b/docs/html/images/gp-dc-home.png
Binary files differ
diff --git a/docs/html/images/gp-dc-profile.png b/docs/html/images/gp-dc-profile.png
new file mode 100644
index 0000000..e526369
--- /dev/null
+++ b/docs/html/images/gp-dc-profile.png
Binary files differ
diff --git a/docs/html/images/gp-dc-reviews.png b/docs/html/images/gp-dc-reviews.png
new file mode 100644
index 0000000..cab175a
--- /dev/null
+++ b/docs/html/images/gp-dc-reviews.png
Binary files differ
diff --git a/docs/html/images/gp-dc-stats-mini.png b/docs/html/images/gp-dc-stats-mini.png
new file mode 100644
index 0000000..d29a270
--- /dev/null
+++ b/docs/html/images/gp-dc-stats-mini.png
Binary files differ
diff --git a/docs/html/images/gp-dc-stats.png b/docs/html/images/gp-dc-stats.png
new file mode 100644
index 0000000..06f88e5
--- /dev/null
+++ b/docs/html/images/gp-dc-stats.png
Binary files differ
diff --git a/docs/html/images/gp-details-pages-magicpiano.png b/docs/html/images/gp-details-pages-magicpiano.png
new file mode 100644
index 0000000..4bb1962
--- /dev/null
+++ b/docs/html/images/gp-details-pages-magicpiano.png
Binary files differ
diff --git a/docs/html/images/gp-details-ww-purchase.png b/docs/html/images/gp-details-ww-purchase.png
new file mode 100644
index 0000000..46df443
--- /dev/null
+++ b/docs/html/images/gp-details-ww-purchase.png
Binary files differ
diff --git a/docs/html/images/gp-details-ww.png b/docs/html/images/gp-details-ww.png
new file mode 100644
index 0000000..ccc522c
--- /dev/null
+++ b/docs/html/images/gp-details-ww.png
Binary files differ
diff --git a/docs/html/images/gp-devconsole-home.png b/docs/html/images/gp-devconsole-home.png
new file mode 100644
index 0000000..1d758fd
--- /dev/null
+++ b/docs/html/images/gp-devconsole-home.png
Binary files differ
diff --git a/docs/html/images/gp-device.png b/docs/html/images/gp-device.png
new file mode 100644
index 0000000..86e46e5
--- /dev/null
+++ b/docs/html/images/gp-device.png
Binary files differ
diff --git a/docs/html/images/gp-games-home.png b/docs/html/images/gp-games-home.png
new file mode 100644
index 0000000..81b7f7a
--- /dev/null
+++ b/docs/html/images/gp-games-home.png
Binary files differ
diff --git a/docs/html/images/gp-growth-downloads.png b/docs/html/images/gp-growth-downloads.png
new file mode 100644
index 0000000..4a4b194
--- /dev/null
+++ b/docs/html/images/gp-growth-downloads.png
Binary files differ
diff --git a/docs/html/images/gp-rating-web.png b/docs/html/images/gp-rating-web.png
new file mode 100644
index 0000000..0885826
--- /dev/null
+++ b/docs/html/images/gp-rating-web.png
Binary files differ
diff --git a/docs/html/images/gp-sendto.png b/docs/html/images/gp-sendto.png
new file mode 100644
index 0000000..7409c14
--- /dev/null
+++ b/docs/html/images/gp-sendto.png
Binary files differ
diff --git a/docs/html/images/gp-subs.png b/docs/html/images/gp-subs.png
new file mode 100644
index 0000000..9b3a7df
--- /dev/null
+++ b/docs/html/images/gp-subs.png
Binary files differ
diff --git a/docs/html/images/gp-supported-dev-requirements.png b/docs/html/images/gp-supported-dev-requirements.png
new file mode 100644
index 0000000..d84f34e
--- /dev/null
+++ b/docs/html/images/gp-supported-dev-requirements.png
Binary files differ
diff --git a/docs/html/images/gp-tab.png b/docs/html/images/gp-tab.png
new file mode 100644
index 0000000..4673d21
--- /dev/null
+++ b/docs/html/images/gp-tab.png
Binary files differ
diff --git a/docs/html/images/gp-top-new-paid.png b/docs/html/images/gp-top-new-paid.png
new file mode 100644
index 0000000..d98d6ca
--- /dev/null
+++ b/docs/html/images/gp-top-new-paid.png
Binary files differ
diff --git a/docs/html/images/gpp-cat-feature280-photo.png b/docs/html/images/gpp-cat-feature280-photo.png
new file mode 100644
index 0000000..ae2749b
--- /dev/null
+++ b/docs/html/images/gpp-cat-feature280-photo.png
Binary files differ
diff --git a/docs/html/images/gpp-cat-feature280-puzzle.png b/docs/html/images/gpp-cat-feature280-puzzle.png
new file mode 100644
index 0000000..db203c6
--- /dev/null
+++ b/docs/html/images/gpp-cat-feature280-puzzle.png
Binary files differ
diff --git a/docs/html/images/gpp-cat-feature280-sports.png b/docs/html/images/gpp-cat-feature280-sports.png
new file mode 100644
index 0000000..dcd70aa
--- /dev/null
+++ b/docs/html/images/gpp-cat-feature280-sports.png
Binary files differ
diff --git a/docs/html/images/home-marquee.jpg b/docs/html/images/home-marquee.jpg
new file mode 100644
index 0000000..94d83d7
--- /dev/null
+++ b/docs/html/images/home-marquee.jpg
Binary files differ
diff --git a/docs/html/images/home/design.png b/docs/html/images/home/design.png
new file mode 100644
index 0000000..bbaa767
--- /dev/null
+++ b/docs/html/images/home/design.png
Binary files differ
diff --git a/docs/html/images/home/developers_live.png b/docs/html/images/home/developers_live.png
new file mode 100644
index 0000000..13dbb5c
--- /dev/null
+++ b/docs/html/images/home/developers_live.png
Binary files differ
diff --git a/docs/html/images/home/google-io.png b/docs/html/images/home/google-io.png
new file mode 100644
index 0000000..d21a24d
--- /dev/null
+++ b/docs/html/images/home/google-io.png
Binary files differ
diff --git a/docs/html/images/home/google-play.png b/docs/html/images/home/google-play.png
new file mode 100644
index 0000000..2032154
--- /dev/null
+++ b/docs/html/images/home/google-play.png
Binary files differ
diff --git a/docs/html/images/home/ics-android.png b/docs/html/images/home/ics-android.png
new file mode 100644
index 0000000..f4c3b5b
--- /dev/null
+++ b/docs/html/images/home/ics-android.png
Binary files differ
diff --git a/docs/html/images/layoutparams.png b/docs/html/images/layoutparams.png
index d99625e..ac31e44 100644
--- a/docs/html/images/layoutparams.png
+++ b/docs/html/images/layoutparams.png
Binary files differ
diff --git a/docs/html/images/market/version-codes.png b/docs/html/images/market/version-codes.png
index c0c9858..aa4fd41 100644
--- a/docs/html/images/market/version-codes.png
+++ b/docs/html/images/market/version-codes.png
Binary files differ
diff --git a/docs/html/images/opengl/ccw-square.png b/docs/html/images/opengl/ccw-square.png
new file mode 100644
index 0000000..010def9
--- /dev/null
+++ b/docs/html/images/opengl/ccw-square.png
Binary files differ
diff --git a/docs/html/images/opengl/ccw-winding.png b/docs/html/images/opengl/ccw-winding.png
new file mode 100644
index 0000000..a7ece31
--- /dev/null
+++ b/docs/html/images/opengl/ccw-winding.png
Binary files differ
diff --git a/docs/html/images/opengl/coordinates.png b/docs/html/images/opengl/coordinates.png
index 7180cd5..7a02cdd 100644
--- a/docs/html/images/opengl/coordinates.png
+++ b/docs/html/images/opengl/coordinates.png
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es10-1.png b/docs/html/images/opengl/helloopengl-es10-1.png
deleted file mode 100644
index 9aa2376..0000000
--- a/docs/html/images/opengl/helloopengl-es10-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es10-2.png b/docs/html/images/opengl/helloopengl-es10-2.png
deleted file mode 100644
index cdfd9c7..0000000
--- a/docs/html/images/opengl/helloopengl-es10-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es20-1.png b/docs/html/images/opengl/helloopengl-es20-1.png
deleted file mode 100644
index 1f76c22..0000000
--- a/docs/html/images/opengl/helloopengl-es20-1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/opengl/helloopengl-es20-2.png b/docs/html/images/opengl/helloopengl-es20-2.png
deleted file mode 100644
index 0fbbe60..0000000
--- a/docs/html/images/opengl/helloopengl-es20-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/opengl/ogl-triangle-projected.png b/docs/html/images/opengl/ogl-triangle-projected.png
new file mode 100644
index 0000000..d10bbdc
--- /dev/null
+++ b/docs/html/images/opengl/ogl-triangle-projected.png
Binary files differ
diff --git a/docs/html/images/opengl/ogl-triangle-touch.png b/docs/html/images/opengl/ogl-triangle-touch.png
new file mode 100644
index 0000000..35177a4
--- /dev/null
+++ b/docs/html/images/opengl/ogl-triangle-touch.png
Binary files differ
diff --git a/docs/html/images/opengl/ogl-triangle.png b/docs/html/images/opengl/ogl-triangle.png
new file mode 100644
index 0000000..3d4a385
--- /dev/null
+++ b/docs/html/images/opengl/ogl-triangle.png
Binary files differ
diff --git a/docs/html/images/play_tableft.png b/docs/html/images/play_tableft.png
new file mode 100644
index 0000000..14740cb
--- /dev/null
+++ b/docs/html/images/play_tableft.png
Binary files differ
diff --git a/docs/html/images/providers/ContactsDataFlow.png b/docs/html/images/providers/ContactsDataFlow.png
new file mode 100644
index 0000000..403afc7
--- /dev/null
+++ b/docs/html/images/providers/ContactsDataFlow.png
Binary files differ
diff --git a/docs/html/images/providers/contacts_structure.png b/docs/html/images/providers/contacts_structure.png
new file mode 100644
index 0000000..3cdc5de
--- /dev/null
+++ b/docs/html/images/providers/contacts_structure.png
Binary files differ
diff --git a/docs/html/images/providers/contacts_tables.png b/docs/html/images/providers/contacts_tables.png
new file mode 100644
index 0000000..c449948
--- /dev/null
+++ b/docs/html/images/providers/contacts_tables.png
Binary files differ
diff --git a/docs/html/images/providers/data_columns.png b/docs/html/images/providers/data_columns.png
new file mode 100644
index 0000000..6e9d90e
--- /dev/null
+++ b/docs/html/images/providers/data_columns.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_unknown_sources.png b/docs/html/images/publishing/publishing_unknown_sources.png
deleted file mode 100755
index ad310a1..0000000
--- a/docs/html/images/publishing/publishing_unknown_sources.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/publishing/publishing_unknown_sources_sm.png b/docs/html/images/publishing/publishing_unknown_sources_sm.png
new file mode 100644
index 0000000..34cba2a
--- /dev/null
+++ b/docs/html/images/publishing/publishing_unknown_sources_sm.png
Binary files differ
diff --git a/docs/html/images/publishing/publishing_via_email.png b/docs/html/images/publishing/publishing_via_email.png
index 54c64bd..d367747 100755
--- a/docs/html/images/publishing/publishing_via_email.png
+++ b/docs/html/images/publishing/publishing_via_email.png
Binary files differ
diff --git a/docs/html/images/resources/res-selection-flowchart.png b/docs/html/images/resources/res-selection-flowchart.png
index 5de7688..149f4dc 100644
--- a/docs/html/images/resources/res-selection-flowchart.png
+++ b/docs/html/images/resources/res-selection-flowchart.png
Binary files differ
diff --git a/docs/html/images/resources/resource_devices_diagram1.png b/docs/html/images/resources/resource_devices_diagram1.png
index 0b3c856..e2f515f 100644
--- a/docs/html/images/resources/resource_devices_diagram1.png
+++ b/docs/html/images/resources/resource_devices_diagram1.png
Binary files differ
diff --git a/docs/html/images/resources/resource_devices_diagram2.png b/docs/html/images/resources/resource_devices_diagram2.png
index d32a781..f0a3886 100644
--- a/docs/html/images/resources/resource_devices_diagram2.png
+++ b/docs/html/images/resources/resource_devices_diagram2.png
Binary files differ
diff --git a/docs/html/images/robot-sdk.png b/docs/html/images/robot-sdk.png
new file mode 100644
index 0000000..962d4d5
--- /dev/null
+++ b/docs/html/images/robot-sdk.png
Binary files differ
diff --git a/docs/html/images/robot-tiny.png b/docs/html/images/robot-tiny.png
new file mode 100644
index 0000000..f925062
--- /dev/null
+++ b/docs/html/images/robot-tiny.png
Binary files differ
diff --git a/docs/html/images/screens_support/screens-densities.png b/docs/html/images/screens_support/screens-densities.png
index edbd1e3..3220ecf 100644
--- a/docs/html/images/screens_support/screens-densities.png
+++ b/docs/html/images/screens_support/screens-densities.png
Binary files differ
diff --git a/docs/html/images/screens_support/screens-ranges.png b/docs/html/images/screens_support/screens-ranges.png
index d8a0ffa..c6a0677 100644
--- a/docs/html/images/screens_support/screens-ranges.png
+++ b/docs/html/images/screens_support/screens-ranges.png
Binary files differ
diff --git a/docs/html/images/sdk-cube.png b/docs/html/images/sdk-cube.png
new file mode 100644
index 0000000..58b43ae
--- /dev/null
+++ b/docs/html/images/sdk-cube.png
Binary files differ
diff --git a/docs/html/images/service_lifecycle.png b/docs/html/images/service_lifecycle.png
index 7ab96d7..413bf56 100644
--- a/docs/html/images/service_lifecycle.png
+++ b/docs/html/images/service_lifecycle.png
Binary files differ
diff --git a/docs/html/images/tools-home.png b/docs/html/images/tools-home.png
new file mode 100644
index 0000000..291a361
--- /dev/null
+++ b/docs/html/images/tools-home.png
Binary files differ
diff --git a/docs/html/images/topdev_ann.png b/docs/html/images/topdev_ann.png
new file mode 100644
index 0000000..9564387
--- /dev/null
+++ b/docs/html/images/topdev_ann.png
Binary files differ
diff --git a/docs/html/images/training/basics/basic-lifecycle-create.png b/docs/html/images/training/basics/basic-lifecycle-create.png
index 01d7328..d6c66fc 100644
--- a/docs/html/images/training/basics/basic-lifecycle-create.png
+++ b/docs/html/images/training/basics/basic-lifecycle-create.png
Binary files differ
diff --git a/docs/html/images/training/basics/basic-lifecycle-paused.png b/docs/html/images/training/basics/basic-lifecycle-paused.png
index fcb8bd2..1b81c07 100644
--- a/docs/html/images/training/basics/basic-lifecycle-paused.png
+++ b/docs/html/images/training/basics/basic-lifecycle-paused.png
Binary files differ
diff --git a/docs/html/images/training/basics/basic-lifecycle-savestate.png b/docs/html/images/training/basics/basic-lifecycle-savestate.png
index d74f1ba..9ea9484 100644
--- a/docs/html/images/training/basics/basic-lifecycle-savestate.png
+++ b/docs/html/images/training/basics/basic-lifecycle-savestate.png
Binary files differ
diff --git a/docs/html/images/training/basics/basic-lifecycle-stopped.png b/docs/html/images/training/basics/basic-lifecycle-stopped.png
index 26c22ee..6f45fcc 100644
--- a/docs/html/images/training/basics/basic-lifecycle-stopped.png
+++ b/docs/html/images/training/basics/basic-lifecycle-stopped.png
Binary files differ
diff --git a/docs/html/images/training/basics/basic-lifecycle.png b/docs/html/images/training/basics/basic-lifecycle.png
index 61eb422..f991787 100644
--- a/docs/html/images/training/basics/basic-lifecycle.png
+++ b/docs/html/images/training/basics/basic-lifecycle.png
Binary files differ
diff --git a/docs/html/images/training/basics/network-settings1.png b/docs/html/images/training/basics/network-settings1.png
new file mode 100644
index 0000000..9eaf207
--- /dev/null
+++ b/docs/html/images/training/basics/network-settings1.png
Binary files differ
diff --git a/docs/html/images/training/basics/network-settings2.png b/docs/html/images/training/basics/network-settings2.png
new file mode 100644
index 0000000..5f4dc63
--- /dev/null
+++ b/docs/html/images/training/basics/network-settings2.png
Binary files differ
diff --git a/docs/html/images/ui/button-types.png b/docs/html/images/ui/button-types.png
new file mode 100644
index 0000000..dcb083f
--- /dev/null
+++ b/docs/html/images/ui/button-types.png
Binary files differ
diff --git a/docs/html/images/ui/buttons-holo.png b/docs/html/images/ui/buttons-holo.png
new file mode 100644
index 0000000..16e2fd2
--- /dev/null
+++ b/docs/html/images/ui/buttons-holo.png
Binary files differ
diff --git a/docs/html/images/ui/checkboxes.png b/docs/html/images/ui/checkboxes.png
new file mode 100644
index 0000000..8878fb1
--- /dev/null
+++ b/docs/html/images/ui/checkboxes.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-actionlabel.png b/docs/html/images/ui/edittext-actionlabel.png
new file mode 100644
index 0000000..a0e9fe9
--- /dev/null
+++ b/docs/html/images/ui/edittext-actionlabel.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-actionsend.png b/docs/html/images/ui/edittext-actionsend.png
new file mode 100644
index 0000000..63ccbd1
--- /dev/null
+++ b/docs/html/images/ui/edittext-actionsend.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-autocomplete.png b/docs/html/images/ui/edittext-autocomplete.png
new file mode 100644
index 0000000..c29091a
--- /dev/null
+++ b/docs/html/images/ui/edittext-autocomplete.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-email.png b/docs/html/images/ui/edittext-email.png
new file mode 100644
index 0000000..26f6136
--- /dev/null
+++ b/docs/html/images/ui/edittext-email.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-noextract.png b/docs/html/images/ui/edittext-noextract.png
new file mode 100644
index 0000000..b459283
--- /dev/null
+++ b/docs/html/images/ui/edittext-noextract.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-phone.png b/docs/html/images/ui/edittext-phone.png
new file mode 100644
index 0000000..45177d3
--- /dev/null
+++ b/docs/html/images/ui/edittext-phone.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-text-next.png b/docs/html/images/ui/edittext-text-next.png
new file mode 100644
index 0000000..ef5ff1d
--- /dev/null
+++ b/docs/html/images/ui/edittext-text-next.png
Binary files differ
diff --git a/docs/html/images/ui/edittext-text.png b/docs/html/images/ui/edittext-text.png
new file mode 100644
index 0000000..599dcec
--- /dev/null
+++ b/docs/html/images/ui/edittext-text.png
Binary files differ
diff --git a/docs/html/images/ui/edittext.png b/docs/html/images/ui/edittext.png
new file mode 100644
index 0000000..d4bcaaa
--- /dev/null
+++ b/docs/html/images/ui/edittext.png
Binary files differ
diff --git a/docs/html/images/ui/gridlayout-small.png b/docs/html/images/ui/gridlayout-small.png
new file mode 100644
index 0000000..935b481
--- /dev/null
+++ b/docs/html/images/ui/gridlayout-small.png
Binary files differ
diff --git a/docs/html/images/ui/gridlayout.png b/docs/html/images/ui/gridlayout.png
new file mode 100644
index 0000000..12ae414
--- /dev/null
+++ b/docs/html/images/ui/gridlayout.png
Binary files differ
diff --git a/docs/html/images/ui/gridview-small.png b/docs/html/images/ui/gridview-small.png
new file mode 100644
index 0000000..104a4d4
--- /dev/null
+++ b/docs/html/images/ui/gridview-small.png
Binary files differ
diff --git a/docs/html/images/ui/gridview.png b/docs/html/images/ui/gridview.png
new file mode 100644
index 0000000..a780df3
--- /dev/null
+++ b/docs/html/images/ui/gridview.png
Binary files differ
diff --git a/docs/html/images/ui/linearlayout-small.png b/docs/html/images/ui/linearlayout-small.png
new file mode 100644
index 0000000..5d929e2
--- /dev/null
+++ b/docs/html/images/ui/linearlayout-small.png
Binary files differ
diff --git a/docs/html/images/ui/linearlayout.png b/docs/html/images/ui/linearlayout.png
new file mode 100644
index 0000000..392cc11
--- /dev/null
+++ b/docs/html/images/ui/linearlayout.png
Binary files differ
diff --git a/docs/html/images/ui/listview-small.png b/docs/html/images/ui/listview-small.png
new file mode 100644
index 0000000..97eba89
--- /dev/null
+++ b/docs/html/images/ui/listview-small.png
Binary files differ
diff --git a/docs/html/images/ui/listview.png b/docs/html/images/ui/listview.png
new file mode 100644
index 0000000..456ed0c
--- /dev/null
+++ b/docs/html/images/ui/listview.png
Binary files differ
diff --git a/docs/html/images/ui/pickers.png b/docs/html/images/ui/pickers.png
new file mode 100644
index 0000000..e446fab
--- /dev/null
+++ b/docs/html/images/ui/pickers.png
Binary files differ
diff --git a/docs/html/images/ui/radiobuttons.png b/docs/html/images/ui/radiobuttons.png
new file mode 100644
index 0000000..8f6b22a
--- /dev/null
+++ b/docs/html/images/ui/radiobuttons.png
Binary files differ
diff --git a/docs/html/images/ui/relativelayout-small.png b/docs/html/images/ui/relativelayout-small.png
new file mode 100644
index 0000000..c531e9a
--- /dev/null
+++ b/docs/html/images/ui/relativelayout-small.png
Binary files differ
diff --git a/docs/html/images/ui/relativelayout.png b/docs/html/images/ui/relativelayout.png
new file mode 100644
index 0000000..72c06ae1
--- /dev/null
+++ b/docs/html/images/ui/relativelayout.png
Binary files differ
diff --git a/docs/html/images/ui/sample-linearlayout.png b/docs/html/images/ui/sample-linearlayout.png
new file mode 100644
index 0000000..c4beb93
--- /dev/null
+++ b/docs/html/images/ui/sample-linearlayout.png
Binary files differ
diff --git a/docs/html/images/ui/sample-relativelayout.png b/docs/html/images/ui/sample-relativelayout.png
new file mode 100644
index 0000000..d9ea30e
--- /dev/null
+++ b/docs/html/images/ui/sample-relativelayout.png
Binary files differ
diff --git a/docs/html/images/ui/spinner.png b/docs/html/images/ui/spinner.png
new file mode 100644
index 0000000..79ee4e4
--- /dev/null
+++ b/docs/html/images/ui/spinner.png
Binary files differ
diff --git a/docs/html/images/ui/switch.png b/docs/html/images/ui/switch.png
new file mode 100644
index 0000000..e8d8014
--- /dev/null
+++ b/docs/html/images/ui/switch.png
Binary files differ
diff --git a/docs/html/images/ui/tabs-small.png b/docs/html/images/ui/tabs-small.png
new file mode 100644
index 0000000..622f1e7
--- /dev/null
+++ b/docs/html/images/ui/tabs-small.png
Binary files differ
diff --git a/docs/html/images/ui/tabs.png b/docs/html/images/ui/tabs.png
new file mode 100644
index 0000000..da9d4b6
--- /dev/null
+++ b/docs/html/images/ui/tabs.png
Binary files differ
diff --git a/docs/html/images/ui/togglebutton.png b/docs/html/images/ui/togglebutton.png
new file mode 100644
index 0000000..a69b3fe
--- /dev/null
+++ b/docs/html/images/ui/togglebutton.png
Binary files differ
diff --git a/docs/html/images/ui/ui-controls.png b/docs/html/images/ui/ui-controls.png
new file mode 100644
index 0000000..13534d3
--- /dev/null
+++ b/docs/html/images/ui/ui-controls.png
Binary files differ
diff --git a/docs/html/images/ui/ui_index.png b/docs/html/images/ui/ui_index.png
new file mode 100644
index 0000000..3cc82c2
--- /dev/null
+++ b/docs/html/images/ui/ui_index.png
Binary files differ
diff --git a/docs/html/images/ui/webview-small.png b/docs/html/images/ui/webview-small.png
new file mode 100644
index 0000000..4c32432
--- /dev/null
+++ b/docs/html/images/ui/webview-small.png
Binary files differ
diff --git a/docs/html/images/ui/webview.png b/docs/html/images/ui/webview.png
new file mode 100644
index 0000000..12cef58
--- /dev/null
+++ b/docs/html/images/ui/webview.png
Binary files differ
diff --git a/docs/html/images/viewgroup.png b/docs/html/images/viewgroup.png
index 2c86ddb..fa07799 100644
--- a/docs/html/images/viewgroup.png
+++ b/docs/html/images/viewgroup.png
Binary files differ
diff --git a/docs/html/images/webapps/webapps.png b/docs/html/images/webapps/webapps.png
index 6ad6205..ff499cf 100644
--- a/docs/html/images/webapps/webapps.png
+++ b/docs/html/images/webapps/webapps.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index d3203bb..58bfd04 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -1,218 +1,70 @@
-home=true
+fullpage=true
+no_footer_links=true
+carousel=true
 page.metaDescription=The official site for Android developers. Provides the Android SDK and documentation for app developers and designers.
 @jd:body
 
 
-<div id="mainBodyFixed">
-              <div id="mainBodyLeft">			
-                    <div id="homeMiddle">
-                        <div id="topAnnouncement">
-                            <div id="homeTitle">
-                                <h2>Developer Announcements</h2>
-                            </div><!-- end homeTitle -->
-                            <div id="announcement-block">
-                            <!-- total max width is 520px -->
-                                  <img src="{@docRoot}images/home/play_logo.png"
-alt="Google Play" width="120px" style="padding:10px 52px"/>
-                                  <div id="announcement" style="width:275px">
-    <p>Introducing <strong>Google Play</strong>: An integrated digital content destination where
-users buy and enjoy all of their favorite content in one place. It's the new destination for
-Android apps!</p>
-    <p><a href="http://android-developers.blogspot.com/2012/03/introducing-google-play.html">Read more &raquo;</a></p>
-                                </div> <!-- end annoucement -->
-                            </div> <!-- end annoucement-block -->
-                        </div><!-- end topAnnouncement -->
-                        <div id="carouselMain" style="height:205px"> <!-- this height can be
-                                                            adjusted based on the content height -->
+<div class="wrap">
+    <!-- Slideshow -->
+    <div class="slideshow-container slideshow-home col-16">
+        <a href="" class="slideshow-prev">Prev</a>
+        <a href="" class="slideshow-next">Next</a>
+        <div class="frame">
+            <ul>
+                <li class="item carousel-home">
+                    <div class="content-left col-10">
+                        <img src="{@docRoot}images/home/design.png" style="margin-top:30px">
+                    </div>
+                    <div class="content-right col-6">
+                    <h1>Make your Android apps<br>look great</h1>
+                    <p>New templates in the design guide make it easier than ever to design apps
+that are beautiful and easy to use.</p>
+                    <a href="/design/index.html" class="button">Learn More</a>
+                    </div>
+                </li>
+                <li class="item carousel-home">
+                        <div class="content-left col-10">
+                        <img src="/images/home/google-io.png">
                         </div>
-                            <div class="clearer"></div>
-                        <div id="carouselWheel">
-                            <div class="app-list-container" align="center"> 
-                                <a href="javascript:{}" id="arrow-left" onclick="" class="arrow-left-off"></a>
-                                <div id="list-clip">
-                                    <div style="left: 0px;" id="app-list">
-                                      <!-- populated by buildCarousel() -->
-                                    </div>
-                                </div><!-- end list-clip -->
-                                <a href="javascript:{ page_right(); }" id="arrow-right" onclick="" class="arrow-right-on"></a>
-                                <div class="clearer"></div>
-                            </div><!-- end app-list container -->
-                        </div><!-- end carouselWheel -->
-                    </div><!-- end homeMiddle -->
+                        <div class="content-right col-6">
+                        <h1>Watch Android at Google I/O!</h1>
+                        <p>See the keynote and more than 40 Android developer sessions streamed live from Moscone Center in San Francisco. <div style="margin-top:-22px;">Begins June 27, 9AM PDT (UTC-7).</span></p>
+                        <a href="https://developers.google.com/events/io/sessions#android"
+class="button">See the Android Sessions</a>
+                        </div>
+                </li>
+                <li class="item carousel-home">
+                        <div class="content-left col-10">
+                            <img src="/images/home/google-play.png"
+                                  style="margin-top:50px">
+                        </div>
+                        <div class="content-right col-6">
+                        <h1>Publish your apps<br>in Google Play</h1>
+                        <p>The most visited store in the world for Android apps. Cloud-connected and always synced, it's never been easier for users to find and download your apps.</p>
 
-                    <div style="clear:both">&nbsp;</div>
-              </div><!-- end mainBodyLeft -->
-
-              <div id="mainBodyRight">
-                      <table id="rightColumn">
-                              <tr>
-                                      <td class="imageCell"><a href="{@docRoot}sdk/index.html"><img src="{@docRoot}assets/images/icon_download.jpg" style="padding:0" /></a></td>
-                                      <td>
-                                              <h2 class="green">Download</h2>
-                                              <p>The Android SDK has the tools, sample code, and docs you need to create great apps.</p>
-                                              <p><a href="{@docRoot}sdk/index.html">Learn more &raquo;</a></p>
-                                      </td>
-                              </tr>
-                              
-                              
-                              <tr>
-                                      <td colspan="2"><div class="seperator">&nbsp;</div></td>
-                              </tr>
-                              <tr>
-                                      <td class="imageCell"><a href="{@docRoot}design/index.html"><img src="{@docRoot}assets/images/icon_design.png" style="padding:5px" /></a></td>
-                                      <td>
-                                              <h2 class="green">Design</h2>
-                                              <p>Learn about principles, building blocks, and patterns for creating world-class Android user interfaces.</p>
-                                              <p><a href="{@docRoot}design/index.html">Learn more &raquo;</a></p>
-                                      </td>
-                              </tr>
-                              
-                              <tr>
-                                      <td colspan="2"><div class="seperator">&nbsp;</div></td>
-                              </tr>
-                              <tr>
-                                      <td class="imageCell"><a href="http://play.google.com/apps/publish"><img src="{@docRoot}assets/images/icon_play.png" style="padding:0" /></a></td>
-                                      <td>
-                                              <h2 class="green">Publish</h2>
-                                              <p>Google Play is an open service that lets you distribute your apps to devices.</p>
-                                              <p><a href="http://play.google.com/apps/publish">Learn more &raquo;</a></p>
-                                      </td>
-                              </tr>
-                              
-                              <tr>
-                                      <td colspan="2"><div class="seperator">&nbsp;</div></td>
-                              </tr>
-                              <tr>
-                                      <td class="imageCell"><a
-href="{@docRoot}resources/dashboard/platform-versions.html"><img
-src="{@docRoot}images/icon_dashboard.png" style="padding:0" /></a></td>
-                                      <td>
-                                              <h2 class="green">Target Devices</h2>
-                                              <p>The Device Dashboard
-provides information about deployed Android devices to
-help you target suitable device configurations as you build and update your
-apps.</p>
-                                              <p><a
-href="{@docRoot}resources/dashboard/platform-versions.html">Learn more &raquo;</a></p>
-                                      </td>
-                              </tr>
-
-                      </table>
-              </div>
-	</div>
-
-<!--[if lte IE 6]>
-  <style>
-    #arrow-left {
-      margin:0 0 0 5px;
-    }
-    #arrow-right {
-      margin-left:0;
-    }
-    .app-list-container {
-      margin: 37px 0 0 23px;
-    }
-    div#list-clip { 
-      width:468px;
-    }
-  </style>
-<![endif]-->
-
-<script type="text/javascript">
-
-// * -- carousel dictionary -- * //
-  /* layout:  imgLeft, imgRight, imgTop
-     icon:    image for carousel entry. cropped (height:70px, width:90px)
-     name:    string for carousel entry
-     img:     image for bulletin post. cropped (height: 170, width:230px)
-     title:   header for bulletin (optional, insert "" value to skip
-     desc:    the bulletin post. must include html tags. 
-  */
-
-  var droidList = {
-    'sdk': {
-      'layout':"imgLeft",
-      'icon':"sdk-small.png",
-      'name':"Android 4.0.3",
-      'img':"ics-android.png",
-      'title':"Android 4.0.3",
-      'desc': "<p>Android 4.0.3 is an update to the Ice Cream Sandwich release that adds a "
-+ "handful of new features for users and developers. Check out the <a "
-+ "href='http://developer.android.com/sdk/android-4.0-highlights.html'>Platform Highlights</a> "
-+ "for an overview of all features in Android 4.0.x.</p>"
-+ "<p>For information about API changes in 4.0.3 (API level 15), read the "
-+ "<a href='{@docRoot}sdk/android-4.0.3.html'>platform notes</a> and <a "
-+ "href='{@docRoot}sdk/api_diff/15/changes.html'>diff report</a>. If you're new to Android, "
-+ "get started with the <a href='/sdk/index.html'>SDK starter package</a>.</p>"
-    },
+                        <a href="{@docRoot}distribute/index.html" class="button">Learn More</a>
+                        </div> 
+                </li>
+            </ul>
+        </div>
+    </div>
+    <!-- /End slideshow -->
     
-    'plus': {
-      'layout':"imgLeft",
-      'icon':"google-plus-small.png",
-      'name':"Google+ Page",
-      'img':"google-plus.png",
-      'title':"Android Developers on Google+",
-      'desc': "<p>We now have a Google+ page for <a "
-+ "href='https://plus.google.com/108967384991768947849'>+Android Developers</a>. "
-+ "We'll use it to host Hangouts for developers, talk about the latest releases, "
-+ "development and design tips, and much more.</p>"
-+ "<div style='margin:.7em 0 0 0'><g:plus href='https://plus.google.com/108967384991768947849' "
-+ "size=\"smallbadge\" width=\"275\"></g:plus></div>"
-    },
+    
+    
+</div>
+<div class="wrap" style="padding-bottom:20px">
+    <!-- Section links -->
+    <div class="home-sections">
+        <ul>
+            <li><a href="{@docRoot}about/index.html">About Android</a></li>
+            <li><a href="{@docRoot}sdk/index.html">Get the SDK</a></li>
+            <li><a href="http://source.android.com">Open Source</a></li>
+            <li><a href="{@docRoot}support.html">Support</a></li>
+            <li class="last"><a href="{@docRoot}legal.html">Legal</a></li>
+        </ul>
+    </div>
+    <!-- /Section links -->
+</div>     
 
-    'tv': {
-      'layout':"imgLeft",
-      'icon':"GTV_icon_small.png",
-      'name':"Google TV",
-      'img':"GTV_icon_large.png",
-      'title':"Google TV!",
-      'desc': "<p>Build something big. By big, we mean <em>worthy-of-the-living-room</em> big.</p>"
-	        +  " <p>Google TV brings the power of Android" 
-	        +  " and Google Chrome to television."
-		+  " The average American watches five hours of TV per day. Give them the apps"
-		+  " to update their status, listen to music, watch web videos, and more.</p>"
-                +  "<p><a href='http://code.google.com/tv'>Develop for Google TV &raquo;</a></p>"
-    },
-
-/*
-    'devphone': {
-      'layout':"imgLeft",
-      'icon':"devphone-small.png",
-      'name':"Dev Phones",
-      'img':"devphone-large.png",
-      'title':"Android Dev Phones",
-      'desc': "<p>Run and debug your Android applications directly on one of these "
- + "devices. Modify and rebuild the Android operating system, and flash it onto "
- + "the phone. The Android Dev Phones are carrier-independent, and available for "
- + "purchase by developers through their Google Play publisher accounts.</p><p> "
- + "<a href='http://play.google.com/apps/publish'>Visit Google Play "
- + "to learn more &raquo;</a></p>"
-    },
-    */
-
-    'mapskey': {
-      'layout':"imgLeft",
-      'icon':"maps-small.png",
-      'name':"Maps API Key",
-      'img':"maps-large.png",
-      'title':"Maps API Key",
-      'desc':"<p>If you're writing an Android application that uses Google Maps (with MapView), you must register your application to obtain a Maps API Key. Without the key, your maps application will not work on Android devices. Obtaining a key requires just a couple of steps.</p><p><a href='http://code.google.com/android/add-ons/google-apis/maps-overview.html'>Learn more &raquo;</a></p>"
-    }
-
-  }
-</script>
-<script type="text/javascript" src="{@docRoot}assets/carousel.js"></script>
-<script type="text/javascript">
-  initCarousel("plus");
-</script>
-
-<script type="text/javascript" src="https://plus.google.com/108967384991768947849"
-rel="publisher"></script>
-<script type="text/javascript">
-window.___gcfg = {lang: 'en'};
-(function() 
-{var po = document.createElement("script");
-po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js";
-var s = document.getElementsByTagName("script")[0];
-s.parentNode.insertBefore(po, s);
-})();</script>
diff --git a/docs/html/intl/es/training/monitoring-device-state/battery-monitoring.jd b/docs/html/intl/es/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..08a42dd
--- /dev/null
+++ b/docs/html/intl/es/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=Cómo controlar el nivel de batería y el estado de carga
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Cómo determinar y controlar el tipo de conector y el estado de la conexión
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#DetermineChargeState">Cómo determinar el estado de carga actual</a></li>
+  <li><a href="#MonitorChargeState">Cómo supervisar los cambios en el estado de carga</a></li>
+  <li><a href="#CurrentLevel">Cómo determinar el nivel de batería actual</a></li>
+  <li><a href="#MonitorLevel">Cómo supervisar cambios importantes en el nivel de batería</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>Al modificar la frecuencia de las actualizaciones en segundo plano para reducir el efecto de las mismas en la duración de la batería, te recomendamos que comiences por comprobar el estado de carga y el nivel actual de la batería.</p>
+
+<p>El impacto derivado de actualizar aplicaciones en la duración de la batería varía en función del nivel de batería y del estado de carga del dispositivo, mientras que es insignificante cuando este está conectado a la corriente. Por ello, en la mayoría de los casos, puedes maximizar la frecuencia de actualización cuando el dispositivo esté conectado a un cargador. Por el contrario, si el dispositivo está en proceso de descarga, disminuir la frecuencia de actualización te permitirá aumentar la duración de la batería.</p>
+
+<p>Del mismo modo, puedes comprobar el nivel de carga de la batería y reducir la frecuencia de las actualizaciones o incluso detenerlas cuando la batería esté a punto de agotarse.</p>
+
+
+<h2 id="DetermineChargeState">Cómo determinar el estado de carga actual</h2> 
+ 
+<p>En primer lugar, te recomendamos que determines el estado de carga actual. {@link android.os.BatteryManager} envía los detalles de carga y de la batería en un {@link android.content.Intent} persistente que incluye el estado de carga.</p>
+
+<p>Se trata de un intento persistente, por lo que no es necesario registrar un {@link android.content.BroadcastReceiver}. Para ello, solo tienes que ejecutar {@code registerReceiver} transmitiendo {@code null} como el receptor (como se muestra en el siguiente fragmento). A continuación, se devuelve el intento de estado actual de la batería. Puedes transmitir un objeto {@link android.content.BroadcastReceiver} real, pero hablaremos sobre las actualizaciones en otra sección, por lo que no es necesario ahora.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Puedes extraer el estado de carga actual y, si el dispositivo está cargando, puedes saber también si se está usando un cargador de corriente alterna o USB:<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>Normalmente, debes maximizar la frecuencia de las actualizaciones en segundo plano si el dispositivo está conectado a un cargador de corriente alterna, disminuir esa frecuencia si se utiliza un cargador USB y reducirla aún más si la batería se está descargando.</p>
+
+
+<h2 id="MonitorChargeState">Cómo supervisar los cambios en el estado de carga</h2> 
+
+<p>Modificar el estado de carga es tan fácil como conectar el dispositivo a un enchufe o USB. Por ello, es importante que supervises el estado de carga por si se producen cambios y modifiques la frecuencia de actualización según corresponda.</p>
+
+<p>{@link android.os.BatteryManager} emite una acción siempre que el dispositivo se conecta o desconecta de la corriente. Es importante recibir estos eventos aunque la aplicación no esté en ejecución (especialmente porque estos eventos pueden afectar a la frecuencia con la que inicias tu aplicación para actualizarla en segundo plano), por lo que debes registrar un {@link android.content.BroadcastReceiver} en tu archivo de manifiesto para detectar ambos eventos definiendo {@link android.content.Intent#ACTION_POWER_CONNECTED} y {@link android.content.Intent#ACTION_POWER_DISCONNECTED} en un filtro de intentos.</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>En la implementación de {@link android.content.BroadcastReceiver} asociada, puedes extraer el método y el estado de carga actual como se describe en el paso anterior.</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">Cómo determinar el nivel de batería actual</h2> 
+
+<p>En algunos casos, también es útil determinar el nivel de batería actual. Puedes disminuir la frecuencia de las actualizaciones en segundo plano si el nivel de carga de la batería es inferior a un valor determinado.</p>
+
+<p>Puedes consultar la carga actual de la batería extrayendo el nivel actual de la batería y subir a partir del intento de estado de batería, como se muestra a continuación:</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">Cómo supervisar cambios importantes en el nivel de batería</h2> 
+
+<p>No puedes controlar el estado de la batería de forma continua fácilmente, pero tampoco es necesario.</p>
+
+<p>En términos generales, el impacto sobre la batería derivado de controlar continuamente el nivel de batería es mayor que el comportamiento habitual de la aplicación. Por ello, te recomendamos que supervises únicamente los cambios en el nivel de batería más significativos, especialmente cuando el dispositivo tenga poca batería o acabe de cargarse.</p>
+
+<p>El fragmento de manifiesto que aparece a continuación se ha extraído del elemento de filtro de intento de un receptor de emisión. El receptor detecta {@link android.content.Intent#ACTION_BATTERY_LOW} y {@link android.content.Intent#ACTION_BATTERY_OKAY} y se activa cuando el nivel de batería del dispositivo es bajo o cuando se sale de un estado bajo de batería.</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>Cuando la batería esté a punto de agotarse, te recomendamos que inhabilites las actualizaciones en segundo plano. Si el teléfono se apaga antes de poder utilizar las aplicaciones, no importa que tengan los datos actualizados.</p>
+
+<p>En muchos casos, el hecho de cargar un dispositivo coincide con la acción de utilizar un conector. En la próxima sección, hablaremos sobre cómo determinar el estado de conexión actual y cómo supervisar los cambios que se produzcan al conectar el dispositivo.</p>
+
diff --git a/docs/html/intl/es/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/intl/es/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..2a5ff12
--- /dev/null
+++ b/docs/html/intl/es/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=Cómo determinar y controlar el estado de la conectividad
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Cómo determinar y controlar el tipo de conector y el estado de la conexión
+previous.link=docking-monitoring.html
+next.title=Cómo manipular los receptores de emisión bajo demanda
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#DetermineConnection">Cómo determinar si tienes conexión a Internet</a></li>
+  <li><a href="#DetermineType">Cómo determinar el tipo de conexión a Internet</a></li>
+  <li><a href="#MonitorChanges">Cómo supervisar los cambios en la conectividad</a></li>
+</ol>
+
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Algunos de los usos más comunes para las alarmas con repetición y los servicios en segundo plano es programar actualizaciones regulares de los datos de aplicaciones a partir de recursos de Internet, almacenar datos en la memoria caché o ejecutar descargas a largo plazo. Sin embargo, si no estás conectado a Internet o la conexión es demasiado débil para completar la descarga, ¿para qué activar el dispositivo y programar la actualización?</p>
+
+<p>Puedes utilizar {@link android.net.ConnectivityManager} para comprobar si estás conectado a Internet y, en ese caso, el tipo de conexión que estás utilizando.</p>
+
+
+<h2 id="DetermineConnection">Cómo determinar si tienes conexión a Internet</h2> 
+ 
+<p>No es necesario programar una actualización basada en un recurso de Internet si no estás conectado. En el fragmento que aparece a continuación, se muestra cómo utilizar {@link android.net.ConnectivityManager} para consultar la red activa y determinar si hay conexión a Internet.</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">Cómo determinar el tipo de conexión a Internet</h2> 
+
+<p>También puedes determinar el tipo de conexión a Internet que hay disponible.</p>
+
+<p>El dispositivo se puede conectar a Internet a través de conexiones Ethernet, Wi-Fi, WiMAX y de datos móviles. Al consultar el tipo de red activa, como se muestra a continuación, puedes modificar la frecuencia de actualización en función del ancho de banda disponible.</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>El coste de las conexiones de datos móviles suele ser superior al de las conexiones Wi-Fi, por lo que en la mayoría de los casos, la frecuencia de actualización de tu aplicación debería ser menor si utilizas conexiones móviles. Del mismo modo, las descargas grandes deberían cancelarse hasta que estés conectado a una red Wi-Fi.</p>
+
+<p>Cuando hayas inhabilitado las actualizaciones, es importante que detectes si se hay cambios en la conectividad para poder reanudarlas cuando se haya establecido una conexión a Internet.</p>
+
+
+<h2 id="MonitorChanges">Cómo supervisar los cambios en la conectividad</h2> 
+
+<p>{@link android.net.ConnectivityManager} emite la acción {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) cuando se han modificado los detalles de la conectividad. Puedes registrar un receptor de emisión en el archivo de manifiesto para detectar estos cambios y reanudar (o cancelar) las actualizaciones en segundo plano según corresponda.</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>Los cambios en la conectividad de un dispositivo pueden ser muy frecuentes (esta emisión se activa siempre que cambias de una conexión de datos móviles a una conexión Wi-Fi). Como resultado, te recomendamos que supervises esta emisión únicamente cuando hayas cancelado anteriormente las actualizaciones o las descargas para reanudarlas. Normalmente, basta con comprobar la conexión a Internet antes de iniciar una actualización y, si no hay ninguna, cancelar el resto de actualizaciones hasta que se restablezca la conexión.</p>
+
+<p>Esta técnica requiere que alternes receptores de emisión que hayas declarado en el archivo de manifiesto, que se describe en la próxima sección.</p>
diff --git a/docs/html/intl/es/training/monitoring-device-state/docking-monitoring.jd b/docs/html/intl/es/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..d612281
--- /dev/null
+++ b/docs/html/intl/es/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=Cómo determinar y controlar el tipo de conector y el estado de la conexión
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Cómo controlar el nivel de batería y el estado de carga
+previous.link=battery-monitoring.html
+next.title=Cómo determinar y controlar el estado de la conectividad
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#CurrentDockState">Cómo solicitar el foco de audio</a></li>
+  <li><a href="#DockType">Cómo determinar el tipo de conector actual</a></li>
+  <li><a href="#MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</a></li>
+</ol>
+
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Los dispositivos Android se pueden conectar a distintos tipos de conectores. Por ejemplo, se puede utilizar conectores para coche o domésticos y tanto digitales como analógicos. Normalmente, el estado del conector está vinculado al estado de carga, ya que muchos conectores cargan el dispositivo mientras está conectado.</p>
+
+<p>El modo en el que el estado del conector del teléfono afecta a la frecuencia de actualización depende de tu aplicación. Puedes aumentar la frecuencia de actualización de una aplicación sobre noticias cuando el dispositivo esté conectado a un conector de escritorio o inhabilitar las actualizaciones completamente si está conectado a un conector de coche. Por el contrario, puedes maximizar las actualizaciones si el dispositivo está conectado a un conector de coche y tu servicio en segundo plano se actualiza con el estado del tráfico.</p>
+
+<p>El estado del conector se emite también como un {@link android.content.Intent} persistente, lo que te permite consultar si el dispositivo está conectado o no y, si lo está, determinar el tipo de conector.</p>
+
+
+<h2 id="CurrentDockState">Cómo determinar el estado de conexión actual</h2> 
+ 
+<p>La información sobre el estado del conector se incluye como información adicional en una emisión persistente de la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Por ello, no es necesario registrar un {@link android.content.BroadcastReceiver}. Solo tienes que ejecutar {@link android.content.Context#registerReceiver registerReceiver()} transmitiendo {@code null} como el receptor de emisión, como se muestra en el fragmento de código que aparece a continuación.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Puedes extraer el estado actual de la conexión de la información adicional de {@code EXTRA_DOCK_STATE}:<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">Cómo determinar el tipo de conector actual</h2> 
+
+<p>Si un dispositivo está insertado en un conector, se puede conectar a cualquiera de estos cuatro tipos de conectores: 
+<ul><li>coche,</li>
+<li>escritorio,</li>
+<li>escritorio de gama baja (analógico),</li>
+<li>escritorio de gama alta (digital).</li></ul></p>
+
+<p>Ten en cuenta que las últimas dos opciones se introdujeron en Android únicamente en el nivel 11 del API. Por ello, te recomendamos que compruebes las tres opciones solo cuando te interese más el tipo de conector que si se trata de un conector digital o analógico:</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">Cómo supervisar los cambios en el tipo de conector o en el estado del mismo</h2> 
+
+<p>Cuando el dispositivo está conectado a un conector o desconectado del mismo, se emite la acción {@link android.content.Intent#ACTION_DOCK_EVENT}. Para controlar los cambios que se produzcan en el estado del conector del dispositivo, solo tienes que registrar un receptor de emisión en el archivo de manifiesto de la aplicación, como se muestra en el fragmento que aparece a continuación:</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>Puedes extraer el estado y el tipo de conector en la implementación del receptor con las mismas técnicas que se han descrito en el paso anterior.</p>
diff --git a/docs/html/intl/es/training/monitoring-device-state/index.jd b/docs/html/intl/es/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..bf6b1c1
--- /dev/null
+++ b/docs/html/intl/es/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=Cómo optimizar la duración de la batería
+
+trainingnavtop=true
+startpage=true
+next.title=Cómo controlar el nivel de batería y el estado de carga
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Dependencias y requisitos previos</h2> 
+<ul>
+  <li>Android 2.0 (nivel 5 del API) o superior</li>
+  <li>Experiencia con <a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a></li>
+</ul>
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">Servicios</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Uno de los objetivos de tu aplicación debe ser limitar su impacto en la duración de la batería del dispositivo en el que esté instalada. Después de leer estas secciones, podrás desarrollar aplicaciones que optimizarán el uso de la batería en función del estado del dispositivo en el que estén instaladas.</p>
+
+<p>Al tomar medidas como inhabilitar las actualizaciones de servicios en segundo plano o disminuir la frecuencia de dichas actualizaciones cuando el nivel de batería sea bajo, puedes garantizar que se minimice el impacto de tu aplicación en la duración de la batería sin afectar a la experiencia del usuario.</p>
+
+<h2>Secciones</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">Cómo controlar el nivel de batería y el estado de carga</a></b></dt>
+  <dd>Obtén más información sobre cómo determinar y controlar el nivel de batería actual y los cambios en el estado de carga para modificar la frecuencia de actualizaciones en segundo plano de tu aplicación.</dd>
+
+  <dt><b><a href="docking-monitoring.html">Cómo determinar y controlar el tipo de conector y el estado de la conexión</a></b></dt>
+  <dd>La frecuencia de actualización óptima puede variar en función de cómo se utilice el dispositivo en el que está instalada la aplicación. Obtén más información sobre cómo determinar y controlar cuándo el dispositivo está conectado a algún sistema de acoplamiento u otra conexión.</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">Cómo determinar y controlar el estado de la conectividad</a></b></dt>
+  <dd>Si no tienes conexión a Internet, no puedes actualizar tu aplicación a partir de una fuente online. Obtén más información sobre cómo comprobar el estado de la conectividad para modificar la frecuencia de actualización en segundo plano de tu aplicación. También puedes obtener más información sobre cómo comprobar la conectividad móvil o Wi-Fi antes de iniciar operaciones que requieran un nivel elevado de ancho de banda.</dd>
+
+  <dt><b><a href="manifest-receivers.html">Cómo manipular los receptores de emisión bajo demanda</a></b></dt>
+  <dd>Los receptores de emisión que declaras en el archivo de manifiesto se pueden alternar durante la ejecución para inhabilitar los que no son necesarios debido al estado actual del dispositivo. Obtén más información sobre cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento y cómo posponer acciones hasta que el dispositivo se encuentre en un estado concreto.</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html/intl/es/training/monitoring-device-state/manifest-receivers.jd b/docs/html/intl/es/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..a90468e
--- /dev/null
+++ b/docs/html/intl/es/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=Cómo manipular los receptores de emisión bajo demanda
+parent.title=Cómo optimizar la duración de la batería
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Cómo determinar y controlar el estado de la conectividad
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento</a></li>
+</ol>
+
+
+<h2>También puedes consultar:</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intentos y filtros de intentos</a>
+</ul>
+
+</div> 
+</div>
+
+<p>La forma más sencilla de controlar los cambios en el estado del dispositivo es crear un {@link android.content.BroadcastReceiver} para cada estado que vayas a controlar y registrar cada uno de ellos en el archivo de manifiesto de tu aplicación. A continuación, en cada uno de esos receptores solo tienes que volver a programar las alarmas recurrentes en función del estado actual del dispositivo.</p>
+
+<p>Un efecto secundario de este método es que tu aplicación activará el dispositivo siempre que uno de los receptores se active (probablemente, con más frecuencia de la necesaria).</p>
+
+<p>Te recomendamos que inhabilites o habilites los receptores de emisión en el momento de la ejecución. De este modo, puedes utilizar los receptores que hayas declarado en el archivo de manifiesto como alarmas pasivas que se activan mediante los eventos del sistema solo cuando es necesario.</p>
+ 
+
+<h2 id="ToggleReceivers">Cómo alternar y superponer receptores de cambio de estado para mejorar el rendimiento </h2> 
+ 
+<p>Se puede utilizar el {@link android.content.pm.PackageManager} para alternar el estado habilitado en cualquier componente definido en el archivo de manifiesto, incluidos los receptores de emisión que quieras habilitar o inhabilitar, como se muestra en el fragmento que aparece a continuación:</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>Al utilizar esta técnica, si determinas que la conectividad se ha perdido, puedes inhabilitar todos los receptores excepto el receptor de cambio de conectividad. Por el contrario, cuando estés conectado, puedes dejar de detectar cambios de conectividad y solo comprobar si tienes conexión antes de realizar una actualización y de volver a programar una alarma de actualización recurrente.</p>
+
+<p>Puedes utilizar la misma técnica para posponer una descarga que requiera un nivel de ancho de banda superior para completarse. Solo tienes que habilitar un receptor de emisión que detecte los cambios de conectividad y que inicie la descarga solo cuando estés conectado a una red Wi-Fi.</p>
diff --git a/docs/html/intl/es/training/multiscreen/adaptui.jd b/docs/html/intl/es/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..61f0735
--- /dev/null
+++ b/docs/html/intl/es/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=Cómo implementar interfaces de usuario adaptables
+parent.title=Cómo diseñar aplicaciones para varias pantallas
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Cómo admitir varias densidades de pantalla
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>En esta sección puedes aprender:</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">Cómo determinar el diseño actual</a></li>
+  <li><a href="#TaskReactToLayout">Cómo reaccionar en función del diseño actual</a></li>
+  <li><a href="#TaskReuseFrag">Cómo volver a utilizar fragmentos en otras actividades</a></li>
+  <li><a href="#TaskHandleConfigChanges">Cómo gestionar los cambios en la configuración de la pantalla</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a></li>
+</ul>
+ 
+<h2>¡Pruébalo!</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>En función del diseño actual de tu aplicación, la interfaz puede variar. Por ejemplo, si tu aplicación está en modo de panel dual, haz clic en un elemento del panel izquierdo para que aparezca en el panel de la derecha. Asimismo, si está en modo de panel único, el contenido debería aparecer por sí mismo (en otra actividad).</p>
+
+
+<h2 id="TaskDetermineCurLayout">Cómo determinar el diseño actual</h2>
+
+<p>Dado que la implementación de cada diseño variará en cierta medida, probablemente una de las primeras cosas que tendrás que hacer será determinar el diseño que el usuario puede ver en ese momento. Por ejemplo, puedes determinar si el usuario utiliza el modo de "panel único" o de "panel dual". Para ello, puedes consultar si una vista determinada existe y es visible:</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>Ten en cuenta que este código consulta la disponibilidad del panel del "artículo", lo que es mucho más flexible que incluir una consulta para un diseño determinado.</p>
+
+<p>Otro ejemplo de cómo puedes adaptar la existencia de diferentes componentes es comprobar su disponibilidad antes de realizar una operación relacionada con los mismos. Por ejemplo, en la aplicación de ejemplo News Reader, hay un botón que abre un menú, pero ese botón solo aparece en las versiones anteriores a Android 3.0 (porque  <PH>{@link android.app.ActionBar}</PH> en el nivel 11 del API y en niveles superiores). Por tanto, para añadir el detector de eventos para este botón, puedes hacer lo siguiente:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">Cómo reaccionar en función del diseño actual</h2>
+
+<p>El resultado de algunas acciones puede variar en función del diseño actual. Por ejemplo, en el ejemplo de News Reader, al hacer clic en un encabezado de la lista se abrirá el artículo del panel situado a la derecha si la interfaz de usuario está en modo de panel dual, pero se iniciará una actividad independiente si esta está en modo de panel único:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>De igual modo, si la aplicación está en modo de panel dual, debe configurar la barra de acción con pestañas para la navegación, mientras que si la aplicación está en modo de panel único, debe configurar la navegación con un widget giratorio. Por tanto, el código debe comprobar también cuál es el caso adecuado:</p>
+
+<pre>
+final String CATEGORIES[] = { "Top Stories", "Politics", "Economy", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">Cómo volver a utilizar fragmentos en otras actividades</h2>
+
+<p>Un patrón recurrente a la hora de diseñar para distintas pantallas es utilizar una parte de la interfaz que se implementa como un panel en algunas configuraciones de pantalla y como actividad independiente en otras. Por ejemplo, en el ejemplo de News Reader, el texto del artículo de noticias se presenta en el panel de la derecha en las pantallas grandes, pero es una actividad independiente en las pantallas más pequeñas.</p>
+
+<p>En otros casos similares, puedes evitar la duplicación de código reutilizando la misma <PH>{@link android.app.Fragment}</PH> en distintas actividades. Por ejemplo, <code>ArticleFragment</code> se utiliza en el diseño de panel dual:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>A continuación, se vuelve a utilizar (sin diseño) en el diseño de actividad para pantallas más pequeñas (<code>ArticleActivity</code>):</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>Evidentemente, esto tiene el mismo efecto que declarar el fragmento en un diseño XML. Sin embargo, en este caso, un diseño XML sería un trabajo innecesario porque el fragmento del artículo es el único componente de esta actividad.</p>
+
+<p>Un punto muy importante que debes tener en cuenta al diseñar tus fragmentos es no crear un acoplamiento fuerte para una actividad determinada. Para ello, normalmente puedes definir una interfaz que resuma todas las formas en las que tiene que interactuar el fragmento con su actividad principal y, a continuación, la actividad principal implementa esa interfaz:</p>
+
+<p>Por ejemplo, ese es precisamente el objetivo del <code>HeadlinesFragment</code> de la aplicación News Reader:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>A continuación, cuando el usuario selecciona un encabezado, el fragmento notifica el detector especificado por la actividad principal (en lugar de notificar una actividad predefinida específica):</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>Si quieres obtener más información sobre esta técnica, puedes consultar la guía sobre <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">Cómo admitir tablets y dispositivos móviles</a>.</p>
+
+
+<h2 id="TaskHandleConfigChanges">Cómo gestionar los cambios en la configuración de la pantalla</h2>
+
+<p>Si utilizas actividades independientes para implementar partes individuales de tu interfaz, debes tener en cuenta que es posible que tengas que reaccionar ante determinados cambios en la configuración (como un cambio de rotación) para mantener la homogeneidad de tu interfaz.</p>
+
+<p>Por ejemplo, en un tablet de 7" que utilice Android 3.0 o una versión superior, el ejemplo de News Reader utiliza una actividad independiente para mostrar el artículo de noticias en el modo vertical, pero utiliza el diseño de panel dual en el modo horizontal.</p>
+
+<p>Esto significa que cuando el usuario utiliza el modo vertical y está consultando un artículo, tienes que detectar que la orientación ha cambiado al modo horizontal y reaccionar de forma adecuada finalizando la actividad. A continuación, debes volver a la actividad principal para que el contenido pueda mostrarse en el diseño de panel dual:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html/intl/es/training/multiscreen/index.jd b/docs/html/intl/es/training/multiscreen/index.jd
new file mode 100644
index 0000000..0a1461b
--- /dev/null
+++ b/docs/html/intl/es/training/multiscreen/index.jd
@@ -0,0 +1,63 @@
+page.title=Cómo diseñar aplicaciones para varias pantallas
+trainingnavtop=true
+startpage=true
+next.title=Cómo admitir varios tamaños de pantalla
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>Dependencias y requisitos previos</h2> 
+
+<ul>
+  <li>Android 1.6 o superior (Android 2.1 o superior para la aplicación de ejemplo)</li>
+  <li>Conocimiento básico de <a
+href="http://developer.android.com/guide/components/activities.html">Actividades</a> y <a href="http://developer.android.com/guide/components/fragments.html">Fragmentos</a></li>
+  <li>Experiencia en el desarrollo de una <a
+href="http://developer.android.com/guide/topics/ui/index.html">Interfaz de usuario</a> de Android</li>
+  <li>Algunas funciones requieren el uso de la <a
+href="{@docRoot}tools/extras/support-library.html">biblioteca de compatibilidad</a></li>
+</ul>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
+</ul>
+ 
+<h2>¡Pruébalo!</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android se utiliza en cientos de dispositivos con diferentes tamaños de pantalla, desde pequeños teléfonos hasta enormes televisores. Por ello, es importante que diseñes tu aplicación para que sea compatible con todos los tamaños de pantalla y esté disponible para el mayor número de usuarios posible.</p>
+
+<p>Sin embargo, no es suficiente con que tu aplicación sea compatible con diferentes dispositivos. Cada tamaño de pantalla ofrece diferentes posibilidades y retos para la interacción del usuario. Por ello, para satisfacer completamente a tus usuarios e impresionarlos, tu aplicación debe ir más allá de simplemente <em>admitir</em> varias pantallas: debe <em>optimizar</em> la experiencia de usuario para cada configuración de pantalla.</p>
+
+<p>En esta sección se explica cómo implementar una interfaz de usuario que esté optimizada para diferentes configuraciones de pantalla.</p>
+
+<p>El código que aparece en cada sección se ha extraído de una aplicación de ejemplo para explicar las prácticas recomendadas a la hora de optimizar tu aplicación para varias pantallas. Puedes descargar el ejemplo (situado a la derecha) y utilizarlo como fuente de código reutilizable para tu propia aplicación.</p>
+
+<p class="note"><strong>Nota:</strong> en esta sección y en el ejemplo correspondiente, se utiliza la <a
+href="{@docRoot}tools/extras/support-library.html">biblioteca de compatibilidad</a> para poder usar las API de <PH>{@link android.app.Fragment}</PH> en versiones anteriores a Android 3.0. Debes descargar y la biblioteca y añadirla a tu aplicación para poder utilizar todas las API que se indican en esta sección.</p>
+ 
+
+<h2>Secciones</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">Cómo admitir varios tamaños de pantalla</a></b></dt> 
+    <dd>En esta sección se explica cómo crear diseños que se adapten a diferentes tamaños de pantalla (mediante dimensiones flexibles para vistas, <PH>{@link android.widget.RelativeLayout}</PH>, calificadores de orientación y tamaño de pantalla, filtros de alias y mapas de bits de la clase NinePatch).</dd> 
+ 
+  <dt><b><a href="screendensities.html">Cómo admitir varias densidades de pantalla</a></b></dt> 
+    <dd>En esta sección se explica cómo admitir pantallas con diferentes densidades de píxeles (mediante píxeles independientes de la densidad y mapas de bits adecuados a cada densidad).</dd> 
+ 
+  <dt><b><a href="adaptui.html">Cómo implementar interfaces de usuario adaptables</a></b></dt> 
+    <dd>En esta sección se explica cómo implementar tu interfaz de usuario para que se adapte a varias combinaciones de densidad o de tamaño de pantalla (detección de tiempo de ejecución del diseño activo, cómo reaccionar en función del diseño actual y cómo administrar los cambios en la configuración de la pantalla).</dd> 
+</dl> 
diff --git a/docs/html/intl/es/training/multiscreen/screendensities.jd b/docs/html/intl/es/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..0edb89f
--- /dev/null
+++ b/docs/html/intl/es/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=Cómo admitir varias densidades de pantalla
+parent.title=Cómo diseñar aplicaciones para varias pantallas
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Cómo admitir varios tamaños de pantalla
+previous.link=screensizes.html
+next.title=Cómo implementar interfaces de usuario adaptables
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#TaskUseDP">Cómo utilizar píxeles independientes de la densidad</a></li>
+  <li><a href="#TaskProvideAltBmp">Cómo proporcionar mapas de bits alternativos</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Directrices para diseñar iconos</a></li>
+</ul>
+
+<h2>¡Pruébalo!</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>En esta sección se explica cómo proporcionar diferentes recursos y utilizar unidades de medida de resolución independiente para admitir diferentes densidades de pantalla.</p>
+
+<h2 id="TaskUseDP">Cómo utilizar píxeles independientes de la densidad</h2>
+
+<p>Un error común que debes evitar al crear tus diseños es utilizar píxeles absolutos para definir distancias o tamaños. Definir dimensiones de diseño mediante píxeles es problemático porque cada pantalla tiene densidades de píxeles diferentes, por lo que es posible que el mismo número de píxeles corresponda a varios tamaños físicos en distintos dispositivos. Por tanto, al especificar dimensiones, debes utilizar siempre unidades <code>dp</code> o <code>sp</code>. <code>dp</code> es un píxel independiente de la densidad que corresponde al tamaño físico de un píxel a 160 dpi. <code>sp</code> es la misma unidad de base, pero aumentada en función del tamaño de letra preferido por el usuario (se trata de un píxel independiente de la escala). Por tanto, debes utilizar esta unidad de medida para definir el tamaño de letra (pero no para tamaños de diseños).</p>
+
+<p>Por ejemplo, al especificar un espacio entre dos vistas, debes utilizar <code>dp</code> en lugar de <code>px</code>:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>Al especificar el tamaño de letra, debes usar siempre <code>sp</code>:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">Cómo proporcionar mapas de bits alternativos</h2>
+
+<p>Dado que Android se ejecuta en dispositivos con diferentes densidades de pantalla, siempre debes proporcionar tus recursos de mapas de bits adaptados a los conjuntos de densidades generalizados: baja, media, alta y muy alta. De este modo, podrás conseguir un rendimiento y una calidad gráfica óptimos en todas las densidades de pantalla.</p>
+
+<p>Para generar estas imágenes, debes empezar con tu recurso genérico en formato vectorial y generar las imágenes para cada densidad con la siguiente escala de tamaños:</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2,0
+  <li><code>hdpi</code>: 1,5
+  <li><code>mdpi</code>: 1.0 (base)
+  <li><code>ldpi</code>: 0,75
+</ul></p>
+
+<p>Esto significa que si generas una imagen de 200 x 200 para dispositivos <code>xhdpi</code>, debes generar el mismo recurso en 150 x 150 para <code>hdpi</code>, en 100 x 100 para <code>mdpi</code> y, por último, una imagen de 75 x 75 para dispositivos <code>ldpi</code>.</p>
+
+<p>A continuación, sitúa los archivos de imagen generados en el subdirectorio adecuado en <code>res/</code> y el sistema seleccionará el archivo correspondiente automáticamente en función de la densidad de la pantalla del dispositivo en el que se esté ejecutando la aplicación:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>Por tanto, cada vez que hagas referencia a <code>&#64;drawable/awesomeimage</code>, el sistema seleccionará el mapa de bits adecuado en función de los puntos por pulgada de la pantalla.</p>
+
+<p>Para consultar más sugerencias y directrices sobre cómo crear recursos de iconos para tu aplicación, consulta la sección <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Directrices para diseñar iconos</a>.</p>
+
diff --git a/docs/html/intl/es/training/multiscreen/screensizes.jd b/docs/html/intl/es/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..9a971d1
--- /dev/null
+++ b/docs/html/intl/es/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=Cómo admitir varios tamaños de pantalla
+parent.title=Cómo diseñar aplicaciones para varias pantallas
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Cómo admitir varias densidades de pantalla
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>En esta sección puedes aprender:</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</a></li>
+  <li><a href="#TaskUseRelativeLayout">Cómo utilizar RelativeLayout</a></li>
+  <li><a href="#TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</a></li>
+  <li><a href="#TaskUseSWQuali">Cómo utilizar el calificador de ancho más pequeño</a></li>
+  <li><a href="#TaskUseAliasFilters">Cómo utilizar alias de diseño</a></li>
+  <li><a href="#TaskUseOriQuali">Cómo utilizar calificadores de orientación</a></li>
+  <li><a href="#TaskUse9Patch">Cómo utilizar mapas de bits de la clase NinePatch</a></li>
+</ol>
+
+<h2>También puedes consultar:</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Cómo admitir varias pantallas</a></li>
+</ul>
+
+<h2>¡Pruébalo!</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Descargar la aplicación de ejemplo</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>En esta sección se explica cómo admitir varios tamaños de pantalla. Para ello, sigue estos pasos:</p>
+<ul> 
+  <li>Asegúrate de que el diseño se haya ajustado correctamente al tamaño de la pantalla.</li> 
+  <li>Configura la pantalla con el diseño de interfaz adecuado.</li> 
+  <li>Asegúrate de aplicar el diseño adecuado a la pantalla correspondiente.</li>
+  <li>Utiliza el mapa de bits con la escala adecuada.</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">Cómo utilizar los valores "wrap_content" y "match_parent"</h2> 
+
+<p>Para garantizar que el diseño es flexible y que se adapta a varios tamaños de pantalla, debes utilizar los valores <code>"wrap_content"</code> y <code>"match_parent"</code> para la altura y el ancho de algunos componentes de la vista. Si utilizas <code>"wrap_content"</code>, el ancho o la altura de la vista se establece en el tamaño mínimo necesario para adaptar el contenido a esta vista, mientras que <code>"match_parent"</code> (también conocido como <code>"fill_parent"</code> antes del nivel 8 del API) provoca que el componente se amplíe hasta coincidir con el tamaño de la vista principal.</p>
+
+<p>Al utilizar los valores de tamaño <code>"wrap_content"</code> y <code>"match_parent"</code> en lugar de los tamaños predefinidos, las vistas pueden utilizar únicamente el espacio requerido para esa vista o ampliarse hasta rellenar el espacio disponible respectivamente. Por ejemplo:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>Observa cómo se utilizan en el ejemplo los valores <code>"wrap_content"</code> y <code>"match_parent"</code> para los tamaños de los componentes en lugar de dimensiones específicas. Esto permite que el diseño se adapte correctamente a diferentes tamaños y orientaciones de la pantalla.</p>
+
+<p>Por ejemplo, esta es la apariencia del diseño en modo horizontal y vertical. Ten en cuenta que los tamaños de los componentes se adaptan automáticamente a la altura y al ancho:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>Figura 1.</strong> La aplicación de ejemplo News Reader en modo vertical (izquierda) y horizontal (derecha)</p>
+
+
+<h2 id="TaskUseRelativeLayout">Cómo utilizar RelativeLayout</h2> 
+
+<p>Puedes crear diseños de un cierto nivel de complejidad con instancias anidadas de <PH>{@link android.widget.LinearLayout}</PH> y combinaciones de los valores de tamaño <code>"wrap_content"</code> y <code>"match_parent"</code>. Sin embargo, <PH>{@link android.widget.LinearLayout}</PH> no te permite controlar con precisión las relaciones espaciales de las vistas secundarias; las vistas de <PH>{@link android.widget.LinearLayout}</PH> simplemente se alinean en paralelo. Si quieres orientar las vistas secundarias de una forma que no sea una línea recta, a menudo la mejor solución es utilizar <PH>{@link android.widget.RelativeLayout}</PH>que te permite especificar el diseño según las relaciones espaciales entre los componentes. Por ejemplo, puedes alinear una vista secundaria en el lateral izquierdo y otra vista en el lateral derecho de la pantalla.</p>
+
+<p>Por ejemplo:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>La figura 2 indica cómo se muestra este diseño en una pantalla QVGA.</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>Figura 2.</strong> Captura de pantalla de una pantalla QVGA (pantalla pequeña)</p>
+
+<p>La figura 3 indica cómo se muestra este diseño en una pantalla más grande.</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>Figura 3.</strong> Captura de pantalla de una pantalla WSVGA (pantalla grande)</p>
+
+<p>Ten en cuenta que aunque el tamaño de los componentes es diferente, las relaciones espaciales se mantienen según se ha especificado con <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
+
+ 
+<h2 id="TaskUseSizeQuali">Cómo utilizar calificadores de tamaño</h2> 
+
+<p>Hay mucha diferencia entre un diseño flexible y un diseño relativo como el que se ha utilizado en las secciones anteriores. Aunque ambos diseños se adaptan a diferentes pantalla estirando el espacio dentro de los componentes y alrededor de los mismos, puede que no ofrezcan la mejor experiencia de usuario para cada tamaño de pantalla. Por tanto, tu aplicación no solo debe implementar los diseños flexibles, sino que también debe ofrecer varios diseños alternativos para diferentes configuraciones de pantalla. Para ello, se utilizan <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">calificadores de configuración</a>, que permiten que el tiempo de ejecución seleccione el recurso adecuado en función de la configuración actual del dispositivo (por ejemplo, un diseño diferente para diferentes tamaños de pantalla).</p>
+
+<p>Por ejemplo, muchas aplicaciones implementan el patrón de "panel dual" para pantallas grandes (la aplicación mostraría una lista de elementos en un panel y el contenido en otro panel). Aunque los tablets y las televisiones son lo suficientemente grandes como para que los dos paneles aparezcan simultáneamente en la pantalla, las pantallas de los teléfonos tienen que mostrarlos por separado. Para implementar estos diseños, puedes utilizar los siguientes archivos:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, diseño de panel único (predeterminado):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>, diseño de panel dual:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Observa el calificador <code>large</code> en el nombre de directorio del segundo diseño. Este diseño se seleccionará en dispositivos con pantallas clasificadas como grandes (por ejemplo, tablets de 7" y superiores). El otro diseño (sin calificadores) se seleccionará en el caso de dispositivos más pequeños.</p>
+
+
+<h2 id="TaskUseSWQuali">Cómo utilizar el calificador de ancho mínimo</h2>
+
+<p>Una de las dificultades a las que se enfrentaron los desarrolladores con los dispositivos Android anteriores a la versión 3.2 fue el contenedor de tamaño de pantalla "grande". Algunos ejemplos de este tipo de dispositivo son el tablet Dell Streak, el tablet Galaxy Tab original y los tablets de 7" en general. Sin embargo, es posible que muchas aplicaciones quieran mostrar varios diseños para diferentes dispositivos de esta categoría (por ejemplo, para dispositivos de 5" y de 7"), aunque todos estos dispositivos se consideren de pantalla grande. Por esta razón, Android introdujo el calificador de "ancho mínimo" (entre otros) en Android 3.2.</p>
+
+<p>Este calificador te permite mostrar contenido en pantallas que tengan un ancho mínimo determinado en píxeles independientes de la densidad. Por ejemplo, el tablet típico de 7" tiene un ancho mínimo de 600 dp, por lo que si quieres que la interfaz de usuario sea de panel dual en esta pantalla (y una única lista en pantallas más pequeñas), puedes utilizar los mismos dos diseños de la sección anterior para los diseños de panel único y de panel dual, solo que en lugar de utilizar el calificador de tamaño <code>large</code>, debes utilizar <code>sw600dp</code> para indicar que el diseño de panel dual se utiliza con las pantallas cuyo ancho mínimo sea de 600 dp:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, diseño de panel único (predeterminado):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>, diseño de panel dual:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Esto significa que los dispositivos cuyo ancho mínimo sea igual o superior a 600 dp utilizarán el diseño <code>layout-sw600dp/main.xml</code> (panel dual), mientras que las pantallas más pequeñas utilizarán el diseño <code>layout/main.xml</code> (panel único).</p>
+
+<p>No obstante, esto no funcionará en los dispositivos anteriores a Android 3.2 porque no reconocen <code>sw600dp</code> como calificador de tamaño, por lo que también tendrás que seguir utilizando el calificador <code>large</code>. Por tanto, debes tener un archivo con el nombre <code>res/layout-large/main.xml</code> idéntico a <code>res/layout-sw600dp/main.xml</code>. En la siguiente sección, obtendrás información sobre una técnica que te permite evitar que se dupliquen los archivos de diseños.</p>
+
+
+<h2 id="TaskUseAliasFilters">Cómo utilizar alias de diseño</h2> 
+
+<p>El calificador de ancho mínimo solo está disponible en Android 3.2 o superior. Por tanto, tendrás que seguir utilizando los contenedores de tamaño abstractos (pequeño, normal, grande y extragrande) para que sean compatibles con versiones anteriores. Por ejemplo, si quieres que tu interfaz de usuario sea de panel único en teléfonos pero multipanel en tablets de 7", televisiones y otros dispositivos grandes, tendrás que utilizar los siguientes archivos:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> diseño de panel único,</li>
+<li><code>res/layout-large:</code> diseño multipanel,</li>
+<li><code>res/layout-sw600dp:</code> diseño multipanel.</li>
+</ul></p>
+
+<p>Los dos últimos archivos son idénticos porque uno de ellos se utilizará con dispositivos Android 3.2 y el otro con tablets y televisiones que utilicen versiones anteriores de Android.</p>
+
+<p>Para evitar la duplicación del mismo archivo para tablets y televisiones (así como todos los problemas que esto conlleva), puedes utilizar archivos alias. Por ejemplo, puedes establecer los siguientes diseños:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>: diseño de panel único,</li>
+<li><code>res/layout/main_twopanes.xml</code>: diseño de panel dual.</li>
+</ul>
+
+<p>Añade estos dos archivos:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>Estos dos últimos archivos tienen el mismo contenido, pero en realidad no definen el diseño. Solo configuran <PH>{@code main}</PH> para que sea un alias de <PH>{@code main_twopanes}</PH>. Como los archivos tienen selectores <code>large</code> y <code>sw600dp</code>, se aplican a tablets y a televisiones independientemente de la versión de Android (las televisiones y los tablets anteriores a la versión 3.2 utilizarán
+<PH>{@code large}</PH>y las televisiones y los tablets posteriores a la versión 3.2 utilizarán <code>sw600dp</code>).</p>
+
+
+<h2 id="TaskUseOriQuali">Cómo utilizar calificadores de orientación</h2> 
+
+<p>Aunque algunos diseños se pueden utilizar tanto en modo horizontal como vertical, la mayoría de ellos pueden beneficiarse de los ajustes. A continuación, se indica cómo se comporta el diseño según cada tamaño y orientación de la pantalla en la aplicación de ejemplo News Reader:</p>
+
+<p><ul>
+<li><b>pantalla pequeña, vertical:</b> panel único con logotipo,</li>
+<li><b>pantalla pequeña, horizontal:</b> panel único con logotipo,</li>
+<li><b>tablet de 7", vertical:</b> panel único con barra de acciones,</li>
+<li><b>tablet de 7", horizontal:</b> panel dual ancho con barra de acciones,</li>
+<li><b>tablet de 10", vertical:</b> panel dual estrecho con barra de acciones,</li>
+<li><b>tablet de 10", horizontal:</b> panel dual ancho con barra de acciones,</li>
+<li><b>televisión, horizontal:</b> panel dual ancho con barra de acciones.</li>
+</ul></p>
+
+<p>Cada uno de estos diseños se establecen en un archivo XML en el directorio <code>res/layout/</code>. Para definir posteriormente las diferentes configuraciones de pantalla, la aplicación utiliza alias de diseño para asignarlos a cada configuración:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>Una vez que se hayan definido todos los diseños posibles, solo se debe asignar el diseño adecuado a cada configuración a través de calificadores de configuración. Ahora ya puedes utilizar la técnica de los alias de diseño:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">Cómo utilizar mapas de bits de la clase NinePatch</h2>
+
+<p>Admitir diferentes tamaños de pantalla normalmente implica que las fuentes de imagen también deben poder adaptarse a varios tamaños. Por ejemplo, un fondo de botón debe adaptarse a cualquier forma de botón a la que se aplique.</p>
+
+<p>Si utilizas imágenes sencillas en componentes que pueden cambiar de tamaño, observarás rápidamente que los resultados no es que sean precisamente impresionantes, ya que las imágenes se estirarán o estrecharán. La solución es utilizar mapas de bits de la clase NinePatch, que son archivos PNG con un formato especial que indican las áreas que se pueden y no se pueden estirar.</p>
+
+<p>Por tanto, al diseñar mapas de bits que se vayan a utilizar en componentes con tamaño variable, utiliza siempre mapas de bits de la clase NinePatch. Para convertir un mapa de bits en uno de la clase NinePatch, puedes empezar con una imagen normal (consulta la figura 4, que se ha ampliado cuatro veces para obtener una mayor claridad).</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>Figura 4.</strong> <code>button.png</code></p>
+
+<p>A continuación, puedes pasar a la utilidad <ode
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a> del SDK (que se localiza en el directorio <code>tools/</code>) en la que puedes marcar las áreas que se deben estirar dibujando píxeles a lo largo de los bordes superior e izquierdo. También puedes marcar el área que debe incluir el contenido dibujando píxeles a lo largo de los bordes inferior y derecho, como se muestra en la figura 5.</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>Figura 5.</strong> <code>button.9.png</code></p>
+
+<p>Observa los píxeles de color negro situados junto a los bordes. Los que aparecen en los bordes superior e izquierdo indican los lugares en los que se puede estirar la imagen, mientras que los que aparecen en los bordes inferior y derecho indican dónde se debe situar el contenido.</p>
+
+<p>Además, observa la extensión <code>.9.png</code>. Debes utilizar esta extensión, ya que, de este modo, el marco detecta que se trata de una imagen de la clase NinePatch, en lugar de una imagen PNG normal.</p>
+
+<p>Cuando aplicas este fondo a un componente (definiendo <code>android:background="&#64;drawable/button"</code>), el marco estira la imagen de forma adecuada para adaptarla al botón, como se muestra en varios tamaños de la figura 6.</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>Figura 6.</strong> Botón que utiliza la clase NinePatch <code>button.9.png</code> en varios tamaños</p>
+
diff --git a/docs/html/intl/ja/guide/developing/eclipse-adt.jd b/docs/html/intl/ja/guide/developing/eclipse-adt.jd
index 397c006..2cd6949 100644
--- a/docs/html/intl/ja/guide/developing/eclipse-adt.jd
+++ b/docs/html/intl/ja/guide/developing/eclipse-adt.jd
@@ -29,8 +29,8 @@
   <li>プロジェクトを、ユーザーに配布可能な署名済みの APK 形式でエクスポートすることもできます。</li>
 </ul>
 
-<p>ADT を組み込んだ Eclipse 総合開発環境で Android アプリケーションの開発を始めるには、最初に Eclipse 総合開発環境をダウンロードしてから、ADT プラグインをダウンロードしてインストールする必要があります。そのためには、<a href="{@docRoot}sdk/eclipse-adt.html#installing">Eclipse 用 ADT プラグインのインストール</a>に記載されている手順どおりに操作します。</p>
-<p>バージョン 0.9 より前の ADT を使用してアプリケーションを既に開発中の場合は、必ず最新バージョンにアップグレードしてから続行してください。<a href="{@docRoot}sdk/eclipse-adt.html#updating">Eclipse ADT プラグインをアップデート</a>するためのガイドをご覧ください。</p>
+<p>ADT を組み込んだ Eclipse 総合開発環境で Android アプリケーションの開発を始めるには、最初に Eclipse 総合開発環境をダウンロードしてから、ADT プラグインをダウンロードしてインストールする必要があります。そのためには、<a href="{@docRoot}tools/sdk/eclipse-adt.html#installing">Eclipse 用 ADT プラグインのインストール</a>に記載されている手順どおりに操作します。</p>
+<p>バージョン 0.9 より前の ADT を使用してアプリケーションを既に開発中の場合は、必ず最新バージョンにアップグレードしてから続行してください。<a href="{@docRoot}tools/sdk/eclipse-adt.html#updating">Eclipse ADT プラグインをアップデート</a>するためのガイドをご覧ください。</p>
 <p class="note"><strong>注:</strong> このガイドでは、ADT プラグインの最新バージョンを使用していることを前提としています。説明の大半は、以前のバージョンにも当てはまりますが、以前のバージョンを使用している場合は、このドキュメントのオンライン版ではなく、SDK パッケージに付属された資料内の同ドキュメントをご覧ください。</p>
 
 
@@ -84,9 +84,9 @@
 
 <h2 id="Running">アプリケーションの実行</h2>
 
-<p>注意してください。<em></em>アプリケーションを Android エミュレータで実行する前に、Android 仮想デバイス（AVD）を作成する<strong>必要があります</strong>。AVD では、エミュレータで使用する Android プラットフォームを指定します。詳しくは <a href="{@docRoot}guide/developing/tools/avd.html">Android 仮想デバイス</a> のドキュメントをご覧ください。ただし、すぐにアプリケーションを実行したい場合は、次の簡単な手順に従って AVD を作成してください。</p>
+<p>注意してください。<em></em>アプリケーションを Android エミュレータで実行する前に、Android 仮想デバイス（AVD）を作成する<strong>必要があります</strong>。AVD では、エミュレータで使用する Android プラットフォームを指定します。詳しくは <a href="{@docRoot}tools/avd.html">Android 仮想デバイス</a> のドキュメントをご覧ください。ただし、すぐにアプリケーションを実行したい場合は、次の簡単な手順に従って AVD を作成してください。</p>
 
-<p>携帯端末の実機でのみアプリケーションを実行する場合は、AVD は必要ありません。この場合のアプリケーションの実行について詳しくは、<a href="{@docRoot}guide/developing/device.html">Developing On a Device</a> をご覧ください。</p>
+<p>携帯端末の実機でのみアプリケーションを実行する場合は、AVD は必要ありません。この場合のアプリケーションの実行について詳しくは、<a href="{@docRoot}tools/device.html">Developing On a Device</a> をご覧ください。</p>
 
 <h3 id="CreatingAnAvd">AVD の作成</h3>
 
@@ -119,7 +119,7 @@
 
 <p>これで AVD が作成できました。次のセクションでは、エミュレータでアプリケーションを起動する際に、AVD がどのように使用されるかについて説明します。</p>
 
-<p>AVD の作成と管理について詳しくは、<a href="{@docRoot}guide/developing/tools/avd.html">Android 仮想デバイス</a> のドキュメントをご覧ください。</p>
+<p>AVD の作成と管理について詳しくは、<a href="{@docRoot}tools/avd.html">Android 仮想デバイス</a> のドキュメントをご覧ください。</p>
 
 
 <h3 id="RunningYourApplication">アプリケーションの実行</h3>
@@ -193,7 +193,7 @@
 
 <p>Android アプリケーションの開発を始めると、Android アプリケーションをシステムがエミュレータや実機にインストールする前に、どの Android アプリケーションにもデジタル署名が必要であることがわかります。署名には、デバッグ キーを使用する方法（エミュレータや開発用端末ですぐにテストする場合）と、非公開キーを使用する方法（アプリケーションを配布する場合）の 2 つがあります。</p>
 <p>ADT プラグインでは、アプリケーションをエミュレータや開発用端末にインストールする前に、.apk ファイルがデバッグ キーを使用して署名されるので、開発を早めることができます。つまり、独自の非公開キーを生成する必要がなく、Eclipse からアプリケーションをすぐに実行できます。Keytool に ADT がアクセスできれば、デベロッパーが特に操作する必要はありません。ただし、アプリケーションを公開する場合は、SDK ツールが生成するデバッグ キーではなく、独自の非公開キーを使用してアプリケーションに署名する<strong>必要があります</strong>。</p>
-<p><a href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。Android でのアプリケーションへの署名と、Android アプリケーション デベロッパーにとっての署名の意味について説明しています。このドキュメントには、ADT のエクスポート ウィザードを使用してアプリケーションをエクスポートし、署名するためのガイドも含まれています。</p>
+<p><a href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。Android でのアプリケーションへの署名と、Android アプリケーション デベロッパーにとっての署名の意味について説明しています。このドキュメントには、ADT のエクスポート ウィザードを使用してアプリケーションをエクスポートし、署名するためのガイドも含まれています。</p>
 
 <h2 id="Tips">Eclipse のヒント </h2>
 
@@ -224,7 +224,7 @@
 
 <h3>DDMS の手動による実行</h3>
 
-<p>ADT プラグインを使用するデバッグをおすすめしますが、手動で DDMS を実行し、ポート 8700 でデバッグするように Eclipse を設定することができます（<strong>注:</strong> 最初に必ず <a href="{@docRoot}guide/developing/tools/ddms.html">DDMS</a> を起動してください）。 </p>
+<p>ADT プラグインを使用するデバッグをおすすめしますが、手動で DDMS を実行し、ポート 8700 でデバッグするように Eclipse を設定することができます（<strong>注:</strong> 最初に必ず <a href="{@docRoot}tools/ddms.html">DDMS</a> を起動してください）。 </p>
 
 <!-- TODO: clean this up and expand it to cover more wizards and features
 <h3>ADT Wizards</h3>
diff --git a/docs/html/intl/ja/guide/developing/other-ide.jd b/docs/html/intl/ja/guide/developing/other-ide.jd
index ba82c18..cbffee3 100644
--- a/docs/html/intl/ja/guide/developing/other-ide.jd
+++ b/docs/html/intl/ja/guide/developing/other-ide.jd
@@ -19,9 +19,9 @@
 
   <h2>関連項目</h2>
   <ol>
-    <li><a href="{@docRoot}guide/developing/tools/othertools.html#android">android ツール</a></li>
-    <li><a href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a></li>
-    <li><a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a></li>
+    <li><a href="{@docRoot}tools/othertools.html#android">android ツール</a></li>
+    <li><a href="{@docRoot}tools/help/emulator.html">Android Emulator</a></li>
+    <li><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a></li>
   </ol>
 </div>
 </div>
@@ -36,11 +36,11 @@
 <p>Eclipse 以外の統合開発環境やエディタで開発する際には、次の Android SDK ツールについて知っておく必要があります:</p>
 
 <dl>
-  <dt><a href="{@docRoot}guide/developing/tools/othertools.html#android">android</a></dt>
+  <dt><a href="{@docRoot}tools/othertools.html#android">android</a></dt>
     <dd>Android プロジェクトの作成/更新、AVD の作成/移動/削除のために使用します。</dd>
-  <dt><a href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a></dt>
+  <dt><a href="{@docRoot}tools/help/emulator.html">Android Emulator</a></dt>
     <dd>Android のエミュレーション プラットフォームで Android アプリケーションを実行するために使用します。</dd>
-  <dt><a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a></dt>
+  <dt><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a></dt>
     <dd>エミュレータまたは接続先の端末とのインターフェースとして使用します（アプリケーションのインストール、端末のシェル、コマンドの実行などに使用）。
     </dd>
 </dl>
@@ -109,7 +109,7 @@
   <li><code>tests/</code> - テスト用に、上記のすべての複製が含まれます。</li>
 </ul>
 
-<p>プロジェクトを作成すると、開発を始める準備ができます。開発のために、プロジェクト フォルダをどこにでも移動できますが、アプリケーションをエミュレータに送信するために(方法については後述します)、SDK の <code>tools/</code> ディレクトリにある <a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a>（adb）を使用する必要があります。そのためにプロジェクト ソリューションと <code>tools/</code> フォルダ間でアクセスする必要があります。</p>
+<p>プロジェクトを作成すると、開発を始める準備ができます。開発のために、プロジェクト フォルダをどこにでも移動できますが、アプリケーションをエミュレータに送信するために(方法については後述します)、SDK の <code>tools/</code> ディレクトリにある <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>（adb）を使用する必要があります。そのためにプロジェクト ソリューションと <code>tools/</code> フォルダ間でアクセスする必要があります。</p>
 
 <p class="warning"><strong>注:</strong> SDK ディレクトリは移動させないでください。移動するとビルド スクリプトが機能しなくなります（ビルド スクリプトをもう一度機能させるには、手動でスクリプトを更新して、SDK の新しいロケーションを反映させる必要があります）。</p>
 
@@ -140,7 +140,7 @@
 
 <p>Android のビルド ツールを使用すると、ビルド時にデバッグキーを使用して .apk ファイルに自動的に署名できるので、スムーズな開発が可能です。つまり、独自の非公開キーを生成しなくても、アプリケーションをコンパイルして、エミュレータにインストールすることができます。ただし、アプリケーションを公開する場合は、SDK ツールが生成したデバッグ キーではなく、独自の非公開キーを使用してアプリケーションに署名する<strong>必要があります</strong>。 </p>
 
-<p><a href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。Android でのアプリケーションへの署名と、Android アプリケーション デベロッパーにとっての署名の意味について説明しています。</p>
+<p><a href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。Android でのアプリケーションへの署名と、Android アプリケーション デベロッパーにとっての署名の意味について説明しています。</p>
 
 
 
@@ -150,7 +150,7 @@
 
 <p>デバッグ モードとリリース モードのどちらでビルドしているかに関係なく、プロジェクトをコンパイルし、ビルドするには Ant ツールが必要です。これにより、エミュレータや端末にインストールする .apk ファイルが作成されます。デバッグ モードでビルドすると、.apk ファイルは SDK ツールによりデバッグ キーを使用して自動的に署名されるので、インストールの準備がすぐに整います（ただし、エミュレータまたは接続された開発用端末上にのみインストールできます）。リリース モードでビルドされた .apk ファイルは署名されないので、Keytool と Jarsigner を使って、独自の非公開キーで手動で署名する必要があります。<em></em></p>
 
-<p><a href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>の内容をよく理解する必要があります。また、アプリケーションをリリースしてエンドユーザーと共有することを計画している場合は非常に重要です。「アプリケーションへの署名」では、非公開キーを生成し、それを使用して .apk ファイルに署名する手順について説明しています。ただし、開発を始めたばかりであれば、デバッグ モードでビルドすることにより、エミュレータまたは独自の開発用端末でアプリケーションをすぐに実行できます。</p>
+<p><a href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>の内容をよく理解する必要があります。また、アプリケーションをリリースしてエンドユーザーと共有することを計画している場合は非常に重要です。「アプリケーションへの署名」では、非公開キーを生成し、それを使用して .apk ファイルに署名する手順について説明しています。ただし、開発を始めたばかりであれば、デバッグ モードでビルドすることにより、エミュレータまたは独自の開発用端末でアプリケーションをすぐに実行できます。</p>
 
 <p>Ant をお持ちでない場合は、<a href="http://ant.apache.org/">Apache Ant ホームページ</a>から入手してください。Ant をインストールして、必ず実行可能パスに置きます。Ant を実行する前に、「JAVA_HOME」環境変数を宣言して JDK のインストールパスを指定する必要があります。</p>
 
@@ -191,7 +191,7 @@
   </li>
 </ol>
 
-<p>リリース モードではアプリケーションを署名せずにビルドを行います。このため、アプリケーションをエンドユーザーに配布するためには、次に非公開キーを使用して署名を行う必要があります。この手順を行う方法については、<a href="{@docRoot}guide/publishing/app-signing.html">Signing Your Application</a>をご覧ください。</p>
+<p>リリース モードではアプリケーションを署名せずにビルドを行います。このため、アプリケーションをエンドユーザーに配布するためには、次に非公開キーを使用して署名を行う必要があります。この手順を行う方法については、<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Application</a>をご覧ください。</p>
 
 <p>非公開キーを使用してアプリケーションに署名すると、アプリケーションをエミュレータや端末にインストールできるようになります。これについては次の<a href="#Running">アプリケーションの実行</a>のセクションで説明します。次の方法でウェブ サーバーから端末にインストールすることもできます。署名した APK をウェブサイトにアップロードし、Android ウェブブラウザでその .apk の URL を読み込んでアプリケーションをダウンロードし、インストールを開始します（端末上では、[設定] &gt; [アプリケーション] を選択し、[提供元不明のアプリ] をオンにする必要があります）。<em></em></p>
 
@@ -200,7 +200,7 @@
 
 <p>端末のハードウェア以外でアプリケーションを実行する場合は、アプリケーションのインストール先となるエミュレータを起動する必要があります。Android エミュレータのインスタンスは、特有の端末構成に合わせて設定された、特定の Android プラットフォームを実行しています。このプラットフォームと構成は、Android 仮想デバイス（AVD）で定義されます。そのためエミュレータを起動する前に、AVD を定義しなくてはいけません。</p>
 
-<p>端末ハードウェアでアプリケーションを実行する場合は、代わりに、<a href="{@docRoot}guide/developing/device.html">端末のでの開発</a> をご覧ください。</p>
+<p>端末ハードウェアでアプリケーションを実行する場合は、代わりに、<a href="{@docRoot}tools/device.html">端末のでの開発</a> をご覧ください。</p>
 
 <ol>
   <li><strong>AVD の作成</strong>
@@ -253,9 +253,9 @@
 
 <p>上記で使用したツールについて詳しくは、次のドキュメントをご覧ください:</p>
 <ul>
-  <li><a href="{@docRoot}guide/developing/tools/othertools.html#android">android ツール</a></li>
-  <li><a href="{@docRoot}guide/developing/tools/emulator.html">Android Emulator</a></li>
-  <li><a href="{@docRoot}guide/developing/tools/adb.html">Android Debug Bridge</a> (ADB)</li>
+  <li><a href="{@docRoot}tools/othertools.html#android">android ツール</a></li>
+  <li><a href="{@docRoot}tools/help/emulator.html">Android Emulator</a></li>
+  <li><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a> (ADB)</li>
 </ul>
 
 
@@ -265,7 +265,7 @@
 
 <p>Eclipse プラグインを使用すると、デバッガへの接続は自動化されます。しかし他の総合開発環境でも、デバッグ ポートをリッスンしてデバッグ情報を受信するように設定することができます:</p>
 <ol>
-    <li>総合開発環境とエミュレータ間のポート転送サービスとして機能する <strong><a href="{@docRoot}guide/developing/tools/ddms.html">Dalvik Debug Monitor Server（DDMS）</a>ツールを起動します。</strong></li>
+    <li>総合開発環境とエミュレータ間のポート転送サービスとして機能する <strong><a href="{@docRoot}tools/ddms.html">Dalvik Debug Monitor Server（DDMS）</a>ツールを起動します。</strong></li>
     <li><strong>エミュレータでオプションのデバッグ構成を設定します</strong>。設定には、デバッガ接続まで Activity のアプリケーション起動をブロックするオプションなどが含まれます。エミュレータでの CPU 使用率や画面の更新率の表示のように、これらのデバッグ用オプションの多くは DDMS がなくても使用できます。</li>
     <li><strong>総合開発環境を設定して、デバッグ用にポート 8700 に接続します。</strong><a href="{@docRoot}guide/developing/debug-tasks.html#ide-debug-port">総合開発環境を設定してデバッグ ポートに接続する</a> をご覧ください。 </li>
 </ol>
diff --git a/docs/html/intl/ja/guide/index.jd b/docs/html/intl/ja/guide/index.jd
index 5d35e0a..69b9eca 100644
--- a/docs/html/intl/ja/guide/index.jd
+++ b/docs/html/intl/ja/guide/index.jd
@@ -18,7 +18,7 @@
 <dd>Android とは何か、基本機能、アプリケーションとの関係など、Android の基本事項について紹介します。</dd>
 
 <dt><b>フレームワーク トピック</b></dt>
-<dd>Android のフレームワークと API の各部分について説明します。フレームワークの概要については、<a href="{@docRoot}guide/topics/fundamentals.html">アプリケーションの基礎</a>を最初にご覧ください。次に、ユーザー インターフェースの設計やリソースの設定、データの保存、権限の利用など、それぞれのトピックを必要に応じて参照してください。</dd>
+<dd>Android のフレームワークと API の各部分について説明します。フレームワークの概要については、<a href="{@docRoot}guide/components/fundamentals.html">アプリケーションの基礎</a>を最初にご覧ください。次に、ユーザー インターフェースの設計やリソースの設定、データの保存、権限の利用など、それぞれのトピックを必要に応じて参照してください。</dd>
 
 <dt><b>開発</b></dt>
 <dd>Android の開発とデバッグ用ツールの使用方法、結果のテスト方法について説明します。</dd>
@@ -41,7 +41,7 @@
 </p>
 
 <p>
-SDK のダウンロード後は、まずはじめにデベロッパー ガイドを参照してください。コードを実際に見てみることから始めたい場合は、簡単な <a href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a> チュートリアルを参照してください。Android プラットフォーム向けに作成された標準的な「Hello, World」アプリケーションについて説明しています。<a href="{@docRoot}guide/topics/fundamentals.html">アプリケーションの基礎</a>ドキュメントは、アプリケーション フレームワークを理解したいユーザーに最適な出発点となります。
+SDK のダウンロード後は、まずはじめにデベロッパー ガイドを参照してください。コードを実際に見てみることから始めたい場合は、簡単な <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a> チュートリアルを参照してください。Android プラットフォーム向けに作成された標準的な「Hello, World」アプリケーションについて説明しています。<a href="{@docRoot}guide/components/fundamentals.html">アプリケーションの基礎</a>ドキュメントは、アプリケーション フレームワークを理解したいユーザーに最適な出発点となります。
 </p>
 
 
diff --git a/docs/html/intl/ja/guide/publishing/app-signing.jd b/docs/html/intl/ja/guide/publishing/app-signing.jd
index 710591d..2d2acfa 100644
--- a/docs/html/intl/ja/guide/publishing/app-signing.jd
+++ b/docs/html/intl/ja/guide/publishing/app-signing.jd
@@ -35,8 +35,8 @@
 <h2>関連項目</h2>
 
 <ol>
-<li><a href="{@docRoot}guide/publishing/versioning.html">アプリケーションのバージョニング</a></li>
-<li><a href="{@docRoot}guide/publishing/preparing.html">公開の準備</a></li>
+<li><a href="{@docRoot}tools/publishing/versioning.html">アプリケーションのバージョニング</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">公開の準備</a></li>
 </ol>
 
 </div>
diff --git a/docs/html/intl/ja/guide/publishing/preparing.jd b/docs/html/intl/ja/guide/publishing/preparing.jd
index e232f3b..c7a2950 100644
--- a/docs/html/intl/ja/guide/publishing/preparing.jd
+++ b/docs/html/intl/ja/guide/publishing/preparing.jd
@@ -21,9 +21,9 @@
 </p>
 
 <p>アプリケーションを Android マーケットに公開する場合は、アプリケーションの具体的な準備要件について <a
-href="{@docRoot}guide/publishing/publishing.html#market">Android マーケットでの公開</a> もご覧ください。 </p>
+href="{@docRoot}tools/publishing/publishing.html#market">Android マーケットでの公開</a> もご覧ください。 </p>
 
-<p>アプリケーションを公開する方法の一般的な情報については、<a href="{@docRoot}guide/publishing/publishing.html">Publishing Your Applications</a> のドキュメントをご覧ください。 </p>
+<p>アプリケーションを公開する方法の一般的な情報については、<a href="{@docRoot}tools/publishing/publishing.html">Publishing Your Applications</a> のドキュメントをご覧ください。 </p>
 
 <div class="special">
 
@@ -56,7 +56,7 @@
 
 <h3 id="test">1. アプリケーションを実際のデバイスで徹底的にテストする</h3>
 
-<p>アプリケーションをできる限り広範に徹底的にテストすることが重要です。この作業を支援するため、Android では多数のテスト用クラスとツールを用意しています。{@link android.app.Instrumentation Instrumentation} を使用して JUnit およびその他のテスト ケースを実行できます。また、<a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a> などのテスティング ツールを使用できます。  </p>
+<p>アプリケーションをできる限り広範に徹底的にテストすることが重要です。この作業を支援するため、Android では多数のテスト用クラスとツールを用意しています。{@link android.app.Instrumentation Instrumentation} を使用して JUnit およびその他のテスト ケースを実行できます。また、<a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> などのテスティング ツールを使用できます。  </p>
 
 <ul>
 <li>ユーザーがアプリケーションを正常に実行できるようにするため、アプリケーションが実行されると予想されるタイプの携帯端末の実機を入手してください。実際のデバイスで、実際のネットワーク条件の下でアプリケーションをテストします。アプリケーションを実際のデバイスでテストすることは非常に重要です。これによって、作成したユーザー インターフェース要素のサイズが正しく（特にタッチスクリーン UI の場合）、アプリケーションのパフォーマンスと電池効率が適正であることを確認できるからです。</li>
@@ -96,13 +96,13 @@
 
 <p>これまでにリリースしたバージョンがある場合、最新のアプリケーションのバージョン番号を旧バージョンから増加させる必要があります。アプリケーションのマニフェスト ファイルの <code>&lt;manifest&gt;</code> 要素の <code>android:versionCode</code> と <code>android:versionName</code> 属性の両方を適切な値を使用して増加する必要があります。 </p>
 
-<p>アプリケーションのバージョン情報を定義する方法は、<a href="{@docRoot}guide/publishing/versioning.html">Versioning Your Applications</a>をご覧ください。</p>
+<p>アプリケーションのバージョン情報を定義する方法は、<a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a>をご覧ください。</p>
 
 <h3 id="cryptokey">6. 適切な暗号化キーを取得する</h3>
 
 <p>ここまで準備作業をすべて読んで実行していれば、アプリケーションはコンパイルされ、署名の準備ができています。.apk の内部では、アプリケーションは適切にバージョン管理されており、上記のように余分なファイルや非公開データは削除されています。 </p>
 
-<p>アプリケーションに署名する前に、適切な非公開キーがあることを確認する必要があります。非公開キーを取得（または生成）する方法については、<a href="{@docRoot}guide/publishing/app-signing.html#cert">適切な非公開キーの取得</a>をご覧ください。</p>
+<p>アプリケーションに署名する前に、適切な非公開キーがあることを確認する必要があります。非公開キーを取得（または生成）する方法については、<a href="{@docRoot}tools/publishing/app-signing.html#cert">適切な非公開キーの取得</a>をご覧ください。</p>
 
 <p>適切な非公開キーを取得（または生成）したら、キーを使用して次の手順を実行します:</p>
 
@@ -136,7 +136,7 @@
 </ol>
 
 <p>署名と非公開キーについては、<a
-href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。</p>
+href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。</p>
 
 
 <h2 id="compile">アプリケーションのコンパイル</h2>
@@ -147,7 +147,7 @@
 
 <h3 id="signapp">8. アプリケーションに署名する</h3>
 
-<p>非公開キーを使用してアプリケーションに署名します。アプリケーションに正しく署名することは、非常に重要です。詳細は、<a href="{@docRoot}guide/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。 </p>
+<p>非公開キーを使用してアプリケーションに署名します。アプリケーションに正しく署名することは、非常に重要です。詳細は、<a href="{@docRoot}tools/publishing/app-signing.html">アプリケーションへの署名</a>をご覧ください。 </p>
 
 <h3 id="testapp">9. コンパイルして署名したアプリケーションのテスト</h3>
 
diff --git a/docs/html/intl/ja/guide/publishing/versioning.jd b/docs/html/intl/ja/guide/publishing/versioning.jd
index bf86016..1928610 100644
--- a/docs/html/intl/ja/guide/publishing/versioning.jd
+++ b/docs/html/intl/ja/guide/publishing/versioning.jd
@@ -24,8 +24,8 @@
 <h2>関連項目</h2>
 
 <ol>
-<li><a href="{@docRoot}guide/publishing/preparing.html">公開の準備</a></li>
-<li><a href="{@docRoot}guide/publishing/publishing.html#market">Android マーケットでの公開</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">公開の準備</a></li>
+<li><a href="{@docRoot}tools/publishing/publishing.html#market">Android マーケットでの公開</a></li>
 <li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
 </ol>
 
@@ -97,4 +97,4 @@
 
 <p>アプリケーションに最小プラットフォーム バージョンを指定するには、<code>&lt;uses-sdk&gt;</code> 要素を <code>&lt;manifest&gt;</code> の子として追加し、<code>android:minSdkVersion</code> を属性として定義します。 </p>
 
-<p>詳細は、<a href="{@docRoot}sdk/android-1.1.html">Android System Image 1.1 Version Notes</a> もご覧ください。</p>
+<p>詳細は、<a href="{@docRoot}about/versions/android-1.1.html">Android System Image 1.1 Version Notes</a> もご覧ください。</p>
diff --git a/docs/html/intl/ja/guide/topics/fundamentals.jd b/docs/html/intl/ja/guide/topics/fundamentals.jd
index d329a8c..025cf53 100644
--- a/docs/html/intl/ja/guide/topics/fundamentals.jd
+++ b/docs/html/intl/ja/guide/topics/fundamentals.jd
@@ -47,7 +47,7 @@
 </div>
 
 <p>
-Android アプリケーションはすべて Java プログラミング言語で記述します。コンパイル済みの Java コード（およびそのアプリケーションに必要なすべてのデータやリソース ファイル）は、<a href="{@docRoot}guide/developing/tools/aapt.html"><code>aapt</code> ツール</a>を使用して Android パッケージにバンドルします。Android パッケージは、拡張子が {@code .apk} のアーカイブ ファイルです。<i></i>ユーザーは、このファイルをデバイスにダウンロードして利用します。つまり、Android パッケージは、アプリケーションをモバイル デバイスに配布およびインストールするための媒体として機能します。1 つの {@code .apk} ファイルに含まれているすべてのコードが、1 つのアプリケーションと見なされます。<i></i>
+Android アプリケーションはすべて Java プログラミング言語で記述します。コンパイル済みの Java コード（およびそのアプリケーションに必要なすべてのデータやリソース ファイル）は、<a href="{@docRoot}tools/aapt.html"><code>aapt</code> ツール</a>を使用して Android パッケージにバンドルします。Android パッケージは、拡張子が {@code .apk} のアーカイブ ファイルです。<i></i>ユーザーは、このファイルをデバイスにダウンロードして利用します。つまり、Android パッケージは、アプリケーションをモバイル デバイスに配布およびインストールするための媒体として機能します。1 つの {@code .apk} ファイルに含まれているすべてのコードが、1 つのアプリケーションと見なされます。<i></i>
 </p>
 
 <p>
@@ -185,7 +185,7 @@
 </ul>
 
 <p>
-インテント メッセージについて詳しくは、<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a> をご覧ください。
+インテント メッセージについて詳しくは、<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> をご覧ください。
 </p>
 
 
@@ -293,7 +293,7 @@
 </p>
 
 <p>
-インテント フィルタについて詳しくは、<a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a> をご覧ください。
+インテント フィルタについて詳しくは、<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a> をご覧ください。
 </p>
 
 
@@ -526,7 +526,7 @@
 </p>
 
 <p>
-このメカニズムを簡単に説明すると次のようになります。まず、シンプルなインターフェース定義言語（IDL）を使用して、実装したい RPC インターフェースを宣言します。<code><a href="{@docRoot}guide/developing/tools/aidl.html">aidl</a></code> ツールにより、RPC インターフェースの宣言から Java インターフェース定義が生成されます。この定義は、ローカルとリモートの両方のプロセスで使用する必要があります。定義には、次の図に示すように 2 つの内部クラスが含まれています:
+このメカニズムを簡単に説明すると次のようになります。まず、シンプルなインターフェース定義言語（IDL）を使用して、実装したい RPC インターフェースを宣言します。<code><a href="{@docRoot}tools/aidl.html">aidl</a></code> ツールにより、RPC インターフェースの宣言から Java インターフェース定義が生成されます。この定義は、ローカルとリモートの両方のプロセスで使用する必要があります。定義には、次の図に示すように 2 つの内部クラスが含まれています:
 </p>
 
 <p style="margin-left: 2em">
@@ -560,7 +560,7 @@
 </ul>
 
 <p>
-ここでは、説明を簡単にするため、RPC メカニズムの細かい点は省略しています。詳しくは、<a href="{@docRoot}guide/developing/tools/aidl.html">Designing a Remote Interface Using AIDL</a>、および {@link android.os.IBinder IBinder} クラスの説明をご覧ください。
+ここでは、説明を簡単にするため、RPC メカニズムの細かい点は省略しています。詳しくは、<a href="{@docRoot}tools/aidl.html">Designing a Remote Interface Using AIDL</a>、および {@link android.os.IBinder IBinder} クラスの説明をご覧ください。
 </p>  
 
 
diff --git a/docs/html/intl/ja/guide/tutorials/hello-world.jd b/docs/html/intl/ja/guide/tutorials/hello-world.jd
index 647c828..c69f5da 100644
--- a/docs/html/intl/ja/guide/tutorials/hello-world.jd
+++ b/docs/html/intl/ja/guide/tutorials/hello-world.jd
@@ -20,13 +20,13 @@
 
 <p>Eclipse を使用していない場合でも問題ありません。<a href="{@docRoot}guide/developing/other-ide.html">Developing in Other IDEs</a>に慣れてから、このチュートリアルに戻り、Eclipse に関する部分以外を参考にしてください。</p>
 
-<p>開始する前に、最新の SDK がインストールされている必要があります。また、Eclipse を使用する場合には、ADT プラグインもインストールされている必要があります。これらのプログラムがインストールされていない場合は、「<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>」を参考にインストールを実行して、完了後にこのチュートリアルに戻ってください。</p>
+<p>開始する前に、最新の SDK がインストールされている必要があります。また、Eclipse を使用する場合には、ADT プラグインもインストールされている必要があります。これらのプログラムがインストールされていない場合は、「<a href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a>」を参考にインストールを実行して、完了後にこのチュートリアルに戻ってください。</p>
 
 <h2 id="avd">AVD の作成</h2>
 
 <div class="sidebox-wrapper">
   <div class="sidebox">
-    <p>AVD の使用方法と使用可能なオプションについて詳しくは、<a href="{@docRoot}guide/developing/tools/avd.html">Android 仮想デバイス</a> のドキュメントを参照してください。</p>
+    <p>AVD の使用方法と使用可能なオプションについて詳しくは、<a href="{@docRoot}tools/avd.html">Android 仮想デバイス</a> のドキュメントを参照してください。</p>
   </div>
 </div>
 
@@ -288,7 +288,7 @@
 
 <p class="note"><strong>ヒント:</strong> ショートカット キー<strong>Ctrl+F11</strong>（Mac では <strong>コマンド+Shift+F11</strong>）を使用して、現在表示されているアプリケーションを実行することができます。</p>
 
-<p>ここからは、デバッグの基礎知識と、他の総合開発環境に関する補足情報について説明します。さらに詳しく学習したい場合は、「<a href="{@docRoot}guide/topics/fundamentals.html">アプリケーションの基礎</a>」を参照してください。Android アプリケーションが動作するためのすべての要素について説明しています。また、「<a href="{@docRoot}guide/index.html">デベロッパー ガイド</a>」の導入ページを参照して、<em>デベロッパー ガイド</em> ドキュメントの概要を確認してください。</p>
+<p>ここからは、デバッグの基礎知識と、他の総合開発環境に関する補足情報について説明します。さらに詳しく学習したい場合は、「<a href="{@docRoot}guide/components/fundamentals.html">アプリケーションの基礎</a>」を参照してください。Android アプリケーションが動作するためのすべての要素について説明しています。また、「<a href="{@docRoot}guide/index.html">デベロッパー ガイド</a>」の導入ページを参照して、<em>デベロッパー ガイド</em> ドキュメントの概要を確認してください。</p>
 
 
 <div class="special">
@@ -357,7 +357,7 @@
   
   <p>Eclipse を使用していない場合（普段から使用している総合開発環境がある場合や、シンプルにテキスト エディタやコマンド ライン ツールを使用している場合など）は、Eclipse プラグインを利用することはできません。しかし心配は無用です。Eclipse を使用していないからといって何らかの機能が失われることはありません。</p>
   
-  <p>Android Plugin for Eclipse は、単に Android SDK に含まれるツール セットをまとめたものに過ぎません（エミュレータ、aapt、adb、ddms などの個別のツールについては、<a href="{@docRoot}guide/developing/tools/index.html">こちらで別途説明</a>しています）。このため、これらのツールを別のツール、たとえば「Ant」のビルド ファイルなどでまとめることも可能です。</p>
+  <p>Android Plugin for Eclipse は、単に Android SDK に含まれるツール セットをまとめたものに過ぎません（エミュレータ、aapt、adb、ddms などの個別のツールについては、<a href="{@docRoot}tools/index.html">こちらで別途説明</a>しています）。このため、これらのツールを別のツール、たとえば「Ant」のビルド ファイルなどでまとめることも可能です。</p>
   
   <p>Android SDK には、「android」という名前のツールが含まれています。このツールを使用すると、作成するプロジェクトのソース コードとディレクトリ スタブすべて、および Ant と互換性のある <code>build.xml</code> ファイルを作成することができます。これにより、プロジェクトをコマンド ラインで作成したり、普段使用している総合開発環境と統合したりすることができます。</p>
   
diff --git a/docs/html/intl/ja/index.jd b/docs/html/intl/ja/index.jd
index fbbd88f..ac36f90 100644
--- a/docs/html/intl/ja/index.jd
+++ b/docs/html/intl/ja/index.jd
@@ -148,7 +148,7 @@
       'name':"Dev Phone 1",
       'img':"devphone-large.png",
       'title':"Android Dev Phone 1",
-      'desc': "<p>この携帯電話を使用することで、開発した Android アプリケーションの実行とデバッグを行うことができます。Android オペレーティングシステムを変更してからリビルドし、携帯電話に書き込むことができます。Android Dev Phone 1 は携帯通信会社に依存しておらず、<a href='http://play.google.com/apps/publish'>Android マーケット</a>に登録済みのデベロッパーなら誰でも購入可能です。</p><p><a href='/guide/developing/device.html#dev-phone-1'>Android Dev Phone 1 の詳細&raquo;</a></p>"
+      'desc': "<p>この携帯電話を使用することで、開発した Android アプリケーションの実行とデバッグを行うことができます。Android オペレーティングシステムを変更してからリビルドし、携帯電話に書き込むことができます。Android Dev Phone 1 は携帯通信会社に依存しておらず、<a href='http://play.google.com/apps/publish'>Android マーケット</a>に登録済みのデベロッパーなら誰でも購入可能です。</p><p><a href='/tools/device.html#dev-phone-1'>Android Dev Phone 1 の詳細&raquo;</a></p>"
     }
 
   }
diff --git a/docs/html/intl/ja/resources/tutorials/hello-world.jd b/docs/html/intl/ja/resources/tutorials/hello-world.jd
index 0cda2fb..e0ef9e6 100644
--- a/docs/html/intl/ja/resources/tutorials/hello-world.jd
+++ b/docs/html/intl/ja/resources/tutorials/hello-world.jd
@@ -20,13 +20,13 @@
 
 <p>Eclipse を使用していない場合でも問題ありません。<a href="{@docRoot}guide/developing/other-ide.html">Developing in Other IDEs</a>に慣れてから、このチュートリアルに戻り、Eclipse に関する部分以外を参考にしてください。</p>
 
-<p>開始する前に、最新の SDK がインストールされている必要があります。また、Eclipse を使用する場合には、ADT プラグインもインストールされている必要があります。これらのプログラムがインストールされていない場合は、「<a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>」を参考にインストールを実行して、完了後にこのチュートリアルに戻ってください。</p>
+<p>開始する前に、最新の SDK がインストールされている必要があります。また、Eclipse を使用する場合には、ADT プラグインもインストールされている必要があります。これらのプログラムがインストールされていない場合は、「<a href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a>」を参考にインストールを実行して、完了後にこのチュートリアルに戻ってください。</p>
 
 <h2 id="avd">AVD の作成</h2>
 
 <div class="sidebox-wrapper">
   <div class="sidebox">
-    <p>AVD の使用方法と使用可能なオプションについて詳しくは、<a href="{@docRoot}guide/developing/tools/avd.html">Android 仮想デバイス</a> のドキュメントを参照してください。</p>
+    <p>AVD の使用方法と使用可能なオプションについて詳しくは、<a href="{@docRoot}tools/avd.html">Android 仮想デバイス</a> のドキュメントを参照してください。</p>
   </div>
 </div>
 
@@ -289,7 +289,7 @@
 
 <p class="note"><strong>ヒント:</strong> ショートカット キー<strong>Ctrl+F11</strong>（Mac では <strong>コマンド+Shift+F11</strong>）を使用して、現在表示されているアプリケーションを実行することができます。</p>
 
-<p>ここからは、デバッグの基礎知識と、他の総合開発環境に関する補足情報について説明します。さらに詳しく学習したい場合は、「<a href="{@docRoot}guide/topics/fundamentals.html">アプリケーションの基礎</a>」を参照してください。Android アプリケーションが動作するためのすべての要素について説明しています。また、「<a href="{@docRoot}guide/index.html">デベロッパー ガイド</a>」の導入ページを参照して、<em>デベロッパー ガイド</em> ドキュメントの概要を確認してください。</p>
+<p>ここからは、デバッグの基礎知識と、他の総合開発環境に関する補足情報について説明します。さらに詳しく学習したい場合は、「<a href="{@docRoot}guide/components/fundamentals.html">アプリケーションの基礎</a>」を参照してください。Android アプリケーションが動作するためのすべての要素について説明しています。また、「<a href="{@docRoot}guide/index.html">デベロッパー ガイド</a>」の導入ページを参照して、<em>デベロッパー ガイド</em> ドキュメントの概要を確認してください。</p>
 
 
 <div class="special">
@@ -358,7 +358,7 @@
   
   <p>Eclipse を使用していない場合（普段から使用している総合開発環境がある場合や、シンプルにテキスト エディタやコマンド ライン ツールを使用している場合など）は、Eclipse プラグインを利用することはできません。しかし心配は無用です。Eclipse を使用していないからといって何らかの機能が失われることはありません。</p>
   
-  <p>Android Plugin for Eclipse は、単に Android SDK に含まれるツール セットをまとめたものに過ぎません（エミュレータ、aapt、adb、ddms などの個別のツールについては、<a href="{@docRoot}guide/developing/tools/index.html">こちらで別途説明</a>しています）。このため、これらのツールを別のツール、たとえば「Ant」のビルド ファイルなどでまとめることも可能です。</p>
+  <p>Android Plugin for Eclipse は、単に Android SDK に含まれるツール セットをまとめたものに過ぎません（エミュレータ、aapt、adb、ddms などの個別のツールについては、<a href="{@docRoot}tools/index.html">こちらで別途説明</a>しています）。このため、これらのツールを別のツール、たとえば「Ant」のビルド ファイルなどでまとめることも可能です。</p>
   
   <p>Android SDK には、「android」という名前のツールが含まれています。このツールを使用すると、作成するプロジェクトのソース コードとディレクトリ スタブすべて、および Ant と互換性のある <code>build.xml</code> ファイルを作成することができます。これにより、プロジェクトをコマンド ラインで作成したり、普段使用している総合開発環境と統合したりすることができます。</p>
   
diff --git a/docs/html/intl/ja/sdk/1.5_r2/installing.jd b/docs/html/intl/ja/sdk/1.5_r2/installing.jd
index 789fc26..bd464c6 100644
--- a/docs/html/intl/ja/sdk/1.5_r2/installing.jd
+++ b/docs/html/intl/ja/sdk/1.5_r2/installing.jd
@@ -29,7 +29,7 @@
 
 <p>システム上に展開した SDK ディレクトリの名前とパスをメモしておきましょう。Android プラグインの設定時や、SDK ツールの使用時にこの SDK ディレクトリを参照する必要があります。</p>
 
-<p>SDK のプライマリディレクトリである <code>tools</code> のパスを、システム PATH に追加することをおすすめします。<code>tools/</code> プライマリディレクトリは、SDK フォルダのルートにあります。<code>tools</code> をパスに追加すると、Android Debug Bridge（adb）やその他のコマンド ライン <a href="{@docRoot}guide/developing/tools/index.html">ツール</a>を、ツールの格納されたディレクトの完全なパスを指定せずに実行できるようになります。 </p>
+<p>SDK のプライマリディレクトリである <code>tools</code> のパスを、システム PATH に追加することをおすすめします。<code>tools/</code> プライマリディレクトリは、SDK フォルダのルートにあります。<code>tools</code> をパスに追加すると、Android Debug Bridge（adb）やその他のコマンド ライン <a href="{@docRoot}tools/index.html">ツール</a>を、ツールの格納されたディレクトの完全なパスを指定せずに実行できるようになります。 </p>
 <ul>
     <li>Linux 上では <code>~/.bash_profile</code> ファイルまたは <code>~/.bashrc</code> ファイルを編集します。PATH 環境変数を設定している行を探し、その行に <code>tools/</code> ディレクトリへの完全なパスを追加します。PATH を設定する行が無い場合は、次の行を追加します:</li>
 
@@ -150,7 +150,7 @@
   <li><a href="{@docRoot}guide/index.html">デベロッパー ガイド</a>と、ガイドに説明されている情報の種類を参照します。</li>
   <li>Android をプラットフォームとして紹介している <a
   href="{@docRoot}guide/basics/what-is-android.html">Android とは</a>を読みます。</li>
-  <li><a href="{@docRoot}guide/topics/fundamentals.html">アプリケーションの基礎</a>を参照して、Android フレームワークとそこでのアプリケーションの実行方法について学びます。</li>
+  <li><a href="{@docRoot}guide/components/fundamentals.html">アプリケーションの基礎</a>を参照して、Android フレームワークとそこでのアプリケーションの実行方法について学びます。</li>
   <li>[<a
   href="{@docRoot}reference/packages.html">リファレンス</a>] タブの Android Framework API の仕様を参照します。</li>
 </ul>
@@ -158,7 +158,7 @@
 <p><strong>SDK の探索</strong></p>
 <ul>
   <li>利用可能な<a
-  href="{@docRoot}guide/developing/tools/index.html">開発ツール</a>の概要を把握します。</li>
+  href="{@docRoot}tools/index.html">開発ツール</a>の概要を把握します。</li>
   <li><a
   href="{@docRoot}guide/developing/eclipse-adt.html">Eclipse/ADT</a> または<a href="{@docRoot}guide/developing/other-ide.html">別の IDE</a> での開発方法を参照します。
   </li>
@@ -166,7 +166,7 @@
 
 <p><strong>サンプル コードの参照</strong></p>
 <ul>
-  <li><a href="{@docRoot}resources/tutorials/hello-world.html">Hello World アプリケーション</a>を構築します（特に Eclipse ユーザーにおすすめです）。</li>
+  <li><a href="{@docRoot}training/basics/firstapp/index.html">Hello World アプリケーション</a>を構築します（特に Eclipse ユーザーにおすすめです）。</li>
   <li><a href="{@docRoot}resources/tutorials/notepad/index.html">Notepad チュートリアル</a>に沿って Android アプリケーションを完全に構築します。 </li>
   <li><code><em>&lt;sdk&gt;</em>/platforms/<em>&lt;platfrom&gt;</em>/samples</code> に収められている他のサンプル アプリケーションのいずれかを新しいプロジェクトとして作成し、自分の開発環境でコンパイルし、実行します。</li>
 </ul>
diff --git a/docs/html/intl/ja/sdk/1.5_r3/installing.jd b/docs/html/intl/ja/sdk/1.5_r3/installing.jd
index 789fc26..bd464c6 100644
--- a/docs/html/intl/ja/sdk/1.5_r3/installing.jd
+++ b/docs/html/intl/ja/sdk/1.5_r3/installing.jd
@@ -29,7 +29,7 @@
 
 <p>システム上に展開した SDK ディレクトリの名前とパスをメモしておきましょう。Android プラグインの設定時や、SDK ツールの使用時にこの SDK ディレクトリを参照する必要があります。</p>
 
-<p>SDK のプライマリディレクトリである <code>tools</code> のパスを、システム PATH に追加することをおすすめします。<code>tools/</code> プライマリディレクトリは、SDK フォルダのルートにあります。<code>tools</code> をパスに追加すると、Android Debug Bridge（adb）やその他のコマンド ライン <a href="{@docRoot}guide/developing/tools/index.html">ツール</a>を、ツールの格納されたディレクトの完全なパスを指定せずに実行できるようになります。 </p>
+<p>SDK のプライマリディレクトリである <code>tools</code> のパスを、システム PATH に追加することをおすすめします。<code>tools/</code> プライマリディレクトリは、SDK フォルダのルートにあります。<code>tools</code> をパスに追加すると、Android Debug Bridge（adb）やその他のコマンド ライン <a href="{@docRoot}tools/index.html">ツール</a>を、ツールの格納されたディレクトの完全なパスを指定せずに実行できるようになります。 </p>
 <ul>
     <li>Linux 上では <code>~/.bash_profile</code> ファイルまたは <code>~/.bashrc</code> ファイルを編集します。PATH 環境変数を設定している行を探し、その行に <code>tools/</code> ディレクトリへの完全なパスを追加します。PATH を設定する行が無い場合は、次の行を追加します:</li>
 
@@ -150,7 +150,7 @@
   <li><a href="{@docRoot}guide/index.html">デベロッパー ガイド</a>と、ガイドに説明されている情報の種類を参照します。</li>
   <li>Android をプラットフォームとして紹介している <a
   href="{@docRoot}guide/basics/what-is-android.html">Android とは</a>を読みます。</li>
-  <li><a href="{@docRoot}guide/topics/fundamentals.html">アプリケーションの基礎</a>を参照して、Android フレームワークとそこでのアプリケーションの実行方法について学びます。</li>
+  <li><a href="{@docRoot}guide/components/fundamentals.html">アプリケーションの基礎</a>を参照して、Android フレームワークとそこでのアプリケーションの実行方法について学びます。</li>
   <li>[<a
   href="{@docRoot}reference/packages.html">リファレンス</a>] タブの Android Framework API の仕様を参照します。</li>
 </ul>
@@ -158,7 +158,7 @@
 <p><strong>SDK の探索</strong></p>
 <ul>
   <li>利用可能な<a
-  href="{@docRoot}guide/developing/tools/index.html">開発ツール</a>の概要を把握します。</li>
+  href="{@docRoot}tools/index.html">開発ツール</a>の概要を把握します。</li>
   <li><a
   href="{@docRoot}guide/developing/eclipse-adt.html">Eclipse/ADT</a> または<a href="{@docRoot}guide/developing/other-ide.html">別の IDE</a> での開発方法を参照します。
   </li>
@@ -166,7 +166,7 @@
 
 <p><strong>サンプル コードの参照</strong></p>
 <ul>
-  <li><a href="{@docRoot}resources/tutorials/hello-world.html">Hello World アプリケーション</a>を構築します（特に Eclipse ユーザーにおすすめです）。</li>
+  <li><a href="{@docRoot}training/basics/firstapp/index.html">Hello World アプリケーション</a>を構築します（特に Eclipse ユーザーにおすすめです）。</li>
   <li><a href="{@docRoot}resources/tutorials/notepad/index.html">Notepad チュートリアル</a>に沿って Android アプリケーションを完全に構築します。 </li>
   <li><code><em>&lt;sdk&gt;</em>/platforms/<em>&lt;platfrom&gt;</em>/samples</code> に収められている他のサンプル アプリケーションのいずれかを新しいプロジェクトとして作成し、自分の開発環境でコンパイルし、実行します。</li>
 </ul>
diff --git a/docs/html/intl/ja/training/monitoring-device-state/battery-monitoring.jd b/docs/html/intl/ja/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..c4aafe4
--- /dev/null
+++ b/docs/html/intl/ja/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=電池残量と充電状態の監視
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+next.title=ホルダーの装着状態とタイプの特定と監視
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#DetermineChargeState">現在の充電状態を特定する</a></li>
+  <li><a href="#MonitorChargeState">充電状態の変化を監視する</a></li>
+  <li><a href="#CurrentLevel">現在の電池残量を特定する</a></li>
+  <li><a href="#MonitorLevel">電池残量の大きな変化を監視する</a></li>
+</ol>
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>バックグラウンド更新が電池消費量に及ぼす影響を抑えるために更新の頻度を変更するには、初めに現在の電池残量と充電状態を調べることをおすすめします。</p>
+
+<p>アプリの更新が電池消費量に及ぼす影響の度合いは、端末の電池残量と充電状態によって異なります。AC 電源から端末を充電しているときは、更新の実行による影響はごくわずかなので、ほとんどの場合は、端末が AC 電源に接続されている限り、更新頻度を最大にして差し支えありません。逆に、端末が電池で駆動しているときは、更新頻度を下げると電池消費量を抑えることができます。</p>
+
+<p>同様に、電池残量を調べると、残量がごくわずかであるときに更新頻度を下げたり、場合によっては停止させたりすることができます。</p>
+
+
+<h2 id="DetermineChargeState">現在の充電状態を特定する</h2> 
+ 
+<p>初めに、現在の充電状態を特定します。{@link android.os.BatteryManager} によって電池と充電状態に関するすべての詳細情報が sticky {@link android.content.Intent} としてブロードキャストされますが、この中に充電状態が格納されています。</p>
+
+<p>これは sticky インテントであるため、{@link android.content.BroadcastReceiver} を登録する必要はありません。{@code registerReceiver} を呼び出し、{@code null} をレシーバとして渡すだけで（次のコード例を参照）、現在の電池状態のインテントが返されます。ここで実際の {@link android.content.BroadcastReceiver} オブジェクトを渡すこともできますが、このレッスンでは後で更新についての処理を行うので、これは必要ありません。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>現在の充電状態に加えて、充電中の場合は USB 経由か AC 充電器経由かを調べることもできます。<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>一般的には、端末が AC 充電器に接続されているときはバックグラウンド更新の頻度を最大にし、USB 経由で充電中のときは頻度を下げ、電池で駆動中のときはさらに頻度を下げます。</p>
+
+
+<h2 id="MonitorChargeState">充電状態の変化を監視する</h2> 
+
+<p>充電状態は、端末が充電器に接続されたときにすぐに変化するので、充電状態の変化を監視し、その変化に応じて更新の頻度を変更することが重要です。</p>
+
+<p>{@link android.os.BatteryManager} は、端末が電源に接続されたときや接続が解除されたときに、アクションをブロードキャストします。このようなイベントは、アプリが実行中でないときでも受信することが重要です。特にそのイベントが、アプリのバックグラウンド更新を開始するためにアプリを起動させる頻度に影響するものである場合です。したがって、{@link android.content.BroadcastReceiver} をアプリのマニフェスト内で登録し、両方のイベントを受信するために {@link android.content.Intent#ACTION_POWER_CONNECTED} と {@link android.content.Intent#ACTION_POWER_DISCONNECTED} をインテント フィルタ内で定義します。</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>関連付けられている {@link android.content.BroadcastReceiver} 実装の中で、前のステップで説明したように、現在の充電状態と充電方法を抽出します。</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">現在の電池残量を特定する</h2> 
+
+<p>状況によっては、現在の電池残量がわかると便利なことがあります。たとえば、電池残量が所定のレベルを下回った場合にアプリのバックグラウンド更新の頻度を下げることができます。</p>
+
+<p>現在の電池残量を調べるには、次に示すように、電池状態のインテントから現在の電池残量と最大量を抽出します。</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">電池残量の大きな変化を監視する</h2> 
+
+<p>電池状態を継続的に監視することは簡単ではありませんが、その必要もありません。</p>
+
+<p>一般的に、電池残量を継続的に監視するほうが、電池への影響はアプリの通常の動作によるものよりも大きくなるため、電池残量の大きな変化のみを監視することをおすすめします。特に、端末が電池残量低下状態に入ったときや、その状態が解消されたときです。</p>
+
+<p>次に示すマニフェストの断片は、ブロードキャスト レシーバの中にあるインテント フィルタ要素からの抜粋です。このレシーバは、端末が電池残量低下状態に入ったときや、その状態が解消されたときに呼び出されます。そのために、{@link android.content.Intent#ACTION_BATTERY_LOW} と {@link android.content.Intent#ACTION_BATTERY_OKAY} を受信します。</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>一般的に、電池残量がごくわずかになったときはアプリのバックグラウンド更新をすべて停止することをおすすめします。データがいくら新しくても、端末自体の電源が切れてしまったのではデータを活用できません。</p>
+
+<p>多くの場合、端末の充電という動作が開始するのは、端末がホルダーにセットされるのと同時です。次のレッスンでは、現在のホルダーの状態を特定し、端末のホルダー装着状態の変化を監視する方法を紹介します。</p>
+
diff --git a/docs/html/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..82b0c6b
--- /dev/null
+++ b/docs/html/intl/ja/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=接続状態の特定と監視
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=ホルダーの装着状態とタイプの特定と監視
+previous.link=docking-monitoring.html
+next.title=オンデマンドでのブロードキャスト レシーバ操作
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#DetermineConnection">インターネット接続の有無を特定する</a></li>
+  <li><a href="#DetermineType">インターネット接続のタイプを特定する</a></li>
+  <li><a href="#MonitorChanges">接続状態の変化を監視する</a></li>
+</ol>
+
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+
+<p>反復アラームとバックグラウンド サービスの用途のうち代表的なものとしては、インターネット リソースからアプリのデータを定期的に更新するためのスケジュール設定や、データのキャッシュへの格納、長時間に及ぶダウンロードの実行などがあります。しかし、インターネットに接続されていないときや、速度が低すぎるためにダウンロードを完了できない場合にまで、更新をスケジューリングするために端末をスリープ状態から復帰させる必要があるでしょうか。</p>
+
+<p>{@link android.net.ConnectivityManager} を使用すると、端末が実際にインターネットに接続されているかどうかと、接続されている場合の接続タイプを調べることができます。</p>
+
+
+<h2 id="DetermineConnection">インターネット接続の有無を特定する</h2> 
+ 
+<p>端末がインターネットに接続されていない場合は、インターネット リソースに基づく更新をスケジューリングする必要性はありません。次のスニペットは、{@link android.net.ConnectivityManager} を使用してアクティブなネットワークを問い合わせて、インターネットに接続しているかどうかを特定する方法を示すものです。</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">インターネット接続のタイプを特定する</h2> 
+
+<p>現在使用可能なインターネット接続のタイプも調べることができます。</p>
+
+<p>端末の接続のタイプとしては、モバイル データ、WiMAX、Wi-Fi、イーサネットがあります。次に示すように、アクティブなネットワークのタイプを問い合わせると、使用可能な帯域幅に合わせて更新頻度を変更することができます。</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>モバイル データ接続のコストは Wi-Fi 接続を大きく上回る傾向があるため、端末がモバイル接続しているときはアプリの更新頻度を下げるのが一般的です。同様に、大量のデータをダウンロードするときは、Wi-Fi 接続されるまで停止するとよいでしょう。</p>
+
+<p>更新を停止した場合は、接続状態の変化を受信することが重要です。インターネット接続が確立されたら更新を再開できるようにするためです。</p>
+
+
+<h2 id="MonitorChanges">接続状態の変化を監視する</h2> 
+
+<p>接続状態の詳細が変化すると、{@link android.net.ConnectivityManager} によって {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}（{@code "android.net.conn.CONNECTIVITY_CHANGE"}）アクションがブロードキャストされます。アプリのマニフェスト内でブロードキャスト レシーバを登録し、このような変化を検出することで、それに応じてアプリのバックグラウンド更新を再開（または停止）することができます。</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>端末の接続状態の変化は、きわめて頻繁になることもあります。このブロードキャストは、モバイル データ接続と Wi-Fi 接続とが切り替わるたびに発行されるからです。したがって、このブロードキャストの監視は、更新やダウンロードを停止した後に再開すべきかどうかを判断するために限って行うことをおすすめします。一般的には、更新を開始する前にインターネット接続の有無を調べれば十分です。インターネットに接続していない場合は、再び接続されるまでの間、更新を停止します。</p>
+
+<p>このようにするには、マニフェスト内で宣言したブロードキャスト レシーバのオンとオフを切り替える必要があります。これについて、次のレッスンで説明します。</p>
diff --git a/docs/html/intl/ja/training/monitoring-device-state/docking-monitoring.jd b/docs/html/intl/ja/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..9c0e054
--- /dev/null
+++ b/docs/html/intl/ja/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=ホルダーの装着状態とタイプの特定と監視
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= 電池残量と充電状態の監視
+previous.link=battery-monitoring.html
+next.title= 接続状態の特定と監視
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#CurrentDockState">オーディオ フォーカスをリクエストする</a></li>
+  <li><a href="#DockType">現在のホルダーのタイプを特定する</a></li>
+  <li><a href="#MonitorDockState">ホルダーの装着状態またはタイプの変化を監視する</a></li>
+</ol>
+
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Android 搭載端末を装着できるホルダーの種類には、さまざまなものがあります。たとえば、車載用や家庭用のホルダーがあり、デジタルかアナログかという区別もあります。ホルダー装着状態は一般的に、充電状態と密接にリンクしています。多くのホルダーは、装着されている端末に電力を供給しているからです。</p>
+
+<p>端末のホルダー装着状態が更新の頻度にどのように影響するかは、アプリによって異なります。たとえば、スポーツ センター アプリなら、卓上ホルダー装着時には更新頻度を上げ、カー ホルダー装着時には更新を完全に停止するとよいでしょう。逆に、カー ホルダー装着時に更新頻度を最大にするケースとしては、バックグラウンド サービスによって道路交通状況を更新する場合が考えられます。</p>
+
+<p>ホルダー装着状態も sticky {@link android.content.Intent} としてブロードキャストされるので、端末がホルダーに装着されているかどうかと、装着されている場合のホルダーのタイプを問い合わせることができます。</p>
+
+
+<h2 id="CurrentDockState">現在のホルダー装着状態を特定する</h2> 
+ 
+<p>ホルダー装着状態の詳細は、{@link android.content.Intent#ACTION_DOCK_EVENT} アクションの sticky ブロードキャストにエクストラとして含まれています。これは sticky であるため、{@link android.content.BroadcastReceiver} を登録する必要はありません。次のコード例に示すように、{@link android.content.Context#registerReceiver registerReceiver()} を呼び出し、{@code null} をブロードキャスト レシーバとして渡します。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>現在のホルダー装着状態は、次のように {@code EXTRA_DOCK_STATE} エクストラから抽出します。<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">現在のホルダーのタイプを特定する</h2> 
+
+<p>端末がホルダーに装着されている場合のホルダーのタイプは、次の 4 つのいずれかです。 
+<ul><li>カー</li>
+<li>卓上</li>
+<li>ローエンド（アナログ）卓上</li>
+<li>ハイエンド（デジタル）卓上</li></ul></p>
+
+<p>最後の 2 つは、Android API レベル 11 で追加されたものです。したがって、ホルダーのタイプだけがわかればよく、デジタルとアナログの区別は問わないという場合は、次のように 3 つすべてについて調べるとよいでしょう。</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">ホルダーの装着状態またはタイプの変化を監視する</h2> 
+
+<p>端末がホルダーに装着されたり、装着が解除されたりするたびに、{@link android.content.Intent#ACTION_DOCK_EVENT} アクションがブロードキャストされます。端末のホルダー装着状態の変化を監視するには、次のコード例に示すように、アプリのマニフェスト内でブロードキャスト レシーバを登録します。</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>レシーバ実装の中でホルダーのタイプと状態を抽出する方法は、前のステップで使用したものと同じです。</p>
diff --git a/docs/html/intl/ja/training/monitoring-device-state/index.jd b/docs/html/intl/ja/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..07897b1
--- /dev/null
+++ b/docs/html/intl/ja/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=電池消費量の最適化
+
+trainingnavtop=true
+startpage=true
+next.title=電池残量と充電状態の監視
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>依存関係と前提条件</h2> 
+<ul>
+  <li>Android 2.0（API レベル 5）以上</li>
+  <li>「<a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>」を読み終えていること</li>
+</ul>
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">サービス</a>
+</ul>
+
+</div> 
+</div>
+
+<p>アプリを開発するときは、ホスト端末の電池消費量への影響を抑えるよう心がける必要があります。このクラスを修了すると、開発するアプリの中でホスト端末の状態を監視し、それに基づいて機能や動作を変更することができるようになります。</p>
+
+<p>接続が失われたときはバックグラウンド サービスの更新を停止する、電池残量が低下したときは更新の頻度を下げるといった対策を講じることにより、ユーザー エクスペリエンスを損なうことなく、アプリが電池消費量に及ぼす影響を最小限に抑えることができます。</p>
+
+<h2>レッスン</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">電池残量と充電状態の監視</a></b></dt>
+  <dd>アプリの更新頻度を変更するために現在の電池残量や充電状態の変化を特定および監視する方法を学習します。</dd>
+
+  <dt><b><a href="docking-monitoring.html">ホルダーの装着状態とタイプの特定と監視</a></b></dt>
+  <dd>最適な更新頻度は、ホスト端末がどのように使用されているかによって異なります。ホルダーの装着状態とタイプに応じてアプリの動作を変更するために、これらを特定および監視する方法を学習します。</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">接続状態の特定と監視</a></b></dt>
+  <dd>インターネットに接続していないときは、オンライン ソースからアプリを更新することはできません。接続状態を調べ、それに応じてバックグラウンド更新の頻度を変更する方法を学習します。また、大量の帯域幅を消費する処理を開始する前に接続が Wi-Fi かモバイル データかを調べる方法も学習します。</dd>
+
+  <dt><b><a href="manifest-receivers.html">オンデマンドでのブロードキャスト レシーバ操作</a></b></dt>
+  <dd>マニフェスト内で宣言したブロードキャスト レシーバのオンとオフを実行時に切り替えます。端末の状態に応じて、不要なレシーバを無効にすることができます。効率を上げるために、状態変化レシーバのオンとオフを切り替える方法や、端末が特定の状態になるまでアクションを延期する方法を学習します。</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html/intl/ja/training/monitoring-device-state/manifest-receivers.jd b/docs/html/intl/ja/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..7635d9f
--- /dev/null
+++ b/docs/html/intl/ja/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=オンデマンドでのブロードキャスト レシーバ操作
+parent.title=電池消費量の最適化
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=接続状態の特定と監視
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>このレッスンの内容</h2>
+<ol>
+  <li><a href="#ToggleReceivers">効率を上げるために状態変化レシーバのオンとオフを切り替える</a></li>
+</ol>
+
+
+<h2>関連項目</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">インテントとインテント フィルタ</a>
+</ul>
+
+</div> 
+</div>
+
+<p>端末の状態変化を監視する最も単純な方法は、監視対象とする状態ごとに {@link android.content.BroadcastReceiver} を作成し、それぞれをアプリのマニフェスト内で登録するというものです。これらの各レシーバ内で、端末の現在の状態に基づいて反復アラームのスケジュールを再設定します。</p>
+
+<p>この方法のデメリットは、これらのレシーバのいずれかがトリガされるたびに端末がスリープから復帰することですが、このことは必要以上に頻繁に発生する可能性があります。</p>
+
+<p>これよりも良い方法は、実行時にブロードキャスト レシーバをオンまたはオフにするというものです。このようにすれば、マニフェスト内で宣言したレシーバを受動的アラームとして使用できます。つまり、このアラームは、必要なときにだけシステム イベントによって呼び出されます。</p>
+ 
+
+<h2 id="ToggleReceivers">効率を上げるために状態変化レシーバのオンとオフを切り替える </h2> 
+ 
+<p>{@link android.content.pm.PackageManager} を使用すると、マニフェスト内で定義されているコンポーネントの有効化状態を切り替えることができます。このコンポーネントにはブロードキャスト レシーバも該当するので、次に示すようにオンとオフを切り替えることができます。</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>この手法を使用すれば、接続が失われたことが判明した場合に、接続状態変化レシーバ以外のレシーバをすべて無効にすることができます。逆に、接続が確立された後は、接続状態変化の受信を停止します。オンラインかどうかを調べるのは、更新を実行する直前や、反復更新アラームのスケジュール再設定の直前だけで十分です。</p>
+
+<p>同じ手法を使用して、大量の帯域幅を必要とするダウンロードを延期することもできます。それには、接続状態の変化をリッスンするブロードキャスト レシーバを有効にしておき、端末が Wi-Fi に接続されたらダウンロードを開始します。</p>
diff --git a/docs/html/intl/ja/training/multiscreen/adaptui.jd b/docs/html/intl/ja/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..8b1e6ac
--- /dev/null
+++ b/docs/html/intl/ja/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=順応性のある UI フローの実装
+parent.title=複数画面のデザイン
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=さまざまな画面密度のサポート
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>このレッスンでの学習内容</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">現在のレイアウトを判別する</a></li>
+  <li><a href="#TaskReactToLayout">現在のレイアウトに合わせて応答する</a></li>
+  <li><a href="#TaskReuseFrag">他のアクティビティのフラグメントを再利用する</a></li>
+  <li><a href="#TaskHandleConfigChanges">画面設定の変更を処理する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">タブレットと携帯端末のサポート</a></li>
+</ul>
+ 
+<h2>試してみる</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>アプリが現在表示しているレイアウトによって、UI フローが異なる可能性があります。たとえば、アプリがデュアルペイン モードであれば、左ペインのアイテムをクリックすると、単に右ペインにコンテンツが表示されるだけですが、シングルペイン モードであれば、コンテンツは（別のアクティビティ内の）コンテンツ専用のペインに表示される必要があります。</p>
+
+
+<h2 id="TaskDetermineCurLayout">現在のレイアウトを判別する</h2>
+
+<p>レイアウトによって実装が多少異なるので、まず、ユーザーが現在どのようなレイアウトを表示しているかを判別する必要があります。たとえば、ユーザーが表示しているレイアウトが「シングルペイン」モードなのか、「デュアルペイン」モードなのかを確認する必要があります。それは、以下のようなコードで、ある特定のビューが存在し、かつ可視になっているかを照会することで可能です:</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>このコードにおいて「article」ペインが使用可能かどうかを照会している点に注目してください。特定のレイアウトの照会をハードコーディングするよりもはるかに柔軟性があります。</p>
+
+<p>その他にも、さまざまなコンポーネントでも対応できる方法として、コンポーネントを操作する前に使用可能かどうかを確認する方法もあります。たとえば、News Reader サンプル アプリでは、メニューを開くボタンがありますが、このボタンは Android 3.0 よりも古いバージョンで動作しているときにしか表示されません（この機能は、API レベル 11 以上の <PH>{@link android.app.ActionBar}</PH> で提供されるため）。そこで、以下のようなコードを追加して、このボタンのイベント リスナーを追加します:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">現在のレイアウトに合わせて応答する</h2>
+
+<p>現在のレイアウトによって、一部のアクションの結果が異なる可能性があります。たとえば、News Reader サンプルでは、見出しリストで見出しをクリックしたとき、デュアルペイン モードの UI の場合は右ペインに記事が表示されますが、シングルペインの UI の場合は別のアクティビティが起動します:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>同様に、アプリがデュアルペイン モードの場合は、ナビ用タブでアクション バーを設定し、一方、シングルペイン モードの場合は、スピナー ウィジェットでナビを設定することになります。したがって、コードでは以下のようにどちらのケースが適切かを調べることも必要です:</p>
+
+<pre>
+final String CATEGORIES[] = { "トップ ニュース 政治", "政治", "経済", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">他のアクティビティのフラグメントを再利用する</h2>
+
+<p>複数の画面に対応するように設計する場合、あるパターンが繰り返されますが、そうしたパターンは、ある画面設定ではペインとして、別の画面設定では別のアクティビティとして実装されるインターフェースの一部に存在します。たとえば、News Reader サンプルでは、ラージ画面の場合はニュース記事のテキストが右ペインに表示されますが、それよりも小さい画面の場合は別のアクティビティになります。</p>
+
+<p>このような場合、通常、複数のアクティビティで同じ <PH>{@link android.app.Fragment}</PH> サブクラスを再利用することでコードの重複を回避できます。たとえば、<code>ArticleFragment</code> は以下のようにデュアルペイン レイアウトで使用されます:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>また、より小さな画面向けのアクティビティ レイアウト内では（レイアウトを使用せずに）再利用されます（<code>ArticleActivity</code>）:</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>当然、これは XML レイアウトでフラグメントを宣言するのと同じ効果がありますが、この場合は、XML レイアウトは必要ありません。このアクティビティのコンポーネントは記事フラグメントしかないからです。</p>
+
+<p>フラグメントを設計する際に注意すべき非常に重要なポイントの 1 つとして、特定のアクティビティに対して強い結合を作成しないことがあります。通常、これは、フラグメントが自分のホスト アクティビティとやり取りするのに必要なあらゆる手段を抽象化したインターフェースを定義し、さらに、そのインターフェースをホスト アクティビティに実装することで可能になります:</p>
+
+<p>たとえば、News Reader アプリの <code>HeadlinesFragment</code> は、まさにそのようになっています:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>これにより、ユーザーが見出しを選択すると、フラグメントは以下のように（特定のハードコーディングされたアクティビティに通知するのではなく）ホスト アクティビティが指定したリスナーに通知します:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>このテクニックについては、<a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">タブレットと携帯端末のサポート</a>で詳しく説明されています。</p>
+
+
+<h2 id="TaskHandleConfigChanges">画面設定の変更を処理する</h2>
+
+<p>インターフェースの各パーツを実装するのに個別のアクティビティを使用している場合、インターフェースの一貫性を維持するために、（向きの変更などの）特定の設定変更に対応できるように注意する必要があります。</p>
+
+<p>たとえば、Android 3.0 以上が動作する一般的な 7 インチ タブレットでは、News Reader サンプルがニュース記事を表示する場合、縦表示では個別のアクティビティを使用しますが、横表示では 2 ペイン レイアウトを使用します。</p>
+
+<p>つまり、縦表示のときに記事閲覧用アクティビティが画面上にある場合、画面の向きが横方向に変わったことを検出したら、コンテンツを 2 ペイン レイアウトで表示するために、そのアクティビティを終了してメインのアクティビティに戻り、適切に応答しなければなりません:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html/intl/ja/training/multiscreen/index.jd b/docs/html/intl/ja/training/multiscreen/index.jd
new file mode 100644
index 0000000..ff84f8a
--- /dev/null
+++ b/docs/html/intl/ja/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=複数画面のデザイン
+
+trainingnavtop=true
+startpage=true
+next.title=さまざまな画面サイズのサポート
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>必要な知識と前提条件</h2> 
+
+<ul>
+  <li>Android 1.6 以上（サンプル アプリを使用するには 2.1 以上）</li>
+  <li><a
+href="http://developer.android.com/guide/components/activities.html">アクティビティ</a>と<a href="http://developer.android.com/guide/components/fragments.html">フラグメント</a>の基礎知識</li>
+  <li>Android <a
+href="http://developer.android.com/guide/topics/ui/index.html">ユーザー インターフェース</a>の開発経験</li>
+  <li><a
+href="{@docRoot}tools/extras/support-library.html">サポート ライブラリ</a>の利用（一部の機能で必要）</li>
+</ul>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a></li>
+</ul>
+ 
+<h2>試してみる</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android は、小さな携帯電話から大きなテレビまで、画面サイズも種類もさまざまなデバイスに搭載できます。そのため、できる限り多くのユーザーが使用できるように、すべての画面サイズに対応できるようアプリを設計することが重要になります。</p>
+
+<p>しかし、さまざまな種類のデバイスに対応できるだけでは十分ではありません。画面サイズによって、ユーザーが操作できることが決まってくるため、本当にユーザーを満足させてよい印象を持ってもらうためには、アプリが単に複数の画面をサポートするだけでは不十分です: 画面設定ごとにユーザー エクスペリエンスを最適化する必要があります。<em></em><em></em></p>
+
+<p>このクラスは、いくつかの画面設定に合わせて最適化されたユーザー インターフェースを実装する方法を提供します。</p>
+
+<p>各レッスンで紹介されているコードは、複数の画面に合わせて最適化する際、ベスト プラクティスとなるサンプル アプリから抜粋したものです。このサンプルを（右側から）ダウンロードして、再利用可能なコードのソースとしてご自分のアプリに使用することができます。</p>
+
+<p class="note"><strong>注:</strong> このクラスと関連サンプルでは、<a
+href="{@docRoot}tools/extras/support-library.html">サポート ライブラリ</a>を使用します。理由は、Android 3.0 未満のバージョンで <PH>{@link android.app.Fragment}</PH> API を使用するためです。このクラスのすべての API を使用するには、ライブラリをダウンロードして、アプリに追加する必要があります。</p>
+ 
+
+<h2>レッスン</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">さまざまな画面サイズのサポート</a></b></dt> 
+    <dd>このレッスンでは、さまざまな画面サイズに適したレイアウトを（柔軟なビュー サイズ、 <PH>{@link android.widget.RelativeLayout}</PH>、画面サイズと画面の向きの修飾子、エイリアス フィルタ、ナインパッチ ビットマップを使用して）設計する方法について学習します。</dd> 
+ 
+  <dt><b><a href="screendensities.html">さまざまな画面密度のサポート</a></b></dt> 
+    <dd>このレッスンでは、（密度非依存ピクセルを使用し、各密度に適したビットマップを提供して）ピクセル密度が異なる画面をサポートする方法について学習します。</dd> 
+ 
+  <dt><b><a href="adaptui.html">順応性のある UI フローの実装</a></b></dt> 
+    <dd>このレッスンでは、いくつかの画面サイズ/密度の組み合わせに適した方法（実行時にアクティブなレイアウトを検出する方法、現在のレイアウトに合わせて応答する方法、画面設定の変更を処理する方法）で UI を実装する方法について学習します。</dd> 
+</dl> 
diff --git a/docs/html/intl/ja/training/multiscreen/screendensities.jd b/docs/html/intl/ja/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..3482d5c
--- /dev/null
+++ b/docs/html/intl/ja/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=さまざまな画面密度のサポート
+parent.title=複数画面のデザイン
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=さまざまな画面サイズのサポート
+previous.link=screensizes.html
+next.title=順応性のある UI フローの実装
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#TaskUseDP">密度非依存ピクセルを使用する</a></li>
+  <li><a href="#TaskProvideAltBmp">代替ビットマップを生成する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">アイコン設計のガイドライン</a></li>
+</ul>
+
+<h2>試してみる</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>このレッスンでは、異なるリソースを生成し、かつ解像度非依存単位を使用して、異なる画面密度をサポートする方法について学習します。</p>
+
+<h2 id="TaskUseDP">密度非依存ピクセルを使用する</h2>
+
+<p>レイアウトを設計する際に回避すべきよくある落とし穴の 1 つとして、絶対ピクセルを使用して距離やサイズを定義することがあります。ピクセルを使用してレイアウトのサイズを定義すると、画面によってピクセル密度が異なるため、問題が起こります。したがって、同じピクセル数では、デバイスが異なる場合に物理サイズが異なる可能性があります。そのため、サイズを指定する場合は、常に <code>dp</code> 単位や <code>sp</code> 単位を使用します。<code>dp</code> とは、1 ピクセルの物理サイズが 160 dpi に相当する密度非依存ピクセルです。<code>sp</code> も基本単位は同じですが、ユーザーの優先テキスト サイズによってサイズが決まるので（スケール非依存ピクセル）、テキスト サイズを定義する際にはこの単位を使用する必要があります（ただし、レイアウト サイズには絶対に使用しないこと）。</p>
+
+<p>たとえば、2 つのビューの間にスペースを挿入する場合は、<code>px</code> ではなくて <code>dp</code> を使用します:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>テキスト サイズを指定する場合は、常に <code>sp</code> を使用します:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">代替ビットマップを生成する</h2>
+
+<p>Android は、画面密度がさまざまなデバイスで動作するため、それぞれの汎用密度バケット（低密度、中密度、高密度、超高密度）に合わせてビットマップ リソースを生成する必要があります。そうすることで、すべての画面密度で画質とパフォーマンスが向上します。</p>
+
+<p>これらの画像を生成するには、ベクター形式の未加工リソースから、次のサイズ スケールを使用して密度別に画像を生成する必要があります:</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2.0
+  <li><code>hdpi</code>: 1.5
+  <li><code>mdpi</code>: 1.0（基準）
+  <li><code>ldpi</code>: 0.75
+</ul></p>
+
+<p>つまり、200&times;200 画像（<code>xhdpi</code> デバイス用）を生成する場合、同じリソースを 150&times;150 画像（<code>hdpi</code> デバイス用）、100&times;100 画像（<code>mdpi</code> デバイス用）、75&times;75（<code>ldpi</code> デバイス用）でも生成する必要があります。</p>
+
+<p>さらに、生成した画像を <code>res/</code> 下の適切なサブディレクトリに配置することで、アプリが動作するデバイスの画面密度に基づいて、自動的に適切な画像が表示されます:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>また、<code>&#64;drawable/awesomeimage</code> を参照する場合は常に画面の dpi に基づいて、適切なビットマップが選択されます。</p>
+
+<p>アプリ用のアイコン アセットを作成するためのヒントとガイドラインについては、<a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">アイコン設計のガイドライン</a>をご覧ください。</p>
+
diff --git a/docs/html/intl/ja/training/multiscreen/screensizes.jd b/docs/html/intl/ja/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..3655a33
--- /dev/null
+++ b/docs/html/intl/ja/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=さまざまな画面サイズのサポート
+parent.title=複数画面のデザイン
+parent.link=index.html
+
+trainingnavtop=true
+next.title=さまざまな画面密度のサポート
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>このレッスンでの学習内容</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">「wrap_content」と「match_parent」を使用する</a></li>
+  <li><a href="#TaskUseRelativeLayout">RelativeLayout を使用する</a></li>
+  <li><a href="#TaskUseSizeQuali">サイズ修飾子を使用する</a></li>
+  <li><a href="#TaskUseSWQuali">最小幅修飾子を使用する</a></li>
+  <li><a href="#TaskUseAliasFilters">レイアウト エイリアスを使用する</a></li>
+  <li><a href="#TaskUseOriQuali">画面の向きの修飾子を使用する</a></li>
+  <li><a href="#TaskUse9Patch">ナインパッチ ビットマップを使用する</a></li>
+</ol>
+
+<h2>関連ドキュメント</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">複数画面のサポート</a></li>
+</ul>
+
+<h2>試してみる</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">サンプル アプリのダウンロード</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>このレッスンでは、異なる画面サイズを以下のような方法でサポートする方法について学習します:</p>
+<ul> 
+  <li>画面に収まるようにレイアウト サイズを適切に変更する</li> 
+  <li>画面設定に基づいて適切な UI レイアウトを表示する</li> 
+  <li>適切な画面に適切なレイアウトを適用する</li>
+  <li>適切にサイズ調整したビットマップを表示する</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">「wrap_content」と「match_parent」を使用する</h2> 
+
+<p>レイアウトをさまざまな画面サイズに柔軟に対応させるには、一部のビュー コンポーネントの幅と高さに <code>"wrap_content"</code> と <code>"match_parent"</code> を使用する必要があります。<code>"wrap_content"</code> を使用すると、ビューの幅や高さがそのビュー内にコンテンツが収まるのに必要な最小サイズに設定されます。一方、<code>"match_parent"</code>（API レベル 8 より前の名称は <code>"fill_parent"</code>）を使用すると、コンポーネントがその親ビューのサイズに一致するまで拡大されます。</p>
+
+<p>ハードコーディングされたサイズの代わりに <code>"wrap_content"</code> と <code>"match_parent"</code> を使用することで、ビューはそれぞれ、そのビューに必要なスペースだけを使用したり、空きスペースを埋めるまで拡大したりします。次に例を示します:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>このサンプルでは、特定のサイズではない <code>"wrap_content"</code> と <code>"match_parent"</code> をコンポーネント サイズにどのように使用しているかに注目してください。こうすることで、異なる画面のサイズと向きにレイアウトを正しく対応させることができます。</p>
+
+<p>たとえば、このレイアウトを縦表示と横表示で表示したときの見え方を以下に示します。コンポーネントのサイズが幅と高さに自動的に適合している点に注目してください:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>図 1.</strong> News Reader サンプル アプリの縦表示（左）と横表示（右）</p>
+
+
+<h2 id="TaskUseRelativeLayout">RelativeLayout を使用する</h2> 
+
+<p>ネストされた <PH>{@link android.widget.LinearLayout} インスタンスや、</PH> <code>"wrap_content"</code> と <code>"match_parent"</code> のサイズの組み合わせを使用すると、かなり複雑なレイアウトを作成できます。しかし、 <PH>{@link android.widget.LinearLayout}</PH> では、子ビューの空間的な位置関係を正確に制御することはできません。 <PH>{@link android.widget.LinearLayout} のビューは、</PH> 単に一列に並ぶだけです。子ビューに対して直線以外のさまざまな配置を実現する必要がある場合は、 <PH>{@link android.widget.RelativeLayout}</PH>を使用することでうまくいくことがよくあります。たとえば、1 つの子ビューを画面の左側に配置し、もう 1 つの子ビューを右側に配置できます。</p>
+
+<p>次に例を示します:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>図 2 は、このレイアウトの QVGA 画面での見え方を示しています。</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>図 2.</strong> QVGA 画面（スモール画面）のスクリーンショット</p>
+
+<p>図 3 は、このレイアウトのラージ画面での見え方を示しています。</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>図 3.</strong> WSVGA 画面（ラージ画面）のスクリーンショット</p>
+
+<p>コンポーネントのサイズが変更されても、 <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>で指定されたとおりに空間的な位置関係が維持されていることがわかります。</p>
+
+ 
+<h2 id="TaskUseSizeQuali">サイズ修飾子を使用する</h2> 
+
+<p>柔軟なレイアウトや相対的なレイアウトから得られる恩恵は、前のセクションで説明したことくらいです。これらのレイアウトはコンポーネントの内部や周囲のスペースを引き延ばすことでさまざまな画面に対応しますが、それぞれの画面サイズに合った最高のユーザー エクスペリエンスを実現していない可能性があります。したがって、アプリでは、柔軟なレイアウトの実装だけではなく、さまざまな画面設定に合わせた複数の代替レイアウトも必要になります。これは、<a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">設定修飾子</a>を使用することで実現可能です。設定修飾子により、ランタイムが現在のデバイスの設定に基づいて適切なリソース（画面サイズ別のレイアウト デザインなど）を自動的に選択できます。</p>
+
+<p>たとえば、多くのアプリでは、ラージ画面用に「2 ペイン」パターンを実装しています（一方のペインに項目リスト、もう一方のペインにそのコンテンツを表示することが可能です）。タブレットやテレビは両方のペインを同時に表示できるほど十分に大きい画面ですが、携帯端末の画面では 2 つのペインを別々に表示する必要があります。そのようなレイアウトを実装するには、次のようなファイルが必要になります:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>、シングルペイン（デフォルト）レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>、2 ペイン レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>2 番目のレイアウトのディレクトリ名の <code>large</code> 修飾子に注目してください。このレイアウトは、ラージ（7 インチ以上のタブレットなど）と分類された画面のデバイスで選択されます。それよりも小さいデバイスでは、その他のレイアウト（修飾子なし）が選択されます。</p>
+
+
+<h2 id="TaskUseSWQuali">最小幅修飾子を使用する</h2>
+
+<p>Android 3.2 未満のデバイスでデベロッパーが抱えていた問題の 1 つに、Dell Streak、初代 Galaxy Tab、7 インチ タブレット全般を含む、「ラージ」画面サイズの分類があります。しかし、多くのアプリでは、すべて「ラージ」画面と見なされたとしても、このカテゴリ内のデバイスのサイズに合わせて異なるレイアウト（5 インチと 7 インチのデバイス用など）を表示したい場合があります。そこで、Android 3.2 では「最小幅」修飾子などが導入されました。</p>
+
+<p>最小幅修飾子を使用すると、dp で指定した特定の最小幅の画面を対象とすることができます。たとえば、一般的な 7 インチ タブレットは最小幅が 600 dp なので、これらの画面の UI で 2 つのペイン（ただし、それよりも小さい画面ではシングル リスト）を表示したい場合は、前のセクションで説明した 2 つのレイアウトをシングルペイン レイアウト用と 2 ペイン レイアウト用としてそのまま利用できます。ただし、<code>large</code> サイズ修飾子の代わりに、<code>sw600dp</code> を使用して、最小幅が 600 dp の画面では 2 ペイン レイアウトになるよう指定します:</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>、シングルペイン（デフォルト）レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>、2 ペイン レイアウト:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>つまり、最小幅が 600dp 以上のデバイスでは <code>layout-sw600dp/main.xml</code>（2 ペイン）レイアウトが選択され、それよりも小さい画面では <code>layout/main.xml</code>（シングルペイン）レイアウトが選択されるということです。</p>
+
+<p>ただし、Android 3.2 未満のデバイスではこの修飾子は機能しません。これは <code>sw600dp</code> をサイズ修飾子として認識できないためです。したがって、引き続き <code>large</code> 修飾子も使用する必要があります。そこで、<code>res/layout-sw600dp/main.xml</code> と同じ内容の <code>res/layout-large/main.xml</code> という名前のファイルも必要になります。次のセクションでは、このようにレイアウト ファイルの重複を避けるためのテクニックについて学習します。</p>
+
+
+<h2 id="TaskUseAliasFilters">レイアウト エイリアスを使用する</h2> 
+
+<p>最小幅修飾子は、Android 3.2 以上でしか利用できません。したがって、旧バージョンとの互換性を維持するために、あいまいなサイズ分類（small、normal、large、xlarge）も併用することが必要です。たとえば、携帯端末ではシングルペイン UI、7 インチ タブレットやテレビなどの大きなデバイスではマルチペイン UI を表示するよう UI を設計する場合、以下のようなファイルが必要になります:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> シングルペイン レイアウト</li>
+<li><code>res/layout-large:</code> マルチペイン レイアウト</li>
+<li><code>res/layout-sw600dp:</code> マルチペイン レイアウト</li>
+</ul></p>
+
+<p>最後の 2 つのファイルは同じものです。一方は Android 3.2 デバイス用で、もう一方は旧バージョンの Android を搭載したタブレットとテレビ用です。</p>
+
+<p>このようにタブレット/テレビ用として同じファイルを使用することで起こる重複（さらに、その結果メンテナンスが困難になる状況）を避けるために、エイリアス ファイルを使用できます。たとえば、次のようなレイアウトを定義できます:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>、シングルペイン レイアウト</li>
+<li><code>res/layout/main_twopanes.xml</code>、2 ペイン レイアウト</li>
+</ul>
+
+<p>さらに、次の 2 つのファイルを追加します:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>最後の 2 つのファイルの内容は同じですが、実際のレイアウトは定義していません。これらのファイルは、単に <PH>{@code main}</PH> を <PH>{@code main_twopanes}</PH>へのエイリアスになるように設定しただけです。これらのファイルには <code>large</code> と <code>sw600dp</code> セレクタが含まれているので、Android のバージョンに関係なく（
+<PH>Android 3.2 未満のタブレット/テレビは {@code large} に一致し、</PH>Android 3.2 以上のタブレット/テレビは <code>sw600dp</code> に一致します）タブレット/テレビに適用されます。</p>
+
+
+<h2 id="TaskUseOriQuali">画面の向きの修飾子を使用する</h2> 
+
+<p>横表示と縦表示が両方とも正しく表示されるレイアウトもありますが、ほとんどのレイアウトは調整が必要になります。以下に、News Reader サンプル アプリの各画面のサイズと向きでレイアウトがどのように表示されるかを示します:</p>
+
+<p><ul>
+<li><b>スモール画面、縦表示:</b> シングル ペイン、ロゴ付き</li>
+<li><b>スモール画面、横表示:</b> シングル ペイン、ロゴ付き</li>
+<li><b>7 インチ タブレット、縦表示:</b> シングル ペイン、アクション バー付き</li>
+<li><b>7 インチ タブレット、横表示:</b> デュアル ペイン、ワイド、アクション バー付き</li>
+<li><b>10 インチ タブレット、縦表示:</b> デュアル ペイン、ナロー、アクション バー付き</li>
+<li><b>10 インチ タブレット、横表示:</b> デュアル ペイン、ワイド、アクション バー付き</li>
+<li><b>テレビ、横表示:</b> デュアル ペイン、ワイド、アクション バー付き</li>
+</ul></p>
+
+<p>これらの各レイアウトは、<code>res/layout/</code> ディレクトリ内の XML ファイルに定義されています。各レイアウトをさまざまな画面設定に割り当てるには、アプリでレイアウト エイリアスを使用して、各設定に対応付けます:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>これで、考えられるすべてのレイアウトが定義されました。あとは、設定修飾子を使用して、適切なレイアウトを各設定にマッピングするだけです。そのためには、以下のようなレイアウト エイリアス テクニックを使用することができます:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">ナインパッチ ビットマップを使用する</h2>
+
+<p>異なる画面サイズをサポートするには、画像リソースも異なるサイズに対応できないといけません。たとえば、ボタンの背景は、適用されるボタンの形状が異なってもサイズが合わなければいけません。</p>
+
+<p>サイズ変更可能なコンポーネントでシンプルな画像を使用すると、ランタイムによって画像が一様に拡大縮小されるので、いくぶん期待はずれの結果になることがすぐにわかります。これは、ナインパッチ ビットマップを使用することで解決します。ナインパッチ ビットマップとは、拡大可能な領域と拡大不可能な領域が指定された特殊なフォーマットの PNG ファイルです。</p>
+
+<p>そのため、サイズが変化するコンポーネントで使用するビットマップをデザインする場合は、常にナインパッチを使用してください。ビットマップをナインパッチに変換するには、まず、通常の画像を用意します（図 4: わかりやすく 4 倍に拡大しています）。</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>図 4.</strong> <code>button.png</code></p>
+
+<p>次に、 <ode
+href="{@docRoot}tools/help/draw9patch.html">SDK の <code>draw9patch</code></a> ユーティリティ（<code>tools/</code> ディレクトリにあります）からナインパッチを実行して、左境界線と上境界線上にピクセル（ドット）を描くことで拡大する領域にマークを付けます。また、右境界線と下境界線上にピクセルを描くことで、コンテンツを入れる領域をマークできます（図 5）。</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>図 5.</strong> <code>button.9.png</code></p>
+
+<p>境界線上に黒いピクセルがあることに注目してください。左境界線と上境界線上のものは画像を拡大できる領域で、右境界線と下境界線上のものはコンテンツを配置する領域を示しています。</p>
+
+<p>さらに、<code>.9.png</code> という拡張子にも注目してください。この拡張子は必ず使用してください。そうすることで、通常の PNG 画像ではなく、ナインパッチ画像であることがフレームワークによって検出されます。</p>
+
+<p>この背景を（<code>android:background="&#64;drawable/button"</code> を設定して）コンポーネントに適用すると、ボタンのサイズに合わせて適切に画像が拡大します（図 6 のさまざまなサイズを参照）。</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>図 6</strong><code>button.9.png</code> ナインパッチを使用したさまざまなサイズのボタン</p>
+
diff --git a/docs/html/intl/ko/training/monitoring-device-state/battery-monitoring.jd b/docs/html/intl/ko/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..2eacccf
--- /dev/null
+++ b/docs/html/intl/ko/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+﻿page.title=배터리 수준 및 충전 상태 모니터링
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+next.title=도킹 상태와 유형 확인 및 모니터링
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#DetermineChargeState">현재 충전 상태 확인</a></li>
+  <li><a href="#MonitorChargeState">충전 상태 변경사항 모니터링</a></li>
+  <li><a href="#CurrentLevel">현재 배터리 수준 확인</a></li>
+  <li><a href="#MonitorLevel">배터리 수준 중요 변경사항 모니터링</a></li>
+</ol>
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>백그라운드 업데이트가 배터리 수명에 미치는 영향을 줄이기 위하여 백그라운드 업데이트 빈도수를 변경하는 경우, 현재 배터리 수준과 충전 상태부터 확인하는 것이 좋습니다.</p>
+
+<p>애플리케이션 업데이트 수행이 배터리 수명에 미치는 영향은 배터리 수준 및 기기의 충전 상태에 따라 다릅니다. 기기를 AC 충전기로 충전하는 동안 업데이트 수행이 미치는 영향은 무시해도 좋습니다. 따라서 기기가 범용 충전기에 연결되어 있을 때는 대부분 새로고침 빈도를 최대화할 수 있습니다. 반대로 기기가 충전 중이 아니라면, 업데이트 빈도를 줄이는 것이 배터리 수명 연장에 도움이 됩니다.</p>
+
+<p>마찬가지로 배터리가 거의 방전된 경우, 업데이트 빈도를 줄이거나 중단할 수 있습니다.</p>
+
+
+<h2 id="DetermineChargeState">현재 충전 상태 확인</h2> 
+ 
+<p>먼저 현재 충전 상태를 확인하는 것부터 시작합니다. {@link android.os.BatteryManager}는 배터리 충전 상태 등 충전 정보를 스티키 {@link android.content.Intent}를 통해 브로드캐스트합니다.</p>
+
+<p>스티키 인텐트이므로 {@link android.content.BroadcastReceiver}를 등록할 필요가 없으며 아래 코드 상의 리시버와 같이 간단히 {@code registerReceiver}을(를) 호출하여 {@code null}에 제출하면 현재 배터리 상태가 담긴 인텐트가 반환됩니다. 여기에 실제 {@link android.content.BroadcastReceiver} 개체 사용할 수 있으나, 이후 섹션에서 업데이트를 다루게 되므로 그럴 필요는 없습니다.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>현재 충전 상태와 어떤 충전기(USB 또는 AC 전원)로 충전하는지 추출할 수 있습니다.<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>일반적으로 기기가 AC 충전기에 연결된 경우 백그라운드 업데이트 빈도를 최대화합니다. USB를 통해 충전하는 경우 업데이트 빈도를 낮춥니다. 배터리가 방전 중이라면 빈도를 더 많이 낮추도록 합니다.</p>
+
+
+<h2 id="MonitorChargeState">충전 상태 변경사항 모니터링</h2> 
+
+<p>충전 상태는 수시로 변하므로 충전 상태의 변경사항을 확인하고 이에 따라 업데이트 주기를 변경하는 것이 중요합니다.</p>
+
+<p>{@link android.os.BatteryManager}는 기기가 전원에 연결되어 있는지 여부와 관계없이 언제나 액션을 브로드캐스트합니다. 앱이 실행되지 않는 동안에도 이벤트를 수신하는 것이 중요합니다. 특히 백그라운드 업데이트를 실행하기 위해 앱을 시작하는 빈도수에 이벤트가 영향을 주기 때문입니다. 따라서 두 이벤트를 수신하려면 매니페스트에서 {@link android.content.BroadcastReceiver}를 등록하여 인텐트 필터 내에 {@link android.content.Intent#ACTION_POWER_CONNECTED}와 {@link android.content.Intent#ACTION_POWER_DISCONNECTED}를 정의해야 합니다.</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>다음의 {@link android.content.BroadcastReceiver} 구현에서 이전 단계에서 설명한 대로 현재 충전 상태와 방법을 알아낼 수 있습니다.</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">현재 배터리 수준 확인</h2> 
+
+<p>현재 배터리 수준을 확인하는 것이 유용한 경우도 있습니다. 배터리 충전이 수준 이하인 경우 백그라운드 업데이트 빈도를 줄일 수 있습니다.</p>
+
+<p>다음은 배터리 상태 정보가 담긴 인텐트에서 현재 배터리 수준 및 충전 상태를 추출하는 방법입니다.</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">배터리 수준 중요 변경사항 모니터링</h2> 
+
+<p>배터리 상태를 지속적으로 확인하는 것은 쉽지 않지만, 꼭 그럴 필요도 없습니다.</p>
+
+<p>배터리 수준을 지속적으로 모니터링하는 것은 앱의 다른 작업보다 배터리에 더 큰 영향을 미칩니다. 따라서 기기가 배터리 전원 부족 상태가 되거나 이를 벗어날 때 등 중요한 변경사항만 확인하는 것이 좋습니다.</p>
+
+<p>다음 코드는 매니페스트의 브로드캐스트 리시버 내의 인텐트 필터를 보여줍니다. 배터리가 얼마 남지 않거나{@link android.content.Intent#ACTION_BATTERY_LOW} 배터리 상태가 회복되었을 때{@link android.content.Intent#ACTION_BATTERY_OKAY} 전달되는 메시지를 수신할 수 있습니다.</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>배터리 충전 상태가 매우 낮은 경우 백그라운드 업데이트를 사용하지 않는 것이 좋습니다. 전화기가 꺼져버리면 최신 데이터를 제공하는 것이 의미가 없기 때문입니다.</p>
+
+<p>기기를 충전하는 것은 곧 기기를 도크에 집어넣는 것과 같은 경우가 많습니다. 다음 강의는 현재 도크 상태를 확인하고 기기 도킹의 변경사항을 모니터링하는 방법을 보여줍니다.</p>
+
diff --git a/docs/html/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..5666b98
--- /dev/null
+++ b/docs/html/intl/ko/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+﻿page.title=연결 상태 확인 및 모니터링
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=도킹 상태와 유형 확인 및 모니터링
+previous.link=docking-monitoring.html
+next.title=온디맨드로 브로드캐스트 수신기 조작
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#DetermineConnection">인터넷에 연결되어 있는지 확인</a></li>
+  <li><a href="#DetermineType">인터넷 연결 유형 확인</a></li>
+  <li><a href="#MonitorChanges">연결 변경사항 모니터링</a></li>
+</ol>
+
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+
+<p>반복 알람과 백그라운드 서비스는 일반적으로 인터넷 리소스 및 캐시 데이터로부터 애플리케이션의 업데이트를 예약하거나 긴 시간이 필요한 다운로드를 실행하는 데 사용됩니다. 하지만 인터넷에 연결되어 있지 않거나 연결이 매우 느려 다운로드를 완료하지 못한다면 업데이트 예약을 해도 소용이 없겠죠?</p>
+
+<p>인터넷에 연결되었는지, 어떤 연결 방식인지를 확인하기 위하여 {@link android.net.ConnectivityManager}를 사용할 수 있습니다.</p>
+
+
+<h2 id="DetermineConnection">인터넷에 연결되어 있는지 확인</h2> 
+ 
+<p>인터넷에 연결되어 있지 않는 경우 인터넷 리소스를 기반으로 한 업데이트 예약을 할 필요가 없습니다. 다음은 활성 네트워크를 쿼리하고 인터넷이 연결되어 있는지 확인하기 위한 {@link android.net.ConnectivityManager} 사용법을 보여줍니다.</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">인터넷 연결 유형 확인</h2> 
+
+<p>현재 사용할 수 있는 인터넷 연결 유형을 확인할 수도 있습니다.</p>
+
+<p>연결은 모바일 데이터, WiMAZ, Wi-Fi 및 이더넷 연결을 통해 제공될 수 있습니다. 아래와 같이 활성 네트워크의 유형을 쿼리하면, 사용 가능한 대역폭에 따라 업데이트 빈도를 변경할 수 있습니다.</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>모바일 데이터 비용은 Wi-Fi보다 높은 경향이 있으므로, 모바일 연결인 경우 앱의 업데이트 빈도를 줄여야 합니다. 마찬가지로 Wi-Fi로 연결되기까지 큰 용량의 다운로드는 일시 중지해야 합니다.</p>
+
+<p>업데이트를 비활성화한 경우, 인터넷 연결이 재개되면 업데이트를 다시 시작하기 위해 연결 변경사항을 알고 있는 것이 중요합니다.</p>
+
+
+<h2 id="MonitorChanges">연결 변경사항 모니터링</h2> 
+
+<p>연결 정보가 변경될 때마다 {@link android.net.ConnectivityManager}는 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}({@code "android.net.conn.CONNECTIVITY_CHANGE"}) 액션을 브로드캐스트합니다. 변경사항을 수신하거나 적절히 백그라운드 업데이트를 다시 시작 또는 일시 중지하기 위해 매니페스트에서 브로드캐스트 리시버를 등록할 수 있습니다.</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>연결 정보는 수시로 변경될 수 있습니다. 모바일과 Wi-Fi 간에 이동할 때마다 브로드캐스트가 실행됩니다. 따라서 업데이트나 다운로드를 일시 중지한 경우에만 브로드캐스트를 확인하는 것이 좋습니다. 업데이트를 시작하기 전이나 이전에 업데이트를 일시 중지했던 경우에만 확인하는 것으로 충분합니다.</p>
+
+<p>이 기술은 다음 강의에서 설명하는 매니페스트에서 선언한 브로드캐스트 리시버의 전환이 필요합니다.</p>
diff --git a/docs/html/intl/ko/training/monitoring-device-state/docking-monitoring.jd b/docs/html/intl/ko/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..0cd61a0
--- /dev/null
+++ b/docs/html/intl/ko/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+﻿page.title=도킹 상태와 유형 확인 및 모니터링
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= 배터리 수준 및 충전 상태 모니터링
+previous.link=battery-monitoring.html
+next.title= 연결 상태 확인 및 모니터링
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#CurrentDockState">오디오 포커스 요청</a></li>
+  <li><a href="#DockType">현재 도크 유형 확인</a></li>
+  <li><a href="#MonitorDockState">도크 상태 또는 유형 변경사항 모니터링</a></li>
+</ol>
+
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Android 기기는 여러 종류의 도크로 도킹될 수 있습니다. 여기에는 카폰 또는 홈 도크와 디지털 및 아날로그 도크가 포함됩니다. 많은 도크가 도킹된 기기에 전기를 공급하므로 일반적으로 충전 상태와 도크 상태는 밀접한 관련이 있습니다.</p>
+
+<p>전화의 도크 상태가 업데이트 빈도에 어떻게 영향을 미치는지는 앱에 따라 다릅니다. 스포츠 센터 앱이라면 데스크톱 도크에서 업데이트 빈도를 높이고 카폰 도크에 연결된 경우 업데이트를 완전히 사용 중지해도 좋습니다. 반대로 교통 상황을 제공하는 앱이라면 카폰 도크에서 업데이트를 최대화해도 좋습니다.</p>
+
+<p>도크 상태는 스티키 {@link android.content.Intent}로 브로드캐스트되어 기기가 도킹되었는지 여부와 도킹되었다면 어떤 종류의 도크인지 알아낼 수 있습니다. </p>
+
+
+<h2 id="CurrentDockState">현재 도킹 상태 확인</h2> 
+ 
+<p>도크 상태의 세부사항은 {@link android.content.Intent#ACTION_DOCK_EVENT} 액션의 스티키 브로드캐스트 내에 추가로 포함됩니다. 스티키 브로드캐스트이므로 {@link android.content.BroadcastReceiver}를 등록할 필요가 없습니다. 다음 스니펫에 표시된 브로드캐스트 수신기와 같이 간단히 {@link android.content.Context#registerReceiver registerReceiver()}를 호출하여 {@code null}에 제출할 수 있습니다. </p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>{@code EXTRA_DOCK_STATE} 추가로부터 현재 도킹 상태를 추출할 수 있습니다.<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">현재 도크 유형 확인</h2> 
+
+<p>4가지 유형의 도크가 있습니다. 
+<ul><li>카폰</li>
+<li>데스크</li>
+<li>저가형(아날로그) 데스크</li>
+<li>고가형(디지털) 데스크</li></ul></p>
+
+<p>마지막 두 가지 옵션은 API 수준 11의 Android에만 제공되어 있으므로, 디지털 또는 아날로그에 상관하지 않고 관심 있는 세 가지 도크 유형에 대해 확인하는 것이 좋습니다.</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">도크 상태 또는 유형 변경사항 모니터링</h2> 
+
+<p>도킹 상태가 바뀌면 {@link android.content.Intent#ACTION_DOCK_EVENT} 액션이 브로드캐스트됩니다. 기기의 도크 상태 변경사항을 모니터링하려면 아래에 표시된 대로 애플리케이션 매니페스트에서 브로드캐스트 리시버를 등록하세요.</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>이전 단계에서 설명한 기술을 사용하여 리시버 구현에서 도크 유형 및 상태를 추출할 수 있습니다.</p>
diff --git a/docs/html/intl/ko/training/monitoring-device-state/index.jd b/docs/html/intl/ko/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..f96e2e1
--- /dev/null
+++ b/docs/html/intl/ko/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+﻿page.title=배터리 수명 최적화
+
+trainingnavtop=true
+startpage=true
+next.title=배터리 수준 및 충전 상태 모니터링
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>요구사항과 선행조건</h2> 
+<ul>
+  <li>Android 2.0(API 수준 5) 또는 이상</li>
+  <li> <a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a> 사용 경험</li>
+</ul>
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">서비스</a>
+</ul>
+
+</div> 
+</div>
+
+<p>좋은 앱은 호스트 기기의 배터리 수명에 미치는 영향이 미미해야 합니다. 강의를 통해 호스트 기기의 상태에 따라 기능과 동작을 수정하는 것을 모니터링하는 앱을 구축할 수 있게 됩니다.</p>
+
+<p>연결이 끊겼을 때 백그라운드 서비스 업데이트를 사용 중지하거나, 배터리 수준이 낮을 때 업데이트 빈도를 줄이는 조치를 취하여, 사용자 환경을 손상시키지 않고 배터리 수명에 미치는 영향을 최소화할 수 있습니다.</p>
+
+<h2>강의</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">배터리 수준 및 충전 상태 모니터링</a></b></dt>
+  <dd>충전 상태에서 현재 배터리 수준 및 변경사항을 확인 및 모니터링하여 앱의 업데이트 빈도를 변경하는 법을 알아보세요.</dd>
+
+  <dt><b><a href="docking-monitoring.html">도킹 상태와 유형 확인 및 모니터링</a></b></dt>
+  <dd>최적의 새로고침 빈도는 호스트 기기의 사용 방법에 따라 달라질 수 있습니다. 앱의 동작에 영향을 미치는 도킹 상태와 도크 유형을 확인 및 모니터링하는 방법을 알아보세요.</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">연결 상태 확인 및 모니터링</a></b></dt>
+  <dd>인터넷 연결 없이 온라인 소스를 통해 앱을 업데이트할 수 없습니다. 연결 상태를 확인하여 백그라운드 업데이트 빈도를 변경하는 방법을 알아보세요. 고대역폭 작업을 시작하기 전에 Wi-Fi 또는 모바일 연결을 확인하는 방법도 알 수 있습니다.</dd>
+
+  <dt><b><a href="manifest-receivers.html">온디맨드로 브로드캐스트 수신기 조작</a></b></dt>
+  <dd>매니페스트 내에 선언했던 브로드캐스트 리시버는 현재 기기 상태에서 필요 없는 것을 사용 중지하도록 런타임 때 전환될 수 있습니다. 기기가 특정 상태에 도달할 때까지 상태 변화 리시버 및 지연 액션을 전환 및 단계적으로 연결하여 효율성을 향상하는 법을 알아보세요.</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html/intl/ko/training/monitoring-device-state/manifest-receivers.jd b/docs/html/intl/ko/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..c5c311b
--- /dev/null
+++ b/docs/html/intl/ko/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+﻿page.title=온디맨드로 브로드캐스트 수신기 조작
+parent.title=배터리 수명 최적화
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=연결 상태 확인 및 모니터링
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#ToggleReceivers">효율성 향상을 위한 상태 변화 리시버의 전환 및 단계적 연결</a></li>
+</ol>
+
+
+<h2>참고자료</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">인텐트 및 인텐트 필터</a>
+</ul>
+
+</div> 
+</div>
+
+<p>기기 상태 변경을 모니터링하는 가장 간단한 방법은 모니터링하는 각 상태에 대해 {@link android.content.BroadcastReceiver}를 만들어 각각을 애플리케이션 매니페스트에 등록하는 것입니다. 그러면 각 리시버 내에서 현재 기기 상태를 기반으로 반복 알람의 일정을 간단히 변경할 수 있습니다.</p>
+
+<p>이 방법의 부작용은 리시버 중 하나라도 실행되면 매번 앱이 기기의 절전 모드를 해제시킨다는 것입니다.</p>
+
+<p>더 나은 방법은 런타임 때 브로드캐스트 리시버를 사용 중지 또는 사용하도록 설정하는 것입니다. 이렇게 하면 매니페스트에 선언한 리시버를 필요할 때만 시스템 이벤트에 의해 실행되는 수동적인 알람으로 사용할 수 있습니다.</p>
+ 
+
+<h2 id="ToggleReceivers">효율성 향상을 위한 상태 변화 수신기의 전환 및 단계적 연결 </h2> 
+ 
+<p>{@link android.content.pm.PackageManager}를 사용하여 아래에서 표시된 대로 모든 사용 또는 사용 중지하기 원하는 브로드캐스트 리시버를 포함하여 매니페스트 내에 정의된 모든 요소의 사용 가능 상태를 전환할 수 있습니다.</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>이 방법을 사용하면 연결이 없음을 확인한 경우 연결 변경 리시버를 제외한 모든 리시버를 사용 중지할 수 있습니다. 반대로 한 번 연결되면 연결 변경사항의 수신을 중지할 수 있으며, 업데이트를 수행하고 반복 업데이트 알람의 일정을 변경하기 전에 온라인 상태인지만 간단히 확인할 수 있습니다.</p>
+
+<p>높은 대역폭을 요구하는 다운로드를 중지시키는 데 동일한 기술을 사용할 수 있습니다. 연결 변경을 수신하는 브로드캐스트 리시버를 사용하도록 설정하고 반드시 Wi-Fi에 연결한 후에 다운로드를 시작하도록 합니다.</p>
diff --git a/docs/html/intl/ko/training/multiscreen/adaptui.jd b/docs/html/intl/ko/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..cb7b66c
--- /dev/null
+++ b/docs/html/intl/ko/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+﻿page.title=조정형 UI 플로우 구현
+parent.title=다양한 화면 지원
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=다양한 화면 밀도 지원
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>강의 목표</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">현재 레이아웃 확인</a></li>
+  <li><a href="#TaskReactToLayout">현재 레이아웃에 대한 대응</a></li>
+  <li><a href="#TaskReuseFrag">다른 액티비티에 프래그먼트 재사용</a></li>
+  <li><a href="#TaskHandleConfigChanges">화면 구성 변경의 처리</a></li>
+</ol>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">태블릿 및 휴대전화 지원</a></li>
+</ul>
+ 
+<h2>다운로드 </h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>현재 애플리케이션이 표시하는 레이아웃에 따라 UI 플로가 달라질 수 있습니다. 예를 들어 애플리케이션이 이중 창 모드로 되어 있는 경우에는 왼쪽 창에 있는 항목을 클릭하면 오른쪽 창에 콘텐츠가 표시되고, 단일 창 모드로 되어 있는 경우에는 콘텐츠가 해당 창에 표시됩니다(다른 액티비티에서).</p>
+
+
+<h2 id="TaskDetermineCurLayout">현재 레이아웃 확인</h2>
+
+<p>각 레이아웃을 구현하는 방식이 약간씩 다르므로 가장 먼저 해야 할 일은 현재 사용자에게 어떤 레이아웃이 표시되는지 확인하는 것입니다. 예를 들어, 사용자가 '단일 창' 모드에 있는지 혹은 '이중 창' 모드에 있는지 파악할 수 있습니다. 이는 특정 뷰가 존재하고 그 뷰가 표시되는지 조회하면 됩니다.</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>이 코드는 'article' 창을 사용할 수 있는지 여부를 조회하며 이러한 방식이 특정 레이아웃에 대한 조회를 하드코딩하는 것보다 훨씬 유연한 방식입니다.</p>
+
+<p>다른 구성요소의 존재 여부에 맞게 앱을 조정하는 또 다른 방법은 구성요소에 대한 작업을 수행하기 전에 해당 구성요소를 사용할 수 있는지 확인하는 것입니다. 예를 들어 뉴스 리더 샘플 앱의 경우, 메뉴를 여는 버튼이 있긴 하지만 이 버튼은 Android 3.0 이전 버전에서 실행되는 경우에만 존재합니다(API 수준 11 이상에서  <PH>{@link android.app.ActionBar}</PH> 가 그 기능을 대신하기 때문). 따라서 이 버튼에 대한 이벤트 리스너를 추가하기 위해 다음과 같이 할 수 있습니다.</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">현재 레이아웃에 대한 대응</h2>
+
+<p>현재 레이아웃에 따라 일부 액션의 결과가 달라질 수 있습니다. 예를 들어 뉴스 리더 샘플의 헤드라인 목록에서 헤드라인을 클릭하면 UI가 이중 창 모드인 경우에는 기사가 오른쪽 창에서 열리지만, UI가 단일 창 모드인 경우에는 별도의 액티비티가 실행됩니다.</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>마찬가지로, 앱이 이중 창 모드인 경우에는 탐색용 탭이 포함된 작업 표시줄이 설정되지만, 앱이 단일 창 모드인 경우에는 스피너 위젯이 포함된 탐색 메뉴가 설정됩니다. 따라서 어떤 경우가 적합한지도 코드에서 확인해야 합니다.</p>
+
+<pre>
+final String CATEGORIES[] = { "Top Stories", "Politics", "Economy", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">다른 액티비티에 프래그먼트 재사용</h2>
+
+<p>다양한 화면의 디자인에 반복되는 패턴에는 일부 화면 구성에서는 창으로 구현되고 다른 화면 구성에서는 별도의 액티비티로 구현되는 인터페이스가 일부 있습니다. 예를 들어 뉴스 리더 샘플에서 뉴스 기사 텍스트가 큰 화면에서는 오른쪽 창에 표시되지만 작은 화면에서는 별도의 액티비티입니다.</p>
+
+<p>이러한 경우 일반적으로 동일한  <PH>{@link android.app.Fragment}</PH> 하위 클래스를 여러 액티비티에 재사용하여 코드 중복을 피할 수 있습니다. 예를 들어 <code>ArticleFragment</code>는 이중 창 레이아웃에서 사용되며 </p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>작은 화면의 액티비티 레이아웃에 레이아웃 없이 재사용됩니다(<code>ArticleActivity</code>).</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>당연히 이는 XML 레이아웃에서 프래그먼트(fragment)를 명시하는 것과 같은 효과가 있지만 이 경우에는 아티클 프래그먼트가 이 액티비티의 유일한 구성요소이기 때문에 XML 레이아웃은 불필요한 작업이 됩니다.</p>
+
+<p>프래그먼트를 디자인할 때 염두에 두어야 할 매우 중요한 점 한 가지는 특정 액티비티에 대한 강한 커플링을 만들지 말아야 한다는 점입니다. 이렇게 하려면 일반적으로 프래그먼트가 호스트 액티비티와 상호작용해야 하는 모든 방식을 추상화하는 인터페이스를 정의하면 됩니다. 그러면 호스트 액티비티가 해당 인터페이스를 구현합니다.</p>
+
+<p>예를 들어 뉴스 리더 앱의 <code>HeadlinesFragment</code>가 정확하게 그 일을 해 줍니다.</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>그런 다음 사용자가 헤드라인을 선택하면 프래그먼트가 하드코딩된 특정 액티비티를 알리지 않고 호스트 액티비티가 지정한 리스너를 알립니다.</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>이 기술은 <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">태블릿 및 휴대전화 지원</a> 가이드에서 자세히 설명되어 있습니다.</p>
+
+
+<h2 id="TaskHandleConfigChanges">화면 구성 변경 처리</h2>
+
+<p>인터페이스 중 일부를 구현하는데 별도의 액티비티를 사용 중인 경우 인터페이스의 일관성을 유지하기 위해 특정 구성의 변경(예: 화면 전환)에 대응해야 합니다.</p>
+
+<p>예를 들어 Android 3.0 이상을 실행하는 일반적인 7인치 태블릿에서 뉴스 리더 샘플은 세로 모드에서 실행될 때에는 뉴스 기사를 표시하는 데 별도의 액티비티를 사용하지만 가로모드에서는 이중 창(two-pane) 레이아웃을 사용합니다.</p>
+
+<p>즉 사용자가 세로 모드에 있고 기사를 보기 위한 액티비티가 화면에 있는 경우, 방향이 가로로 바뀌었음을 감지하고, 액티비티를 종료한 다음 주요 액티비티로 돌아감으로써 콘텐츠가 이중 창 레이아웃에서 표시되도록 적절하게 대응해야 합니다.</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html/intl/ko/training/multiscreen/index.jd b/docs/html/intl/ko/training/multiscreen/index.jd
new file mode 100644
index 0000000..d9e09b0
--- /dev/null
+++ b/docs/html/intl/ko/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+﻿page.title=다양한 화면 지원
+
+trainingnavtop=true
+startpage=true
+next.title=다양한 화면 크기 지원
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>요구사항과 선행조건</h2> 
+
+<ul>
+  <li>Android 1.6 이상(샘플 앱의 경우  2.1 이상)</li>
+  <li><a
+href="http://developer.android.com/guide/components/activities.html">액티비티</a> 및 <a href="http://developer.android.com/guide/components/fragments.html">프래그먼트</a>에 대한 기본 지식</li>
+  <li>Android <a
+href="http://developer.android.com/guide/topics/ui/index.html"> 사용자 인터페이스</a> 구축 경험</li>
+  <li><a
+href="{@docRoot}tools/extras/support-library.html">호환성 라이브러리</a>를 사용해야 하는 여러 기능</li>
+</ul>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">다양한 화면 지원</a></li>
+</ul>
+ 
+<h2>다운로드 </h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android는 소형 휴대전화에서부터 대형 TV에 이르기까지 다양한 화면 크기의 수많은 기기 유형을 지원합니다. 따라서 애플리케이션이 모든 화면 크기와 호환되어 최대한 많은 사용자가 사용할 수 있도록 디자인하는 것이 중요합니다.</p>
+
+<p>하지만 다양한 기기 유형과 호환되는 것만으로는 충분하지 않습니다. 각 화면 크기에 따라 사용자 상호작용에 유리한 점과 불리한 점이 다릅니다. 따라서 사용자에게 만족을 주고 깊은 인상을 심어주려면 애플리케이션이 단지 여러 화면을 <em>지원</em>하는 데 그치지 않고 화면 구성별로 사용자 환경을 <em>최적화</em>해야 합니다.</p>
+
+<p>이번 강의에서는 여러 화면 구성에 최적화된 사용자 인터페이스를 구현하는 방법을 설명합니다.</p>
+
+<p>각 강의에서 사용되는 코드는 여러 화면에 대한 최적화의 모범 사례를 보여주는 샘플 애플리케이션에서 가져온 것입니다. 샘플(오른쪽)을 다운로드하여 본인의 애플리케이션에 코드로 재사용할 수 있습니다. </p>
+
+<p class="note"><strong>참고:</strong> 이 강의 및 강의와 관련된 샘플은 <a
+href="{@docRoot}tools/extras/support-library.html">호환성 라이브러리</a>를 사용하며 이는 Android 3.0 이하 버전에서 <PH>{@link android.app.Fragment}</PH> API를 사용하기 위해서입니다. 이 강의에서 API를 모두 사용하려면 라이브러리를 다운로드하여 애플리케이션에 추가해야 합니다.</p>
+ 
+
+<h2>강의</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">다양한 화면 크기 지원</a></b></dt> 
+    <dd>이 강의에서는 여러 다양한 화면 크기에 조정되는 레이아웃을 디자인하는 방법(유연한 보기 크기, <PH>{@link android.widget.RelativeLayout}</PH>, 화면 크기 및 방향 한정자, 별칭 필터 및 나인-패치 비트맵 사용하기)을 안내합니다.</dd> 
+ 
+  <dt><b><a href="screendensities.html">다양한 화면 밀도 지원</a></b></dt> 
+    <dd>이 강의에서는 다양한 픽셀 밀도를 가진 화면을 지원하는 방법(밀도 독립형 픽셀(density-independent pixel) 사용하기 및 밀도별로 적합한 비트맵 제공하기)을 설명합니다.</dd> 
+ 
+  <dt><b><a href="adaptui.html">조정형 UI 플로우 구현</a></b></dt> 
+    <dd>이 강의에서는 여러 화면 크기/밀도 조합에 조정되도록 UI 플로우를 구현하는 방법(활성 레이아웃의 런타임 감지, 현재 레이아웃에 따른 대응, 화면 구성 변경 처리)을 설명합니다.</dd> 
+</dl> 
diff --git a/docs/html/intl/ko/training/multiscreen/screendensities.jd b/docs/html/intl/ko/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..5d6e2f3
--- /dev/null
+++ b/docs/html/intl/ko/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+﻿page.title=다양한 화면 밀도 지원
+parent.title=다양한 화면 지원
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=다양한 화면 크기 지원
+previous.link=screensizes.html
+next.title=조정형 UI 플로우 구현
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#TaskUseDP">DIP(Density Independent Pixel) 사용</a></li>
+  <li><a href="#TaskProvideAltBmp">대체 비트맵 제공</a></li>
+</ol>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">여러 화면 지원</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">아이콘 디자인 가이드라인</a></li>
+</ul>
+
+<h2>다운로드 </h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>이 강의에서는 다양한 리소스를 제공하고 해상도 독립형(resolution-independent) 측정 단위를 사용함으로써 다양한 화면 밀도를 지원하는 방법을 설명합니다.</p>
+
+<h2 id="TaskUseDP">DIP(Density Independent Pixel) 사용</h2>
+
+<p>레이아웃을 디자인할 때 범하기 쉬운 실수 중 하나는 절대 픽셀(absolute pixel)을 사용하여 거리나 크기를 정의하는 것입니다. 각 화면은 픽셀 밀도가 서로 다른데 레이아웃 크기를 픽셀로 정의하면 동일한 픽셀 수치가 다른 기기에서 다른 물리적 크기와 대응할 수 있어 문제가 됩니다. 따라서 크기를 지정할 때에는 항상 <code>dp</code> 또는 <code>sp</code> 단위를 사용하시기 바랍니다. <code>dp</code>는 160dpi에서 픽셀의 물리적 크기에 대응하는 밀도 독립형 픽셀(Density Independent Pixel)입니다. <code>sp</code>는 동일한 기본 단위이지만 사용자의 기본 텍스트 크기에 따라 확대/축소될 수 있으므로(배율 독립형 픽셀(Scale Independent Pixel)임) 텍스트 크기를 정의할 때 이 측정 단위를 사용해야 합니다(레이아웃 크기에 사용해서는 안됨).</p>
+
+<p>예를 들어 두 개의 보기 사이에 여백을 지정할 때 <code>px</code>가 아닌 <code>dp</code>를 사용합니다.</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>텍스트 크기를 지정할 때에는 항상 <code>sp</code>를 사용합니다.</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">대체 비트맵 제공</h2>
+
+<p>Android는 화면 밀도가 다양한 기기에서 실행되므로 각각의 일반화된 밀도 종류(저, 중, 고 및 초고 밀도)에 맞춤화된 비트맵 리소스를 제공해야 합니다. 이렇게 하면 모든 화면 밀도에서 좋은 그래픽 품질 및 성능을 얻는데 도움이 됩니다.</p>
+
+<p>이러한 이미지를 생성하려면 벡터 형식의 원본 리소스부터 시작해야 하며 다음 크기 배율을 사용하여 각 밀도에 사용할 이미지를 생성해야 합니다.</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2.0
+  <li><code>hdpi</code>: 1.5
+  <li><code>mdpi</code>: 1.0 (기선)
+  <li><code>ldpi</code>: 0.75
+</ul></p>
+
+<p>즉 <code>xhdpi</code> 기기에 대해 200x200 이미지를 생성하는 경우 <code>hdpi</code> 기기에 대해 동일한 리소스를 150x150으로 생성해야 하며 <code>mdpi</code> 기기에 대해서는 100x100, <code>ldpi</code> 기기에 대해서는 75x75으로 동일한 리소스를 생성해야 합니다.</p>
+
+<p>그런 다음 생성된 이미지 파일을 <code>res/</code> 아래의 적절한 하위 디렉토리에 배치하면 시스템에서 애플리케이션이 실행되는 기기의 화면 밀도에 따라 정확한 이미지 파일을 자동으로 선택합니다.</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>그런 다음 언제든지 <code>&#64;drawable/awesomeimage</code>를 참조하면 시스템이 화면의 dpi에 따라 적합한 비트맵을 선택합니다.</p>
+
+<p>애플리케이션에 사용할 아이콘 저작물 제작에 대한 자세한 도움말 및 가이드라인은 <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">아이콘 디자인 가이드라인</a>을 참조하세요.</p>
+
diff --git a/docs/html/intl/ko/training/multiscreen/screensizes.jd b/docs/html/intl/ko/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..f2e77a6
--- /dev/null
+++ b/docs/html/intl/ko/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=다양한 화면 크기 지원
+parent.title=다양한 화면 지원
+parent.link=index.html
+
+trainingnavtop=true
+next.title=다양한 화면 밀도 지원
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>강의 목표</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">'wrap_content' 및 'match_parent' 사용</a></li>
+  <li><a href="#TaskUseRelativeLayout">RelativeLayout 사용</a></li>
+  <li><a href="#TaskUseSizeQuali">크기 한정자 사용</a></li>
+  <li><a href="#TaskUseSWQuali">최소 너비 한정자 사용</a></li>
+  <li><a href="#TaskUseAliasFilters">레이아웃 별칭 사용</a></li>
+  <li><a href="#TaskUseOriQuali">방향 한정자 사용</a></li>
+  <li><a href="#TaskUse9Patch">나인-패치 비트맵 사용</a></li>
+</ol>
+
+<h2>참고자료</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">다양한 화면 지원</a></li>
+</ul>
+
+<h2>다운로드 </h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">샘플 앱 다운로드</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>이 강의에서는 다양한 화면 크기를 지원하는 방법을 설명합니다.</p>
+<ul> 
+  <li>화면에 맞게 레이아웃 크기 조정</li> 
+  <li>화면 구성에 따라 적합한 UI 레이아웃 제공</li> 
+  <li>올바른 화면에 올바른 레이아웃 적용</li>
+  <li>정확하게 확대되는 비트맵 제공</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">'wrap_content' 및 'match_parent' 사용</h2> 
+
+<p>레이아웃이 다양한 화면 크기에 따라 유연하게 조정되도록 하려면 일부 뷰 구성요소의 너비와 높이에 <code>"wrap_content"</code> 및 <code>"match_parent"</code>를 사용해야 합니다. <code>"wrap_content"</code>를 사용하면 뷰의 너비와 높이가 해당 뷰 내에 콘텐츠가 들어가는데 필요한 최소 크기로 설정되는 반면, <code>"match_parent"</code>(API 수준 8 이전에는 <code>"fill_parent"</code>라고도 함)를 사용하면 구성요소가 확장되어 부모뷰의 크기와 일치하게 됩니다.</p>
+
+<p>하드코딩된 크기 대신 <code>"wrap_content"</code> 크기 값을 사용하면 뷰가 해당 뷰에 필요한 여백만을 사용하며 <code>"match_parent"</code> 크기 값을 사용하면 뷰가 확대되어 사용 가능한 여백을 채웁니다. 예를 들면 다음과 같습니다.</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>샘플에서 구성요소 크기에 특정 크기가 아닌 <code>"wrap_content"</code> 및 <code>"match_parent"</code>가 사용된 것을 눈여겨 보시기 바랍니다. 이렇게 하면 레이아웃이 다양한 화면 크기 및 방향에 맞게 조정됩니다.</p>
+
+<p>예를 들어 세로 및 가로 모드에서 레이아웃은 다음과 같이 표시됩니다. 구성요소의 크기가 너비와 높이에 맞게 자동으로 조정됩니다.</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>그림 1.</strong> 세로 모드(왼쪽) 및 가로 모드(오른쪽)에서의 뉴스 리더 샘플 앱</p>
+
+
+<h2 id="TaskUseRelativeLayout">RelativeLayout 사용</h2> 
+
+<p>비교적 복잡한 레이아웃을 만들려면 <PH>{@link android.widget.LinearLayout}의 중첩 인스턴스와</PH> <code>"wrap_content"</code> 및 <code>"match_parent"</code> 크기의 조합을 사용합니다. 하지만 <PH>{@link android.widget.LinearLayout}</PH> 을 사용하면 자식뷰의 여백 관계를 정확하게 제어할 수 없으며 <PH>{@link android.widget.LinearLayout}</PH> 단순히 나란하게 표시됩니다. 자식뷰를 일직선이 아닌 다양한 방향으로 표시해야 하는 경우 구성요소 사이의 여백 관계를 중심으로 레이아웃을 지정할 수 있는 <PH>{@link android.widget.RelativeLayout}</PH>을 사용하는 것이 더 좋은 방법일 수 있습니다. 예를 들어 화면 왼쪽에 하나의 자식뷰를, 오른쪽에 다른 자식뷰를 정렬할 수 있습니다.</p>
+
+<p>예를 들면 다음과 같습니다.</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>그림 2는 이 레이아웃이 QVGA 화면에 어떻게 표시되는지 보여줍니다.</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>그림 2.</strong> QVGA 화면(작은 화면)의 스크린샷</p>
+
+<p>그림 3은 이 레이아웃이 큰 화면에서 어떻게 표시되는지 보여줍니다.</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>그림 3.</strong> WSVGA 화면(큰 화면)의 스크린샷</p>
+
+<p>구성요소의 크기가 변하더라도 여백 관계가  <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
+
+ 
+<h2 id="TaskUseSizeQuali">크기 한정자 사용</h2> 
+
+<p>이전 섹션에서 다룬 유연한 레이아웃이나 상대적 레이아웃으로는 한계가 있습니다. 이러한 레이아웃이 구성요소 내부 및 주위의 여백을 확장하여 다양한 화면에 맞게 조정되긴 하지만 화면 크기별로 최적의 사용자 환경을 제공하지는 못할 수 있습니다. 따라서 애플리케이션은 유연한 레이아웃을 구현할 뿐 아니라 다양한 화면 구성을 타겟팅할 수 있도록 다양한 대체 레이아웃을 제공해야 합니다. 그 방법은 런타임이 현재 기기의 구성에 따라 적합한 리소스(예: 화면 크기별로 다른 레이아웃 디자인)를 자동으로 선택하도록 해 주는 <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">구성 한정자</a>를 사용하는 것입니다.</p>
+
+<p>예를 들어 많은 애플리케이션이 큰 화면에 '이중 창(two pane)' 패턴을 구현합니다(한 쪽 창에는 아이템의 목록을 표시하고 다른 창에는 콘텐츠를 표시). 태블릿 및 TV는 두 개의 창 모두가 화면에 동시에 들어갈 정도로 크지만 휴대전화 화면은 두 창을 따로 표시해야 합니다. 따라서 이러한 레이아웃을 구현하려면 다음 파일이 있어야 합니다.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, 단일 창(기본값) 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>, 이중 창 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>두 번째 레이아웃의 디렉토리 이름에서 <code>large</code> 한정자를 눈여겨 보시기 바랍니다. 이 레이아웃은 대형(예: 7인치 태블릿 이상)으로 분류된 화면을 가진 기기에서 선택됩니다. 한정자가 없는 다른 레이아웃은 소형 기기에서 선택됩니다.</p>
+
+
+<h2 id="TaskUseSWQuali">최소 너비 한정자 사용</h2>
+
+<p>Android 3.2 이전 기기에서 개발자가 어려움을 느꼈던 문제 중의 하나는 Dell Streak, 최초의 Galaxy 탭 및 7인치 태블릿에 두루 사용되는 '큰' 화면 크기 빈이었습니다. 하지만 많은 애플리케이션은 화면이 '큰' 기기라 하더라도 이 카테고리(예: 5인치 및 7인치 기기)에 속하는 다양한 기기에 다양한 레이아웃을 표시하고 싶어 합니다. 이것이 Android에서 Android 3.2에 '최소 너비' 한정자를 도입한 이유입니다.</p>
+
+<p>최소 너비 한정자를 사용하면 dp 단위의 특정 최소 너비를 가진 화면을 타겟팅할 수 있습니다. 예를 들어 일반적인 7인치 태블릿에는 600dp라는 최소 너비가 있으므로 이러한 화면에서 두 개의 창에 UI를 사용(작은 화면에서는 단일 목록 사용) 하고 싶은 경우 단일 및 이중 창 레이아웃에 이전 섹션과 동일한 레이아웃을 사용하면 되지만, 이중 창 레이아웃은 최소 너비가 600dp인 화면에 사용한다는 것을 나타내기 위해서 <code>large</code> 크기 한정자 대신 <code>sw600dp</code>를 사용해야 합니다.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, 단일 창(기본값) 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>, 이중 창 레이아웃:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>이는 최소 너비가 600dp 이상인 기기는 <code>layout-sw600dp/main.xml</code>(이중 창) 레이아웃을 선택하는 반면 소형 화면은 <code>layout/main.xml</code> (단일 창) 레이아웃을 선택한다는 것을 의미합니다.</p>
+
+<p>하지만 Android 3.2 이전 기기는 <code>sw600dp</code>를 크기 한정자로 인식하지 않기 때문에 최소 너비 한정자가 제대로 작동하지 않으며 따라서 <code>large</code> 한정자도 계속 사용해야 합니다. 따라서 <code>res/layout-large/main.xml</code>라는 이름의 파일이 있어야 하며 이 파일은 <code>res/layout-sw600dp/main.xml</code>과 동일한 파일입니다. 다음 섹션에서는 이런 식으로 레이아웃 파일이 중복되지 않게 하는 기술을 살펴보겠습니다.</p>
+
+
+<h2 id="TaskUseAliasFilters">레이아웃 별칭 사용</h2> 
+
+<p>최소 너비 한정자는 Android 3.2 이상 버전에서만 사용할 수 있습니다. 따라서 이전 버전과 호환되도록 하려면 추상화 크기 빈(소형, 보통, 대형 및 초대형)을 계속 사용해야 합니다. 예를 들어 휴대전화에서는 단일 창 UI가 표시되고 7인치 태블릿, TV 및 기타 대형 기기에서는 다중 창 UI가 표시되도록 UI를 디자인하려면 다음 파일을 제공해야 합니다.</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> 단일 창 레이아웃</li>
+<li><code>res/layout-large:</code> 다중 창 레이아웃</li>
+<li><code>res/layout-sw600dp:</code> 다중 창 레이아웃</li>
+</ul></p>
+
+<p>마지막 두 개의 파일은 하나는 Android 3.2 기기와 일치하고 다른 하나는 이전 버전의 Android가 탑재된 태블릿 및 TV를 위한 것으로 서로 동일한 파일입니다.</p>
+
+<p>이 경우 별칭 파일을 사용하면 태블릿 및 TV용으로 동일한 파일이 중복되지 않도록 하고 이를 관리해야 하는 번거로움을 없앨 수 있습니다. 예를 들어 다음 레이아웃을 지정할 수 있습니다.</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>, 단일 창 레이아웃</li>
+<li><code>res/layout/main_twopanes.xml</code>, 이중 창 레이아웃</li>
+</ul>
+
+<p>또한 다음 두 개의 파일을 추가합니다.</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>뒤에 있는 두 개의 파일은 콘텐츠는 동일하지만 실제로 레이아웃을 지정하지는 않으며 단지 <PH>{@code main}</PH> 이 <PH>{@code main_twopanes}에 대한 별칭이 되도록 설정합니다.</PH> 이 파일에는 <code>large</code> 및 <code>sw600dp</code> 선택기가 있으므로 Android 버전에 관계없이 태블릿 및 TV에 적용됩니다(3.2 버전 이전의 태블릿 및 TV는
+<PH>{@code large}</PH>,3.2 이후 버전은 <code>sw600dp</code>와 일치).</p>
+
+
+<h2 id="TaskUseOriQuali">방향 한정자 사용</h2> 
+
+<p>일부 레이아웃은 가로 및 세로 방향 모두에서 잘 작동하지만 대부분의 레이아웃은 조정을 통해 많은 이점을 누릴 수 있습니다. 다음은 뉴스 리더 샘플 앱에서 화면 크기와 방향별로 레이아웃이 어떻게 작동하는지 보여줍니다.</p>
+
+<p><ul>
+<li><b>소형 화면, 세로:</b> 단일 창, 로고 표시</li>
+<li><b>소형 화면, 가로:</b> 단일 창, 로고 표시</li>
+<li><b>7인치 태블릿, 세로:</b> 단일 창, 작업 표시줄 표시</li>
+<li><b>7인치 태블릿, 가로:</b> 이중 창, 와이드, 작업 표시줄 표시</li>
+<li><b>10인치 태블릿, 세로:</b> 이중 창, 내로우, 작업 표시줄 표시</li>
+<li><b>10인치 태블릿, 가로:</b> 이중 창, 와이드, 작업 표시줄 표시</li>
+<li><b>TV, 가로:</b> 이중 창, 와이드, 작업 표시줄 표시</li>
+</ul></p>
+
+<p>따라서 이러한 각 레이아웃은 <code>res/layout/</code> 디렉토리의 XML 파일에서 지정됩니다. 그러면 앱은 각 레이아웃을 다양한 화면 구성에 지정하기 위해 레이아웃 별칭을 사용해 레이아웃을 각 구성과 일치시킵니다.</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>가능한 레이아웃을 모두 지정했으므로 구성 한정자를 사용하여 올바른 레이아웃을 각 구성에 매핑하기만 하면 되며 이는 레이아웃 별칭 기술을 사용하면 됩니다.</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">나인-패치 비트맵 사용</h2>
+
+<p>일반적으로 다양한 화면 크기를 지원하려면 이미지 리소스도 다양한 크기에 맞게 조정될 수 있어야 합니다. 예를 들어 버튼 배경은 버튼 배경이 적용되는 모든 버튼 모양과 맞아야 합니다.</p>
+
+<p>구성요소에 크기가 바뀔 수 있는 단순한 이미지를 사용하는 경우 런타임이 이미지를 균등하게 확대하거나 축소하기 때문에 기대에 미치지 못하는 결과가 나옵니다. 이에 대한 해결 방법은 확대될 수 있는 영역과 확대될 수 없는 영역을 나타내는 특별한 형식의 PNG 파일인 나인-패치 비트맵을 사용하는 것입니다.</p>
+
+<p>따라서 다양한 크기를 가진 구성요소에 사용할 비트맵을 디자인할 때에는 항상 나인-패치를 사용하시기 바랍니다. 비트맵을 나인-패치로 변환하려면 일반적인 이미지부터 시작합니다(그림 4, 명확하게 보이도록 4배 줌으로 표시).</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>그림 4.</strong> <code>button.png</code></p>
+
+<p>그 다음 이 이미지에 <ode
+href="{@docRoot}tools/help/draw9patch.html">SDK의 <code>draw9patch</code></a> 유틸리티(<code>tools/</code> 디렉토리에 있음)를 실행합니다. 이 때 왼쪽 및 상단 테두리를 따라 픽셀을 그려 확대되어야 할 영역을 표시할 수 있습니다. 또한 오른쪽 및 하단 테두리를 따라 픽셀을 그려 콘텐츠가 들어가야 할 영역을 표시할 수 있으며 그 결과는 그림 5와 같습니다.</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>그림 5.</strong> <code>button.9.png</code></p>
+
+<p>테두리를 따라 있는 검은색 픽셀을 눈여겨 보시기 바랍니다. 상단 및 왼쪽 테두리의 픽셀은 이미지가 확대될 수 있는 영역을 나타내며 오른쪽 및 하단 테두리는 콘텐츠가 위치해야 하는 영역을 나타냅니다.</p>
+
+<p>또한 <code>.9.png</code> 확장자를 확인하시기 바랍니다. 프레임워크는 이 확장자를 통해 이미지가 일반적인 PNG 이미지가 아닌 나인-패치 이미지임을 감지할 수 있으므로 이 확장자를 사용해야 합니다.</p>
+
+<p><code>android:background="&#64;drawable/button"</code>을 설정하여 이 배경을 구성요소에 적용하면 그림 6의 다양한 크기로 표시된 것처럼 프레임워크가 버튼의 크기를 수용할 수 있도록 이미지를 올바르게 확대합니다.</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>그림 6.</strong> 다양한 크기에 <code>button.9.png</code> 나인-패치를 사용하는 버튼</p>
+
diff --git a/docs/html/intl/ru/training/monitoring-device-state/battery-monitoring.jd b/docs/html/intl/ru/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..26daf04
--- /dev/null
+++ b/docs/html/intl/ru/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=Monitoring the Battery Level and Charging State
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Determining and Monitoring the Docking State and Type
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#DetermineChargeState">Определение текущего состояния зарядки</a></li>
+  <li><a href="#MonitorChargeState">Отслеживание изменений состояния зарядки</a></li>
+  <li><a href="#CurrentLevel">Определение текущего уровня заряда батареи</a></li>
+  <li><a href="#MonitorLevel">Отслеживание существенных изменений уровня заряда батареи</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>Если вы хотите изменить частоту фоновых обновлений, чтобы продлить время работы устройства от батареи, сначала рекомендуется проверить текущий уровень заряда и состояние зарядки.</p>
+
+<p>Именно от этих двух факторов зависит, как обновления повлияют на время работы устройства от батареи. Когда устройство подключено к сети переменного тока, приложение можно обновлять максимально часто, поскольку процесс обновления не будет сказываться на уровне заряда батареи. Если устройство не подключено к сети, следует воздержаться от обновлений, чтобы продлить время его работы от батареи.</p>
+
+<p>Если заряд батареи практически исчерпан, можно снизить частоту обновлений (вплоть до их полного прекращения).</p>
+
+
+<h2 id="DetermineChargeState">Определение текущего состояния зарядки</h2> 
+ 
+<p>Начните с определения текущего состояния зарядки. {@link android.os.BatteryManager} передает все сведения о батарее и зарядке в закрепленном намерении {@link android.content.Intent}, которое содержит также информацию о состоянии зарядки.</p>
+
+<p>Поскольку это намерение является закрепленным, регистрировать {@link android.content.BroadcastReceiver} не нужно. Чтобы получить текущее состояние батареи в виде намерения, нужно вызвать {@code registerReceiver}, передав {@code null} в качестве приемника, как показано в коде ниже. Можно также передать фактический объект {@link android.content.BroadcastReceiver}, но это необязательно, поскольку обработка обновлений будет выполняться позднее.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Можно извлечь данные как о текущем состоянии, так и об источнике зарядки (USB или сеть переменного тока), если устройство заряжается:<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>Как правило, если устройство подключено к сети переменного тока, фоновые обновления можно выполнять с максимальной частотой. Если устройство заряжается через USB, частоту можно несколько сократить, а если устройство не подключено к сети&nbsp;– сократить еще больше.</p>
+
+
+<h2 id="MonitorChargeState">Отслеживание изменений состояния зарядки</h2> 
+
+<p>Состояние зарядки изменяется всякий раз, когда пользователь подключает устройство к источнику питания. Поскольку это случается довольно часто, важно отслеживать изменения этого состояния и соответствующим образом корректировать частоту обновления приложения.</p>
+
+<p>{@link android.os.BatteryManager} передает действие каждый раз, когда устройство подключается к источнику питания или отключается от него. Важно получать эти события, даже если приложение не работает. Они помогут, в частности, определить, как часто будет запускаться приложение для выполнения фоновых обновлений. Чтобы отслеживать их, зарегистрируйте {@link android.content.BroadcastReceiver} в манифесте, задав {@link android.content.Intent#ACTION_POWER_CONNECTED} и {@link android.content.Intent#ACTION_POWER_DISCONNECTED} в фильтре намерений.</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>Соответствующая реализация {@link android.content.BroadcastReceiver} позволяет извлечь данные о текущем состоянии и способе зарядки, как описано в предыдущем шаге.</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">Определение текущего уровня заряда батареи</h2> 
+
+<p>В некоторых случаях целесообразно определять текущий уровень заряда батареи. Если он ниже определенного значения, частоту фоновых обновлений следует уменьшить.</p>
+
+<p>Узнать, каков в настоящий момент заряд батареи, можно путем извлечения данных о текущем и максимальном уровне заряда из намерения состояния батареи, как показано в этом коде:</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">Отслеживание существенных изменений уровня заряда батареи</h2> 
+
+<p>Отслеживать состояние батареи непрерывно не следует,</p>
+
+<p>поскольку при этом нагрузка на батарею будет значительно выше, чем при обычной работе приложения. Рекомендуется отслеживать только существенные изменения уровня заряда, в частности, переход устройства в состояние низкого заряда и обратно.</p>
+
+<p>Фрагмент манифеста, приведенный ниже, относится к фильтру намерений в приемнике широковещательных намерений. Приемник срабатывает, когда батарея устройства переходит в состояние низкого заряда или выходит из него. Для этого прослушиваются события {@link android.content.Intent#ACTION_BATTERY_LOW} и {@link android.content.Intent#ACTION_BATTERY_OKAY}.</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>Общепринятой практикой является отключение всех фоновых обновлений, когда заряд батареи достигает критически низкого уровня. Будет уже неважно, насколько актуальны данные в вашем приложении, если телефон самопроизвольно выключится, прежде чем пользователь успеет их просмотреть.</p>
+
+<p>Во многих случаях начало зарядки устройства совпадает с моментом его установки в док-станцию. В следующем уроке описаны способы определения текущего состояния подключения устройства к док-станции и отслеживания изменений этого состояния.</p>
+
diff --git a/docs/html/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..ca1a942
--- /dev/null
+++ b/docs/html/intl/ru/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=Determining and Monitoring the Connectivity Status
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Determining and Monitoring the Docking State and Type
+previous.link=docking-monitoring.html
+next.title=Manipulating Broadcast Receivers On Demand
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#DetermineConnection">Определение наличия подключения к Интернету</a></li>
+  <li><a href="#DetermineType">Определение типа подключения к Интернету</a></li>
+  <li><a href="#MonitorChanges">Отслеживание изменения возможностей подключения</a></li>
+</ol>
+
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Чаще всего повторяющиеся оповещения и фоновые службы используются для планового обновления приложения из Интернета, кэширования или загрузки больших объемов данных. Однако если подключение к Интернету не установлено или скорость соединения слишком низкая, выполнять загрузку не имеет смысла.</p>
+
+<p>Проверить наличие подключения к Интернету и его тип можно с помощью {@link android.net.ConnectivityManager}.</p>
+
+
+<h2 id="DetermineConnection">Определение наличия подключения к Интернету</h2> 
+ 
+<p>Если подключение отсутствует, нет смысла планировать обновление из Интернета. В приведенном ниже коде показано, как использовать {@link android.net.ConnectivityManager} для отправки запросов об активной сети и определять возможности подключения.</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">Определение типа подключения к Интернету</h2> 
+
+<p>Также можно определить тип доступного в настоящий момент подключения к Интернету.</p>
+
+<p>Устройство может подключаться по сети мобильной связи, WiMAX, Wi-Fi и Ethernet. Получив ответ на запрос о типе активной сети, как показано ниже, можно изменить частоту обновлений на основе ее пропускной способности.</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>Стоимость передачи данных по мобильной сети, как правило, значительно выше, чем по сети Wi-Fi, поэтому частота обновлений в первом случае должна быть ниже. То же касается загрузки большого количества данных: ее следует отложить, пока не будет установлено подключение к сети Wi-Fi.</p>
+
+<p>Когда обновления отключены, необходимо отслеживать изменения доступных соединений, чтобы возобновить их сразу после подключения устройства к Интернету.</p>
+
+
+<h2 id="MonitorChanges">Отслеживание изменения возможностей подключения</h2> 
+
+<p>{@link android.net.ConnectivityManager} передает действие {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) при каждом изменении сведений о подключении. Зарегистрируйте в манифесте приемник широковещательных намерений, чтобы отслеживать эти изменения и запускать (или приостанавливать) фоновые обновления соответствующим образом.</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>Доступные соединения могут меняться очень часто&nbsp;– эта передача инициируется при каждом переключении между сетью мобильной связи и Wi-Fi. Ее рекомендуется отслеживать, только когда необходимо запускать ранее приостановленные обновления или загрузки. Как правило, достаточно проверить наличие подключения к Интернету перед запуском обновления и, если оно отсутствует, приостановить дальнейшие обновления до восстановления соединения.</p>
+
+<p>Для использования этого метода необходимо включать и отключать приемники широковещательных намерений, объявленные в манифесте. В следующем уроке описано, как это делать.</p>
diff --git a/docs/html/intl/ru/training/monitoring-device-state/docking-monitoring.jd b/docs/html/intl/ru/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..d94f357
--- /dev/null
+++ b/docs/html/intl/ru/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=Determining and Monitoring the Docking State and Type
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= Monitoring the Battery Level and Charging State
+previous.link=battery-monitoring.html
+next.title= Determining and Monitoring the Connectivity Status
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#CurrentDockState">Запрос аудиофокуса</a></li>
+  <li><a href="#DockType">Определение типа док-станции</a></li>
+  <li><a href="#MonitorDockState">Отслеживание изменений состояния подключения к док-станции и ее типа</a></li>
+</ol>
+
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Устройства под управлением ОС Android можно подключать к нескольким типам док-станций: настольным, которые делятся на цифровые и аналоговые, и автомобильным. В большинстве случаев устройства заряжаются при подключении к док-станции, поэтому состояние подключения к док-станции часто связано с состоянием зарядки.</p>
+
+<p>Насколько состояние подключения к док-станции влияет на частоту обновления, зависит от конкретного приложения. Например, можно увеличить частоту обновлений приложения, показывающего спортивные новости, когда устройство подключено к настольной док-станции, и полностью отключить обновления при подключении к автомобильной. И наоборот, если используется приложение, которое в фоновом режиме загружает данные о дорожной обстановке, то при подключении устройства к автомобильной док-станции следует выполнять обновления максимально часто.</p>
+
+<p>Состояние подключения к док-станции также передается в виде закрепленного намерения {@link android.content.Intent}, что позволяет запрашивать сведения о наличии подключения к док-станции и ее типе.</p>
+
+
+<h2 id="CurrentDockState">Определение текущего состояния подключения к док-станции</h2> 
+ 
+<p>Сведения о состоянии подключения к док-станции передаются в качестве дополнительных данных в закрепленном оповещении действия {@link android.content.Intent#ACTION_DOCK_EVENT}. Поскольку это закрепленное намерение, регистрировать {@link android.content.BroadcastReceiver} не требуется. Достаточно вызвать {@link android.content.Context#registerReceiver registerReceiver()}, передав {@code null} в качестве приемника широковещательных намерений, как показано в коде ниже.</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>Сведения о текущем состоянии подключения к док-станции можно извлечь из дополнительных данных {@code EXTRA_DOCK_STATE}:<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">Определение типа док-станции</h2> 
+
+<p>Док-станция, к которой подключено устройство, может быть одного из четырех типов: 
+<ul><li>автомобильная;</li>
+<li>настольная;</li>
+<li>настольная с минимальным набором функций (аналоговая);</li>
+<li>настольная с широким набором функций (цифровая).</li></ul></p>
+
+<p>Обратите внимание, что последние два типа поддерживаются только на уровне API&nbsp;11, поэтому, даже если вас не интересует, является ли док-станция цифровой или аналоговой, а интересует только ее тип, рекомендуется выполнять проверку по всем трем типам:</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">Отслеживание изменений состояния подключения к док-станции и ее типа</h2> 
+
+<p>При каждом подключении устройства к док-станции или отключении от нее передается действие {@link android.content.Intent#ACTION_DOCK_EVENT}. Чтобы отслеживать состояние подключения к док-станции, достаточно зарегистрировать в манифесте приложения приемник широковещательных намерений, как показано ниже.</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>Данные о типе док-станции и о состоянии подключения к ней можно извлечь внутри реализации приемника с помощью методов, описанных в предыдущем шаге.</p>
diff --git a/docs/html/intl/ru/training/monitoring-device-state/index.jd b/docs/html/intl/ru/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..c87d9af
--- /dev/null
+++ b/docs/html/intl/ru/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=Optimizing Battery Life
+
+trainingnavtop=true
+startpage=true
+next.title=Monitoring the Battery Level and Charging State
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Требования</h2> 
+<ul>
+  <li>Android 2.0 (API уровня&nbsp;5) или более поздней версии</li>
+  <li>Опыт работы с <a href="{@docRoot}guide/components/intents-filters.html">намерениями и фильтрами намерений</a></li>
+</ul>
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">Службы</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Качественное приложение должно оказывать минимальное влияние на время работы устройства от батареи. В этом уроке вы научитесь создавать приложения, способные изменять функционал и режим работы в зависимости от состояния устройства.</p>
+
+<p>Отключение обновления данных фоновых служб при потере подключения и снижение частоты обновления при низком заряде батареи позволяет снизить расход энергии и продлить работу устройства без подзарядки.</p>
+
+<h2>Уроки</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">Отслеживание уровня заряда батареи и состояния зарядки</a></b></dt>
+  <dd>Вы узнаете, как изменять частоту обновления приложения, определяя и отслеживая текущий уровень заряда батареи и изменение состояния зарядки.</dd>
+
+  <dt><b><a href="docking-monitoring.html">Отслеживание состояния подключения к док-станции и определение ее типа</a></b></dt>
+  <dd>Оптимальная частота обновления зависит от способа использования устройства. Вы узнаете, как определять и отслеживать состояние подключения к док-станции и ее тип, чтобы соответствующим образом корректировать работу приложения.</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">Определение и отслеживание состояния подключения</a></b></dt>
+  <dd>Приложение невозможно обновить через Интернет, если отсутствует подключение. Вы узнаете, как проверить состояние подключения, чтобы при необходимости изменить частоту фоновых обновлений. Также вы научитесь проверять наличие мобильного подключения или подключения по сети Wi-Fi перед началом операций, требующих передачи больших объемов данных.</dd>
+
+  <dt><b><a href="manifest-receivers.html">Операции с приемниками широковещательных намерений по запросу</a></b></dt>
+  <dd>Приемники широковещательных намерений, объявленные в манифесте, можно включать и отключать во время работы приложения. Это позволяет отключать ненужные приемники в зависимости от состояния устройства. Вы узнаете, как повысить эффективность путем включения, отключения или каскадирования приемников изменения состояния и как отложить действие до момента перехода устройства в заданное состояние.</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html/intl/ru/training/monitoring-device-state/manifest-receivers.jd b/docs/html/intl/ru/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..724ee93
--- /dev/null
+++ b/docs/html/intl/ru/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=Manipulating Broadcast Receivers On Demand
+parent.title=Optimizing Battery Life
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Determining and Monitoring the Connectivity Status
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#ToggleReceivers">Включение, отключение и каскадирование приемников изменения состояния для повышения эффективности</a></li>
+</ol>
+
+
+<h2>Дополнительные материалы</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Намерения и фильтры намерений</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Самый простой способ отслеживать изменения состояния устройства&nbsp;– создать приемники {@link android.content.BroadcastReceiver} для каждого отслеживаемого состояния и зарегистрировать их в манифесте приложения. Затем в каждом из этих приемников можно переопределять график повторяющихся оповещений в зависимости от текущего состояния устройства.</p>
+
+<p>Этот способ имеет недостатки: приложение активирует устройство при каждом запуске любого из этих приемников, что далеко не всегда оправданно.</p>
+
+<p>Оптимальный вариант&nbsp;– включать и выключать приемники широковещательных намерений во время работы приложения. Это позволяет использовать приемники, объявленные в манифесте, как пассивные оповещения, которые инициируются системными событиями только в случае необходимости.</p>
+ 
+
+<h2 id="ToggleReceivers">Включение, отключение и каскадирование приемников изменения состояния для повышения эффективности </h2> 
+ 
+<p>{@link android.content.pm.PackageManager} позволяет включать и выключать любые компоненты, определенные в манифесте, в том числе все приемники широковещательных намерений:</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>При разрыве соединения этот метод позволяет выключить все приемники, кроме приемника изменения состояния подключения. И наоборот, когда подключение уже установлено, отслеживать изменения его состояния не требуется. Достаточно проверить наличие подключения к Интернету непосредственно перед обновлением или изменением графика оповещений о регулярном обновлении.</p>
+
+<p>Точно так же можно отложить загрузку, для выполнения которой требуется более высокая пропускная способность. Просто включите приемник широковещательных намерений, который будет отслеживать изменения возможности подключения и инициировать загрузку только после подключения к сети Wi-Fi.</p>
diff --git a/docs/html/intl/ru/training/multiscreen/adaptui.jd b/docs/html/intl/ru/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..490a64a
--- /dev/null
+++ b/docs/html/intl/ru/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=Implementing Adaptative UI Flows
+parent.title=Designing for Multiple Screens
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Supporting Different Screen Densities
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>Содержание урока</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">Определение текущего макета</a></li>
+  <li><a href="#TaskReactToLayout">Дальнейшие действия в зависимости от текущего макета</a></li>
+  <li><a href="#TaskReuseFrag">Повторное использование фрагментов в других активностях</a></li>
+  <li><a href="#TaskHandleConfigChanges">Обработка изменений конфигурации экрана</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Поддержка планшетных ПК и мобильных телефонов</a></li>
+</ul>
+ 
+<h2>Упражнение</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>Алгоритм пользовательского интерфейса зависит от макета, который в данный момент отображается. Например, если приложение работает в двухпанельном режиме, то при нажатии на элемент в левой панели содержание отобразится в правой. В однопанельном режиме содержание откроется отдельно (в другой активности).</p>
+
+
+<h2 id="TaskDetermineCurLayout">Определение текущего макета</h2>
+
+<p>Так как в реализации макетов существуют отличия, первое, что необходимо сделать,&nbsp;– определить, какой макет отображается в данный момент. Например, работает ли приложение в однопанельном или двухпанельном режиме. Для этого создадим запрос о том, существует ли данное представление и отображается ли оно в настоящий момент:</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>Обратите внимание: представленный выше код содержит запрос о том, доступна ли панель article, поскольку это удобнее, чем писать отдельные запросы для каждого макета.</p>
+
+<p>Кроме того, для работы с учетом существующих компонентов можно также проверять их доступность, прежде чем выполнять с ними какие-либо операции. Например, в учебном приложении News Reader есть кнопка, которая служит для доступа в меню, однако она отображается только в операционных системах Android версии ниже, чем 3.0, потому что в последующих версиях ее функцию выполняет элемент <PH>{@link android.app.ActionBar}</PH> на уровне API 11 и выше. Чтобы проверить наличие этой кнопки, добавим прослушиватель событий с помощью следующего кода:</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">Дальнейшие действия в зависимости от текущего макета</h2>
+
+<p>Результаты некоторых операций зависят от текущего макета. Например, если в приложении News Reader в двухпанельном режиме нажать на заголовок в списке, то статья откроется в правой панели. Если же интерфейс работает в однопанельном режиме, будет запущена отдельная активность:</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>Аналогично, в двухпанельном режиме должна отображаться панель действий с навигационными вкладками, а в однопанельном навигация должна быть реализована с помощью раскрывающегося списка. Приложение должно проверять, какой из этих вариантов следует использовать:</p>
+
+<pre>
+final String CATEGORIES[] = { "Лучшие статьи", "Политика", "Экономика", "Новости технологий" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">Повторное использование фрагментов в других активностях</h2>
+
+<p>Одним из примеров повторяющегося фрагмента является реализация части интерфейса как панели в одних конфигурациях и как отдельной активности в других. Например, если приложение News Reader работает на достаточно большом экране, текст новостной статьи отображается в правой панели, а если на маленьком, то он открывается в отдельной активности.</p>
+
+<p>В таких случаях следует повторно использовать подкласс <PH>{@link android.app.Fragment}</PH> в нескольких активностях. Например, в двухпанельном макете используется подкласс <code>ArticleFragment</code>:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>Он же (без макета) используется при работе на маленьком экране (активность <code>ArticleActivity</code>):</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>Результат будет таким же, как если бы мы объявили фрагмент в макете XML, однако в этом случае макет XML не требуется, так как фрагмент article является единственным компонентом этой активности.</p>
+
+<p>При создании фрагментов важно не привязывать их строго к конкретной активности. Для этого можно определить интерфейс с абстрактным описанием всех необходимых способов взаимодействия фрагмента с активностью, в которой он содержится. Затем этот интерфейс нужно реализовать в самой активности.</p>
+
+<p>Например, именно так работает фрагмент <code>HeadlinesFragment</code> в приложении News Reader:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>Затем, когда пользователь выбирает заголовок, фрагмент оповещает об этом не указанную в коде активность, а заданный ею прослушиватель:</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p>Этот метод рассматривается подробнее в разделе <a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">Поддержка планшетных ПК и мобильных телефонов</a>.</p>
+
+
+<h2 id="TaskHandleConfigChanges">Обработка изменений конфигурации экрана</h2>
+
+<p>При реализации отдельных частей интерфейса с помощью разных активностей нужно учитывать, что интерфейс должен уметь реагировать на определенные изменения конфигурации, такие как поворот экрана.</p>
+
+<p>Например, на типичном планшетном ПК с размером экрана 7&nbsp;дюймов под управлением ОС Android 3.0 или более поздней версии при вертикальной ориентации статья в приложении News Reader открывается с помощью отдельной активности, а при горизонтальной используется двухпанельный макет.</p>
+
+<p>Это означает, что если пользователь держит планшетный ПК вертикально и на экране запущена активность для просмотра статьи, приложение должно уметь определить, что ориентация была изменена на горизонтальную. Затем оно должно соответствующим образом отреагировать на изменение, то есть завершить эту активность и вернуться к основной активности, чтобы содержание отобразилось в двухпанельном макете:</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html/intl/ru/training/multiscreen/index.jd b/docs/html/intl/ru/training/multiscreen/index.jd
new file mode 100644
index 0000000..023eaec
--- /dev/null
+++ b/docs/html/intl/ru/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=Designing for Multiple Screens
+
+trainingnavtop=true
+startpage=true
+next.title=Supporting Different Screen Sizes
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>Требования</h2> 
+
+<ul>
+  <li>Android 1.6 или более поздней версии (для запуска учебного приложения требуется версия 2.1 или более поздняя)</li>
+  <li>Начальные знания о компонентах <a
+href="http://developer.android.com/guide/components/activities.html">Activity</a> (активность) и <a href="http://developer.android.com/guide/components/fragments.html">Fragment</a> (фрагмент)</li>
+  <li>Опыт создания <a
+href="http://developer.android.com/guide/topics/ui/index.html">пользовательских интерфейсов</a> для Android</li>
+  <li>Некоторые функции требуют использования <a
+href="{@docRoot}tools/extras/support-library.html">вспомогательной библиотеки</a></li>
+</ul>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких экранов</a></li>
+</ul>
+ 
+<h2>Упражнение</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>На платформе Android работают устройства с самыми разными размерами экрана: от телефонов до телевизоров. Чтобы с вашим приложением могли работать как можно больше пользователей, оно должно корректно отображаться на всех этих устройствах.</p>
+
+<p>Однако совместимость с разными типами устройств&nbsp;– это еще не все. От размера экрана зависит, какие возможности будет иметь пользователь при работе с приложением. Чтобы пользователи действительно остались довольны вашим приложением, оно должно не просто <em>поддерживать</em> разные экраны, но и быть <em>оптимизировано</em> для каждого из них.</p>
+
+<p>Этот модуль посвящен реализации пользовательского интерфейса, оптимизированного для разных конфигураций экрана.</p>
+
+<p>Код, приведенный в каждом уроке, взят из учебного приложения, в котором демонстрируются способы оптимизации для разных экранов. Вы можете загрузить его (в правой части экрана) и использовать части кода в собственном приложении.</p>
+
+<p class="note"><strong>Примечание</strong>. В этом модуле и в учебном приложении используется <a
+href="{@docRoot}tools/extras/support-library.html">вспомогательная библиотека</a>, позволяющая работать с API  <PH>{@link android.app.Fragment}</PH> в версиях до Android 3.0. Чтобы иметь возможность использовать все необходимые API, загрузите библиотеку и добавьте ее в свое приложение.</p>
+ 
+
+<h2>Уроки</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">Поддержка разных размеров экрана</a></b></dt> 
+    <dd>В этом уроке рассказывается, как создать макет, который адаптируется к разным размерам экрана, используя масштабируемые представления, объекты <PH>{@link android.widget.RelativeLayout}</PH>, квалификаторы размера и ориентации, фильтры псевдонимов и растровые изображений формата nine-patch.</dd> 
+ 
+  <dt><b><a href="screendensities.html">Поддержка разных разрешений экрана</a></b></dt> 
+    <dd>В этом уроке рассказывается, как работать с экранами разного разрешения с помощью не зависящих от разрешения пикселей и как подготовить растровые изображения для каждого из них.</dd> 
+ 
+  <dt><b><a href="adaptui.html">Реализация адаптируемых алгоритмов работы пользовательского интерфейса</a></b></dt> 
+    <dd>В этом уроке рассказывается, как реализовать алгоритм работы интерфейса, адаптирующийся к размеру и разрешению экрана, то есть способный определять активный макет во время выполнения приложения, выбирать дальнейшие действия на основе текущего макета и обрабатывать изменения конфигурации экрана.</dd> 
+</dl> 
diff --git a/docs/html/intl/ru/training/multiscreen/screendensities.jd b/docs/html/intl/ru/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..cfd4724
--- /dev/null
+++ b/docs/html/intl/ru/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=Supporting Different Densities
+parent.title=Designing for Multiple Screens
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Supporting Different Screen Sizes
+previous.link=screensizes.html
+next.title=Implementing Adaptative UI Flows
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#TaskUseDP">Использование пикселей, не зависящих от разрешения</a></li>
+  <li><a href="#TaskProvideAltBmp">Предоставление альтернативных растровых изображений</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких экранов</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Рекомендации по созданию значков</a></li>
+</ul>
+
+<h2>Упражнение</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>В этом уроке рассказывается, как создать интерфейс, поддерживающий разные разрешения экрана, за счет использования разных ресурсов и не зависящих от разрешения единиц измерения.</p>
+
+<h2 id="TaskUseDP">Использование пикселей, не зависящих от разрешения</h2>
+
+<p>Разработчики часто допускают одну и ту же ошибку при создании макетов&nbsp;– указывают размеры и расстояния с помощью абсолютных значений в пикселях. Задавать размеры в пикселях не рекомендуется, поскольку из-за различной плотности пикселей на экранах разных устройств фактический размер макета будет неодинаков. Всегда задавайте размеры в единицах <code>dp</code> или <code>sp</code>. <code>dp</code>&nbsp;– это не зависящий от разрешения пиксель, равный физическому пикселю на экране с плотностью 160&nbsp;точек/дюйм. <code>sp</code> является аналогичной единицей измерения, но масштабируется на основе выбранного пользователем размера текста, поэтому ее следует применять для указания величины шрифта, но не размера макета.</p>
+
+<p>Например, если вы задаете расстояние между двумя представлениями, рекомендуется использовать <code>dp</code>, а не <code>px</code>:</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>Для определения размера шрифта всегда используйте <code>sp</code>:</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">Предоставление альтернативных растровых изображений</h2>
+
+<p>Так как платформа Android предназначена для устройств с разными разрешениями экрана, необходимо позаботиться о наличии растровых изображений для каждого из четырех обобщенных типов разрешения: низкого, среднего, высокого и очень высокого. Это обеспечит оптимальное сочетание качества графики и производительности на всех устройствах.</p>
+
+<p>На основе исходного векторного рисунка создайте растровые изображения для каждого из указанных разрешений согласно следующей шкале размеров:</p>
+
+<p><ul>
+  <li><code>xhdpi</code>: 2,0
+  <li><code>hdpi</code>: 1,5
+  <li><code>mdpi</code>: 1,0 (стандартный размер)
+  <li><code>ldpi</code>: 0,75
+</ul></p>
+
+<p>Это означает, что изображение, которое на устройствах с разрешением экрана <code>xhdpi</code> имеет размер 200&nbsp;x&nbsp;200, на устройствах <code>hdpi</code> должно иметь размер 150&nbsp;x&nbsp;150, на устройствах <code>mdpi</code>&nbsp;– 100&nbsp;x&nbsp;100, а на устройствах <code>ldpi</code>&nbsp;– 75&nbsp;x&nbsp;75.</p>
+
+<p>Поместите файлы изображений в соответствующие подкаталоги в папке <code>res/</code>, и система автоматически выберет подходящий в зависимости от разрешения экрана устройства, на котором выполняется приложение:</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>При каждом обращении к файлу <code>&#64;drawable/awesomeimage</code> система будет выбирать изображение, отвечающее разрешению экрана.</p>
+
+<p>Дополнительную информацию и советы можно найти в разделе <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">Рекомендации по созданию значков</a>.</p>
+
diff --git a/docs/html/intl/ru/training/multiscreen/screensizes.jd b/docs/html/intl/ru/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..9684d77
--- /dev/null
+++ b/docs/html/intl/ru/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=Supporting Different Screen Sizes
+parent.title=Designing for Multiple Screens
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Supporting Different Screen Densities
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>Содержание урока</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">Использование параметров wrap_content и match_parent</a></li>
+  <li><a href="#TaskUseRelativeLayout">Использование объекта RelativeLayout</a></li>
+  <li><a href="#TaskUseSizeQuali">Использование квалификаторов размера</a></li>
+  <li><a href="#TaskUseSWQuali">Использование квалификатора Smallest-width</a></li>
+  <li><a href="#TaskUseAliasFilters">Использование псевдонимов макетов</a></li>
+  <li><a href="#TaskUseOriQuali">Использование квалификаторов ориентации</a></li>
+  <li><a href="#TaskUse9Patch">Использование растровых изображений nine-patch</a></li>
+</ol>
+
+<h2>Дополнительные материалы</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">Поддержка нескольких экранов</a></li>
+</ul>
+
+<h2>Упражнение</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">Загрузить учебное приложение</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>В этом уроке описаны следующие аспекты обеспечения совместимости интерфейса с разными экранами:</p>
+<ul> 
+  <li>обеспечение способности макета адаптироваться к размеру экрана;</li> 
+  <li>выбор макета интерфейса, отвечающего конфигурации экрана;</li> 
+  <li>контроль правильности применяемого макета;</li>
+  <li>использование масштабируемых растровых изображений.</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">Использование параметров wrap_content и match_parent</h2> 
+
+<p>Чтобы создать масштабируемый макет, способный адаптироваться к разным экранам, используйте в качестве значений ширины и высоты отдельных компонентов представления параметры <code>"wrap_content"</code> и <code>"match_parent"</code>. Если используется <code>"wrap_content"</code>, для ширины или высоты представления устанавливается минимальное значение, позволяющее уместить содержание на экран, а параметр <code>"match_parent"</code> (известный как <code>"fill_parent"</code> в API до 8&nbsp;уровня) служит для растягивания компонента по размеру родительского представления.</p>
+
+<p>Если указать параметры <code>"wrap_content"</code> и <code>"match_parent"</code> вместо строго заданных размеров, в представлениях будет использоваться минимально необходимое место или они будут растягиваться на всю доступную длину и ширину соответственно. Например:</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>Обратите внимание на то, что в коде учебного приложения размеры компонентов заданы с помощью параметров <code>"wrap_content"</code> и <code>"match_parent"</code>. В результате макет правильно отображается на экранах разных размеров при разных ориентациях.</p>
+
+<p>Например, вот так он выглядит в вертикальной и горизонтальной ориентациях. Обратите внимание на то, как размеры компонентов автоматически адаптируются к длине и ширине:</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>Рисунок 1</strong>. Приложение News Reader при вертикальной (слева) и горизонтальной (справа) ориентации.</p>
+
+
+<h2 id="TaskUseRelativeLayout">Использование объекта RelativeLayout</h2> 
+
+<p>С помощью вложенных экземпляров объекта <PH>{@link android.widget.LinearLayout}</PH> и параметров <code>"wrap_content"</code> и <code>"match_parent"</code> можно создавать достаточно сложные макеты. Однако <PH>{@link android.widget.LinearLayout}</PH> не дает возможности точно управлять взаимным расположением дочерних представлений: в <PH>{@link android.widget.LinearLayout}</PH> они просто помещаются в ряд друг за другом. Если необходимо расположить дочерние представления иным образом, используйте объект <PH>{@link android.widget.RelativeLayout}</PH>, позволяющий задать относительные позиции компонентов. Например, одно дочернее представление можно выровнять по левому краю экрана, а другое&nbsp;– по правому.</p>
+
+<p>Например:</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>На рис.&nbsp;2 показано, как этот макет выглядит на экране QVGA.</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;2</strong>. Скриншот экрана QVGA (маленького размера).</p>
+
+<p>На рис.&nbsp;3 показано, как он выглядит на экране с большей диагональю.</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;3</strong>. Скриншот экрана WSVGA (большего размера).</p>
+
+<p>Обратите внимание: несмотря на изменение размера компонентов их взаимное расположение остается прежним, так как оно задано объектом <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH>.</p>
+
+ 
+<h2 id="TaskUseSizeQuali">Использование квалификаторов размера</h2> 
+
+<p>Масштабируемые или относительные макеты, один из которых продемонстрирован выше, имеют свои ограничения. Хотя они позволяют создать интерфейс, способный адаптироваться к разным экранам за счет растягивания пространства внутри и вокруг компонентов, пользователю может оказаться не слишком удобно работать с таким интерфейсом. Поэтому в приложении должен использоваться не один масштабируемый макет, а несколько альтернативных вариантов для разных конфигураций экрана. Их можно создать с помощью <a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">квалификаторов конфигураций</a>, которые позволяют оперативно выбирать ресурсы, отвечающие текущим параметрам экрана (например, разные варианты макетов для экранов разных размеров).</p>
+
+<p>Многие приложения отображаются на больших экранах в двухпанельном режиме, при котором список элементов расположен в одной панели, а их содержание открывается в другой. Такой режим просмотра удобен на достаточно больших экранах планшетных ПК и телевизоров, однако на экране телефона эти панели следует отображать по отдельности. Для каждого режима просмотра нужно создать отдельный файл.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, однопанельный макет (по умолчанию):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>, двухпанельный макет:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Обратите внимание, что во втором случае в названии каталога использован квалификатор <code>large</code>. Этот макет будет выбран на устройствах, экраны которых считаются большими (например, 7&nbsp;дюймов и более). Первый макет (без квалификаторов) будет выбран для устройств с маленьким экраном.</p>
+
+
+<h2 id="TaskUseSWQuali">Использование квалификатора Smallest-width</h2>
+
+<p>Одной из проблем, с которой сталкивались разработчики приложений для устройств Android версий до 3.2, было слишком общее определение "большого" экрана. Это касалось устройств Dell Streak, первой модели Galaxy Tab и планшетных ПК с экраном размером 7&nbsp;дюймов. Многие приложения требовалось по-разному отображать на разных устройствах (например, с 5- и 7-дюймовыми экранами), хотя они и относились к одной категории "больших" экранов. В Android версии 3.2 и более поздних доступен квалификатор Smallest-width.</p>
+
+<p>Он позволяет определять экраны с заданной минимальной шириной в dp. Например, типичный планшетный ПК с экраном 7&nbsp;дюймов имеет минимальную ширину 600&nbsp;dp, и если вы хотите, чтобы приложение работало на нем в двухпанельном режиме (а на меньших экранах в однопанельном), используйте два макета из предыдущего раздела, но вместо квалификатора размера <code>large</code> укажите <code>sw600dp</code>. В таком случае на экранах, минимальная ширина которых составляет 600&nbsp;dp, будет использоваться двухпанельный макет.</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>, однопанельный макет (по умолчанию):
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>, двухпанельный макет:
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>Это означает, что на устройствах, минимальная ширина экрана которых не меньше 600&nbsp;dp, будет выбран <code>layout-sw600dp/main.xml</code> (двухпанельный макет), а на экранах меньшего размера&nbsp;– <code>layout/main.xml</code> (однопанельный макет).</p>
+
+<p>Следует учесть, что на Android-устройствах до версии 3.2 квалификатор <code>sw600dp</code> не будет работать, поэтому для них по-прежнему нужно использовать <code>large</code>. Таким образом, вам потребуется еще один файл с названием <code>res/layout-large/main.xml</code>, идентичный файлу <code>res/layout-sw600dp/main.xml</code>. В следующем разделе вы познакомитесь с методом, который позволяет избежать дублирования таких файлов макета.</p>
+
+
+<h2 id="TaskUseAliasFilters">Использование псевдонимов макетов</h2> 
+
+<p>Квалификатор Smallest-width работает только на устройствах Android 3.2 или более поздних версий. Для совместимости с более ранними устройствами по-прежнему следует использовать абстрактные размеры (small, normal, large и xlarge). Например, чтобы интерфейс открывался в однопанельном режиме на телефонах и в многопанельном на планшетных ПК с 7-дюймовым экраном, телевизорах и других крупных устройствах, подготовьте следующие файлы:</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> однопанельный макет;</li>
+<li><code>res/layout-large:</code> многопанельный макет;</li>
+<li><code>res/layout-sw600dp:</code> многопанельный макет.</li>
+</ul></p>
+
+<p>Последние два файла идентичны: один из них предназначен для устройств Android 3.2 и новее, а второй для более старых планшетных ПК и телевизоров на платформе Android.</p>
+
+<p>Чтобы не создавать дубликаты файлов и упростить процесс поддержки приложения, используйте псевдонимы. Например, можно определить следующие макеты:</p>
+
+<ul>
+<li><code>res/layout/main.xml</code> (однопанельный макет);</li>
+<li><code>res/layout/main_twopanes.xml</code> (двухпанельный макет).</li>
+</ul>
+
+<p>Затем добавьте следующие два файла:</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>Содержание последних двух файлов одинаково, но сами по себе они не определяют макет. Они служат для того, чтобы назначить файл <PH>{@code main}</PH> в качестве псевдонима <PH>{@code main_twopanes}</PH>. Так как в них используются селекторы <code>large</code> и <code>sw600dp</code>, они применяются к планшетным ПК и телевизорам на платформе Android независимо от версии (для версий до 3.2 используется
+<PH>{@code large}</PH>, а для более новых&nbsp;– <code>sw600dp</code>).</p>
+
+
+<h2 id="TaskUseOriQuali">Использование квалификаторов ориентации</h2> 
+
+<p>Хотя некоторые макеты одинаково хорошо смотрятся в вертикальной и горизонтальной ориентациях, в большинстве случаев интерфейс все же приходится адаптировать. Ниже показано, как изменяется макет в приложении News Reader в зависимости от размера и ориентации экрана.</p>
+
+<p><ul>
+<li><b>Маленький экран, вертикальная ориентация</b>: однопанельный вид с логотипом.</li>
+<li><b>Маленький экран, горизонтальная ориентация</b>: однопанельный вид с логотипом.</li>
+<li><b>Планшетный ПК с 7-дюймовым экраном, вертикальная ориентация</b>: однопанельный вид с панелью действий.</li>
+<li><b>Планшетный ПК с 7-дюймовым экраном, горизонтальная ориентация</b>: двухпанельный вид с панелью действий.</li>
+<li><b>Планшетный ПК с 10-дюймовым экраном, вертикальная ориентация</b>: двухпанельный вид (узкий вариант) с панелью действий.</li>
+<li><b>Планшетный ПК с 10-дюймовым экраном, горизонтальная ориентация</b>: двухпанельный вид (широкий вариант) с панелью действий.</li>
+<li><b>Телевизор, горизонтальная ориентация</b>: двухпанельный вид с панелью действий.</li>
+</ul></p>
+
+<p>Каждый из этих макетов определен в XML-файле в каталоге <code>res/layout/</code>. Чтобы сопоставить их с определенными конфигурациями экрана, в приложении используются псевдонимы:</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>После того как все возможные макеты определены, остается сопоставить каждый из них с подходящей конфигурацией, используя квалификаторы конфигураций. Воспользуемся псевдонимами макетов:</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">Использование растровых изображений nine-patch</h2>
+
+<p>Чтобы интерфейс был совместим с экранами разных размеров, используемые в нем графические элементы также должны быть адаптированы соответствующим образом. Например, фон кнопки должен одинаково хорошо выглядеть независимо от ее формы.</p>
+
+<p>Если использовать для компонентов, размеры которых меняются, обычные изображения, то они будут равномерно сжиматься и растягиваться, и результат будет далек от идеального. Решением являются растровые изображения формата nine-patch&nbsp;– специальные PNG-файлы, содержащие информацию о том, какие области можно растягивать, а какие нет.</p>
+
+<p>Создавая растровые изображения для масштабируемых компонентов, обязательно используйте формат nine-patch. На рис.&nbsp;4 показано обычное растровое изображение (увеличенное в 4&nbsp;раза для наглядности), которое мы переведем в формат nine-patch.</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;4</strong>. <code>button.png</code></p>
+
+<p>Откройте его с помощью утилиты <ode
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a>, входящей в комплект разработчика (в каталоге <code>tools/</code>). Установите метки на левом и верхнем краях, чтобы ограничить области, которые можно растягивать. Можно также провести линию вдоль правого и нижнего краев, как показано на рис.&nbsp;5, чтобы отметить области, в которых содержание должно быть зафиксировано.</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;5</strong>. <code>button.9.png</code></p>
+
+<p>Обратите внимание на черные пиксели по краям. Метки у верхней и левой границ обозначают те области, которые можно растягивать, а метки у правой и нижней границ&nbsp;– те, куда должно быть помещено содержание.</p>
+
+<p>Также обратите внимание на расширение <code>.9.png</code>. Оно должно быть задано именно в таком виде, чтобы система могла определить, что это формат nine-patch, а не обычный PNG-файл.</p>
+
+<p>При применении этого фона к компоненту (с помощью <code>android:background="&#64;drawable/button"</code>) изображение будет растянуто по размеру кнопки, как показано на рис.&nbsp;6.</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>Рисунок&nbsp;6</strong>. Кнопки разных размеров с файлом фона <code>button.9.png</code> в формате nine-patch.</p>
+
diff --git a/docs/html/intl/zh-CN/training/monitoring-device-state/battery-monitoring.jd b/docs/html/intl/zh-CN/training/monitoring-device-state/battery-monitoring.jd
new file mode 100644
index 0000000..0e1ccb7
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/monitoring-device-state/battery-monitoring.jd
@@ -0,0 +1,120 @@
+page.title=监控电池电量和充电状态
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+next.title=确定和监控基座对接状态和类型
+next.link=docking-monitoring.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#DetermineChargeState">确定当前的充电状态</a></li>
+  <li><a href="#MonitorChargeState">监控充电状态的变化</a></li>
+  <li><a href="#CurrentLevel">确定当前的电池电量</a></li>
+  <li><a href="#MonitorLevel">监控电池电量的显著变化</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+ 
+<p>如果您要更改后台更新频率，从而减少更新对电池使用时间的影响，最好先查看当前的电池电量和充电状态。</p>
+
+<p>对应用进行更新会影响电池使用时间，具体取决于设备的电池电量和充电状态。如果用户正在通过交流电源为设备充电，更新应用的影响就可以忽略不计。因此，在大多数情况下，只要设备连接了充电器，您就可以最大程度地提高刷新频率。相反，如果设备在消耗电池电量，那么降低更新频率就可以延长电池使用时间。</p>
+
+<p>同样，您也可以查看电池电量，如果电量即将耗尽，您就可以降低更新频率，甚至停止更新。</p>
+
+
+<h2 id="DetermineChargeState">确定当前的充电状态</h2> 
+ 
+<p>请先确定当前的充电状态。{@link android.os.BatteryManager} 会通过一个包含充电状态的持续 {@link android.content.Intent} 广播所有的电池详情和充电详情。</p>
+
+<p>由于这是个持续 intent，因此您无需通过将传入 {@code null} 的 {@code registerReceiver} 作为接收器直接调用（如下一代码段所示）来注册 {@link android.content.BroadcastReceiver}，系统会返回当前电池状态 intent。您可以在此处传入实际的 {@link android.content.BroadcastReceiver} 对象，不过我们会在下文中介绍如何处理更新，因此您不一定要执行此操作。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_BATTERY_CHANGED);
+Intent batteryStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>如果设备正在充电，则您可以提取当前的充电状态和充电方式（无论是通过 USB 还是交流充电器），如下所示：<p>
+
+<pre>// Are we charging / charged?
+int status = batteryStatus.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                     status == BatteryManager.BATTERY_STATUS_FULL;
+
+// How are we charging?
+int chargePlug = battery.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;</pre>
+
+<p>通常，如果设备连接了交流充电器，您就应最大程度地提高后台更新频率；如果设备通过 USB 充电，请降低更新频率；如果电池在耗电，请进一步降低更新频率。</p>
+
+
+<h2 id="MonitorChargeState">监控充电状态的变化</h2> 
+
+<p>充电状态的改变就像设备连接电源那样容易，因此监控充电状态的变化并相应地调整刷新频率就很重要了。</p>
+
+<p>只要设备连接或断开电源，{@link android.os.BatteryManager} 就会广播相应的操作。即使您的应用没有运行，也请务必接收这些事件，尤其是当这些事件会影响您启动应用以执行后台更新的频率时。因此，您应该通过在 intent 过滤器中定义 {@link android.content.Intent#ACTION_POWER_CONNECTED} 和 {@link android.content.Intent#ACTION_POWER_DISCONNECTED}，在清单中注册 {@link android.content.BroadcastReceiver} 来侦听这两个事件。</p>
+
+<pre>&lt;receiver android:name=".PowerConnectionReceiver">
+  &lt;intent-filter>
+    &lt;action android:name="android.intent.action.ACTION_POWER_CONNECTED"/>
+    &lt;action android:name="android.intent.action.ACTION_POWER_DISCONNECTED"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>在实施相关的 {@link android.content.BroadcastReceiver} 时，您可以按上一步骤所述提取当前的充电状态和充电方式。</p>
+
+<pre>public class PowerConnectionReceiver extends BroadcastReceiver {
+    &#64;Override
+    public void onReceive(Context context, Intent intent) { 
+        int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
+        boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||
+                            status == BatteryManager.BATTERY_STATUS_FULL;
+    
+        int chargePlug = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1);
+        boolean usbCharge = chargePlug == BATTERY_PLUGGED_USB;
+        boolean acCharge = chargePlug == BATTERY_PLUGGED_AC;
+    }
+}</pre>
+
+
+<h2 id="CurrentLevel">确定当前的电池电量</h2> 
+
+<p>在某些情况下，确定当前的电池电量会对您有所帮助。如果电池电量低于一定水平，您可以降低后台更新频率。</p>
+
+<p>您可以从电池状态 intent 中提取要了解的当前电池电量以及电池容量，具体如下所示：</p>
+
+<pre>int level = battery.getIntExtra(BatteryManager.EXTRA_LEVEL, -1);
+int scale = battery.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
+
+float batteryPct = level / (float)scale;</pre>
+
+
+<h2 id="MonitorLevel">监控电池电量的显著变化</h2> 
+
+<p>您无法轻松地对电池状态进行持续监控，不过也无需这么做。</p>
+
+<p>一般来说，与应用的正常行为相比，持续监控电池电量会消耗更多电量。因此，比较合适的做法是只监控电池电量的显著变化（尤其是在设备进入或结束低电量状态的情况下）。</p>
+
+<p>以下清单代码段提取自广播接收器中的 intent 过滤器元素。通过侦听 {@link android.content.Intent#ACTION_BATTERY_LOW} 和 {@link android.content.Intent#ACTION_BATTERY_OKAY}，只要设备的电池进入或结束低电量状态，系统就会触发接收器。</p>
+
+<pre>&lt;receiver android:name=".BatteryLevelReceiver">
+&lt;intent-filter>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_LOW"/>
+  &lt;action android:name="android.intent.action.ACTION_BATTERY_OKAY"/>
+  &lt;/intent-filter>
+&lt;/receiver></pre>
+
+<p>如果电池电量极低，通常比较合适的做法是停用所有后台更新。如果您还没用上更新的数据，手机就自动关机了，那这些数据再新也没有意义。</p>
+
+<p>在很多情况下，将设备插入基座就可以为其充电。下一教程将向您介绍如何确定当前基座状态及如何监控设备对接的变化。</p>
+
diff --git a/docs/html/intl/zh-CN/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/intl/zh-CN/training/monitoring-device-state/connectivity-monitoring.jd
new file mode 100644
index 0000000..8313e08
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/monitoring-device-state/connectivity-monitoring.jd
@@ -0,0 +1,70 @@
+page.title=确定和监控网络连接状态
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=确定和监控基座对接状态和类型
+previous.link=docking-monitoring.html
+next.title=根据需要操作广播接收器
+next.link=manifest-receivers.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#DetermineConnection">确定是否已连接互联网</a></li>
+  <li><a href="#DetermineType">确定互联网连接的类型</a></li>
+  <li><a href="#MonitorChanges">监控连接情况的变化</a></li>
+</ol>
+
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+
+<p>重复提醒和后台服务最常见的用途之一，就是为来自互联网资源的应用数据、缓存数据安排定期更新或执行长时间运行的下载任务。但是，如果您没有连接互联网，或因连接过慢而无法完成下载，那就根本没必要唤醒设备并安排更新了。</p>
+
+<p>您可以使用 {@link android.net.ConnectivityManager} 查看是否确实已连接互联网，如果已连接，您还可以了解当前的连接类型。</p>
+
+
+<h2 id="DetermineConnection">确定是否已连接互联网</h2> 
+ 
+<p>如果设备未连接互联网，就没有必要根据互联网资源安排更新了。以下代码段说明如何使用 {@link android.net.ConnectivityManager} 查询有效网络并确定该网络是否已连接互联网。</p>
+
+<pre>ConnectivityManager cm =
+        (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
+ 
+NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
+boolean isConnected = activeNetwork.isConnectedOrConnecting();</pre>
+
+
+<h2 id="DetermineType">确定互联网连接的类型</h2> 
+
+<p>您也可以确定当前可用的互联网连接的类型。</p>
+
+<p>通过移动数据、WiMAX、Wi-Fi 和以太网连接可提供设备连接。您可以查询有效网络的类型（具体如下所示），以便根据可用带宽调整刷新频率。</p>
+
+<pre>boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;</pre>
+
+<p>移动数据的费用往往比 Wi-Fi 高很多，因此在大多数情况下，如果您使用的是移动连接，就应降低应用更新频率。同样，在没有 Wi-Fi 连接的情况下，您就应暂停较大的下载任务。</p>
+
+<p>停用更新后，请务必侦听连接情况的变化，以便在建立互联网连接后恢复更新。</p>
+
+
+<h2 id="MonitorChanges">监控连接情况的变化</h2> 
+
+<p>只要连接的具体情况发生变化，{@link android.net.ConnectivityManager} 就会广播 {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION} ({@code "android.net.conn.CONNECTIVITY_CHANGE"}) 操作。您可以在清单中注册广播接收器，以便侦听这些变化并相应地恢复（或暂停）后台更新。</p>
+
+<pre>&lt;action android:name="android.net.conn.CONNECTIVITY_CHANGE"/></pre>
+
+<p>设备连接情况的变化可能会非常频繁，只要您在移动数据和 Wi-Fi 之间相互切换，系统就会触发此广播。因此比较合适的做法是，仅当之前暂停了更新或下载时才监控此广播，以便恢复更新或下载。通常，您只需在开始更新前检查互联网连接情况即可，如果未连接互联网，请暂停后续更新，直到连接恢复。</p>
+
+<p>此技巧需要切换您在清单中声明的广播接收器，具体说明请见下一教程。</p>
diff --git a/docs/html/intl/zh-CN/training/monitoring-device-state/docking-monitoring.jd b/docs/html/intl/zh-CN/training/monitoring-device-state/docking-monitoring.jd
new file mode 100644
index 0000000..53b951d
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/monitoring-device-state/docking-monitoring.jd
@@ -0,0 +1,74 @@
+page.title=确定和监控基座对接状态和类型
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+previous.title= 监控电池电量和充电状态
+previous.link=battery-monitoring.html
+next.title= 确定和监控网络连接状态
+next.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#CurrentDockState">确定当前的基座状态</a></li>
+  <li><a href="#DockType">确定当前的基座类型</a></li>
+  <li><a href="#MonitorDockState">监控基座状态或类型的变化</a></li>
+</ol>
+
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+
+<p>Android 设备支持几种不同类型的基座。这些类型包括车载或家用基座以及数字和模拟基座。许多基座可用于为插入的设备充电，因此基座状态通常与充电状态紧密相关。</p>
+
+<p>您可以根据手机的基座状态调整更新频率，具体取决于相关应用。如果设备插入的是桌面基座，您就可以提高体育中心类应用的更新频率；如果设备插入的是车载基座，您就可以完全停用此类更新。相反，如果设备插入的是车载基座且后台服务正在更新路况，您就可以最大程度地提高更新频率。</p>
+
+<p>系统是以持续 {@link android.content.Intent} 的形式广播基座状态的，这样您就可以查询设备是否插入了基座，如果已插入，您还可以查询基座类型。</p>
+
+
+<h2 id="CurrentDockState">确定当前的基座状态</h2> 
+ 
+<p>基座状态详情是以附加信息的形式包含在 {@link android.content.Intent#ACTION_DOCK_EVENT} 操作的持续广播中的。由于这属于持续广播，因此您无需注册 {@link android.content.BroadcastReceiver}。您可以将传入 {@code null} 的 {@link android.content.Context#registerReceiver registerReceiver()} 作为广播接收器直接调用，具体如下一代码段所示。</p>
+
+<pre>IntentFilter ifilter = new IntentFilter(Intent.ACTION_DOCK_EVENT);
+Intent dockStatus = context.registerReceiver(null, ifilter);</pre>
+
+<p>您可以从 {@code EXTRA_DOCK_STATE} 附加信息中提取当前的基座对接状态：<p>
+
+<pre>int dockState = battery.getIntExtra(EXTRA_DOCK_STATE, -1);
+boolean isDocked = dockState != Intent.EXTRA_DOCK_STATE_UNDOCKED;</pre>
+
+
+<h2 id="DockType">确定当前的基座类型</h2> 
+
+<p>用户可以将设备插入以下四种类型的基座： 
+<ul><li>车载基座</li>
+<li>桌面基座</li>
+<li>低端（模拟）桌面基座</li>
+<li>高端（数字）桌面基座</li></ul></p>
+
+<p>请注意，后两种类型仅适用于 API 级别为 11 及以上的 Android，因此如果您只关注基座类型，而不在意基座究竟是数字的还是模拟的，那么比较合适的做法就是查看全部三种类型：</p>
+
+<pre>boolean isCar = dockState == EXTRA_DOCK_STATE_CAR;
+boolean isDesk = dockState == EXTRA_DOCK_STATE_DESK || 
+                 dockState == EXTRA_DOCK_STATE_LE_DESK ||
+                 dockState == EXTRA_DOCK_STATE_HE_DESK;</pre>
+
+
+<h2 id="MonitorDockState">监控基座状态或类型的变化</h2> 
+
+<p>无论设备是否插入了基座，系统都会广播 {@link android.content.Intent#ACTION_DOCK_EVENT} 操作。要监控设备基座状态的变化，您只需在应用清单中注册广播接收器即可，具体如以下代码段所示：</p>
+
+<pre>&lt;action android:name="android.intent.action.ACTION_DOCK_EVENT"/></pre>
+
+<p>您可以使用上一步骤中所述的技术在接收器实施过程中提取基座的类型和状态。</p>
diff --git a/docs/html/intl/zh-CN/training/monitoring-device-state/index.jd b/docs/html/intl/zh-CN/training/monitoring-device-state/index.jd
new file mode 100644
index 0000000..aa10753
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/monitoring-device-state/index.jd
@@ -0,0 +1,49 @@
+page.title=优化电池使用时间
+
+trainingnavtop=true
+startpage=true
+next.title=监控电池电量和充电状态
+next.link=battery-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>依存关系和前提条件</h2> 
+<ul>
+  <li>Android 2.0（API 级别 5）或更高版本</li>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>的使用经验</li>
+</ul>
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/services.html">服务</a>
+</ul>
+
+</div> 
+</div>
+
+<p>为了打造一个优秀的应用，您应设法降低应用对电池使用时间的影响。阅读完本教程后，您就可以让自己构建的应用根据其所在设备的状态来监控和调整自身的功能和行为。</p>
+
+<p>要确保在不影响用户体验的情况下最大程度地降低应用对电池使用时间的影响，您可以采取一些措施，例如在网络连接断开时停用后台服务更新，或在电池电量较低时降低此类更新的频率。</p>
+
+<h2>教程</h2> 
+ 
+<!-- Create a list of the lessons in this class along with a short description of each lesson.
+These should be short and to the point. It should be clear from reading the summary whether someone
+will want to jump to a lesson or not.--> 
+ 
+<dl>
+  <dt><b><a href="battery-monitoring.html">监控电池电量和充电状态</a></b></dt>
+  <dd>了解如何通过确定和监控当前的电池电量和充电状态的变化来相应地调整应用的更新频率。</dd>
+
+  <dt><b><a href="docking-monitoring.html">确定和监控基座对接状态和类型</a></b></dt>
+  <dd>最佳刷新频率可能各有不同，具体取决于安装了相关应用的设备的使用方式。了解如何确定和监控所用基座的对接状态和类型，以便相应地调整应用的行为。</dd>
+
+  <dt><b><a href="connectivity-monitoring.html">确定和监控网络连接状态</a></b></dt>
+  <dd>如果没有互联网连接，您就无法通过在线来源更新应用。了解如何查看连接状态，以便相应地调整后台更新频率。您还可以了解如何在执行高带宽操作前查看 Wi-Fi 或移动连接的状态。</dd>
+
+  <dt><b><a href="manifest-receivers.html">根据需要操作广播接收器</a></b></dt>
+  <dd>您可以在运行时切换自己在清单中声明的广播接收器，以便根据当前设备状态停用不需要的接收器。了解如何在设备未处于特定状态的情况下切换和层叠状态变化接收器和延迟操作，以便提高效率。</dd>
+</dl> 
\ No newline at end of file
diff --git a/docs/html/intl/zh-CN/training/monitoring-device-state/manifest-receivers.jd b/docs/html/intl/zh-CN/training/monitoring-device-state/manifest-receivers.jd
new file mode 100644
index 0000000..07c014f
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/monitoring-device-state/manifest-receivers.jd
@@ -0,0 +1,50 @@
+page.title=根据需要操作广播接收器
+parent.title=优化电池使用时间
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=确定和监控网络连接状态
+previous.link=connectivity-monitoring.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#ToggleReceivers">切换和层叠状态变化接收器以提高效率</a></li>
+</ol>
+
+
+<h2>您还应参阅</h2>
+<ul>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">intent 和 intent 过滤器</a>
+</ul>
+
+</div> 
+</div>
+
+<p>监控设备状态变化的最简单方法就是，为您监控的每种状态创建 {@link android.content.BroadcastReceiver} 并在应用清单中逐一进行注册。然后，您只需根据当前设备状态在每个接收器中重新安排重复提醒即可。</p>
+
+<p>此方法的负面影响在于，只要系统触发了这些接收器中的任何一个，相关应用就会唤醒设备，其频率可能会远远超过所需的水平。</p>
+
+<p>更好的方法是在运行时停用或启用广播接收器。这样的话，您就可以将自己在清单中声明的接收器用作被动提醒，只有在需要时才会由系统事件触发。</p>
+ 
+
+<h2 id="ToggleReceivers">切换和层叠状态变化接收器以提高效率 </h2> 
+ 
+<p>您可以使用 {@link android.content.pm.PackageManager} 切换清单中定义的任意组件的启用状态（包括您要启用或停用的任意广播接收器），具体如以下片段所示：</p>
+
+<pre>ComponentName receiver = new ComponentName(context, myReceiver.class);
+
+PackageManager pm = context.getPackageManager();
+
+pm.setComponentEnabledSetting(receiver,
+        PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
+        PackageManager.DONT_KILL_APP)</pre>
+
+<p>在使用此技巧时，如果您确定连接已断开，就可以停用除连接变化接收器外的所有接收器。相反，成功连接后，您就可以停止侦听连接变化，同时只需在执行更新和重新安排重复更新提醒前查看是否在线即可。</p>
+
+<p>您可以使用同样的方法来延迟需要较高带宽的下载任务。只有在连接 Wi-Fi 后，您才能直接启用用于侦听连接变化和启动下载任务的广播接收器。</p>
diff --git a/docs/html/intl/zh-CN/training/multiscreen/adaptui.jd b/docs/html/intl/zh-CN/training/multiscreen/adaptui.jd
new file mode 100644
index 0000000..89908fe
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/multiscreen/adaptui.jd
@@ -0,0 +1,212 @@
+page.title=实施自适应用户界面流程
+parent.title=针对多种屏幕进行设计
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=支持各种屏幕密度
+previous.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>本教程将指导您</h2>
+
+<ol>
+  <li><a href="#TaskDetermineCurLayout">确定当前布局</a></li>
+  <li><a href="#TaskReactToLayout">根据当前布局做出响应</a></li>
+  <li><a href="#TaskReuseFrag">重复使用其他活动中的片段</a></li>
+  <li><a href="#TaskHandleConfigChanges">处理屏幕配置变化</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">支持平板电脑和手持设备</a></li>
+</ul>
+ 
+<h2>试试看</h2>
+ 
+<div class="download-box">
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>根据您的应用当前显示的布局，用户界面流程可能会有所不同。例如，如果您的应用处于双面板模式下，点击左侧面板上的项即可直接在右侧面板上显示相关内容；如果该应用处于单面板模式下，相关内容就应以其他活动的形式在同一面板上显示。</p>
+
+
+<h2 id="TaskDetermineCurLayout">确定当前布局</h2>
+
+<p>由于每种布局的实施都会稍有不同，因此您可能需要先确定当前向用户显示的布局。例如，您可以了解用户所处的是“单面板”模式还是“双面板”模式。要做到这一点，您可以查询指定视图是否存在以及是否已显示出来。</p>
+
+<pre class="prettyprint">
+public class NewsReaderActivity extends FragmentActivity {
+    boolean mIsDualPane;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main_layout);
+
+        View articleView = findViewById(R.id.article);
+        mIsDualPane = articleView != null &amp;&amp; 
+                        articleView.getVisibility() == View.VISIBLE;
+    }
+}
+</pre>
+
+<p>请注意，这段代码用于查询“报道”面板是否可用，与针对具体布局的硬编码查询相比，这段代码的灵活性要大得多。</p>
+
+<p>再举一个适应各种组件的存在情况的方法示例：在对这些组件执行操作前先查看它们是否可用。例如，新闻阅读器示例应用中有一个用于打开菜单的按钮，但只有在版本低于 3.0 的 Android 上运行该应用时，这个按钮才会存在，因为 API 级别 11 或更高级别中的  <PH>{@link android.app.ActionBar}</PH>  已取代了该按钮的功能。因此，您可以使用以下代码为此按钮添加事件侦听器：</p>
+
+<pre class="prettyprint">
+Button catButton = (Button) findViewById(R.id.categorybutton);
+OnClickListener listener = /* create your listener here */;
+if (catButton != null) {
+    catButton.setOnClickListener(listener);
+}
+</pre>
+
+
+<h2 id="TaskReactToLayout">根据当前布局做出响应</h2>
+
+<p>有些操作可能会因当前的具体布局而产生不同的结果。例如，在新闻阅读器示例中，如果用户界面处于双面板模式下，那么点击标题列表中的标题就会在右侧面板中打开相应报道；但如果用户界面处于单面板模式下，那么上述操作就会启动一个独立活动：</p>
+
+<pre>
+&#64;Override
+public void onHeadlineSelected(int index) {
+    mArtIndex = index;
+    if (mIsDualPane) {
+        /* display article on the right pane */
+        mArticleFragment.displayArticle(mCurrentCat.getArticle(index));
+    } else {
+        /* start a separate activity */
+        Intent intent = new Intent(this, ArticleActivity.class);
+        intent.putExtra("catIndex", mCatIndex);
+        intent.putExtra("artIndex", index);
+        startActivity(intent);
+    }
+}
+</pre>
+
+<p>同样，如果该应用处于双面板模式下，就应设置带导航标签的操作栏；但如果该应用处于单面板模式下，就应使用旋转窗口小部件设置导航栏。因此您的代码还应确定哪种情况比较合适：</p>
+
+<pre>
+final String CATEGORIES[] = { "热门报道", "政治", "经济", "Technology" };
+
+public void onCreate(Bundle savedInstanceState) {
+    ....
+    if (mIsDualPane) {
+        /* use tabs for navigation */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_TABS);
+        int i;
+        for (i = 0; i &lt; CATEGORIES.length; i++) {
+            actionBar.addTab(actionBar.newTab().setText(
+                CATEGORIES[i]).setTabListener(handler));
+        }
+        actionBar.setSelectedNavigationItem(selTab);
+    }
+    else {
+        /* use list navigation (spinner) */
+        actionBar.setNavigationMode(android.app.ActionBar.NAVIGATION_MODE_LIST);
+        SpinnerAdapter adap = new ArrayAdapter<String>(this, 
+                R.layout.headline_item, CATEGORIES);
+        actionBar.setListNavigationCallbacks(adap, handler);
+    }
+}
+</pre>
+
+
+<h2 id="TaskReuseFrag">重复使用其他活动中的片段</h2>
+
+<p>多屏幕设计中的重复模式是指，对于某些屏幕配置，已实施界面的一部分会用作面板；但对于其他配置，这部分就会以独立活动的形式存在。例如，在新闻阅读器示例中，对于较大的屏幕，新闻报道文本会显示在右侧面板中；但对于较小的屏幕，这些文本就会以独立活动的形式存在。</p>
+
+<p>在类似情况下，您通常可以在多个活动中重复使用相同的  <PH>{@link android.app.Fragment}</PH>  子类以避免代码重复。例如，您在双面板布局中使用了 <code>ArticleFragment</code>：</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p>然后又在小屏幕的活动布局中重复使用（无布局）了它 (<code>ArticleActivity</code>)：</p>
+
+<pre>
+ArticleFragment frag = new ArticleFragment();
+getSupportFragmentManager().beginTransaction().add(android.R.id.content, frag).commit();
+</pre>
+
+<p>当然，这与在 XML 布局中声明片段的效果是一样的，但在这种情况下却没必要使用 XML 布局，因为报道片段是此活动中的唯一组件。</p>
+
+<p>请务必在设计片段时注意，不要针对具体活动创建强耦合。要做到这一点，您通常可以定义一个界面，该界面概括了相关片段与其主活动交互所需的全部方式，然后让主活动实施该界面：</p>
+
+<p>例如，新闻阅读器应用的 <code>HeadlinesFragment</code> 会精确执行以下代码：</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    OnHeadlineSelectedListener mHeadlineSelectedListener = null;
+
+    /* Must be implemented by host activity */
+    public interface OnHeadlineSelectedListener {
+        public void onHeadlineSelected(int index);
+    }
+    ...
+
+    public void setOnHeadlineSelectedListener(OnHeadlineSelectedListener listener) {
+        mHeadlineSelectedListener = listener;
+    }
+}
+</pre>
+
+<p>然后，如果用户选择某个标题，相关片段就会通知由主活动指定的侦听器（而不是通知某个硬编码的具体活动）：</p>
+
+<pre>
+public class HeadlinesFragment extends ListFragment {
+    ...
+    &#64;Override
+    public void onItemClick(AdapterView&lt;?&gt; parent, 
+                            View view, int position, long id) {
+        if (null != mHeadlineSelectedListener) {
+            mHeadlineSelectedListener.onHeadlineSelected(position);
+        }
+    }
+    ...
+}
+</pre>
+
+<p><a
+href="{@docRoot}guide/practices/tablets-and-handsets.html">支持平板电脑和手持设备</a>的指南中进一步介绍了此技术。</p>
+
+
+<h2 id="TaskHandleConfigChanges">处理屏幕配置变化</h2>
+
+<p>如果您使用独立活动实施界面的独立部分，那么请注意，您可能需要对特定配置变化（例如屏幕方向的变化）做出响应，以便保持界面的一致性。</p>
+
+<p>例如，在运行 Android 3.0 或更高版本的标准 7 英寸平板电脑上，如果新闻阅读器示例应用运行在纵向模式下，就会在使用独立活动显示新闻报道；但如果该应用运行在横向模式下，就会使用双面板布局。</p>
+
+<p>也就是说，如果用户处于纵向模式下且屏幕上显示的是用于阅读报道的活动，那么您就需要在检测到屏幕方向变化（变成横向模式）后执行相应操作，即停止上述活动并返回主活动，以便在双面板布局中显示相关内容：</p>
+
+<pre>
+public class ArticleActivity extends FragmentActivity {
+    int mCatIndex, mArtIndex;
+
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mCatIndex = getIntent().getExtras().getInt("catIndex", 0);
+        mArtIndex = getIntent().getExtras().getInt("artIndex", 0);
+
+        // If should be in two-pane mode, finish to return to main activity
+        if (getResources().getBoolean(R.bool.has_two_panes)) {
+            finish();
+            return;
+        }
+        ...
+}
+</pre>
+
+
diff --git a/docs/html/intl/zh-CN/training/multiscreen/index.jd b/docs/html/intl/zh-CN/training/multiscreen/index.jd
new file mode 100644
index 0000000..35c48e0
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/multiscreen/index.jd
@@ -0,0 +1,64 @@
+page.title=针对多种屏幕进行设计
+
+trainingnavtop=true
+startpage=true
+next.title=支持各种屏幕尺寸
+next.link=screensizes.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb"> 
+ 
+<h2>依存关系和前提条件</h2> 
+
+<ul>
+  <li>Android 1.6 或更高版本（示例应用则需要 2.1 或更高版本）</li>
+  <li><a
+href="http://developer.android.com/guide/components/activities.html">活动</a>和<a href="http://developer.android.com/guide/components/fragments.html">片段</a>的基本知识</li>
+  <li>构建 Android <a
+href="http://developer.android.com/guide/topics/ui/index.html">用户界面</a>的经验</li>
+  <li>多个功能需要用到<a
+href="{@docRoot}tools/extras/support-library.html">支持库</a></li>
+</ul>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a></li>
+</ul>
+ 
+<h2>试试看</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+ 
+<p>Android 支持数百种屏幕尺寸不同的设备，包括小型手机和大型电视机。因此，请务必将您的应用设计为与所有的屏幕尺寸兼容，以便让尽可能多的用户使用该应用。</p>
+
+<p>不过，与各种类型的设备兼容还远远不够。由于各种屏幕尺寸对用户互动产生的利弊有所不同，因此要真正满足用户需求并广获好评，您的应用不仅需要支持多种屏幕，还应针对各类屏幕配置的用户体验进行优化。<em></em><em></em></p>
+
+<p>本教程将向您介绍如何针对多种屏幕配置优化和实施相应的用户界面。</p>
+
+<p>各教程中都提及了一种来自一个示例应用的代码，该应用展示了关于针对多种分辨率进行优化的最佳实践。您可以在右侧下载该示例，并在自己的应用内重复使用其中的代码。</p>
+
+<p class="note"><strong>请注意</strong>：本教程和相关的示例使用了<a
+href="{@docRoot}tools/extras/support-library.html">支持库</a>，以便在 3.0 版以下的 Android 上使用  <PH>{@link android.app.Fragment}</PH>  API。因此，您需要下载该库并将其添加到您的应用，才能使用本教程中涉及的所有 API。</p>
+ 
+
+<h2>教程</h2> 
+ 
+<dl> 
+  <dt><b><a href="screensizes.html">支持各种屏幕尺寸</a></b></dt> 
+    <dd>本教程将向您介绍如何设计可适应多种屏幕尺寸的布局（使用灵活的视图尺寸、 <PH>{@link android.widget.RelativeLayout}</PH>、屏幕尺寸和屏幕方向限定符、别名过滤器以及自动拉伸位图）。</dd> 
+ 
+  <dt><b><a href="screendensities.html">支持各种屏幕密度</a></b></dt> 
+    <dd>本教程将向您介绍如何支持具有不同像素密度的屏幕（使用非密度制约像素并提供各种密度的相应位图）。</dd> 
+ 
+  <dt><b><a href="adaptui.html">实施自适应用户界面流程</a></b></dt> 
+    <dd>本教程将向您介绍如何以可适应多种屏幕尺寸/屏幕密度组合的方式实施用户界面流程（运行时对当前布局的检测，根据当前布局做出响应，处理屏幕配置变化）。</dd> 
+</dl> 
diff --git a/docs/html/intl/zh-CN/training/multiscreen/screendensities.jd b/docs/html/intl/zh-CN/training/multiscreen/screendensities.jd
new file mode 100644
index 0000000..cdb9b7f
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/multiscreen/screendensities.jd
@@ -0,0 +1,100 @@
+page.title=支持各种屏幕密度
+parent.title=针对多种屏幕进行设计
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=支持各种屏幕尺寸
+previous.link=screensizes.html
+next.title=实施自适应用户界面流程
+next.link=adaptui.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#TaskUseDP">使用非密度制约像素</a></li>
+  <li><a href="#TaskProvideAltBmp">提供备用位图</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a></li>
+  <li><a href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">图标设计指南</a></li>
+</ul>
+
+<h2>试试看</h2>
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+ 
+</div> 
+</div> 
+
+<p>本教程将向您介绍如何通过提供不同资源和使用独立于分辨率的测量单位来支持不同屏幕密度。</p>
+
+<h2 id="TaskUseDP">使用非密度制约像素</h2>
+
+<p>在设计布局时，大家经常会误使用绝对像素来定义距离或尺寸，您一定要避免犯这种错误。由于各种屏幕的像素密度都有所不同，因此相同数量的像素在不同设备上的实际大小也有所差异，这样使用像素定义布局尺寸就会产生问题。因此，请务必使用 <code>dp</code> 或 <code>sp</code> 单位指定尺寸。<code>dp</code> 是一种非密度制约像素，其尺寸与 160 dpi 像素的实际尺寸相同。<code>sp</code> 也是一种基本单位，但它可根据用户的偏好文字大小进行调整（即尺度独立性像素），因此您应将该测量单位用于定义文字大小（请勿用其定义布局尺寸）。</p>
+
+<p>例如，请使用 <code>dp</code>（而非 <code>px</code>）指定两个视图间的间距：</p>
+
+<pre>
+&lt;Button android:layout_width="wrap_content" 
+    android:layout_height="wrap_content" 
+    android:text="&#64;string/clickme"
+    android:layout_marginTop="20dp" /&gt;
+</pre>
+
+<p>请务必使用 <code>sp</code> 指定文字大小：</p>
+
+<pre>
+&lt;TextView android:layout_width="match_parent" 
+    android:layout_height="wrap_content" 
+    android:textSize="20sp" /&gt;
+</pre>
+
+
+<h2 id="TaskProvideAltBmp">提供备用位图</h2>
+
+<p>由于 Android 可在具有各种屏幕密度的设备上运行，因此您提供的位图资源应始终可以满足各类普遍密度范围的要求：低密度、中等密度、高密度以及超高密度。这将有助于您的图形在所有屏幕密度上都能得到出色的质量和效果。</p>
+
+<p>要生成这些图片，您应先提取矢量格式的原始资源，然后根据以下尺寸范围针对各密度生成相应的图片。</p>
+
+<p><ul>
+  <li><code>xhdpi</code>：2.0
+  <li><code>hdpi</code>：1.5
+  <li><code>mdpi</code>：1.0（最低要求）
+  <li><code>ldpi</code>：0.75
+</ul></p>
+
+<p>也就是说，如果您为 <code>xhdpi</code> 设备生成了 200x200 尺寸的图片，就应该使用同一资源为 <code>hdpi</code>、<code>mdpi</code> 和 <code>ldpi</code> 设备分别生成 150x150、100x100 和 75x75 尺寸的图片。</p>
+
+<p>然后，将生成的图片文件放在 <code>res/</code> 下的相应子目录中（如下所示），系统就会根据运行您应用的设备的屏幕密度自动选择合适的图片：</p>
+
+<pre class="classic no-pretty-print">
+MyProject/
+  res/
+    drawable-xhdpi/
+        awesomeimage.png
+    drawable-hdpi/
+        awesomeimage.png
+    drawable-mdpi/
+        awesomeimage.png
+    drawable-ldpi/
+        awesomeimage.png
+</pre>
+
+<p>这样一来，无论您何时引用 <code>&#64;drawable/awesomeimage</code>，系统都能根据相应屏幕的 dpi 选取合适的位图。</p>
+
+<p>有关为您的应用创建图标资产的更多提示和指南，请参阅<a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design.html">图标设计指南</a>。</p>
+
diff --git a/docs/html/intl/zh-CN/training/multiscreen/screensizes.jd b/docs/html/intl/zh-CN/training/multiscreen/screensizes.jd
new file mode 100644
index 0000000..904d097
--- /dev/null
+++ b/docs/html/intl/zh-CN/training/multiscreen/screensizes.jd
@@ -0,0 +1,279 @@
+page.title=支持各种屏幕尺寸
+parent.title=针对多种屏幕进行设计
+parent.link=index.html
+
+trainingnavtop=true
+next.title=支持各种屏幕密度
+next.link=screendensities.html
+
+@jd:body
+
+
+<!-- This is the training bar -->
+<div id="tb-wrapper"> 
+<div id="tb"> 
+
+<h2>本教程将指导您</h2>
+<ol>
+  <li><a href="#TaskUseWrapMatchPar">使用“wrap_content”和“match_parent”</a></li>
+  <li><a href="#TaskUseRelativeLayout">使用相对布局</a></li>
+  <li><a href="#TaskUseSizeQuali">使用尺寸限定符</a></li>
+  <li><a href="#TaskUseSWQuali">使用最小宽度限定符</a></li>
+  <li><a href="#TaskUseAliasFilters">使用布局别名</a></li>
+  <li><a href="#TaskUseOriQuali">使用屏幕方向限定符</a></li>
+  <li><a href="#TaskUse9Patch">使用自动拉伸位图</a></li>
+</ol>
+
+<h2>您还应参阅</h2>
+
+<ul>
+  <li><a href="{@docRoot}guide/practices/screens_support.html">支持多种屏幕</a></li>
+</ul>
+
+<h2>试试看</h2> 
+ 
+<div class="download-box"> 
+<a href="http://developer.android.com/shareables/training/NewsReader.zip" class="button">下载示例应用</a>
+<p class="filename">NewsReader.zip</p> 
+</div> 
+ 
+</div> 
+</div> 
+
+<p>此教程将向您介绍如何通过以下方法支持各种尺寸的屏幕：</p>
+<ul> 
+  <li>确保系统可以适当地调整您布局的尺寸以便适应屏幕</li> 
+  <li>根据屏幕配置提供合适的用户界面布局</li> 
+  <li>确保正确的布局应用到了正确的屏幕上</li>
+  <li>提供可正确缩放的位图</li> 
+</ul> 
+
+
+<h2 id="TaskUseWrapMatchPar">使用“wrap_content”和“match_parent”</h2> 
+
+<p>要确保布局的灵活性并适应各种尺寸的屏幕，您应使用 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 控制某些视图组件的宽度和高度。如果您使用 <code>"wrap_content"</code>，系统就会将视图的宽度或高度设置成所需的最小尺寸以适应视图中的内容，而 <code>"match_parent"</code>（在低于 API 级别 8 的级别中称为 <code>"fill_parent"</code>）则会展开组件以匹配其父视图的尺寸。</p>
+
+<p>如果使用 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 尺寸值而不是硬编码的尺寸，您的视图就会相应地仅使用自身所需的空间或展开以填满可用空间。例如：</p>
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p>请注意示例中使用 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 控制组件尺寸的方法，而不是关注具体的尺寸。此方法可让布局正确适应各种屏幕尺寸和屏幕方向。</p>
+
+<p>此视图在纵向模式和横向模式下的显示效果如下所示。请注意，组件的尺寸会自动适应屏幕的高度和宽度：</p>
+
+<img src="{@docRoot}images/training/layout-hvga.png" />
+<p class="img-caption"><strong>图 1</strong>。纵向模式（左）和横向模式（右）下的新闻阅读器示例应用。</p>
+
+
+<h2 id="TaskUseRelativeLayout">使用相对布局</h2> 
+
+<p>您可以使用  <PH>{@link android.widget.LinearLayout}</PH>  的嵌套实例并结合 <code>"wrap_content"</code> 和 <code>"match_parent"</code> 尺寸，以便构建相当复杂的布局。不过，您无法通过  <PH>{@link android.widget.LinearLayout}</PH>  精确控制子视图的特殊关系；系统会将  <PH>{@link android.widget.LinearLayout}</PH>  中的视图直接并排列出。如果您需要将子视图排列出各种效果而不是一条直线，通常更合适的解决方法是使用  <PH>{@link android.widget.RelativeLayout}</PH>，这样您就可以根据各组件之间的特殊关系指定布局了。例如，您可以将某个子视图对齐到屏幕左侧，同时将另一个视图对齐到屏幕右侧。</p>
+
+<p>例如：</p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"&gt;
+    &lt;TextView
+        android:id="&#64;+id/label"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:text="Type here:"/&gt;
+    &lt;EditText
+        android:id="&#64;+id/entry"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/label"/&gt;
+    &lt;Button
+        android:id="&#64;+id/ok"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_below="&#64;id/entry"
+        android:layout_alignParentRight="true"
+        android:layout_marginLeft="10dp"
+        android:text="OK" /&gt;
+    &lt;Button
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_toLeftOf="&#64;id/ok"
+        android:layout_alignTop="&#64;id/ok"
+        android:text="Cancel" /&gt;
+&lt;/RelativeLayout&gt;
+</pre>
+
+<p>图 2 展示的是此布局在 QVGA 屏幕上的显示效果。</p>
+
+<img src="{@docRoot}images/training/relativelayout1.png" />
+<p class="img-caption"><strong>图 2</strong>。QVGA 屏幕（小屏幕）上的截图。</p>
+
+<p>图 3 展示的是此布局在较大屏幕上的显示效果。</p>
+
+<img src="{@docRoot}images/training/relativelayout2.png" />
+<p class="img-caption"><strong>图 3</strong>。WSVGA 屏幕（大屏幕）上的截图。</p>
+
+<p>请注意，虽然组件的尺寸有所变化，但它们的空间关系仍会保留，具体由  <PH>{@link android.widget.RelativeLayout.LayoutParams}</PH> 指定。</p>
+
+ 
+<h2 id="TaskUseSizeQuali">使用尺寸限定符</h2> 
+
+<p>上文所述的灵活布局或相对布局可以为您带来的优势就只有这么多了。虽然这些布局可以拉伸组件内外的空间以适应各种屏幕，但它们不一定能为每种屏幕都提供最佳的用户体验。因此，您的应用不仅应实施灵活布局，还应针对各种屏幕配置提供一些备用布局。要做到这一点，您可以使用<a href="http://developer.android.com/guide/practices/screens_support.html#qualifiers">配置限定符</a>，这样就可以在运行时根据当前的设备配置自动选择合适的资源了（例如根据各种屏幕尺寸选择不同的布局）。</p>
+
+<p>例如，很多应用会在较大的屏幕上实施“双面板”模式（相关应用可能会在一个面板上显示项目列表，并在另一面板上显示对应内容）。平板电脑和电视的屏幕已经大到可以同时容纳这两个面板了，但手机屏幕就需要分别显示。因此，您可以使用以下文件以便实施这些布局：</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>，单面板（默认）布局：
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-large/main.xml</code>，双面板布局：
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>请注意第二种布局名称目录中的 <code>large</code> 限定符。系统会在属于较大屏幕（例如 7 英寸或更大的平板电脑）的设备上选择此布局。系统会在较小的屏幕上选择其他布局（无限定符）。</p>
+
+
+<h2 id="TaskUseSWQuali">使用最小宽度限定符</h2>
+
+<p>在版本低于 3.2 的 Android 设备上，开发人员遇到的问题之一是“较大”屏幕的尺寸范围，该问题会影响戴尔 Streak、早期的 Galaxy Tab 以及大部分 7 英寸平板电脑。即使这些设备的屏幕属于“较大”的尺寸，但很多应用可能会针对此类别中的各种设备（例如 5 英寸和 7 英寸的设备）显示不同的布局。这就是 Android 3.2 版在引入其他限定符的同时引入“最小宽度”限定符的原因。</p>
+
+<p>最小宽度限定符可让您通过指定某个最小宽度（以 dp 为单位）来定位屏幕。例如，标准 7 英寸平板电脑的最小宽度为 600 dp，因此如果您要在此类屏幕上的用户界面中使用双面板（但在较小的屏幕上只显示列表），您可以使用上文中所述的单面板和双面板这两种布局，但您应使用 <code>sw600dp</code> 指明双面板布局仅适用于最小宽度为 600 dp 的屏幕，而不是使用 <code>large</code> 尺寸限定符：</p>
+
+<ul>
+  <li><code>res/layout/main.xml</code>，单面板（默认）布局：
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+</li>
+  <li><code>res/layout-sw600dp/main.xml</code>，双面板布局：
+
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+</li>
+</ul>
+
+<p>也就是说，对于最小宽度大于等于 600 dp 的设备，系统会选择 <code>layout-sw600dp/main.xml</code>（双面板）布局，否则系统就会选择 <code>layout/main.xml</code>（单面板）布局。</p>
+
+<p>但 Android 版本低于 3.2 的设备不支持此技术，原因是这些设备无法将 <code>sw600dp</code> 识别为尺寸限定符，因此您仍需使用 <code>large</code> 限定符。这样一来，就会有一个名称为 <code>res/layout-large/main.xml</code> 的文件（与 <code>res/layout-sw600dp/main.xml</code> 一样）。您将在下一教程中了解到避免此类布局文件出现重复的技术。</p>
+
+
+<h2 id="TaskUseAliasFilters">使用布局别名</h2> 
+
+<p>最小宽度限定符仅适用于 Android 3.2 及更高版本。因此，您仍需使用与较低版本兼容的概括尺寸范围（小、正常、大和特大）。例如，如果您要将用户界面设计成在手机上显示单面板，但在 7 英寸平板电脑、电视和其他较大的设备上显示多面板，请提供以下文件：</p>
+
+<p><ul>
+<li><code>res/layout/main.xml:</code> 单面板布局</li>
+<li><code>res/layout-large:</code> 多面板布局</li>
+<li><code>res/layout-sw600dp:</code> 多面板布局</li>
+</ul></p>
+
+<p>后两个文件是相同的，因为其中一个用于和 Android 3.2 设备匹配，而另一个则是为使用较低版本 Android 的平板电脑和电视准备的。</p>
+
+<p>要避免平板电脑和电视的文件出现重复（以及由此带来的维护问题），您可以使用别名文件。例如，您可以定义以下布局：</p>
+
+<ul>
+<li><code>res/layout/main.xml</code>，单面板布局</li>
+<li><code>res/layout/main_twopanes.xml</code>，双面板布局</li>
+</ul>
+
+<p>然后添加这两个文件：</p>
+
+<p><ul>
+<li><code>res/values-large/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+</li>
+
+<li><code>res/values-sw600dp/layout.xml</code>:
+<pre>
+&lt;resources>
+    &lt;item name="main" type="layout">&#64;layout/main_twopanes&lt;/item>
+&lt;/resources>
+</pre>
+
+</li>
+</ul></p>
+
+<p>后两个文件的内容相同，但它们并未实际定义布局。它们只是将  <PH>{@code main}</PH> 设置成了  <PH>{@code main_twopanes}</PH> 的别名。由于这些文件包含 <code>large</code> 和 <code>sw600dp</code> 选择器，因此无论 Android 版本如何，系统都会将这些文件应用到平板电脑和电视上（版本低于 3.2 的平板电脑和电视会匹配 
+<PH>{@code large}</PH>，版本低于 3.2 的平板电脑和电视则会匹配 <code>sw600dp</code>）。</p>
+
+
+<h2 id="TaskUseOriQuali">使用屏幕方向限定符</h2> 
+
+<p>某些布局会同时支持横向模式和纵向模式，但您可以通过调整优化其中大部分布局的效果。在新闻阅读器示例应用中，每种屏幕尺寸和屏幕方向下的布局行为方式如下所示：</p>
+
+<p><ul>
+<li><b>小屏幕，纵向</b>：单面板，带徽标</li>
+<li><b>小屏幕，横向</b>：单面板，带徽标</li>
+<li><b>7 英寸平板电脑，纵向</b>：单面板，带操作栏</li>
+<li><b>7 英寸平板电脑，横向</b>：双面板，宽，带操作栏</li>
+<li><b>10 英寸平板电脑，纵向</b>：双面板，窄，带操作栏</li>
+<li><b>10 英寸平板电脑，横向</b>：双面板，宽，带操作栏</li>
+<li><b>电视，横向</b>：双面板，宽，带操作栏</li>
+</ul></p>
+
+<p>因此，这些布局中的每一种都定义在了 <code>res/layout/</code> 目录下的某个 XML 文件中。为了继续将每个布局分配给各种屏幕配置，该应用会使用布局别名将两者相匹配：</p>
+
+<p><code>res/layout/onepane.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane.xml all}
+
+<p><code>res/layout/onepane_with_bar.xml:</code></p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/onepane_with_bar.xml all}
+
+<p><code>res/layout/twopanes.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes.xml all}
+
+<p><code>res/layout/twopanes_narrow.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/layout/twopanes_narrow.xml all}
+
+<p>既然您已定义了所有可能的布局，那就只需使用配置限定符将正确的布局映射到各种配置即可。您现在只需使用布局别名技术即可做到这一点：</p>
+
+<p><code>res/values/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values/layouts.xml all}
+
+<p><code>res/values-sw600dp-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-land/layouts.xml
+all}
+
+<p><code>res/values-sw600dp-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-sw600dp-port/layouts.xml
+all}
+
+<p><code>res/values-large-land/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-land/layouts.xml all}
+
+<p><code>res/values-large-port/layouts.xml</code>:</p>
+{@sample development/samples/training/multiscreen/newsreader/res/values-large-port/layouts.xml all}
+
+
+
+<h2 id="TaskUse9Patch">使用自动拉伸位图</h2>
+
+<p>支持各种屏幕尺寸通常意味着您的图片资源还必须能适应各种尺寸。例如，无论要应用到什么形状的按钮上，按钮背景都必须能适应。</p>
+
+<p>如果在可以更改尺寸的组件上使用了简单的图片，您很快就会发现显示效果多少有些不太理想，因为系统会在运行时平均地拉伸或收缩您的图片。解决方法为使用自动拉伸位图，这是一种格式特殊的 PNG 文件，其中会指明可以拉伸以及不可以拉伸的区域。</p>
+
+<p>因此，如果设计的是用于尺寸可变的组件上的位图，请务必使用自动拉伸技术。要将某个位图转换成自动拉伸位图，您可以先准备好普通图片（图 4，放大了 4 倍以便清楚显示）。</p>
+
+<img src="{@docRoot}images/training/button.png" />
+<p class="img-caption"><strong>图 4</strong>。<code>button.png</code></p>
+
+<p>然后通过 SDK 的  <ode
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a> 实用工具（位于 <code>tools/</code> 目录中）运行该图片，您可以在该工具中绘制像素以标出要拉伸的区域以及左侧和顶部的边界。您还可以沿右侧和底部边界绘制像素以标出用于放置内容的区域，具体如图 5 所示。</p>
+
+<img src="{@docRoot}images/training/button_with_marks.png" />
+<p class="img-caption"><strong>图 5</strong>。<code>button.9.png</code></p>
+
+<p>请注意沿边界显示的黑色像素。顶部和左侧边界上的像素用于指定可以拉伸的图片区域，右侧和底部边界上的像素则用于指定放置内容的区域。</p>
+
+<p>另请注意 <code>.9.png</code> 的扩展名。您必须使用此扩展名，因为系统框架需要通过此扩展名确定相关图片是自动拉伸位图，而不是普通 PNG 图片。</p>
+
+<p>如果您将此背景应用到某个组件（通过设置 <code>android:background="&#64;drawable/button"</code>），系统框架就会正确拉伸图片以适应按钮的尺寸，具体如图 6 中的各种尺寸所示。</p>
+
+<img src="{@docRoot}images/training/buttons_stretched.png" />
+<p class="img-caption"><strong>图 6</strong>。在各种尺寸下使用 <code>button.9.png</code> 自动拉伸位图的按钮。</p>
+
diff --git a/docs/html/legal.jd b/docs/html/legal.jd
new file mode 100644
index 0000000..575f016
--- /dev/null
+++ b/docs/html/legal.jd
@@ -0,0 +1,129 @@
+page.title=Legal Notice
+fullpage=1
+@jd:body
+
+<div class="wrap" style="width:940px;">
+  
+<h1>Legal Notice</h1>
+  
+<p>Android is an open platform that's freely available to you as an app developer. You can
+immediately download the Android SDK, develop apps, and distribute them to the world without any
+registration or fees.</p>
+
+<p>Android is developed by Google Inc. and the <a
+href="http://www.openhandsetalliance.com/">Open Handset Alliance</a>. We've made it available to you
+as a development platform pursuant to our commitment to openness, freedom, and innovation in
+mobile.</p>
+
+<p>To start developing apps for Android, <a
+href="{@docRoot}sdk/index.html">download the free Android SDK</a>.</p>
+
+
+
+<h2 id="Brands">Android Brands</h2>
+
+<p>The "Android" name and <img src="images/android-logo.png" alt="Android"
+style="margin:0;padding:0 2px;vertical-align:baseline" /> logo are trademarks of Google Inc.
+You may not use the logo or the logo's custom typeface.</p>
+
+<p>You may use the word "Android" in a product name only as a descriptor, such as "for Android"
+and the first instance should be followed by a TM symbol, "for Android&trade;." In other
+messaging, the word "Android" may be used in text as a descriptor, as long as it is followed by a
+proper generic term (for example, "Android&trade; application"). Any use of the Android name
+must include footer attribution in your communications: "Android is a trademark of Google Inc."</p>
+
+<p>The Android Robot logo <img src="images/robot-tiny.png" alt=""
+style="margin:0;padding:0;vertical-align:baseline" /> can be used, reproduced, and modified freely
+in marketing communications. Our standard color value for print is PMS 376C. Our online hex color is
+#A4C639. The Android Robot logo is licensed under the terms of the <a
+href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution</a> license and any
+use of it must be attributed as such.</p>
+
+<p>For more information about Android brands, see the <a
+href="http://www.android.com/developers/branding.html">Android Branding Guidelines</a>.</p>
+
+
+
+<h2 id="WebSite">Web Site Content</h2>
+
+<p>We are pleased to license the Android documentation and sample code on this web site under terms
+that encourage you to take, modify, reuse, re-purpose, and remix the content as you see fit. The
+documentation content on this web site is made available to you as part of the <a
+href="http://source.android.com">Android Open Source Project</a>. This documentation, including any
+code shown in it, is licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
+2.0 license</a>. All other content on this site, except the license documents themselves and as
+otherwise noted, is licensed under the <a
+href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5</a> license.
+</p>
+
+<p>For more information about licenses provided for the content of this web site and the
+restrictions for re-use, read the complete <a href="license.html">Content License</a>.</p>
+
+<p>Your use of this site is subject to <a href="http://www.google.com/policies/">Google's Privacy
+Policy &amp; Terms of Service</a>.</p>
+
+
+
+<h2 id="Other">Other Android Services</h2>
+
+<p>Google provides other optional services for your Android apps that have their own legal terms and
+restrictions. Such services include:</p>
+
+<dl>
+  <dt>Eclipse Android Developer Tools Plugin</dt>
+    <dd>If you're developing apps with the Eclipse IDE, we offer a free plugin called the
+<a href="{@docRoot}tools/sdk/eclipse-adt.html">Android Developer Tools</a> (ADT) to speed up your
+development and debugging. Certain code within the ADT plugin and other packages available
+from the SDK Manager require that you agree to terms and conditions for use, reproduction and
+distribution upon installation.</dd>
+
+  <dt>Google Play</dt>
+    <dd>Google Play is a publicly available service through which you can distribute your apps for
+Android-powered devices. Google Play not only makes your app available to millions of devices, but
+also offers your app powerful services such as in-app billing and license verification. In order to
+distribute your apps on Google Play and use the associated services, you must agree to the Developer
+Distribution Agreement and acquire a valid Developer Account.
+      <p><a
+href="http://www.android.com/us/developer-distribution-agreement.html">Developer Distribution
+Agreement</a>, <a
+href="http://www.android.com/us/developer-content-policy.html#showlanguages">Developer Program
+Policies</a></p></dd>
+
+  <dt>Google Maps API</dt>
+    <dd>The Android Maps APIs are a collection of services (including, but not limited to, the
+MapView and MapActivity classes) that allow you to include
+maps, geocoding, geolocation, and other content from Google and its content providers in your
+Android
+apps. If you want to develop an Android app that displays Google Maps data, you must agree
+to the terms of service, register, and get an API Key. Registration is free.    
+      <p><a
+href="https://developers.google.com/maps/documentation/android/maps-api-signup"
+>Google Maps Android API Key Signup</a>, <a href="http://m.google.com/legalnotices">Mobile Legal
+Notices</a></p>
+    </dd>
+
+  <dt>Android Cloud to Device Messaging</dt>
+    <dd>Android Cloud to Device Messaging (C2DM) is a service that helps you send data from
+your servers to your users' Android devices. The service provides a simple, lightweight
+mechanism that your servers can use to tell your Android app to contact your server directly to
+fetch updated app or user data. Before you can sign up for Android Cloud to Device Messaging, you
+must agree to the terms of a legal agreement between you and Google. Registration is free.
+    <p><a href="https://developers.google.com/android/c2dm/terms">Android Cloud to Device
+Messaging Terms of Service</a></p>
+    </dd>
+    
+  <dt>Android Backup Service</dt>
+    <dd>Android Backup Service is integrated with Android's data backup framework to perform data
+backup and restore for most devices running Android 2.2 or greater, using Google servers and a
+backup transport on the device. Before you can sign up for Android Backup Service, you
+must agree to the terms of a legal agreement between you and Google. Registration is free.
+    <p><a href="https://developers.google.com/android/backup/terms">Android Backup Service
+Terms of Service</a></p>
+    </dd>
+</dl>
+
+<p>Any and all other services available for Android but not documented on <a
+href="http://developer.android.com">developer.android.com</a> are subject to their own terms, as
+documented on their respective web sites. </p>
+
+</div>
\ No newline at end of file
diff --git a/docs/html/license.jd b/docs/html/license.jd
index 83cd470..a9af038 100644
--- a/docs/html/license.jd
+++ b/docs/html/license.jd
@@ -1,15 +1,13 @@
 page.title=Content License
-hide_license_footer=true
+fullpage=1
 @jd:body
 
-<div id="mainBodyFluid">
-<h1>Content License</h1>
-
-<p>For the purposes of licensing, the content of this site is divided
+<div class="wrap" style="width:940px;">
+  <h1>Content License</h1>
+<p>For the purposes of licensing, the content of this web site is divided
 into two categories:</p>
 <ul>
-  <li>Documentation content, found under the "Dev Guide" and "Reference"
-  tabs, including both static content and content extracted from source 
+  <li>Documentation content, including both static documentation and content extracted from source 
   code modules, as well as sample code, and </li>
 <li>All other site content</li>
 </ul>
@@ -31,6 +29,10 @@
 covering the source code module will apply to the documentation
 extracted from it. </p>
 
+<p>Third-party components of this site such as JavaScript libraries are included in the Android
+Open Source Project under the licenses specified by their authors. For information about these
+licenses, refer to the source files in the Android Open Source Project.</p>
+
 <p>All other content on this site, except the license documents themselves
 and as otherwise noted, is licensed under the <a
 href="http://creativecommons.org/licenses/by/2.5/">Creative Commons
@@ -42,17 +44,18 @@
 ask that you give proper <a href="#attribution">attribution</a>. </p>
 
 
-<h3 id="terms">Terms of Use</h3>
+<h2 id="terms">Terms of Use</h2>
 
 <p>We are pleased to license the Android documentation and sample code under
 terms that encourage you to take, modify, reuse, re-purpose, and remix the
-content as you see fit. Except as noted in the Restrictions section below, you
+content as you see fit. Except as noted in the <a href="#restrictions">Restrictions</a> section
+below, you
 are free to use the documentation content in your own creations. For example,
 you could quote the text in a book, cut-and-paste sections to your blog, record
 it as an audiobook for the visually impaired, or even translate it. </p>
 
 
-<h3 id="restrictions">Restrictions</h3>
+<h2 id="restrictions">Restrictions</h2>
 
 <ul>
 <li>While the documentation itself is available to you under the Apache 2.0
@@ -60,9 +63,11 @@
 included in that license.</li>
 
 <li>Google's trademarks and other brand features (including the 	
-ANDROID stylized typeface logo) are not included in the license.
-Please see <a href="http://www.google.com/permissions/guidelines.html">
-Guidelines for Third Party Use of Google Brand Features</a> for
+<img src="images/android-logo.png" alt="Android"
+style="margin:0;padding:0 2px;vertical-align:baseline" /> stylized typeface logo) are not included
+in the license.
+Please see <a
+href="http://www.android.com/developers/branding.html">Android Branding Guidelines</a> for
 information about this usage. </li>
 
 <li>In some cases, a page may include content, such as an image, that is not 
@@ -76,9 +81,8 @@
 documentation is subject to the conditions detailed in the <a
 href="http://www.apache.org/licenses/LICENSE-2.0">Apache 2.0 license</a>.</li>
 </ul>
-</h3>
 
-<h3 id="attribution">Attribution</h3>
+<h2 id="attribution">Attribution</h2>
 <p>
 Proper attribution is required when you reuse or create modified
 versions of content that appears on a page made available under the
@@ -95,49 +99,47 @@
  are producing the work. There are several typical ways in which this 
  might apply:
 </p>
-<h4>Exact Reproductions</h4>
+<h3>Exact Reproductions</h3>
 <p>
  If your online work <em>exactly reproduces</em> text or images from this
  site, in whole or in part, please include a paragraph at the bottom
  of your page that reads: 
 </p>
-<blockquote>
+<p style="margin-left:20px;font-style:italic">
  Portions of this page are reproduced from work created and <a
  href="http://code.google.com/policies.html">shared by the Android Open Source Project</a>
  and used according to terms described in the <a
  href="http://creativecommons.org/licenses/by/2.5/">Creative Commons
  2.5 Attribution License</a>.
 
-</blockquote>
+</p>
 <p>
  Also, please link back to the original source page so that readers can
  refer there for more information.
 </p>
-<h4>Modified Versions</h4>
+<h3>Modified Versions</h3>
 <p>
  If your online work shows <em>modified</em> text or images based on
  the content from this site, please include a paragraph at the bottom of
  your page that reads:
 </p>
-<blockquote>
+<p style="margin-left:20px;font-style:italic">
  Portions of this page are modifications based on work created and <a
  href="http://code.google.com/policies.html">shared by the Android Open
  Source Project</a> and used according to terms described in the <a
  href="http://creativecommons.org/licenses/by/2.5/">Creative Commons
  2.5 Attribution License</a>.
-</blockquote>
+</p>
 <p>
  Again, please link back to the original source page so that readers can
  refer there for more information. This is even more important when
  the content has been modified.
 </p>
-<h4>Other Media</h4>
+<h3>Other Media</h3>
 <p>
  If you produce non-hypertext works, such as books, audio, or
  video, we ask that you make a best effort to include a spoken or
  written attribution in the spirit of the messages above.
 </p>
 
-</div>	
-
-
+</div>
diff --git a/docs/html/live/index.jd b/docs/html/live/index.jd
index 3885725..9729727 100644
--- a/docs/html/live/index.jd
+++ b/docs/html/live/index.jd
@@ -1,7 +1,8 @@
 page.title=Live
+fullpage=1
 @jd:body
 
-<div id="mainBodyFixed" style="padding-left:2em;">
+<div class="wrap" style="width:940px;">
   
 <h1>Android Developers Live</h1>
   
@@ -61,4 +62,4 @@
     </div><!-- end mainBodyRight -->
 </div><!-- interviewBlock -->
 
-  </div><!-- end mainBodyFixed -->
+</div><!-- end mainBodyFixed -->
diff --git a/docs/html/mwc2010/index.html b/docs/html/mwc2010/index.html
deleted file mode 100644
index c91386f..0000000
--- a/docs/html/mwc2010/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<title>Redirecting...</title>
-<meta http-equiv="refresh" content="0;url=http://sites.google.com/site/androidmwc/home">
-</head>
-<body>
-</body>
-</html>
diff --git a/docs/html/offline.jd b/docs/html/offline.jd
index edd8eb0..73da779 100644
--- a/docs/html/offline.jd
+++ b/docs/html/offline.jd
@@ -23,13 +23,13 @@
 <div id="qv">
   <h2>Get Started</h2>
   <ul>
-    <li>Create a <a href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a>
+    <li>Create a <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>
 application</li>
     <li>Read <a href="{@docRoot}resources/browser.html?tag=sample">Sample Code</a>,
 especially <a href="{@docRoot}resources/samples/ApiDemos/index.html">API Demos</a></li>
-    <li>Read the <a href="{@docRoot}guide/topics/fundamentals/index.html">Application
+    <li>Read the <a href="{@docRoot}guide/components/index.html">Application
 Fundamentals</a></li>
-    <li>Read the <a href="{@docRoot}guide/developing/index.html">Introduction</a> for using the SDK
+    <li>Read the <a href="{@docRoot}tools/workflow/index.html">Introduction</a> for using the SDK
 tools</li>
   </ul>
 </div>
@@ -37,7 +37,7 @@
 
 <h3>If you've downloaded the Android SDK for the first time</h3>
 
-<p>Follow the guide to <a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a>, which
+<p>Follow the guide to <a href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a>, which
 will help you setup your development environment.</p>
 
 <h3>If you've installed new SDK components using the Android SDK Manager</h3>
diff --git a/docs/html/resources/articles/avoiding-memory-leaks.jd b/docs/html/resources/articles/avoiding-memory-leaks.jd
deleted file mode 100644
index 395f590..0000000
--- a/docs/html/resources/articles/avoiding-memory-leaks.jd
+++ /dev/null
@@ -1,111 +0,0 @@
-page.title=Avoiding Memory Leaks
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<p>Android applications are, at least on the T-Mobile G1, limited
-to 16 MB of heap. It's both a lot of memory for a phone and yet very
-little for what some developers want to achieve. Even if you do not
-plan on using all of this memory, you should use as little as possible
-to let other applications run without getting them killed. The more
-applications Android can keep in memory, the faster it will be for the
-user to switch between his apps. As part of my job, I ran into memory
-leaks issues in Android applications and they are most of the time due
-to the same mistake: keeping a long-lived reference to a 
-{@link android.content.Context Context}.</p>
-
-<p>On Android, a <code>Context</code> is used for many operations
- but mostly to load and access resources. This is why all the widgets 
-receive a <code>Context</code> parameter in their constructor. In a 
-regular Android application, you usually have two kinds of 
-<code>Context</code>, {@link android.app.Activity} and 
-{@link android.app.Application}. It's usually the first one that 
-the developer passes to classes and methods that need a <code>Context</code>:</p>
-
-<pre class="prettyprint">&#64;Override
-protected void onCreate(Bundle state) {
-  super.onCreate(state);
-  
-  TextView label = new TextView(this);
-  label.setText("Leaks are bad");
-  
-  setContentView(label);
-}
-</pre>
-
-<p>This means that views have a reference to the entire activity and
-therefore to anything your activity is holding onto; usually the entire
-View hierarchy and all its resources. Therefore, if you leak the <code>Context</code>
-("leak" meaning you keep a reference to it thus preventing the GC from
-collecting it), you leak a lot of memory. Leaking an entire activity
-can be really easy if you're not careful.</p>
-
-<p>When the screen orientation changes the system will, by default,
-destroy the current activity and create a new one while preserving its
-state. In doing so, Android will reload the application's UI from the
-resources. Now imagine you wrote an application with a large bitmap
-that you don't want to load on every rotation. The easiest way to keep
-it around and not having to reload it on every rotation is to keep in a
-static field:</p>
-
-<pre class="prettyprint">private static Drawable sBackground;
-  
-&#64;Override
-protected void onCreate(Bundle state) {
-  super.onCreate(state);
-  
-  TextView label = new TextView(this);
-  label.setText("Leaks are bad");
-  
-  if (sBackground == null) {
-    sBackground = getDrawable(R.drawable.large_bitmap);
-  }
-  label.setBackgroundDrawable(sBackground);
-  
-  setContentView(label);
-}
-</pre> 
-
-<p>This code is very fast and also very wrong; it leaks the first activity 
-created upon the first screen orientation change. When a 
-{@link android.graphics.drawable.Drawable Drawable} is attached to a view, the view is set as a 
-{@link android.graphics.drawable.Drawable#setCallback(android.graphics.drawable.Drawable.Callback) callback} 
-on the drawable. In the code snippet above, this means the drawable has a 
-reference to the <code>TextView</code> which itself has a reference to the 
-activity (the <code>Context</code>) which in turns has references to 
-pretty much anything (depending on your code.)</p> 
- 
-<p>This example is one of the simplest cases of leaking the 
-<code>Context</code> and you can see how we worked around it in the 
-<a href="http://android.git.kernel.org/?p=platform/packages/apps/Launcher.git;a=blob;f=src/com/android/launcher/LauncherModel.java;h=0ef2a806b767142b28b2ff3b37f21f4ca16c355d;hb=cupcake">Home screen's source code</a>
-(look for the <code>unbindDrawables()</code> method) by setting the stored 
-drawables' callbacks to null when the activity is destroyed. Interestingly 
-enough, there are cases where you can create a chain of leaked contexts, 
-and they are bad. They make you run out of memory rather quickly.</p> 
- 
-<p>There are two easy ways to avoid context-related memory leaks. The most 
-obvious one is to avoid escaping the context outside of its own scope. The 
-example above showed the case of a static reference but inner classes and 
-their implicit reference to the outer class can be equally dangerous. The 
-second solution is to use the <code>Application</code> context. This 
-context will live as long as your application is alive and does not depend 
-on the activities life cycle. If you plan on keeping long-lived objects 
-that need a context, remember the application object. You can obtain it 
-easily by calling 
-{@link android.content.Context#getApplicationContext() Context.getApplicationContext()} 
-or {@link android.app.Activity#getApplication() Activity.getApplication()}.</p> 
- 
-<p>In summary, to avoid context-related memory leaks, remember the following:</p> 
-<ul> 
-<li>Do not keep long-lived references to a context-activity (a reference 
-to an activity should have the same life cycle as the activity itself)</li> 
-<li>Try using the context-application instead of a context-activity</li> 
-<li>Avoid non-static inner classes in an activity if you don't control 
-their life cycle, use a static inner class and make a weak reference to 
-the activity inside. The solution to this issue is to use a static inner 
-class with a {@link java.lang.ref.WeakReference WeakReference} to the 
-outer class, as done in <a href="http://android.git.kernel.org/?p=platform/frameworks/base.git;a=blob;f=core/java/android/view/ViewRoot.java;h=9d7a124cb01ab94bf53e34f6e5e8a07f81e2423c;hb=master">ViewRoot</a>
-and its W inner class for instance</li> 
-<li>A garbage collector is not an insurance against memory leaks</li> 
-</ul> 
diff --git a/docs/html/resources/articles/backward-compatibility.jd b/docs/html/resources/articles/backward-compatibility.jd
deleted file mode 100644
index f96d587..0000000
--- a/docs/html/resources/articles/backward-compatibility.jd
+++ /dev/null
@@ -1,252 +0,0 @@
-page.title=Backward Compatibility for Applications
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>A variety of Android-powered devices are now available to consumers from carriers
-in geographies around the world. Across those devices, a range of Android
-platform versions are in use, some running the latest version of the platform,
-others running older versions. As a developer, you need to consider the approach
-to backward compatibility that you will take in your application &mdash; do you
-want to allow your application to run on all devices, or just those running the
-latest software? In some cases it will be useful to employ the newer APIs on
-devices that support them, while continuing to support older devices. </p>
-
-<h3>Setting the minSdkVersion</h3>
-<p>If the use of a new API is integral to the application &mdash; perhaps you
-need to record video using an API introduced in Android 1.5 (API Level 3)
-&mdash; you should add a <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;android:minSdkVersion&gt;</code></a>
- to the application's manifest, to ensure your app won't
-be installed on older devices. For example, if your application depends on an
-API introduced in API Level 3, you would specify "3" as the value of the minimum
-SDK version</a>:</p>
-
-<pre>  &lt;manifest&gt;
-   ...
-   &lt;uses-sdk android:minSdkVersion="3" /&gt;
-   ...
-  &lt;/manifest&gt;</pre>
-
-<p>However, if you want to add a useful but non-essential feature, such as
-popping up an on-screen keyboard even when a hardware keyboard is available, you
-can write your program in a way that allows it to use the newer features without
-failing on older devices.</p>
-
-<h3>Using reflection</h3>
-
-<p>Suppose there's a simple new call you want to use, like {@link
-android.os.Debug#dumpHprofData(java.lang.String)
-android.os.Debug.dumpHprofData(String filename)}.  The {@link android.os.Debug}
-class has existed since Android 1.0, but the method is new in Anroid 1.5 (API
-Level 3). If you try to call it directly, your app will fail to run on devices
-running Android 1.1 or earlier.</p>
-
-<p>The simplest way to call the method is through reflection.  This requires
-doing a one-time lookup and caching the result in a <code>Method</code> object. 
-Using the method is a matter of calling <code>Method.invoke</code> and un-boxing
-the result. Consider the following:</p>
-
-<pre>public class Reflect {
-   private static Method mDebug_dumpHprofData;
-
-   static {
-       initCompatibility();
-   };
-
-   private static void initCompatibility() {
-       try {
-           mDebug_dumpHprofData = Debug.class.getMethod(
-                   "dumpHprofData", new Class[] { String.class } );
-           /* success, this is a newer device */
-       } catch (NoSuchMethodException nsme) {
-           /* failure, must be older device */
-       }
-   }
-
-   private static void dumpHprofData(String fileName) throws IOException {
-       try {
-           mDebug_dumpHprofData.invoke(null, fileName);
-       } catch (InvocationTargetException ite) {
-           /* unpack original exception when possible */
-           Throwable cause = ite.getCause();
-           if (cause instanceof IOException) {
-               throw (IOException) cause;
-           } else if (cause instanceof RuntimeException) {
-               throw (RuntimeException) cause;
-           } else if (cause instanceof Error) {
-               throw (Error) cause;
-           } else {
-               /* unexpected checked exception; wrap and re-throw */
-               throw new RuntimeException(ite);
-           }
-       } catch (IllegalAccessException ie) {
-           System.err.println("unexpected " + ie);
-       }
-   }
-
-   public void fiddle() {
-       if (mDebug_dumpHprofData != null) {
-           /* feature is supported */
-           try {
-               dumpHprofData("/sdcard/dump.hprof");
-           } catch (IOException ie) {
-               System.err.println("dump failed!");
-           }
-       } else {
-           /* feature not supported, do something else */
-           System.out.println("dump not supported");
-       }
-   }
-}</pre>
-
-<p>This uses a static initializer to call <code>initCompatibility</code>,
-which does the method lookup. If that succeeds, it uses a private
-method with the same semantics as the original (arguments, return
-value, checked exceptions) to do the call. The return value (if it had
-one) and exception are unpacked and returned in a way that mimics the
-original. The <code>fiddle</code> method demonstrates how the
-application logic would choose to call the new API or do something
-different based on the presence of the new method.</p>
-
-<p>For each additional method you want to call, you would add an additional
-private <code>Method</code> field, field initializer, and call wrapper to the
-class.</p>
-
-<p>This approach becomes a bit more complex when the method is declared in a
-previously undefined class. It's also much slower to call
-<code>Method.invoke()</code> than it is to call the method directly. These
-issues can be mitigated by using a wrapper class.</p>
-
-<h3>Using a wrapper class</h3>
-
-<p>The idea is to create a class that wraps all of the new APIs exposed by a new
-or existing class. Each method in the wrapper class just calls through to the
-corresponding real method and returns the same result.</p>
-
-<p>If the target class and method exist, you get the same behavior you would get
-by calling the class directly, with a small amount of overhead from the
-additional method call. If the target class or method doesn't exist, the
-initialization of the wrapper class fails, and your application knows that it
-should avoid using the newer calls.</p>
-
-<p>Suppose this new class were added:</p><pre>public class NewClass {
-   private static int mDiv = 1;
-
-   private int mMult;
-
-   public static void setGlobalDiv(int div) {
-       mDiv = div;
-   }
-
-   public NewClass(int mult) {
-       mMult = mult;
-   }
-
-   public int doStuff(int val) {
-       return (val * mMult) / mDiv;
-   }
-}</pre>
-
-<p>We would create a wrapper class for it:</p>
-
-<pre>class WrapNewClass {
-   private NewClass mInstance;
-
-   /* class initialization fails when this throws an exception */
-   static {
-       try {
-           Class.forName("NewClass");
-       } catch (Exception ex) {
-           throw new RuntimeException(ex);
-       }
-   }
-
-   /* calling here forces class initialization */
-   public static void checkAvailable() {}
-
-   public static void setGlobalDiv(int div) {
-       NewClass.setGlobalDiv(div);
-   }
-
-   public WrapNewClass(int mult) {
-       mInstance = new NewClass(mult);
-   }
-
-   public int doStuff(int val) {
-       return mInstance.doStuff(val);
-   }
-}</pre>
-
-<p>This has one method for each constructor and method in the original, plus a
-static initializer that tests for the presence of the new class. If the new
-class isn't available, initialization of <code>WrapNewClass</code> fails,
-ensuring that the wrapper class can't be used inadvertently.  The
-<code>checkAvailable</code> method is used as a simple way to force class
-initialization.  We use it like this:</p>
-
-<pre>public class MyApp {
-   private static boolean mNewClassAvailable;
-
-   /* establish whether the "new" class is available to us */
-   static {
-       try {
-           WrapNewClass.checkAvailable();
-           mNewClassAvailable = true;
-       } catch (Throwable t) {
-           mNewClassAvailable = false;
-       }
-   }
-
-   public void diddle() {
-       if (mNewClassAvailable) {
-           WrapNewClass.setGlobalDiv(4);
-           WrapNewClass wnc = new WrapNewClass(40);
-           System.out.println("newer API is available - " + wnc.doStuff(10));
-       } else {
-           System.out.println("newer API not available");
-       }
-   }
-}</pre>
-
-<p>If the call to <code>checkAvailable</code> succeeds, we know the new class is
-part of the system. If it fails, we know the class isn't there, and adjust our
-expectations accordingly. It should be noted that the call to
-<code>checkAvailable</code> will fail before it even starts if the bytecode
-verifier decides that it doesn't want to accept a class that has references to a
-nonexistent class. The way this code is structured, the end result is the same
-whether the exception comes from the verifier or from the call to
-<code>Class.forName</code>.</p>
-
-<p>When wrapping an existing class that now has new methods, you only need to
-put the new methods in the wrapper class. Invoke the old methods directly. The
-static initializer in <code>WrapNewClass</code> would be augmented to do a
-one-time check with reflection.</p>
-
-<h3>Testing is key</h3>
-
-<p>You must test your application on every version of the Android framework that
-is expected to support it. By definition, the behavior of your application will
-be different on each. Remember the mantra: if you haven't tried it, it doesn't
-work.</p>
-
-<p>You can test for backward compatibility by running your application in an
-emulator that uses an older version of the platform. The Android SDK allows you
-to do this easily by creating "Android Virtual Devices" with different API
-levels. Once you create the AVDs, you can test your application with old and new
-versions of the system, perhaps running them side-by-side to see the
-differences. More information about emulator AVDs can be found in <a
-href="{@docRoot}guide/developing/devices/index.html">Creating and Managing Virtual Devices</a> and
-from <code>emulator -help-virtual-device</code>.</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/can-i-use-this-intent.jd b/docs/html/resources/articles/can-i-use-this-intent.jd
deleted file mode 100644
index 7787d31..0000000
--- a/docs/html/resources/articles/can-i-use-this-intent.jd
+++ /dev/null
@@ -1,71 +0,0 @@
-page.title=Can I Use this Intent?
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Android offers a very powerful and yet easy-to-use message type called 
-an <a href="{@docRoot}guide/topics/intents/intents-filters.html">intents</a>.
-You can use intents to turn applications into high-level libraries and
-make code modular and reusable. The Android Home screen and AnyCut 
-applications, for instance, use intents extensively to create shortcuts. </p>
-
-<p>While it is nice to be able to make use of a loosely coupled
-API, there is no guarantee that the intent you send will be received by
-another application. This happens in particular with third-party apps, like 
-<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/Panoramio">Panoramio</a> 
-and its RADAR intent.</p>
-
-<p>This article describes a technique you can use to find out whether the system
-contains any application capable of responding to the intent you want to use.
-The example below shows a helper method that queries the system package manager
-to determine whether there's an app that can respond to a specified intent. Your
-application can pass an intent to the method and then, for example, show or hide
-user options that the user would normally use to trigger the intent. </p>
-
-<pre class="prettyprint">/**
- * Indicates whether the specified action can be used as an intent. This
- * method queries the package manager for installed packages that can
- * respond to an intent with the specified action. If no suitable package is
- * found, this method returns false.
- *
- * @param context The application's environment.
- * @param action The Intent action to check for availability.
- *
- * @return True if an Intent with the specified action can be sent and
- *         responded to, false otherwise.
- */
-public static boolean isIntentAvailable(Context context, String action) {
-    final PackageManager packageManager = context.getPackageManager();
-    final Intent intent = new Intent(action);
-    List&lt;ResolveInfo&gt; list =
-            packageManager.queryIntentActivities(intent,
-                    PackageManager.MATCH_DEFAULT_ONLY);
-    return list.size() &gt; 0;
-}
-</pre>
-
-<p>Here is how you could use the helper method:</p>
-
-<pre class="prettyprint">@Override
-public boolean onPrepareOptionsMenu(Menu menu) {
-    final boolean scanAvailable = isIntentAvailable(this,
-        "com.google.zxing.client.android.SCAN");
-
-    MenuItem item;
-    item = menu.findItem(R.id.menu_item_add);
-    item.setEnabled(scanAvailable);
-
-    return super.onPrepareOptionsMenu(menu);
-}
-</pre>
-
-<p>In this example, the menu is grayed out if the <em>Barcode Scanner</em> 
-application is not installed. </p>
-
-<p>Another, simpler, way to do this is to catch the
-<code>ActivityNotFoundException</code> when calling <code>startActivity()</code>
-but it only lets you react to the problem, you cannot predict it and update the
-UI accordingly to prevent the user from doing something that won't work. The
-technique described here can also be used at startup time to ask the user
-whether he'd like to install the missing package, you can then simply redirect
-him to Google Play by using the appropriate URI.</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/contacts.jd b/docs/html/resources/articles/contacts.jd
deleted file mode 100644
index 374587b..0000000
--- a/docs/html/resources/articles/contacts.jd
+++ /dev/null
@@ -1,424 +0,0 @@
-page.title=Using the Contacts API
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Starting from Android 2.0 (API Level 5), the Android platform provides an
-improved Contacts API for managing and integrating contacts from multiple
-accounts and from other data sources. To handle overlapping data from multiple
-sources, the contacts content provider aggregates similar contacts and presents
-them to users as a single entity. This article describes how to use the new API
-to manage contacts.</p>
-
-<p>The new Contacts API is defined in the 
-{@link android.provider.ContactsContract android.provider.ContactsContract} 
-and related classes. The older API is still supported, although deprecated. 
-If you have an existing application that uses the older API, 
-see <a href="#legacy">Considerations for legacy apps</a>, below, for ideas 
-on how to support the Contacts API in your app.</p>
-
-<p>If you'd like to look at an applied example of how to use the new Contacts 
-API, including how to support both the new and older API in a single app,
-please see the <a 
-href="{@docRoot}resources/samples/BusinessCard/index.html">Business Card 
-sample application</a>.</p>
-
-<h3>Data structure of Contacts</h3>
-
-<p>In the new Contacts API, data is laid out in three primary tables: 
-<em>contacts</em>, <em>raw contacts</em>, and <em>data</em>, a structure that 
-is slightly different from that used in the older API. The new structure 
-allows the system to more easily store and manage information for a 
-specific contact from multiple contacts sources. </p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; width: 471px; height: 255px;" src="images/contacts-2.png" alt="" border="0">
-
-<ul>
-<li><code>Data</code> is a generic table that stores all of the data points
-associated with a raw contact. Each row stores data of a specific kind &mdash;
-for example  name, photo, email addresses, phone numbers, and group memberships.
-Each row is tagged with a MIME type to identify what type of data it can
-contain, across the entire column. Columns are generic and the type of data they
-contain is determined by the kind of data stored in each row. For example, if a
-row's data kind is <code>Phone.CONTENT_ITEM_TYPE</code>, then the first column
-stores the phone number, but if the data kind is
-<code>Email.CONTENT_ITEM_TYPE</code>, then the column stores the email address. 
-
-<p>The {@link android.provider.ContactsContract.CommonDataKinds ContactsContract.CommonDataKinds} 
-class provides subclasses corresponding to common MIME types for contacts data. 
-If needed, your application or other contacts sources can define additional MIME 
-types for data rows. For more information about the Data table and examples of 
-how to use it, see {@link android.provider.ContactsContract.Data android.provider.ContactsContract.Data}.</p></li>
-
-<li>A row in the <code>RawContacts</code> table represents the set of
-<code>Data</code> and other information describing a person and associated with
-a single contacts source. For example, a row might define the data associated
-with a person's Google or Exchange account or Facebook friend. For more
-information, see 
-{@link android.provider.ContactsContract.RawContacts ContactsContract.RawContacts}.</p>
-
-<li>A row in the <code>Contacts</code> table represents an aggregate of one or
-more <code>RawContacts</code> describing the same person (or entity). 
-
-<p>As mentioned above, the Contacts content provider automatically aggregates
-Raw Contacts into a single Contact entry, where possible, since common data
-fields (such as name or email address) are likely to be stored in each raw
-contact. Since the aggregation logic maintains the entries in the Contact rows,
-the entries can be read but should not be modified.  See the section <a
-href="#aggregation">Aggregation of contacts</a>, below, for more details, 
-including and information on how to
-control aggregation.</li>
-
-</ul>
-
-<p>When displaying contacts to users, applications should typically operate on
-the Contacts level, since it provides a unified, aggregated view of contacts
-from various underlying sources. </p>
-
-<h4>Example: Inserting a Phone Number</h4>
-
-<p>To insert a phone number using the new APIs you'll need the ID of the Raw
-Contact to attach the phone number to, then you'll need to create a Data
-row:</p>
-
-<pre>import android.provider.ContactsContract.CommonDataKinds.Phone;
-...
-ContentValues values = new ContentValues();
-values.put(Phone.RAW_CONTACT_ID, rawContactId);
-values.put(Phone.NUMBER, phoneNumber);
-values.put(Phone.TYPE, Phone.TYPE_MOBILE);
-Uri uri = getContentResolver().insert(Phone.CONTENT_URI, values);</pre>
-
-
-<h3 id="aggregation">Aggregation of contacts</h3>
-
-<p>When users sync contacts from multiple sources, several contacts might refer
-to the same person or entity, but with slightly different (or overlapping) data.
- For example, "Bob Parr" might be a user's co-worker and also his personal
-friend, so the user might have his contact information stored in both a
-corporate email account and a personal account. To provide a simplified view for
-the user, the system locates such overlapping contacts and combines them into a
-single, aggregate contact.  </p>
-
-<p>The system automatically aggregates contacts by default. However, if needed,
-your application can control how the system handles aggregation or it can
-disable aggregation altogether, as described in the sections below.</p>
-
-<h4>Automatic aggregation</h4>
-
-<p>When a raw contact is added or modified, the system looks for matching
-(overlapping) raw contacts with which to aggregate it. It may not find any
-matching raw contacts, in which case it will create an aggregate contact that
-contains just the original raw contact. If it finds a single match, it creates a
-new contact that contains the two raw contacts. And it may even find multiple
-similar raw contacts, in which case it chooses the closest match. </p>
-
-<p>Two raw contacts are considered to be a match if at least one of these
-conditions is met:</p>
-
-<ul>
-<li>They have matching names.</li>
-<li>Their names consist of the same words but in different order 
-(for example, "Bob Parr" and "Parr, Bob")</li>
-<li>One of them has a common short name for the other (for example, 
-"Bob Parr" and "Robert Parr")</li>
-<li>One of them has just a first or last name and it matches the other 
-raw contact. This rule is less reliable, so it only applies if the two 
-raw contacts are also sharing some other data like a phone number, an 
-email address or a nickname (for example, Helen ["elastigirl"] = Helen 
-Parr ["elastigirl"])</li>
-<li>At least one of the two raw contacts is missing the name altogether 
-and they are sharing a phone number, an email address or a nickname (for 
-example, Bob Parr [incredible@android.com] = incredible@android.com).</li>
-</ul>
-
-<p>When comparing names, the system ignores upper/lower case differences 
-(Bob=BOB=bob) and diacritical marks (Hélène=Helene). When comparing two 
-phone numbers the system ignores special characters such as "*", "#", 
-"(", ")", and whitespace. Also if the only difference between two numbers 
-is that one has a country code and the other does not, then the system 
-considers those to be a match (except for numbers in the Japan country code).</p>
-
-<p>Automatic aggregation is not permanent; any change of a constituent raw 
-contact may create a new aggregate or break up an existing one.</p>
-
-<h4>Explicit aggregation</h4>
-
-<p>In some cases, the system's automatic aggregation may not meet the
-requirements of your application or sync adapter. There are two sets of APIs you
-can use to control aggregation explicitly: <em>aggregation modes</em> allow you
-to control automatic aggregation behaviors and <em>aggregation exceptions</em>
-allow you to override automated aggregation entirely.
-
-<p><strong>Aggregation modes</strong></p>
-
-<p>You can set an aggregation mode for each raw contact individually. To do so,
-add a mode constant as the value of the <code>AGGREGATION_MODE column</code> in
-the <code>RawContact</code> row. The mode constants available include: </p>
-
-<ul>
-<li><code>AGGREGATION_MODE_DEFAULT</code> &mdash; normal mode, automatic
-aggregation is allowed.</li>
-<li><code>AGGREGATION_MODE_DISABLED</code> &mdash; automatic aggregation is not
-allowed. The raw contact will not be aggregated.</li>
-<li><code>AGGREGATION_MODE_SUSPENDED</code> &mdash; automatic aggregation is
-deactivated. If the raw contact is already a part of an aggregated contact when
-aggregation mode changes to suspended, it will remain in the aggregate, even if
-it changes in such a way that it no longer matches the other raw contacts in the
-aggregate.</li>
-</ul>
-
-<p><strong>Aggregation exceptions</strong></p>
-
-<p>To keep two raw contacts unconditionally together or unconditionally apart,
-you can add a row to the 
-{@link android.provider.ContactsContract.AggregationExceptions} table. Exceptions
-defined in the table override all automatic aggregation rules. </p>
-
-
-<h3>Loookup URI</h3>
-
-<p>The new Contacts API introduces the notion of a lookup key for a contact. If
-your application needs to maintain references to contacts, you should use lookup
-keys instead of the traditional row ids. You can acquire a lookup key from the
-contact itself, it is a column on the 
-{@link android.provider.ContactsContract.Contacts} table. Once you have a lookup key,
-you can construct a URI in this way:</p>
-
-<pre>Uri lookupUri = Uri.withAppendedPath(Contacts.CONTENT_LOOKUP_URI, lookupKey)</pre>
-
-<p>and use it like you would use a traditional content URI, for example: </p>
-
-<pre>Cursor c = getContentResolver().query(lookupUri, new String[]{Contacts.DISPLAY_NAME}, ...);
-try {
-    c.moveToFirst();
-    String displayName = c.getString(0);
-} finally {
-    c.close();
-}</pre>
-
-<p>The reason for this complication is that regular contact row IDs are
-inherently volatile. Let's say your app stored a long ID of a contact. Then the
-user goes and manually joins the contact with some other contact. Now there is a
-single contact where there used to be two, and the stored long contact ID points
-nowhere. 
-
-<p>The lookup key helps resolve the contact in this case. The key is a string
-that concatenates the server-side identities of the raw contacts. Your
-application can use that string to find a contact, regardless whether the raw
-contact is aggregated with others or not. </p>
-
-<p>If performance is a concern for your application, you might want to store
-both the lookup and the long ID of a contact and construct a lookup URI out of
-both IDs, as shown here:</p>
-
-<pre>Uri lookupUri = getLookupUri(contactId, lookupKey)</pre>
-
-<p>When both IDs are present in the URI, the system will try to use the long ID
-first. That is a very quick query. If the contact is not found, or if the one
-that is found has the wrong lookup key, the content provider will parse the
-lookup key and track down the constituent raw contacts. If your app
-bulk-processes contacts, you should maintain both IDs. If your app works with a
-single contact per user action, you probably don't need to bother with storing
-the long ID.</p>
-
-Android itself uses lookup URIs whenever there is a need to reference a contact,
-such as with shortcuts or Quick Contact, and also during editing or even viewing
-a contact. The latter case is less obvious &mdash; why would a contact ID change
-while we are simply viewing the contact? It could change because there might be
-a sync going in the background, and the contact might get automatically
-aggregated with another while being viewed.</p>
-
-<p>In summary: whenever you need to reference a contact, we recommend that you
-do so by its lookup URI.</p>
-
-
-<h3 id="legacy">Considerations for legacy applications</h3>
-
-<p>If you have an existing application that uses the older Contacts API, 
-you should consider upgrading it to use the new API. You have four options: </p>
-
-<ul>
-<li>Leave it as-is and rely on the Contacts compatibility mode.</li>
-<li>Upgrade the app and discontinue support of pre-Android 2.0 platforms.</li>
-<li>Build a new version of the app for the new API, while keeping the old version available.</li>
-<li>Make the app use the right set of APIs depending on the platform where it is deployed. </li>
-</ul>
-
-<p>Let's consider these options one by one.</p>
-
-<h4>Using compatibility mode</h4>
-
-<p>Compatibility mode is the easiest option because you just leave the
-application as is, and it should run on Android 2.0 as long as it only uses
-public APIs. A couple examples of the use of non-public API include the use of
-explicit table names in nested queries and the use of columns that were not
-declared as public constants in the {@link android.provider.Contacts} class.
-</p>
-
-<p>Even if the application currently runs, you don't want to leave it like this
-for long. The main reason is that it will only have access to contacts from one
-account, namely the first Google account on the device. If the user opens other
-accounts in addition to or instead of a Google account, your application will
-not be able to access those contacts.</p>
-
-
-<h4>Upgrading to the new API and dropping support for older platforms</h4>
-
-<p>If your application will no longer target platforms older than 
-Android 2.0, you can upgrade to the new API in this way:</p>
-
-<ul>
-<li>Replace all usages of {@link android.provider.Contacts} with calls to new
-API. After you are done, you should not see any deprecation warnings during
-application build. The new application will be able to take full advantage of
-multiple accounts and other new features of Android 2.0. </p>
-
-<li>In the application's manifest, update (or add) the
-<code>android:minSdkVersion</code> attribute to the
-<code>&lt;uses-sdk&gt;</code> element. To use the new Contacts API, you should
-set the value of the attribute to "5" (or higher, as appropriate). For more
-information about <code>android:minSdkVersion</code>, see the documentation for
-the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-element. For more information about the value of the
-<code>minSdkVersion</code>, see <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>.</li>
-</ul>
-
-<h4>Maintaining two applications</h4>
-
-<p>You may decide to have two different applications: one for pre-Android 2.0 
-platforms and one for Android 2.0 and beyond. If so, here's what you'll need to do:</p>
-
-<ul>
-  <li>Clone your existing app. </li>
-  <li>Change the old application: </li>
-    <ul>
-      <li>At launch time, check the version of the SDK. The version of the SDK 
-is available as {@link android.os.Build.VERSION#SDK android.os.Build.VERSION.SDK}.</li>
-      <li>If the SDK version is greater or equal to 5 (Android 2.0), show a dialog 
-suggesting to the user that it's time to go to Google Play and find a new version of 
-the app. You can even provide a link to the new app on Google Play (see <a 
-href="{@docRoot}guide/publishing/publishing.html#marketintent">Using Intents 
-to Launch Google Play</a>). </li>
-    </ul>
-  <li>Change the new application:</li>
-    <ul>
-      <li>Replace all usages of the older Contacts API with calls to new API. 
-The new application will be able to take full advantage of multiple accounts 
-and other new features of Android 2.0. </li>
-      <li>Modify that application's AndroidManifest.xml file: </li>
-        <ul>
-          <li>Give the application a new name and a new package name. Currently 
-Google Play does not allow you to have two applications with the same 
-name/package.</li>
-          <li>Update (or add) the <code>android:minSdkVersion</code> attribute 
-to the <code>&lt;uses-sdk&gt;</code> element. To use the new Contacts API, 
-you should set the value of the attribute to "5" (or higher, as appropriate).</li>
-        </ul>
-      </ul>
-    <li>Publish both apps on Google Play, the old app one as an upgrade and the 
-other as new. Make sure to explain the difference between the apps in their 
-descriptions.</li>
-</ul>
-
-<p>This plan has its disadvantages: </p>
-
-<ul>
-<li>The new application will not be able to read the old application's data. 
-Application data can only be accessed by code living in the same package. So 
-databases, shared preferences, and so on, will need to be populated from 
-scratch.</li>
-<li>The upgrade process is too clunky for the user. Some users may choose 
-to either stay with the crippled old version or uninstall altogether.</li>
-</ul>
-
-<h4>Supporting the old and new APIs in the same application</h4>
-
-<p>This is a bit tricky, but the result is worth the effort. You can 
-build a single package that will work on any platform:</p>
-
-<p>Go through the existing application and factor out all access to 
-{@link android.provider.Contacts} into one class, such as ContactAccessorOldApi. 
-For example, if you have code like this:
-
-<pre>    protected void pickContact() {
-        startActivityForResult(new Intent(Intent.ACTION_PICK, People.CONTENT_URI), 0);
-    }</pre>
-
-<p>it will change to:</p>
-
-    
-<pre>    private final ContactAccessorOldApi mContactAccessor = new ContactAccessorOldApi();
-
-    void pickContact() {
-        startActivityForResult(mContactAccessor.getContactPickerIntent(), 0);
-    }</pre>
-
-<p>The corresponding method on ContactAccessorOldApi will look like this:</p>
-
-<pre>    public Intent getContactPickerIntent() {
-        return new Intent(Intent.ACTION_PICK, People.CONTENT_URI);
-    }</pre>
-
-<p>Once you are done, you should see deprecation warnings coming only 
-from ContactAccessorOldApi. </p>
-
-<p>Create a new abstract class ContactAccessor, make sure the abstract 
-class has all method signatures from ContactAccessorOldApi. Make 
-ContactAccessorOldApi extend ContactAccessor:</p>
-
-<pre>    public abstract class ContactAccessor {
-        public abstract Intent getContactPickerIntent();
-        ...
-    }</pre>
-
-<p>Create a new subclass of ContactAccessor, ContactAccessorNewApi and 
-implement all methods using the new API:</p>
-
-<pre>    public class ContactAccessorNewApi extends ContactAccessor {    
-        &#64;Override
-        public Intent getContactPickerIntent() {
-            return new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);
-        }
-        ...
-    }</pre>
-
-<p>At this point, you have two implementations of the same API, one using the 
-old API and another using the new API. Let's plug them in. Add this code to 
-the ContactAccessor class:</p>
-
-<pre>    private static ContactAccessor sInstance;
-
-    public static ContactAccessor getInstance() {
-        if (sInstance == null) {
-            String className;
-            int sdkVersion = Integer.parseInt(Build.VERSION.SDK);
-            if (sdkVersion &lt; Build.VERSION_CODES.ECLAIR) {
-                className = "ContactAccessorOldApi";
-            } else {
-                className = "ContactAccessorNewApi";
-            }
-            try {
-                Class&lt;? extends ContactAccessor&gt; clazz =
-                        Class.forName(ContactAccessor.class.getPackage() + "." + className)
-                                .asSubclass(ContactAccessor.class);
-                sInstance = clazz.newInstance();
-            } catch (Exception e) {
-                throw new IllegalStateException(e);
-            }
-        }
-        return sInstance;
-    }</pre>
-
-<p>Now replace references to ContactsAccessorOldApi with references to 
-ContactsAccessor:</p>
-
-<pre>    private final ContactAccessor mContactAccessor = ContactAccessor.getInstance();</pre>
-
-<p>You are done! Now you will want to test on Android 2.0, 1.6 and 1.5.</p>
-
-<p>We hope you like the new features and APIs we've added to Contacts in 
-Android 2.0, and we can't wait to see what cool things developers do with 
-the new APIs.</p>
diff --git a/docs/html/resources/articles/creating-input-method.jd b/docs/html/resources/articles/creating-input-method.jd
deleted file mode 100644
index 84c2704..0000000
--- a/docs/html/resources/articles/creating-input-method.jd
+++ /dev/null
@@ -1,528 +0,0 @@
-page.title=Creating an Input Method
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>See also</h2>
-<ol>
-    <li>
-        <a href="{@docRoot}resources/articles/on-screen-inputs.html">Onscreen Input Methods</a>
-    </li>
-    <li>
-        <a href="{@docRoot}resources/samples/SoftKeyboard/index.html">Soft Keyboard sample</a>
-    </li>
-</ol>
-</div>
-</div>
-<p>
-    An input method editor (IME) is a user control that enables users to enter text. Android 
-    provides an extensible input method framework that allows applications to provide users 
-    alternative input methods, such as on-screen keyboards or even speech input. Once installed, 
-    users can select which IME they want to use from the system settings and use it across the 
-    entire system; only one IME may be enabled at a time.
-</p>
-<p>
-    To add an IME to the Android system, you create an Android application
-    containing a class that extends {@link android.inputmethodservice.InputMethodService}. In 
-    addition, you usually create a "settings" activity that passes options to the IME
-    service. You can also define a settings UI that's displayed as part of the system settings.
-</p>
-<p>This article covers the following:</p>
-<ul>
-    <li>The IME lifecycle.</li>
-    <li>Declaring IME components in the application manifest.</li>
-    <li>The IME API.</li>
-    <li>Designing an IME UI.</li>
-    <li>Sending text from an IME to an application.</li>
-    <li>Working with IME subtypes.</li>
-</ul>
-<p>
-    If you haven't worked with IMEs before, you should read the introductory article 
-    <a href="{@docRoot}resources/articles/on-screen-inputs.html">Onscreen Input Methods</a> first.
-    Also, the Soft Keyboard sample app included in the SDK contains sample code that you can modify
-    to start building your own IME.
-</p>
-<h2 id="InputMethodLifecycle">The IME Lifecycle</h2>
-<p>
-    The following diagram describes the life cycle of an IME:
-</p>
-<img src="{@docRoot}resources/articles/images/inputmethod_lifecycle_image.png" alt="" height="845"
-    id="figure1" />
-<p class="img-caption">
-    <strong>Figure 1.</strong> The life cycle of an IME.
-</p>
-<p>
-    The following sections describe how to implement the UI and code associated with an IME that
-    follows this lifecycle.
-</p>
-<h2 id="DefiningIME">Declaring IME Components in the Manifest</h2>
-<p>
-    In the Android system, an IME is an Android application that contains a special IME service.
-    The application's manifest file must declare the service, request the necessary permissions, 
-    provide an intent filter that matches the action <code>action.view.InputMethod</code>, and 
-    provide metadata that defines characteristics of the IME. In addition, to provide a settings
-    interface that allows the user to modify the behavior of the IME, you can define a "settings"
-    activity that can be launched from System Settings.
-</p>
-<p>
-    The following snippet declares IME service. It requests the permission {@link
-    android.Manifest.permission#BIND_INPUT_METHOD} to allow the service to connect the IME to 
-    the system, sets up an intent filter that matches the action 
-    <code>android.view.InputMethod</code>, and defines metadata for the IME:
-</p>
-<pre>
-&lt;!-- Declares the input method service --&gt;
-    &lt;service android:name="FastInputIME"
-        android:label="&#64;string/fast_input_label"
-        android:permission="android.permission.BIND_INPUT_METHOD"&gt;
-        &lt;intent-filter&gt;
-            &lt;action android:name="android.view.InputMethod" /&gt;
-        &lt;/intent-filter&gt;
-        &lt;meta-data android:name="android.view.im" android:resource="&#64;xml/method" /&gt;
-    &lt;/service&gt;
-</pre>
-<p>
-    This next snippet declares the settings activity for the IME. It has an intent filter for
-    {@link android.content.Intent#ACTION_MAIN} that indicates this activity is the main entry point
-    for the IME application:</p>
-<pre>
-    &lt;!-- Optional: an activity for controlling the IME settings --&gt;
-    &lt;activity android:name="FastInputIMESettings" 
-        android:label="&#64;string/fast_input_settings"&gt;
-        &lt;intent-filter&gt;
-            &lt;action android:name="android.intent.action.MAIN"/&gt;
-        &lt;/intent-filter&gt;
-    &lt;/activity&gt;
-</pre>
-<p>
-    You can also provide access to the IME's settings directly from its UI.
-</p>
-<h2 id="IMEAPI">The Input Method API</h2>
-<p>
-    Classes specific to IMEs are found in the {@link android.inputmethodservice} and {@link
-    android.view.inputmethod} packages. The {@link android.view.KeyEvent} class is important for
-    handling keyboard characters.
-</p>
-<p>
-    The central part of an IME is a service component, a class that extends 
-    {@link android.inputmethodservice.InputMethodService}. In addition to implementing the 
-    normal service lifecycle, this class has callbacks for providing your IME's UI, handling user 
-    input, and delivering text to the field that currently has focus. By default, the
-    {@link android.inputmethodservice.InputMethodService} class provides most of the implementation 
-    for managing the state and visibility of the IME and communicating with the current 
-    input field.
-</p>
-<p>
-    The following classes are also important:
-</p>
-<dl>
-    <dt>{@link android.view.inputmethod.BaseInputConnection}</dt>
-    <dd>
-        Defines the communication channel from an {@link android.view.inputmethod.InputMethod}
-        back to the application that is receiving its input. You use it to read text around the
-        cursor, commit text to the text box, and send raw key events to the application.
-        Applications should extend this class rather than implementing the base interface 
-        {@link android.view.inputmethod.InputConnection}.
-    </dd>
-    <dt>{@link android.inputmethodservice.KeyboardView}</dt>
-    <dd>
-        An extension of {@link android.view.View} that renders a keyboard and responds to user
-        input events. The keyboard layout is specified by an instance of 
-        {@link android.inputmethodservice.Keyboard}, which you can define in an XML file.
-    </dd>
-</dl>
-<h2 id="IMEUI">Designing the Input Method UI</h2>
-<p>
-    There are two main visual elements for an IME: the <strong>input</strong> view and the
-    <strong>candidates</strong> view. You only have to implement the elements that are relevant to
-    the input method you're designing.
-</p>
-<h3 id="InputView">Input view</h3>
-<p>
-    The input view is the UI where the user inputs text, in the form of keyclicks, handwriting or
-    gestures. When the iIME is displayed for the first time, the system calls the 
-    {@link android.inputmethodservice.InputMethodService#onCreateInputView()} callback. In your
-    implementation of this method, you create the layout you want to display in the IME
-    window and return the layout to the system. This snippet is an example of implementing the
-    {@link android.inputmethodservice.InputMethodService#onCreateInputView()} method:
-<pre>
-    &#64;Override 
-    public View onCreateInputView() { 
-        MyKeyboardView inputView = 
-            (MyKeyboardView) getLayoutInflater().inflate( R.layout.input, null);
-    
-        inputView.setOnKeyboardActionListener(this); inputView.setKeyboard(mLatinKeyboard); 
-        
-        return mInputView; 
-    } 
-</pre>
-<p>
-    In this example, {@code MyKeyboardView} is an instance of a custom implementation of 
-    {@link android.inputmethodservice.KeyboardView} that renders a 
-    {@link android.inputmethodservice.Keyboard}. If you’re building a traditional QWERTY keyboard, 
-    see the <a href=”{@docRoot}resources/samples/SoftKeyboard/index.html”>Soft Keyboard</a> sample 
-    app for an example of how to extend the {@link android.inputmethodservice.KeyboardView} class.
-</p>
-<h3 id="CandidateView">Candidates view</h3>
-<p>
-    The candidates view is the UI where the IME displays potential word corrections or
-    suggestions for the user to select. In the IME lifecycle, the system calls 
-    {@link android.inputmethodservice.InputMethodService#onCreateCandidatesView()} when it's ready 
-    to display the candidate view. In your implementation of this method, return a layout that shows
-    word suggestions, or return null if you don’t want to show anything (a null response is the
-    default behavior, so you don’t have to implement this if you don’t provide suggestions).</p>
-<p>
-    For an example implementation that provides user suggestions, see the 
-    <a href=”{@docRoot}resources/samples/SoftKeyboard/index.html”>Soft Keyboard</a> sample app.
-</p>
-<h3 id="DesignConsiderations">UI design considerations</h3>
-<p>
-    This section describes some specific UI design considerations for IMEs.
-</p>
-<h4>Handling multiple screen sizes</h4>
-<p>
-    The UI for your IME must be able to scale for different screen sizes, and it also
-    must handle both landscape and portrait orientations. In non-fullscreen IME mode, leave
-    sufficient space for the application to show the text field and any associated context, so that
-    no more than half the screen is occupied by the IME. In fullscreen IME mode this is not an
-    issue.
-</p>
-<h4>Handling different input types</h4>
-<p>
-    Android text fields allow you to set a specific input type, such as free form text, numbers,
-    URLs, email addresses, and search strings. When you implement a new IME, you need to
-    detect the input type of each field and provide the appropriate interface for it. However, you
-    don't have to set up your IME to check that the user entered text that's valid for the
-    input type; that's the responsibility of the application that owns the text field.
-</p>
-<p>
-    For example, here are screenshots of the interfaces that the Latin IME provided with the
-    Android platform provides for text and phone number inputs:
-</p>
-<img src="{@docRoot}resources/articles/images/inputmethod_text_type_screenshot.png" alt=""
-    height="142" id="figure2" />
-<img src="{@docRoot}resources/articles/images/inputmethod_numeric_type_screenshot.png" alt=""
-    height="120" id="figure2a" />
-<p class="img-caption">
-    <strong>Figure 2.</strong> Latin IME input types.
-</p>
-<p>
-    When an input field receives focus and your IME starts, the system calls 
-    {@link android.inputmethodservice.InputMethodService#onStartInputView(EditorInfo, boolean)
-    onStartInputView()}, passing in an {@link android.view.inputmethod.EditorInfo} object that 
-    contains details about the input type and other attributes of the text field. In this object, 
-    the {@link android.view.inputmethod.EditorInfo#inputType} field contains the text field's input
-    type.
-</p>
-<p>
-    The {@link android.view.inputmethod.EditorInfo#inputType} field is an <code>int</code>
-    that contains bit patterns for various input type settings. To test it for the text field's
-    input type, mask it with the constant {@link android.text.InputType#TYPE_MASK_CLASS}, like
-    this:
-</p>
-<pre>
-inputType &amp; InputType.TYPE_MASK_CLASS 
-</pre>
-<p>
-The input type bit pattern can have one of several values, including:
-</p>
-<dl>
-    <dt>{@link android.text.InputType#TYPE_CLASS_NUMBER}</dt>
-    <dd>
-        A text field for entering numbers. As illustrated in the previous screen shot, the
-        Latin IME displays a number pad for fields of this type.
-    </dd>
-    <dt>{@link android.text.InputType#TYPE_CLASS_DATETIME}</dt>
-    <dd>
-        A text field for entering a date and time.
-    </dd>
-    <dt>{@link android.text.InputType#TYPE_CLASS_PHONE}</dt>
-    <dd>
-        A text field for entering telephone numbers.
-    </dd>
-    <dt>{@link android.text.InputType#TYPE_CLASS_TEXT}</dt>
-    <dd>
-        A text field for entering all supported characters.
-    </dd>
-</dl>
-<p>
-    These constants are described in more detail in the reference documentation for 
-    {@link android.text.InputType}.
-</p>
-<p>
-    The {@link android.view.inputmethod.EditorInfo#inputType} field can contain other bits that
-    indicate a variant of the text field type, such as:
-</p>
-<dl>
-    <dt>{@link android.text.InputType#TYPE_TEXT_VARIATION_PASSWORD}</dt>
-    <dd>
-        A variant of {@link android.text.InputType#TYPE_CLASS_TEXT} for entering passwords. The
-        input method will display dingbats instead of the actual text.
-    </dd>
-    <dt>{@link android.text.InputType#TYPE_TEXT_VARIATION_URI}</dt>
-    <dd>
-        A variant of {@link android.text.InputType#TYPE_CLASS_TEXT} for entering web URLs and
-        other Uniform Resource Identifiers (URIs).
-    </dd>
-    <dt>{@link android.text.InputType#TYPE_TEXT_FLAG_AUTO_COMPLETE}</dt>
-    <dd>
-        A variant of {@link android.text.InputType#TYPE_CLASS_TEXT} for entering text that the
-        application "auto-completes" from a dictionary, search, or other facility.
-    </dd>
-</dl>
-<p>
-    Remember to mask {@link android.view.inputmethod.EditorInfo#inputType} with the appropriate
-    constant when you test for these variants. The available mask constants are listed in the
-    reference documentation for {@link android.text.InputType}.
-</p>
-<p class="caution">
-    <strong>Caution:</strong> In your own IME, make sure you handle text correctly when you send it
-    to a password field. Hide the password in your UI both in the input view and in the candidates
-    view. Also remember that you shouldn't store passwords on a device. To learn more, see the <a
-        href="{@docRoot}guide/practices/security.html">Designing for Security</a> guide.
-</p>
-<h2 id="SendText">Sending Text to the Application</h2>
-<p>
-    As the user inputs text with your IME, you can send text to the application by
-    sending individual key events or by editing the text around the cursor in the application's text
-    field. In either case, you use an instance of {@link android.view.inputmethod.InputConnection} 
-    to deliver the text. To get this instance, call 
-    {@link android.inputmethodservice.InputMethodService#getCurrentInputConnection
-    InputMethodService.getCurrentInputConnection()}.
-</p>
-<h3 id="EditingCursor">Editing the text around the cursor</h3>
-<p>
-    When you're handling the editing of existing text in a text field, some of the more useful
-    methods in {@link android.view.inputmethod.BaseInputConnection} are:
-</p>
-<dl>
-    <dt>
-        {@link android.view.inputmethod.BaseInputConnection#getTextBeforeCursor(int, int)
-        getTextBeforeCursor()}</dt>
-    <dd>
-        Returns a {@link java.lang.CharSequence} containing the number of requested characters
-        before the current cursor position.
-    </dd>
-    <dt>
-        {@link android.view.inputmethod.BaseInputConnection#getTextAfterCursor(int, int)
-        getTextAfterCursor()}
-    </dt>
-    <dd>
-        Returns a {@link java.lang.CharSequence} containing the number of requested characters
-        following the current cursor position.
-    </dd>
-    <dt>
-        {@link android.view.inputmethod.BaseInputConnection#deleteSurroundingText(int, int)
-        deleteSurroundingText()}
-    </dt>
-    <dd>
-        Deletes the specified number of characters before and following the current cursor
-        position.
-    </dd>
-    <dt>
-        {@link android.view.inputmethod.BaseInputConnection#commitText(CharSequence, int)
-        commitText()}
-    </dt>
-    <dd>
-        Commit a {@link java.lang.CharSequence} to the text field and set a new cursor
-        position.
-    </dd>
-</dl>
-<p>
-    For example, the following snippet shows how to replace the text "Fell" to the left of the
-    with the text "Hello!":
-</p>
-<pre>
-    InputConnection ic = getCurrentInputConnection();
-    
-    ic.deleteSurroundingText(4, 0);
-    
-    ic.commitText("Hello", 1);
-    
-    ic.commitText("!", 1);
-</pre>
-<h3 id="ComposeThenCommit">Composing text before committing</h3>
-<p>
-    If your IME does text prediction or requires multiple steps to compose a glyph or
-    word, you can show the progress in the text field until the user commits the word, and then you
-    can replace the partial composition with the completed text. You may give special treatment to 
-    the text by adding a "span" to it when you pass it to InputConnection#setComposingText().
-</p>
-<p>
-    The following snippet shows how to show progress in a text field:
-</p>
-<pre>
-    InputConnection ic = getCurrentInputConnection();
-
-    ic.setComposingText("Composi", 1);
-...
-
-    ic.setComposingText("Composin", 1);
-
-...
-
-    ic.commitText("Composing ", 1);
-</pre>
-<p>
-    The following screenshots show how this appears to the user:
-</p>
-<img src="{@docRoot}resources/articles/images/inputmethod_composing_text_1.png" alt="" height="54"
-    id="figure3a" />
-<img src="{@docRoot}resources/articles/images/inputmethod_composing_text_2.png" alt="" height="53"
-    id="figure3b" />
-<img src="{@docRoot}resources/articles/images/inputmethod_composing_text_3.png" alt="" height="31"
-    id="figure3c" />
-<p class="img-caption">
-    <strong>Figure 3.</strong> Composing text before committing.
-</p>
-<h3 id="HardwareKeyEvents">Intercepting hardware key events</h3>
-<p>
-    Even though the input method window doesn't have explicit focus, it receives hardware key
-    events first and can choose to consume them or forward them along to the application. For
-    example, you may want to consume the directional keys to navigate within your UI for candidate
-    selection during composition. You may also want to trap the back key to dismiss any popups
-    originating from the input method window.</p>
-<p>
-    To intercept hardware keys, override 
-    {@link android.inputmethodservice.InputMethodService#onKeyDown(int, KeyEvent) onKeyDown()}
-    and {@link android.inputmethodservice.InputMethodService#onKeyUp(int, KeyEvent) onKeyUp()}. 
-    See the <a href=”{@docRoot}resources/samples/SoftKeyboard/index.html”>Soft Keyboard</a> sample 
-    app for an example.
-</p>
-<p>
-    Remember to call the <code>super()</code> method for keys you don't want to handle yourself.
-</p>
-<h2 id="IMESubTypes">Creating an IME Subtype</h2>
-<p>
-    Subtypes allow the IME to expose multiple input modes and languages supported by an IME. A 
-    subtype can represent:
-</p>
-<ul>
-    <li>A locale such as en_US or fr_FR</li>
-    <li>An input mode such as voice, keyboard, or handwriting</li>
-    <li>
-        Other input styles, forms, or properties specific to the IME, such as 10-key or qwerty
-        keyboard layouts.
-    </li>
-</ul>
-<p>
-    Basically, the mode can be any text such as "keyboard", "voice", and so forth.
-</p>
-<p>A subtype can also expose a combination of these.</p>
-<p>
-    Subtype information is used for an IME switcher dialog that's available from the notification
-    bar and also for IME settings. The information also allows the framework to bring up a
-    specific subtype of an IME directly. When you build an IME, use the subtype facility, because 
-    it helps the user identify and switch between different IME languages and modes.
-</p>
-<p>
-    You define subtypes in one of the input method's XML resource files, using the
-    <code>&lt;subtype&gt;</code> element. The following snippet defines an IME with two 
-    subtypes: a keyboard subtype for the US English locale, and another keyboard subtype for the 
-    French language locale for France:
-</p>
-<pre>
-&lt;input-method xmlns:android="http://schemas.android.com/apk/res/android"
-        android:settingsActivity="com.example.softkeyboard.Settings"
-        android:icon="&#64;drawable/ime_icon"
-    &lt;subtype android:name="&#64;string/display_name_english_keyboard_ime"
-            android:icon="&#64;drawable/subtype_icon_english_keyboard_ime"
-            android:imeSubtypeLanguage="en_US"
-            android:imeSubtypeMode="keyboard"
-            android:imeSubtypeExtraValue="somePrivateOption=true"
-    /&gt;
-    &lt;subtype android:name="&#64;string/display_name_french_keyboard_ime"
-            android:icon="&#64;drawable/subtype_icon_french_keyboard_ime"
-            android:imeSubtypeLanguage="fr_FR"
-            android:imeSubtypeMode="keyboard"
-            android:imeSubtypeExtraValue="foobar=30,someInternalOption=false"
-    /&gt;
-    &lt;subtype android:name="&#64;string/display_name_german_keyboard_ime"
-            ...
-    /&gt;
-/&gt;
-</pre>
-<p>
-    To ensure that your subtypes are labeled correctly in the UI, use %s to get a subtype label
-    that is the same as the subtype’s locale label. This is demonstrated in the next two snippets.
-    The first snippet shows part of the input method's XML file:
-</p>
-<pre>
-    &lt;subtype
-        android:label="&#64;string/label_subtype_generic"
-        android:imeSubtypeLocale="en_US"
-        android:icon="&#64;drawable/icon_en_us"
-        android:imeSubtypeMode="keyboard" /&gt;
-</pre>
-<p>
-    The next snippet is part of the IME's <code>strings.xml</code> file. The string 
-    resource <code>label_subtype_generic</code>, which is used by the input method UI definition to 
-    set the subtype's label, is defined as:
-</p>
-<pre>
-&lt;string name="label_subtype_generic"&gt;%s&lt;/string&gt;
-</pre>
-<p>
-    This sets the subtype’s display name to “English (United States)” in any English language
-    locale, or to the appropriate localization in other locales.
-</p>
-<h3 id="SubtypeProcessing">Choosing IME subtypes from the notification bar</h3>
-<p>
-    The Android system manages all subtypes exposed by all IMEs. IME subtypes are
-    treated as modes of the IME they belong to. In the notification bar, a user can select an
-    available subtype for the currently-set IME, as shown in the following screenshot:
-</p>
-<img src="{@docRoot}resources/articles/images/inputmethod_subtype_notification.png" alt=""
-    height="85" id="figure4" />
-<p class="img-caption">
-    <strong>Figure 4.</strong> Choosing an IME subtype from the notification bar.
-</p>
-<img src="{@docRoot}resources/articles/images/inputmethod_subtype_preferences.png" alt=""
-    height="165" id="figure5" />
-<p class="img-caption">
-    <strong>Figure 5.</strong> Setting subtype preferences in System Settings.
-</p>
-<h3 id="SubtypeSettings">Choosing IME subtypes from System Settings</h3>
-<p>
-    A user can control how subtypes are used in the “Language &amp; input” settings panel in the
-    System Settings area. In the Soft Keyboard sample, the file 
-    <code>InputMethodSettingsFragment.java</code> contains an implementation that 
-    facilitates a subtype enabler in the IME settings. Please refer to the SoftKeyboard sample in 
-    the Android SDK for more information about how to support Input Method Subtypes in your IME.
-</p>
-<img src="{@docRoot}resources/articles/images/inputmethod_subtype_settings.png" alt=""
-    height="210" id="figure6" />
-<p class="img-caption">
-    <strong>Figure 6.</strong> Choosing a language for the IME.
-</p>
-<h2 id="GeneralDesign">General IME Considerations</h2>
-<p>
-    Here are some other things to consider as you're implementing your IME:
-</p>
-<ul>
-<li>
-    Provide a way for users to set options directly from the IME's UI.
-</li>
-<li>
-    Because multiple IMEs may be installed on the device, provide a way for the user to switch to a 
-    different IME directly from the input method UI.
-</li>
-<li>
-    Bring up the IME's UI quickly. Preload or load on demand any large resources so that users 
-    see the IME as soon as they tap on a text field. Cache resources and views for subsequent 
-    invocations of the input method.
-</li>
-<li>
-    Conversely, you should release large memory allocations soon after the input method window is 
-    hidden, so that applications can have sufficient memory to run. Consider using a delayed message
-    to release resources if the IME is in a hidden state for a few seconds.
-</li>    
-<li>
-    Make sure that users can enter as many characters as possible for the language or locale 
-    associated with the IME. Remember that users may use punctuation in passwords or user 
-    names, so your IME has to provide many different characters to allow users to enter a
-    password and get access to the device.
-</li>
-</ul>
diff --git a/docs/html/resources/articles/drawable-mutations.jd b/docs/html/resources/articles/drawable-mutations.jd
deleted file mode 100644
index c5818fc..0000000
--- a/docs/html/resources/articles/drawable-mutations.jd
+++ /dev/null
@@ -1,93 +0,0 @@
-page.title=Drawable Mutations
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Android's drawables are extremely useful to easily build applications. A
-{@link android.graphics.drawable.Drawable Drawable} is a pluggable drawing
-container that is usually associated with a View. For instance, a 
-{@link android.graphics.drawable.BitmapDrawable BitmapDrawable} is used to display
-images, a {@link android.graphics.drawable.ShapeDrawable ShapeDrawable} to draw
-shapes and gradients, and so on. You can even combine them to create complex
-renderings.</p>
-
-<p>Drawables allow you to easily customize the rendering of the widgets without
-subclassing them. As a matter of fact, they are so convenient that most of the
-default Android apps and widgets are built using drawables; there are about 700
-drawables used in the core Android framework. Because drawables are used so
-extensively throughout the system, Android optimizes them when they are loaded
-from resources. For instance, every time you create a 
-{@link android.widget.Button Button}, a new drawable is loaded from the framework
-resources (<code>android.R.drawable.btn_default</code>). This means all buttons
-across all the apps use a different drawable instance as their background.
-However, all these drawables share a common state, called the "constant state."
-The content of this state varies according to the type of drawable you are
-using, but it usually contains all the properties that can be defined by a
-resource. In the case of a button, the constant state contains a bitmap image.
-This way, all buttons across all applications share the same bitmap, which saves
-a lot of memory.</p>
-
-<p>The following diagram shows what entities are
-created when you assign the same image resource as the background of
-two different views. As you can see, two drawables are created but they
-both share the same constant state, hence the same bitmap:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 307px; height: 400px;" src="images/shared_states.png" alt="" id="BLOGGER_PHOTO_ID_5331437883277472082" border="0">
-
-<p>This state sharing feature is great to avoid wasting memory but it can cause
-problems when you try to modify the properties of a drawable. Imagine an
-application with a list of books. Each book has a star next to its name, totally
-opaque when the user marks the book as a favorite, and translucent when the book
-is not a favorite. To achieve this effect, you would probably write the
-following code in your list adapter's <code>getView()</code> method:</p>
-
-<pre>Book book = ...;
-TextView listItem = ...;
-
-listItem.setText(book.getTitle());
-
-Drawable star = context.getResources().getDrawable(R.drawable.star);
-if (book.isFavorite()) {
-  star.setAlpha(255); // opaque
-} else {
-  star.setAlpha(70); // translucent
-}</pre>
-
-<p>Unfortunately, this piece of code yields a rather strange result: 
-all of the drawables have the same opacity:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 400px;" src="images/all_drawables_changed.png" alt="" id="BLOGGER_PHOTO_ID_5331438978390342066" border="0">
-
-<p>This
-result is explained by the constant state. Even though we are getting a
-new drawable instance for each list item, the constant state remains
-the same and, in the case of BitmapDrawable, the opacity is part of the
-constant state. Thus, changing the opacity of one drawable instance
-changes the opacity of all the other instances. Even worse, working
-around this issue was not easy with Android 1.0 and 1.1.</p>
-
-<p>Android 1.5 and higher offers a very easy way to solve this issue 
-with the new {@link android.graphics.drawable.Drawable#mutate()} method</a>.
-When you invoke this method on a drawable, the constant state of the
-drawable is duplicated to allow you to change any property without
-affecting other drawables. Note that bitmaps are still shared, even
-after mutating a drawable. The diagram below shows what happens when
-you invoke <code>mutate()</code> on a drawable:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 307px; height: 400px;" src="images/mutated_states.png" alt="" id="BLOGGER_PHOTO_ID_5331440144116345074" border="0">
-
-<p>Let's update our previous piece of code to make use of <code>mutate()</code>:</p>
-
-<pre>Drawable star = context.getResources().getDrawable(R.drawable.star);
-if (book.isFavorite()) {
-  star.mutate().setAlpha(255); // opaque
-} else {
-  star. mutate().setAlpha(70); // translucent
-}</pre>
-
-<p>For convenience, <code>mutate()</code>
-returns the drawable itself, which allows to chain method calls. It
-does not however create a new drawable instance. With this new piece of
-code, our application now behaves correctly:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 400px;" src="images/correct_drawables.png" alt="" id="BLOGGER_PHOTO_ID_5331440757515573842" border="0">
diff --git a/docs/html/resources/articles/faster-screen-orientation-change.jd b/docs/html/resources/articles/faster-screen-orientation-change.jd
deleted file mode 100644
index e7b73bf..0000000
--- a/docs/html/resources/articles/faster-screen-orientation-change.jd
+++ /dev/null
@@ -1,133 +0,0 @@
-page.title=Faster Screen Orientation Change
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
-Changes</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>Android is designed to run efficiently on a wide
-array of devices, with very different hardware configurations. Some
-devices, like the T-Mobile G1, can change their hardware configuration
-at runtime. For instance, when you open the keyboard, the screen change
-from the portrait orientation to the landscape orientation. 
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Using the alternate resources framework</h2>
-
-<p>The platform's support for loading orientation-specific
-resources at run time is based on the alternate resources framework.</p>
-
-<p>Providing orientation-specific resources is an important part of 
-developing your app. If you are not familiar with resource directory qualifiers 
-or how the platform uses them, please read 
-<a href="{@docRoot}guide/topics/resources/resources-i18n.html#AlternateResources">
-Alternate Resources</a>.
-</div>
-</div>
-
-<p>To make
-Android app development easier, the Android system automatically handles
-configuration change events and restarts the current activity with the new
-configuration. This is the default behavior that lets you declare
-resources like layouts and drawables based on the orientation, screen
-size, locale, etc. </p>
-
-<p>While this behavior is really powerful, since your application adapts
-automatically to the device's configuration at runtime, it is sometimes
-confusing for new Android developers, who wonder why their activity is
-destroyed and recreated. </p>
-
-<p>Facing this "issue," some developers choose to handle configuration changes
-themselves which is, in general, a short-term solution that will only complicate
-their lives later. On the other hand, the system's automatic resource handling
-is a very efficient and easy way to adapt an application's user interface to
-various devices and devices configurations. It sometimes comes at a price,
-though.</p>
-
-<p>When your application displays a lot of data, or data that is expensive to fetch,
-the automatic destruction/creation of the activities can be lead to a
-painful user experience. Take the example of <a href="http://code.google.com/p/apps-for-android/source/browse/#git%2FPhotostream%2Fsrc%2Fcom%2Fgoogle%2Fandroid%2Fphotostream">Photostream</a>,
-a simple Flickr browsing application. After you launch the application and choose a Flickr account, the
-application downloads a set of 6 photos (on a T-Mobile G1) from the
-Flickr servers and displays them on screen. To improve the user
-experience, the application uses slightly different layouts and drawables in
-portrait and landscape modes and this is what the result looks like:</p>
-
-<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_9l0GmPwgCzk/SZoGyJyg6-I/AAAAAAAAACU/ItuVwhegPb8/s1600-h/photostream_landscape.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 214px;" src="images/photostream_landscape.png" alt="" id="BLOGGER_PHOTO_ID_5303558969873198050" border="0"></a></p>
-
-<p><a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_9l0GmPwgCzk/SZoGx4I-QlI/AAAAAAAAACM/-GkZR5MUKhY/s1600-h/photostream_portrait.png"><img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 214px; height: 320px;" src="images/photostream_portrait.png" alt="" id="BLOGGER_PHOTO_ID_5303558965135557202" border="0"></a></p>
-
-<p>Photostream lets Android take care of the configuration change when the
-screen is rotated. However, can you imagine how painful it would be for the user
-to see all the images being downloaded again? The obvious solution to this
-problem is to temporarily cache the images. They could be cached on the SD card
-(if there's one), in the Application object, in a static field, etc. None of
-these techniques is adapted to the current situation: why should we bother
-caching the images when the screen is not rotated? Fortunately for us, Android
-offers a great API exactly for that purpose.</p>
-
-<p>The Activity class has a special method called 
-{@link android.app.Activity#onRetainNonConfigurationInstance()}. This method 
-can be used to pass an arbitrary object to <em>your future self</em> and Android 
-is smart enough to call this method only when needed. In the case of Photostream, 
-the application used this method
-to pass the downloaded images to the future activity on orientation change. 
-The implementation can be summarized like so:</p>
-
-<pre class="prettyprint">&#64;Override
-public Object onRetainNonConfigurationInstance() {
-    final LoadedPhoto[] list = new LoadedPhoto[numberOfPhotos];
-    keepPhotos(list);
-    return list;
-}
-</pre>
-
-<p>In the new activity, in <code>onCreate()</code>, all you have to do to 
-get your object back is to call {@link android.app.Activity#getLastNonConfigurationInstance()}. 
-In Photostream, this method is invoked 
-and if the returned value is not null, the grid is loaded with the list of 
-photos from the previous activity:</p>
-
-<pre class="prettyprint">private void loadPhotos() {
-    final Object data = getLastNonConfigurationInstance();
-    
-    // The activity is starting for the first time, load the photos from Flickr
-    if (data == null) {
-        mTask = new GetPhotoListTask().execute(mCurrentPage);
-    } else {
-        // The activity was destroyed/created automatically, populate the grid
-        // of photos with the images loaded by the previous activity
-        final LoadedPhoto[] photos = (LoadedPhoto[]) data;
-        for (LoadedPhoto photo : photos) {
-            addPhoto(photo);
-        }
-    }
-}
-</pre>
-
-<p>Be very careful with the object you pass through 
-<code>onRetainNonConfigurationChange()</code>, though. If the object you 
-pass is for some reason tied to the Activity/Context, <a 
-href="http://www.curious-creature.org/2008/12/18/avoid-memory-leaks-on-android/">you will leak</a>
-all the views and resources of the activity. This means you should
-never pass a View, a Drawable, an Adapter, etc. Photostream for
-instance extracts the bitmaps from the drawables and pass the bitmaps
-only, not the drawables. Finally, remember that 
-<code>onRetainNonConfigurationChange()</code> should be used only to retain 
-data that is expensive to load. Otherwise, keep it simple and let Android 
-do everything.</p>
-
-<p>Also read the guide to <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
-Changes</a>.</p>
diff --git a/docs/html/resources/articles/future-proofing.jd b/docs/html/resources/articles/future-proofing.jd
deleted file mode 100644
index b8aeedf..0000000
--- a/docs/html/resources/articles/future-proofing.jd
+++ /dev/null
@@ -1,91 +0,0 @@
-page.title=Future-Proofing Your Apps
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>It's important to implement your application so that it will not break as new
-versions of the Android platform are loaded onto the users device. The list
-below is based on our observations of five ways that we've seen bad apps fail.
-You can think of these as "anti-patterns" (that is, techniques to avoid) for
-Android development.</p>
-
-<p>If your application uses any of the dubious techniques below, break out 
-your IDE and duct tape, spackle, and patch up the app.</p>
-
-<p><b>Technique to Avoid, #1: Using Internal APIs</b></p>
-
-<p>Even
-though we've always strongly advised against doing so, some developers
-have chosen to use unsupported or internal APIs. For instance, many
-developers are using the internal brightness control and bluetooth
-toggle APIs that were present in 1.0 and 1.1. A bug -- which was
-fixed in Android 1.5 -- allowed apps to use those APIs without
-requesting permission. As a result, apps that used those APIs broke
-on 1.5. If you've used internal APIs in your apps, you need to update
-your apps to stop doing so. </p>
-
-<p><b>Technique to Avoid, #2: Directly Manipulating Settings</b></p>
-
-<p>Strictly speaking this one isn't evil, since this is a change in
-behavior that we made to Android itself. But we made it because some
-developers were doing naughty things: a number of apps were changing
-system settings silently without even notifying the user. For instance,
-some apps turn on GPS without asking the user, and others might turn on
-data roaming.</p>
-
-<p>As a result, applications can no longer directly
-manipulate the values of certain system Settings, even if they
-previously had permission to do so. For instance, apps can no longer
-directly turn on or off GPS. These apps won't crash, but the APIs in
-question now have no effect, and do nothing. Instead, apps will need to
-issue an Intent to launch the appropriate Settings configuration
-screen, so that the user can change these settings manually. For
-details, see the android.provider.Settings.Secure class, which you can
-find in the 1.5_pre SDK documentation (and later). Note that only
-Settings that were moved to the Settings.Secure class are affected.
-Other, less sensitive, settings will continue to have the same behavior
-as in Android 1.1.</p>
-
-<p><b>Technique to Avoid, #3: Going Overboard with Layouts</b></p>
-
-<p>Due to changes in the View rendering infrastructure, unreasonably deep
-(more than 10 or so) or broad (more than 30 total) View hierarchies in
-layouts are now likely to cause crashes. This was always a risk for
-excessively complex layouts, but you can think of Android 1.5 as being
-better than 1.1 at exposing this problem. Most developers won't need to
-worry about this, but if your app has very complicated layouts, you'll
-need to put it on a diet. You can simplify your layouts using the more
-advanced layout classes like FrameLayout and TableLayout.</p>
-
-<p><b>Technique to Avoid, #4: Bad Hardware Assumptions</b></p>
-
-<p>Android 1.5 includes support for soft keyboards, and there will soon be many
-devices that run Android but do not have physical keyboards. If your
-application assumes the presence of a physical keyboard (such as if you
-have created a custom View that sinks keypress events) you should make
-sure it degrades gracefully on devices that only have soft keyboards.
-For more information on this, keep on eye on this blog as we'll be
-posting more detailed information about handling the new soft keyboards.</p>
-
-<p><b>Technique to Avoid, #5: Incautious Rotations </b></p>
-
-<p>Devices running Android 1.5 and later can automatically rotate the screen,
-depending on how the user orients the device. Some 1.5 devices will do
-this by default, and on all others it can be turned on by the user.
-This can sometimes result in unpredictable behavior from applications
-that do their own reorientations (whether using the accelerometer, or
-something else.) This often happens when applications assume that the
-screen can only rotate if the physical keyboard is exposed; if the
-device lacks a physical keyboard, these apps do not expect to be
-reoriented, which is a coding error. Developers should be sure that
-their applications can gracefully handle being reoriented at any time.</p>
-
-<p>Also, apps that use the accelerometer directly to reorient themselves
-sometimes compete with the system doing the same thing, with odd
-results. And finally, some apps that use the accelerometer to detect
-things like shaking motions and that don't lock their orientation to
-portrait or landscape, often end up flipping back and forth between
-orientations. This can be irritating to the user. (You can lock your
-app's orientation to portrait or landscape using the
-<code>android:screenOrientation</code> attribute in the manifest file.)</p>
-
diff --git a/docs/html/resources/articles/gestures.jd b/docs/html/resources/articles/gestures.jd
deleted file mode 100644
index 5b8d760..0000000
--- a/docs/html/resources/articles/gestures.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=Gestures
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Touch screens are a great way to interact with applications on
-mobile devices. With a touch screen, users can easily tap, drag, fling,
-or slide to quickly perform actions in their favorite applications. 
-For app developers. the Android framework makes it's easy to
-recognize simple actions, like a swipe, but it has been more 
-difficult to handle complicated gestures, sometimes requiring 
-developers to write a lot of code.</p>
-
-<p>That's why we introduced a new gestures API in Android 1.6. This API, located
-in the new package {@link android.gesture}, lets you store, load, draw, and
-recognize gestures. This article will show you how you can use the
-<code>android.gesture</code> API in your applications. Before going any further,
-you should <a
-href="http://code.google.com/p/apps-for-android/downloads/detail?name=
-GesturesDemos.zip&amp;can=2&amp;q=#makechanges">download the source code 
-of the examples</a>.</p>
-
-<h3>Creating a gestures library</h3>
-
-<p>Android 1.6 and higher SDK platforms include a new application pre-installed
-on the emulator, called Gestures Builder. You can use this application to create
-a set of pre-defined gestures for your own application. It also serves as an
-example of how to let the user define his own gestures in your applications. You
-can find the source code of Gestures Builders in the samples directory of each
-SDK platform. In our example we will use Gestures Builder to generate a set of
-gestures for us (make sure to create an AVD with an SD card image to use
-Gestures Builder.) The screenshot below shows what the application looks like
-after adding a few gestures:</p>
-
-<img src="images/gestures_006.png" style="width: 320px; height: 480px;">
-
-<p>As you can see, a gesture is always associated with a name. That name is very
-important because it identifies each gesture within your application. The names
-do not have to be unique. Actually it can be very useful to have several
-gestures with the same name to increase the precision of the recognition. Every
-time you add or edit a gesture in the Gestures Builder, a file is generated on
-the emulator's SD card, <code>/sdcard/gestures</code>. This file contains the
-description of all the gestures, and you will need to package it inside your
-application inside the resources directory, in
-<code>/res/raw</code>.</p>
-
-<h3>Loading the gestures library</h3>
-
-<p>Now that you have a set of pre-defined gestures, you must load it inside your
-application. This can be achieved in several ways but the easiest is to use the
-<code>GestureLibraries</code> class:</p>
-
-<pre class="prettyprint">mLibrary = GestureLibraries.fromRawResource(this, R.raw.spells);
-if (!mLibrary.load()) {
-    finish();
-}</pre>
-
-<p>In this example, the gesture library is loaded from the file
-<code>/res/raw/spells</code>. You can easily load libraries from other sources,
-like the SD card, which is very important if you want your application to be
-able to save the library; a library loaded from a raw resource is read-only and
-cannot be modified. The following diagram shows the structure of a library:</p>
-
-<img src="images/gestures_002.png" style="width: 600px; height: 512px;">
-
-<h3>Recognizing gestures</h3>
-
-<p>To start recognizing gestures in your application, all you have to do 
-is add a <code>GestureOverlayView</code> to your XML layout:</p>
-
-<pre>&lt;android.gesture.GestureOverlayView
-    android:id="@+id/gestures"
-    android:layout_width="fill_parent" 
-    android:layout_height="0dip"
-    android:layout_weight="1.0" /&gt;</pre>
-
-<p>Notice that the <code>GestureOverlayView</code>
-is not part of the usual android.widget package. Therefore, you must
-use its fully qualified name. A gesture overlay acts as a simple
-drawing board on which the user can draw his gestures. You can tweak
-several visual properties, like the color and the width of the stroke
-used to draw gestures, and register various listeners to follow what
-the user is doing. The most commonly used listener is 
-<code>GestureOverlayView.OnGesturePerformedListener</code>, 
-which fires whenever a user is done drawing a gesture:</p>
-
-<pre>GestureOverlayView gestures = (GestureOverlayView) findViewById(R.id.gestures);
-gestures.addOnGesturePerformedListener(this);</pre>
-
-<p>When the listener fires, you can ask the <code>GestureLibrary</code>
-to try to recognize the gesture. In return, you will get a list of
-Prediction instances, each with a name - the same name you entered in
-the Gestures Builder - and a score. The list is sorted by descending
-scores; the higher the score, the more likely the associated gesture is
-the one the user intended to draw. The following code snippet
-demonstrates how to retrieve the name of the first prediction:</p>
-
-<pre>public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
-    ArrayList&lt;prediction&gt; predictions = mLibrary.recognize(gesture);
-
-    // We want at least one prediction
-    if (predictions.size() &gt; 0) {
-        Prediction prediction = predictions.get(0);
-        // We want at least some confidence in the result
-        if (prediction.score &gt; 1.0) {
-            // Show the spell
-            Toast.makeText(this, prediction.name, Toast.LENGTH_SHORT).show();
-        }
-    }
-}</pre>
-
-<p>In this example, the first prediction is taken into account only if it's
-score is greater than 1.0. The threshold you use is entirely up to you
-but know that scores lower than 1.0 are typically poor matches. And
-this is all the code you need to create a simple application that can
-recognize pre-defined gestures (see the source code of the project
-GesturesDemo):</p>
-
-<img src="images/gestures.png" style="width: 320px; height: 480px;">
-
-<h3>Gestures overlay</h3>
-
-<p>In the example above, the <code>GestureOverlayView</code> was used 
-as a normal view, embedded inside a <code>LinearLayout</code>.
-However, as its name suggests, it can also be used as an overlay on top
-of other views. This can be useful to recognize gestures in a game or
-just anywhere in the UI of an application. In the second example,
-called GesturesListDemo, we'll create an overlay on top of a list of
-contacts. We start again in Gestures Builder to create a new set of
-pre-defined gestures:</p>
-
-<p><img src="images/gestures_005.png" style="width: 320px; height: 480px;"></p>
-
-<p>And here is what the XML layout looks like:</p>
-
-<pre>&lt;android.gesture.GestureOverlayView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/gestures"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    
-    android:gestureStrokeType="multiple"
-    android:eventsInterceptionEnabled="true"
-    android:orientation="vertical"&gt;
-
-    &lt;ListView
-        android:id="@android:id/list"  
-        android:layout_width="fill_parent" 
-        android:layout_height="fill_parent"  /&gt;
-
-&lt;/android.gesture.GestureOverlayView&gt;</pre>
-
-<p>In this application, the gestures view is an overlay on top of a regular
-ListView. The overlay also specifies a few properties that we did not
-need before:</p>
-
-<ul>
-<li><code>gestureStrokeType</code>: indicates
-whether we want to recognize gestures made of a single stroke or
-multiple strokes. Since one of our gestures is the "+" symbol, we need
-multiple strokes</li>
-<li><code>eventsInterceptionEnabled</code>: when
-set to true, this property tells the overlay to steal the events from
-its children as soon as it knows the user is really drawing a gesture.
-This is useful when there's a scrollable view under the overlay, to
-avoid scrolling the underlying child as the user draws his gesture </li>
-<li><code>orientation</code>:
-indicates the scroll orientation of the views underneath. In this case
-the list scrolls vertically, which means that any horizontal gestures
-(like <code>action_delete</code>) can immediately be recognized as a
-gesture. Gestures that start with a vertical stroke must contain at
-least one horizontal component to be recognized. In other words, a
-simple vertical line cannot be recognized as a gesture since it would
-conflict with the list's scrolling.</li>
-</ul>
-
-<p>The code used to load and set up the gestures library and overlay is exactly
-the same as before. The only difference is that we now check the name of the
-predictions to know what the user intended to do:</p>
-
-<pre>public void onGesturePerformed(GestureOverlayView overlay, Gesture gesture) {
-    ArrayList&lt;Prediction&gt; predictions = mLibrary.recognize(gesture);
-    if (predictions.size() &gt; 0 &amp;&amp; predictions.get(0).score &gt; 1.0) {
-        String action = predictions.get(0).name;
-        if ("action_add".equals(action)) {
-            Toast.makeText(this, "Adding a contact", Toast.LENGTH_SHORT).show();
-        } else if ("action_delete".equals(action)) {
-            Toast.makeText(this, "Removing a contact", Toast.LENGTH_SHORT).show();
-        } else if ("action_refresh".equals(action)) {
-            Toast.makeText(this, "Reloading contacts", Toast.LENGTH_SHORT).show();
-        }
-    }
-}</pre>
-
-<p>The user is now able to draw his gestures on top of the list without 
-interfering with the scrolling:</p>
-
-<img src="images/gestures_004.png" style="width: 320px; height: 480px;">
-
-<p>The overlay even gives visual clues as to whether the gesture is considered
-valid for recognition. In the case of a vertical overlay, for instance,
-a single vertical stroke cannot be recognized as a gesture and is
-therefore drawn with a translucent color:</p>
-
-<img src="images/gestures_003.png" style="width: 320px; height: 480px;">
-
-<h3>It's your turn</h3>
-
-<p>Adding support for gestures in your application is easy and can be a valuable
-addition. The gestures API does not even have to be used to recognize complex
-shapes; it will work equally well to recognize simple swipes. We are very
-excited by the possibilities the gestures API offers, and we're eager to see
-what cool applications the community will create with it.</p>
diff --git a/docs/html/resources/articles/glsurfaceview.jd b/docs/html/resources/articles/glsurfaceview.jd
deleted file mode 100644
index 45407a9..0000000
--- a/docs/html/resources/articles/glsurfaceview.jd
+++ /dev/null
@@ -1,270 +0,0 @@
-page.title=Introducing GLSurfaceView
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<p>The {@link android android.opengl.GLSurfaceView} class makes it 
-easier for you to use OpenGL ES rendering in your applications by:</p>
-
-<ul>
-<li>Providing the glue code to connect OpenGL ES to the {@link
-android.view.View} system.</li>
-<li>Providing the glue code to make OpenGL ES work with the {@link
-android.app.Activity} life-cycle.</li>
-<li>Making it easy to choose an appropriate frame buffer pixel format.</li>
-<li>Creating and managing a separate rendering thread, to enable smooth
-animation.</li>
-<li>Providing easy-to-use debugging tools for tracing OpenGL ES API calls and
-checking for errors.</li>
-</ul>
-
-<p>GLSurfaceView is a good base for building an application that uses OpenGL ES
-for part or all of its rendering. A 2D or 3D action game would be a good
-candidate, as would a 2D or 3D data visualization application such as <a
-href="http://www.youtube.com/watch?v=4PRfVKzuUJ4&amp;fmt=18" title="Google Maps
-StreetView">Google Maps StreetView</a>.</p>
-
-<h3>A simple GLSurfaceView application</h3>
-
-<p>Here's the source code to the simplest possible OpenGL ES application:</p>
-
-<pre>package com.example.android.apis.graphics;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.app.Activity;
-import android.opengl.GLSurfaceView;
-import android.os.Bundle;
-
-public class ClearActivity extends Activity {
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mGLView = new GLSurfaceView(this);
-        mGLView.setRenderer(new ClearRenderer());
-        setContentView(mGLView);
-    }
-
-    &#64;Override
-    protected void onPause() {
-        super.onPause();
-        mGLView.onPause();
-    }
-
-    &#64;Override
-    protected void onResume() {
-        super.onResume();
-        mGLView.onResume();
-    }
-
-    private GLSurfaceView mGLView;
-}
-
-class ClearRenderer implements GLSurfaceView.Renderer {
-    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
-        // Do nothing special.
-    }
-
-    public void onSurfaceChanged(GL10 gl, int w, int h) {
-        gl.glViewport(0, 0, w, h);
-    }
-
-    public void onDrawFrame(GL10 gl) {
-        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
-    }
-}</pre>
-
-<p>This program doesn't do much: it clears the screen to black on every frame.
-But it is a complete OpenGL application that correctly implements the
-Android activity life-cycle. It pauses rendering when the activity is
-paused, and resumes it when the activity is resumed. You could use this
-application as the basis for non-interactive demonstration programs.
-Just add more OpenGL calls to the <code>ClearRenderer.onDrawFrame()</code> method.
-Notice that you don't even need to subclass the <code>GLSurfaceView</code> view.</p>
-
-<p>The {@link android.opengl.GLSurfaceView.Renderer} interface has three methods:</p>
-
-<ul>
-<li>The
-<code>onSurfaceCreated()</code> method is called at the start of rendering, and
-whenever the OpenGL ES drawing context has to be recreated. (The
-drawing context is typically lost and recreated when the activity is
-paused and resumed.) <code>OnSurfaceCreated()</code> is a good place to create
-long-lived OpenGL resources such as textures.</li>
-<li>The <code>onSurfaceChanged()</code>
-method is called when the surface changes size. It's a good place to
-set your OpenGL viewport. You may also want to set your camera here, if
-it's a fixed camera that doesn't move around the scene.</li>
-<li>The <code>onDrawFrame()</code> method is called every frame, and is
-responsible for drawing the scene. You would typically start by calling
-<code>glClear</code> to clear the framebuffer, followed by other OpenGL ES calls
-to draw the current scene.</li>
-</ul>
-
-<h3>How about user input?</h3>
-
-<p>If you want an interactive application (such as a game), you will typically
-subclass <code>GLSurfaceView</code>, because that's an easy way of obtaining
-input events. Here's a slightly longer example showing how to do that:</p>
-
-<pre>package com.google.android.ClearTest;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.app.Activity;
-import android.content.Context;
-import android.opengl.GLSurfaceView;
-import android.os.Bundle;
-import android.view.MotionEvent;
-
-public class ClearActivity extends Activity {
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mGLView = new ClearGLSurfaceView(this);
-        setContentView(mGLView);
-    }
-
-    &#64;Override
-    protected void onPause() {
-        super.onPause();
-        mGLView.onPause();
-    }
-
-    &#64;Override
-    protected void onResume() {
-        super.onResume();
-        mGLView.onResume();
-    }
-
-    private GLSurfaceView mGLView;
-}
-
-class ClearGLSurfaceView extends GLSurfaceView {
-    public ClearGLSurfaceView(Context context) {
-        super(context);
-        mRenderer = new ClearRenderer();
-        setRenderer(mRenderer);
-    }
-
-    public boolean onTouchEvent(final MotionEvent event) {
-        queueEvent(new Runnable(){
-            public void run() {
-                mRenderer.setColor(event.getX() / getWidth(),
-                        event.getY() / getHeight(), 1.0f);
-            }});
-            return true;
-        }
-
-        ClearRenderer mRenderer;
-}
-
-class ClearRenderer implements GLSurfaceView.Renderer {
-    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
-        // Do nothing special.
-    }
-
-    public void onSurfaceChanged(GL10 gl, int w, int h) {
-        gl.glViewport(0, 0, w, h);
-    }
-
-    public void onDrawFrame(GL10 gl) {
-        gl.glClearColor(mRed, mGreen, mBlue, 1.0f);
-        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
-    }
-
-    public void setColor(float r, float g, float b) {
-        mRed = r;
-        mGreen = g;
-        mBlue = b;
-    }
-
-    private float mRed;
-    private float mGreen;
-    private float mBlue;
-}</pre>
-
-<p>This application clears the screen for every frame. When you tap on the
-screen, it sets the clear color based on the (x,y) coordinates of your touch
-event. Note the use of <code>queueEvent()</code> in
-<code>ClearGLSurfaceView.onTouchEvent()</code>. The <code>queueEvent()</code>
-method is used to safely communicate between the UI thread and the rendering
-thread. If you prefer, you can use some other Java cross-thread communication
-technique, such as synchronized methods on the <code>Renderer</code> class 
-itself. However, queueing events is often the simplest way of dealing with 
-cross-thread communication.</p>
-
-<h3>Other GLSurfaceView samples</h3>
-
-<p>Tired
-of just clearing the screen? You can find more interesting samples in
-the API Demos sample included in the Android SDK. All the OpenGL ES samples have been
-converted to use the <code>GLSurfaceView</code> view:</p>
-
-<ul>
-<li>GLSurfaceView - a spinning triangle</li>
-<li>Kube - a cube puzzle demo</li>
-<li>Translucent GLSurfaceView - shows how to display 3D graphics on a translucent background</li>
-<li>Textured Triangle - shows how to draw a textured 3D triangle</li>
-<li>Sprite Text - shows how to draw text into a texture and then composite it into a 3D scene</li>
-<li>Touch Rotate - shows how to rotate a 3D object in response to user input.</li>
-</ul>
-
-<h3>Choosing a surface</h3>
-
-<p><code>GLSurfaceView</code>
-helps you choose the type of surface to render to. Different Android
-devices support different types of surfaces, with no common subset.
-This makes it tricky problem to choose the best available surface on
-each device. </p>
-
-<p>By default, <code>GLSurfaceView</code> tries to find a surface that's as
-close as possible to a 16-bit RGB frame buffer with a 16-bit depth
-buffer. Depending upon your application's needs you may want to change
-this behavior. For example, the Translucent GLSurfaceView sample needs
-an Alpha channel in order to render translucent data. <code>GLSurfaceView</code>
-provides an overloaded <code>setEGLSurfaceChooser()</code> method to give 
-you control over which surface type is chosen:</p>
-
-<dl>
-<dt><code>setEGLConfigChooser(boolean needDepth)</code></dt>
-<dd>Choose a config that's closest to R5G6B5 with or without a 16-bit framebuffer</dd>
-<dt><code>setEGLConfigChooser(int redSize, int greenSize,int blueSize, 
-int alphaSize,int depthSize, int stencilSize)</code></dt>
-<dd>Choose the config with the fewest number of bits per pixel that has at least
-as many bits-per-channel as specified in the constructor.</dd>
-<dt><code>setEGLConfigChooser(EGLConfigChooser configChooser)</code></dt>
-<dd>Allow total control over choosing a configuration. You pass in your own
-implementation of <code>EGLConfigChooser</code>, which gets to inspect the
-device's capabilities and choose a configuration.</dd>
-</dl>
-
-<h3>Continuous rendering versus render-when-dirty</h3>
-
-<p>Most 3D applications, such as games or simulations, are continuously
-animated. But some 3D applications are more reactive: they wait passively until
-the user does something, and then react to it. For those types of applications,
-the default <code>GLSurfaceView</code> behavior of continuously redrawing the
-screen is a waste of time. If you are developing a reactive application, you can
-call <code>GLSurfaceView.setRenderMode(RENDERMODE_WHEN_DIRTY)</code>, which
-turns off the continuous animation. Then you call
-<code>GLSurfaceView.requestRender()</code> whenever you want to re-render.</p>
-
-<h3>Help With debugging</h3>
-
-<p><code>GLSurfaceView</code> has a handy built-in feature for debugging OpenGL ES
-applications: the <code>GLSurfaceView.setDebugFlags()</code> method can be used
-to enable logging and/or error checking your OpenGL ES calls. Call this method
-in your <code>GLSurfaceView</code>'s constructor, before calling
-<code>setRenderer()</code>:</p>
-
-<pre>public ClearGLSurfaceView(Context context) {
-    super(context);
-    // Turn on error-checking and logging
-    setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
-    mRenderer = new ClearRenderer();
-    setRenderer(mRenderer);
-}</pre>
\ No newline at end of file
diff --git a/docs/html/resources/articles/images/File.png b/docs/html/resources/articles/images/File.png
deleted file mode 100644
index bc5a2b8..0000000
--- a/docs/html/resources/articles/images/File.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/File_002.png b/docs/html/resources/articles/images/File_002.png
deleted file mode 100644
index 39254b30..0000000
--- a/docs/html/resources/articles/images/File_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/JFlubber.png b/docs/html/resources/articles/images/JFlubber.png
deleted file mode 100644
index d95e32b..0000000
--- a/docs/html/resources/articles/images/JFlubber.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/WikiNotes.png b/docs/html/resources/articles/images/WikiNotes.png
deleted file mode 100644
index d52c4fc..0000000
--- a/docs/html/resources/articles/images/WikiNotes.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/all_drawables_changed.png b/docs/html/resources/articles/images/all_drawables_changed.png
deleted file mode 100644
index 04ec4a2..0000000
--- a/docs/html/resources/articles/images/all_drawables_changed.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/android.png b/docs/html/resources/articles/images/android.png
deleted file mode 100644
index 6dc88cc..0000000
--- a/docs/html/resources/articles/images/android.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/buttons.png b/docs/html/resources/articles/images/buttons.png
deleted file mode 100644
index 8c220b9..0000000
--- a/docs/html/resources/articles/images/buttons.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/contacts-2.png b/docs/html/resources/articles/images/contacts-2.png
deleted file mode 100644
index 02f28aa..0000000
--- a/docs/html/resources/articles/images/contacts-2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/contacts.png b/docs/html/resources/articles/images/contacts.png
deleted file mode 100644
index d8b067d..0000000
--- a/docs/html/resources/articles/images/contacts.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/correct_drawables.png b/docs/html/resources/articles/images/correct_drawables.png
deleted file mode 100644
index 516309b..0000000
--- a/docs/html/resources/articles/images/correct_drawables.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ddms_allocation_tracker.png b/docs/html/resources/articles/images/ddms_allocation_tracker.png
deleted file mode 100644
index b9fa0a1..0000000
--- a/docs/html/resources/articles/images/ddms_allocation_tracker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ddms_allocation_trackerl.png b/docs/html/resources/articles/images/ddms_allocation_trackerl.png
deleted file mode 100644
index 5ac8d2a..0000000
--- a/docs/html/resources/articles/images/ddms_allocation_trackerl.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/device.png b/docs/html/resources/articles/images/device.png
deleted file mode 100644
index 186b960..0000000
--- a/docs/html/resources/articles/images/device.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/device_002.png b/docs/html/resources/articles/images/device_002.png
deleted file mode 100644
index 4bc3b0c..0000000
--- a/docs/html/resources/articles/images/device_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/gestures.png b/docs/html/resources/articles/images/gestures.png
deleted file mode 100644
index fe8f7cd..0000000
--- a/docs/html/resources/articles/images/gestures.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/gestures_002.png b/docs/html/resources/articles/images/gestures_002.png
deleted file mode 100644
index b20da98..0000000
--- a/docs/html/resources/articles/images/gestures_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/gestures_003.png b/docs/html/resources/articles/images/gestures_003.png
deleted file mode 100644
index a295939..0000000
--- a/docs/html/resources/articles/images/gestures_003.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/gestures_004.png b/docs/html/resources/articles/images/gestures_004.png
deleted file mode 100644
index 3fe5fb1..0000000
--- a/docs/html/resources/articles/images/gestures_004.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/gestures_005.png b/docs/html/resources/articles/images/gestures_005.png
deleted file mode 100644
index 3efc519..0000000
--- a/docs/html/resources/articles/images/gestures_005.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/gestures_006.png b/docs/html/resources/articles/images/gestures_006.png
deleted file mode 100644
index 399c31d..0000000
--- a/docs/html/resources/articles/images/gestures_006.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/grid.png b/docs/html/resources/articles/images/grid.png
deleted file mode 100644
index 4713de5..0000000
--- a/docs/html/resources/articles/images/grid.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ime.png b/docs/html/resources/articles/images/ime.png
deleted file mode 100644
index 57f6df1..0000000
--- a/docs/html/resources/articles/images/ime.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ime_002.png b/docs/html/resources/articles/images/ime_002.png
deleted file mode 100644
index 3ec00b2..0000000
--- a/docs/html/resources/articles/images/ime_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ime_003.png b/docs/html/resources/articles/images/ime_003.png
deleted file mode 100644
index a3f57bb..0000000
--- a/docs/html/resources/articles/images/ime_003.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ime_004.png b/docs/html/resources/articles/images/ime_004.png
deleted file mode 100644
index efeddf0..0000000
--- a/docs/html/resources/articles/images/ime_004.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ime_005.png b/docs/html/resources/articles/images/ime_005.png
deleted file mode 100644
index a7394e0..0000000
--- a/docs/html/resources/articles/images/ime_005.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ime_006.png b/docs/html/resources/articles/images/ime_006.png
deleted file mode 100644
index 0b55c79..0000000
--- a/docs/html/resources/articles/images/ime_006.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/layouts_comparison_small.png b/docs/html/resources/articles/images/layouts_comparison_small.png
deleted file mode 100644
index 0ba4cb8..0000000
--- a/docs/html/resources/articles/images/layouts_comparison_small.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/list01.png b/docs/html/resources/articles/images/list01.png
deleted file mode 100644
index e1b7fa8..0000000
--- a/docs/html/resources/articles/images/list01.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/list02.png b/docs/html/resources/articles/images/list02.png
deleted file mode 100644
index 7f72a3f..0000000
--- a/docs/html/resources/articles/images/list02.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/list_fade_1.png b/docs/html/resources/articles/images/list_fade_1.png
deleted file mode 100644
index 43013d6..0000000
--- a/docs/html/resources/articles/images/list_fade_1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/list_fade_2.png b/docs/html/resources/articles/images/list_fade_2.png
deleted file mode 100644
index 160d3ff..0000000
--- a/docs/html/resources/articles/images/list_fade_2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/list_fade_3.png b/docs/html/resources/articles/images/list_fade_3.png
deleted file mode 100644
index 70dca64..0000000
--- a/docs/html/resources/articles/images/list_fade_3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/list_fade_4.png b/docs/html/resources/articles/images/list_fade_4.png
deleted file mode 100644
index 7619fca..0000000
--- a/docs/html/resources/articles/images/list_fade_4.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/live_wallpapers_small.png b/docs/html/resources/articles/images/live_wallpapers_small.png
deleted file mode 100644
index 3b49b24..0000000
--- a/docs/html/resources/articles/images/live_wallpapers_small.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/merge1.jpg b/docs/html/resources/articles/images/merge1.jpg
deleted file mode 100644
index 114eed6..0000000
--- a/docs/html/resources/articles/images/merge1.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/merge2.png b/docs/html/resources/articles/images/merge2.png
deleted file mode 100644
index b4a8d4c..0000000
--- a/docs/html/resources/articles/images/merge2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/merge3.png b/docs/html/resources/articles/images/merge3.png
deleted file mode 100644
index 61ed983..0000000
--- a/docs/html/resources/articles/images/merge3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/merge4.jpg b/docs/html/resources/articles/images/merge4.jpg
deleted file mode 100644
index 17b6c20..0000000
--- a/docs/html/resources/articles/images/merge4.jpg
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/merge5.png b/docs/html/resources/articles/images/merge5.png
deleted file mode 100644
index 289f47e..0000000
--- a/docs/html/resources/articles/images/merge5.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/mutated_states.png b/docs/html/resources/articles/images/mutated_states.png
deleted file mode 100644
index 50518b6..0000000
--- a/docs/html/resources/articles/images/mutated_states.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/on-screen-inputs.png b/docs/html/resources/articles/images/on-screen-inputs.png
deleted file mode 100644
index b8b3cf7..0000000
--- a/docs/html/resources/articles/images/on-screen-inputs.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/on-screen-inputs_002.png b/docs/html/resources/articles/images/on-screen-inputs_002.png
deleted file mode 100644
index a5d21c7..0000000
--- a/docs/html/resources/articles/images/on-screen-inputs_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/on-screen-inputs_003.png b/docs/html/resources/articles/images/on-screen-inputs_003.png
deleted file mode 100644
index 81ee257..0000000
--- a/docs/html/resources/articles/images/on-screen-inputs_003.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/on-screen-inputs_004.png b/docs/html/resources/articles/images/on-screen-inputs_004.png
deleted file mode 100644
index 651b72a..0000000
--- a/docs/html/resources/articles/images/on-screen-inputs_004.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/on-screen-inputs_005.png b/docs/html/resources/articles/images/on-screen-inputs_005.png
deleted file mode 100644
index 75185ff..0000000
--- a/docs/html/resources/articles/images/on-screen-inputs_005.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/on-screen-inputs_006.png b/docs/html/resources/articles/images/on-screen-inputs_006.png
deleted file mode 100644
index b653d75..0000000
--- a/docs/html/resources/articles/images/on-screen-inputs_006.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/photostream_landscape.png b/docs/html/resources/articles/images/photostream_landscape.png
deleted file mode 100644
index ad4a0c5..0000000
--- a/docs/html/resources/articles/images/photostream_landscape.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/photostream_portrait.png b/docs/html/resources/articles/images/photostream_portrait.png
deleted file mode 100644
index 3794f63..0000000
--- a/docs/html/resources/articles/images/photostream_portrait.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/qsb.png b/docs/html/resources/articles/images/qsb.png
deleted file mode 100644
index 4e40af1..0000000
--- a/docs/html/resources/articles/images/qsb.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/qsb_002.png b/docs/html/resources/articles/images/qsb_002.png
deleted file mode 100644
index 8c2f772..0000000
--- a/docs/html/resources/articles/images/qsb_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/qsb_003.png b/docs/html/resources/articles/images/qsb_003.png
deleted file mode 100644
index 069b6cd..0000000
--- a/docs/html/resources/articles/images/qsb_003.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/relativelayout_1.png b/docs/html/resources/articles/images/relativelayout_1.png
deleted file mode 100644
index 3360ad8..0000000
--- a/docs/html/resources/articles/images/relativelayout_1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/relativelayout_2.png b/docs/html/resources/articles/images/relativelayout_2.png
deleted file mode 100644
index 8e71bb2..0000000
--- a/docs/html/resources/articles/images/relativelayout_2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/relativelayout_3.png b/docs/html/resources/articles/images/relativelayout_3.png
deleted file mode 100644
index 16a9767..0000000
--- a/docs/html/resources/articles/images/relativelayout_3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/relativelayout_wire_1.png b/docs/html/resources/articles/images/relativelayout_wire_1.png
deleted file mode 100644
index 9cb241d..0000000
--- a/docs/html/resources/articles/images/relativelayout_wire_1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/relativelayout_wire_2.png b/docs/html/resources/articles/images/relativelayout_wire_2.png
deleted file mode 100644
index 4243812..0000000
--- a/docs/html/resources/articles/images/relativelayout_wire_2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/relativelayout_wire_3.png b/docs/html/resources/articles/images/relativelayout_wire_3.png
deleted file mode 100644
index 04ce1ce..0000000
--- a/docs/html/resources/articles/images/relativelayout_wire_3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/search01.png b/docs/html/resources/articles/images/search01.png
deleted file mode 100644
index 4160a76..0000000
--- a/docs/html/resources/articles/images/search01.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/search02.png b/docs/html/resources/articles/images/search02.png
deleted file mode 100644
index 6300018..0000000
--- a/docs/html/resources/articles/images/search02.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/service-api-changes-starting-with_runningservices.png b/docs/html/resources/articles/images/service-api-changes-starting-with_runningservices.png
deleted file mode 100644
index e159fff..0000000
--- a/docs/html/resources/articles/images/service-api-changes-starting-with_runningservices.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/service-api-changes-starting-with_stopservice.png b/docs/html/resources/articles/images/service-api-changes-starting-with_stopservice.png
deleted file mode 100644
index cc8f0a2..0000000
--- a/docs/html/resources/articles/images/service-api-changes-starting-with_stopservice.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/shared_states.png b/docs/html/resources/articles/images/shared_states.png
deleted file mode 100644
index 81bec09..0000000
--- a/docs/html/resources/articles/images/shared_states.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/shelves2.png b/docs/html/resources/articles/images/shelves2.png
deleted file mode 100644
index 2de239f..0000000
--- a/docs/html/resources/articles/images/shelves2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/speech-input.png b/docs/html/resources/articles/images/speech-input.png
deleted file mode 100644
index 78fbc98..0000000
--- a/docs/html/resources/articles/images/speech-input.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/text_field.png b/docs/html/resources/articles/images/text_field.png
deleted file mode 100644
index b9dedec..0000000
--- a/docs/html/resources/articles/images/text_field.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ui-1.6.png b/docs/html/resources/articles/images/ui-1.6.png
deleted file mode 100644
index bc5a2b8..0000000
--- a/docs/html/resources/articles/images/ui-1.6.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/ui-1.6_002.png b/docs/html/resources/articles/images/ui-1.6_002.png
deleted file mode 100644
index 39254b30..0000000
--- a/docs/html/resources/articles/images/ui-1.6_002.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/viewstub1.png b/docs/html/resources/articles/images/viewstub1.png
deleted file mode 100644
index 2de239f..0000000
--- a/docs/html/resources/articles/images/viewstub1.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/viewstub2.png b/docs/html/resources/articles/images/viewstub2.png
deleted file mode 100644
index 6e6feb9..0000000
--- a/docs/html/resources/articles/images/viewstub2.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/viewstub3.png b/docs/html/resources/articles/images/viewstub3.png
deleted file mode 100644
index 5e793e6..0000000
--- a/docs/html/resources/articles/images/viewstub3.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/viewstub4.png b/docs/html/resources/articles/images/viewstub4.png
deleted file mode 100644
index cffb9c6..0000000
--- a/docs/html/resources/articles/images/viewstub4.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/webview.png b/docs/html/resources/articles/images/webview.png
deleted file mode 100644
index 92472af..0000000
--- a/docs/html/resources/articles/images/webview.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/window_background.png b/docs/html/resources/articles/images/window_background.png
deleted file mode 100644
index 58f4f7e..0000000
--- a/docs/html/resources/articles/images/window_background.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/window_background_null.png b/docs/html/resources/articles/images/window_background_null.png
deleted file mode 100644
index 83f7b45..0000000
--- a/docs/html/resources/articles/images/window_background_null.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/images/window_background_root.png b/docs/html/resources/articles/images/window_background_root.png
deleted file mode 100644
index 95a47c0..0000000
--- a/docs/html/resources/articles/images/window_background_root.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/articles/index.jd b/docs/html/resources/articles/index.jd
deleted file mode 100644
index 2947e4a..0000000
--- a/docs/html/resources/articles/index.jd
+++ /dev/null
@@ -1,168 +0,0 @@
-page.title=Technical Articles
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/avoiding-memory-leaks.html">Avoiding Memory Leaks</a></dt>
-  <dd>Mobile devices often have limited memory, and memory leaks can cause your application to waste this valuable resource without your knowledge. This article provides tips to help you avoid common causes of memory leaks on the Android platform.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/backward-compatibility.html">Backward Compatibility</a></dt>
-  <dd>The Android platform strives to ensure backwards compatibility. However, sometimes you want to use new features which aren't supported on older platforms. This article discusses strategies for selectively using these features based on availability, allowing you to keep your applications portable across a wide range of devices.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/can-i-use-this-intent.html">Can I Use this Intent?</a></dt>
-  <dd>Android offers a very powerful and yet easy-to-use message type called an intent. You can use intents to turn applications into high-level libraries and make code modular and reusable. While it is nice to be able to make use of a loosely coupled API, there is no guarantee that the intent you send will be received by another application. This article describes a technique you can use to find out whether the system contains any application capable of responding to the intent you want to use.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/creating-input-method.html">Creating an Input Method</a></dt>
-  <dd>Input Method Editors (IMEs) provide the mechanism for entering text into text fields and other Views. Android devices come bundled with at least one IME, but users can install additional IMEs. This article covers the basics of developing an IME for the Android platform.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/drawable-mutations.html">Drawable Mutations</a></dt>
-  <dd>Drawables are pluggable drawing containers that allow applications to display graphics. This article explains some common pitfalls when trying to modify the properties of multiple Drawables.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/faster-screen-orientation-change.html">Faster Screen Orientation Change</a></dt>
-  <dd>When an Android device changes its orientation, the default behavior is to automatically restart the current activity with a new configuration. However, this can become a bottleneck in applications that access a large amount of external data. This article discusses how to gracefully handle this situation without resorting to manually processing configuration changes.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/future-proofing.html">Future-Proofing Your Apps</a></dt>
-  <dd>A collection of common sense advice to help you ensure that your applications don't break when new versions of the Android platform are released.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/gestures.html">Gestures</a></dt>
-  <dd>Touch screens allow users to perform gestures, such as tapping, dragging, flinging, or sliding, to perform various actions. The gestures API enables your application to recognize even complicated gestures with ease. This article explains how to integrate this API into an application.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/glsurfaceview.html">Introducing GLSurfaceView</a></dt>
-  <dd>This article provides an overview of GLSurfaceView, a class that makes it easy to implement 2D or 3D OpenGL rendering inside of an Android application.</dd>
-</dl>
-<dl>
-    <dt>
-        <a href="{@docRoot}resources/articles/spell-checker-framework.jd">
-        Using the Spell Checker Framework</a>
-    </dt>
-    <dd>
-        This article describes how to use the Spell Checker Framework to check spelling in
-        various ways in your application.
-    </dd>
-</dl>
-<dl>
-  <dt><a href="{@docRoot}resources/articles/layout-tricks-reuse.html">Layout Tricks: Creating Reusable UI Components</a></dt>
-  <dd>Learn how to combine multiple standard UI widgets into a single high-level component, which can be reused throughout your application.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/layout-tricks-efficiency.html">Layout Tricks: Creating Efficient Layouts</a></dt>
-  <dd>Learn how to optimize application layouts as this article walks you through converting a LinearLayout into a RelativeLayout, and analyzes the resulting implications on performance.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/layout-tricks-stubs.html">Layout Tricks: Using ViewStubs</a></dt>
-  <dd>Learn about using ViewStubs inside an application's layout in order to inflate rarely used UI elements, without the performance implications which would otherwise be caused by using the <code>&lt;include&gt;</code> tag.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/layout-tricks-merge.html">Layout Tricks: Merging Layouts</a></dt>
-  <dd>Learn how to use the <code>&lt;merge&gt;</code> tag in your XML layouts in order to avoid unnecessary levels of hierarchy within an application's view tree.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/listview-backgrounds.html">ListView Backgrounds: An Optimization</a></dt>
-  <dd>ListViews are very popular widgets within the Android framework. This article describes some of the optimizations used by the ListView widget, and how to avoid some common issues that this causes when trying to use a custom background.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/live-folders.html">Live Folders</a></dt>
-  <dd>Live Folders allow users to display any source of data on their home screen without launching an application. This article discusses how to export an application's data in a format suitable for display inside of a live folder.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/live-wallpapers.html">Live Wallpapers</a></dt>
-  <dd>Live wallpapers are richer, animated, interactive backgrounds that users can display in their home screens. Learn how to create a live wallpaper and bundle it in an application that users can install on their devices.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/on-screen-inputs.html">Onscreen Input Methods</a></dt>
-  <dd>The Input Method Framework (IMF) allows users to take advantage of on-screen input methods, such as software keyboards. This article provides an overview of Input Method Editors (IMEs) and how applications interact with them.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/painless-threading.html">Painless Threading</a></dt>
-  <dd>This article discusses the threading model used by Android applications and how applications can ensure best UI performance by spawning worker threads to handle long-running operations, rather than handling them in the main thread. The article also explains the API that your application can use to interact with Android UI toolkit components running on the main thread and spawn managed worker threads.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/qsb.html">Quick Search Box</a></dt>
-  <dd>Quick Search Box (QSB) is a powerful, system-wide search framework. QSB makes it possible for users to quickly and easily find what they're looking for, both on their devices and on the web. This article discusses how to work with the QSB framework to add new search results for an installed application.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/touch-mode.html">Touch Mode</a></dt>
-  <dd>This article explains the touch mode, one of the most important principles of Android's UI toolkit. Whenever a user interacts with a device's touch screen, the system enters touch mode. While simple in concept, there are important implications touch mode that are often overlooked.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/track-mem.html">Tracking Memory Allocations</a></dt>
-  <dd>This article discusses how to use the Allocation Tracker tool to observe memory allocations and avoid performance problems that would otherwise be caused by ignoring the effect of Dalvik's garbage collector.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/ui-1.5.html">UI Framework Changes in Android 1.5</a></dt>
-  <dd>Explore the UI changes that were introduced in Android 1.5, compared with the UI provided in Android 1.0 and 1.1.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/ui-1.6.html">UI Framework Changes in Android 1.6</a></dt>
-  <dd>Explore the UI changes that were introduced in Android 1.6, compared with the UI provided in Android 1.5. In particular, this article discusses changes to RelativeLayouts and click listeners.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/timed-ui-updates.html">Updating the UI from a Timer</a></dt>
-  <dd>Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/tts.html">Using Text-to-Speech</a></dt>
-  <dd>The text-to-speech API lets your application "speak" to users, in any of several languages. This article provides an overview of the TTS API and how you use to add speech capabilities to your application.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/tts.html">Using the Contacts API</a></dt>
-  <dd>This article discusses the improved Contacts API introduced in Android 2.0 and how to use it to manage and integrate contacts from multiple accounts and data sources. The article also discusses techniques for using the new API on devices that support it, while maintaining backward compatibility with the old API on other devices. </dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/using-webviews.html">Using WebViews</a></dt>
-  <dd>WebViews allow an application to dynamically display HTML and execute JavaScript, without relinquishing control to a separate browser application. This article introduces the WebView classes and provides a sample application that demonstrates its use.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/wikinotes-linkify.html">WikiNotes: Linkify your Text!</a></dt>
-  <dd>This article introduces WikiNotes for Android, part of the Apps for Android project. It covers the use of Linkify to turn ordinary text views into richer, link-oriented content that causes Android intents to fire when a link is selected.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/wikinotes-intents.html">WikiNotes: Routing Intents</a></dt>
-  <dd>This article illustrates how an application, in this case the WikiNotes sample app, can use intents to route various types of linked text to the application that handles that type of data. For example, an app can use intents to route a linked telephone number to a dialer app and a web URL to a browser.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/window-bg-speed.html">Window Backgrounds &amp; UI Speed</a></dt>
-  <dd>Some Android applications need to squeeze every bit of performance out of the UI toolkit and there are many ways to do so. In this article, you will discover how to speed up the drawing and the perceived startup time of your activities. Both of these techniques rely on a single feature, the window's background drawable.</dd>
-</dl>
-
-<dl>
-  <dt><a href="{@docRoot}resources/articles/zipalign.html">Zipalign: an Easy Optimization</a></dt>
-  <dd>The Android SDK includes a tool called zipalign that optimizes the way an application is packaged. Running zipalign against your application enables Android to interact with it more efficiently at run time and thus has the potential to make it and the overall system run faster. This article provides a high-level overview of the zipalign tool and its use.</dd>
-</dl>
diff --git a/docs/html/resources/articles/layout-tricks-efficiency.jd b/docs/html/resources/articles/layout-tricks-efficiency.jd
deleted file mode 100644
index 00b4147..0000000
--- a/docs/html/resources/articles/layout-tricks-efficiency.jd
+++ /dev/null
@@ -1,179 +0,0 @@
-page.title=Layout Tricks: Creating Efficient Layouts
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>The Android UI toolkit offers several layout managers that are
-rather easy to use and, most of the time, you only need the basic
-features of these layout managers to implement a user interface.</p>
-
-<p>Sticking to the basic features is unfortunately not the most efficient
-way to create user interfaces. A common example is the abuse of 
-{@link android.widget.LinearLayout}, which leads to a proliferation of 
-views in the view hierarchy. Every view &mdash; or worse, every layout 
-manager &mdash; that you add to your application comes at a cost: 
-initialization, layout and drawing become slower. The layout pass can be 
-especially expensive when you nest several <code>LinearLayout</code>
-that use the {@link android.R.attr#layout_weight weight} 
-parameter, which requires the child to be measured twice.</p>
-
-<p>Let's consider a very simple and common example of a layout: a list item 
-with an icon on the left, a title at the top and an optional description
-underneath the title. Here is what such an item looks like:</p>
-
-<div style="text-align: center;"><img src="images/relativelayout_1.png" alt="Simple list item"></div>
-
-<p>To clearly understand how the views, one {@link android.widget.ImageView} and
-two {@link android.widget.TextView}, are positioned with respect to each other,
-here is the wireframe of the layout as captured by <a
-href="{@docRoot}guide/developing/tools/hierarchy-viewer.html">HierarchyViewer</a
->:</p>
-
-<div style="text-align: center;"><img src="images/relativelayout_wire_1.png" alt="Wireframe of the simple list item"></div>
-
-<p>Implementing this layout is straightforward with <code>LinearLayout</code>.
-The item itself is a horizontal <code>LinearLayout</code> with an
-<code>ImageView</code> and a vertical <code>LinearLayout</code>, which contains
-the two <code>TextView</code>. Here's the source code of this layout:</p>
-
-<pre class="prettyprint">&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="?android:attr/listPreferredItemHeight"
-    
-    android:padding="6dip"&gt;
-    
-    &lt;ImageView
-        android:id="&#64;+id/icon"
-        
-        android:layout_width="wrap_content"
-        android:layout_height="fill_parent"
-        android:layout_marginRight="6dip"
-        
-        android:src="&#64;drawable/icon" /&gt;
-
-    &lt;LinearLayout
-        android:orientation="vertical"
-    
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="fill_parent"&gt;
-
-        &lt;TextView
-            android:layout_width="fill_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-                    
-            android:gravity="center_vertical"
-            android:text="My Application" /&gt;
-            
-        &lt;TextView  
-            android:layout_width="fill_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1" 
-            
-            android:singleLine="true"
-            android:ellipsize="marquee"
-            android:text="Simple application that shows how to use RelativeLayout" /&gt;
-            
-    &lt;/LinearLayout&gt;
-
-&lt;/LinearLayout&gt;</pre>
-
-<p>This layout works but can be wasteful if you instantiate it for every list
-item of a {@link android.widget.ListView}. The same layout can be rewritten
-using a single {@link android.widget.RelativeLayout}, thus saving one view, and
-even better one level in view hierarchy, per list item. The implementation of
-the layout with a <code>RelativeLayout</code> remains simple:</p>
-
-<pre class="prettyprint">&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="?android:attr/listPreferredItemHeight"
-    
-    android:padding="6dip"&gt;
-    
-    &lt;ImageView
-        android:id="&#64;+id/icon"
-        
-        android:layout_width="wrap_content"
-        android:layout_height="fill_parent"
-        
-        android:layout_alignParentTop="true"
-        android:layout_alignParentBottom="true"
-        android:layout_marginRight="6dip"
-        
-        android:src="&#64;drawable/icon" /&gt;
-
-    &lt;TextView  
-        android:id="&#64;+id/secondLine"
-
-        android:layout_width="fill_parent"
-        android:layout_height="26dip" 
-        
-        android:layout_toRightOf="&#64;id/icon"
-        android:layout_alignParentBottom="true"
-        android:layout_alignParentRight="true"
-        
-        android:singleLine="true"
-        android:ellipsize="marquee"
-        android:text="Simple application that shows how to use RelativeLayout" /&gt;
-
-    &lt;TextView
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        
-        android:layout_toRightOf="&#64;id/icon"
-        android:layout_alignParentRight="true"
-        android:layout_alignParentTop="true"
-        android:layout_above="&#64;id/secondLine"
-        android:layout_alignWithParentIfMissing="true"
-                
-        android:gravity="center_vertical"
-        android:text="My Application" /&gt;
-
-&lt;/RelativeLayout&gt;</pre>
-
-<p>This new implementation behaves exactly the same way as the previous
-implementation, except in one case. The list item we want to display has two
-lines of text: the title and an <em>optional</em> description. When a
-description is not available for a given list item, the application would simply
-set the visibility of the second <code>TextView</code> to 
-{@link android.view.View#GONE}. This works perfectly with the <code>LinearLayout</code>
-implementation but not with the <code>RelativeLayout</code> version:</p>
-
-<div style="text-align: center;"><img src="images/relativelayout_2.png" alt="RelativeLayout and description GONE"></div>
-<div style="text-align: center;"><img src="images/relativelayout_wire_2.png" alt="RelativeLayout and description GONE"></div>
-
-<p>In a <code>RelativeLayout</code>, views are aligned with their parent, with the
-<code>RelativeLayout</code> itself, or with other views. For instance, we declared that
-the description is aligned with the bottom of the <code>RelativeLayout</code> and
-that the title is positioned above the description and anchored to the
-parent's top. With the description GONE, RelativeLayout doesn't know
-where to position the title's bottom edge. To solve this problem, you
-can use a very special layout parameter called 
-{@link android.R.attr#layout_alignWithParentIfMissing}.
-</p>
-
-<p>This boolean parameter simply tells RelativeLayout to use its own edges as
-anchors when a constraint target is missing. For instance, if you position a
-view to the right of a GONE view and set <code>alignWithParentIfMissing</code>
-to <code>true</code>, <code>RelativeLayout</code> will instead anchor the view
-to its left edge. In our case, using <code>alignWithParentIfMissing</code> will
-cause <code>RelativeLayout</code> to align the title's bottom with its own
-bottom. The result is the following:</p>
-
-<div style="text-align: center;"><img src="images/relativelayout_3.png" alt="RelativeLayout, description GONE and alignWithParentIfMissing"></div>
-<div style="text-align: center;"><img src="images/relativelayout_wire_3.png" alt="RelativeLayout, description GONE and alignWithParentIfMissing"></div>
-
-<p>The
-behavior of our layout is now perfect, even when the description is
-GONE. Even better, the hierarchy is simpler and because we are not
-using LinearLayout's weights it's also more efficient. The difference
-between the two implementations becomes obvious when comparing the view
-hierarchies in HierarchyViewer:</p>
-
-<div style="text-align: center;"><img src="images/layouts_comparison_small.png" alt="LinearLayout vs RelativeLayout"></div>
-
-<p>Again, the difference will be much more important when you use such a layout
-for every item in a ListView for instance. Hopefully this simple
-example showed you that getting to know your layouts is the best way to
-learn how to optimize your UI.</p>
diff --git a/docs/html/resources/articles/layout-tricks-merge.jd b/docs/html/resources/articles/layout-tricks-merge.jd
deleted file mode 100644
index 0ca0317..0000000
--- a/docs/html/resources/articles/layout-tricks-merge.jd
+++ /dev/null
@@ -1,202 +0,0 @@
-page.title=Layout Tricks: Merging Layouts
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>The articles showed you how to use the <code>&lt;include /&gt;</code> tag in XML layouts, to
-reuse and share your layout code. This article explains the <code>&lt;merge /&gt;</code> tag and how
-it complements the  <code>&lt;include /&gt;</code> tag.</p>
-
-<p>The <code>&lt;merge /&gt;</code> tag was created for the purpose of
-optimizing Android layouts by reducing the number of levels in view trees. It's
-easier to understand the problem this tag solves by looking at an example. The
-following XML layout declares a layout that shows an image with its title on top
-of it. The structure is fairly simple; a {@link android.widget.FrameLayout} is
-used to stack a {@link android.widget.TextView} on top of an 
-{@link android.widget.ImageView}:</p>
-
-<pre class="prettyprint">&lt;FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"&gt;
-
-    &lt;ImageView  
-        android:layout_width="fill_parent" 
-        android:layout_height="fill_parent" 
-    
-        android:scaleType="center"
-        android:src="&#64;drawable/golden_gate" /&gt;
-    
-    &lt;TextView
-        android:layout_width="wrap_content" 
-        android:layout_height="wrap_content" 
-        android:layout_marginBottom="20dip"
-        android:layout_gravity="center_horizontal|bottom"
-
-        android:padding="12dip"
-        
-        android:background="#AA000000"
-        android:textColor="#ffffffff"
-        
-        android:text="Golden Gate" /&gt;
-
-&lt;/FrameLayout&gt;</pre>
-
-<p>This layout renders nicely and nothing seems wrong with it:</p>
-
-<div style="text-align: center;"><img src="images/merge1.jpg" alt="A FrameLayout is used to overlay a title on top of an image"></div>
-
-<p>Things get more interesting when you inspect the result with <a
-href="{@docRoot}guide/developing/debugging/debugging-ui.html#hierarchyViewer">HierarchyViewer</a>. 
-If you look closely at the resulting tree, you will notice that the
-<code>FrameLayout</code> defined in our XML file (highlighted in blue below) is
-the sole child of another <code>FrameLayout</code>:</p>
-
-<div style="text-align: center;"><img src="images/merge2.png" alt="A layout with only one child of same dimensions can be removed"></div>
-
-<p>Since our <code>FrameLayout</code> has the same dimension as its parent, by
-the virtue of using the <code>fill_parent</code> constraints, and does not
-define any background, extra padding or a gravity, it is <em>totally
-useless</em>. We only made the UI more complex for no good reason. But how could
-we get rid of this <code>FrameLayout</code>? After all, XML documents require a
-root tag and tags in XML layouts always represent view instances.</p>
-
-<p>That's where the <code>&lt;merge /&gt;</code> tag comes in handy. When the
-{@link android.view.LayoutInflater} encounters this tag, it skips it and adds
-the <code>&lt;merge /&gt;</code> children to the <code>&lt;merge /&gt;</code>
-parent. Confused? Let's rewrite our previous XML layout by replacing the
-<code>FrameLayout</code> with <code>&lt;merge /&gt;</code>:</p>
-
-<pre class="prettyprint">&lt;merge xmlns:android="http://schemas.android.com/apk/res/android"&gt;
-
-    &lt;ImageView  
-        android:layout_width="fill_parent" 
-        android:layout_height="fill_parent" 
-    
-        android:scaleType="center"
-        android:src="&#64;drawable/golden_gate" /&gt;
-    
-    &lt;TextView
-        android:layout_width="wrap_content" 
-        android:layout_height="wrap_content" 
-        android:layout_marginBottom="20dip"
-        android:layout_gravity="center_horizontal|bottom"
-
-        android:padding="12dip"
-        
-        android:background="#AA000000"
-        android:textColor="#ffffffff"
-        
-        android:text="Golden Gate" /&gt;
-
-&lt;/merge&gt;</pre>
-
-<p>With this new version, both the <code>TextView</code> and the
-<code>ImageView</code> will be added directly to the top-level
-<code>FrameLayout</code>. The result will be visually the same but the view
-hierarchy is simpler:</p>
-
-<div style="text-align: center;"><img src="images/merge3.png" alt="Optimized view hierarchy using the merge tag"></div>
-
-<p>Obviously, using <code>&lt;merge /&gt;</code> works in this case because the
-parent of an activity's content view is always a <code>FrameLayout</code>. You
-could not apply this trick if your layout was using a <code>LinearLayout</code>
-as its root tag for instance. The <code>&lt;merge /&gt;</code> can be useful in
-other situations though. For instance, it works perfectly when combined with the
-<code>&lt;include /&gt;</code> tag. You can also use <code>&lt;merge
-/&gt;</code> when you create a custom composite view. Let's see how we can use
-this tag to create a new view called <code>OkCancelBar</code> which simply shows
-two buttons with customizable labels. You can also <a
-href="http://progx.org/users/Gfx/android/MergeLayout.zip">download the complete
-source code of this example</a>. Here is the XML used to display this custom
-view on top of an image:</p>
-
-<pre class="prettyprint">&lt;merge
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:okCancelBar="http://schemas.android.com/apk/res/com.example.android.merge"&gt;
-
-    &lt;ImageView  
-        android:layout_width="fill_parent" 
-        android:layout_height="fill_parent" 
-    
-        android:scaleType="center"
-        android:src="&#64;drawable/golden_gate" /&gt;
-    
-    &lt;com.example.android.merge.OkCancelBar
-        android:layout_width="fill_parent" 
-        android:layout_height="wrap_content" 
-        android:layout_gravity="bottom"
-
-        android:paddingTop="8dip"
-        android:gravity="center_horizontal"
-        
-        android:background="#AA000000"
-        
-        okCancelBar:okLabel="Save"
-        okCancelBar:cancelLabel="Don't save" /&gt;
-
-&lt;/merge&gt;</pre>
-
-<p>This new layout produces the following result on a device:</p>
-
-<div style="text-align: center;"><img src="images/merge4.jpg" alt="Creating a custom view with the merge tag"></div>
-
-<p>The source code of <code>OkCancelBar</code> is very simple because the two
-buttons are defined in an external XML file, loaded using a
-<code>LayoutInflate</code>. As you can see in the following snippet, the XML
-layout <code>R.layout.okcancelbar</code> is inflated with the
-<code>OkCancelBar</code> as the parent:</p>
-
-<pre class="prettyprint">public class OkCancelBar extends LinearLayout {
-    public OkCancelBar(Context context, AttributeSet attrs) {
-        super(context, attrs);
-        setOrientation(HORIZONTAL);
-        setGravity(Gravity.CENTER);
-        setWeightSum(1.0f);
-        
-        LayoutInflater.from(context).inflate(R.layout.okcancelbar, this, true);
-        
-        TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.OkCancelBar, 0, 0);
-        
-        String text = array.getString(R.styleable.OkCancelBar_okLabel);
-        if (text == null) text = "Ok";
-        ((Button) findViewById(R.id.okcancelbar_ok)).setText(text);
-        
-        text = array.getString(R.styleable.OkCancelBar_cancelLabel);
-        if (text == null) text = "Cancel";
-        ((Button) findViewById(R.id.okcancelbar_cancel)).setText(text);
-        
-        array.recycle();
-    }
-}</pre>
-
-<p>The two buttons are defined in the following XML layout. As you can see, we
-use the <code>&lt;merge /&gt;</code> tag to add the two buttons directly to the
-<code>OkCancelBar</code>. Each button is included from the same external XML
-layout file to make them easier to maintain; we simply override their id:</p>
-
-<pre class="prettyprint">&lt;merge xmlns:android="http://schemas.android.com/apk/res/android"&gt;
-    &lt;include
-        layout="&#64;layout/okcancelbar_button"
-        android:id="&#64;+id/okcancelbar_ok" /&gt;
-        
-    &lt;include
-        layout="&#64;layout/okcancelbar_button"
-        android:id="&#64;+id/okcancelbar_cancel" /&gt;
-&lt;/merge&gt;</pre>
-
-<p>We have created a flexible and easy to maintain custom view that generates 
-an efficient view hierarchy:</p>
-
-<div style="text-align: center;"><img src="images/merge5.png" alt="The resulting hierarchy is simple and efficient"></div>
-
-<p>The <code>&lt;merge /&gt;</code> tag is extremely useful and can do wonders
-in your code. However, it suffers from a couple of limitations:</p>
-
-<ul>
-<li><code>&lt;merge /&gt;</code> can only be used as the root tag of an XML layout</li>
-<li>When inflating a layout starting with a <code>&lt;merge /&gt;</code>, you <strong>must</strong> 
-specify a parent <code>ViewGroup</code> and you must set <code>attachToRoot</code> to 
-<code>true</code> (see the documentation for 
-{@link android.view.LayoutInflater#inflate(int, android.view.ViewGroup, boolean)} method)</li>
-</ul>
-
diff --git a/docs/html/resources/articles/layout-tricks-reuse.jd b/docs/html/resources/articles/layout-tricks-reuse.jd
deleted file mode 100644
index 179c1d8..0000000
--- a/docs/html/resources/articles/layout-tricks-reuse.jd
+++ /dev/null
@@ -1,81 +0,0 @@
-page.title=Layout Tricks: Creating Reusable UI Components
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>The Android platform offers a wide variety of UI <em>widgets</em>, small
-visual construction blocks that you can glue together to present users with
-complex and useful interfaces. However applications often need higher-level
-visual <em>components</em>. To meet that need, and to do so efficiently, you can
-combine multiple standard widgets into a single, reusable component. </p>
-
-<p>For example, you could create a reusable component that contains a progress
-bar and a cancel button, a panel containing two buttons (positive and negative
-actions), a panel with an icon, a title and a description, and so on. You can
-create UI components easily by writing a custom <code>View</code>, but you can
-do it even more easily using only XML.</p>
-
-<p>In Android XML layout files, each tag is mapped to an actual class instance
-(the class is always a subclass of {@link android.view.View} The UI toolkit lets
-you also use three special tags that are not mapped to a <code>View</code>
-instance: <code>&lt;requestFocus /&gt;</code>, <code>&lt;merge /&gt;</code> and
-<code>&lt;include /&gt;</code>. This article shows how to use <code>&lt;include
-/&gt;</code> to create pure XML visual components. For information about how to
-use <code>&lt;merge /&gt;</code>, which can be particularly powerful when 
-combined with <code>&lt;include /&gt;</code>see the <a
-href="{@docRoot}resources/articles/layout-tricks-merge.html">Merging Layouts</a>
-article. </p>
-
-<p>The <code>&lt;include /&gt;</code> element does exactly what its name
-suggests; it includes another XML layout. Using this tag is straightforward as
-shown in the following example, taken straight from <a
-href="http://android.git.kernel.org/?p=platform/packages/apps/Launcher.git;a=
-tree;h=refs/heads/master;hb=master">the source code of the Home application</a>
-that ships with Android:</p>
-
-<pre class="prettyprint">&lt;com.android.launcher.Workspace
-    android:id="&#64;+id/workspace"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-
-    launcher:defaultScreen="1"&gt;
-
-    &lt;include android:id="&#64;+id/cell1" layout="@layout/workspace_screen" /&gt;
-    &lt;include android:id="&#64;+id/cell2" layout="@layout/workspace_screen" /&gt;
-    &lt;include android:id="&#64;+id/cell3" layout="@layout/workspace_screen" /&gt;
-
-&lt;/com.android.launcher.Workspace&gt;</pre>
-
-<p>In the <code>&lt;include /&gt;</code> only the <code>layout</code> attribute
-is required. This attribute, without the <code>android</code> namespace prefix,
-is a reference to the layout file you wish to include. In this example, the same
-layout is included three times in a row. This tag also lets you override a few
-attributes of the included layout. The above example shows that you can use
-<code>android:id</code> to specify the id of the root view of the included
-layout; it will also override the id of the included layout if one is defined.
-Similarly, you can override all the layout parameters. This means that any
-<code>android:layout_*</code> attribute can be used with the <code>&lt;include
-/&gt;</code> tag. Here is an example in
-which the same layout is included twice, but only the first one overrides the layout properties:</p>
-
-<pre>
-&lt;!-- override the layout height and width --&gt;
-&lt;include layout="@layout/image_holder"
-    android:layout_height="fill_parent"
-    android:layout_width="fill_parent" /&gt;
-&lt;!-- do not override layout dimensions; inherit them from image_holder --&gt;
-&lt;include layout="@layout/image_holder" /&gt;
-</pre>
-
-<p class="caution"><strong>Caution:</strong> If you want to override the layout dimensions,
-you must override both <code>android:layout_height</code> and
-<code>android:layout_width</code>&mdash;you cannot override only the height or only the width.
-If you override only one, it will not take effect. (Other layout properties, such as weight,
-are still inherited from the source layout.)</p>
-
-<p>This tag is particularly useful when you need to customize only part of your
-UI depending on the device's configuration. For instance, the main layout of
-your activity can be placed in the <code>layout/</code> directory and can
-include another layout which exists in two flavors, in <code>layout-land/</code>
-and <code>layout-port/</code>. This allows you to share most of the UI in
-portrait and landscape.</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/layout-tricks-stubs.jd b/docs/html/resources/articles/layout-tricks-stubs.jd
deleted file mode 100644
index 64f07f9..0000000
--- a/docs/html/resources/articles/layout-tricks-stubs.jd
+++ /dev/null
@@ -1,86 +0,0 @@
-page.title=Layout Tricks: Using ViewStubs
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Sharing and reusing UI components is very easy with Android, thanks to the <a
-href="layout-tricks-reuse.html">&lt;include /&gt;</a> tag. Sometimes it's so
-easy to create complex UI constructs that your UI ends up with a large number of
-views, some of which are rarely used. Thankfully, Android offers a very special
-widget called {@link android.view.ViewStub}, which brings you all the benefits
-of the <code>&lt;include /&gt;</code> without polluting your user interface with
-rarely used views.</p>
-
-<p>A <code>ViewStub</code> is a dumb and lightweight view. It has no dimension,
-it does not draw anything and does not participate in the layout in any way.
-This means that a <code>ViewStub</code> is very cheap to inflate and very cheap
-to keep in a view hierarchy. A <code>ViewStub</code> can be best described as a
-<em>lazy include</em>. The layout referenced by a <code>ViewStub</code> is
-inflated and added to the user interface only when you decide so.</p>
-
-<p>The following screenshot comes from the <a
-href="http://code.google.com/p/shelves">Shelves</a> application. The main purpose of
-the activity shown in the screenshot is to present the user with a browsable
-list of books:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center;" src="images/viewstub1.png" alt="" id="BLOGGER_PHOTO_ID_5314039375336055346" border="0">
-
-<p>The same activity is also used when the user adds or imports new books.
-During such an operation, Shelves shows extra bits of user interface.
-The screenshot below shows the progress bar and cancel button that
-appear at the bottom of the screen during an import:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center;" src="images/viewstub2.png" alt="" id="BLOGGER_PHOTO_ID_5314039800002559378" border="0">
-
-<p>Because importing books is not a common operation, at least when compared to
-browsing the list of books, the import panel is originally represented
-by a <code>ViewStub</code>:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center;" src="images/viewstub3.png" alt="" id="BLOGGER_PHOTO_ID_5314040334008167378" border="0">
-
-<p>When the user initiates the import process, the <code>ViewStub</code> is 
-inflated and replaced by the content of the layout file it references:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center;" src="images/viewstub4.png" alt="" id="BLOGGER_PHOTO_ID_5314040638747834450" border="0">
-
-<p>To use a <code>ViewStub</code>, all you need is to specify an 
-<code>android:id</code> attribute, to later inflate the stub, and an 
-<code>android:layout</code> attribute, to reference what layout file 
-to include and inflate. A stub lets you use a third attribute, 
-<code>android:inflatedId</code>, which can be used to override the 
-<code>id</code> of the root of the included file. Finally, the layout 
-parameters specified on the stub will be applied to the roof of the 
-included layout. Here is an example:</p>
-
-<pre class="prettyprint">&lt;ViewStub
-  android:id="&#64;+id/stub_import"
-  android:inflatedId="&#64;+id/panel_import"
-
-  android:layout="&#64;layout/progress_overlay"
-
-  android:layout_width="fill_parent"
-  android:layout_height="wrap_content"
-  android:layout_gravity="bottom" /&gt;</pre>
-
-<p>When you are ready to inflate the stub, simply invoke the 
-{@link android.view.ViewStub#inflate()} method. You can also simply change the
-visibility of the stub to {@link android.view.View#VISIBLE} or 
-{@link android.view.View#INVISIBLE} and the stub will inflate. Note however that the
-<code>inflate()</code> method has the benefit of returning the root
-<code>View</code> of the inflate layout:</p>
-
-<pre class="prettyprint">((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);
-// or
-View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();</pre>
-
-<p>It is very important to remember that after the stub is inflated, the stub is
-<em>removed</em> from the view hierarchy. As such, it is unnecessary to keep a
-long-lived reference, for instance in an class instance field, to a
-<code>ViewStub</code>.</p>
-
-<p>A <code>ViewStub</code> is a great compromise between ease of programming and
-efficiency. Instead of inflating views manually and adding them at runtime to
-your view hierarchy, simply use a <code>ViewStub</code>. It's cheap and easy.
-The only drawback of <code>ViewStub</code> is that it currently does
-<em>not</em> support the <a href="layout-tricks-merge.html">&lt;merge /&gt;
-tag</a>.</p>
diff --git a/docs/html/resources/articles/listview-backgrounds.jd b/docs/html/resources/articles/listview-backgrounds.jd
deleted file mode 100644
index c4037ba..0000000
--- a/docs/html/resources/articles/listview-backgrounds.jd
+++ /dev/null
@@ -1,88 +0,0 @@
-page.title=ListView Backgrounds: An Optimization
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>{@link android.widget.ListView} is one of Android's most widely used widgets.
-It is rather easy to use, very flexible, and incredibly powerful. 
-<code>ListView</code> can also be difficult to understand at times.</p>
-
-<p>One of the most common issues with <code>ListView</code> happens when you try
-to use a custom background. By default, like many Android widgets,
-<code>ListView</code> has a transparent background which means that you can see
-through the default window's background, a very dark gray
-(<code>#FF191919</code> with the current <code>dark</code> theme.) Additionally,
-<code>ListView</code> enables the <em>fading edges</em> by default, as you can
-see at the top of the following screenshot &mdash; the first text item gradually
-fades to black. This technique is used throughout the system to indicate that
-the container can be scrolled.</p>
-
-<div style="text-align: center;"><img src="images/list_fade_1.png" alt="Android's default ListView"></div>
-
-<p>The fade effect is implemented using a combination of 
-{@link android.graphics.Canvas#saveLayerAlpha(float, float, float, float, int, int) Canvas.saveLayerAlpha()} 
-and the {@link android.graphics.PorterDuff.Mode#DST_OUT Porter-Duff Destination Out blending mode}. </p>
-
-<p>Unfortunately, things start to get ugly when you try to use a custom
-background on the <code>ListView</code> or when you change the window's
-background. The following two screenshots show what happens in an application
-when you change the window's background. The left image shows what the list
-looks like by default and the right image shows what the list looks like during
-a scroll initiated with a touch gesture:</p>
-
-<div style="text-align: center;">
-<img style="margin-right: 12px;" src="images/list_fade_2.png" alt="Dark fade">
-<img src="images/list_fade_3.png" alt="Dark list"></div>
-
-<p>This rendering issue is caused by an optimization of the Android framework
-enabled by default on all instances of <code>ListView</code>. I mentioned
-earlier that the fade effect is implemented using a Porter-Duff blending mode.
-This implementation works really well but is unfortunately very costly and can
-bring down drawing performance by quite a bit as it requires to capture a
-portion of the rendering in an offscreen bitmap and then requires extra blending
-(which implies readbacks from memory.)</p>
-
-<p>Since <code>ListView</code> is most of the time displayed on a solid
-background, there is no reason to go down that expensive route. That's why we
-introduced an optimization called the "cache color hint." The cache color hint
-is an RGB color set by default to the window's background color, that is #191919
-in Android's dark theme. When this hint is set, <code>ListView</code> (actually,
-its base class <code>View</code>) knows it will draw on a solid background and
-therefore replaces th expensive <code>saveLayerAlpha()/Porter-Duff</code>
-rendering with a simple gradient. This gradient goes from fully transparent to
-the cache color hint value and this is exactly what you see on the image above,
-with the dark gradient at the bottom of the list. However, this still does not
-explain why the entire list turns black during a scroll.</p>
-
-<p>As mentioned before, <code>ListView</code> has a transparent/translucent
-background by default, and so all default widgets in the Android UI toolkit.
-This implies that when <code>ListView</code> redraws its children, it has to
-blend the children with the window's background. Once again, this requires
-costly readbacks from memory that are particularly painful during a scroll or a
-fling when drawing happens dozen of times per second. </p>
-
-<p>To improve drawing performance during scrolling operations, the Android
-framework reuses the cache color hint. When this hint is set, the framework
-copies each child of the list in a <code>Bitmap</code> filled with the hint
-value (assuming that another optimization, called <em>scrolling cache</em>, is
-not turned off). <code>ListView</code> then blits these bitmaps directly on
-screen and because these bitmaps are known to be opaque, no blending is
-required. Also, since the default cache color hint is <code>#191919</code>, you
-get a dark background behind each item during a scroll.</p>
-
-<p>To fix this issue, all you have to do is either disable the cache color hint
-optimization, if you use a non-solid color background, or set the hint to the
-appropriate solid color value. You can do this from code (see
-{@link android.widget.AbsListView#setCacheColorHint(int)}) or preferably from
-XML, by using the <code>android:cacheColorHint</code> attribute. To disable the
-optimization, simply use the transparent color <code>#00000000</code>. The
-following screenshot shows a list with
-<code>android:cacheColorHint="#00000000"</code> set in the XML layout file:</p>
-
-<div style="text-align: center;"><img src="images/list_fade_4.png" alt="Fade on a custom background"></div>
-
-<p>As you can see, the fade works perfectly against the custom wooden
-background. The cache color hint feature is interesting because it
-shows how optimizations can make your life more difficult in
-some situations. In this particular case, however, the benefit of the
-default behavior outweighs the added complexity..</p>
diff --git a/docs/html/resources/articles/live-folders.jd b/docs/html/resources/articles/live-folders.jd
deleted file mode 100644
index aeab997..0000000
--- a/docs/html/resources/articles/live-folders.jd
+++ /dev/null
@@ -1,170 +0,0 @@
-page.title=Live Folders
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Live folders, introduced in Android 1.5 (API Level 3), let you display any source of data
-on the Home screen without forcing the user to launch an application. A live
-folder is simply a real-time view of a {@link android.content.ContentProvider}.	
-As such, a live folder can be used to display all of the user's contacts or
-bookmarks, email, playlists, an RSS feed, and so on. The possibilities are
-endless! </p>
-
-<p>The platform includes several standard folders for displaying contacts. For
-instance, the screenshot below shows the content of the live folders that
-displays all contacts with a phone number:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 400px;" src="images/contacts.png" alt="" id="BLOGGER_PHOTO_ID_5323287788220889218" border="0">
-
-<p>If a contacts sync happens in the background while the user is browsing this live
-folder, the user will see the change happen in real-time. Live folders are not
-only useful, but they are also easy to add to to your application and data. 
-
-This articles shows how to add a live folder to an example application called
-Shelves. To better understand how live folders work, you can <a
-href="http://code.google.com/p/shelves">download the source code of the
-application</a> and modify it by following the instructions below.</p>
-
-<p>To give the user the option to create a new live folder for an application,
-you first need to create a new activity with an intent filter whose action is
-<code>android.intent.action.CREATE_LIVE_FOLDER</code>. To do so, simply open
-<code>AndroidManifest.xml</code> and add something similar to this:</p>
-
-<pre>&lt;activity
-    android:name=".activity.BookShelfLiveFolder"
-    android:label="BookShelf"&gt;
-    &lt;intent-filter&gt;	
-        &lt;action android:name="android.intent.action.CREATE_LIVE_FOLDER" /&gt;
-        &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-    &lt;/intent-filter&gt;
-&lt;/activity&gt;</pre>
-
-<p>The label and icon of this activity are what the user will see on the Home
-screen when choosing a live folder to create:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 400px;" src="images/device_002.png" alt="" id="BLOGGER_PHOTO_ID_5323289217773103922" border="0">
-
-<p>Since you just need an intent filter, it is possible, and sometimes advised,
-to reuse an existing activity. In the case of Shelves, we will create a new
-activity, <code>org.curiouscreature.android.shelves.activity.BookShelfLiveFolder</code>.
-The role of this activity is to send an <code>Intent</code> result to Home
-containing the description of the live folder: its name, icon, display mode and
-content URI. The content URI is very important as it describes what
-<code>ContentProvider</code> will be used to populate the live folder. The code
-of the activity is very simple as you can see here:</p>
-
-<pre>public class BookShelfLiveFolder extends Activity {
-    public static final Uri CONTENT_URI = Uri.parse("content://shelves/live_folders/books");
-
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        final Intent intent = getIntent();
-        final String action = intent.getAction();
-
-        if (LiveFolders.ACTION_CREATE_LIVE_FOLDER.equals(action)) {
-            setResult(RESULT_OK, createLiveFolder(this, CONTENT_URI,
-                    "Books", R.drawable.ic_live_folder));
-        } else {
-            setResult(RESULT_CANCELED);
-        }
-
-        finish();
-    }
-
-    private static Intent createLiveFolder(Context context, Uri uri, String name, int icon) {
-        final Intent intent = new Intent();
-
-        intent.setData(uri);
-        intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_NAME, name);
-        intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_ICON,
-                Intent.ShortcutIconResource.fromContext(context, icon));
-        intent.putExtra(LiveFolders.EXTRA_LIVE_FOLDER_DISPLAY_MODE, LiveFolders.DISPLAY_MODE_LIST);
-
-        return intent;
-    }
-}</pre>
-
-<p>This activity, when invoked with the<code>ACTION_CREATE_LIVE_FOLDER</code>
-intent, returns an intent with a URI,
-<code>content://shelves/live_folders/books</code>, and three extras to describe
-the live folder. There are other extras and constants you can use and you should
-refer to the documentation of <code>android.provider.LiveFolders</code> for more
-details. When Home receives this intent, a new live folder is created on the
-user's desktop, with the name and icon you provided. Then, when the user clicks
-on the live folder to open it, Home queries the content provider referenced by
-the provided URI.</p>
-
-<p>Live folders' content providers must obey specific naming rules. The
-<code>Cursor</code> returned by the <code>query()</code> method must have at
-least two columns named <code>LiveFolders._ID</code> and
-<code>LiveFolders.NAME</code>. The first one is the unique identifier of each
-item in the live folder and the second one is the name of the item. There are
-other column names you can use to specify an icon, a description, the intent to
-associate with the item (fired when the user clicks that item), etc. Again,
-refer to the documentation of <code>android.provider.LiveFolders</code> for more
-details.</p><p>In our example, all we need to do is modify the existing provider
-in Shelves called
-<code>org.curiouscreature.android.shelves.provider.BooksProvider</code>. First,
-we need to modify the <code>URI_MATCHER</code> to recognize our
-<code>content://shelves/live_folders/books</code> content URI:</p>
-
-<pre>private static final int LIVE_FOLDER_BOOKS = 4;
-// ...
-URI_MATCHER.addURI(AUTHORITY, "live_folders/books", LIVE_FOLDER_BOOKS);</pre>
-
-<p>Then we need to create a new projection map for the cursor. A projection map
-can be used to "rename" columns. In our case, we will replace
-<code>BooksStore.Book._ID</code>, <code>BooksStore.Book.TITLE</code> and
-<code>BooksStore.Book.AUTHORS</code> with <code>LiveFolders._ID</code>,
-<code>LiveFolders.TITLE</code> and <code>LiveFolders.DESCRIPTION</code>:</p>
-
-<pre>private static final HashMap&lt;string, string=""&gt; LIVE_FOLDER_PROJECTION_MAP;
-static {
-    LIVE_FOLDER_PROJECTION_MAP = new HashMap&lt;string, string=""&gt;();
-    LIVE_FOLDER_PROJECTION_MAP.put(LiveFolders._ID, BooksStore.Book._ID +
-            " AS " + LiveFolders._ID);
-    LIVE_FOLDER_PROJECTION_MAP.put(LiveFolders.NAME, BooksStore.Book.TITLE +
-            " AS " + LiveFolders.NAME);
-    LIVE_FOLDER_PROJECTION_MAP.put(LiveFolders.DESCRIPTION, BooksStore.Book.AUTHORS +
-            " AS " + LiveFolders.DESCRIPTION);
-}</pre>
-
-<p>Because we are providing a title and a description for each row, Home will
-automatically display each item of the live folder with two lines of text.
-Finally, we implement the <code>query()</code> method by supplying our
-projection map to the SQL query builder:</p>
-
-<pre>public Cursor query(Uri uri, String[] projection, String selection,
-        String[] selectionArgs, String sortOrder) {
-
-    SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
-
-    switch (URI_MATCHER.match(uri)) {
-        // ...
-        case LIVE_FOLDER_BOOKS:
-            qb.setTables("books");
-            qb.setProjectionMap(LIVE_FOLDER_PROJECTION_MAP);
-            break;
-        default:
-            throw new IllegalArgumentException("Unknown URI " + uri);
-    }
-
-    SQLiteDatabase db = mOpenHelper.getReadableDatabase();
-    Cursor c = qb.query(db, projection, selection, selectionArgs, null, null, BooksStore.Book.DEFAULT_SORT_ORDER);
-    c.setNotificationUri(getContext().getContentResolver(), uri);
-
-    return c;
-}</pre>
-
-<p>You can now compile and deploy the application, go to the Home screen and
-try to add a live folder. You can add a books live folder to your Home screen
-and when you open it, see the list of all of your books, with their
-titles and authors, and all it took was a few lines of code:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 267px; height: 400px;" src="images/device.png" alt="" id="BLOGGER_PHOTO_ID_5323293545495859234" border="0"></p>
-
-<p>The live folders API is extremely simple and relies only on intents and
-content URI. If you want to see more examples of live folders
-implementation, you can read the source code of the <a href="http://android.git.kernel.org/?p=platform/packages/apps/Contacts.git;a=tree;h=refs/heads/cupcake;hb=cupcake">Contacts application</a> and of the <a href="http://android.git.kernel.org/?p=platform/packages/providers/ContactsProvider.git;a=tree;h=refs/heads/cupcake;hb=cupcake">Contacts provider</a>.</p><p>You can also download the result of our exercise, the <a href="http://jext.free.fr/CupcakeShelves.zip">modified version of Shelves with live folders support</a>.</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/live-wallpapers.jd b/docs/html/resources/articles/live-wallpapers.jd
deleted file mode 100644
index 0692a62..0000000
--- a/docs/html/resources/articles/live-wallpapers.jd
+++ /dev/null
@@ -1,102 +0,0 @@
-page.title=Live Wallpapers
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}resources/samples/CubeLiveWallpaper/index.html">Live Wallpaper
-sample</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>Starting with Android 2.1 (API Level 7), users can now enjoy <em>live
-wallpapers</em> &mdash; richer, animated, interactive backgrounds &mdash; on
-their home screens. A live wallpaper is very similar to a normal Android
-application and has access to all the facilities of the platform: SGL (2D
-drawing), OpenGL (3D drawing), GPS, accelerometers, network access, etc. The
-live wallpapers included on Nexus One demonstrate the use of some of these APIs
-to create fun and interesting user experiences. For instance, the Grass
-wallpaper uses the phone's location to compute sunrise and sunset times in order
-to display the appropriate sky.</p>
-
-<img src="images/live_wallpapers_small.png" style="align:center" />
-
-<p>Creating your own live wallpaper is easy, especially if you have had
-previous experience with {@link android.view.SurfaceView} or {@link
-android.graphics.Canvas}. 
-To learn how to create a live wallpaper, you should check out the <a 
-href="../samples/CubeLiveWallpaper/index.html">CubeLiveWallpaper sample code</a>.</p>
-
-<p>In terms of implementation, a live wallpaper is very similar to a {@link android.app.Service}.
-The only difference is the addition of a new method, {@link
-android.service.wallpaper.WallpaperService#onCreateEngine()}, whose goal is to create a {@link
-android.service.wallpaper.WallpaperService.Engine}. The engine is responsible for
-handling the lifecycle and drawing of a wallpaper. The system provides a surface
-on which you can draw, just like you would with a {@link android.view.SurfaceView}.
-Drawing a wallpaper can be very expensive so you should optimize your code
-as much as possible to avoid using too much CPU, not only for battery life
-but also to avoid slowing down the rest of the system. That is also why the
-most important part of the lifecycle of a wallpaper is when it becomes visible, as indicated
-by a call to {@link android.service.wallpaper.WallpaperService.Engine#onVisibilityChanged
-onVisibilityChanged()}. 
-When invisible, such as when the user launches an application that covers
-the home screen, a wallpaper must stop all activity.</p>
-
-<p>The engine can also implement several methods to interact with the user
-or the home application. For instance, if you want your wallpaper to scroll
-along when the user swipes from one home screen to another, you can use
-{@link android.service.wallpaper.WallpaperService.Engine#onOffsetsChanged
-onOffsetsChanged()}.
-To react to touch events, simply implement {@link
-android.service.wallpaper.WallpaperService.Engine#onTouchEvent onTouchEvent()}.
-Finally, applications can send arbitrary commands to the live wallpaper.
-Currently, only the standard home application sends commands to the
-{@link android.service.wallpaper.WallpaperService.Engine#onCommand onCommand()}
-method of the live wallpaper:</p>
-
-<ul>
-<li><code>android.wallpaper.tap</code>: When the user taps an empty space
-on the workspace. This command is interpreted by the Nexus and Water live
-wallpapers to make the wallpaper react to user interaction. For instance,
-if you tap an empty space on the Water live wallpaper, new ripples appear
-under your finger.</li>
-<li><code>android.home.drop</code>: When the user drops an icon or a widget
-on the workspace. This command is also interpreted by the Nexus and Water
-live wallpapers.</li>
-</ul>
-
-<p>If you are developing a live wallpaper, remember that the feature is
-supported only on Android 2.1 (API level 7) and higher versions of the platform.
-To ensure that your application can only be installed on devices that support
-live wallpapers, remember to add the following to the application's manifest
-before publishing to Google Play:</p>
-
-<ul>
-<li><code>&lt;uses-sdk android:minSdkVersion="7" /&gt;</code>, which indicates
-to Google Play and the platform that your application requires Android 2.1 or
-higher. For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API
-Levels</a> and the documentation for the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-element.</li>
-<li><code>&lt;uses-feature android:name="android.software.live_wallpaper" /&gt;</code>,
-which tells Google Play that your application includes a live wallpaper
-Google Play uses this feature as a filter, when presenting users lists of
-available applications. When you declaring this feature, Google Play
-displays your application only to users whose devices support live wallpapers,
-while hiding it from other devices on which it would not be able to run. For
-more information, see the documentation for the
-<a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-&lt;uses-feature&gt;</a>
-element.</li>
-</ul>
-
-<p>Many great live wallpapers are already available on Google Play and
-we can't wait to see more!</p>
diff --git a/docs/html/resources/articles/multitasking-android-way.jd b/docs/html/resources/articles/multitasking-android-way.jd
deleted file mode 100644
index 0dc8627..0000000
--- a/docs/html/resources/articles/multitasking-android-way.jd
+++ /dev/null
@@ -1,103 +0,0 @@
-page.title=Multitasking the Android Way
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
-    <li><a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></li>
-  </ol>
-
-  <h2>Key classes</h2>
-  <ol>
-    <li>{@link android.app.Service}</li>
-    <li>{@link android.content.BroadcastReceiver}</li>
-  </ol>
-
-</div>
-</div>
-
-<p>Android is fairly unique in the ways it allows multiple applications to run at the same time.  Developers coming from a different platform may find the way it operates surprising.  Understanding its behavior is important for designing applications that will work well and integrate seamlessly with the rest of the Android platform.  This article covers the reasons for Android's multitasking design, its impact on how applications work, and how you can best take advantage of Android's unique features.</p>
-<h3>Design considerations</h3>
-<p>Mobile devices have technical limitations and user experience requirements not present in desktop or web systems.  Here are the four key constraints we were working under as we designed Android's multitasking:</p>
-<ul>
-  <li>
-    <p>We did not want to require that users close applications when "done" with them.  Such a usage pattern does not work well in a mobile environment, where usage tends to involve repeated brief contact with a wide variety of applications throughout the day.</p>
-  </li>
-  <li>
-    <p>Mobile devices don't have the luxury of swap space, so have fairly hard limits on memory use.  Robert Love has <a href="http://blog.rlove.org/2010/04/why-ipad-and-iphone-dont-support.html">a very good article</a> covering the topic.</p>
-  </li>
-  <li>
-    <p>Application switching on a mobile device is extremely critical; we target significantly less than 1 second to launch a new application.  This is especially important when the user is switching between a few applications, such as switching to look at a new SMS message while watching a video, and then returning to that video.  A noticeable wait in such situations will quickly make users hate you.</p>
-  </li>
-  <li>
-    <p>The available APIs must be sufficient for writing the built-in Google applications, as part of our "all applications are created equal" philosophy.  This means background music playback, data syncing, GPS navigation, and application downloading must be implemented with the same APIs that are available to third party developers.</p>
-  </li>
-</ul>
-<p>The first two requirements highlight an interesting conflict.  We don't want users to worry about closing their apps, but rather make it appear that all of the applications are always running.  At the same time, mobile devices have hard limits on memory use, so that a system will degrade or even start failing very quickly as it needs more RAM than is available; a desktop computer, with swap, in contrast will simply start slowing down as it needs to page RAM to its swap space.  These competing constraints were a key motivation for Android's design.</p>
-<h3>When does an application "stop"?</h3>
-<p>A common misunderstanding about Android multitasking is the difference between a process and an application.  In Android these are not tightly coupled entities: applications may seem present to the user without an actual process currently running the app; multiple applications may share processes, or one application may make use of multiple processes depending on its needs; the process(es) of an application may be kept around by Android even when that application is not actively doing something.</p>
-<p>The fact that you can see an application's process "running" does not mean the application is running or doing anything.  It may simply be there because Android needed it at some point, and has decided that it would be best to keep it around in case it needs it again.  Likewise, you may leave an application for a little bit and return to it from where you left off, and during that time Android may have needed to get rid of the process for other things.</p>
-<p>A key to how Android handles applications in this way is that processes don't shut down cleanly.  When the user leaves an application, its process is kept around in the background, allowing it to continue working (for example downloading web pages) if needed, and come immediately to the foreground if the user returns to it.  If a device never runs out of memory, then Android will keep all of these processes around, truly leaving all applications "running" all of the time.</p>
-<p>Of course, there is a limited amount of memory, and to accommodate this Android must decide when to get rid of processes that are not needed.  This leads to Android's <a href="{@docRoot}guide/topics/fundamentals.html#proclife">process lifecycle</a>, the rules it uses to decide how important each process is and thus the next one that should be dropped.  These rules are based on both how important a process is for the user's current experience, as well as how long it has been since the process was last needed by the user.</p>
-<p>Once Android determines that it needs to remove a process, it does this brutally, simply force-killing it.  The kernel can then immediately reclaim all resources needed by the process, without relying on that application being well written and responsive to a polite request to exit.  Allowing the kernel to immediately reclaim application resources makes it a lot easier to avoid serious out of memory situations.</p>
-<p>If a user later returns to an application that's been killed, Android needs a way to re-launch it in the same state as it was last seen, to preserve the "all applications are running all of the time" experience.  This is done by keeping track of the parts of the application the user is aware of (the Activities), and re-starting them with information about the last state they were seen in.  This last state is generated each time the user leaves that part of the application, not when it is killed, so that the kernel can later freely kill it without depending on the application to respond correctly at that point.</p>
-<p>In some ways, Android's process management can be seen as a form of swap space: application processes represent a certain amount of in-use memory; when memory is low, some processes can be killed (swapped out); when those processes are needed again, they can be re-started from their last saved state (swapped in).</p>
-<h3>Explicitly running in the background</h3>
-<p>So far, we have a way for applications to implicitly do work in the background, as long as the process doesn't get killed by Android as part of its regular memory management.  This is fine for things like loading web pages in the background, but what about features with harder requirements?  Background music playback, data synchronization, location tracking, alarm clocks, etc.</p>
-<p/>
-<p>For these tasks, the application needs a way to tell Android "I would explicitly like to run at this point."  There are two main facilities available to applications for this, represented by two kinds of components they can publish in their manifest: <span style="font-style:italic;">broadcast receivers</span> and <span style="font-style:italic;">services</span>.</p>
-<h4>Broadcast Receivers</h4>
-<p>A BroadcastReceiver allows an application to run, for a brief amount of time, in the background as a result of something else happening.  It can be used in many ways to build higher-level facilities: for example the AlarmManager allows an application to have a broadcast sent at a certain time in the future, and the LocationManager can send a broadcast when it detects interesting changes in location.  Because information about the receiver is part of an application's manifest, Android can find and launch the application even if it isn't running; of course if it already has its process available in the background, the broadcast can very efficiently be directly dispatched to it.</p>
-<p>When handling a broadcast, the application is given a fixed set of time (currently 10 seconds) in which to do its work.  If it doesn't complete in that time, the application is considered to be misbehaving, and its process immediately tossed into the background state to be killed for memory if needed.</p>
-<p>Broadcast receivers are great for doing small pieces of work in response to an external stimulus, such as posting a notification to the user after being sent a new GPS location report.  They are very lightweight, since the application's process only needs to be around while actively receiving the broadcast.  Because they are active for a deterministic amount of time, fairly strong guarantees can be made about not killing their process while running.  However they are not appropriate for anything of indeterminate length, such as networking.</p>
-<h4>Services</h4>
-<p>A Service allows an application to implement longer-running background operations.  There are actually a lot of other functions that services provide, but for the discussion here their fundamental purpose is for an application to say "hey I would like to continue running even while in the background, until I say I am done."  An application controls when its service runs by explicitly starting and stopping the service.</p>
-<p>While services do provide a rich client-server model, its use is optional.  Upon starting an application's services, Android simply instantiates the component in the application's process to provide its context.  How it is used after that is up to the application: it can put all of the needed code inside of the service itself without interacting with other parts of the application, make calls on other singleton objects shared with other parts of the app, directly retrieve the Service instance from elsewhere if needed, or run it in another process and do a full-blown RPC protocol if that is desired.</p>
-<p>Process management for services is different than broadcast receivers, because an unbounded number of services can ask to be running for an unknown amount of time.  There may not be enough RAM to have all of the requesting services run, so as a result no strong guarantees are made about being able to keep them running.</p>
-<p>If there is too little RAM, processes hosting services will be immediately killed like background processes are.  However, if appropriate, Android will remember that these services wish to remain running, and restart their process at a later time when more RAM is available.  For example, if the user goes to a web page that requires large amounts of RAM, Android may kill background service processes like sync until the browser's memory needs go down.</p>
-<p>Services can further negotiate this behavior by requesting they be considered "foreground."  This places the service in a "please don't kill" state, but requires that it include a notification to the user about it actively running.  This is useful for services such as background music playback or car navigation, which the user is actively aware of; when you're playing music and using the browser, you can always see the music-playing glyph in the status bar.  Android won't try to kill these services, but as a trade-off, ensures the user knows about them and is able to explicitly stop them when desired.</p>
-<h3>The value of generic components</h3>
-<p>Android's generic broadcast receiver and service components allow developers to create a wide variety of efficient background operations, including things that were never originally considered.  In Android 1.0 they were used to implement nearly all of the background behavior that the built-in and proprietary Google apps provided:</p>
-<ul>
-  <li>
-    Music playback runs in a service to allow it to continue operating after the user leaves the music application.
-  </li>
-  <li>
-    The alarm clock schedules a broadcast receiver with the alarm manager, to go off at the next set alarm time.
-  </li>
-  <li>
-    The calendar application likewise schedules an alarm to display or update its notification at the appropriate time for the next calendar event.
-  </li>
-  <li>
-    Background file download is implemented a service that runs when there are any downloads to process.
-  </li>
-  <li>
-    The e-mail application schedules an alarm to wake up a service at regular intervals that looks for and retrieves any new mail.
-  </li>
-  <li>
-    The Google applications maintain a service to receive push notifications from the network; it in turn sends broadcasts to individual apps when it is told that they need to do things like synchronize contacts.</p>
-  </li>
-</ul>
-<p>As the platform has evolved, these same basic components have been used to implement many of the major new developer features:
-<ul>
-  <li>
-    Input methods are implemented by developers as a Service component that Android manages and works with to display as the current IME.
-  </li>
-  <li>
-    Application widgets are broadcast receivers that Android sends broadcasts to when it needs to interact with them.  This allows app widgets to be quite lightweight, by not needing their application's process remain running.
-  </li>
-  <li>
-    Accessibility features are implemented as services that Android keeps running while in use and sends appropriate information to about user interactions.
-  </li>
-  <li>
-    Sync adapters introduced in Android 2.0 are services that are run in the background when a particular data sync needs to be performed.
-  </li>
-  <li>
-    Live wallpapers are a service started by Android when selected by the user.
-  </li>
-</ul>
diff --git a/docs/html/resources/articles/on-screen-inputs.jd b/docs/html/resources/articles/on-screen-inputs.jd
deleted file mode 100644
index 6a028c8..0000000
--- a/docs/html/resources/articles/on-screen-inputs.jd
+++ /dev/null
@@ -1,265 +0,0 @@
-page.title=Onscreen Input Methods
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}resources/articles/creating-input-method.html">Creating an Input
-Method</a></li>
-    <li><a href="{@docRoot}resources/samples/SoftKeyboard/index.html">Soft Keyboard sample</a></li>
-  </ol>
-
-</div>
-</div>
-
-
-<p>Starting from Android 1.5, the Android platform offers an Input Method
-Framework (IMF) that lets you create on-screen input methods such as software
-keyboards. This article provide an overview of what Android input method editors
-(IMEs) are and what an application needs to do to work well with them. The IMF
-is designed to support new classes of Android devices, such as those without
-hardware keyboards, so it is important that your application works well with the
-IMF and offers a great experience for users.</p>
-
-<h3>What is an input method?</h3>
-
-<p>The Android IMF is designed to support a variety of IMEs, including soft
-keyboard, hand-writing recognizers, and hard keyboard translators. Our focus,
-however, will be on soft keyboards, since this is the kind of input method that
-is currently part of the platform.</p>
-
-<p>A user will usually access the current IME by tapping on a text view to 
-edit, as shown here in the home screen:</p>
-
-<img style="width: 320px; height: 480px; margin-right: 10px;" src="images/on-screen-inputs_004.png">
-<img style="width: 320px; height: 480px;" src="images/on-screen-inputs.png">
-
-<p>The soft keyboard is positioned at the bottom of the screen over the
-application's window. To organize the available space between the application
-and IME, we use a few approaches; the one shown here is called <em>pan and
-scan</em>, and simply involves scrolling the application window around so that
-the currently focused view is visible. This is the default mode, since it is the
-safest for existing applications.</p>
-
-<p>Most often the preferred screen layout is a <em>resize</em>, where the
-application's window is resized to be entirely visible.  An example is shown
-here, when composing an e-mail message:</p>
-
-<img style="width: 320px; height: 480px; margin-right: 10px;" src="images/on-screen-inputs_005.png">
-<img style="width: 320px; height: 480px;" src="images/on-screen-inputs_003.png">
-
-<p>The size of the application window is changed so that none of it is hidden by
-the IME, allowing full access to both the application and IME. This of course
-only works for applications that have a resizeable area that can be reduced to
-make enough space, but the vertical space in this mode is actually no less than
-what is available in landscape orientation, so very often an application can
-already accommodate it.</p>
-
-<p>The final major mode is <em>fullscreen</em> or <em>extract</em>
-mode. This is used when the IME is too large to reasonably share space
-with the underlying application. With the standard IMEs, you will only
-encounter this situation when the screen is in a landscape orientation,
-although other IMEs are free to use it whenever they desire. In this
-case the application window is left as-is, and the IME simply displays
-fullscreen on top of it, as shown here:</p>
-
-<img style="width: 480px; height: 320px; margin-right: 10px; margin-bottom: 10px;" src="images/on-screen-inputs_006.png">
-<img style="width: 480px; height: 320px;" src="images/on-screen-inputs_002.png">
-
-<p>Because the IME is covering the application, it has its own editing area,
-which shows the text actually contained in the application. There are also some
-limited opportunities the application has to customize parts of the IME (the
-"done" button at the top and enter key label at the bottom) to improve the user
-experience.</p>
-
-<h3>Basic XML attributes for controlling IMEs</h3>
-
-<p>There are a number of things the system does to try to help existing 
-applications work with IMEs as well as possible, such as:</p>
-
-<ul>
-<li>Use pan and scan mode by default, unless it can reasonably guess that
-resize mode will work by the existence of lists, scroll views, etc.</li>
-<li>Analyze the various existing TextView attributes to guess at the kind of
-content (numbers, plain text, etc) to help the soft keyboard display an
-appropriate key layout.</li>
-<li>Assign a few default actions to the fullscreen IME, such as "next field"
-and "done".</li>
-</ul>
-
-<p>There are also some simple things you can do in your application that will
-often greatly improve its user experience. Except where explicitly mentioned,
-these will work in any Android platform version, even those previous to Android
-1.5 (since they will simply ignore these new options).</p>
-
-<h4>Specifying each EditText control's input type</h4>
-
-<p>The most important thing for an application to do is to use the new
-<code>android:inputType</code>
-attribute on each <code>EditText</code>. The attribute provides much richer
-information
-about the text content. This attribute actually replaces many existing
-attributes (<code>android:</code><code>password</code>,
-<code>android:</code><code>singleLine</code>,
-<code>android:</code><code>numeric</code>,
-<code>android:</code><code>phoneNumber</code>,
-<code>android:</code><code>capitalize</code>,
-<code>android:</code><code>autoText</code>, and 
-<code>android:</code><code>editable</code>). If you specify the older attributes
-and the new <code>android:inputType</code> attribute, the system uses
-<code>android:inputType</code> and ignores the others. </p>
-
-<p>The <code>android:inputType</code> attribute has three pieces:</p>
-
-<ul>
-<li>The <em>class</em> is the overall interpretation of characters.  The
-currently supported classes are <code>text</code> (plain text),
-<code>number</code> (decimal number), <code>phone</code> (phone number), and
-<code>datetime</code> (a date or time).</li>
-<li>The <em>variation</em> is a further refinement on the class. In the
-attribute you will normally specify the class and variant together, with the
-class as a prefix. For example, <code>textEmailAddress</code> is a text field
-where the user will enter something that is an e-mail address (foo@bar.com) so
-the key layout will have an '@' character in easy access, and
-<code>numberSigned</code> is a numeric field with a sign.  If only the class is
-specified, then you get the default/generic variant.</li>
-<li>Additional <em>flags</em> can be specified that supply further refinement. 
-These flags are specific to a class.  For example, some flags for the
-<code>text</code> class are <code>textCapSentences</code>,
-<code>textAutoCorrect</code>, and <code>textMultiline</code>.</li>
-</ul>
-
-<p>As an example, here is the new EditText for the IM application's message text view:</p>
-
-<pre>    &lt;EditText android:id="@+id/edtInput"
-        android:layout_width="0dip"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"
-        android:inputType="textShortMessage|textAutoCorrect|textCapSentences|textMultiLine"
-        android:imeOptions="actionSend|flagNoEnterAction"
-        android:maxLines="4"
-        android:maxLength="2000"
-        android:hint="@string/compose_hint"/&gt;</pre>
-
-<p>A full description of all of the input types can be found in the
-documentation. It is important to make use of the correct input types that are
-available, so that the soft keyboard can use the optimal keyboard layout for the
-text the user will be entering.</p>
-
-<h4>Enabling resize mode and other window features</h4>
-
-<p>The second most important thing for your app to do is to specify the overall
-behavior of your window in relation to the input method. The most visible aspect
-of this is controlling resize vs. pan and scan mode, but there are other things
-you can do as well to improve your user experience.</p>
-
-<p>You will usually control this behavior through the
-<code>android:windowSoftInputMode</code> attribute on each
-<code>&lt;activity&gt;</code> definition in your
-<code>AndroidManifest.xml</code>.  Like the input type, there are a couple
-different pieces of data that can be specified here by combining them
-together:</p>
-
-<ul>
-<li>The window adjustment mode is specified with either
-<code>adjustResize</code> or <code>adjustPan</code>.  It is highly recommended
-that you always specify one or the other.</li>
-<li>You can further control whether the IME will be shown automatically when
-your activity is displayed and other situations where the user moves to it. The
-system won't automatically show an IME by default, but in some cases it can be
-convenient for the user if an application enables this behavior. You can request
-this with <code>stateVisible</code>.  There are also a number of other state
-options for finer-grained control that you can find in the documentation.</li>
-</ul>
-
-<p>A typical example of this field can be see in the edit contact activity,
-which ensures it is resized and automatically displays the IME for the user:</p>
-
-<pre>    &lt;activity name="EditContactActivity"
-        android:windowSoftInputMode="stateVisible|adjustResize"&gt;
-        ...
-    &lt;/activity&gt;</pre>
-
-<p class="note"><strong>Note:</strong>Starting from Android 1.5 (API Level 3), 
-the platform offers a new method, 
-{@link android.view.Window#setSoftInputMode(int mode)},
-that non-Activity windows can use to control their behavior. Calling this method
-in your will make your application incompatible with previous versions of the
-Android platform.</p>
-
-<h4>Controlling the action buttons</h4>
-
-<p>The final customization we will look at is the "action" buttons in the IME.  
-There are currently two types of actions:</p>
-
-<ul>
-<li>The enter key on a soft keyboard is typically bound to an action when not
-operating on a mult-line edit text. For example, on the G1 pressing the hard
-enter key will typically move to the next field or the application will
-intercept it to execute an action; with a soft keyboard, this overloading of the
-enter key remains, since the enter button just sends an enter key event.</li>
-<li>When in fullscreen mode, an IME may also put an additional action button to
-the right of the text being edited, giving the user quick access to a common
-application operation.</li>
-</ul>
-
-<p>These options are controlled with the <code>android:imeOptions</code> 
-attribute on <code>TextView</code>. The value you supply here can be any 
-combination of:</p>
-
-<ul>
-<li>One of the pre-defined action constants (<code>actionGo</code>,
-<code>actionSearch</code>, <code>actionSend</code>, <code>actionNext</code>,
-<code>actionDone</code>).  If none of these are specified, the system will infer
-either <code>actionNext</code> or <code>actionDone</code> depending on whether
-there is a focusable field after this one; you can explicitly force no action
-with <code>actionNone</code>.</li>
-<li>The <code>flagNoEnterAction</code> option tells the IME that the action
-should <em>not</em> be available on the enter key, even if the text itself is
-not multi-line. This avoids having unrecoverable actions like (send) that can be
-accidentally touched by the user while typing.</li>
-<li>The <code>flagNoAccessoryAction</code> removes the action button from the
-text area, leaving more room for text.</li><li>The <code>flagNoExtractUi</code>
-completely removes the text area, allowing the application to be seen behind
-it.</li>
-</ul>
-
-<p>The previous IM application message view also provides an example of an
-interesting use of <code>imeOptions</code>, to specify the send action but not
-let it be shown on the enter key:</p>
-
-<pre>android:imeOptions="actionSend|flagNoEnterAction"</pre>
-
-<h3>APIs for controlling IMEs</h3>
-
-<p>For more advanced control over the IME, there are a variety of new APIs you
-can use. Unless special care is taken (such as by using reflection), using these
-APIs will cause your application to be incompatible with previous versions of
-Android, and you should make sure you specify
-<code>android:minSdkVersion="3"</code> in your manifest. For more information,
-see the documentation for the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a
-> manifest element.</p>
-
-<p>The primary API is the new <code>android.view.inputmethod.InputMethodManager</code> class, which you can retrieve with <code>Context.getSystemService()</code>.
-It allows you to interact with the global input method state, such as
-explicitly hiding or showing the current IME's input area.</p>
-
-<p>There are also new window flags controlling input method interaction, which you can control through the existing <code>Window.addFlags()</code> method and new <code>Window.setSoftInputMode()</code> method.  The <code>PopupWindow</code>
-class has grown corresponding methods to control these options on its
-window. One thing in particular to be aware of is the new <code>WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM</code> constant, which is used to control whether a window is on top of or behind the current IME.</p>
-
-<p>Most of the interaction between an active IME and application is done through the <code>android.view.inputmethod.InputConnection</code>
-class. This is the API an application implement, which an IME calls to
-perform the appropriate edit operations on the application. You won't
-normally need to worry about this, since <code>TextView</code> provides its own implementation for itself.</p>
-
-<p>There are also a handful of new <code>View</code> APIs, the most important of these being<code> onCreateInputConnection()</code> which creates a new <code>InputConnection</code> for an IME (and fills in an <code>android.view.inputmethod.EditorInfo</code>
-structure with your input type, IME options, and other data); again,
-most developers won't need to worry about this, since TextView takes
-care of it for you.</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/painless-threading.jd b/docs/html/resources/articles/painless-threading.jd
deleted file mode 100644
index fea7ee2..0000000
--- a/docs/html/resources/articles/painless-threading.jd
+++ /dev/null
@@ -1,149 +0,0 @@
-page.title=Painless Threading
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>This article discusses the threading model used by Android applications and how applications can ensure best UI performance by spawning worker threads to handle long-running operations, rather than handling them in the main thread. The article also explains the API that your application can use to interact with Android UI toolkit components running on the main thread and spawn managed worker threads.  </p>
-
-<h3>The UI thread</h3>
-
-<p>When an application is launched, the system creates a thread called
-"main" for the application. The main thread, also called the <em>UI
-thread</em>, is very important because it is in charge of dispatching the
-events to the appropriate widgets, including drawing events.
-It is also the thread where your application interacts with running 
-components of the Android UI toolkit. </p>
-
-<p>For instance, if you touch the a button on screen, the UI thread dispatches
-the touch event to the widget, which in turn sets its pressed state and
-posts an invalidate request to the event queue. The UI thread dequeues
-the request and notifies the widget to redraw itself.</p>
-
-<p>This single-thread model can yield poor performance unless your application 
-is implemented properly. Specifically, if everything is happening in a single 
-thread, performing long operations such as network access or database
-queries on the UI thread will block the whole user interface. No event
-can be dispatched, including drawing events, while the long operation
-is underway. From the user's perspective, the application appears hung.
-Even worse, if the UI thread is blocked for more than a few seconds
-(about 5 seconds currently) the user is presented with the infamous "<a href="http://developer.android.com/guide/practices/design/responsiveness.html">application not responding</a>" (ANR) dialog.</p>
-
-<p>If you want to see how bad this can look, write a simple application 
-with a button that invokes <code>Thread.sleep(2000)</code> in its 
-<a href="http://developer.android.com/reference/android/view/View.OnClickListener.html">OnClickListener</a>.
-The button will remain in its pressed state for about 2 seconds before
-going back to its normal state. When this happens, it is very easy for
-the user to <em>perceive</em> the application as slow.</p>
-
-<p>To summarize, it's vital to the responsiveness of your application's UI to
-keep the UI thread unblocked. If you have long operations to perform, you should
-make sure to do them in extra threads (<em>background</em> or <em>worker</em>
-threads). </p>
-
-<p>Here's an example of a click listener downloading an image over the 
-network and displaying it in an <a href="http://developer.android.com/reference/android/widget/ImageView.html">ImageView</a>:</p>
-
-<pre class="prettyprint">public void onClick(View v) {
-  new Thread(new Runnable() {
-    public void run() {
-      Bitmap b = loadImageFromNetwork();
-      mImageView.setImageBitmap(b);
-    }
-  }).start();
-}</pre>
-
-<p>At first, this code seems to be a good solution to your problem, as it does
-not block the UI thread. Unfortunately, it violates the single-threaded model
-for the UI: the Android UI toolkit is <em>not thread-safe</em> and must always
-be manipulated on the UI thread. In this piece of code above, the
-<code>ImageView</code> is manipulated on a worker thread, which can cause really
-weird problems. Tracking down and fixing such bugs can be difficult and
-time-consuming.</p>
-
-<p>Android offers several ways to access the UI
-thread from other threads. You may already be familiar with some of
-them but here is a comprehensive list:</p>
-
-<ul>
-<li>{@link android.app.Activity#runOnUiThread(java.lang.Runnable) Activity.runOnUiThread(Runnable)}</li>
-<li>{@link android.view.View#post(java.lang.Runnable) View.post(Runnable)}</li>
-<li>{@link android.view.View#postDelayed(java.lang.Runnable, long) View.postDelayed(Runnable, long)}</li>
-<li>{@link android.os.Handler}</li>
-</ul>
-
-<p>You can use any of these classes and methods to correct the previous code example:</p>
-
-<pre class="prettyprint">public void onClick(View v) {
-  new Thread(new Runnable() {
-    public void run() {
-      final Bitmap b = loadImageFromNetwork();
-      mImageView.post(new Runnable() {
-        public void run() {
-          mImageView.setImageBitmap(b);
-        }
-      });
-    }
-  }).start();
-}</pre>
-
-<p>Unfortunately,
-these classes and methods could also tend to make your code more complicated
-and more difficult to read. It becomes even worse when your implement
-complex operations that require frequent UI updates. </p>
-
-<p>To remedy this problem, Android 1.5 and later platforms offer a utility class
-called {@link android.os.AsyncTask}, that simplifies the creation of
-long-running tasks that need to communicate with the user interface.</p>
-
-<p>An <code>AsyncTask</code> equivalent is also available for applications that
-will run on Android 1.0 and 1.1. The name of the class is <a
-href="http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/
-curiouscreature/android/shelves/util/UserTask.java">UserTask</a>. It offers the
-exact same API and all you have to do is copy its source code in your
-application.</p>
-
-<p>The goal of <code>AsyncTask</code> is to take care of thread management for
-you. Our previous example can easily be rewritten with
-<code>AsyncTask</code>:</p>
-
-<pre class="prettyprint">public void onClick(View v) {
-  new DownloadImageTask().execute("http://example.com/image.png");
-}
-
-private class DownloadImageTask extends AsyncTask&lt;String, Void, Bitmap&gt; {
-     protected Bitmap doInBackground(String... urls) {
-         return loadImageFromNetwork(urls[0]);
-     }
-
-     protected void onPostExecute(Bitmap result) {
-         mImageView.setImageBitmap(result);
-     }
- }</pre>
-
-<p>As you can see, <code>AsyncTask</code> <em>must</em> be used by subclassing
-it. It is also very important to remember that an <code>AsyncTask</code>
-instance has to be created on the UI thread and can be executed only once. You
-can read the <a
-href="http://developer.android.com/reference/android/os/AsyncTask.html">
-AsyncTask documentation</a> for a full understanding on how to use this class,
-but here is a quick overview of how it works:</p>
-
-<ul>
-<li>You can specify the type, using generics, of the parameters, the progress values and the final value of the task</li>
-<li>The method <a href="http://developer.android.com/reference/android/os/AsyncTask.html#doInBackground%28Params...%29">doInBackground()</a> executes automatically on a worker thread</li>
-<li><a href="http://developer.android.com/reference/android/os/AsyncTask.html#onPreExecute%28%29">onPreExecute()</a>, <a href="http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute%28Result%29">onPostExecute()</a> and <a href="http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate%28Progress...%29">onProgressUpdate()</a> are all invoked on the UI thread</li>
-<li>The value returned by <a href="http://developer.android.com/reference/android/os/AsyncTask.html#doInBackground%28Params...%29">doInBackground()</a> is sent to <a href="http://developer.android.com/reference/android/os/AsyncTask.html#onPostExecute%28Result%29">onPostExecute()</a></li>
-<li>You can call <a href="http://developer.android.com/reference/android/os/AsyncTask.html#publishProgress%28Progress...%29">publishProgress()</a> at anytime in <a href="http://developer.android.com/reference/android/os/AsyncTask.html#doInBackground%28Params...%29">doInBackground()</a> to execute <a href="http://developer.android.com/reference/android/os/AsyncTask.html#onProgressUpdate%28Progress...%29">onProgressUpdate()</a> on the UI thread</li><li>You can cancel the task at any time, from any thread</li>
-</ul>
-
-<p>In addition to the official documentation, you can read several complex examples in the source code of Shelves (<a href="http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature/android/shelves/activity/ShelvesActivity.java">ShelvesActivity.java</a> and <a href="http://code.google.com/p/shelves/source/browse/trunk/Shelves/src/org/curiouscreature/android/shelves/activity/AddBookActivity.java">AddBookActivity.java</a>) and Photostream (<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/Photostream/src/com/google/android/photostream/LoginActivity.java">LoginActivity.java</a>, <a href="http://code.google.com/p/apps-for-android/source/browse/trunk/Photostream/src/com/google/android/photostream/PhotostreamActivity.java">PhotostreamActivity.java</a> and <a href="http://code.google.com/p/apps-for-android/source/browse/trunk/Photostream/src/com/google/android/photostream/ViewPhotoActivity.java">ViewPhotoActivity.java</a>). We highly recommend reading the source code of <a href="http://code.google.com/p/shelves/">Shelves</a> to see how to persist tasks across configuration changes and how to cancel them properly when the activity is destroyed.</p>
-
-<p>Regardless of whether or not you use <a href="http://developer.android.com/reference/android/os/AsyncTask.html">AsyncTask</a>,
-always remember these two rules about the single thread model: </p>
-
-<ol>
-<li>Do not block the UI thread, and 
-<li>Make sure that you access the Android UI toolkit <em>only</em> on the UI thread. 
-</ol>
-
-<p><code>AsyncTask</code> just makes it easier to do both of these things.</p>
diff --git a/docs/html/resources/articles/qsb.jd b/docs/html/resources/articles/qsb.jd
deleted file mode 100644
index 01fb115..0000000
--- a/docs/html/resources/articles/qsb.jd
+++ /dev/null
@@ -1,169 +0,0 @@
-page.title=Quick Search Box
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/search/index.html">Search</a></li>
-    <li><a href="{@docRoot}resources/samples/SearchableDictionary/index.html">Searchable Dictionary
-sample</a></li>
-  </ol>
-
-</div>
-</div>
-
-<div class="figure" style="width:233px">
-<img src="images/qsb_002.png" alt="" height="350" />
-</div>
-
-<p>Starting with Android 1.6, the platform includes support for Quick Search
-Box (QSB), a powerful, system-wide search framework. Quick Search Box makes it
-possible for users to quickly and easily find what they're looking for, both on
-their devices and on the web. It suggests content on your device as you type,
-like apps, contacts, browser history, and music. It also offers results from the
-web search suggestions, local business listings, and other info from
-Google, such as stock quotes, weather, and flight status. All of this is
-available right from the home screen, by tapping on Quick Search Box.</p>
-
-<p>What
-we're most excited about with this new feature is the ability for you,
-the developers, to leverage the QSB framework to provide quicker and
-easier access to the content inside your apps. Your apps can provide
-search suggestions that will surface to users in QSB alongside other
-search results and suggestions. This makes it possible for users to
-access your application's content from outside your application—for
-example, from the home screen.</p>
-
-<p class="note"><strong>Note:</strong> The code fragments in this document are
-related to a sample app called <a
-href="{@docRoot}resources/samples/SearchableDictionary/index.html"
-title="Searchable Dictionary">Searchable Dictionary</a>. The app is
-available for Android 1.6 and later platforms.</p>
-
-<h3>The story before now: searching within your app</h3>
-
-<p>Platform releases versions previous to Android 1.6 already provided a mechanism
-that let you expose search and search suggestions in your app, as described in
-the docs for {@link android.app.SearchManager}. That mechanism has not changed
-and requires the following two things in your
-<code>AndroidManifest.xml</code>:</p>
-
-<p>1) In your <code>&lt;activity&gt;</code>, an intent filter, and a reference 
-to a <code>searchable.xml</code> file (described below):</p>
-
-<pre class="prettyprint">&lt;intent-filter&gt;
-    &lt;action android:name="android.intent.action.SEARCH" /&gt;
-    &lt;category android:name="android.intent.category.DEFAULT" /&gt;
-&lt;/intent-filter&gt;
-            
-&lt;meta-data android:name="android.app.searchable"
-       android:resource="@xml/searchable" /&gt;</pre>
-
-<p>2) A content provider that can provide search suggestions according to the
-URIs and column formats specified by the 
-<a href="{@docRoot}reference/android/app/SearchManager.html#Suggestions">Search Suggestions</a>
-section of the SearchManager docs:</p>
-
-<pre class="prettyprint">&lt;!-- Provides search suggestions for words and their definitions. --&gt;
-&lt;provider android:name="DictionaryProvider"
-       android:authorities="dictionary"
-       android:syncable="false" /&gt;</pre>
-
-<p>In the <code>searchable.xml</code> file, you specify a few things about how
-you want the search system to present search for your app, including the
-authority of the content provider that provides suggestions for the user as they
-type. Here's an example of the <code>searchable.xml</code> of an Android app
-that provides search suggestions within its own activities:</p>
-
-<pre class="prettyprint">&lt;searchable xmlns:android="http://schemas.android.com/apk/res/android"
-        android:label="@string/search_label"
-        android:searchSuggestAuthority="dictionary"
-        android:searchSuggestIntentAction="android.intent.action.VIEW"&gt;
-&lt;/searchable&gt;</pre>
-
-<p>Note that the <code>android:searchSuggestAuthority</code> attribute refers to
-the authority of the content provider we declared in
-<code>AndroidManifest.xml</code>.</p>
-
-<p>For more details on this, see the 
-<a href="{@docRoot}reference/android/app/SearchManager.html#SearchabilityMetadata">Searchability Metadata 
-section</a> of the of the SearchManager docs.</p>
-
-<h3>Including your app in Quick Search Box</h3>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-<h2>Searchable Dictionary Sample App</h2>
-<p>Quick Search Box provides a really cool way to make it easier and faster for
-users to access your app's content. To help you get your app started with it,
-we've created a sample app that simply provides access to a small dictionary of
-words in QSB. The app is called Searchable Dictionary, and we encourage you to
-<a href="{@docRoot}resources/samples/SearchableDictionary/index.html">check it
-out</a>.</p>
-</div>
-</div>
-
-<p>In Android 1.6, we added a new attribute to the metadata for searchables:
-<code>android:includeInGlobalSearch</code>. By specifying this as
-<code>"true"</code> in your <code>searchable.xml</code>, you allow QSB to pick
-up your search suggestion content provider and include its suggestions along
-with the rest (if the user enables your suggestions from the system search
-settings).</p>
-
-<p>You should also specify a string value for 
-<code>android:searchSettingsDescription</code>, which describes to users what
-sorts of suggestions your app provides in the system settings for search.</p>
-
-<pre class="prettyprint">&lt;searchable xmlns:android="http://schemas.android.com/apk/res/android"
-       android:label="@string/search_label"
-       <span style="background: rgb(255, 255, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">android:searchSettingsDescription="@string/settings_description"</span>
-       <span style="background: rgb(255, 255, 0) none repeat scroll 0% 0%; -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;">android:includeInGlobalSearch="true"</span>
-       android:searchSuggestAuthority="dictionary"
-       android:searchSuggestIntentAction="android.intent.action.VIEW"&gt;
-&lt;/searchable&gt;</pre>
-
-<p>These new attributes are supported only in Android 1.6 and later.</p>
-
-<h3>What to expect</h3>
-
-<p>The
-first and most important thing to note is that when a user installs an
-app with a suggestion provider that participates in QSB, this new app
-will <em>not</em> be enabled for QSB by default. The user can choose
-to enable particular suggestion sources from the system settings for
-search (by going to "Search" &gt; "Searchable items" in settings).</p>
-
-<p>You
-should consider how to handle this in your app. Perhaps show a notice
-that instructs the user to visit system settings and enable your app's
-suggestions.</p>
-
-<p>Once the user enables your searchable item, the
-app's suggestions will have a chance to show up in QSB, most likely
-under the "more results" section to begin with. As your app's
-suggestions are chosen more frequently, they can move up in the list.</p>
-
-<img src="images/qsb.png" style="width: 233px; height: 349.5px;">  
-<img id="k0vw" src="images/qsb_003.png" style="width: 233px; height: 349.5px;">
-
-<h3>Shortcuts</h3>
-
-<p>One
-of our objectives with QSB is to make it faster for users to access the
-things they access most often. One way we've done this is by
-'shortcutting' some of the previously chosen search suggestions, so
-they will be shown immediately as the user starts typing, instead of
-waiting to query the content providers. Suggestions from your app may
-be chosen as shortcuts when the user clicks on them.</p>
-
-<p>For dynamic suggestions that may wish to change their content (or become invalid)
-in the future, you can provide a 'shortcut id'. This tells QSB to query
-your suggestion provider for up-to-date content for a suggestion after
-it has been displayed. For more details on how to manage shortcuts, see
-the Shortcuts section 
-<a href="{@docRoot}reference/android/app/SearchManager.html#ExposingSearchSuggestionsToQuickSearchBox">within the SearchManager docs</a>.</p>
diff --git a/docs/html/resources/articles/service-api-changes-starting-with.jd b/docs/html/resources/articles/service-api-changes-starting-with.jd
deleted file mode 100644
index 7bafd81..0000000
--- a/docs/html/resources/articles/service-api-changes-starting-with.jd
+++ /dev/null
@@ -1,177 +0,0 @@
-page.title=Service API changes starting with Android 2.0
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></li>
-  </ol>
-
-  <h2>Key classes</h2>
-  <ol>
-    <li>{@link android.app.Service}</li>
-  </ol>
-
-</div>
-</div>
-
-<p>Watching developers use the Android platform the last year has shown a number of trouble areas in the Service API as well as growing issues in the ways services operate. As a result, Android 2.0 introduced a number of changes and improvements in this area for both developers and users.</p>
-<p>The three main changes to be aware of are:</p>
-<ul>
-  <li>Service.setForeground() is now deprecated and in 2.0 does nothing.</li>
-  <li>There were many edge cases in the service lifecycle that made it very easy to accidentally leave a service running; new APIs in 2.0 make this much easier to deal with.</li>
-  <li>Android 2.0 also introduces a new UI for end users to monitor and manage the running services on their device.</li>
-</ul>
-<h3>Background on services</h3>
-<p>Before going into the details of 2.0, it may be useful to go over a quick summary of services. The Service API in Android is one of the key mechanisms for applications to do work in the background. Due to the way Android is designed, once an application is no longer visible to the user it is generally considered expendable and a candidate to be killed by the system if it ever needs memory elsewhere. The main way applications get around this is by starting a Service component, which explicitly tells the system that they are doing some valuable work and would prefer that the system not kill their process if it doesn't truly need to.</p>
-<p>This is a very powerful facility but along with that power comes some responsibility: an actively running service is taking resources away from other things that can run (including inactive processes in the background that don't need to be initialized the next time the user visits them). It is thus important that developers take care when designing their services that they only run when truly needed and avoid any bugs where they may accidentally leave the service running for long durations.</p>
-<h3>Redesigning Service.setForeground()</h3>
-<p>During the final stabilization period of Android 1.6 we started to see more issues due to an increasing number of applications using the Service.setForeground() API when they shouldn't be. This is an API that we haven't advertised much because it should not be used by most applications and can be very hard on the system: it asks that the service's process be treated as in the foreground, essentially making it unkillable and thus more difficult for the system to recover from low memory situations.</p>
-<p>At that point in 1.6 it was too late to make any significant changes to the behavior here, but in 2.0 we have done so: Service.setForeground() now does nothing. The API was always intended to be something a service would do in conjunction with putting up an ongoing notification for the user; by saying you are in the foreground, the user should be "aware" that the service is running in some way and know how to stop it. Thus in place of the old API Andriod 2.0 introduces two new APIs that require a notification go along with being in the foreground:</p>
-<pre class="prettyprint">
-public final void startForeground(int id, Notification notification);
-public final void stopForeground(boolean removeNotification);
-</pre>
-<p>This also not coincidentally makes it much easier to manage the notification state along with the service, since the system can now guarantee that there is always a notification while the service is in the foreground, and that the notification goes away whenever the service does.</p>
-<p>Many developers will want to write a service that works on older platforms as well as 2.0 and later; this can be accomplished by using something like the following code to selectively call the new APIs when they are available.</p>
-<pre class="prettyprint">
-private static final Class[] mStartForegroundSignature = new Class[] {
-    int.class, Notification.class};
-private static final Class[] mStopForegroundSignature = new Class[] {
-    boolean.class};
-
-private NotificationManager mNM;
-private Method mStartForeground;
-private Method mStopForeground;
-private Object[] mStartForegroundArgs = new Object[2];
-private Object[] mStopForegroundArgs = new Object[1];
-
-&#64;Override
-public void onCreate() {
-    mNM = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
-    try {
-        mStartForeground = getClass().getMethod("startForeground",
-                mStartForegroundSignature);
-        mStopForeground = getClass().getMethod("stopForeground",
-                mStopForegroundSignature);
-    } catch (NoSuchMethodException e) {
-        // Running on an older platform.
-        mStartForeground = mStopForeground = null;
-    }
-}
-
-/**
- * This is a wrapper around the new startForeground method, using the older
- * APIs if it is not available.
- */
-void startForegroundCompat(int id, Notification notification) {
-    // If we have the new startForeground API, then use it.
-    if (mStartForeground != null) {
-        mStartForegroundArgs[0] = Integer.valueOf(id);
-        mStartForegroundArgs[1] = notification;
-        try {
-            mStartForeground.invoke(this, mStartForegroundArgs);
-        } catch (InvocationTargetException e) {
-            // Should not happen.
-            Log.w("MyApp", "Unable to invoke startForeground", e);
-        } catch (IllegalAccessException e) {
-            // Should not happen.
-            Log.w("MyApp", "Unable to invoke startForeground", e);
-        }
-        return;
-    }
-    
-    // Fall back on the old API.
-    setForeground(true);
-    mNM.notify(id, notification);
-}
-
-/**
- * This is a wrapper around the new stopForeground method, using the older
- * APIs if it is not available.
- */
-void stopForegroundCompat(int id) {
-    // If we have the new stopForeground API, then use it.
-    if (mStopForeground != null) {
-        mStopForegroundArgs[0] = Boolean.TRUE;
-        try {
-            mStopForeground.invoke(this, mStopForegroundArgs);
-        } catch (InvocationTargetException e) {
-            // Should not happen.
-            Log.w("MyApp", "Unable to invoke stopForeground", e);
-        } catch (IllegalAccessException e) {
-            // Should not happen.
-            Log.w("MyApp", "Unable to invoke stopForeground", e);
-        }
-        return;
-    }
-    
-    // Fall back on the old API.  Note to cancel BEFORE changing the
-    // foreground state, since we could be killed at that point.
-    mNM.cancel(id);
-    setForeground(false);
-}
-</pre>
-<h3>Service lifecycle changes</h3>
-<p>Another situation we were increasingly seeing in 1.6 was that, even ignoring the services that inappropriately make themselves foreground, we had a growing number of devices with a large number of services running in the background all fighting each other over the available memory.</p>
-<p>Part of this problem is services that are running more than they should or there simply being too much stuff trying to be done on the device. However, we also found many issues in the interaction between services and the platform that made it easy for an application to leave a service running even when it is trying to do the right thing. Consider this typical scenario:</p>
-<ol>
-  <li>An application calls startService().</li>
-  <li>That service gets onCreate(), onStart(), and then spawns a background thread to do some work.</li>
-  <li>The system is tight on memory, so has to kill the currently running service.</li>
-  <li>Later when memory is free, the service is restarted, and gets onCreate() called but not onStart() because there has not been another call to startService() with a new Intent command to send it.</li>
-</ol>
-<p>Now the service will sit there created, not realizing it used to be doing some work, and so not knowing it should stop itself at some point.</p>
-<p>To address this, in Android 2.0 Service.onStart() as been deprecated (though still exists and operates as it used to in previous versions of the platform). It is replaced with a new {@link android.app.Service#onStartCommand(android.content.Intent, int, int)} callback that allows the service to better control how the system should manage it. The key part here is a new result code returned by the function, telling the system what it should do with the service if its process is killed while it is running:</p>
-<ul>
-  <li>{@link android.app.Service#START_STICKY} is basically the same as the previous behavior, where the service is left "started" and will later be restarted by the system. The only difference from previous versions of the platform is that it if it gets restarted because its process is killed, onStartCommand() will be called on the next instance of the service with a null Intent instead of not being called at all. Services that use this mode should always check for this case and deal with it appropriately.</li>
-  <li>{@link android.app.Service#START_NOT_STICKY} says that, after returning from onStartCreated(), if the process is killed with no remaining start commands to deliver, then the service will be stopped instead of restarted. This makes a lot more sense for services that are intended to only run while executing commands sent to them. For example, a service may be started every 15 minutes from an alarm to poll some network state. If it gets killed while doing that work, it would be best to just let it be stopped and get started the next time the alarm fires.</li>
-  <li>{@link android.app.Service#START_REDELIVER_INTENT} is like START_NOT_STICKY, except if the service's process is killed before it calls stopSelf() for a given intent, that intent will be re-delivered to it until it completes (unless after some number of more tries it still can't complete, at which point the system gives up). This is useful for services that are receiving commands of work to do, and want to make sure they do eventually complete the work for each command sent.</li>
-</ul>
-<p>For compatibility with existing applications, the default return code for applications that are targeting an earlier version of the platform is a special {@link android.app.Service#START_STICKY_COMPATIBILITY} code that provides the old behavior of not calling onStart() with a null intent. Once you start targeting API version 5 or later, the default mode is START_STICKY and you must be prepared to deal with onStart() or onStartCommand() being called with a null Intent.</p>
-<p>You can also easily write a Service that uses both the old and new APIs, depending on the platform. All you need to do is compile against the 2.0 SDK with this code:</p>
-<pre class="prettyprint">
-// This is the old onStart method that will be called on the pre-2.0
-// platform.  On 2.0 or later we override onStartCommand() so this
-// method will not be called.
-&#64;Override
-public void onStart(Intent intent, int startId) {
-    handleStart(intent, startId);
-}
-
-&#64;Override
-public int onStartCommand(Intent intent, int flags, int startId) {
-    handleStart(intent, startId);
-    return START_NOT_STICKY;
-}
-
-void handleStart(Intent intent, int startId) {
-    // do work
-}
-</pre>
-<h3>New "running services" user interface</h3>
-<p>Our final issue to address is the case where there are simply too many service running in the amount of memory available on a device. This may be due to bugs or design flaws in installed applications, or the user simply trying to do too much. Historically users have had no visibility into what is going on at this level in the system, but it has become important to expose this, at least for lower-end devices, as the use of services has had an increasing impact on the user experience.</p>
-<p>To help address this, Android 2.0 introduces a new "Running Services" activity available from the Application system settings. When brought up, it looks something like this:</p>
-<img src="images/service-api-changes-starting-with_runningservices.png" width="192" height="320" alt="Running Services"/>
-<p>The main content is a list of all running services that may be of interest to the user, organized by the processes they run in. In the example here, we see three services:</p>
-<ul>
-  <li><b>GTalkService</b> is part of the standard Google application suit; it is running in Google's "gapps" process, which currently consumes 6.8MB. It has been started for 3 hours 55 minutes, which on this device is the time from when it was first booted.</li>
-  <li><b>ActivityService</b> is part of the Phonebook app, and its process consumes 4MB. This also has been running since boot.</li>
-  <li><b>SoftKeyboard</b> is a third party input method. It has been running since I switched to it, about 4 minutes ago.</li>
-</ul>
-<p>The user can tap on any of these services to control it; for normal services that are running because they were explicitly started, this will present a dialog allowing the user to explicitly stop it:</p>
-<img src="images/service-api-changes-starting-with_stopservice.png" height="320" width="192" alt="Stop Service"/>
-<p>Some other services, like the input method, are running for other reasons. For these, tapping on the service will go to the corresponding UI to manage it (in this case the system's input settings).</p>
-<p>Finally, along the bottom of the screen are some obscure numbers. If you know how to interpret them, this gives you a lot of information on the memory status of your device:</p>
-<ul>
-  <li><b>Avail: 38MB+114MB in 25</b> says that the device has 38MB of completely free (or likely used for unrequired caches) memory, and has another 114MB of available memory in 25 background processes it can kill at any time.</li>
-  <li><b>Other: 32MB in 3</b> says that the device has 32MB of unavailable memory in 3 unkillable processes (that is, processes that are currently considered to be foreground and must be kept running)</li>
-</ul>
-<p>For most users, this new user interface should be a much more effective way to manage the background applications on their device than the existing "task killer" applications. In the vast majority of cases the reason for a slow running device is too many services trying to run. This prevents the system from being able to run any background processes (which speed up app switching), and ultimately can result in thrashing through the services when not even they can all be kept running. The Running Services UI is intended to provide very specific information about the services that are running, to help make a good decision about what should be stopped. It also does not use the API to force stop an application, which can unintentionally break applications in numerous ways.</p>
-<p>For developers, this is an important tool to ensure your services are well behaved. As you develop your app, be sure to keep an eye on Running Services to ensure that you are not accidentally leaving your services running when they shouldn't be. You should also now keep in mind that users may freely stop any of your services as they wish, without your control, and account for that.</p>
-<p>Android's Services are a very powerful tool, but one of the main and subtle ways that application developers can harm the overall experience a user has with their phone.</p>
diff --git a/docs/html/resources/articles/speech-input.jd b/docs/html/resources/articles/speech-input.jd
deleted file mode 100644
index 2f9cd69..0000000
--- a/docs/html/resources/articles/speech-input.jd
+++ /dev/null
@@ -1,94 +0,0 @@
-page.title=Speech Input
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p> People love their mobile phones because they can stay in touch wherever they
-are.  That means not just talking, but e-mailing, texting, microblogging, and so
-on. </p>
-
-<p>Speech input adds another dimension to staying in touch.
-Google's Voice Search application, which is pre-installed on many Android devices
-and available on Google Play, provides powerful features like "search by voice"
-and Voice Actions like "Navigate to." Further
-enhancing the voice experience, Android 2.1 introduces a <a
-href="http://www.youtube.com/watch?v=laOlkD8LmZw">
-voice-enabled keyboard</a>, which makes it even easier
-to stay connected. Now you can dictate your message instead of typing it. Just
-tap the new microphone button on the keyboard, and you can speak in just about
-any context in which you would normally type. </p> 
-
-<p> We believe speech can
-fundamentally change the mobile experience. We would like to invite every
-Android application developer to consider integrating speech input capabilities
-via the Android SDK.  One of our favorite apps on Google Play that integrates
-speech input is <a href="http://www.handcent.com/">Handcent SMS</a>, 
-because you can dictate a reply to any SMS with a
-quick tap on the SMS popup window. Here is Speech input integrated into
-Handcent SMS:</p>
-
-<img src="images/speech-input.png"/>
-
-
-<p> The Android SDK makes it easy to integrate speech input directly into your
-own application. Just copy and paste from this <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/VoiceRecognition.html">sample
-application</a> to get
-started. The sample application first verifies that the target device is able
-to recognize speech input:</p> 
-<pre>
-// Check to see if a recognition activity is present
-PackageManager pm = getPackageManager();
-List<ResolveInfo> activities = pm.queryIntentActivities(
-  new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
-if (activities.size() != 0) {
-  speakButton.setOnClickListener(this);
-} else {
-  speakButton.setEnabled(false);
-  speakButton.setText("Recognizer not present");
-}
-</pre>
-<p>
-The sample application then uses {@link
-android.app.Activity#startActivityForResult(android.content.Intent, int)
-startActivityForResult()} to broadcast an intent that requests voice
-recognition, including an extra parameter that specifies one of two language
-models. The voice recognition application that handles the intent processes the
-voice input, then passes the recognized string back to your application by
-calling the {@link android.app.Activity#onActivityResult(int, int,
-android.content.Intent) onActivityResult()} callback. </p>
-
-
-<p>Android is an open platform, so your application can potentially make
-use of any speech recognition service on the device that's registered to receive
-a {@link android.speech.RecognizerIntent}. Google's Voice Search application,
-which is pre-installed on
-many Android devices, responds to a <em>RecognizerIntent</em> by displaying the
-"Speak
-now" dialog and streaming audio to Google's servers -- the same servers used
-when a user taps the microphone button on the search widget or the voice-enabled
-keyboard. You can check whether Voice Search is installed in 
-<strong>Settings > Applications > Manage applications</strong>. </p>
-
-<p> One important tip: for speech input to be as accurate as possible, it's
-helpful to have an idea of what words are likely to be spoken.  While a message
-like "Mom, I'm writing you this message with my voice!" might be appropriate for
-an email or SMS message, you're probably more likely to say something like
-"weather in Mountain View" if you're using Google Search. You can make sure your
-users have the best experience possible by requesting the appropriate
-<em>language model:</em> {@link
-android.speech.RecognizerIntent#LANGUAGE_MODEL_FREE_FORM free_form} for
-dictation, or {@link android.speech.RecognizerIntent#LANGUAGE_MODEL_WEB_SEARCH
-web_search} for shorter, search-like phrases.  We developed the "free form"
-model to improve dictation accuracy for the voice keyboard,
-while the "web search" model is used when users want to search by voice. </p> 
-
-<p> Google's servers support many languages for voice input, with more arriving
-regularly. You can use the
-{@link android.speech.RecognizerIntent#ACTION_GET_LANGUAGE_DETAILS}
-broadcast intent to query for the list of supported languages.
-The web search model is available for all languages, while the free-form model
-may not be optimized for all languages. As we work hard to support more models in
-more languages, and to improve the accuracy of the speech recognition technology
-we use in our products, Android developers who integrate speech capabilities
-directly into their applications can reap the benefits as well. </p>
diff --git a/docs/html/resources/articles/spell-checker-framework.jd b/docs/html/resources/articles/spell-checker-framework.jd
deleted file mode 100644
index 8d57b4e..0000000
--- a/docs/html/resources/articles/spell-checker-framework.jd
+++ /dev/null
@@ -1,236 +0,0 @@
-page.title=Using the Spell Checker Framework
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-<div id="qv-wrapper">
-<div id="qv">
-<h2>In This Document</h2>
-<ol>
-    <li>
-        <a href="#SpellCheckLifeCycle">Spell Check Lifecycle</a> 
-    </li>
-    <li>
-        <a href="#SpellCheckImplementation">Implementing a Spell Checker Service</a>
-    </li>
-    <li>
-        <a href="#SpellCheckClient">Implementing a Spell Checker Client</a>
-    </li>
-</ol>
-  <h2>See also</h2>
-  <ol>
-    <li>
-        <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
-        Spell Checker Service</a> sample app
-    </li>
-    <li>
-        <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
-        Spell Checker Client</a> sample app
-    </li>
-  </ol>
-</div>
-</div>
-
-<p>
-    The Android platform offers a spell checker framework that lets you implement   
-    and access spell checking in your application. The framework is one of the 
-    Text Service APIs offered by the Android platform.
-</p>
-<p>
-    To use the framework in your app, you create a special type of Android service that 
-    generates a spell checker <strong>session</strong> object. Based on text you provide,
-    the session object returns spelling suggestions generated by the spell checker.
-</p>
-<h2 id="SpellCheckLifeCycle">Spell Checker Lifecycle</h2>
-<p>
-    The following diagram shows the lifecycle of the spell checker service:
-</p>
-<img src="{@docRoot}resources/articles/images/spellcheck_lifecycle.png" alt="" height="596"
-    id="figure1" />
-<p class="img-caption">
-  <strong>Figure 1.</strong> The spell checker service lifecycle.
-</p>
-<p>
-    To initiate spell checking, your app starts its implementation of the spell checker
-    service. Clients in your app, such as activities or individual UI elements, request a
-    spell checker session from the service, then use the session to get suggestions for text.
-    As a client terminates its operation, it closes its spell checker session. If necessary, your
-    app can shut down the spell checker service at any time.
-</p>
-<h2 id="SpellCheckImplementation">Implementing a Spell Checker Service</h2>
-<p>
-    To use the spell checker framework in your app, add a spell checker service component including
-    the session object definition. You can also add to your app an optional activity that
-    controls settings. You must also add an XML metadata file that describes
-    the spell checker service, and add the appropriate elements to your manifest file.
-</p>
-<h3 id="SpellCheckCode">Spell checker classes</h3>
-<p>
-    Define the service and session object with the following classes:
-</p>
-<dl>
-    <dt>
-        A subclass of {@link android.service.textservice.SpellCheckerService}
-    </dt>
-    <dd>
-        The {@link android.service.textservice.SpellCheckerService} implements both the
-        {@link android.app.Service} class and the spell checker framework interface. Within your
-        subclass, you must implement the following method:
-        <dl>
-            <dt>{@link android.service.textservice.SpellCheckerService#createSession()}</dt>
-            <dd>
-                A factory method that returns a
-                {@link android.service.textservice.SpellCheckerService.Session} object to a
-                client that wants to do spell checking.
-            </dd>
-        </dl>
-        <p>
-            See the
-            <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
-            Spell Checker Service</a> sample app to learn more about implementing this class.
-        </p>
-    </dd>
-    <dt>
-        An implementation of {@link android.service.textservice.SpellCheckerService.Session}
-    </dt>
-    <dd>
-        An object that the spell checker service provides to clients, to let them pass text to
-        the spell checker and receive suggestions. Within this class, you must implement the
-        following methods:
-        <dl>
-            <dt>
-                {@link android.service.textservice.SpellCheckerService.Session#onCreate()}
-            </dt>
-            <dd>
-                Called by the system in response to
-                {@link android.service.textservice.SpellCheckerService#createSession()}. In this
-                method, you can initialize the
-                {@link android.service.textservice.SpellCheckerService.Session} object based on
-                the current locale and so forth.
-            </dd>
-            <dt>
-     {@link android.service.textservice.SpellCheckerService.Session#onGetSuggestions(TextInfo, int)
-     onGetSuggestions()}
-            </dt>
-            <dd>
-                Does the actual spell checking. This method returns an object containing
-                suggestions for the text passed to it.
-            </dd>
-        </dl>
-        <p>
-            Optionally, you can implement
-            {@link android.service.textservice.SpellCheckerService.Session#onCancel()}, which
-            handles requests to cancel spell checking, or
-{@link android.service.textservice.SpellCheckerService.Session#onGetSuggestionsMultiple(TextInfo[], int, boolean)
-onGetSuggestionsMultiple()}, which handles batches of suggestion requests, or both.
-        </p>
-        <p>
-            See the
-            <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
-            Spell Checker Client</a> sample app to learn more about implementing this class.
-        </p>
-    </dd>
-</dl>
-<p class="note">
-    <strong>Note:</strong> You must implement all aspects of spell checking as asynchronous and
-    thread-safe. A spell checker may be called simultaneously by different threads running on
-    different cores. The {@link android.service.textservice.SpellCheckerService} and
-    {@link android.service.textservice.SpellCheckerService.Session} take care of this
-    automatically.
-</p>
-<h3 id="SpellCheckXML">Spell checker manifest and metadata</h3>
-<p>
-    In addition to code, you need to provide the appropriate manifest file and a metadata file for
-    the spell checker.
-</p>
-<p>
-    The manifest file defines the application, the service, and the activity for controlling
-    settings, as shown in the following snippet:
-</p>
-<pre>
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.samplespellcheckerservice" &gt;
-    &lt;application
-        android:label="&#64;string/app_name" &gt;
-        &lt;service
-            android:label="&#64;string/app_name"
-            android:name=".SampleSpellCheckerService"
-            android:permission="android.permission.BIND_TEXT_SERVICE" &gt;
-            &lt;intent-filter &gt;
-                &lt;action android:name="android.service.textservice.SpellCheckerService" /&gt;
-            &lt;/intent-filter&gt;
-
-            &lt;meta-data
-                android:name="android.view.textservice.scs"
-                android:resource="&#64;xml/spellchecker" /&gt;
-        &lt;/service&gt;
-
-        &lt;activity
-            android:label="&#64;string/sample_settings"
-            android:name="SpellCheckerSettingsActivity" &gt;
-            &lt;intent-filter &gt;
-                &lt;action android:name="android.intent.action.MAIN" /&gt;
-            &lt;/intent-filter&gt;
-        &lt;/activity&gt;
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-<p>
-    Notice that components that want to use the service must request the permission
-    {@link android.Manifest.permission#BIND_TEXT_SERVICE} to ensure that only the system binds to
-    the service. The service's definition also specifies the <code>spellchecker.xml</code> metadata
-    file, which is described in the next section.
-</p>
-<p>
-    The metadata file <code>spellchecker.xml</code> contains the following XML:
-</p>
-<pre>
-&lt;spell-checker xmlns:android="http://schemas.android.com/apk/res/android"
-        android:label="&#64;string/spellchecker_name"
-        android:settingsActivity="com.example.SpellCheckerSettingsActivity"&gt;
-    &lt;subtype
-            android:label="&#64;string/subtype_generic"
-            android:subtypeLocale="en”
-    /&gt;
-    &lt;subtype
-            android:label="&#64;string/subtype_generic"
-            android:subtypeLocale="fr”
-    /&gt;
-&lt;/spell-checker&gt;
-</pre>
-<p>
-    The metadata specifies the activity that the spell checker uses for controlling settings. It
-    also defines subtypes for the spell checker; in this case, the subtypes define locales that
-    the spell checker can handle.
-</p>
-
-
-<!--  Accessing the Spell Checker Service from a Client -->
-<h2 id="SpellCheckClient">Accessing the Spell Checker Service from a Client</h2>
-<p>
-    Applications that use {@link android.widget.TextView} views automatically benefit from spell
-    checking,  because {@link android.widget.TextView} automatically uses a spell checker. The
-    following screenshots show this:
-</p>
-<img src="{@docRoot}resources/articles/images/textview_spellcheck_screenshot_1.png" alt=""
-    height="45" id="figure2a" />
-<br>
-<img src="{@docRoot}resources/articles/images/textview_spellcheck_screenshot_2.png" alt=""
-    height="121" id="figure2b" />
-<p class="img-caption">
-  <strong>Figure 2.</strong> Spell checking in TextView.
-</p>
-<p>
-    However, you may want to interact directly with a spell checker service in other cases as well.
-    The following diagram shows the flow of control for interacting with a spell checker service:
-</p>
-<img src="{@docRoot}resources/articles/images/spellcheck_client_flow.png" alt=""
-    height="394" id="figure3" />
-<p class="img-caption">
-  <strong>Figure 3.</strong> Interacting with a spell checker service.
-</p>
-<p>
-    The <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
-    Spell Checker Client</a> sample app shows how to interact with a spell checker service. The
-    LatinIME input method editor in the Android Open Source Project also contains an example of
-    spell checking.
-</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/timed-ui-updates.jd b/docs/html/resources/articles/timed-ui-updates.jd
deleted file mode 100644
index 7a0804f..0000000
--- a/docs/html/resources/articles/timed-ui-updates.jd
+++ /dev/null
@@ -1,151 +0,0 @@
-page.title=Updating the UI from a Timer
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<img style="margin: 1.5em; float: right;" src="images/JFlubber.png" alt="" id="BLOGGER_PHOTO_ID_5135098660116808706" border="0">
-
-<p><strong>Background</strong>: While developing my first useful
-(though small) application for Android, which was a port of an existing
-utility I use when podcasting, I needed a way of updating a clock
-displayed on the UI at regular intervals, but in a lightweight and CPU
-efficient way.</p>
-
-<p><strong>Problem</strong>: In the original application I used
-java.util.Timer to update the clock, but that class is not such a good
-choice on Android. Using a Timer introduces a new thread into the
-application for a relatively minor reason. Thinking in terms of mobile
-applications often means re-considering choices that you might make
-differently for a desktop application with relatively richer resources
-at its disposal. We would like to find a more efficient way of updating
-that clock.</p>
-
-<p><strong>The Application</strong>: The original application is a
-Java Swing and SE application. It is like a stopwatch with a lap timer
-that we use when recording podcasts; when you start the recording, you
-start the stopwatch. Then for every mistake that someone makes, you hit
-the flub button. At the end you can save out the bookmarked mistakes
-which can be loaded into the wonderful 
-<a href="http://audacity.sourceforge.net/" title="Audacity">Audacity</a> 
-audio editor as a labels track. You can then see where all of the mistakes 
-are in the recording and edit them out.</p>
-
-<p>The article describing it is: <a href="http://www.developer.com/java/ent/print.php/3589961" title="http://www.developer.com/java/ent/print.php/3589961">http://www.developer.com/java/ent/print.php/3589961</a></p>
-
-<p>In the original version, the timer code looked like this:</p>
-
-<pre>class UpdateTimeTask extends TimerTask {
-   public void run() {
-       long millis = System.currentTimeMillis() - startTime;
-       int seconds = (int) (millis / 1000);
-       int minutes = seconds / 60;
-       seconds     = seconds % 60;
-
-       timeLabel.setText(String.format("%d:%02d", minutes, seconds));
-   }
-}</pre><p>And in the event listener to start this update, the following Timer() instance is used:
-</p><pre>if(startTime == 0L) {
-   startTime = evt.getWhen();
-   timer = new Timer();
-   timer.schedule(new UpdateTimeTask(), 100, 200);
-}</pre>
-
-<p>In particular, note the 100, 200 parameters. The first parameter
-means wait 100 ms before running the clock update task the first time.
-The second means repeat every 200ms after that, until stopped. 200 ms
-should not be too noticeable if the second resolution happens to fall
-close to or on the update. If the resolution was a second, you could
-find the clock sometimes not updating for close to 2 seconds, or
-possibly skipping a second in the counting, it would look odd).</p>
-
-<p>When I ported the application to use the Android SDKs, this code
-actually compiled in Eclipse, but failed with a runtime error because
-the Timer() class was not available at runtime (fortunately, this was
-easy to figure out from the error messages). On a related note, the
-String.format method was also not available, so the eventual solution
-uses a quick hack to format the seconds nicely as you will see.</p>
-
-<p>Fortunately, the role of Timer can be replaced by the
-android.os.Handler class, with a few tweaks. To set it up from an event
-listener:</p>
-
-<pre>private Handler mHandler = new Handler();
-
-...
-
-OnClickListener mStartListener = new OnClickListener() {
-   public void onClick(View v) {
-       if (mStartTime == 0L) {
-            mStartTime = System.currentTimeMillis();
-            mHandler.removeCallbacks(mUpdateTimeTask);
-            mHandler.postDelayed(mUpdateTimeTask, 100);
-       }
-   }
-};</pre>
-
-<p>A couple of things to take note of here. First, the event doesn't
-have a .getWhen() method on it, which we handily used to set the start
-time for the timer. Instead, we grab the System.currentTimeMillis().
-Also, the Handler.postDelayed() method only takes one time parameter,
-it doesn't have a "repeating" field. In this case we are saying to the
-Handler "call mUpdateTimeTask() after 100ms", a sort of fire and forget
-one time shot. We also remove any existing callbacks to the handler
-before adding the new handler, to make absolutely sure we don't get
-more callback events than we want.</p>
-
-<p>But we want it to repeat, until we tell it to stop. To do this, just
-put another postDelayed at the tail of the mUpdateTimeTask run()
-method. Note also that Handler requires an implementation of Runnable,
-so we change mUpdateTimeTask to implement that rather than extending
-TimerTask. The new clock updater, with all these changes, looks like
-this:</p>
-
-<pre>private Runnable mUpdateTimeTask = new Runnable() {
-   public void run() {
-       final long start = mStartTime;
-       long millis = SystemClock.uptimeMillis() - start;
-       int seconds = (int) (millis / 1000);
-       int minutes = seconds / 60;
-       seconds     = seconds % 60;
-
-       if (seconds &lt; 10) {
-           mTimeLabel.setText("" + minutes + ":0" + seconds);
-       } else {
-           mTimeLabel.setText("" + minutes + ":" + seconds);            
-       }
-     
-       mHandler.postAtTime(this,
-               start + (((minutes * 60) + seconds + 1) * 1000));
-   }
-};</pre>
-
-<p>and can be defined as a class member field.</p>
-
-<p>The if statement is just a way to make sure the label is set to
-10:06 instead of 10:6 when the seconds modulo 60 are less than 10
-(hopefully String.format() will eventually be available). At the end of
-the clock update, the task sets up another call to itself from the
-Handler, but instead of a hand-wavy 200ms before the update, we can
-schedule it to happen at a particular wall-clock time — the line: start
-+ (((minutes * 60) + seconds + 1) * 1000) does this.</p>
-
-<p>All we need now is a way to stop the timer when the stop button 
-is pressed. Another button listener defined like this:</p>
-
-<pre>OnClickListener mStopListener = new OnClickListener() {
-   public void onClick(View v) {
-       mHandler.removeCallbacks(mUpdateTimeTask);
-   }
-};</pre>
-
-<p>will make sure that the next callback is removed when the stop button 
-is pressed, thus interrupting the tail iteration.</p>
-
-<p>Handler is actually a better choice than Timer for another reason
-too. The Handler runs the update code as a part of your main thread,
-avoiding the overhead of a second thread and also making for easy
-access to the View hierarchy used for the user interface. Just remember
-to keep such tasks small and light to avoid slowing down the user
-experience.</p>
-
-
diff --git a/docs/html/resources/articles/touch-mode.jd b/docs/html/resources/articles/touch-mode.jd
deleted file mode 100644
index 5eae9b9..0000000
--- a/docs/html/resources/articles/touch-mode.jd
+++ /dev/null
@@ -1,140 +0,0 @@
-page.title=Touch Mode
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>This article explains the <em>touch mode</em>, one of the most 
-important principles of Android's UI toolkit.</p>
-
-<p>The touch mode is a state of the view hierarchy that depends solely on the
-user interaction with the phone. By itself, the touch mode is something very
-easy to understand as it simply indicates whether the last user interaction was
-performed with the touch screen. For example, if you are using an
-Android-powered device, selecting a widget with the trackball will take you out
-of touch mode; however, if you touch a button on the screen with your finger,
-you will enter touch mode. When the user is not in touch mode, we talk about the
-trackball mode, navigation mode or keyboard navigation, so do not be surprised
-if you encounter these terms. </p>
-
-<p>There is only one API directly related to touch mode, 
-{@link android.view.View#isInTouchMode() View.isInTouchMode()}.</p>
-
-<p>Sounds easy enough, right? Oddly enough, touch mode is deceivingly simple and
-the consequences of entering touch mode are far greater than you might
-think. Let's look at some of the reasons why.</p>
-
-<h4>Touch Mode, Selection, and Focus</h4>
-
-<p>Designing a UI toolkit for mobile devices is difficult because of the various
-interaction mechanisms they provide. Some devices offer only 12 keys, some have
-a touch screen, some require a stylus, some have both a touch screen and a
-keyboard. Based on the hardware capabilities of the he user can interact with
-your application using different mechanisms, so we had to think very hard about
-all the possible issues that could arise. One issue led us to create the touch
-mode.</p>
-
-<p>Imagine a simple application, <a href="{@docRoot}resources/samples/index.html">ApiDemos</a>
-for example, that shows a list of text items. The user can freely
-navigate through the list using the trackball but also, alternatively, scroll
-and fling the list using the touch screen. The issue in this scenario is
-how to handle the selection properly when the user manipulates the list 
-through the touch screen. </p>
-
-<p>In this case, if the user selects an item at the top of the list and then
-flings the list towards the bottom, what should happen to the selection? Should
-it remain on the item and scroll off the screen? What should happen if the user
-then decided to move the selection with the trackball? Or worse, what should
-happen if the user presses the trackball to act upon the currently selected
-item, which is not shown on screen anymore? </p>
-
-<p>After careful consideration, we decided to remove the selection altogether,
-when the user manipulates the UI through the touch screen.</p>
-
-<p>In touch mode, there is no focus and no selection. Any selected item in a
-list of in a grid becomes unselected as soon as the user enters touch
-mode. Similarly, any focused widgets become unfocused when the user
-enters touch mode. The image below illustrates what happens when the
-user touches a list after selecting an item with the trackball.</p>
-
-<img style="margin: 0px 7px;" src="images/list02.png" alt="" id="BLOGGER_PHOTO_ID_5272753165743060962" border="0">
-<img style="margin: 0px 7px;" src="images/list01.png" alt="" id="BLOGGER_PHOTO_ID_5272753357441963442" border="0">
-
-<p>To
-make things more natural for the user, the framework knows how to
-resurrect the selection/focus whenever the user leaves touch mode. For
-instance, in the example above, if the user were to use the trackball
-again, the selection would reappear on the previously-selected item.
-This is why some developers are confused when they create a custom view
-and start receiving key events only after moving the trackball once:
-their application is in touch mode, and they need to use the trackball
-to exit touch mode and resurrect the focus.</p>
-
-<p>The relationship between touch mode, selection, and focus means you must not
-rely on selection and/or focus to exist in your application. A very common
-problem with new Android developers is to rely on 
-{@link android.widget.AdapterView#getSelectedItemPosition() ListView.getSelectedItemPosition()}.
-In touch mode, this method will return
-{@link android.widget.AdapterView#INVALID_POSITION INVALID_POSITION}.
- You should instead use click listeners (see 
-{@link android.widget.AdapterView#setOnItemClickListener(android.widget.AdapterView.OnItemClickListener)})
-or the choice mode (see 
-{@link android.widget.ListView#setChoiceMode(int)}).</p>
-
-<h4>Focusable in Touch Mode</h4>
-
-<p>In general, focus doesn't exist in touch mode. However, focus can exist in
-touch mode in a very special way called <em>focusable</em>. This special mode
-was created for widgets that receive text input, such as 
-{@link android.widget.EditText} or, when filtering is enabled, 
-{@link android.widget.ListView}. The focusable mode is what lets the user enter text
-inside a text field on the screen, without first selecting it with the trackball
-or their finger.</p>
-
-<p>When a user
-touches the screen, the application will enter touch mode if it wasn't
-in touch mode already. What happens during the transition to
-touch mode depends on what the user touched, and what currently has
-focus. If the user touches a widget that is focusable in touch
-mode, that widget will receive focus. Otherwise, any currently
-focused widget will not retain focus unless it is focusable in touch
-mode. For instance, in the picture below, when the user touches
-the screen, the input text field receives the focus.</p>
-
-<img style="margin: 0px 7px;" src="images/text_field.png" alt="" id="BLOGGER_PHOTO_ID_5272755475757779154" border="0">
-
-<p>Fousable in touch mode (see 
-{@link android.view.View#setFocusableInTouchMode(boolean) View.setFocusableInTouchMode})
- is a property that you can set yourself, either from code or from XML.
-However, you should use it sparingly and only in very specific situations,
-because it breaks consistency with the normal behavior of the Android UI. A game
-is a good example of an application that could make good use of the focusable in
-touch mode property. MapView, if used in fullscreen as in Google Maps, is
-another good example of where you can use focusable in touch mode correctly.</p>
-
-<p>Below is another example of a focusable in touch mode widget. When the user
-taps an <code>AutoCompleteTextView</code> suggestion with his finger, the focus
-remains on the input text field:</p>
-
-<img style="margin: 0px 7px;" src="images/search01.png" alt="" id="BLOGGER_PHOTO_ID_5272756689821626962" border="0">
-<img style="margin: 0px 7px;" src="images/search02.png" alt="" id="BLOGGER_PHOTO_ID_5272756246104676754" border="0">
-
-<p>Developers new to Android often think that focusable in touch mode is the
-solution they need to "fix" the problem of "disappearing" selection/focus. We
-really encourage you to think very hard before using it. If used incorrectly, it
-can make your application behave differently from the rest of the system and
-simply throw off the user's habits. The Android framework contains all the tools
-you need to handle user interactions without using focusable in touch mode. For
-example, instead of trying to make <code>ListView</code> always keep its
-selection, simply use the appropriate choice mode, as shown in
-{@link android.widget.ListView#setChoiceMode(int)}. 
-
-<h4>Touch Mode Cheat Sheet</h4>
-
-<p>Do:</p>
-<ul>
-<li>Remain consistent with the core applications</li><li>Use the appropriate feature if you need persistent selection (radio button, check box, the <code>ListView</code> choice mode, etc.)</li>
-<li>Use focusable in touch mode if you write a game</li>
-</ul>
-
-<p>Don't:</p>
-<ul><li>Do not try to keep the focus or selection in touch mode</li></ul>
diff --git a/docs/html/resources/articles/track-mem.jd b/docs/html/resources/articles/track-mem.jd
deleted file mode 100644
index c4184b5..0000000
--- a/docs/html/resources/articles/track-mem.jd
+++ /dev/null
@@ -1,64 +0,0 @@
-page.title=Tracking Memory Allocations
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Writing efficient mobile applications is not always straightforward. In
-particular, Android applications rely on automatic memory management handled by
-Dalvik's garbage collector, which can sometimes cause performance issues if you
-are not careful with memory allocations.</p>
-
-<p>In a performance-sensitive code path, such as the layout or drawing method of
-a view or the logic code of a game, any allocation comes at a price. After too
-many allocations, the garbage collector will kick in and stop your application
-to let it free some memory. Most of the time, garbage collections happen fast
-enough for you not to notice. However, if a collection happens while you are
-scrolling through a list of items or while you are trying to defeat a foe in a
-game, you may suddenly see a drop in performance/responsiveness of the
-application. It's not unusual for a garbage collection to take 100 to 200 ms.
-For comparison, a smooth animation needs to draw each frame in 16 to 33 ms. If
-the animation is suddenly interrupted for 10 frames, you can be certain that
-your users will notice.</p>
-
-<p>Most of the time, garbage collection occurs because of tons of small,
-short-lived objects and some garbage collectors, like generational garbage
-collectors, can optimize the collection of these objects so that the application
-does not get interrupted too often. The Android garbage collector is
-unfortunately not able to perform such optimizations and the creation of
-short-lived objects in performance critical code paths is thus very costly for
-your application.</p>
-
-<p>To help you avoid frequent garbage collections, the Android SDK ships with a
-very useful tool called <em>allocation tracker</em>. This tool is part of DDMS,
-which you must have already used for debugging purposes. To start using the
-allocation tracker, you must first launch the standalone version of DDMS, which
-can be found in the <code>tools/</code> directory of the SDK. The version of
-DDMS included in the Eclipse plugin does not offer you ability to use the
-allocation tracker yet.</p>
-
-<p>Once DDMS is running, simply select your application process and then click
-the <em>Allocation Tracker</em> tab. In the new view, click <em>Start
-Tracking</em> and then use your application to make it execute the code paths
-you want to analyze. When you are ready, click <em>Get Allocations</em>. A list
-of allocated objects will be shown in the first table. By clicking on a line you
-can see, in the second table, the stack trace that led to the allocation. Not
-only you will know what type of object was allocated, but also in which thread,
-in which class, in which file and at which line. The following screenshot shows
-the allocations performed by <a
-href="http://code.google.com/p/shelves">Shelves</a> while scrolling a
-ListView.</p>
-
-<a href="images/ddms_allocation_trackerl.png">
-
-<img style="cursor:hand;width: 320px; height: 250px;" src="images/ddms_allocation_tracker.png" border="0" alt="" />
-</a>
-
-<p>Even though it is not necessary &mdash; and sometimes not possible &mdash; to
-remove all allocations for your performance critical code paths. the allocation
-tracker will help you identify important issues in your code. For instance, a
-common mistake I have seen in many applications is to create a new
-<code>Paint</code> object on every draw. Moving the paint into an instance field
-is a simple fix that helps performance a lot. I highly encourage you to peruse
-the <a href="http://source.android.com/">Android source code</a> to see how we
-reduce allocations in performance-critical code paths. You will also thus
-discover the APIs Android provide to help you reuse objects.</p>
diff --git a/docs/html/resources/articles/tts.jd b/docs/html/resources/articles/tts.jd
deleted file mode 100644
index 929d084..0000000
--- a/docs/html/resources/articles/tts.jd
+++ /dev/null
@@ -1,243 +0,0 @@
-page.title=Using Text-to-Speech
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Starting with Android 1.6 (API Level 4), the Android platform includes a new
-Text-to-Speech (TTS) capability. Also known as "speech synthesis", TTS enables
-your Android device to "speak" text of different languages.</p>
-
-<p>Before we explain how to use the TTS API itself, let's first review a few
-aspects of the engine that will be important to your TTS-enabled application. We
-will then show how to make your Android application talk and how to configure
-the way it speaks.</p>
-
-<h3>Languages and resources</h3>
-
-<p>The TTS engine that ships with the Android platform supports a number of
-languages: English, French, German, Italian and Spanish. Also, depending on
-which side of the Atlantic you are on, American and British accents for English
-are both supported.</p>
-
-<p>The TTS engine needs to know which language to speak, as a word like "Paris",
-for example, is pronounced differently in French and English. So the voice and
-dictionary are language-specific resources that need to be loaded before the
-engine can start to speak.</p>
-
-<p>Although all Android-powered devices that support the TTS functionality ship
-with the engine, some devices have limited storage and may lack the
-language-specific resource files. If a user wants to install those resources,
-the TTS API enables an application to query the platform for the availability of
-language files and can initiate their download and installation. So upon
-creating your activity, a good first step is to check for the presence of the
-TTS resources with the corresponding intent:</p>
-
-<pre>Intent checkIntent = new Intent();
-checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA);
-startActivityForResult(checkIntent, MY_DATA_CHECK_CODE);</pre>
-
-<p>A successful check will be marked by a <code>CHECK_VOICE_DATA_PASS</code>
-result code, indicating this device is ready to speak, after the creation of
-our 
-{@link android.speech.tts.TextToSpeech} object. If not, we need to let the user
-know to install the data that's required for the device to become a
-multi-lingual talking machine! Downloading and installing the data is
-accomplished by firing off the ACTION_INSTALL_TTS_DATA intent, which will take
-the user to Google Play, and will let her/him initiate the download.
-Installation of the data will happen automatically once the download completes.
-Here is an example of what your implementation of
-<code>onActivityResult()</code> would look like:</p>
-
-<pre>private TextToSpeech mTts;
-protected void onActivityResult(
-        int requestCode, int resultCode, Intent data) {
-    if (requestCode == MY_DATA_CHECK_CODE) {
-        if (resultCode == TextToSpeech.Engine.CHECK_VOICE_DATA_PASS) {
-            // success, create the TTS instance
-            mTts = new TextToSpeech(this, this);
-        } else {
-            // missing data, install it
-            Intent installIntent = new Intent();
-            installIntent.setAction(
-                TextToSpeech.Engine.ACTION_INSTALL_TTS_DATA);
-            startActivity(installIntent);
-        }
-    }
-}</pre>
-
-<p>In the constructor of the <code>TextToSpeech</code> instance we pass a
-reference to the <code>Context</code> to be used (here the current Activity),
-and to an <code>OnInitListener</code> (here our Activity as well). This listener
-enables our application to be notified when the Text-To-Speech engine is fully
-loaded, so we can start configuring it and using it.</p>
-
-<h4>Languages and Locale</h4>
-
-<p>At Google I/O 2009, we showed an <a title="Google I/O 2009, TTS
-demonstration" href="http://www.youtube.com/watch?v=uX9nt8Cpdqg#t=6m17s"
-id="rnfd">example of TTS</a> where it was used to speak the result of a
-translation from and to one of the 5 languages the Android TTS engine currently
-supports. Loading a language is as simple as calling for instance:</p>
-
-<pre>mTts.setLanguage(Locale.US);</pre><p>to load and set the language to
-English, as spoken in the country "US". A locale is the preferred way to specify
-a language because it accounts for the fact that the same language can vary from
-one country to another. To query whether a specific Locale is supported, you can
-use <code>isLanguageAvailable()</code>, which returns the level of support for
-the given Locale. For instance the calls:</p>
-
-<pre>mTts.isLanguageAvailable(Locale.UK))
-mTts.isLanguageAvailable(Locale.FRANCE))
-mTts.isLanguageAvailable(new Locale("spa", "ESP")))</pre>
-
-<p>will return TextToSpeech.LANG_COUNTRY_AVAILABLE to indicate that the language
-AND country as described by the Locale parameter are supported (and the data is
-correctly installed). But the calls:</p>
-
-<pre>mTts.isLanguageAvailable(Locale.CANADA_FRENCH))
-mTts.isLanguageAvailable(new Locale("spa"))</pre>
-
-<p>will return <code>TextToSpeech.LANG_AVAILABLE</code>. In the first example,
-French is supported, but not the given country. And in the second, only the
-language was specified for the Locale, so that's what the match was made on.</p>
-
-<p>Also note that besides the <code>ACTION_CHECK_TTS_DATA</code> intent to check
-the availability of the TTS data, you can also use
-<code>isLanguageAvailable()</code> once you have created your
-<code>TextToSpeech</code> instance, which will return
-<code>TextToSpeech.LANG_MISSING_DATA</code> if the required resources are not
-installed for the queried language.</p>
-
-<p>Making the engine speak an Italian string while the engine is set to the
-French language will produce some pretty <i>interesting </i>results, but it will
-not exactly be something your user would understand  So try to match the
-language of your application's content and the language that you loaded in your
-<code>TextToSpeech</code> instance. Also if you are using
-<code>Locale.getDefault()</code> to query the current Locale, make sure that at
-least the default language is supported.</p>
-
-<h3>Making your application speak</h3>
-
-<p>Now that our <code>TextToSpeech</code> instance is properly initialized and
-configured, we can start to make your application speak. The simplest way to do
-so is to use the <code>speak()</code> method. Let's iterate on the following
-example to make a talking alarm clock:</p>
-
-<pre>String myText1 = "Did you sleep well?";
-String myText2 = "I hope so, because it's time to wake up.";
-mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, null);
-mTts.speak(myText2, TextToSpeech.QUEUE_ADD, null);</pre>
-
-<p>The TTS engine manages a global queue of all the entries to synthesize, which
-are also known as "utterances". Each <code>TextToSpeech</code> instance can
-manage its own queue in order to control which utterance will interrupt the
-current one and which one is simply queued. Here the first <code>speak()</code>
-request would interrupt whatever was currently being synthesized: the queue is
-flushed and the new utterance is queued, which places it at the head of the
-queue. The second utterance is queued and will be played after
-<code>myText1</code> has completed.</p>
-
-<h4>Using optional parameters to change the playback stream type</h4>
-
-<p>On Android, each audio stream that is played is associated with one stream
-type, as defined in 
-{@link android.media.AudioManager android.media.AudioManager}. For a talking 
-alarm clock, we would like our text to be played on the
-<code>AudioManager.STREAM_ALARM</code> stream type so that it respects the alarm
-settings the user has chosen on the device. The last parameter of the speak()
-method allows you to pass to the TTS engine optional parameters, specified as
-key/value pairs in a HashMap. Let's use that mechanism to change the stream type
-of our utterances:</p>
-
-<pre>HashMap&lt;String, String&gt; myHashAlarm = new HashMap();
-myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
-        String.valueOf(AudioManager.STREAM_ALARM));
-mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
-mTts.speak(myText2, TextToSpeech.QUEUE_ADD, myHashAlarm);</pre>
-
-<h4>Using optional parameters for playback completion callbacks</h4>
-
-<p>Note that <code>speak()</code> calls are asynchronous, so they will return
-well before the text is done being synthesized and played by Android, regardless
-of the use of <code>QUEUE_FLUSH</code> or <code>QUEUE_ADD</code>. But you might
-need to know when a particular utterance is done playing. For instance you might
-want to start playing an annoying music after <code>myText2</code> has finished
-synthesizing (remember, we're trying to wake up the user). We will again use an
-optional parameter, this time to tag our utterance as one we want to identify.
-We also need to make sure our activity implements the
-<code>TextToSpeech.OnUtteranceCompletedListener</code> interface:</p>
-
-<pre>mTts.setOnUtteranceCompletedListener(this);
-myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_STREAM,
-        String.valueOf(AudioManager.STREAM_ALARM));
-mTts.speak(myText1, TextToSpeech.QUEUE_FLUSH, myHashAlarm);
-myHashAlarm.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID,
-        "end of wakeup message ID");
-// myHashAlarm now contains two optional parameters
-mTts.speak(myText2, TextToSpeech.QUEUE_ADD, myHashAlarm);</pre>
-
-<p>And the Activity gets notified of the completion in the implementation 
-of the listener:</p>
-
-<pre>public void onUtteranceCompleted(String uttId) {
-    if (uttId == "end of wakeup message ID") {
-        playAnnoyingMusic();
-    } 
-}</pre>
-
-<h4>File rendering and playback</h4>
-
-<p>While the <code>speak()</code> method is used to make Android speak the text
-right away, there are cases where you would want the result of the synthesis to
-be recorded in an audio file instead. This would be the case if, for instance,
-there is text your application will speak often; you could avoid the synthesis
-CPU-overhead by rendering only once to a file, and then playing back that audio
-file whenever needed. Just like for <code>speak()</code>, you can use an
-optional utterance identifier to be notified on the completion of the synthesis
-to the file:</p>
-
-<pre>HashMap&lt;String, String&gt; myHashRender = new HashMap();
-String wakeUpText = "Are you up yet?";
-String destFileName = "/sdcard/myAppCache/wakeUp.wav";
-myHashRender.put(TextToSpeech.Engine.KEY_PARAM_UTTERANCE_ID, wakeUpText);
-mTts.synthesizeToFile(wakuUpText, myHashRender, destFileName);</pre>
-
-<p>Once you are notified of the synthesis completion, you can play the output
-file just like any other audio resource with 
-{@link android.media.MediaPlayer android.media.MediaPlayer}.</p>
-
-<p>But the <code>TextToSpeech</code> class offers other ways of associating
-audio resources with speech. So at this point we have a WAV file that contains
-the result of the synthesis of "Wake up" in the previously selected language. We
-can tell our TTS instance to associate the contents of the string "Wake up" with
-an audio resource, which can be accessed through its path, or through the
-package it's in, and its resource ID, using one of the two
-<code>addSpeech()</code> methods:</p>
-
-<pre>mTts.addSpeech(wakeUpText, destFileName);</pre>
-
-<p>This way any call to speak() for the same string content as
-<code>wakeUpText</code> will result in the playback of
-<code>destFileName</code>. If the file is missing, then speak will behave as if
-the audio file wasn't there, and will synthesize and play the given string. But
-you can also take advantage of that feature to provide an option to the user to
-customize how "Wake up" sounds, by recording their own version if they choose
-to. Regardless of where that audio file comes from, you can still use the same
-line in your Activity code to ask repeatedly "Are you up yet?":</p>
-
-<pre>mTts.speak(wakeUpText, TextToSpeech.QUEUE_ADD, myHashAlarm);</pre>
-
-<h4>When not in use...</h4><p>The text-to-speech functionality relies on a
-dedicated service shared across all applications that use that feature. When you
-are done using TTS, be a good citizen and tell it "you won't be needing its
-services anymore" by calling <code>mTts.shutdown()</code>, in your Activity
-<code>onDestroy()</code> method for instance.</p>
-
-<h3>Conclusion</h3>
-
-<p>Android now talks, and so can your apps. Remember that in order for
-synthesized speech to be intelligible, you need to match the language you select
-to that of the text to synthesize. Text-to-speech can help you push your app in
-new directions. Whether you use TTS to help users with disabilities, to enable
-the  use of your application while looking away from the screen, or simply to
-make it cool, we hope you'll enjoy this new feature.</p>
\ No newline at end of file
diff --git a/docs/html/resources/articles/ui-1.5.jd b/docs/html/resources/articles/ui-1.5.jd
deleted file mode 100644
index 2edaa2e..0000000
--- a/docs/html/resources/articles/ui-1.5.jd
+++ /dev/null
@@ -1,50 +0,0 @@
-page.title=UI Framework Changes in Android 1.5
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<p>Android 1.5 offers a different default look for
-the Android UI framework, in relation to Android 1.0 and 1.1. The
-screenshots below show the same activity (creating a new contact) on
-Android 1.1 and Android 1.5:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 277px;" src="images/android.png" alt="" id="BLOGGER_PHOTO_ID_5323141124169754690" border="0">
-
-<p>You
-can see in this example that the buttons and checkboxes have a new
-appearance. Even though these changes do not affect binary nor source
-compatibility, they might still break the UI of your apps. As part of
-the UI refresh, the minimum size of some of the widgets has changed.
-For instance, Android 1.1 buttons have a minimum size of 44x48 pixels
-whereas Android 1.5 buttons now have a minimum size of 24x48 pixels.
-The image below compares the sizes of Android 1.1 buttons with Android
-1.5 buttons:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 100px; height: 130px;" src="images/buttons.png" alt="" border="0">
-
-<p>If you rely on the button's minimum size, then the layout of your application
-may not be the same in Android 1.5 as it was in Android 1.1 because of this
-change. This would happen for instance if you created a grid of buttons using
-<code>LinearLayout</code> and relying on the minimum size yielded by
-<code>wrap_content</code> to align the buttons properly:</p>
-
-<img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 277px;" src="images/grid.png" alt="" id="BLOGGER_PHOTO_ID_5323147943613255250" border="0">
-
-<p>This layout could easily be fixed by using the
-<code>android:layout_weight</code> attribute or by replacing the
-<code>LinearLayout</code> containers with a <code>TableLayout</code>.</p>
-
-<p>This example is probably the worst-case UI issue you may encounter when
-running your application on Android 1.5. Other changes introduced in Android
-1.5, especially bug fixes in the layout views, may also impact your
-application—especially if it is relying on faulty/buggy behavior of the UI
-framework.</p>
-
-<p>If you encounter issues when running your application on Android 1.5, please
-join us on the <a href="{@docRoot}resources/community-groups.html">Android
-developer groups</a> or <a
-href="{@docRoot}resources/community-more.html">IRC</a> so that we and the
-Android community can help you fix your application.</p>
-
-<p>Happy coding!</p>
diff --git a/docs/html/resources/articles/ui-1.6.jd b/docs/html/resources/articles/ui-1.6.jd
deleted file mode 100644
index b3238e3..0000000
--- a/docs/html/resources/articles/ui-1.6.jd
+++ /dev/null
@@ -1,132 +0,0 @@
-page.title=UI Framework Changes in Android 1.6
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Android 1.6 introduces numerous enhancements and bug fixes in the UI
-framework. This article highlights two improvements in particular: more flexible
-and robust RelativeLayout and easier click listeners. </p>
-
-<h3>More flexible, more robust RelativeLayout</h3>
-
-<p>RelativeLayout is the most versatile layout offered by the Android UI toolkit
-and can be successfully used to reduce the number of views created by your
-applications. This layout used to suffer from various bugs and limitations,
-sometimes making it difficult to use without having some knowledge of its
-implementation. To make your life easier, Android 1.6 comes with a revamped
-RelativeLayout. </p>
-
-<p>This new implementation not only fixes all known bugs in 
-RelativeLayout but also addresses its major limitation: the
-fact that views had to be declared in a particular order. Consider the following
-XML layout:</p>
-
-<pre>&lt;?xml version="1.0" encoding="utf-8"?&gt;
-
-&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="64dip"
-    android:padding="6dip"&gt;
-
-    &lt;TextView
-        android:id="@+id/band"  
-        android:layout_width="fill_parent" 
-        android:layout_height="26dip" 
-
-        android:layout_below="@+id/track"
-        android:layout_alignLeft="@id/track"
-        android:layout_alignParentBottom="true"
-
-        android:gravity="top"
-        android:text="The Airborne Toxic Event" /&gt;
-
-    &lt;TextView
-        android:id="@id/track"  
-        android:layout_marginLeft="6dip"
-        android:layout_width="fill_parent"
-        android:layout_height="26dip"
-
-        android:layout_toRightOf="@+id/artwork"
-
-        android:textAppearance="?android:attr/textAppearanceMedium"
-        android:gravity="bottom"
-        android:text="Sometime Around Midnight" /&gt;
-        
-    &lt;ImageView
-        android:id="@id/artwork"
-        android:layout_width="56dip"
-        android:layout_height="56dip"
-        android:layout_gravity="center_vertical"
-
-        android:src="@drawable/artwork" /&gt;
-        
-&lt;/RelativeLayout&gt;</pre>
-
-<p>This code builds a very simple layout—an image on the left with two lines of
-text stacked vertically. This XML layout is perfectly fine and contains no
-errors. Unfortunately, Android 1.5's RelativeLayout is incapable of rendering it
-correctly, as shown in the screenshot below.</p>
-
-<img src="images/ui-1.6_002.png" style="width: 320px; height: 480px;">
-
-<p>The problem is that this layout uses forward references. For instance, the
-"band" TextView is positioned below the "track" TextView but "track" is declared
-after "band" and, in Android 1.5, RelativeLayout does not know how to handle
-this case. Now look at the exact same layout running on Android 1.6:</p>
-
-<img src="images/ui-1.6.png" style="width: 320px; height: 480px;">
-
-<p>As you can see Android 1.6 is now better able to handle forward reference.
-The result on screen is exactly what you would expect when writing the
-layout.</p>
-
-<h3>Easier click listeners</h3>
-
-<p>Setting up a click listener on a button is very common task, but 
-it requires quite a bit of boilerplate code:</p>
-
-<pre>findViewById(R.id.myButton).setOnClickListener(new View.OnClickListener() {
-    public void onClick(View v) {
-        // Do stuff
-    }
-});</pre>
-
-<p>One way to reduce the amount of boilerplate is to share a single click
-listener between several buttons. While this technique reduces the
-number of classes, it still requires a fair amount of code and it still
-requires giving each button an id in your XML layout file:</p>
-
-<pre>View.OnClickListener handler = View.OnClickListener() {
-    public void onClick(View v) {
-        switch (v.getId()) {
-            case R.id.myButton: // doStuff
-                break;
-            case R.id.myOtherButton: // doStuff
-                break;
-        }
-    }
-}
-
-findViewById(R.id.myButton).setOnClickListener(handler);
-findViewById(R.id.myOtherButton).setOnClickListener(handler);</pre>
-
-<p>With Android 1.6, none of this is necessary. All you have to do is 
-declare a public method in your Activity to handle the click 
-(the method <i>must</i> have one View argument):</p>
-
-<pre>class MyActivity extends Activity {
-    public void myClickHandler(View target) {
-        // Do stuff
-    }
-}</pre>
-
-<p>And then reference this method from your XML layout:</p>
-
-<pre>&lt;Button android:onClick="myClickHandler" /&gt;</pre>
-
-<p>This new feature reduces both the amount of Java and XML you have to write,
-leaving you more time to concentrate on your application.</p>
-
-<p>The Android team is committed to helping you write applications in the
-easiest and most efficient way possible. We hope you find these improvements
-useful and we're excited to see your applications on Google Play.</p>
diff --git a/docs/html/resources/articles/using-webviews.jd b/docs/html/resources/articles/using-webviews.jd
deleted file mode 100644
index 3a2430b..0000000
--- a/docs/html/resources/articles/using-webviews.jd
+++ /dev/null
@@ -1,63 +0,0 @@
-page.title=Using WebViews
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>A small application called <a title="WebViewDemo"
-href="http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples
-/WebViewDemo">WebViewDemo</a> shows how you can add web content to your
-application. You can find it in the <a title="apps-for-android"
-href="http://code.google.com/p/apps-for-android/">apps-for-android</a> project.
-This application demonstrates how you can embed a {@link android.webkit.WebView}
-into an activity and also how you can have two way communication between your
-application and the web content. </p>
-
-<p>A
-WebView uses the same rendering and JavaScript engine as the browser,
-but it runs under the control of your application. The WebView can be
-full screen or you can mix it with other Views. The content for your
-WebView can come from anywhere. The WebView can download content from
-the web, or it can come from local files stored in your assets
-directory. The content can even be dynamically generated by your
-application code. For this example, the HTML comes from a local file
-called <a title="demo.html" href="http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/WebViewDemo/assets/demo.html">demo.html</a>.</p>
-
-<p>This application does not do very much: when you click on the 
-android, he raises his arm.</p>
-
-<div style="text-align: center;"><img style="width: 322px; height: 482px;" src="images/webview.png"></div>
-
-<p>This
-could, of course, easily be accomplished with a little bit of
-JavaScript. Instead, though, WebViewDemo takes a slightly more
-complicated path to illustrate two very powerful features of WebView.</p> 
-
-<p>First,
-JavaScript running inside the WebView can call out to code in your
-Activity. You can use this to have your JavaScript trigger actions like
-starting a new activity, or it can be used to fetch data from a
-database or {@link android.content.ContentProvider}. The API for this 
-is very simple: just call the 
-{@link android.webkit.WebView#addJavascriptInterface(java.lang.Object, java.lang.String) addJavascriptInterface()}
-method on your WebView. You pass an object whose methods you want to
-expose to JavaScript and the name to use when making calls. You can see
-the exact syntax in <a title="WebViewDemo.java"
-href="http://code.google.com/p/apps-for-android/source/browse/trunk/Samples/
-WebViewDemo/src/com/google/android/webviewdemo/WebViewDemo.java">WebViewDemo.
-java</a>. Here we are making our DemoJavascriptInterface object available to
-JavaScript where it will be called "window.demo".</p>
-
-<p>Second, your Activity can invoke JavaScript methods. All you have to do 
-is call the {@link android.webkit.WebView#loadUrl(java.lang.String) loadUrl} 
-method with the appropriate JavaScript call:</p>
-
-<p><code style="padding-left: 25px;">mWebView.loadUrl("javascript:wave()");</code></p>
-
-<p>Our <a title="WebViewDemo"
-href="http://code.google.com/p/apps-for-android/source/browse/#svn/trunk/Samples
-/WebViewDemo">WebViewDemo</a> uses both techniques: when you click on the
-android, it calls out to the activity, which then turns around and calls back
-into the JavaScript. WebViews are very powerful, and they may be a valuable tool
-to help you build your application – especially if you already have a lot of
-HTML content. As it happens, we've used exactly this approach in some of the
-applications we've written.</p>
diff --git a/docs/html/resources/articles/wikinotes-intents.jd b/docs/html/resources/articles/wikinotes-intents.jd
deleted file mode 100644
index 78fe62e..0000000
--- a/docs/html/resources/articles/wikinotes-intents.jd
+++ /dev/null
@@ -1,257 +0,0 @@
-page.title=WikiNotes: Routing Intents
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-
-<p>In <a href="wikinotes-linkify.html">the Linkify! article</a>, we talked about
-using Linkify to turn wiki words (those that match a regular expression that we
-have defined) into a <code>content:</code> URI and defining a path to data that
-matched a note belonging to that wiki word. As an example, a matching word like
-<code>ToDoList</code> would be turned into a URI such as
-<code>content://com.google.android.wikinotes.db.wikinotes/wikinotes/ToDoList
-</code> and then acted upon using the VIEW action from the Linkify class.</p>
-
-<p>This article examines how the Android system takes this combination of
-<code>VIEW</code> action and <code>content:</code> URI and finds the correct
-activity to fire in order to do something with the data. It will also explain
-how the other default links created by Linkify, such as web URLs and telephone
-numbers, also result in the correct activity to handle that data type being
-fired. Finally, this article will start to examine the custom
-<code>ContentProvider</code> that has been created to handle WikiNotes data. The
-full description of the ContentProvider and what it does will span a couple more
-articles as well, because there is a lot to cover.</p>
-
-<h3>The Linkify-calls-intent Workflow</h3>
-
-<p>At a high level, the steps for Linkify to invoke an intent, and for the 
-resulting activity (if any) to handle it, look like this:</p>
-
-<ol>
- <li>Linkify is invoked on a TextView to turn matching text patterns into Intent links.</li>
- <li>Linkify takes over monitoring for those Intent links being selected by the user.</li>
- <li>When the user selects a link, Linkify calls the VIEW action using the content: URI associated with the link.</li>
- <li>Android takes the content: URI that represents the data, and looks for a
-ContentProvider registered in the system that matches the URI.</li>
- <li>If a match is found, Android queries the ContentProvider using the URI,
-and asks what MIME type the data that will be returned from the URI is.</li>
- <li>Android then looks for an activity registered in the system with an
-intent-filter that matches both the VIEW action, and the MIME type for
-the data represented by the content: URI.</li>
- <li>Assuming a match is found, Linkify then invokes the intent for 
-the URI, at which point the activity takes over, and is handed 
-the content: URI.</li>
- <li>The activity can then use the URI to retrieve the data and act on 
-it.</li>
-</ol>
-
-<p>This is actually a simpler process than it
-sounds, and it is quite lightweight as well. Perhaps a more
-understandable statement about how it works might be:</p>
-
-<p>Linkify is used to turn matching text into hot-links. When the user
-selects a hot-link, Android takes the data locator represented by the
-hot-link and looks for a data handler for that data locator. If it
-finds one, it asks for what type of data is returned for that locator.
-It then looks for something registered with the system that handles
-that type of data for the VIEW action, and starts it, including the
-data locator in the request.</p>
-
-<p>The real key here is the MIME type. MIME stands for <a
-href="http://en.wikipedia.org/wiki/MIME">Multipurpose Internet Mail
-Extensions</a> &mdash; a standard for sending attachments over email. The MIME
-type (which is the part Android uses) is a way of describing certain kinds of
-data. That type is then used to look for an Activity that can do something with
-that data type. In this way, ContentProviders and Activities (or other
-IntentReceivers) are decoupled, meaning that a given Content URI might have a
-different ContentProvider to handle it, but could still use the same MIME type
-meaning that the same activity could be called upon to handle the resulting
-data.</p>
-
-<h3>Linkify on a wiki word</h3>
-
-<p>Using the above workflow, let's take a look at exactly how the process 
-works in WikiNotes for Android:</p>
-
-<p>First, Linkify is used to turn text matching the wiki word regular expression
-into a link that provides a Content URI for that wiki word, for example
-<code>content://com.google.android.wikinotes.db.wikinotes/wikinotes/ToDoList</code>.</p>
-
-<p>When the user clicks on the wiki word link, Linkify invokes the VIEW
-action on the Content URI. At this point, the Android system takes over
-getting the Intent request to the correct activity.</p>
-
-<p>Next, Android looks for a ContentProvider that has been registered
-with the system to handle URIs matching our Content URI format.</p>
-
-<p>In our case, we have a definition inside 
-<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/WikiNotes/AndroidManifest.xml">our application's AndroidManifest.xml</a>
-file that reads:</p>
-
-<pre>&lt;provider name="com.google.android.wikinotes.db.WikiNotesProvider" 
-    android:authorities="com.google.android.wikinotes.db.wikinotes" /&gt;</pre>
-
-<p>This establishes that we have a ContentProvider defined in our application
-that provides the "root authority":
-<code>com.google.android.wikinotes.db.wikinotes</code>. This is the first part
-of the Content URI that we create for a wiki word link. Root Authority is just
-another way of thinking about a descriptor that is registered with Android to
-allow requests for certain URLs to be routed to the correct class.</p>
-
-<p>So, the whole definition is that a class called
-<code>com.google.android.wikinotes.db.WikiNotesProvider</code> is registered
-with the system as able to handle the
-<code>com.google.android.wikinotes.db.wikinotes</code> root authority (i.e. URIs
-starting with that identifier).</p>
-
-<p>From here, Android takes the rest of the URI and presents it to that
-ContentProvider. If you look at the 
-<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/WikiNotes/src/com/google/android/wikinotes/db/WikiNotesProvider.java">WikiNotesProvider
-class</a> and scroll to the very bottom, in the static block there, you can see
-the pattern definitions to match the rest of the URL.</p>
-
-<p>In particular, take a look at the two lines:</p>
-
-<pre>URI_MATCHER.addURI(WikiNote.WIKINOTES_AUTHORITY, "wikinotes", NOTES);
-URI_MATCHER.addURI(WikiNote.WIKINOTES_AUTHORITY, "wikinotes/*", NOTE_NAME);</pre>
-
-<p>These are the definitions of URIs that our ContentProvider recognizes and can
-handle. The first recognizes a full URI of
-<code>content://com.google.android.wikinotes.db.wikinotes/wikinotes</code> and
-associates that with a constant called NOTES. This is used elsewhere in the
-ContentProvider to provide a list of all of the wiki notes in the database when
-the URI is requested.</p>
-
-<p>The second line uses a wildcard &mdash; '*' &mdash; to match a request of the
-form that Linkify will create, e.g.
-<code>content://com.google.android.wikinotes.db.wikinotes/wikinotes/ToDoList
-</code>. In this example, the * matches the ToDoList part of the URI and is
-available to the handler of the request, so that it can fish out the matching
-note for ToDoList and return it as the data. This also associates that match
-with a constant called NOTE_NAME, which again is used as an identifier elsewhere
-in the ContentProvider.</p>
-
-<p>The other matches in this static block are related to forms of
-searching that have been implemented in the WikiNotes for Android
-application, and will be covered in later articles. Likewise, how the
-data is obtained from this matching pattern will be the subject of the
-next article.</p>
-
-<p>For right now we are concerned with the MIME type for the URI. This is
-defined in the <code>getType()</code> method also in the 
-<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/WikiNotes/src/com/google/android/wikinotes/db/WikiNotesProvider.java">WikiNotesProvider
-class</a> (about halfway through the file). Take a quick look at this. The key
-parts for now are:</p>
-
-<pre>case NOTES:
-    return "vnd.android.cursor.<b>dir</b>/vnd.google.wikinote";</pre>
-
-<p>and</p>
-
-<pre>case NOTE_NAME:
-    return "vnd.android.cursor.<b>item</b>/vnd.google.wikinote";</pre>
-
-<p>These are the same constant names we defined in our pattern
-matchers. In the first case, that of the all notes URI, the MIME type
-returned is <code>vnd.android.cursor.dir/vnd.google.wikinote</code>
-which is like saying an Android list (dir) of Google wiki notes (the
-vnd bit is MIME-speak for "vendor specific definition"). Likewise, in
-the case of a NOTE_NAME match, the MIME type returned is 
-<code>vnd.android.cursor.item/vnd.google.wikinote</code> which is 
-like saying an Android item of Google wiki notes.</p>
-
-<p>Note that if you define your own MIME data types like this, the 
-<code>vnd.android.cursor.dir</code> and <code>vnd.android.cursor.item</code>
-categories should be retained, since they have meaning to the Android
-system, but the actual item types should be changed to reflect your
-particular data type.</p>
-
-<p>So far Android has been able to find a ContentProvider that handles
-the Content URI supplied by the Linkify Intent call, and has queried
-the ContentProvider to find out the MIME types for that URI. The final
-step is to find an activity that can handle the VIEW action for that
-MIME type. Take a look in the the 
-<a href="http://code.google.com/p/apps-for-android/source/browse/trunk/WikiNotes/AndroidManifest.xml">AndroidManifest.xml file</a>
-again. Inside the WikiNotes activity definition, you will see:</p>
-
-<pre>&lt;intent-filter&gt;
-    &lt;action name="android.intent.action.VIEW"/&gt;
-    &lt;category name="android.intent.category.DEFAULT"/&gt;
-    &lt;category name="android.intent.category.BROWSABLE"/&gt;
-    &lt;data mimetype="vnd.android.cursor.item/vnd.google.wikinote"/&gt;
-&lt;/intent-filter&gt;</pre>
-
-<p>This is the correct combination of matches for the VIEW action on a
-WikiNote type that is requested from the LINKIFY class. The DEFAULT
-category indicates that the WikiNotes activity should be treated as a
-default handler (a primary choice) for this kind of data, and the
-BROWSABLE category means it can be invoked from a "browser", in this
-case the marked-up Linkified text.</p>
-
-<p>Using this information, Android can match up the VIEW action request
-for the WikiNotes data type with the WikiNotes activity, and can then
-use the WikiNotes activity to handle the request.</p>
-
-<h3>Why do it like this?</h3>
-
-<p>It's quite a trip through the system, and there is a lot to absorb
-here, but this is one of the main reasons I wanted to write WikiNotes
-in the first place. If you follow and understand the steps here, you'll
-have a good grasp of the whole Intents mechanism in Android, and how it
-helps loosely coupled activities cooperate to get things done.</p>
-
-<p>In this case, we could have found another way to detect wiki words
-based on a regular expression, and maybe written our own handler to
-intercept clicks within the TextView and dig out the right data and
-display it. This would seem to accomplish the same functionality just
-as easily as using intents, so what is the advantage to using the full
-Intents mechanism?</p>
-
-<p>In fact there are several advantages:</p>
-
-<p>The most obvious is that because we are using the standard Intent
-based approach, we are not limited to just linking and navigating to
-other wiki notes. We get similar behavior to a number of other data
-types as well. For example, a telephone number or web URL in a wiki
-note will be marked up by Linkify, and using this same mechanism (VIEW
-action on the linked data type) the browser or dialer activities will
-be automatically fired.</p>
-
-<p>It also means that each operation on a wiki note can be treated as a
-separate life cycle by our activity. We are not dealing with swapping
-data in and out of an existing activity - each activity works on a
-particular wiki note and that's all you have to worry about.</p>
-
-<p>Another advantage is that we now have a public activity to handle
-VIEW actions in WikiNotes no matter where the request comes from.
-Another application could request to view a wiki note (perhaps without
-even knowing what kind of data it is) and our activity could start up
-and handle it.</p>
-
-<p>The backstack is automatically maintained for you too. As you
-forward navigate through WikiNotes, Android maintains the history of
-notes visited, and so when you hit the back button you go back to the
-last note you were on. All this is free because we rely on the Android
-intents mechanism.</p>
-
-<p>Finally, if you run WikiNotes for Android and then start DDMS to
-take a look at the Activity threads in the WikiNotes application while
-it is running, you can see that despite what you might think, letting
-Android manage the navigation is very efficient. Create a few linked
-notes, as many links deep as you like, and then follow them. If you
-follow links hundreds of notes deep, you will still only see a handful
-of WikiNotes activities. Android is managing the activities, closing
-the older ones as necessary and using the life cycle to swap data in
-and out.</p>
-
-<h3>Next Time</h3>
-
-<p>This was a long article, but necessarily so. It demonstrates the
-importance of the Intents mechanism and to reinforce the notion that it
-should be used whenever possible for forward navigation, even within a
-single application. Illustrating this is one of the primary reasons I
-wrote WikiNotes for Android in the first place.</p>
-
-<p>In the next article we will look deeper into the ContentProvider and
-examine how it turns a Content URI into a row (or several rows) of data
-that can be used by an activity.</p>
diff --git a/docs/html/resources/articles/wikinotes-linkify.jd b/docs/html/resources/articles/wikinotes-linkify.jd
deleted file mode 100644
index fb49f86..0000000
--- a/docs/html/resources/articles/wikinotes-linkify.jd
+++ /dev/null
@@ -1,115 +0,0 @@
-page.title=WikiNotes: Linkify your Text!
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<img style="margin-left: 1.5em; margin-bottom:1.5em; float: right;" 
-src="images/WikiNotes.png" alt="Linkify example" border="0">
-
-<p>This article introduces <a
-href="http://android-developers.blogspot.com/2008/03/announcing-apps-for-android
-.html">WikiNotes for Android</a>, part of the <a
-href="http://code.google.com/p/apps-for-android/">Apps for Android</a>
-project. It covers the use of Linkify to turn ordinary text views
-into richer, link-oriented content that causes Android intents to fire
-when a link is selected.</p>
-
-<p><strong>Linkify</strong>: The {@link android.text.util.Linkify} class in the
-framework is perfect for creating a wiki note pad. It lets you specify a <a
-title="regular expression"
-href="http://en.wikipedia.org/wiki/Regular_expression">regular expression
-&raquo;</a>
-to match, and a scheme to prepend. The scheme is a string that, when
-the matched text is added, forms a Content URI to allow the correct
-data to be looked up.</p>
-
-<p>For example, in our case we want to look for a regular expression match for a
-WikiWord (that is, a word with <a title="word with camel case"
-href="http://en.wikipedia.org/wiki/CamelCase">camel case &raquo;</a> and no
-spaces). Linkify can then turn this into a Content URI &mdash; something like
-<code>content://com.google.android.wikinotes.db.wikinotes/wikinotes/WikiWord</code>, 
-which can then be used to locate the correct wiki page from a 
-{@link android.content.ContentProvider}.</p>
-
-<p>As a bonus, the Linkify class also defines several default matches,
-in particular it is able to turn web URLs, email addresses and
-telephone numbers into active links which fire Android intents
-automatically.</p>
-
-<p>Linkify can be passed any TextView in your application, and will
-take care of creating the links and enabling their "clickability" for
-you.</p>
-
-<p><strong>Default Linkify</strong>: Using the set of default active
-link options is very straightforward. Simply pass it a handle to a
-TextView with content in it, and the <code>Linkify.ALL</code> flag:</p>
-
-<pre>TextView noteView = (TextView) findViewById(R.id.noteview);
-noteView.setText(someContent);
-Linkify.addLinks(noteView, Linkify.ALL);</pre>
-
-<p>and that's it. The <code>Linkify.ALL</code> flag applies all of the predefined
-link actions, and the TextView will be immediately updated with a set
-of active links which, if you select them, fire default intents for the
-actions (e.g. a web URL will start the browser with that URL, a
-telephone number will bring up the phone dialer with that number ready
-to call, etc.).</p>
-
-<p><strong>Custom Linkify</strong>: So what about our WikiWord? There is no
-pre-defined action for that, so it needs to be defined and associated with a
-scheme.</p>
-
-<p>The first task is to define a regular expression that matches the kind of
-WikiWords we want to find. The regex in this case is:</p>
-
-<pre>\b[A-Z]+[a-z0-9]+[A-Z][A-Za-z0-9]+\b</pre>
-
-<p>Obvious, no? Well actually this is equivalent to the following
-description: "Starting with a word boundary (the \b) find at least one
-upper case letter, followed by at least one lower case letter or a
-numeric digit, followed by another upper case letter, and then any mix
-of upper case, lower case or numeric until the next word boundary (the
-final \b)". Regular expressions are not very pretty, but they are an
-extremely concise and accurate way of specifying a search pattern.</p>
-
-<p>We also need to tell Linkify what to do with a match to the
-WikiWord. Linkify will automatically append whatever is matched to a
-scheme that is supplied to it, so for the sake of argument let's assume
-we have a {@link android.content.ContentProvider} that matches the 
-following content URI:</p>
-
-<pre>content://com.google.android.wikinotes.db.wikinotes/wikinotes/WikiWord</pre>
-
-<p>The WikiWord part will be appended by Linkify when it finds a match, so we
-just need the part before that as our scheme.</p>
-
-<p>Now that we have these two things, we use Linkify to connect them up:</p>
-
-<pre>Pattern wikiWordMatcher = Pattern.compile("\\b[A-Z]+[a-z0-9]+[A-Z][A-Za-z0-9]+\\b");
-String wikiViewURL =    "content://com.google.android.wikinotes.db.wikinotes/wikinotes/";
-Linkify.addLinks(noteView, wikiWordMatcher, wikiViewURL);</pre>
-
-<p>Note that the \b's had to be escaped with double backslashes for the Java
-Pattern.compile line.</p>
-
-<p>Linkify can be used multiple times on the same view to add more
-links, so using this after the Default Linkify call means that the
-existing active links will be maintained and the new WikiWords will be
-added. You could define more Linkify actions and keep applying them to
-the same TextView if you wanted to.</p>
-
-<p>Now, if we have a WikiWord in the TextView, let's say
-<code>MyToDoList</code>, Linkify will turn it into an active link with the
-content URI:</p>
-
-<pre>content://com.google.android.wikinotes.db.wikinotes/wikinotes/MyToDoList</pre> 
-
-<p>and if you click on it, Android will fire the default intent for that content
-URI.</p>
-
-<p>For this to all work, you will need a ContentProvider that
-understands that Content URI, and you will need a default activity
-capable of doing something with the resulting data. I plan to cover
-these in future blog entries (and soon). In fact, the whole Wiki Note
-Pad application is currently undergoing some clean up and review, and
-will then hopefully be released as a sample application.</p>
diff --git a/docs/html/resources/articles/window-bg-speed.jd b/docs/html/resources/articles/window-bg-speed.jd
deleted file mode 100644
index c5e5e90..0000000
--- a/docs/html/resources/articles/window-bg-speed.jd
+++ /dev/null
@@ -1,127 +0,0 @@
-page.title=Window Backgrounds &amp; UI Speed
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>Some Android applications require to squeeze every bit of performance out of
-the UI toolkit and there are many ways to do so. In this article, you will
-discover how to speed up the drawing and the <em>perceived</em> startup time of
-your activities. Both these techniques rely on a single feature, the window's
-background drawable.</p>
-
-<p>The term <em>window background</em> is a bit misleading, however. When you
-setup your user interface by calling <code>setContentView()</code> on an 
-{@link android.app.Activity}, Android adds your views to the <code>Activity</code>'s
-window. The window however does not contain only your views, but a few others
-created for you. The most important one is, in the current implementation used
-on the T-Mobile G1, the <code>DecorView</code>, highlighted in the view
-hierarchy below:</p>
-
-<div style="text-align: center;"><img src="images/window_background_root.png" alt="A typical Android view hierarchy"></div>
-
-<p>The <code>DecorView</code> is the view that actually holds the 
-window's background drawable. Calling 
-{@link android.view.Window#setBackgroundDrawable(android.graphics.drawable.Drawable) getWindow().setBackgroundDrawable()} 
-from your <code>Activity</code> changes the background of the window by changing
-the <code>DecorView</code>'s background drawable. As mentioned before, this
-setup is very specific to the current implementation of Android and can change
-in a future version or even on another device.</p>
-
-<p>If you are using the standard Android themes, a default background drawable
-is set on your activities. The standard theme currently used on the T-Mobile G1
-uses for instance a {@link android.graphics.drawable.ColorDrawable}. For most
-applications, this background drawable works just fine and can be left alone. It
-can however impacts your application's drawing performance. Let's take the
-example of an application that always draws a full screen opaque picture:</p>
-
-<div style="text-align: center;"><img src="images/window_background.png" alt="An opaque user interface doesn't need a window background"></div>
-
-<p>You can see on this screenshot that the window's background is invisible,
-entirely covered by an <code>ImageView</code>. This application is setup to
-redraw as fast as it can and draws at about 44 frames per second, or 22
-milliseconds per frame (<strong>note:</strong> the number of frames per second
-used in this article were obtained on a T-Mobile G1 with my finger on the screen
-so as to reduce the drawing speed which would otherwise be capped at 60 fps.) An
-easy way to make such an application draw faster is to <em>remove</em> the
-background drawable. Since the user interface is entirely opaque, drawing the
-background is simply wasteful. Removing the background improves the performance
-quite nicely:</p>
-
-<div style="text-align: center;"><img src="images/window_background_null.png" alt="Remove the background for faster drawing"></div>
-
-<p>In this new version of the application, the drawing speed went up to 51
-frames per second, or 19 milliseconds per frame. The difference of 3
-milliseconds per is easily explained by the speed of the memory bus on the
-T-Mobile G1: it is exactly the time it takes to move the equivalent of a
-screenful of pixels on the bus. The difference could be even greater if the
-default background was using a more expensive drawable.</p>
-
-<p>Removing the window's background can be achieved very easily by using 
-a custom theme. To do so, first create a file called 
-<code>res/values/theme.xml</code> containing the following:</p>
-
-<pre class="prettyprint">&lt;resources&gt;
-    &lt;style name="Theme.NoBackground" parent="android:Theme"&gt;
-        &lt;item name="android:windowBackground"&gt;@null&lt;/item&gt;
-    &lt;/style&gt;
-&lt;/resources&gt;</pre>
-
-<p>You then need to apply the theme to your activity by adding the attribute
-<code>android:theme="@style/Theme.NoBackground"</code> to your
-<code>&lt;activity /&gt;</code> or <code>&lt;application /&gt;</code> tag. This
-trick comes in very handy for any app that uses a <code>MapView</code>, a
-<code>WebView</code> or any other full screen opaque view.</p>
-
-<p><strong>Opaque views and Android</strong>: this optimization is currently
-necessary because the Android UI toolkit is not smart enough to prevent the
-drawing of views hidden by opaque children. The main reason why this
-optimization was not implemented is simply because there are usually very few
-opaque views in Android applications. This is however something that I
-definitely plan on implementing as soon as possible and I can only apologize for
-not having been able to do this earlier.</p><p>Using a theme to change the
-window's background is also a fantastic way to improve the <em>perceived</em>
-startup performance of some of your activities. This particular trick can only
-be applied to activities that use a custom background, like a texture or a logo.
-The <a href="http://code.google.com/p/shelves">Shelves</a> application is a good
-example:</p>
-
-<div style="text-align: center;"><img src="images/shelves2.png" alt="Textured backgrounds are good candidates for window's background"></div>
-
-<p>If this application simply set the wooden background in the XML layout or in
-<code>onCreate()</code> the user would see the application startup with the
-default theme and its dark background. The wooden texture would only appear
-after the inflation of the content view and the first layout/drawing pass. This
-causes a jarring effect and gives the user the impression that the application
-takes time to load (which can actually be the case.) Instead, the application
-defines the wooden background in a theme, picked up by the system as soon as the
-application starts. The user never sees the default theme and gets the
-impression that the application is up and running right away. To limit the
-memory and disk usage, the background is a tiled texture defined in
-<code>res/drawable/background_shelf.xml</code>:</p>
-
-<pre class="prettyprint">&lt;bitmap xmlns:android="http://schemas.android.com/apk/res/android"
-    android:src="@drawable/shelf_panel"
-    android:tileMode="repeat" /&gt;</pre><p>This drawable is simply referenced by the theme:</p>
-
-<pre class="prettyprint">&lt;resources&gt;
-    &lt;style name="Theme.Shelves" parent="android:Theme"&gt;
-        &lt;item name="android:windowBackground"&gt;@drawable/background_shelf&lt;/item&gt;
-        &lt;item name="android:windowNoTitle"&gt;true&lt;/item&gt;
-    &lt;/style&gt;
-&lt;/resources&gt;</pre>
-
-<p>The same exact trick is used in the <em>Google Maps application that ships
-with the T-Mobile G1. When the application is launched, the user immediately
-sees the loading tiles of <code>MapView</code>. This is only a trick, the theme
-is simply using a tiled background that looks exactly like the loading tiles of
-<code>MapView</code>.</em></p>
-
-<p>Sometimes the best tricks are also the simplest, so the next time you create
-an activity with an opaque UI or a custom background, remember to change the
-window's background.</p>
-
-<p><a href="http://progx.org/users/Gfx/android/WindowBackground">Download the source code of the first example</a>.</p>
-
-<p><a href="http://code.google.com/p/shelves/">Download the source code of Shelves</a>.</p>
-
-
diff --git a/docs/html/resources/articles/zipalign.jd b/docs/html/resources/articles/zipalign.jd
deleted file mode 100644
index d3c68a6..0000000
--- a/docs/html/resources/articles/zipalign.jd
+++ /dev/null
@@ -1,100 +0,0 @@
-page.title=Zipalign: an Easy Optimization
-parent.title=Articles
-parent.link=../browser.html?tag=article
-@jd:body
-
-<p>The Android SDK includes a tool called <a
-href="{@docRoot}guide/developing/tools/zipalign.html"><code>zipalign</code></a>
-that optimizes the way an application is packaged. Running zipalign against your
-application enables Android to interact it more efficiently at run time and thus
-has the potential to make it and the overall system run faster. We strongly
-encourage you to use <code>zipalign</code> on both new and already published
-applications and to make the optimized version available &mdash; even if your
-application targets a previous version of Android. This article describes how
-<code>zipalign</code> helps performance and how to use it to optimize your
-app.</p>
-
-<p>In Android, data files stored in each application's apk are accessed by
-multiple processes: the installer reads the manifest to handle the
-permissions associated with that application; the Home application
-reads resources to get the application's name and icon; the system
-server reads resources for a variety of reasons (e.g. to display that
-application's notifications); and last but not least, the resource
-files are obviously used by the application itself.</p>
-
-<p>The resource-handling code in Android can efficiently access resources when
-they're aligned on 4-byte boundaries by memory-mapping them. But for resources
-that are not aligned (that is, when <code>zipalign</code> hasn't been run on an
-apk), it has to fall back to explicitly reading them &mdash; which is slower and
-consumes additional memory.</p>
-
-<p>For an application developer, this fallback mechanism is very
-convenient. It provides a lot of flexibility by allowing for several
-different development methods, including those that don't include
-aligning resources as part of their normal flow.</p>
-
-<p>Unfortunately, for users the situation is reversed &mdash; reading resources
-from unaligned apks is slow and takes a lot of memory. In the best case, the
-only visible result is that both the Home application and the unaligned
-application launch slower than they otherwise should. In the worst case,
-installing several applications with unaligned resources increases memory
-pressure, thus causing the system to thrash around by having to constantly start
-and kill processes. The user ends up with a slow device with a poor battery
-life.</p>
-
-<p>Luckily, it's very easy for you to align the resources in your application:</p>
-
-<ul>
-<li>Using ADT:</li>
-<li style="list-style-type: none; list-style-image: none; list-style-position: outside;">
-<ul>
-<li>The ADT plugin for Eclipse (starting from version 0.9.3) will automatically
-align release application packages if the export wizard is used to create them.
-To use the wizard, right click the project and choose "Android Tools" &gt;
-"Export Signed Application Package..." It can also be accessed from the first
-page of the <code>AndroidManifest.xml</code> editor.</li>
-</ul>
-</li>
-<li>Using Ant:</li><li style="list-style-type: none; list-style-image: none; list-style-position: outside;">
-
-<ul>
-<li>The <em>Ant</em> build script (starting from Android 1.6) can align
-application packages. Targets for older versions of the Android platform are not
-aligned by the <em>Ant</em> build script and need to be manually aligned.</li>
-<li>Starting from the Android 1.6 SDK, Ant aligns and signs packages automatically, 
-when building in debug mode.</li>
-<li>In release mode, Ant aligns packages only if it has enough
-information to sign the packages, since aligning has to happen after signing. In
-order to be able to sign packages, and therefore to align them, <em>Ant</em>
-needs to know the location of the keystore and the name of the key in
-<code>ant.properties</code>. The name of the properties are
-<code>key.store</code> and <code>key.alias</code> respectively. If those
-properties are present, the signing tool will prompt to enter the store/key
-passwords during the build, and the script will sign and then align the apk
-file. If the properties are missing, the release package will not be signed, and
-therefore will not get aligned either.</li>
-</ul>
-</li>
-<li>Manually:</li>
-<li style="list-style-type: none; list-style-image: none; list-style-position: outside;">
-<ul>
-<li>In order to manually align a package, <code>zipalign</code>
-is in the <code>tools/</code> folder of Android 1.6 and later SDKs. You can use
-it to align application packages targeting any version of Android. You should run
-it only after signing the apk file, using the following command:
-<br><code>zipalign -v 4 source.apk destination.apk</code></li>
-</ul>
-</li>
-<li>Verifying alignment:</li>
-<li style="list-style-type: none; list-style-image: none; list-style-position: outside;">
-<ul>
-<li>The following command verifies that a package is aligned:<br><code>zipalign -c -v 4 application.apk</code>
-</li>
-</ul>
-</li>
-</ul>
-
-<p>We encourage you manually run <code>zipalign</code>
-on your currently published applications and to make the newly aligned
-versions available to users. Also, don't forget to align any new
-applications going forward!</p>
diff --git a/docs/html/resources/browser.jd b/docs/html/resources/browser.jd
deleted file mode 100644
index 8a08769..0000000
--- a/docs/html/resources/browser.jd
+++ /dev/null
@@ -1,49 +0,0 @@
-page.title=Technical Resources
-@jd:body
-
-<style type="text/css">
-  {@literal @import} "{@docRoot}assets/android-developer-resource-browser.css";
-</style>
-
-<script type="text/javascript" src="{@docRoot}assets/android-developer-resource-browser.js"></script>
-<script type="text/javascript" src="{@docRoot}assets/microtemplate.js"></script>
-
-<div>
-  <p style="display: none; float: right">Filter: <input id="resource-browser-keyword-filter"/></p>
-  <p id="resource-browser-search-params">Showing all technical resources:</p>
-</div>
-
-<noscript>
-  <p class="note"><strong>Error:</strong>
-    You must have JavaScript enabled to view this page. Resources are also
-    available offline in the SDK.
-  </p>
-</noscript>
-
-<div id="resource-browser-results">
-  <div class="no-results">No results.</div>
-</div>
-
-<script type="text/html" id="tmpl_resource_browser_result">
-<div class="result">
-  <h3>
-    <% if ('external' in tagsHash) { %><strong>External: </strong> <% } %>
-    <a href="<%= path %>"><%= title.en %></a>
-    <% if ('new' in tagsHash) { %><span class="new">new!</span> <% } %>
-  </h3>
-  <p class="resource-meta"><%
-    var __g = ['', ''];
-    if ('article' in tagsHash) {
-      __g = ['Article', 'about'];
-    } else if ('tutorial' in tagsHash) {
-      __g = ['Tutorial', 'on'];
-    } else if ('sample' in tagsHash) {
-      __g = ['Sample', 'for'];
-    } else if ('video' in tagsHash) {
-      __g = ['Video', 'about'];
-    }
-  %>
-  <%= __g[0] %><% if (topicsHtml) { %> <%= __g[1] %><% } %> <%= topicsHtml %></p>
-  <p><%= description.en %></p>
-</div>
-</script>
diff --git a/docs/html/resources/community-groups.jd b/docs/html/resources/community-groups.jd
deleted file mode 100644
index 6bd347c..0000000
--- a/docs/html/resources/community-groups.jd
+++ /dev/null
@@ -1,120 +0,0 @@
-community=true
-page.title=Developer Forums
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-  <li><a href="#StackOverflow">Android on Stack Overflow</a></li>
-  <li><a href="#MailingLists">Mailing lists</a>
-  <ol>
-    <li><a href="#BeforeYouPost">Before you post</a></li>
-    <li><a href="#UsingEmail">Using email with the mailing lists</a></li>
-    <li><a href="#ApplicationDeveloperLists">Application developer mailing lists</a></li>
-  </ol></li>
-  <li><a href="#PlayHelp">Google Play Help Forum</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>Welcome to the Android developers community! We're glad you're here and invite you to participate in discussions with other Android application developers on topics that interest you.</p>
-
-<p>The lists on this page are primarily for discussion about Android application development. If you are seeking discussion about Android source code (not application development), then please refer to the <a href="http://source.android.com/community">Open Source Project Mailing lists</a>.</p>
-
-<h2 id="StackOverflow">Stack Overflow</h2>
-
-<p><a href="http://stackoverflow.com">Stack Overflow</a> is a collaboratively edited question and answer site for programmers. It's a great place to ask technical questions about developing and maintaining Android applications. The site is especially useful for asking questions with definite answers, but can also be used for discussing best practices.</p>
-
-<p>On the site, questions and answers relating to Android use the <a href="http://stackoverflow.com/questions/tagged/android">'android' tag</a>. You can look for Android topics by adding '<code>[android]</code>' to your search query, or by visiting the tag page at:</p>
-
-<p style="margin-left: 2em"><a href="http://stackoverflow.com/questions/tagged/android">http://stackoverflow.com/questions/tagged/android</a></p>
-
-<p>If you want to ask a question on Stack Overflow, you can use <a href="http://stackoverflow.com/questions/ask">this form</a>. Before submitting the form, make sure to add the 'android' tag so that other Android developers will be able to find your question. As always, before submitting a new question, take a look at the existing topics to see whether another developer has already asked or answered the question.</p>
-
-<p>If you are getting started with Android development, Stack Overflow may be a great location to ask questions about general Java programming or setting up the Eclipse development environment. Simply tag your questions with the <a href="http://stackoverflow.com/questions/tagged/java">Java</a> or <a href="http://stackoverflow.com/questions/tagged/eclipse">Eclipse</a> tags in these cases.</p>
-
-
-<h2 id="MailingLists">Mailing lists</h2>
-
-<p>There are a number of mailing lists, powered by <a href="http://groups.google.com">Google Groups</a>, available for discussing Android application development.</p>
-
-
-<h3 id="BeforeYouPost">Before you post</h3>
-<p>Before writing a post, please try the following:</p>
-
-<ol>
-
-<li>Look through the support information available in the 'More' section of this tab. You may find the answer to your question in the <a href="{@docRoot}resources/faq/commontasks.html">Common Tasks</a>, <a href="{@docRoot}resources/faq/troubleshooting.html">Troubleshooting Tips</a>, or <a href="{@docRoot}resources/faq/index.html">FAQs</a> sections.</li>
-<li>Type in keywords of your questions in the main Android site's search bar (such as the one above). This search encompasses all previous discussions, across all groups, as well as the full contents of the site, documentation, and blogs. Chances are good that somebody has run into the same issue before.</li>
-  </li>
-</ol>
-
-<p>If you can't find your answer, then we encourage you to address the community.
-As you write your post, please do the following:
-<ol>
-<li><strong>Read
-the <a href="http://source.android.com/community/groups-charter.html">mailing list charter</a></strong> that covers the community guidelines.
-</li>
-<li><strong>Select the most appropriate mailing list for your question</strong>. There are several different lists for
-developers, described below.</li>
-<li>
-    <strong>Be very clear</strong> about your question
-in the subject -- it helps everyone, both those trying to answer your
-question as well as those who may be looking for information in the
-future.</li>
-<li><strong>Give plenty of details</strong> in your post to
-help others understand your problem. Code or log snippets, as well as
-pointers to screenshots, may also be helpful. For a great guide to
-phrasing your questions, read <a href="http://www.catb.org/%7Eesr/faqs/smart-questions.html">How To Ask Questions The Smart Way</a>.
-  </li>
-</ol>
-
-
-<h3 id="UsingEmail">Using email with the mailing lists</h3>
-<p>Instead of using the <a href="http://groups.google.com/">Google Groups</a> site, you can use your email client of choice to participate in the mailing lists.</p>
-<p>To subscribe to a group without using the Google Groups site, use the link under "subscribe via email" in the lists above.</p>
-<p>To set up how you receive mailing list postings by email:</p>
-
-<ol><li>Sign into the group via the Google Groups site. For example, for the android-framework group you would visit <a href="http://groups.google.com/group/android-framework">http://groups.google.com/group/android-framework</a>.</li>
-<li>Click "Edit my membership" on the right side.</li>
-<li>Under "How do you want to read this group?" select one of the email options.</li>
-</ol>
-
-
-<h3 id="ApplicationDeveloperLists">Application developer mailing lists</h3>
-<ul>
-<li><strong><a href="http://groups.google.com/group/android-developers">android-developers</a></strong>
-(<a href="http://groups.google.com/group/android-developers/subscribe">subscribe</a>)<br>
-You're now an experienced Android application developer. You've grasped the basics of Android app development, you're comfortable using the SDK, now you want to move to advanced topics. Get help here with troubleshooting applications, advice on implementation, and strategies for improving your application's performance and user experience. This is the not the right place to discuss user issues (use android-discuss for that) or beginner questions with the Android SDK (use android-beginners for that).
-</li>
-
-<li><strong><a href="http://groups.google.com/group/android-discuss">android-discuss</a></strong>
-(<a href="http://groups.google.com/group/android-discuss/subscribe">subscribe</a>)<br>
-The "water cooler" of Android discussion. You can discuss just about anything Android-related here, ideas for the Android platform, announcements about your applications, discussions about Android devices, community resources... As long as your discussion is related to Android, it's on-topic here. However, if you have a discussion here that could belong on another list, you are probably not reaching all of your target audience here and may want to consider shifting to a more targeted list.
-</li>
-
-<li><strong><a href="http://groups.google.com/group/android-ndk">android-ndk</a></strong>
-(<a href="http://groups.google.com/group/android-ndk/subscribe">subscribe</a>)<br>
-A place for discussing the Android NDK and topics related to using native code in Android applications.
-</li>
-
-<li><strong><a href="http://groups.google.com/group/android-security-discuss">android-security-discuss</a></strong>
-(<a href="http://groups.google.com/group/android-security-discuss/subscribe">subscribe</a>)<br>
-A place for open discussion on secure development, emerging security concerns, and best practices for and by android developers. Please don't disclose vulnerabilities directly on this list, you'd be putting all Android users at risk.
-</li>
-
-<li><strong><a href="http://groups.google.com/group/android-security-announce">android-security-announce</a></strong>
-(<a href="http://groups.google.com/group/android-security-announce/subscribe">subscribe</a>)<br>
-A low-volume group for security-related announcements by the Android Security Team.
-</li>
-</ul>
-
-
-<h2 id="PlayHelp">Google Play Help Forum</h2>
-
-<p>The <a href="http://support.google.com/googleplay">Google Play Help Forum</a> is a web-based discussion forum where you can ask questions or report issues relating to Google Play.</p>
-
-<p style="margin-left: 2em"><a href="http://support.google.com/googleplay">http://support.google.com/googleplay</a></p>
diff --git a/docs/html/resources/community-more.jd b/docs/html/resources/community-more.jd
deleted file mode 100644
index 3089d45..0000000
--- a/docs/html/resources/community-more.jd
+++ /dev/null
@@ -1,71 +0,0 @@
-community=true
-page.title=IRC, G+, Twitter
-@jd:body
-
-<p>In addition to the <a href="community-groups.html">Android developer forums</a>, you can participate in the Android developer community through IRC and you can follow us on Twitter. </p>
-
-<h3 id="irc">IRC</h3>
-
-<p>Several IRC channels are available for discussions about developing Android applications.</p>
-
-<table>
-<tr>
-  <th>Channel</th><th>Host</th><th>Description</th>
-</tr>
-<tr>
-  <td>#android</td>
-  <td>irc.freenode.net</td>
-  <td>General discussion about Android (and Android development).</td>
-</tr>
-<tr>
-  <td>#android-dev</td>
-  <td>irc.freenode.net</td>
-  <td>Discussion focused on developing Android apps.</td>
-</tr>
-</table>
-
-<p>If you haven't used IRC before, check <a
-href="http://en.wikipedia.org/wiki/List_of_IRC_clients">http://en.wikipedia.org/wiki/
-List_of_IRC_clients &raquo;</a> for a helpful list of IRC clients. Alternatively, you could also use
-this <a href="http://webchat.freenode.net/?channels=android-dev">web interface &raquo;</a>, which
-does not require any installation, to join discussions on the Android IRC channels.  </p>
-
-<p>Here are some tips for using IRC:</h4>
-
-<ul>
-<li>Set your nickname before you join the channel.</li>
-<li>Registering your nickname prevents others from using your nickname or impersonating you later:
-<pre class="no-pretty-print" style="width:50%;">/nick &lt;yournickname&gt;
-/msg nickserv register &lt;password&gt; &lt;email&gt;</pre>
-<p>Afterwards, when you connect, you'll need to supply a password:</p>
-<pre class="no-pretty-print" style="width:50%;">/connect irc.freenode.net
-/nick &lt;yournickname&gt;
-/msg nickserv identify &lt;password&gt;
-/join #android-dev</pre>
-</li>
-</ul>
-
-
-<h3 id="gplus">Google+</h3>
-<p>We use a Google+ page to host Hangouts for developers, talk about the latest
-releases, development and design tips, and much more.</p>
-
-<div style='margin-top:1em'><g:plus href='https://plus.google.com/108967384991768947849'
-size='badge'></g:plus></div>
-
-
-<h3 id="twitter">Twitter</h3>
-<p>You can follow us on Twitter at this account:</p>
-
-<p style="margin-left:2em;"><a href="http://twitter.com/androiddev">http://twitter.com/androiddev</a></p>
-
-<script type="text/javascript" src="https://plus.google.com/108967384991768947849"
-rel="publisher"></script>
-<script type="text/javascript">
-window.___gcfg = {lang: 'en'};
-(function() 
-{var po = document.createElement("script");
-po.type = "text/javascript"; po.async = true;po.src = "https://apis.google.com/js/plusone.js";
-var s = document.getElementsByTagName("script")[0];
-s.parentNode.insertBefore(po, s);
-})();</script>
\ No newline at end of file
diff --git a/docs/html/resources/dashboard/opengl.jd b/docs/html/resources/dashboard/opengl.jd
deleted file mode 100644
index 4c55522..0000000
--- a/docs/html/resources/dashboard/opengl.jd
+++ /dev/null
@@ -1,79 +0,0 @@
-page.title=OpenGL ES Versions
-@jd:body
-
-<style type="text/css">
-
-div.dashboard-panel {
-  max-width:1000px;
-  margin:0 0 2em 0;
-  padding:20px 20px 0 20px;
-  border:1px solid #d3ecf5;
-  border-radius:7px;
-  -moz-border-radius:7px;
-  -webkit-border-radius:7px;
-  background-color: #DAF3FC;
-  box-shadow:2px 3px 1px #eee;
-  -moz-box-shadow:2px 3px 1px #eee;
-  -webkit-box-shadow:2px 3px 1px #eee;
-  overflow:hidden;
-}
-#jd-content div.dashboard-panel img {
-  margin:0 20px 20px 0;
-  padding:0;
-  border:1px solid #ccc;
-  float:left;
-}
-#jd-content div.dashboard-panel table {
-  margin:0 0 20px 0;
-  float:left;
-  background-color:#fff;
-}
-div.dashboard-panel p {
-  clear:left;
-}
-div.dashboard-panel th {
-  white-space:nowrap;
-}
-</style>
-
-<p>This page provides data about the relative number of active devices that support a particular
-version of OpenGL ES. Note that support for one particular version of OpenGL ES also implies
-support for any lower version (for example, support for version 2.0 also implies support for
-1.1).</p>
-
-<p>To declare which version of OpenGL ES your application requires, you should use the {@code
-android:glEsVersion} attribute of the <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
-element. You can also use the <a
-href="{@docRoot}guide/topics/manifest/supports-gl-texture-element.html">{@code
-&lt;supports-gl-texture&gt;}</a> element to declare the GL compression formats that your application
-uses.</p>
-
-<p class="note"><strong>Note:</strong> This data is based on the number
-of Android devices that have accessed Google Play within a 7-day period
-ending on the data collection date noted below.</p>
-
-
-<div class="dashboard-panel">
-
-<img alt="" width="400" height="250"
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=GL%201.1%20only|GL%202.0%20%26%201.1&chd=t%3A11.9,88.1" />
-
-<table>
-<tr>
-<th scope="col">OpenGL ES Version</th>
-<th scope="col">Distribution</th>
-</tr>
-<tr>
-<td>1.1 only</th>
-<td>11.9%</td>
-</tr>
-<tr>
-<td>2.0 &amp; 1.1</th>
-<td>88.1%</td>
-</tr>
-</table>
-
-<p><em>Data collected during a 7-day period ending on April 2, 2012</em></p>
-</div>
-
diff --git a/docs/html/resources/dashboard/platform-versions.jd b/docs/html/resources/dashboard/platform-versions.jd
deleted file mode 100644
index 2cbbe99..0000000
--- a/docs/html/resources/dashboard/platform-versions.jd
+++ /dev/null
@@ -1,117 +0,0 @@
-page.title=Platform Versions
-@jd:body
-
-<style type="text/css">
-
-div.dashboard-panel {
-  max-width:1000px;
-  margin:0 0 2em 0;
-  padding:20px 20px 0 20px;
-  border:1px solid #d3ecf5;
-  border-radius:7px;
-  -moz-border-radius:7px;
-  -webkit-border-radius:7px;
-  background-color: #DAF3FC;
-  box-shadow:2px 3px 1px #eee;
-  -moz-box-shadow:2px 3px 1px #eee;
-  -webkit-box-shadow:2px 3px 1px #eee;
-  overflow:hidden;
-}
-#jd-content div.dashboard-panel img {
-  margin:0 20px 20px 0;
-  padding:0;
-  border:1px solid #ccc;
-  float:left;
-}
-#jd-content div.dashboard-panel table {
-  margin:0 0 20px 0;
-  float:left;
-  background-color:#fff;
-}
-div.dashboard-panel p {
-  clear:left;
-}
-div.dashboard-panel th {
-  white-space:nowrap;
-}
-</style>
-
-<p>This page provides data about the relative number of active devices
-running a given version of the Android platform. This can help you
-understand the landscape of device distribution and decide how to prioritize
-the development of your application features for the devices currently in
-the hands of users. For information about how to target your application to devices based on
-platform version, see <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>.</p>
-
-
-<h3 id="Current">Current Distribution</h3>
-
-<p>The following pie chart and table is based on the number of Android devices that have accessed
-Google Play within a 14-day period ending on the data collection date noted below.</p>
-
-<div class="dashboard-panel">
-
-<img alt="" height="250" width="470"
-src="http://chart.apis.google.com/chart?&cht=p&chs=460x250&chd=t:0.3,0.7,6.0,23.1,0.5,63.2,0.1,1.0,2.2,0.5,2.4&chl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3|Android%202.3.3|Android%203.0|Android%203.1|Android%203.2|Android%204.0|Android%204.0.3&chco=c4df9b,6fad0c" />
-
-<table>
-<tr>
-  <th>Platform</th>
-  <th>Codename</th>
-  <th>API Level</th>
-  <th>Distribution</th>
-</tr>
-<tr><td><a href="{@docRoot}sdk/android-1.5.html">Android 1.5</a></td><td>Cupcake</td>  <td>3</td><td>0.3%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-1.6.html">Android 1.6</a></td><td>Donut</td>    <td>4</td><td>0.7%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-2.1.html">Android 2.1</a></td><td>Eclair</td>   <td>7</td><td>6.0%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-2.2.html">Android 2.2</a></td><td>Froyo</td>    <td>8</td><td>23.1%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-2.3.html">Android 2.3 -<br/>
-                             Android 2.3.2</a></td><td rowspan="2">Gingerbread</td>    <td>9</td><td>0.5%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-2.3.3.html">Android 2.3.3 -<br/>
-      Android 2.3.7</a></td><!-- Gingerbread -->                                       <td>10</td><td>63.2%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-3.0.html">Android 3.0</a></td>
-                                                   <td rowspan="3">Honeycomb</td>      <td>11</td><td>0.1%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-3.1.html">Android 3.1</a></td><!-- Honeycomb --><td>12</td><td>1.0%</td></tr>
-<tr><td><a href="{@docRoot}sdk/android-3.2.html">Android 3.2</a></td><!-- Honeycomb --><td>13</td><td>2.2%</td></tr> 
-<tr><td><a href="{@docRoot}sdk/android-4.0.html">Android 4.0 -<br/>
-                                               Android 4.0.2</a></td>
-                                                <td rowspan="2">Ice Cream Sandwich</td><td>14</td><td>0.5%</td></tr> 
-<tr><td><a href="{@docRoot}sdk/android-4.0.3.html">Android 4.0.3</a></td><!-- ICS     --><td>15</td><td>2.4%</td></tr> 
-</table>
-
-<p><em>Data collected during a 14-day period ending on April 2, 2012</em></p>
-<!--
-<p style="font-size:.9em">* <em>Other: 0.1% of devices running obsolete versions</em></p>
--->
-</div><!-- end dashboard-panel -->
-
-
-<h3 id="Historical">Historical Distribution</h3>
-
-<p>The following stacked line graph provides a history of the relative number of
-active Android devices running different versions of the Android platform. It also provides a
-valuable perspective of how many devices your application is compatible with, based on the
-platform version.</p>
-
-<p>Notice that the platform versions are stacked on top of each other with the oldest active
-version at the top. This format indicates the total percent of active devices that are compatible
-with a given version of Android. For example, if you develop your application for
-the version that is at the very top of the chart, then your application is
-compatible with 100% of active devices (and all future versions), because all Android APIs are
-forward compatible. Or, if you develop your application for a version lower on the chart,
-then it is currently compatible with the percentage of devices indicated on the y-axis, where the
-line for that version meets the y-axis on the right.</p>
-
-<p>Each dataset in the timeline is based on the number of Android devices that accessed
-Google Play within a 14-day period ending on the date indicated on the x-axis.</p>
-
-<div class="dashboard-panel">
-
-<img alt="" height="250" width="660" style="padding:5px;background:#fff"
-src="http://chart.apis.google.com/chart?&cht=lc&chs=660x250&chxt=x,x,y,r&chxr=0,0,12|1,0,12|2,0,100|3,0,100&chxl=0%3A%7C10/01%7C10/15%7C11/01%7C11/15%7C12/01%7C12/15%7C01/01%7C01/15%7C02/01%7C02/15%7C03/01%7C03/15%7C04/01%7C1%3A%7C2011%7C%7C%7C%7C%7C%7C2012%7C%7C%7C%7C%7C%7C2012%7C2%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25%7C3%3A%7C0%25%7C25%25%7C50%25%7C75%25%7C100%25&chxp=0,0,1,2,3,4,5,6,7,8,9,10,11,12&chxtc=0,5&chd=t:97.7,97.6,97.5,99.4,99.4,99.2,98.9,98.8,99.2,98.9,98.9,99.0,98.8|96.6,96.6,96.5,98.6,98.6,98.5,98.3,98.2,98.6,98.4,98.4,98.6,98.5|95.1,95.4,95.2,97.2,97.3,97.3,97.2,97.2,97.6,97.5,97.6,97.8,97.8|83.3,84.4,84.6,87.0,87.7,88.1,88.7,89.2,89.9,90.3,90.8,91.4,91.8|37.8,40.8,43.5,48.4,52.4,55.2,58.2,60.1,62.0,63.7,65.2,66.8,68.6|0.0,0.0,0.0,2.0,2.3,2.6,3.5,3.6,4.0,4.1,4.3,4.6,5.5|0.0,0.0,0.0,1.0,1.2,1.3,2.0,2.2,2.6,3.0,3.2,3.5,4.5|0.0,0.0,0.0,0.0,0.0,0.0,0.3,0.4,0.7,0.8,1.1,1.3,2.3&chm=b,c3df9b,0,1,0|b,b8dc82,1,2,0|tAndroid%202.1,608920,2,0,15,,t::-5|b,addb67,2,3,0|tAndroid%202.2,517617,3,0,15,,t::-5|b,a3db4b,3,4,0|tAndroid%202.3.3,426210,4,0,15,,t::-5|b,98dc2e,4,5,0|b,8cd41b,5,6,0|b,7ec113,6,7,0|B,6fad0c,7,8,0&chg=7,25&chdl=Android%201.5|Android%201.6|Android%202.1|Android%202.2|Android%202.3.3|Android%203.1|Android%203.2|Android%204.0.3&chco=add274,a2d15a,97d13e,8bcb28,7dba1e,6ea715,5f920e,507d08" />
-
-<p><em>Last historical dataset collected during a 14-day period ending on April 2, 2012</em></p>
-
-
-</div><!-- end dashboard-panel -->
-
diff --git a/docs/html/resources/dashboard/screens.jd b/docs/html/resources/dashboard/screens.jd
deleted file mode 100644
index e5c79a1..0000000
--- a/docs/html/resources/dashboard/screens.jd
+++ /dev/null
@@ -1,101 +0,0 @@
-page.title=Screen Sizes and Densities
-@jd:body
-
-<style type="text/css">
-
-div.dashboard-panel {
-  max-width:1000px;
-  margin:0 0 2em 0;
-  padding:20px 20px 0 20px;
-  border:1px solid #d3ecf5;
-  border-radius:7px;
-  -moz-border-radius:7px;
-  -webkit-border-radius:7px;
-  background-color: #DAF3FC;
-  box-shadow:2px 3px 1px #eee;
-  -moz-box-shadow:2px 3px 1px #eee;
-  -webkit-box-shadow:2px 3px 1px #eee;
-  overflow:hidden;
-}
-#jd-content div.dashboard-panel img {
-  margin:0 20px 20px 0;
-  padding:0;
-  border:1px solid #ccc;
-  float:left;
-}
-#jd-content div.dashboard-panel table {
-  margin:0 0 20px 0;
-  float:left;
-  background-color:#fff;
-}
-div.dashboard-panel p {
-  clear:left;
-}
-div.dashboard-panel th {
-  white-space:nowrap;
-}
-</style>
-
-<p> This page provides data about the relative number of active devices that have a particular
-screen configuration, defined by a combination of screen size and density. To simplify the way that
-you design your user interfaces for different screen configurations, Android divides the range of
-actual screen sizes and densities into:</p> 
- 
-<ul> 
-<li>A set of four generalized <strong>sizes</strong>: <em>small</em>, <em>normal</em>,
-<em>large</em>, and <em>xlarge</em></em></li>
-<li>A set of four generalized <strong>densities</strong>: <em>ldpi</em> (low), <em>mdpi</em>
-(medium), <em>hdpi</em> (high), and <em>xhdpi</em> (extra high)</li>
-</ul> 
-
-<p>For information about how you can support multiple screen configurations in your
-application, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
-
-<p class="note"><strong>Note:</strong> This data is based on the number
-of Android devices that have accessed Google Play within a 7-day period
-ending on the data collection date noted below.</p>
-
-
-<div class="dashboard-panel">
-
-<img alt="" width="400" height="250"
-src="http://chart.googleapis.com/chart?cht=p&chs=400x250&chco=c4df9b,6fad0c&chl=Xlarge%20/%20mdpi|Large%20/%20ldpi|Large%20/%20mdpi|Normal%20/%20hdpi|Normal%20/%20ldpi|Normal%20/%20mdpi|Normal%20/%20xhdpi|Small%20/%20hdpi|Small%20/%20ldpi&chd=t%3A5.8,0.2,2.3,64.6,0.7,19.6,2.4,2.5,1.9" />
-
-<table>
-<tr>
-<th></th>
-<th scope="col">ldpi</th>
-<th scope="col">mdpi</th>
-<th scope="col">hdpi</th>
-<th scope="col">xhdpi</th>
-</tr>
-<tr><th scope="row">small</th> 
-<td>1.9%</td>     <!-- small/ldpi -->
-<td></td>     <!-- small/mdpi -->
-<td>2.5%</td> <!-- small/hdpi -->
-<td></td>     <!-- small/xhdpi -->
-</tr> 
-<tr><th scope="row">normal</th> 
-<td>0.7%</td>  <!-- normal/ldpi -->
-<td>19.6%</td> <!-- normal/mdpi -->
-<td>64.6%</td> <!-- normal/hdpi -->
-<td>2.4%</td>      <!-- normal/xhdpi -->
-</tr> 
-<tr><th scope="row">large</th> 
-<td>0.2%</td>     <!-- large/ldpi -->
-<td>2.3%</td> <!-- large/mdpi -->
-<td></td>     <!-- large/hdpi -->
-<td></td>     <!-- large/xhdpi -->
-</tr> 
-<tr><th scope="row">xlarge</th> 
-<td></td>     <!-- xlarge/ldpi -->
-<td>5.8%</td> <!-- xlarge/mdpi -->
-<td></td>     <!-- xlarge/hdpi -->
-<td></td>     <!-- xlarge/xhdpi -->
-</tr> 
-</table>
-
-<p><em>Data collected during a 7-day period ending on April 2, 2012</em></p>
-</div>
-
diff --git a/docs/html/resources/samples/images/ActionBarCompat1.png b/docs/html/resources/images/ActionBarCompat1.png
similarity index 100%
rename from docs/html/resources/samples/images/ActionBarCompat1.png
rename to docs/html/resources/images/ActionBarCompat1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/ActionBarCompat2.png b/docs/html/resources/images/ActionBarCompat2.png
similarity index 100%
rename from docs/html/resources/samples/images/ActionBarCompat2.png
rename to docs/html/resources/images/ActionBarCompat2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/BluetoothChat1.png b/docs/html/resources/images/BluetoothChat1.png
similarity index 100%
rename from docs/html/resources/samples/images/BluetoothChat1.png
rename to docs/html/resources/images/BluetoothChat1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/BluetoothChat2.png b/docs/html/resources/images/BluetoothChat2.png
similarity index 100%
rename from docs/html/resources/samples/images/BluetoothChat2.png
rename to docs/html/resources/images/BluetoothChat2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/BluetoothHDP.png b/docs/html/resources/images/BluetoothHDP.png
similarity index 100%
rename from docs/html/resources/samples/images/BluetoothHDP.png
rename to docs/html/resources/images/BluetoothHDP.png
Binary files differ
diff --git a/docs/html/resources/samples/images/BusinessCard1.png b/docs/html/resources/images/BusinessCard1.png
similarity index 100%
rename from docs/html/resources/samples/images/BusinessCard1.png
rename to docs/html/resources/images/BusinessCard1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/BusinessCard2.png b/docs/html/resources/images/BusinessCard2.png
similarity index 100%
rename from docs/html/resources/samples/images/BusinessCard2.png
rename to docs/html/resources/images/BusinessCard2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/ContactManager1.png b/docs/html/resources/images/ContactManager1.png
similarity index 100%
rename from docs/html/resources/samples/images/ContactManager1.png
rename to docs/html/resources/images/ContactManager1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/ContactManager2.png b/docs/html/resources/images/ContactManager2.png
similarity index 100%
rename from docs/html/resources/samples/images/ContactManager2.png
rename to docs/html/resources/images/ContactManager2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/CubeLiveWallpaper1.png b/docs/html/resources/images/CubeLiveWallpaper1.png
similarity index 100%
rename from docs/html/resources/samples/images/CubeLiveWallpaper1.png
rename to docs/html/resources/images/CubeLiveWallpaper1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/CubeLiveWallpaper3.png b/docs/html/resources/images/CubeLiveWallpaper3.png
similarity index 100%
rename from docs/html/resources/samples/images/CubeLiveWallpaper3.png
rename to docs/html/resources/images/CubeLiveWallpaper3.png
Binary files differ
diff --git a/docs/html/resources/samples/images/HomeSample.png b/docs/html/resources/images/HomeSample.png
similarity index 100%
rename from docs/html/resources/samples/images/HomeSample.png
rename to docs/html/resources/images/HomeSample.png
Binary files differ
diff --git a/docs/html/resources/samples/images/JetBoy.png b/docs/html/resources/images/JetBoy.png
similarity index 100%
rename from docs/html/resources/samples/images/JetBoy.png
rename to docs/html/resources/images/JetBoy.png
Binary files differ
diff --git a/docs/html/resources/samples/images/KeyChainDemo1.png b/docs/html/resources/images/KeyChainDemo1.png
similarity index 100%
rename from docs/html/resources/samples/images/KeyChainDemo1.png
rename to docs/html/resources/images/KeyChainDemo1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/KeyChainDemo2.png b/docs/html/resources/images/KeyChainDemo2.png
similarity index 100%
rename from docs/html/resources/samples/images/KeyChainDemo2.png
rename to docs/html/resources/images/KeyChainDemo2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/KeyChainDemo3.png b/docs/html/resources/images/KeyChainDemo3.png
similarity index 100%
rename from docs/html/resources/samples/images/KeyChainDemo3.png
rename to docs/html/resources/images/KeyChainDemo3.png
Binary files differ
diff --git a/docs/html/resources/samples/images/KeyChainDemo4.png b/docs/html/resources/images/KeyChainDemo4.png
similarity index 100%
rename from docs/html/resources/samples/images/KeyChainDemo4.png
rename to docs/html/resources/images/KeyChainDemo4.png
Binary files differ
diff --git a/docs/html/resources/samples/images/MultiResolution.png b/docs/html/resources/images/MultiResolution.png
similarity index 100%
rename from docs/html/resources/samples/images/MultiResolution.png
rename to docs/html/resources/images/MultiResolution.png
Binary files differ
diff --git a/docs/html/resources/samples/images/NewsReader.png b/docs/html/resources/images/NewsReader.png
similarity index 100%
rename from docs/html/resources/samples/images/NewsReader.png
rename to docs/html/resources/images/NewsReader.png
Binary files differ
diff --git a/docs/html/resources/samples/images/NfcDemo.png b/docs/html/resources/images/NfcDemo.png
similarity index 100%
rename from docs/html/resources/samples/images/NfcDemo.png
rename to docs/html/resources/images/NfcDemo.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SampleSyncAdapter1.png b/docs/html/resources/images/SampleSyncAdapter1.png
similarity index 100%
rename from docs/html/resources/samples/images/SampleSyncAdapter1.png
rename to docs/html/resources/images/SampleSyncAdapter1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SampleSyncAdapter2.png b/docs/html/resources/images/SampleSyncAdapter2.png
similarity index 100%
rename from docs/html/resources/samples/images/SampleSyncAdapter2.png
rename to docs/html/resources/images/SampleSyncAdapter2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SampleSyncAdapter3.png b/docs/html/resources/images/SampleSyncAdapter3.png
similarity index 100%
rename from docs/html/resources/samples/images/SampleSyncAdapter3.png
rename to docs/html/resources/images/SampleSyncAdapter3.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SearchableDictionary1.png b/docs/html/resources/images/SearchableDictionary1.png
similarity index 100%
rename from docs/html/resources/samples/images/SearchableDictionary1.png
rename to docs/html/resources/images/SearchableDictionary1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SearchableDictionary2.png b/docs/html/resources/images/SearchableDictionary2.png
similarity index 100%
rename from docs/html/resources/samples/images/SearchableDictionary2.png
rename to docs/html/resources/images/SearchableDictionary2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SipDemo.png b/docs/html/resources/images/SipDemo.png
similarity index 100%
rename from docs/html/resources/samples/images/SipDemo.png
rename to docs/html/resources/images/SipDemo.png
Binary files differ
diff --git a/docs/html/resources/samples/images/Snake.png b/docs/html/resources/images/Snake.png
similarity index 100%
rename from docs/html/resources/samples/images/Snake.png
rename to docs/html/resources/images/Snake.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SoftKeyboard.png b/docs/html/resources/images/SoftKeyboard.png
similarity index 100%
rename from docs/html/resources/samples/images/SoftKeyboard.png
rename to docs/html/resources/images/SoftKeyboard.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SpinnerTest1.png b/docs/html/resources/images/SpinnerTest1.png
similarity index 100%
rename from docs/html/resources/samples/images/SpinnerTest1.png
rename to docs/html/resources/images/SpinnerTest1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/SpinnerTest2.png b/docs/html/resources/images/SpinnerTest2.png
similarity index 100%
rename from docs/html/resources/samples/images/SpinnerTest2.png
rename to docs/html/resources/images/SpinnerTest2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/StackWidget.png b/docs/html/resources/images/StackWidget.png
similarity index 100%
rename from docs/html/resources/samples/images/StackWidget.png
rename to docs/html/resources/images/StackWidget.png
Binary files differ
diff --git a/docs/html/resources/samples/images/TicTacToeLib.png b/docs/html/resources/images/TicTacToeLib.png
similarity index 100%
rename from docs/html/resources/samples/images/TicTacToeLib.png
rename to docs/html/resources/images/TicTacToeLib.png
Binary files differ
diff --git a/docs/html/resources/samples/images/TicTacToeMain.png b/docs/html/resources/images/TicTacToeMain.png
similarity index 100%
rename from docs/html/resources/samples/images/TicTacToeMain.png
rename to docs/html/resources/images/TicTacToeMain.png
Binary files differ
diff --git a/docs/html/resources/samples/images/VoicemailProviderDemo.png b/docs/html/resources/images/VoicemailProviderDemo.png
similarity index 100%
rename from docs/html/resources/samples/images/VoicemailProviderDemo.png
rename to docs/html/resources/images/VoicemailProviderDemo.png
Binary files differ
diff --git a/docs/html/resources/samples/images/WeatherListWidget.png b/docs/html/resources/images/WeatherListWidget.png
similarity index 100%
rename from docs/html/resources/samples/images/WeatherListWidget.png
rename to docs/html/resources/images/WeatherListWidget.png
Binary files differ
diff --git a/docs/html/resources/samples/images/WifiDirect.png b/docs/html/resources/images/WifiDirect.png
similarity index 100%
rename from docs/html/resources/samples/images/WifiDirect.png
rename to docs/html/resources/images/WifiDirect.png
Binary files differ
diff --git a/docs/html/resources/samples/images/Wiktionary.png b/docs/html/resources/images/Wiktionary.png
similarity index 100%
rename from docs/html/resources/samples/images/Wiktionary.png
rename to docs/html/resources/images/Wiktionary.png
Binary files differ
diff --git a/docs/html/resources/samples/images/WiktionarySimple.png b/docs/html/resources/images/WiktionarySimple.png
similarity index 100%
rename from docs/html/resources/samples/images/WiktionarySimple.png
rename to docs/html/resources/images/WiktionarySimple.png
Binary files differ
diff --git a/docs/html/resources/samples/images/XmlPhotosAdapter.png b/docs/html/resources/images/XmlPhotosAdapter.png
similarity index 100%
rename from docs/html/resources/samples/images/XmlPhotosAdapter.png
rename to docs/html/resources/images/XmlPhotosAdapter.png
Binary files differ
diff --git a/docs/html/resources/samples/images/XmlRssReader.png b/docs/html/resources/images/XmlRssReader.png
similarity index 100%
rename from docs/html/resources/samples/images/XmlRssReader.png
rename to docs/html/resources/images/XmlRssReader.png
Binary files differ
diff --git a/docs/html/resources/samples/images/hcgallery-phone1.png b/docs/html/resources/images/hcgallery-phone1.png
similarity index 100%
rename from docs/html/resources/samples/images/hcgallery-phone1.png
rename to docs/html/resources/images/hcgallery-phone1.png
Binary files differ
diff --git a/docs/html/resources/samples/images/hcgallery-phone2.png b/docs/html/resources/images/hcgallery-phone2.png
similarity index 100%
rename from docs/html/resources/samples/images/hcgallery-phone2.png
rename to docs/html/resources/images/hcgallery-phone2.png
Binary files differ
diff --git a/docs/html/resources/samples/images/hcgallery.png b/docs/html/resources/images/hcgallery.png
similarity index 100%
rename from docs/html/resources/samples/images/hcgallery.png
rename to docs/html/resources/images/hcgallery.png
Binary files differ
diff --git a/docs/html/resources/samples/images/randommusicplayer.png b/docs/html/resources/images/randommusicplayer.png
similarity index 100%
rename from docs/html/resources/samples/images/randommusicplayer.png
rename to docs/html/resources/images/randommusicplayer.png
Binary files differ
diff --git a/docs/html/resources/samples/images/sample_lunarlander.png b/docs/html/resources/images/sample_lunarlander.png
similarity index 100%
rename from docs/html/resources/samples/images/sample_lunarlander.png
rename to docs/html/resources/images/sample_lunarlander.png
Binary files differ
diff --git a/docs/html/resources/samples/images/sample_note.png b/docs/html/resources/images/sample_note.png
similarity index 100%
rename from docs/html/resources/samples/images/sample_note.png
rename to docs/html/resources/images/sample_note.png
Binary files differ
diff --git a/docs/html/resources/samples/images/sample_notepad.png b/docs/html/resources/images/sample_notepad.png
similarity index 100%
rename from docs/html/resources/samples/images/sample_notepad.png
rename to docs/html/resources/images/sample_notepad.png
Binary files differ
diff --git a/docs/html/resources/samples/images/sample_notepadtest_junit.png b/docs/html/resources/images/sample_notepadtest_junit.png
similarity index 100%
rename from docs/html/resources/samples/images/sample_notepadtest_junit.png
rename to docs/html/resources/images/sample_notepadtest_junit.png
Binary files differ
diff --git a/docs/html/resources/samples/images/vpn-confirmation.png b/docs/html/resources/images/vpn-confirmation.png
similarity index 100%
rename from docs/html/resources/samples/images/vpn-confirmation.png
rename to docs/html/resources/images/vpn-confirmation.png
Binary files differ
diff --git a/docs/html/resources/index.jd b/docs/html/resources/index.jd
deleted file mode 100644
index 9055868..0000000
--- a/docs/html/resources/index.jd
+++ /dev/null
@@ -1,90 +0,0 @@
-page.title=Developer Resources
-@jd:body
-
-<style type="text/css">
-  #resource-list-table td {
-    border: 0;
-    padding: 0 24px;
-    width: 33%;
-    max-width: 250px;
-    border-right: 1px solid #ddd;
-  }
-
-  #resource-list-table td.last {
-    border-right: 0;
-    padding-right: 0;
-  }
-</style>
-
-<p>
-This section provides articles, tutorials, sample code, and other
-information to help you quickly implement the features you want in your
-application. To return to this page later, just click the "Resources"
-tab while any Resources page is loaded.
-</p>
-
-<h2>Technical Resources</h2>
-
-<table id="resource-list-table">
-<tr>
-  <td>
-    <a href="{@docRoot}resources/browser.html?tag=sample">
-      <img src="{@docRoot}assets/images/resource-big-sample.png"/>
-    </a>
-    <h3><a href="{@docRoot}resources/browser.html?tag=sample">
-      Sample Code
-    </a></h3>
-    <p>Fully-functioning sample applications that you can build and run
-    to learn about how Android works. Feel free to reuse any of the code or
-    techniques in the samples.</p>
-  </td>
-  <td>
-    <a href="{@docRoot}resources/browser.html?tag=article">
-      <img src="{@docRoot}assets/images/resource-big-article.png"/>
-    </a>
-    <h3><a href="{@docRoot}resources/browser.html?tag=article">
-      Articles
-    </a></h3>
-    <p>Focused discussions about Android development subjects, including
-    optimizations, tips, interesting implementations, "how-tos",
-    and so on.</p>
-  </td>
-  <td>
-    <a href="{@docRoot}resources/browser.html?tag=tutorial">
-      <img src="{@docRoot}assets/images/resource-big-tutorial.png"/>
-    </a>
-    <h3><a href="{@docRoot}resources/browser.html?tag=tutorial">
-      Tutorials
-    </a></h3>
-    <p>Step-by-step instructions demonstrating how to build an Android application
-    that has the specific features you want.</p>
-  </td>
-  <!-- <td class="last">
-    <a href="{@docRoot}resources/browser.html?tag=video">
-      <img src="{@docRoot}assets/images/resource-big-video.png"/>
-    </a>
-    <h3><a href="{@docRoot}resources/browser.html?tag=video">
-      Videos &amp; Screencasts
-    </a></h3>
-    <p>Videos and presentation slides from developer events, along with
-    screencasts to walk you through common Android development
-    workflows.</p>
-  </td> -->
-</tr>
-</table>
-
-<h2>Other Resources</h2>
-
-<dl>
-<dt><b>Community</b></dt>
-<dd>Links to the Android discussion groups and information about other ways to
-collaborate with other developers. </dd>
-
-<dt><b>Device Dashboard</b></dt>
-<dd>Device distribution data, grouped by various dimensions such as screen size
-and Android platform version. </dd>
-
-<dt><b>More</b></dt>
-<dd>Quick development tips, troubleshooting information, and frequently asked
-questions (FAQs). </dd>
-</dl>
diff --git a/docs/html/resources/resources-data.js b/docs/html/resources/resources-data.js
deleted file mode 100644
index fb4225d..0000000
--- a/docs/html/resources/resources-data.js
+++ /dev/null
@@ -1,946 +0,0 @@
-var ANDROID_TAGS = {
-  type: {
-    'article': 'Article',
-    'tutorial': 'Tutorial',
-    'sample': 'Sample',
-    'video': 'Video',
-    'library': 'Code Library'
-  },
-  topic: {
-    'accessibility': 'Accessibility',
-    'accountsync': 'Accounts &amp; Sync',
-    'bestpractice': 'Best Practices',
-    'communication': 'Communication',
-    'compatibility': 'Compatibility',
-    'data': 'Data Access',
-    'drawing': 'Canvas Drawing',
-    'gamedev': 'Game Development',
-    'gl': 'OpenGL ES',
-    'input': 'Input Methods',
-    'intent': 'Intents',
-    'layout': 'Layouts/Views',
-    'media': 'Multimedia',
-    'multitasking': 'Multi-tasking',
-    'newfeature': 'New Features',
-    'performance': 'Performance',
-    'search': 'Search',
-    'testing': 'Testing',
-    'ui': 'User Interface',
-    'web': 'Web Content',
-    'widgets': 'App Widgets'
-  },
-  misc: {
-    'external': 'External',
-    'new': 'New',
-    'updated': 'Updated'
-  }
-};
-
-var ANDROID_RESOURCES = [
-
-//////////////////////////
-/// TECHNICAL ARTICLES ///
-//////////////////////////
-
-  {
-    tags: ['article', 'performance', 'bestpractice'],
-    path: 'articles/avoiding-memory-leaks.html',
-    title: {
-      en: 'Avoiding Memory Leaks'
-    },
-    description: {
-      en: 'Mobile devices often have limited memory, and memory leaks can cause your application to waste this valuable resource without your knowledge. This article provides tips to help you avoid common causes of memory leaks on the Android platform.'
-    }
-  },
-  {
-    tags: ['article', 'compatibility'],
-    path: 'articles/backward-compatibility.html',
-    title: {
-      en: 'Backward Compatibility'
-    },
-    description: {
-      en: 'The Android platform strives to ensure backwards compatibility. However, sometimes you want to use new features which aren\'t supported on older platforms. This article discusses strategies for selectively using these features based on availability, allowing you to keep your applications portable across a wide range of devices.'
-    }
-  },
-  {
-    tags: ['article', 'intent'],
-    path: 'articles/can-i-use-this-intent.html',
-    title: {
-      en: 'Can I Use this Intent?'
-    },
-    description: {
-      en: 'Android offers a very powerful and yet easy-to-use message type called an intent. You can use intents to turn applications into high-level libraries and make code modular and reusable. While it is nice to be able to make use of a loosely coupled API, there is no guarantee that the intent you send will be received by another application. This article describes a technique you can use to find out whether the system contains any application capable of responding to the intent you want to use.'
-    }
-  },
-  {
-    tags: ['article', 'input'],
-    path: 'articles/creating-input-method.html',
-    title: {
-      en: 'Creating an Input Method'
-    },
-    description: {
-      en: 'Input Method Editors (IMEs) provide the mechanism for entering text into text fields and other Views. Android devices come bundled with at least one IME, but users can install additional IMEs. This article covers the basics of developing an IME for the Android platform.'
-    }
-  },
-  {
-    tags: ['article', 'drawing', 'ui'],
-    path: 'articles/drawable-mutations.html',
-    title: {
-      en: 'Drawable Mutations'
-    },
-    description: {
-      en: 'Drawables are pluggable drawing containers that allow applications to display graphics. This article explains some common pitfalls when trying to modify the properties of multiple Drawables.'
-    }
-  },
-  {
-    tags: ['article', 'bestpractice', 'ui'],
-    path: 'articles/faster-screen-orientation-change.html',
-    title: {
-      en: 'Faster Screen Orientation Change'
-    },
-    description: {
-      en: 'When an Android device changes its orientation, the default behavior is to automatically restart the current activity with a new configuration. However, this can become a bottleneck in applications that access a large amount of external data. This article discusses how to gracefully handle this situation without resorting to manually processing configuration changes.'
-    }
-  },
-  {
-    tags: ['article', 'compatibility'],
-    path: 'articles/future-proofing.html',
-    title: {
-      en: 'Future-Proofing Your Apps'
-    },
-    description: {
-      en: 'A collection of common sense advice to help you ensure that your applications don\'t break when new versions of the Android platform are released.'
-    }
-  },
-  {
-    tags: ['article', 'input'],
-    path: 'articles/gestures.html',
-    title: {
-      en: 'Gestures'
-    },
-    description: {
-      en: 'Touch screens allow users to perform gestures, such as tapping, dragging, flinging, or sliding, to perform various actions. The gestures API enables your application to recognize even complicated gestures with ease. This article explains how to integrate this API into an application.'
-    }
-  },
-  {
-    tags: ['article', 'gamedev', 'gl'],
-    path: 'articles/glsurfaceview.html',
-    title: {
-      en: 'Introducing GLSurfaceView'
-    },
-    description: {
-      en: 'This article provides an overview of GLSurfaceView, a class that makes it easy to implement 2D or 3D OpenGL rendering inside of an Android application.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'layout'],
-    path: 'articles/layout-tricks-reuse.html',
-    title: {
-      en: 'Layout Tricks: Creating Reusable UI Components'
-    },
-    description: {
-      en: 'Learn how to combine multiple standard UI widgets into a single high-level component, which can be reused throughout your application.'
-    }
-  },
-  {
-    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
-    path: 'articles/layout-tricks-efficiency.html',
-    title: {
-      en: 'Layout Tricks: Creating Efficient Layouts'
-    },
-    description: {
-      en: 'Learn how to optimize application layouts as this article walks you through converting a LinearLayout into a RelativeLayout, and analyzes the resulting implications on performance.'
-    }
-  },
-  {
-    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
-    path: 'articles/layout-tricks-stubs.html',
-    title: {
-      en: 'Layout Tricks: Using ViewStubs'
-    },
-    description: {
-      en: 'Learn about using ViewStubs inside an application\'s layout in order to inflate rarely used UI elements, without the performance implications which would otherwise be caused by using the <code>&lt;include&gt;</code> tag.'
-    }
-  },
-  {
-    tags: ['article', 'layout', 'ui', 'performance', 'bestpractice'],
-    path: 'articles/layout-tricks-merge.html',
-    title: {
-      en: 'Layout Tricks: Merging Layouts'
-    },
-    description: {
-      en: 'Learn how to use the <code>&lt;merge&gt;</code> tag in your XML layouts in order to avoid unnecessary levels of hierarchy within an application\'s view tree.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'performance'],
-    path: 'articles/listview-backgrounds.html',
-    title: {
-      en: 'ListView Backgrounds: An Optimization'
-    },
-    description: {
-      en: 'ListViews are very popular widgets within the Android framework. This article describes some of the optimizations used by the ListView widget, and how to avoid some common issues that this causes when trying to use a custom background.'
-    }
-  },
-  {
-    tags: ['article', 'ui'],
-    path: 'articles/live-folders.html',
-    title: {
-      en: 'Live Folders'
-    },
-    description: {
-      en: 'Live Folders allow users to display any source of data on their home screen without launching an application. This article discusses how to export an application\'s data in a format suitable for display inside of a live folder.'
-    }
-  },
-  {
-    tags: ['article', 'ui'],
-    path: 'articles/live-wallpapers.html',
-    title: {
-      en: 'Live Wallpapers'
-    },
-    description: {
-      en: 'Live wallpapers are richer, animated, interactive backgrounds that users can display in their home screens. Learn how to create a live wallpaper and bundle it in an application that users can install on their devices.'
-    }
-  },
-  {
-    tags: ['article', 'bestpractice', 'multitasking'],
-    path: 'articles/multitasking-android-way.html',
-    title: {
-      en: 'Multitasking the Android Way'
-    },
-    description: {
-      en: 'This article describes best practices and user experience guidelines for multi-tasking on Android.'
-    }
-  },
-  {
-    tags: ['article', 'input'],
-    path: 'articles/on-screen-inputs.html',
-    title: {
-      en: 'Onscreen Input Methods'
-    },
-    description: {
-      en: 'The Input Method Framework (IMF) allows users to take advantage of on-screen input methods, such as software keyboards. This article provides an overview of Input Method Editors (IMEs) and how applications interact with them.'
-    }
-  },
-  {
-    tags: ['article', 'performance', 'bestpractice'],
-    path: 'articles/painless-threading.html',
-    title: {
-      en: 'Painless Threading'
-    },
-    description: {
-      en: 'This article discusses the threading model used by Android applications and how applications can ensure best UI performance by spawning worker threads to handle long-running operations, rather than handling them in the main thread. The article also explains the API that your application can use to interact with Android UI toolkit components running on the main thread and spawn managed worker threads.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'search'],
-    path: 'articles/qsb.html',
-    title: {
-      en: 'Quick Search Box'
-    },
-    description: {
-      en: 'Quick Search Box (QSB) is a powerful, system-wide search framework. QSB makes it possible for users to quickly and easily find what they\'re looking for, both on their devices and on the web. This article discusses how to work with the QSB framework to add new search results for an installed application.'
-    }
-  },
-  {
-    tags: ['article', 'input', 'search', 'ui'],
-    path: 'articles/speech-input.html',
-    title: {
-      en: 'Speech Input'
-    },
-    description: {
-      en: 'This articles describes the basics of integrating speech recognition into Android applications.'
-    }
-  },
-  {
-    tags: ['article', 'compatibility', 'multitasking'],
-    path: 'articles/service-api-changes-starting-with.html',
-    title: {
-      en: 'Service API changes starting with Android 2.0'
-    },
-    description: {
-      en: 'This article describes the changes and improvements to services introduced in Android 2.0, as well as strategies for compatibility with older versions of the platform.'
-    }
-  },
-  {
-    tags: ['article', 'input', 'ui'],
-    path: 'articles/spell-checker-framework.html',
-    title: {
-      en: 'The Android Spell Checker Framework'
-    },
-    description: {
-      en: 'This article describes the Android spell checker framework and how to use to implement spell checking in applications.'
-    }
-  },
-  
-  {
-    tags: ['article', 'ui'],
-    path: 'articles/touch-mode.html',
-    title: {
-      en: 'Touch Mode'
-    },
-    description: {
-      en: 'This article explains the touch mode, one of the most important principles of Android\'s UI toolkit. Whenever a user interacts with a device\'s touch screen, the system enters touch mode. While simple in concept, there are important implications touch mode that are often overlooked.'
-    }
-  },
-  {
-    tags: ['article', 'performance', 'bestpractice'],
-    path: 'articles/track-mem.html',
-    title: {
-      en: 'Tracking Memory Allocations'
-    },
-    description: {
-      en: 'This article discusses how to use the Allocation Tracker tool to observe memory allocations and avoid performance problems that would otherwise be caused by ignoring the effect of Dalvik\'s garbage collector.'
-    }
-  },
-  {
-    tags: ['article'],
-    path: 'articles/ui-1.5.html',
-    title: {
-      en: 'UI Framework Changes in Android 1.5'
-    },
-    description: {
-      en: 'Explore the UI changes that were introduced in Android 1.5, compared with the UI provided in Android 1.0 and 1.1.'
-    }
-  },
-  {
-    tags: ['article'],
-    path: 'articles/ui-1.6.html',
-    title: {
-      en: 'UI Framework Changes in Android 1.6'
-    },
-    description: {
-      en: 'Explore the UI changes that were introduced in Android 1.6, compared with the UI provided in Android 1.5. In particular, this article discusses changes to RelativeLayouts and click listeners.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'bestpractice'],
-    path: 'articles/timed-ui-updates.html',
-    title: {
-      en: 'Updating the UI from a Timer'
-    },
-    description: {
-      en: 'Learn about how to use Handlers as a more efficient replacement for java.util.Timer on the Android platform.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'accessibility'],
-    path: 'articles/tts.html',
-    title: {
-      en: 'Using Text-to-Speech'
-    },
-    description: {
-      en: 'The text-to-speech API lets your application "speak" to users, in any of several languages. This article provides an overview of the TTS API and how you use to add speech capabilities to your application.'
-    }
-  },
-  {
-    tags: ['article', 'accountsync', 'data'],
-    path: 'articles/contacts.html',
-    title: {
-      en: 'Using the Contacts API'
-    },
-    description: {
-      en: 'Android provides a Contacts API for managing and integrating contacts from multiple accounts and data sources and allows apps to read various information about individual contacts.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'web'],
-    path: 'articles/using-webviews.html',
-    title: {
-      en: 'Using WebViews'
-    },
-    description: {
-      en: 'WebViews allow an application to dynamically display HTML and execute JavaScript, without relinquishing control to a separate browser application. This article introduces the WebView classes and provides a sample application that demonstrates its use.'
-    }
-  },
-  {
-    tags: ['article', 'ui'],
-    path: 'articles/wikinotes-linkify.html',
-    title: {
-      en: 'WikiNotes: Linkify your Text!'
-    },
-    description: {
-      en: 'This article introduces WikiNotes for Android, part of the Apps for Android project. It covers the use of Linkify to turn ordinary text views into richer, link-oriented content that causes Android intents to fire when a link is selected.'
-    }
-  },
-  {
-    tags: ['article', 'intent'],
-    path: 'articles/wikinotes-intents.html',
-    title: {
-      en: 'WikiNotes: Routing Intents'
-    },
-    description: {
-      en: 'This article illustrates how an application, in this case the WikiNotes sample app, can use intents to route various types of linked text to the application that handles that type of data. For example, an app can use intents to route a linked telephone number to a dialer app and a web URL to a browser.'
-    }
-  },
-  {
-    tags: ['article', 'ui', 'performance'],
-    path: 'articles/window-bg-speed.html',
-    title: {
-      en: 'Window Backgrounds & UI Speed'
-    },
-    description: {
-      en: 'Some Android applications need to squeeze every bit of performance out of the UI toolkit and there are many ways to do so. In this article, you will discover how to speed up the drawing and the perceived startup time of your activities. Both of these techniques rely on a single feature, the window\'s background drawable.'
-    }
-  },
-  {
-    tags: ['article', 'performance', 'bestpractice'],
-    path: 'articles/zipalign.html',
-    title: {
-      en: 'Zipalign: an Easy Optimization'
-    },
-    description: {
-      en: 'The Android SDK includes a tool called zipalign that optimizes the way an application is packaged. Running zipalign against your application enables Android to interact with it more efficiently at run time and thus has the potential to make it and the overall system run faster. This article provides a high-level overview of the zipalign tool and its use.'
-    }
-  },
-
-///////////////////
-/// SAMPLE CODE ///
-///////////////////
- 
-  {
-    tags: ['sample'],
-    path: 'samples/AccelerometerPlay/index.html',
-    title: {
-      en: 'Accelerometer Play'
-    },
-    description: {
-      en: 'An example of using the accelerometer to integrate the device\'s acceleration to a position using the Verlet method. This is illustrated with a very simple particle system comprised of a few iron balls freely moving on an inclined wooden table. The inclination of the virtual table is controlled by the device\'s accelerometer.'
-    }
-  },
-  {
-    tags: ['sample', 'new', 'ui', 'compatibility', 'newfeature'],
-    path: 'samples/ActionBarCompat/index.html',
-    title: {
-      en: 'Action Bar Compatibility'
-    },
-    description: {
-      en: 'Shows how to use the action bar on both pre-API 11 and API 11+ devices, maximizing code re-use.'
-    }
-  },
-  {
-    tags: ['sample', 'new'],
-    path: 'samples/AndroidBeamDemo/index.html',
-    title: {
-      en: 'Android Beam Demo'
-    },
-    description: {
-      en: 'An example of how to use the Android Beam feature to send messages between two Android-powered devices (API level 14 or later) that support NFC.'
-    }
-  },
-  {
-    tags: ['sample', 'layout', 'ui', 'updated'],
-    path: 'samples/ApiDemos/index.html',
-    title: {
-      en: 'API Demos'
-    },
-    description: {
-      en: 'A variety of small applications that demonstrate an extensive collection of framework topics.'
-    }
-  },
-  {
-    tags: ['sample', 'layout', 'ui', 'fragment', 'loader'],
-    path: 'samples/Support4Demos/index.html',
-    title: {
-      en: 'API 4+ Support Demos'
-    },
-    description: {
-      en: 'A variety of small applications that demonstrate the use of the helper classes in the Android API 4+ Support Library (classes which work down to API level 4 or version 1.6 of the platform).'
-    }
-  },
-  {
-    tags: ['sample', 'layout', 'ui'],
-    path: 'samples/Support13Demos/index.html',
-    title: {
-      en: 'API 13+ Support Demos'
-    },
-    description: {
-      en: 'A variety of small applications that demonstrate the use of the helper classes in the Android API 13+ Support Library (classes which work down to API level 13 or version 3.2 of the platform).'
-    }
-  },
-  {
-    tags: ['sample', 'data', 'newfeature', 'accountsync'],
-    path: 'samples/BackupRestore/index.html',
-    title: {
-      en: 'Backup and Restore'
-    },
-    description: {
-      en: 'Illustrates a few different approaches that an application developer can take when integrating with the Android Backup Manager using the BackupAgent API introduced in Android 2.2.'
-    }
-  },
-  {
-    tags: ['sample', 'communication'],
-    path: 'samples/BluetoothChat/index.html',
-    title: {
-      en: 'Bluetooth Chat'
-    },
-    description: {
-      en: 'An application for two-way text messaging over Bluetooth.'
-    }
-  },
-  {
-    tags: ['sample', 'communication', 'new'],
-    path: 'samples/BluetoothHDP/index.html',
-    title: {
-      en: 'Bluetooth HDP Demo'
-    },
-    description: {
-      en: 'A sample application that demonstrates how to communicate with a Bluetooth Health Device Profile (HDP) device.'
-    }
-  },
-  {
-    tags: ['sample', 'accountsync'],
-    path: 'samples/BusinessCard/index.html',
-    title: {
-      en: 'BusinessCard'
-    },
-    description: {
-      en: 'An application that demonstrates how to launch the built-in contact picker from within an activity. This sample also uses reflection to ensure that the correct version of the contacts API is used, depending on which API level the application is running under.'
-    }
-  },
-  {
-    tags: ['sample', 'accountsync'],
-    path: 'samples/ContactManager/index.html',
-    title: {
-      en: 'Contact Manager'
-    },
-    description: {
-      en: 'An application that demonstrates how to query the system contacts provider  using the <code>ContactsContract</code> API, as well as insert contacts into a specific account.'
-    }
-  },
-  {
-    tags: ['sample', 'ui'],
-    path: 'samples/CubeLiveWallpaper/index.html',
-    title: {
-      en: 'Cube Live Wallpaper'
-    },
-    description: {
-      en: 'An application that demonstrates how to create a live wallpaper and  bundle it in an application that users can install on their devices.'
-    }
-  },
-  {
-    tags: ['sample', 'new'],
-    path: 'samples/training/device-management-policy/index.html',
-    title: {
-      en: 'Device Policy Management'
-    },
-    description: {
-      en: 'This is a security-aware sample application that demonstrates the enforcement of device administration policies on Android 2.2 or above platforms.'
-    }
-  },
-  {
-    tags: ['sample'],
-    path: 'samples/Home/index.html',
-    title: {
-      en: 'Home'
-    },
-    description: {
-      en: 'A home screen replacement application.'
-    }
-  },
-  {
-    tags: ['sample', 'updated', 'newfeature', 'ui'],
-    path: 'samples/HoneycombGallery/index.html',
-    title: {
-      en: 'Honeycomb Gallery'
-    },
-    description: {
-      en: 'An image gallery application that demonstrates a variety of new APIs in Android 3.0 (Honeycomb). In addition to providing a tablet-optimized design, it also supports handsets running Android 4.0 (Ice Cream Sandwich) and beyond, so is a good example of how to reuse Fragments to support different screen sizes.'
-    }
-  },
-  {
-    tags: ['sample', 'gamedev', 'media'],
-    path: 'samples/JetBoy/index.html',
-    title: {
-      en: 'JetBoy'
-    },
-    description: {
-      en: 'A game that demonstrates the SONiVOX JET interactive music technology, with <code><a href="/reference/android/media/JetPlayer.html">JetPlayer</a></code>.'
-    }
-  },
-  {
-    tags: ['sample', 'new'],
-    path: 'samples/KeyChainDemo/index.html',
-    title: {
-      en: 'KeyChain Demo'
-    },
-    description: {
-      en: 'A demo application to demonstrate how to use KeyChain APIs.'
-    }
-  },
-  {
-    tags: ['sample', 'gamedev', 'media'],
-    path: 'samples/LunarLander/index.html',
-    title: {
-      en: 'Lunar Lander'
-    },
-    description: {
-      en: 'A classic Lunar Lander game.'
-    }
-  },
-  {
-    tags: ['sample', 'new'],
-    path: 'samples/training/ads-and-ux/index.html',
-    title: {
-      en: 'Mobile Advertisement Integration'
-    },
-    description: {
-      en: 'This sample demonstrates the integration of a mobile ad SDK with your application.'
-    }
-  },
-  {
-    tags: ['sample', 'ui', 'bestpractice', 'layout'],
-    path: 'samples/MultiResolution/index.html',
-    title: {
-      en: 'Multiple Resolutions'
-    },
-    description: {
-      en: 'A sample application that shows how to use resource directory qualifiers to provide different resources for different screen configurations.'
-    }
-  },
-  {
-    tags: ['sample', 'new', 'bestpractices'],
-    path: 'samples/newsreader/index.html',
-    title: {
-      en: 'News Reader'
-    },
-    description: {
-      en: 'A sample app demonstrating best practices to support multiple screen sizes and densities.'
-    }
-  },
-  {
-    tags: ['sample', 'data'],
-    path: 'samples/NFCDemo/index.html',
-    title: {
-      en: 'NFC Demo'
-    },
-    description: {
-      en: 'An application for reading NFC Forum Type 2 Tags using the NFC APIs'
-    }
-  },
-  {
-    tags: ['sample', 'data'],
-    path: 'samples/NotePad/index.html',
-    title: {
-      en: 'Note Pad'
-    },
-    description: {
-      en: 'An application for saving notes. Similar (but not identical) to the <a href="/resources/tutorials/notepad/index.html">Notepad tutorial</a>.'
-    }
-  },
-  {
-    tags: ['sample', 'media', 'updated'],
-    path: 'samples/RandomMusicPlayer/index.html',
-    title: {
-      en: 'Random Music Player'
-    },
-    description: {
-      en: 'Demonstrates how to write a multimedia application that plays music from the device and from URLs. It manages media playback from a service and can play music in the background, respecting audio focus changes. Also shows how to use the new Remote Control APIs in API level 14.'
-    }
-  },
-  {
-    tags: ['sample', 'newfeature', 'performance', 'gamedev', 'gl', 'updated'],
-    path: 'samples/RenderScript/index.html',
-    title: {
-      en: 'RenderScript'
-    },
-    description: {
-      en: 'A set of samples that demonstrate how to use various features of the RenderScript APIs.'
-    }
-  },
-  {
-    tags: ['sample', 'input', 'new'],
-    path: 'samples/SpellChecker/SampleSpellCheckerService/index.html',
-    title: {
-      en: 'Spell Checker Service'
-    },
-    description: {
-      en: 'An example spell checker service, using the <a href="'+toRoot+'reference/android/service/textservice/SpellCheckerService.html"><code>SpellCheckerService</code></a>.'
-    }
-  },
-  {
-    tags: ['sample', 'input', 'new'],
-    path: 'samples/SpellChecker/HelloSpellChecker/index.html',
-    title: {
-      en: 'Spell Checker Client'
-    },
-    description: {
-        en: 'An example spell checker client, using the <a href="'+toRoot+'reference/android/view/textservice/TextServicesManager.html"><code>TextServicesManager</code></a> and <a href="'+toRoot+'reference/android/view/textservice/SpellCheckerSession.html"><code>SpellCheckerSession</code></a>.'
-    }
-  },
-  {
-    tags: ['sample', 'accountsync', 'updated'],
-    path: 'samples/SampleSyncAdapter/index.html',
-    title: {
-      en: 'SampleSyncAdapter'
-    },
-    description: {
-      en: 'Demonstrates how an application can communicate with a cloud-based service and synchronize its data with data stored locally in a content provider. The sample uses two related parts of the Android framework &mdash; the account manager and the synchronization manager (through a sync adapter).'
-    }
-  },
-  {
-    tags: ['sample', 'ui', 'search'],
-    path: 'samples/SearchableDictionary/index.html',
-    title: {
-      en: 'Searchable Dictionary v2'
-    },
-    description: {
-      en: 'A sample application that demonstrates Android\'s search framework, including how to provide search suggestions for Quick Search Box.'
-    }
-  },
-  {
-    tags: ['sample'],
-    path: 'samples/SipDemo/index.html',
-    title: {
-      en: 'SIP Demo'
-    },
-    description: {
-      en: 'A demo application highlighting how to make internet-based calls with the SIP API.'
-    }
-  },
-  {
-    tags: ['sample', 'layout', 'ui'],
-    path: 'samples/Snake/index.html',
-    title: {
-      en: 'Snake'
-    },
-    description: {
-      en: 'An implementation of the classic game "Snake."'
-    }
-  },
-  {
-    tags: ['sample', 'input'],
-    path: 'samples/SoftKeyboard/index.html',
-    title: {
-      en: 'Soft Keyboard'
-    },
-    description: {
-      en: 'An example of writing an input method for a software keyboard.'
-    }
-  },
-  {
-    tags: ['sample', 'testing'],
-    path: 'samples/Spinner/index.html',
-    title: {
-      en: 'Spinner'
-    },
-    description: {
-      en: 'A simple application that serves as an application under test for the SpinnerTest example.'
-    }
-  },
-  {
-    tags: ['sample', 'testing'],
-    path: 'samples/SpinnerTest/index.html',
-    title: {
-      en: 'SpinnerTest'
-    },
-    description: {
-      en: 'The test application for the Activity Testing tutorial. It tests the Spinner example application.'
-    }
-  },
-  {
-    tags: ['sample', 'newfeature', 'widgets'],
-    path: 'samples/StackWidget/index.html',
-    title: {
-      en: 'StackView Widget'
-    },
-    description: {
-      en: 'Demonstrates how to create a simple collection widget containing a StackView.'
-    }
-  },
-  {
-    tags: ['sample', 'newfeature'],
-    path: 'samples/TicTacToeLib/index.html',
-    title: {
-      en: 'TicTacToeLib'
-    },
-    description: {
-      en: 'An example of an Android library project, a type of project that lets you store and manage shared code and resources in one place, then make them available to your other Android applications.'
-    }
-  },
-  {
-    tags: ['sample', 'newfeature',],
-    path: 'samples/TicTacToeMain/index.html',
-    title: {
-      en: 'TicTacToeMain'
-    },
-    description: {
-      en: 'Demonstrates how an application can make use of shared code and resources stored in an Android library project.'
-    }
-  },
-  {
-    tags: ['sample', 'communication', 'new'],
-    path: 'samples/ToyVpn/index.html',
-    title: {
-      en: 'Toy VPN Client'
-    },
-    description: {
-      en: 'A sample application that illustrates the creation of a custom VPN client.'
-    }
-  },
-  {
-    tags: ['sample', 'newfeature'],
-    path: 'samples/USB/index.html',
-    title: {
-      en: 'USB'
-    },
-    description: {
-      en: 'A set of samples that demonstrate how to use various features of the USB APIs.'
-    }
-  },
-  {
-    tags: ['sample', 'data', 'new'],
-    path: 'samples/VoicemailProviderDemo/index.html',
-    title: {
-      en: 'Voicemail Provider'
-    },
-    description: {
-      en: 'A sample application to demonstrate how to use voicemail content provider APIs in Android 4.0.'
-    }
-  },
-  {
-    tags: ['sample','newfeature', 'new'],
-    path: 'samples/WiFiDirectDemo/index.html',
-    title: {
-      en: 'Wi-Fi Direct Demo'
-    },
-    description: {
-      en: 'A demo application to demonstrate how to use Wi-Fi Direct APIs.'
-    }
-  },
-  {
-    tags: ['sample', 'ui', 'widgets'],
-    path: 'samples/Wiktionary/index.html',
-    title: {
-      en: 'Wiktionary'
-    },
-    description: {
-      en: 'An example of creating interactive widgets for display on the Android home screen.'
-    }
-  },
-  {
-    tags: ['sample', 'ui', 'widgets'],
-    path: 'samples/WiktionarySimple/index.html',
-    title: {
-      en: 'Wiktionary (Simplified)'
-    },
-    description: {
-      en: 'A simple Android home screen widgets example.'
-    }
-  },
-  {
-    tags: ['sample', 'widgets', 'newfeature'],
-    path: 'samples/WeatherListWidget/index.html',
-    title: {
-      en: 'Weather List Widget'
-    },
-    description: {
-      en: 'A more complex collection-widget example which uses a ContentProvider as its data source.'
-    }
-  },
-  {
-    tags: ['sample', 'layout'],
-    path: 'samples/XmlAdapters/index.html',
-    title: {
-      en: 'XML Adapters'
-    },
-    description: {
-      en: 'Binding data to views using XML Adapters examples.'
-    }
-  },
-  {
-    tags: ['sample', 'new', 'accessibility'],
-    path: 'samples/TtsEngine/index.html',
-    title: {
-      en: 'Text To Speech Engine'
-    },
-    description: {
-      en: 'An example Text To Speech engine written using the Android text to speech engine API in Android 4.0.'
-    }
-  },
-
-/////////////////
-/// TUTORIALS ///
-/////////////////
-
-  {
-    tags: ['tutorial'],
-    path: 'tutorials/hello-world.html',
-    title: {
-      en: 'Hello World'
-    },
-    description: {
-      en: 'Beginning basic application development with the Android SDK.'
-    }
-  },
-  {
-    tags: ['tutorial', 'ui', 'layout'],
-    path: 'tutorials/views/index.html',
-    title: {
-      en: 'Hello Views'
-    },
-    description: {
-      en: 'A walk-through of the various types of layouts and views available in the Android SDK.'
-    }
-  },
-  {
-    tags: ['tutorial', 'ui', 'bestpractice'],
-    path: 'tutorials/localization/index.html',
-    title: {
-      en: 'Hello Localization'
-    },
-    description: {
-      en: 'The basics of localizing your applications for multiple languages and locales.'
-    }
-  },
-  {
-    tags: ['tutorial', 'data'],
-    path: 'tutorials/notepad/index.html',
-    title: {
-      en: 'Notepad Tutorial'
-    },
-    description: {
-      en: 'A multi-part tutorial discussing intermediate-level concepts such as data access.'
-    }
-  },
-  {
-    tags: ['tutorial', 'gl'],
-    path: 'tutorials/opengl/opengl-es10.html',
-    title: {
-      en: 'OpenGL ES 1.0'
-    },
-    description: {
-      en: 'The basics of implementing an application using the OpenGL ES 1.0 APIs.'
-    }
-  },
-  {
-    tags: ['tutorial', 'gl'],
-    path: 'tutorials/opengl/opengl-es20.html',
-    title: {
-      en: 'OpenGL ES 2.0'
-    },
-    description: {
-      en: 'The basics of implementing an application using the OpenGL ES 2.0 APIs.'
-    }
-  },
-  {
-    tags: ['tutorial', 'testing'],
-    path: 'tutorials/testing/helloandroid_test.html',
-    title: {
-      en: 'Hello Testing'
-    },
-    description: {
-      en: 'A basic introduction to the Android testing framework.'
-    }
-  },
-  {
-    tags: ['tutorial', 'testing'],
-    path: 'tutorials/testing/activity_test.html',
-    title: {
-      en: 'Activity Testing'
-    },
-    description: {
-      en: 'A more advanced demonstration of the Android testing framework and tools.'
-    }
-  }
-];
diff --git a/docs/html/resources/resources_toc.cs b/docs/html/resources/resources_toc.cs
deleted file mode 100644
index 9752d99..0000000
--- a/docs/html/resources/resources_toc.cs
+++ /dev/null
@@ -1,687 +0,0 @@
-<ul>
-  <li>
-    <span class="heading">
-      <span class="en">Basic Training</span>
-    </span>
-    <ul>
-      
-      <li><a href="<?cs var:toroot ?>training/index.html">
-            <span class="en">Orientation</span>
-          </a>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/basics/firstapp/index.html">
-            <span class="en">Building Your First App<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/firstapp/creating-project.html">
-            <span class="en">Creating an Android Project</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/firstapp/running-app.html">
-            <span class="en">Running Your Application</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/firstapp/building-ui.html">
-            <span class="en">Building a Simple User Interface</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/firstapp/starting-activity.html">
-            <span class="en">Starting Another Activity</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/index.html">
-            <span class="en">Managing the Activity Lifecycle<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/starting.html">
-            <span class="en">Starting an Activity</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/pausing.html">
-            <span class="en">Pausing and Resuming an Activity</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/stopping.html">
-            <span class="en">Stopping and Restarting an Activity</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/recreating.html">
-            <span class="en">Recreating an Activity</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/basics/supporting-devices/index.html">
-            <span class="en">Supporting Different Devices<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/languages.html">
-            <span class="en">Supporting Different Languages</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/screens.html">
-            <span class="en">Supporting Different Screens</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/platforms.html">
-            <span class="en">Supporting Different Platform Versions</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/basics/fragments/index.html">
-            <span class="en">Building a Dynamic UI with Fragments<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/fragments/support-lib.html">
-            <span class="en">Using the Support Library</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/fragments/creating.html">
-            <span class="en">Creating a Fragment</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/fragments/fragment-ui.html">
-            <span class="en">Building a Flexible UI</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/fragments/communicating.html">
-            <span class="en">Communicating with Other Fragments</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/basics/intents/index.html">
-            <span class="en">Interacting with Other Apps<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/intents/sending.html">
-            <span class="en">Sending the User to Another App</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/intents/result.html">
-            <span class="en">Getting a Result from the Activity</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/intents/filters.html">
-            <span class="en">Allowing Other Apps to Start Your Activity</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/basics/location/index.html">
-            <span class="en">Making Your App Location Aware<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/basics/location/locationmanager.html">
-            <span class="en">Using the Location Manager</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/location/currentlocation.html">
-            <span class="en">Obtaining the Current Location</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/basics/location/geocoding.html">
-            <span class="en">Displaying a Location Address</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-    </ul>
-  </li>
-    
-    
-  <li>
-    <span class="heading">
-      <span class="en">Advanced Training</span>
-    </span>
-    <ul>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/multiscreen/index.html">
-            <span class="en">Designing for Multiple Screens</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html">
-            <span class="en">Supporting Different Screen Sizes</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html">
-            <span class="en">Supporting Different Screen Densities</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html">
-            <span class="en">Implementing Adaptive UI Flows</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/improving-layouts/index.html">
-            <span class="en">Improving Layout Performance</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/improving-layouts/optimizing-layout.html">
-            <span class="en">Optimizing Layout Hierarchies</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/improving-layouts/reusing-layouts.html">
-            <span class="en">Re-using Layouts with &lt;include/&gt;</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/improving-layouts/loading-ondemand.html">
-            <span class="en">Loading Views On Demand</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/improving-layouts/smooth-scrolling.html">
-            <span class="en">Making ListView Scrolling Smooth</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/managing-audio/index.html">
-            <span class="en">Managing Audio Playback</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/managing-audio/volume-playback.html">
-            <span class="en">Controlling Your App’s Volume and Playback</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/managing-audio/audio-focus.html">
-            <span class="en">Managing Audio Focus</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/managing-audio/audio-output.html">
-            <span class="en">Dealing with Audio Output Hardware</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/monitoring-device-state/index.html">
-            <span class="en">Optimizing Battery Life</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html">
-            <span class="en">Monitoring the Battery Level and Charging State</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html">
-            <span class="en">Determining and Monitoring the Docking State and Type</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html">
-            <span class="en">Determining and Monitoring the Connectivity Status</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html">
-            <span class="en">Manipulating Broadcast Receivers On Demand</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/efficient-downloads/index.html">
-            <span class="en">Transferring Data Without Draining the Battery<span
-class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/efficient-downloads/efficient-network-access.html">
-            <span class="en">Optimizing Downloads for Efficient Network Access</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/efficient-downloads/regular_updates.html">
-            <span class="en">Minimizing the Effect of Regular Updates</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/efficient-downloads/redundant_redundant.html">
-            <span class="en">Redundant Downloads are Redundant</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/efficient-downloads/connectivity_patterns.html">
-            <span class="en">Modifying Patterns Based on the Connectivity Type</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/cloudsync/index.html">
-            <span class="en">Syncing to the Cloud<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/cloudsync/aesync.html">
-            <span class="en">Syncing with App Engine</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/cloudsync/backupapi.html">
-            <span class="en">Using the Backup API</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/search/index.html">
-            <span class="en">Adding Search Functionality<span class="new">&nbsp;new!</span></span>
-          </a>
-        </div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/search/setup.html">
-            <span class="en">Setting up the Search Interface</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/search/search.html">
-            <span class="en">Storing and Searching for Data</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/search/backward-compat.html">
-            <span class="en">Remaining Backward Compatible</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/id-auth/index.html">
-            <span class="en">Remembering Users</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/id-auth/identify.html">
-            <span class="en">Remembering Your User</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/id-auth/authenticate.html">
-            <span class="en">Authenticating to OAuth2 Services</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/id-auth/custom_auth.html">
-            <span class="en">Creating a Custom Account Type</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/sharing/index.html">
-            <span class="en">Sharing Content</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/sharing/send.html">
-            <span class="en">Sending Content to Other Apps</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/sharing/receive.html">
-            <span class="en">Receiving Content from Other Apps</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/sharing/shareaction.html">
-            <span class="en">Adding an Easy Share Action</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/camera/index.html">
-            <span class="en">Capturing Photos</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/camera/photobasics.html">
-            <span class="en">Taking Photos Simply</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/camera/videobasics.html">
-            <span class="en">Recording Videos Simply</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/camera/cameradirect.html">
-            <span class="en">Controlling the Camera</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/multiple-apks/index.html">
-            <span class="en">Maintaining Multiple APKs</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/multiple-apks/api.html">
-            <span class="en">Creating Multiple APKs for Different API Levels</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/multiple-apks/screensize.html">
-            <span class="en">Creating Multiple APKs for Different Screen Sizes</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/multiple-apks/texture.html">
-            <span class="en">Creating Multiple APKs for Different GL Textures</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/multiple-apks/multiple.html">
-            <span class="en">Creating Multiple APKs with 2+ Dimensions</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/backward-compatible-ui/index.html">
-            <span class="en">Creating Backward-Compatible UIs<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/abstracting.html">
-            <span class="en">Abstracting the New APIs</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/new-implementation.html">
-            <span class="en">Proxying to the New APIs</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/older-implementation.html">
-            <span class="en">Creating an Implementation with Older APIs</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/using-component.html">
-            <span class="en">Using the Version-Aware Component</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/enterprise/index.html">
-            <span class="en">Developing for Enterprise</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/enterprise/device-management-policy.html">
-            <span class="en">Enhancing Security with Device Management Policies</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/monetization/index.html">
-            <span class="en">Monetizing Your App</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/monetization/ads-and-ux.html">
-            <span class="en">Advertising without Compromising User Experience</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/design-navigation/index.html">
-            <span class="en">Designing Effective Navigation</span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/design-navigation/screen-planning.html">
-            <span class="en">Planning Screens and Their Relationships</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/design-navigation/multiple-sizes.html">
-            <span class="en">Planning for Multiple Touchscreen Sizes</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/design-navigation/descendant-lateral.html">
-            <span class="en">Providing Descendant and Lateral Navigation</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/design-navigation/ancestral-temporal.html">
-            <span class="en">Providing Ancestral and Temporal Navigation</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/design-navigation/wireframing.html">
-            <span class="en">Putting it All Together: Wireframing the Example App</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/implementing-navigation/index.html">
-            <span class="en">Implementing Effective Navigation<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/implementing-navigation/lateral.html">
-            <span class="en">Implementing Lateral Navigation</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/implementing-navigation/ancestral.html">
-            <span class="en">Implementing Ancestral Navigation</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/implementing-navigation/temporal.html">
-            <span class="en">Implementing Temporal Navigation</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/implementing-navigation/descendant.html">
-            <span class="en">Implementing Descendant Navigation</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-       <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/tv/index.html">
-           <span class="en">Designing for TV<span class="new">&nbsp;new!</span></span>
-           </a>
-        </div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/tv/optimizing-layouts-tv.html">
-            <span class="en">Optimizing Layouts for TV</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/tv/optimizing-navigation-tv.html">
-            <span class="en">Optimizing Navigation for TV</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/tv/unsupported-features-tv.html">
-            <span class="en">Handling Features Not Supported on TV</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-      
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/displaying-bitmaps/index.html">
-            <span class="en">Displaying Bitmaps Efficiently<span class="new">&nbsp;new!</span></span>
-          </a>
-        </div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/load-bitmap.html">
-            <span class="en">Loading Large Bitmaps Efficiently</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/process-bitmap.html">
-            <span class="en">Processing Bitmaps Off the UI Thread</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/cache-bitmap.html">
-            <span class="en">Caching Bitmaps</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/display-bitmap.html">
-            <span class="en">Displaying Bitmaps in Your UI</span>
-          </a></li>
-        </ul>
-      </li>
-
-
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>training/accessibility/index.html">
-            <span class="en">Implementing Accessibility<span class="new">&nbsp;new!</span></span>
-          </a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>training/accessibility/accessible-app.html">
-            <span class="en">Developing Accessible Applications</span>
-          </a>
-          </li>
-          <li><a href="<?cs var:toroot ?>training/accessibility/service.html">
-            <span class="en">Developing Accessibility Services</span>
-          </a>
-          </li>
-        </ul>
-      </li>
-
-    </ul>
-  </li>
-
-
-
-
-  <li>
-    <span class="heading">
-      <span class="en">Technical Resources</span>
-    </span>
-    <ul>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>resources/browser.html?tag=sample">
-            <span class="en">Sample Code</span>
-            <span class="de" style="display:none">Beispielcode</span>
-            <span class="es" style="display:none">Código de ejemplo</span>
-            <span class="fr" style="display:none">Exemple de code</span>
-            <span class="it" style="display:none">Codice di esempio</span>
-            <span class="ja" style="display:none">サンプル コード</span>
-            <span class="zh-CN" style="display:none"></span>
-            <span class="zh-TW" style="display:none"></span>
-          </a></div>
-        <ul id="devdoc-nav-sample-list">
-          <li><a href="<?cs var:toroot ?>resources/samples/get.html">
-                <span class="en">Getting the Samples</span>
-              </a></li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>resources/browser.html?tag=article">
-               <span class="en">Articles</span>
-             </a></div>
-        <ul id="devdoc-nav-article-list">
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>resources/browser.html?tag=tutorial">
-               <span class="en">Tutorials</span>
-               <span class="de" style="display:none">Lernprogramme</span>
-               <span class="es" style="display:none">Tutoriales</span>
-               <span class="fr" style="display:none">Didacticiels</span>
-               <span class="it" style="display:none">Esercitazioni</span>
-               <span class="ja" style="display:none">チュートリアル</span>
-               <span class="zh-CN" style="display:none"></span>
-               <span class="zh-TW" style="display:none"></span>
-             </a></div>
-        <ul id="devdoc-nav-tutorial-list">
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>resources/topics.html">
-               <span class="en">Topics</span>
-             </a></div>
-        <ul id="devdoc-nav-topic-list">
-        </ul>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="heading">
-      <span class="en">Community</span>
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es">Comunidad</span>
-      <span style="display:none" class="fr">Communauté</span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja">コミュニティ</span>
-      <span style="display:none" class="zh-CN">社区</span>
-      <span style="display:none" class="zh-TW">社群</span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>resources/community-groups.html">
-            <span class="en">Developer Forums</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>resources/community-more.html">
-            <span class="en">IRC, G+, Twitter</span>
-          </a></li>
-    </ul>
-  </li>
-<?cs
-  if:android.whichdoc == "online" ?>
-  <li>
-    <span class="heading">
-      <span class="en">Device Dashboard</span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>resources/dashboard/platform-versions.html">
-            <span class="en">Platform Versions</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>resources/dashboard/screens.html">
-            <span class="en">Screen Sizes &amp; Densities</span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>resources/dashboard/opengl.html">
-            <span class="en">OpenGL ES Versions</span>
-          </a></li>
-    </ul>
-  </li><?cs
-  /if
-?>
-
-  <li>
-    <span class="heading">
-      <span class="en">More</span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>resources/faq/commontasks.html">
-            <span class="en">Common Tasks </span>
-          </a></li>
-      <li><a href="<?cs var:toroot ?>resources/faq/troubleshooting.html">
-            <span class="en">Troubleshooting Tips</span>
-          </a></li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>resources/faq/index.html">
-               <span class="en">FAQs</span>
-             </a></div>
-        <ul>
-        <li><a href="<?cs var:toroot ?>resources/faq/framework.html">
-                <span class="en">App Framework FAQ</span>
-                </a></li>
-        <li><a href="<?cs var:toroot ?>resources/faq/licensingandoss.html">
-                <span class="en">Licensing FAQ</span>
-                </a></li>
-        <li><a href="<?cs var:toroot ?>resources/faq/security.html">
-                <span class="en">Security FAQ</span>
-                </a></li>
-        </ul>
-     </li>
-    </ul>
-  </li>
-</ul>
-
-<script type="text/javascript">
-<!--
-    buildToggleLists();
-    changeNavLang(getLangPref());
-//-->
-</script>
diff --git a/docs/html/resources/samples/get.jd b/docs/html/resources/samples/get.jd
deleted file mode 100644
index 751965f..0000000
--- a/docs/html/resources/samples/get.jd
+++ /dev/null
@@ -1,92 +0,0 @@
-page.title=Getting the Samples
-parent.title=Sample Code
-parent.link=../browser.html?tag=sample
-
-@jd:body
-
-<p>Sometimes, the best way to learn how things are done is to look at some
-code.</p>
-
-<p>To help you get started quickly, the Android SDK includes a variety of sample
-code and tutorials that illustrate key concepts and techniques of Android
-application development. For example, the samples show the structure of the
-manifest file and the use of activities, services, resources,
-intents, content providers, and permissions. They also show how to add
-specialized capabilities to your apps, such as Bluetooth and Contacts
-integration, multiple screens support, Live Wallpaper, and more. </p>
-
-<p>The SDK provides the samples both as source code and as browseable HTML, as
-described in the sections below. All of the samples included in the SDK are
-licensed under the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
-2.0 license</a>, so feel free to use any of the code in your own applications as
-needed!</p>
-
-<h3 id="downloading">Downloading the Sample Code</h3>
-
-<p>The SDK sample code is available to you as a set of downloadable SDK
-components, each of which contains the samples for a specific Android platform
-version. Once you have installed the SDK, you can download one or more samples
-component(s) into your SDK environment using the Android SDK Manager
-tool, which is pre-installed in the SDK. </p>
-
-<p>To download the samples, launch the Android SDK Manager tool and
-select one of the samples components from the <strong>Available
-Packages</strong> panel, for example "Samples for SDK API 7". Select
-<strong>Install Selected</strong>, verify and accept the download, then select
-<strong>Install Accepted</strong> to download the component into your SDK. If
-you aren't familiar with the Android SDK Manager and how to launch or
-use it, please read the <a href="{@docRoot}sdk/adding-components.html">Adding
-SDK Components</a> document. </p>
-
-<p>When the download is complete, you can find the samples sources on your
-computer in this location:</p>
-
-<p style="margin-left:2em">
-<code><em>&lt;sdk&gt;</em>/samples/android-&lt;<em>level</em>&gt;/</code>
-</p>
-
-<p>You can easily create new Android projects with the downloaded samples, modify them
-if you'd like, and then run them on an emulator or device. </p>
-
-<p>For example, if you are developing in Eclipse with the ADT Plugin, you can
-create a project for the "API Demos" sample app by starting a new Android
-Project, selecting "Create project from existing source", and then browsing to
-the <code><em>&lt;sdk&gt;</em>/samples/android-&lt;<em>level</em>&gt;/ApiDemos</code>
-directory (the <code>samples</code> directory for the platform version you are
-using).</p>
-
-<p>If you are not working in Eclipse, you can create a project for the API Demos
-sample using the <code>android</code> tool, by executing this command:</p>
-
-<pre class="no-pretty-print">
-android update project -s -n API Demos -t <em>&lt;target_ID></em> -p &lt;<em>path</em>&gt;</em>samples/android-&lt;<em>level</em>&gt;/ApiDemos/
-</pre>
-
-<h3 id="browsing">Browsing the Sample Code</h3>
-
-<p>For your convenience, the SDK provides browseable source code for the latest
-versions of the samples. You can use your browser to navigate through the
-structure of each sample and look at the source code in each of its files. </p>
-
-<p>To browse the samples, go to the <a
-href="{@docRoot}resources/samples/index.html">List of Sample Apps</a> first.
-From there you can read a short summary of each sample application and what
-types of concepts, features, or APIs it includes. Then, use the links provided
-to move through the directories and files of each sample. The browseable source
-is generated from the same source code that is downloadable through the Android
-SDK Manager, as described above. </p>
-
-<p>The browseable samples files are available online, at the Android Developers
-site only and are not included in the downloadable offline documentation.
-Note that, although samples for several platform versions are available for 
-download, only the samples for the latest platform version are browseable online.
-</p>
-
-
-<h3 id="more">More Sample Code</h3>
-
-<p>If you are looking for more sample code, check out
-<a href="http://code.google.com/p/apps-for-android/">apps-for-android</a>, a
-collection of open source applications that demonstrate various Android APIs.</p>
-
-
diff --git a/docs/html/resources/samples/index.jd b/docs/html/resources/samples/index.jd
deleted file mode 100644
index acb80e8..0000000
--- a/docs/html/resources/samples/index.jd
+++ /dev/null
@@ -1,11 +0,0 @@
-page.title=List of Sample Apps
-@jd:body
-
-<script type="text/javascript">
-  window.location = toRoot + "resources/browser.html?tag=sample";
-</script>
-
-<p><strong>This document has moved. Please go to <a
-href="http://developer.android.com/resources/browser.html?tag=sample">List of Sample
-Apps</a>.</strong></p>
-
diff --git a/docs/html/resources/topics.jd b/docs/html/resources/topics.jd
deleted file mode 100644
index b5960ff..0000000
--- a/docs/html/resources/topics.jd
+++ /dev/null
@@ -1,72 +0,0 @@
-page.title=Technical Resource Topics
-@jd:body
-
-<style type="text/css">
-  #resource-topic-table td {
-    border: 0;
-    padding: 0;
-    margin: 0;
-    padding-left: 1em;
-    width: 18em;
-  }
-
-  #resource-topic-table ul {
-    padding: 0;
-    margin: 0;
-  }
-
-  #resource-topic-table li {
-    list-style: none;
-    margin: 0;
-    padding: 0;
-  }
-</style>
-
-<p>
-You can browse the list of technical resources by topic by clicking on the
-links below. Over time, as more topics are added, they will be added to the
-list below.
-</p>
-
-<noscript>
-  <p class="note"><strong>Error:</strong>
-    You must have JavaScript enabled to view this page. Resources are also
-    available offline in the SDK.
-  </p>
-</noscript>
-
-<table id="resource-topic-table">
-  <tr></tr>
-</table>
-
-<script type="text/javascript">
-<!-- 
-(function() {
-  var topics = [];
-  for (var topic in ANDROID_TAGS['topic']) {
-    topics.push({name:topic,title:ANDROID_TAGS['topic'][topic]});
-  }
-  topics.sort(function(x,y){ return (x.title < y.title) ? -1 : 1; });
-  var topicParent = null;
-  for (var i = 0; i < topics.length; i++) {
-    if (topicParent == null || i % 10 == 0) {
-      // create a new column
-      topicParent = $('ul', $('<td><ul>').appendTo('#resource-topic-table tr'));
-    }
-
-    topicParent.append(
-        $('<li>').append(
-          $('<h3>').append(
-            $('<a>')
-              .attr('href', toRoot + "resources/browser.html?tag=" + topics[i].name)
-              .append($('<span>')
-                .addClass('en')
-                .html(topics[i].title)
-              )
-            )
-          )
-        );
-  }
-})();
-//-->
-</script>
\ No newline at end of file
diff --git a/docs/html/resources/tutorials/hello-world.jd b/docs/html/resources/tutorials/hello-world.jd
deleted file mode 100644
index 70ba06c..0000000
--- a/docs/html/resources/tutorials/hello-world.jd
+++ /dev/null
@@ -1,607 +0,0 @@
-page.title=Hello, World
-parent.title=Tutorials
-parent.link=../browser.html?tag=tutorial
-@jd:body
-<div id="qv-wrapper">
-<div id="qv">
-    <h2>In this document</h2>
-    <ol>
-      <li><a href="#platform">Install a Platform</a></li>
-      <li><a href="#avd">Create an AVD</a></li>
-      <li><a href="#create">Create the Project</a></li>
-      <li><a href="#ui">Construct the UI</a></li>
-      <li><a href="#run">Run the Code</a></li>
-      <li><a href="#upgrading">Upgrade the UI to an XML Layout</a></li>
-      <li><a href="#debugging">Debug Your Project</a></li>
-      <li><a href="#noeclipse">Creating the Project Without Eclipse</a></li>
-    </ol>
-  </div>
-</div>
-
-<p>As a developer, you know that the first impression of a development framework is how easy it is
-to write "Hello, World." Well, on Android, it's pretty easy. It's particularly easy if you're using
-Eclipse as your IDE, because we've provided a great plugin that handles your project creation and
-management to greatly speed up your development cycles.</p>
-
-<p>This tutorial assumes that you're using Eclipse. If you're using the command line, see
-<a href="{@docRoot}guide/developing/building/building-cmdline.html">Building and Running from the
-Command Line</a>. You can then return to this tutorial and ignore anything about Eclipse.</p>
-
-<p>Before you start, you should already have the SDK installed, and if you're
-using Eclipse, you should have installed the ADT plugin as well. If you have not
-installed these, see <a href="{@docRoot}sdk/installing.html">Installing the
-Android SDK</a> and return here when you've completed the installation.</p>
-
-<h2 id="platform">Install a Platform</h2>
-
-<p>To run the Hello World application, you need to install at least one Android
-platform in your SDK environment. If you have not already performed this step,
-you need to do it now.</p>
-
-<p>To install a platform in Eclipse:</p>
-
-<ol>
-
-  <li>In the Android SDK Manager, choose <strong>Available
-Packages</strong> in the left panel.</li>
-
-<li>In the right panel, expand the Android Repository list to display
-the components available for installation.</li>
-
-  <li>Select at least one platform to install, and click <strong>Install
-Selected</strong>. If you aren't sure which platform to install, use the latest
-version.</li>
-</ol>
-
-<h2 id="avd">Create an AVD</h2>
-
-<div class="sidebox-wrapper">
-  <div class="sidebox">
-    <p>To learn more about how to use AVDs and the options
-       available to you, see <a href="{@docRoot}guide/developing/devices/index.html">Managing
-       Virtual Devices</a>.</p>
-  </div>
-</div>
-
-<p>In this tutorial, you will run your application in the Android Emulator.
-Before you can launch the emulator, you must create an
-Android Virtual Device (AVD). An AVD defines the system image and
-device settings used by the emulator.</p>
-
-
-
-<p>To create an AVD:</p>
-<ol>
-  <li>In Eclipse, select <strong>Window &gt; AVD Manager</strong>.</li>
-  <li>Select <strong>Virtual Devices</strong> in the left panel.</li>
-
-  <li>Click <strong>New...</strong>.
-    <p>The <strong>Create New AVD</strong> dialog appears.</p>
-  </li>
-  <li>Type the name of the AVD, such as "my_avd".</li>
-  <li>Choose a target.
-    <p>The target is the platform (that is, the version of the Android SDK, such as 2.3.3) you want
-    to run on the emulator. For this tutorial, choose the latest platform that you have installed
-    and ignore the rest of the fields.</p>
-  </li>
-  <li>Click <strong>Create AVD</strong>.</li>
-</ol>
-<h2 id="create">Create a New Android Project</h2>
-
-<p>After you've created an AVD you can move to the next step and start a new Android project in
-Eclipse.</p>
-
-<ol>
-    <li>In Eclipse, select <strong>File &gt; New &gt; Project...</strong>.
-      <p>If the ADT
-      Plugin for Eclipse has been successfully installed, the resulting dialog
-      should have a folder labeled "Android" which should contain
-      "Android Project". (After you create one or more Android projects, an entry for
-      "Android XML File" will also be available.)</p>
-    </li>
-
-    <li>Select "Android Project" and click <strong>Next</strong>.<br/>
-      <a href="images/hello_world_0.png"><img src="images/hello_world_0.png" style="height:230px" alt="" /></a>
-    </li>
-
-    <li>Fill in the project details with the following values:
-        <ul>
-          <li><em>Project name:</em> HelloAndroid</li>
-          <li><em>Build Target:</em> Select a platform version that is equal to or lower than the
-          target you chose for your AVD.</li>
-          <li><em>Application name:</em> Hello, Android</li>
-          <li><em>Package name:</em> com.example.helloandroid (or your own private namespace)</li>
-          <li><em>Create Activity:</em> HelloAndroid</li>
-        </ul>
-        <p>Click <strong>Finish</strong>.</p>
-
-        <a href="images/hello_world_1.png"><img src="images/hello_world_1.png" style="height:400px" alt="" /></a>
-
-        <p>Here is a description of each field:</p>
-
-        <dl>
-            <dt><em>Project Name</em></dt>
-                <dd>This is the Eclipse project name &mdash; the name of the directory
-                that contains the project files.</dd>
-            <dt><em>Build Target</em></dt>
-                <dd>This is the version of the Android SDK that you're using to build your
-                application. For example, if you choose Android 2.1, your application will be
-                compiled against the Android 2.1 platform library. The target you choose here
-                does not have to match the target you chose for your AVD; however, the target must
-                be equal to or lower than the target you chose for your AVD. Android
-                applications are forward-compatible, which means an application will run on the
-                platform against which it is built as well as all platforms that are released in the
-                future. For example, an application that is built against the 2.1 platform library
-                will run normally on an AVD or device that is running the 2.3.3. The reverse is not
-                true.</dd>
-            <dt><em>Application Name</em></dt>
-                <dd>This is the human-readable title for your application &mdash; the name that
-                appears on the Android device.</dd>
-            <dt><em>Package Name</em></dt>
-                <dd>This is the package namespace (following the same rules as for
-                  packages in the Java programming language) that you want all your source code to
-                  reside under. This also sets the package name under which the stub
-                  Activity is generated.
-                  <p>Your package name must be unique across
-                  all packages installed on the Android system; for this reason, it's
-                  important to use a standard domain-style package for your
-                  applications.  The example above uses the "com.example" namespace, which is
-                  a namespace reserved for example documentation &mdash;
-                  when you develop your own applications, you should use a namespace that's
-                  appropriate to your organization or entity.</p></dd>
-            <dt><em>Create Activity</em></dt>
-                <dd>This is the name for the class stub that is generated by the plugin.
-                This is a subclass of Android's {@link android.app.Activity} class.  An
-                Activity is simply a class that can run and do work. It can create a UI if it
-                chooses, but it doesn't need to. As the checkbox suggests, this is optional, but an
-                Activity is almost always used as the basis for an application.</dd>
-            <dt><em>Min SDK Version</em></dt>
-                <dd>This value specifies the minimum API Level on which your application will run.
-                The <em>Min SDK Version</em> should be the same as the <em>Build Target</em> you
-                chose. For example, if the <em>Build Target</em> is Android 2.1, then the <em>Min
-                SDK Version</em> should be 7 or lower (it can never be higher than 7). For more
-                information, see
-                <a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a>.
-               </dd>
-        </dl>
-
-        <p><em>Other fields</em>: The checkbox for "Use default location" allows you to change
-        the location on disk where the project's files are generated and stored.</p>
-    </li>
-</ol>
-
-<p>Your Android project is now ready. It should be visible in the Package Explorer on the left. Open
-the <code>HelloAndroid.java</code> file, located inside <em>HelloAndroid > src >
-com.example.helloandroid</em>). It should look like this:</p>
-
-<pre>
-package com.example.helloandroid;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class HelloAndroid extends Activity {
-    /** Called when the activity is first created. */
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-    }
-}</pre>
-
-<p>Notice that the class is based on the {@link android.app.Activity} class. An Activity is a
-single application entity that is used to perform actions. An application may have many separate
-activities, but the user interacts with them one at a time. The
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method
-is called by the Android system when your Activity starts &mdash;
-it is where you should perform all initialization and UI setup. An activity is not required to
-have a user interface, but usually does.</p>
-
-<p>Now let's modify some code! </p>
-
-
-<h2 id="ui">Construct the UI</h2>
-
-<p>Take a look at the revised code below and then make the same changes to your HelloAndroid class.
-The bold items are lines that have been added.</p>
-
-<pre>
-package com.example.helloandroid;
-
-import android.app.Activity;
-import android.os.Bundle;
-<strong>import android.widget.TextView;</strong>
-
-public class HelloAndroid extends Activity {
-   /** Called when the activity is first created. */
-   &#64;Override
-   public void onCreate(Bundle savedInstanceState) {
-       super.onCreate(savedInstanceState);
-       <strong>TextView tv = new TextView(this);
-       tv.setText(&quot;Hello, Android&quot;);
-       setContentView(tv);</strong>
-   }
-}</pre>
-
-<p class="note"><strong>Tip:</strong> An easy way to add import packages to your project is
-to press <strong>Ctrl-Shift-O</strong> (<strong>Cmd-Shift-O</strong>, on Mac). This is an Eclipse
-shortcut that identifies missing packages based on your code and adds them for you. You may have
-to expand the <code>import</code> statements in your code for this to work.</p>
-
-<p>An Android user interface is composed of hierarchies of objects called
-Views. A {@link android.view.View} is a drawable object used as an element in your UI layout,
-such as a button, image, or (in this case) a text label. Each of these objects is a subclass
-of the View class and the subclass that handles text is {@link android.widget.TextView}.</p>
-
-<p>In this change, you create a TextView with the class constructor, which accepts
-an Android {@link android.content.Context} instance as its parameter. A
-Context is a handle to the system; it provides services like
-resolving resources, obtaining access to databases and preferences, and so
-on. The Activity class inherits from Context, and because your
-HelloAndroid class is a subclass of Activity, it is also a Context. So, you can
-pass <code>this</code> as your Context reference to the TextView.</p>
-
-<p>Next, you define the text content with
-{@link android.widget.TextView#setText(CharSequence) setText()}.</p>
-
-<p>Finally, you pass the TextView to
-{@link android.app.Activity#setContentView(View) setContentView()} in order to
-display it as the content for the Activity UI. If your Activity doesn't
-call this method, then no UI is present and the system will display a blank
-screen.</p>
-
-<p>There it is &mdash; "Hello, World" in Android! The next step, of course, is
-to see it running.</p>
-
-
-<h2 id="run">Run the Application</h2>
-
-<p>The Eclipse plugin makes it easy to run your applications:</p>
-
-<ol>
-  <li>Select <strong>Run > Run</strong>.</li>
-  <li>Select "Android Application".</li>
-</ol>
-
-<div class="sidebox-wrapper">
-  <div class="sidebox">
-    <p>To learn more about creating and editing run configurations in Eclipse, refer to
-    <a href="{@docRoot}guide/developing/eclipse-adt.html#RunConfig">Developing In Eclipse,
-    with ADT</a>.</p>
-  </div>
-</div>
-
-<p>The Eclipse plugin automatically creates a new run configuration for your project
-and then launches the Android Emulator. Depending on your environment, the Android
-emulator might take several minutes to boot fully, so please be patient. When the
-emulator is booted, the Eclipse plugin installs your application
-and launches the default Activity. You should now see something like this:</p>
-
-  <a href="images/hello_world_5.png"><img src="images/hello_world_5.png" style="height:230px" alt="" /></a>
-
-<p>The "Hello, Android" you see in the grey bar is actually the application title. The Eclipse plugin
-creates this automatically (the string is defined in the <code>res/values/strings.xml</code> file and referenced
-by your <code>AndroidManifest.xml</code> file). The text below the title is the actual text that you have
-created in the TextView object.</p>
-
-<p>That concludes the basic "Hello World" tutorial, but you should continue reading for some more
-valuable information about developing Android applications.</p>
-
-
-<h2 id="upgrading">Upgrade the UI to an XML Layout</h2>
-
-<p>The "Hello, World" example you just completed uses what is called a "programmatic"
-UI layout. This means that you constructed and built your application's UI
-directly in source code. If you've done much UI programming, you're
-probably familiar with how brittle that approach can sometimes be: small
-changes in layout can result in big source-code headaches. It's also
-easy to forget to properly connect Views together, which can result in errors in
-your layout and wasted time debugging your code.</p>
-
-<p>That's why Android provides an alternate UI construction model: XML-based
-layout files. The easiest way to explain this concept is to show an
-example. Here's an XML layout file that is identical in behavior to the
-programmatically-constructed example:</p>
-
-<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;TextView xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-  android:id=&quot;@+id/textview&quot;
-  android:layout_width=&quot;fill_parent&quot;
-  android:layout_height=&quot;fill_parent&quot;
-  android:text=&quot;@string/hello&quot;/&gt;</pre>
-
-<p>The general structure of an Android XML layout file is simple: it's a tree
-of XML elements, wherein each node is the name of a View class
-(this example, however, is just one View element). You can use the
-name of any class that extends {@link android.view.View} as an element in your XML layouts,
-including custom View classes you define in your own code. This
-structure makes it easy to quickly build up UIs, using a more simple
-structure and syntax than you would use in a programmatic layout. This model is inspired
-by the web development model, wherein you can separate the presentation of your
-application (its UI) from the application logic used to fetch and fill in data.</p>
-
-<p>In the above XML example, there's just one View element: the <code>TextView</code>,
-which has five XML attributes.  Here's a summary of what they mean:</p>
-
-<table>
-    <tbody>
-        <tr>
-            <th>
-                Attribute
-            </th>
-            <th>
-                Meaning
-            </th>
-        </tr>
-        <tr>
-            <td>
-                <code>xmlns:android</code>
-            </td>
-            <td>
-                This is an XML namespace declaration that tells the Android tools that you are going to refer to common attributes defined in the Android namespace. The outermost tag in every Android layout file must have this attribute.<br>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <code>android:id</code>
-            </td>
-            <td>
-                This attribute assigns a unique identifier to the <code>TextView</code> element.
-                You can use the assigned ID to reference this View from your source code or from other
-                XML resource declarations.
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <code>android:layout_width</code>
-            </td>
-            <td>
-                This attribute defines how much of the available width on the screen this View should consume.
-                In this case, it's the only View so you want it to take up the entire screen, which is what a value of "fill_parent" means.<br>
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <code>android:layout_height</code>
-            </td>
-            <td>
-                This is just like android:layout_width, except that it refers to available screen height.
-            </td>
-        </tr>
-        <tr>
-            <td>
-                <code>android:text</code>
-            </td>
-            <td>
-                This sets the text that the TextView should display. In this example, you use a string
-                resource instead of a hard-coded string value.
-                The <em>hello</em> string is defined in the <em>res/values/strings.xml</em> file. This is the
-                recommended practice for inserting strings to your application, because it makes the localization
-                of your application to other languages graceful, without need to hard-code changes to the layout file.
-                For more information, see <a href="{@docRoot}guide/topics/resources/resources-i18n.html">Resources
-                and Internationalization</a>.
-            </td>
-        </tr>
-    </tbody>
-</table>
-
-
-<p>These XML layout files belong in the <code>res/layout/</code> directory of your project. The "res" is
-short for "resources" and the directory contains all the non-code assets that
-your application requires. In addition to layout files, resources also include assets
-such as images, sounds, and localized strings.</p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox">
-  <h2>Landscape layout</h2>
-  <p>When you want a different design for landscape, put your layout XML file
-  inside /res/layout-land. Android will automatically look here when the layout changes.
-  Without this special landscape layout defined, Android will stretch the default layout.</p>
-</div>
-</div>
-
-<p>The Eclipse plugin automatically creates one of these layout files for you: main.xml.
-In the "Hello World" application you just completed, this file was ignored and you created a
-layout programmatically. This was meant to teach you more
-about the Android framework, but you should almost always define your layout
-in an XML file instead of in your code.
-The following procedures will instruct you how to change your
-existing application to use an XML layout.</p>
-
-<ol>
-  <li>In the Eclipse Package Explorer, expand the
-<code>/res/layout/</code> folder and open <code>main.xml</code> (once opened, you might need to click
-the "main.xml" tab at the bottom of the window to see the XML source). Replace the contents with
-the following XML:
-
-<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;TextView xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
-  android:id=&quot;@+id/textview&quot;
-  android:layout_width=&quot;fill_parent&quot;
-  android:layout_height=&quot;fill_parent&quot;
-  android:text=&quot;@string/hello&quot;/&gt;</pre>
-<p>Save the file.</p>
-</li>
-
-<li>Inside the <code>res/values/</code> folder, open <code>strings.xml</code>.
-This is where you should save all default text strings for your user interface. If you're using Eclipse, then
-ADT will have started you with two strings, <em>hello</em> and <em>app_name</em>.
-Revise <em>hello</em> to something else. Perhaps "Hello, Android! I am a string resource!"
-The entire file should now look like this:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
-    &lt;string name="hello">Hello, Android! I am a string resource!&lt;/string>
-    &lt;string name="app_name">Hello, Android&lt;/string>
-&lt;/resources>
-</pre>
-</li>
-
-<li>Now open and modify your <code>HelloAndroid</code> class and use the
-XML layout. Edit the file to look like this:
-<pre>
-package com.example.helloandroid;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class HelloAndroid extends Activity {
-    /** Called when the activity is first created. */
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-    }
-}</pre>
-
-<p>When you make this change, type it by hand to try the
-code-completion feature. As you begin typing "R.layout.main" the plugin will offer you
-suggestions. You'll find that it helps in a lot of situations.</p>
-
-<p>Instead of passing <code>setContentView()</code> a View object, you give it a reference
-to the layout resource.
-The resource is identified as <code>R.layout.main</code>, which is actually a compiled object representation of
-the layout defined in <code>/res/layout/main.xml</code>. The Eclipse plugin automatically creates this reference for
-you inside the project's R.java class. If you're not using Eclipse, then the R.java class will be generated for you
-when you run Ant to build the application. (More about the R class in a moment.)</p>
-</li>
-</ol>
-
-<p>Now re-run your application &mdash; because you've created a launch configuration, all
-you need to do is click the green arrow icon to run, or select
-<strong>Run &gt; Run History &gt; Android Activity</strong>. Other than the change to the TextView
-string, the application looks the same. After all, the point was to show that the two different
-layout approaches produce identical results.</p>
-
-<p class="note"><strong>Note:</strong> You may have to unlock the screen on the emulator to see
-your application &mdash; just as you would unlock the screen on a device. If you have problems
-running the emulator, see <a href="{@docRoot}guide/developing/devices/emulator.html">Using the
-Android Emulator</a>.</p>
-
-<p>Continue reading for an introduction
-to debugging and a little more information on using other IDEs. When you're ready to learn more,
-read <a href="{@docRoot}guide/topics/fundamentals.html">Application
-Fundamentals</a> for an introduction to all the elements that make Android applications work.
-Also refer to the <a href="{@docRoot}guide/index.html">Developer's Guide</a>
-introduction page for an overview of the <em>Dev Guide</em> documentation.</p>
-
-
-<div class="special">
-<h3>R class</h3>
-<p>In Eclipse, open the file named <code>R.java</code> (in the <code>gen/</code> [Generated Java Files] folder).
-It should look something like this:</p>
-
-<pre>
-package com.example.helloandroid;
-
-public final class R {
-    public static final class attr {
-    }
-    public static final class drawable {
-        public static final int icon=0x7f020000;
-    }
-    public static final class id {
-        public static final int textview=0x7f050000;
-    }
-    public static final class layout {
-        public static final int main=0x7f030000;
-    }
-    public static final class string {
-        public static final int app_name=0x7f040001;
-        public static final int hello=0x7f040000;
-    }
-}
-</pre>
-
-<p>A project's <code>R.java</code> file is an index into all the resources defined in the
-file. You use this class in your source code as a sort of short-hand
-way to refer to resources you've included in your project. This is
-particularly powerful with the code-completion features of IDEs like Eclipse
-because it lets you quickly and interactively locate the specific reference
-you're looking for.</p>
-
-<p>It's possible yours looks slightly different than this (perhaps the hexadecimal values are
-different).
-For now, notice the inner class named "layout", and its
-member field "main". The Eclipse plugin noticed the XML
-layout file named main.xml and generated a class for it here.  As you add other
-resources to your project (such as strings in the <code>res/values/string.xml</code> file or drawables inside
-the <code>res/drawable/</code> directory) you'll see <code>R.java</code> change to keep up.</p>
-<p>When not using Eclipse, this class file will be generated for you at build time (with the Ant tool).</p>
-<p><em>You should never edit this file by hand.</em></p>
-</div>
-
-<h2 id="debugging">Debug Your Project</h2>
-
-<p>The Android Plugin for Eclipse also has excellent integration with the Eclipse
-debugger. To demonstrate this, introduce a bug into
-your code. Change your HelloAndroid source code to look like this:</p>
-
-<pre>
-package com.example.helloandroid;
-
-import android.app.Activity;
-import android.os.Bundle;
-
-public class HelloAndroid extends Activity {
-    /** Called when the activity is first created. */
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        Object o = null;
-        o.toString();
-        setContentView(R.layout.main);
-    }
-}</pre>
-
-<p>This change simply introduces a NullPointerException into your code. If
-you run your application again, you'll eventually see this:</p>
-
-  <a href="images/hello_world_8.png"><img src="images/hello_world_8.png" style="height:230px" alt="" /></a>
-
-<p>Press "Force Quit" to terminate the application and close the emulator window.</p>
-
-<p>To find out more about the error, set a breakpoint in your source code
-on the line <code>Object o = null;</code> (double-click on the marker bar next to the source code line). Then select <strong>Run &gt; Debug History &gt; Hello,
-Android</strong> from the menu to enter debug mode. Your app will restart in the
-emulator, but this time it will suspend when it reaches the breakpoint you
-set. You can then step through the code in Eclipse's Debug Perspective,
-just as you would for any other application.</p>
-
-  <a href="images/hello_world_9.png"><img src="images/hello_world_9.png" style="height:230px" alt="" /></a>
-
-
-<h2 id="noeclipse">Creating the Project without Eclipse</h2>
-
-  <p>If you don't use Eclipse (such as if you prefer another IDE, or simply use text
-  editors and command line tools) then the Eclipse plugin can't help you.
-  Don't worry though &mdash; you don't lose any functionality just because you don't
-  use Eclipse.</p>
-
-  <p>The Android Plugin for Eclipse is really just a wrapper around a set of tools
-  included with the Android SDK. (These tools, like the emulator, aapt, adb,
-  ddms, and others are <a href="{@docRoot}guide/developing/tools/index.html">documented elsewhere.</a>)
-  Thus, it's possible to
-  wrap those tools with another tool, such as an 'ant' build file.</p>
-
-  <p>The Android SDK includes a tool named "android" that can be
-  used to create all the source code and directory stubs for your project, as well
-  as an ant-compatible <code>build.xml</code> file. This allows you to build your project
-  from the command line, or integrate it with the IDE of your choice.</p>
-
-  <p>For example, to create a HelloAndroid project similar to the one created
-  in Eclipse, use this command:</p>
-
-  <pre>
-android create project \
-    --package com.example.helloandroid \
-    --activity HelloAndroid \
-    --target 2 \
-    --path <em>&lt;path-to-your-project></em>/HelloAndroid
-</pre>
-
-  <p>This creates the required folders and files for the project at the location
-  defined by the <em>path</em>.</p>
-
-  <p>For more information on how to use the SDK tools to create and build projects, please read
-<a href="{@docRoot}guide/developing/other-ide.html">Developing in Other IDEs</a>.</p>
\ No newline at end of file
diff --git a/docs/html/resources/tutorials/index.html b/docs/html/resources/tutorials/index.html
deleted file mode 100644
index 4881acf..0000000
--- a/docs/html/resources/tutorials/index.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<html>
-<head>
-<meta http-equiv="refresh" content="0;url=../index.html">
-</head>
-<body>
-<a href="../index.html">click here</a> if you are not redirected.
-</body>
-</html>
\ No newline at end of file
diff --git a/docs/html/resources/tutorials/localization/index.jd b/docs/html/resources/tutorials/localization/index.jd
deleted file mode 100755
index de4433b..0000000
--- a/docs/html/resources/tutorials/localization/index.jd
+++ /dev/null
@@ -1,595 +0,0 @@
-page.title=Hello, L10N
-parent.title=Tutorials
-parent.link=../../browser.html?tag=tutorial
-@jd:body
-
-<div id="qv-wrapper">
-  <div id="qv">
-    <h2>In this document</h2>
-    <ol>
-      <li><a href="#unlocalized">Create an Unlocalized App</a>
-        <ol>
-          <li><a href="#create">Create the Project and Layout</a></li>
-          <li><a href="#default">Create Default Resources</a></li>
-        </ol>
-      </li>
-      <li><a href="#run">Run the Unlocalized App</a></li>
-      <li><a href="#plan">Plan the Localization</a></li>
-      <li><a href="#localize">Localize the App</a>
-        <ol>
-          <li><a href="#localize_strings">Localize the Strings</a></li>
-          <li><a href="#localize_images">Localize the Images</a></li>
-        </ol>
-      </li>
-      <li><a href="#test_localized">Run and Test the Localized App</a></li>
-    </ol>
-    <h2>See also</h2>
-    <ol>
-<li>{@link android.widget.Button}</li>
-<li>{@link android.widget.TextView}</li>
-<li>{@link android.app.AlertDialog}</li>
-</ol>
-  </div>
-</div>
-
-<p>In this tutorial, we will create a Hello, L10N application that uses the
-Android framework to selectively load resources. Then we will localize the
-application by adding resources to the <code>res/</code> directory. </p>
-
-<p>This tutorial uses the practices described in the <a
-href="{@docRoot}guide/topics/resources/localization.html">Localization</a>
-document. </p>
-
-
-<h2 id="unlocalized">Create an Unlocalized Application</h2>
-
-<p>The first version of the Hello, L10N application will use only the default
-resource directories (<code>res/drawable</code>, <code>res/layout</code>, and
-<code>res/values</code>). These resources are not localized &#8212; they are the
-graphics, layout, and strings  that we expect the application to use most often.
-When a user runs the application in the default locale, or in a locale that the
-application does not specifically support, the application will load resources
-from these default directories.</p>
-
-<p>The application consists of a simple user interface that displays two
-{@link android.widget.TextView} objects and a {@link android.widget.Button} image with a
-  background image of a national flag. When clicked, the button displays an
-{@link android.app.AlertDialog} object that shows additional text. </p>
-
-<h3 id="create">Create the Project and Layout</h3>
-
-<p>For this application, the default language will be British English and the
-default location the United Kingdom. </p>
-
-<ol>
-  <li>Start a new project and Activity called &quot;HelloL10N.&quot; If you are
-using Eclipse, fill out these values in the New Android Project wizard:
-    <ul>
-      <li><em>Project name:</em> HelloL10N</li>
-      <li><em>Application name:</em> Hello, L10N</li>
-      <li><em>Package name:</em> com.example.hellol10n (or your own private
-namespace)</li>
-      <li><em>Create Activity:</em> HelloL10N</li>
-      <li><em>Min SDK Version:</em> 3</li>
-    </ul>
-    <p>The basic  project contains a <code>res/</code> directory with
-subdirectories for the three most common types of resources: graphics
-(<code>res/drawable/</code>), layouts (<code>res/layout/</code>) and strings
-(<code>res/values/</code>). Most of the localization work you do later in this
-tutorial will involve adding more subdirectories to the <code>res/</code>
-directory.</p>
-    <img src="{@docRoot}images/hello_l10n/plain_project.png" alt="plain project" width="194"
-height="229">
-  </li>
-  <li>Open the <code>res/layout/main.xml</code> file and replace it with the
-following code:
-    <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:orientation=&quot;vertical&quot;
-    android:layout_width=&quot;fill_parent&quot;
-    android:layout_height=&quot;fill_parent&quot;
-    &gt;
-&lt;TextView
-    android:layout_width=&quot;fill_parent&quot; 
-    android:layout_height=&quot;wrap_content&quot;
-    android:gravity=&quot;center_horizontal&quot;
-    android:text=&quot;@string/text_a&quot;
-    /&gt;
-&lt;TextView
-    android:layout_width=&quot;fill_parent&quot;
-    android:layout_height=&quot;wrap_content&quot;
-    android:gravity=&quot;center_horizontal&quot;
-    android:text=&quot;@string/text_b&quot;
-    /&gt;
-&lt;Button
-    android:id=&quot;@+id/flag_button&quot;
-    android:layout_width=&quot;wrap_content&quot;
-    android:layout_height=&quot;wrap_content&quot;
-    android:layout_gravity=&quot;center&quot;
-    /&gt;
-&lt;/LinearLayout&gt;
-    </pre>
-
-  <p>The LinearLayout has two {@link android.widget.TextView} objects that will
-display localized text and one  {@link android.widget.Button} that shows a flag.
-</p>
-  </li>
-</ol>
-
-<h3 id="default">Create Default Resources</h3>
-
-<p>The layout refers to resources that need to be defined. </p>
-
-<ol>
-  <li>Create default text strings. To do this, open the <code>res/values/strings.xml</code> file and replace it with the following code:<br>
-    <pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;resources&gt;
-    &lt;string name=&quot;app_name&quot;&gt;Hello, L10N&lt;/string&gt;
-    &lt;string name=&quot;text_a&quot;&gt;Shall I compare thee to a summer&quot;'&quot;s day?&lt;/string&gt;
-    &lt;string name=&quot;text_b&quot;&gt;Thou art more lovely and more temperate.&lt;/string&gt;
-    &lt;string name=&quot;dialog_title&quot;&gt;No Localisation&lt;/string&gt;
-    &lt;string name=&quot;dialog_text&quot;&gt;This dialog box&quot;'&quot;s strings are not localised. For every locale, the text here will come from values/strings.xml.&lt;/string&gt;
-&lt;/resources&gt;</pre>
-
-  <p>This code provides British English text for each string that the application
-will use. When we localize this application, we will provide alternate text in
-German, French, and Japanese for some of the strings.</p>
-  </li>
-  <li>Add a default flag graphic to the <code>res/drawable</code> folder by
-saving <a href="../../../images/hello_l10n/flag.png">flag.png</a> as
-<code>res/drawable/flag.png</code>.  When the application is not localized, it
-will show a British flag.<br>
-    
-  </li>
-  <li>Open HelloL10N.java (in the <code>src/</code> directory) and add the
-following code inside the <code>onCreate()</code> method (after
-<code>setContentView</code>).
-
-    <pre>// assign flag.png to the button, loading correct flag image for current locale
-Button b;
-(b = (Button)findViewById(R.id.flag_button)).setBackgroundDrawable(this.getResources().getDrawable(R.drawable.flag));
-
-// build dialog box to display when user clicks the flag
-AlertDialog.Builder builder = new AlertDialog.Builder(this);
-builder.setMessage(R.string.dialog_text)
-    .setCancelable(false)
-    .setTitle(R.string.dialog_title)
-    .setPositiveButton("Done", new DialogInterface.OnClickListener() {
-        public void onClick(DialogInterface dialog, int id) {
-        dialog.dismiss();
-        }
-    });
-final AlertDialog alert = builder.create();
-
-// set click listener on the flag to show the dialog box 
-b.setOnClickListener(new View.OnClickListener() {
-    public void onClick(View v) {
-	alert.show();
-    }
-    });</pre>
-
-    <p class="note"><strong>Tip:</strong> In Eclipse, use
-<strong>Ctrl-Shift-O</strong> (<strong>Cmd-Shift-O</strong>, on Mac) to find and
-add missing import packages to your project, then save the HelloL10N.java
-file.</p>
-
-    <p>The code that you added does the following:</p>
-
-    <ul>
-      <li>It assigns the correct flag icon to the button. 
-        For now, no resources are defined other than the default, so this code
-will always assign the contents of <code>res/drawable/flag.png</code> (the
-British flag) as the flag icon, no matter what the locale. Once we add more
-flags for different locales, this code will sometimes assign a different flag.
-</li>
-      <li>It creates an {@link android.app.AlertDialog} object and sets a click listener so that when the
-user clicks the button, the AlertDialog will display. 
-        We will not localize the dialog text; 
-the AlertDialog will always display the <code>dialog_text</code> that is located
-within <code>res/values/strings.xml</code>. </li>
-    </ul>
-
-  </li>
-</ol>
-
-<p>The project structure now looks like this:</p>
-
-  <img src="{@docRoot}images/hello_l10n/nonlocalized_project.png" alt="nonlocalized" width="394"
-height="320">
-
-<p class="note"><strong>Tip:</strong> If you will want to run the application on
-a device and not just on an emulator, open <code>AndroidManifest.xml</code> and
-add <code>android:debuggable="true"</code> inside the
-<code>&lt;application&gt;</code> element. For information about setting up the
-device itself so it can run applications from your system, see <a
-href="{@docRoot}guide/developing/device.html">Developing on a Device</a>.</p>
-
-
-<h2 id="run">Run the Unlocalized Application</h2>
-
-<p>Save the project and run the application to see how it works. No matter what
-locale your device or emulator is set to, the application runs the same way. It
-should look something like this:</p>
-
-<table border="0" cellspacing="0" cellpadding="30">
-  <tr>
-    <th scope="col">The unlocalized application, running in any locale:</th>
-    <th scope="col">After clicking the flag, in any locale:</th>
-  </tr>
-  <tr>
-    <td valign="top"><img src="{@docRoot}images/hello_l10n/nonlocalized_screenshot1.png"
-alt="nonlocalized" width="321" height="366"></td>
-    <td><img src="{@docRoot}images/hello_l10n/nonlocalized_screenshot2.png" alt="nonlocalized2"
-width="321" height="366"></td>
-  </tr>
-</table>
-<h2 id="plan">Plan the Localization</h2>
-<p>The first step in localizing an application is to plan how the application
-will render differently in different locales. In this application, the default 
-locale will be the United Kingdom. We will add some locale-specific information
-for Germany, France, Canada, Japan, and the United States. Table 1 shows the
-plan for how the application will appear in different locales.</p>
-
-<p class="caption">Table 1</p>
-
-<table border="0" cellspacing="0" cellpadding="10">
-  <tr>
-    <th scope="col" valign="bottom">Region /<br />
-    Language</th>
-    <th scope="col">United Kingdom</th>
-    <th scope="col">Germany</th>
-    <th scope="col">France</th>
-    <th scope="col">Canada</th>
-    <th scope="col">Japan</th>
-    <th scope="col">United States</th>
-    <th scope="col">Other Location</th>
-  </tr>
-  <tr>
-    <th scope="row"><br>
-    English</th>
-    <td> British English text; British flag <em>(default)</em></td>
-    <td><em>-</em></td>
-    <td><em>-</em></td>
-    <td> British English text; Canadian flag</td>
-    <td>-</td>
-    <td> British English text; U.S. flag</td>
-    <td> British English text; British flag <em>(default)</em></td>
-  </tr>
-  <tr>
-    <th scope="row">German</th>
-    <td>-</td>
-    <td>German text for <code>app_name</code>, <code>text_a</code> and
-<code>text_b</code>; German flag</td>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>German text for <code>app_name</code>, <code>text_a</code> and
-<code>text_b</code>; British flag</td>
-  </tr>
-  <tr>
-    <th scope="row">French</th>
-    <td>-</td>
-    <td>-</td>
-    <td>French text for <code>app_name</code>, <code>text_a</code> and
-<code>text_b</code>; French flag</td>
-    <td>French text for <code>app_name</code>, <code>text_a</code> and
-<code>text_b</code>; Canadian flag</td>
-    <td>-</td>
-    <td>-</td>
-    <td>French text for <code>app_name</code>, <code>text_a</code> and
-<code>text_b</code>; British flag</td>
-  </tr>
-  <tr>
-    <th scope="row">Japanese</th>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>Japanese text for <code>text_a</code> and <code>text_b</code>; Japanese
-flag</td>
-    <td>-</td>
-    <td>Japanese text for <code>text_a</code> and <code>text_b</code>; British
-flag</td>
-  </tr>
-  <tr>
-    <th scope="row">Other Language</th>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td>-</td>
-    <td> British English text; British flag <em>(default)</em></td>
-  </tr>
-</table>
-
-<p class="note"> Note that other behaviors are possible; for example, the
-application could support Canadian English or U.S. English text. But given the
-small amount of text involved, adding more versions of English  would not  make
-this application  more useful.</p>
-
-<p>As shown in the table above, the plan calls for five flag icons in addition
-to the British flag that is already in the <code>res/drawable/</code> folder. It
-also calls for three  sets of text strings other than the text  that is in
-<code>res/values/strings.xml</code>.</p>
-
-<p>Table 2 shows where the needed text strings and  flag icons will go, and
-specifies which ones will be loaded for which locales. (For more about the
-locale codes, <em></em>see <a
-href="{@docRoot}guide/topics/resources/resources-i18n.html#AlternateResources">
-Alternate Resources</a>.)</p>
-<p class="caption" id="table2">Table 2</p>
-
-<table border="1" cellspacing="0" cellpadding="5">
-  <tr>
-    <th scope="col">Locale Code</th>
-    <th scope="col">Language / Country</th>
-    <th scope="col">Location of strings.xml</th>
-    <th scope="col">Location of flag.png</th>
-  </tr>
-  <tr>
-    <td><em>Default</em></td>
-    <td>English / United Kingdom</td>
-    <td>res/values/</td>
-    <td>res/drawable/</td>
-  </tr>
-  <tr>
-    <td>de-rDE</td>
-    <td>German / Germany</td>
-    <td>res/values-de/</td>
-    <td>res/drawable-de-rDE/</td>
-  </tr>
-  <tr>
-    <td>fr-rFR</td>
-    <td>French / France</td>
-    <td>res/values-fr/</td>
-    <td>res/drawable-fr-rFR/</td>
-  </tr>
-  <tr>
-    <td>fr-rCA</td>
-    <td>French / Canada</td>
-    <td>res/values-fr/</td>
-    <td>res/drawable-fr-rCA/</td>
-  </tr>
-  <tr>
-    <td>en-rCA</td>
-    <td>English / Canada</td>
-    <td><em>(res/values/)</em></td>
-    <td>res/drawable-en-rCA/</td>
-  </tr>
-  <tr>
-    <td>ja-rJP</td>
-    <td>Japanese / Japan</td>
-    <td>res/values-ja/</td>
-    <td>res/drawable-ja-rJP/</td>
-  </tr>
-  <tr>
-    <td>en-rUS</td>
-    <td>English / United States</td>
-    <td><em>(res/values/)</em></td>
-    <td>res/drawable-en-rUS/</td>
-  </tr>
-</table>
-
-<p class="note"><strong>Tip: </strong>A folder qualifer cannot specify a region
-without a language. Having a folder named <code>res/drawable-rCA/</code>, 
-for example, will prevent the application from compiling. </p>
-
-<p>At run time, the application will select a set of resources to load based on the locale
-that is set in the user's device. In cases where no locale-specific resources
-are available, the application will fall back on the defaults. </p>
-
-<p>For example,   assume that the device's language is set to German and its
-location  to Switzerland. Because this application does not have a
-<code>res/drawable-de-rCH/</code> directory with a <code>flag.png</code> file in it, the system
-will fall back on the default, which is the UK flag located in
-<code>res/drawable/flag.png</code>. The language used will be German. Showing a
-British flag to German speakers in Switzerland is not ideal, but for now we will
-just leave the behavior as it is. There are several  ways you could improve this
-application's behavior if you wanted to:</p>
-
-<ul>
-  <li>Use a  generic default icon. In this application, it might be something
-that represents Shakespeare. </li>
-  <li>Create a <code>res/drawable-de/</code> folder that includes an icon that
-the application will use whenever the language is set to German but the location
-is not Germany. </li>
-</ul>
-
-
-<h2 id="localize">Localize the Application</h2>
-
-<h3 id="localize_strings">Localize the Strings</h3>
-
-<p>The application requires three more <code>strings.xml</code> files, one 
-each for German, French, and Japanese. To create these resource files within 
-Eclipse:</p>
-
-<ol>
-<li>Select <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Android 
-XML File</strong> to open the New Android XML File wizard. You can also open 
-the wizard by clicking its icon in the toolbar:<br />
-<img src="{@docRoot}images/hello_l10n/xml_file_wizard_shortcut.png" 
-alt="file_wizard_shortcut" width="297"
-height="90" style="margin:15px"></li>
-  <li>Select L10N for the Project field, and type <code>strings.xml</code> into 
-the File field. In the left-hand list, select Language, then click the right arrow.<br>
-<img src="{@docRoot}images/hello_l10n/xml_wizard1.png" alt="res_file_copy" width="335"
-height="406" style="margin:15px"></li>
-  <li>Type <code>de</code> in the Language box and click Finish.<br>
-    <img src="{@docRoot}images/hello_l10n/xml_wizard2.png" alt="res_file_copy" width="306"
-height="179">
-<p>A new file, <code>res/values-de/strings.xml</code>, now appears among the project 
-files.</p></li>
-<li>Repeat the steps twice more, for the language codes <code>fr</code> and	
-	<code>ja</code>.
-Now the project includes these new skeleton files: <br />
-    <code>res/<strong>values-de</strong>/strings.xml</code><br />
-    <code>res/<strong>values-fr</strong>/strings.xml</code><br />
-    <code>res/<strong>values-ja</strong>/strings.xml</code><br />
-  </li>
-  <li>Add localized text to the new files. To do
-this, open the <code>res/values-<em>&lt;qualifier&gt;</em>/strings.xml</code> files and
-replace the code as follows:</li>
-</ol>
-
-<table border="0" cellspacing="0" cellpadding="0">
-  <tr>
-    <th scope="col">File</th>
-    <th scope="col">Replace the contents with the following code:</th>
-  </tr>
-  <tr>
-    <td><code>res/values-de/strings.xml</code></td>
-    <td><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;resources&gt;
-    &lt;string name=&quot;app_name&quot;&gt;Hallo, Lokalisierung&lt;/string&gt;
-    &lt;string name=&quot;text_a&quot;&gt;Soll ich dich einem Sommertag vergleichen,&lt;/string&gt;
-    &lt;string name=&quot;text_b&quot;&gt;Der du viel lieblicher und sanfter bist?&lt;/string&gt;
-&lt;/resources&gt;</pre></td>
-  </tr>
-  <tr>
-    <td><code>res/values-fr/strings.xml</code></td>
-    <td><pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;resources&gt;
-    &lt;string name=&quot;app_name&quot;&gt;Bonjour, Localisation&lt;/string&gt;
-    &lt;string name=&quot;text_a&quot;&gt;Irai-je te comparer au jour d'été?&lt;/string&gt;
-    &lt;string name=&quot;text_b&quot;&gt;Tu es plus tendre et bien plus tempéré.&lt;/string&gt;
-&lt;/resources&gt; </pre></td>
-  </tr>
-  <tr>
-    <td><code>res/values-ja/strings.xml</code></td>
-    <td>
-<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
-&lt;resources&gt;
-    &lt;string name=&quot;text_a&quot;&gt;あなたをなにかにたとえるとしたら夏の一日でしょうか？&lt;/string&gt;
-    &lt;string name=&quot;text_b&quot;&gt;だがあなたはもっと美しく、もっとおだやかです。&lt;/string&gt;
-&lt;/resources&gt;</pre></td>
-  </tr>
-</table>
-
-<p class="note"><b>Tip:</b> In the
-<code>values-<em>&lt;qualifier&gt;</em>/strings.xml</code> files, you only need to
-include text for strings that are different from the default strings. For
-example, when the application runs on a device that is configured for Japanese,
-the plan is for <code>text_a</code> and <code>text_b</code> to be in Japanese
-while all the other text is in English, so
-<code>res/values-ja/strings.xml</code> only needs to include <code>text_a</code>
-and <code>text_b</code>.</p>
-
-<h3 id="localize_images">Localize the Images</h3>
-
-<p>As shown in <a href="#table2">Table 2</a>, the application needs six more
-drawable folders, each containing a <code>flag.png</code> icon. Add the needed
-icons and folders to your project:</p>
-
-<ol>
-  <li>Save this <a href="../../../images/hello_l10n/drawable-de-rDE/flag.png">German flag icon</a>
-as <code>res/drawable-de-rDE/flag.png</code> in the application's project
-workspace. 
-    <p>For example:</p>
-    <ol>
-      <li>Click the link to open the flag image.</li>
-      <li>Save the image in
-<code><em>your-workspace</em>/HelloL10N/res/drawable-de-rDE/</code> .</li>
-    </ol>
-  </li>
-  <li>Save this <a href="../../../images/hello_l10n/drawable-fr-rFR/flag.png">French flag icon</a>
-as <code>res/drawable-fr-rFR/flag.png</code> in the application's project
-workspace. </li>
-  <li>Save this <a href="../../../images/hello_l10n/drawable-fr-rCA/flag.png">Canadian flag icon</a>
-as <code>res/drawable-fr-rCA/flag.png</code> in the project workspace. </li>
-  <li>Save the <a href="../../../images/hello_l10n/drawable-en-rCA/flag.png">Canadian flag icon</a>
-again, this time as <code>res/drawable-en-rCA/flag.png</code> in the project
-workspace.  (Why not have just <em>one</em> folder that contains the Canadian
-flag? Because a folder qualifer cannot specify a region without a language. 
-You cannot have a folder named <code>drawable-rCA/</code>; instead you must 
-create two separate folders, one for each of the Canadian languages represented 
-in the application.)</li>
-  <li>Save this <a href="../../../images/hello_l10n/drawable-ja-rJP/flag.png">Japanese flag icon</a>
-as <code>res/drawable-ja-rJP/flag.png</code> in the project workspace. </li>
-  <li>Save this <a href="../../../images/hello_l10n/drawable-en-rUS/flag.png">United States flag
-icon</a> as <code>res/drawable-en-rUS/flag.png</code> in the project workspace.
-  </li>
-</ol>
-
-<p>If you are using Eclipse, refresh the project (F5). The new
-<code>res/drawable-<em>&lt;qualifier&gt;</em>/</code> folders should appear in the
-project view. </p>
-
-
-<h2 id="test_localized">Run and Test the Localized Application</h2>
-
-<p>Once you've added the localized string and image resources, you are ready to 
-	run the application and test its handling of them. To change the locale 
-	on a device or in the emulator, use  the Settings
-application  (Home &gt; Menu &gt; Settings &gt; Locale &amp; text &gt; Select
-locale). Depending on how a device was configured, it might not offer any
-alternate locales via the Settings application, or might offer only a few. The
-emulator, on the other hand, will offer a selection of all the locales that are
-available in the Android system image. </p>
-
-<p>To set the emulator to a locale that is not available in the system image,
-use the  Custom Locale application, which is available in the Application
-tab:</p>
-
-<p><img src="{@docRoot}images/hello_l10n/custom_locale_app.png" alt="custom locale app" width="163"
-height="158" style="margin-left:15px"></p>
-
-<p>To switch to a new locale, long-press a  locale name:</p>
-
-<p><img src="{@docRoot}images/hello_l10n/using_custom_locale.png" alt="using custom locale"
-width="512" height="299" style="margin-left:15px"></p>
-
-<p>For a list of locales available on different versions of the Android platform,
-refer to the platform notes documents, listed under "Downloadable SDK Components"
-in the "SDK" tab. For example, <a 
-href="{@docRoot}sdk/android-2.0.html#locs">Android 2.0 locales</a>.</p>
-
-<p>Run the application for each of the expected locales, plus one unexpected
-locale. Here are some of the results you should see:</p>
-
-<table border="0" cellspacing="0" cellpadding="05">
-  <tr>
-    <th scope="col">Locale</th>
-    <th scope="col">Opening screen of application</th>
-  </tr>
-  <tr>
-    <td>German / Germany
-    	<br />Specifically supported by the Hello, L10N application.</td>
-    <td><img src="{@docRoot}images/hello_l10n/german_screenshot.png" alt="custom locale app"
-width="321" height="175" align="right"
-style="margin-left:10px;margin-right:20px"></td>
-  </tr>
-  <tr>
-    <td>French / Canada
-    	<br />Specifically supported by the Hello, L10N application.</td>
-    <td><img src="{@docRoot}images/hello_l10n/frenchCA_screenshot.png" alt="custom locale app"
-width="321" height="175" align="right"
-style="margin-left:10px;margin-right:20px"></td>
-  </tr>
-  <tr>
-    <td>German / Switzerland
-    	<br />Only the language is specifically supported by 
-the Hello, L10N  application.</td>
-    <td><img src="{@docRoot}images/hello_l10n/germanCH_screenshot.png" alt="custom locale app"
-width="321" height="175" align="right"
-style="margin-left:10px;margin-right:20px">`</td>
-  </tr>
-  <tr>
-    <td>Japanese
-    	<br />Specifically supported by  the Hello, L10N  application. 
-	</td>
-    <td><img src="{@docRoot}images/hello_l10n/japanese_screenshot.png" alt="custom locale app"
-width="321" height="220" align="right"
-style="margin-left:10px;margin-right:20px">`</td>
-  </tr>
-  <tr>
-    <td>Romansh / Switzerland (custom locale <code>rm_CH</code>)
-    	<br />Not specifically supported  by  the Hello, L10N 
-application, so the application uses the default resources.</td>
-    <td><img src="{@docRoot}images/hello_l10n/romanshCH_screenshot.png" alt="custom locale app"
-width="321" height="175" align="right"
-style="margin-left:10px;margin-right:20px"></td>
-  </tr>
-</table>
diff --git a/docs/html/resources/tutorials/notepad/index.jd b/docs/html/resources/tutorials/notepad/index.jd
index dd92184..1f37c41 100644
--- a/docs/html/resources/tutorials/notepad/index.jd
+++ b/docs/html/resources/tutorials/notepad/index.jd
@@ -44,11 +44,11 @@
 
 <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/topics/fundamentals.html">Application 
+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}resources/tutorials/hello-world.html">Hello World</a>
+<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>
diff --git a/docs/html/resources/tutorials/notepad/notepad-ex1.jd b/docs/html/resources/tutorials/notepad/notepad-ex1.jd
index cf7765e..13ab0a6 100644
--- a/docs/html/resources/tutorials/notepad/notepad-ex1.jd
+++ b/docs/html/resources/tutorials/notepad/notepad-ex1.jd
@@ -33,7 +33,7 @@
     
     <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}resources/tutorials/hello-world.html">Hello,
+    followed the <a href="{@docRoot}training/basics/firstapp/index.html">Hello,
     World</a> tutorial.</p>
     
   <ol>
diff --git a/docs/html/resources/tutorials/notepad/notepad-ex3.jd b/docs/html/resources/tutorials/notepad/notepad-ex3.jd
index 557738e..e31ecda 100644
--- a/docs/html/resources/tutorials/notepad/notepad-ex3.jd
+++ b/docs/html/resources/tutorials/notepad/notepad-ex3.jd
@@ -204,7 +204,7 @@
     state it was in when it was killed.</p>
     <p>
     Activities have a <a
-href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">well-defined life
+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
diff --git a/docs/html/resources/tutorials/notepad/notepad-extra-credit.jd b/docs/html/resources/tutorials/notepad/notepad-extra-credit.jd
index 0d59b56..d5fd771 100644
--- a/docs/html/resources/tutorials/notepad/notepad-extra-credit.jd
+++ b/docs/html/resources/tutorials/notepad/notepad-extra-credit.jd
@@ -65,6 +65,6 @@
 
 <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}guide/developing/tools/traceview.html">Traceview</a> to profile your application. If your application is running too slow, this can help you 
+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/resources/tutorials/opengl/opengl-es10.jd b/docs/html/resources/tutorials/opengl/opengl-es10.jd
deleted file mode 100644
index 2b44620..0000000
--- a/docs/html/resources/tutorials/opengl/opengl-es10.jd
+++ /dev/null
@@ -1,532 +0,0 @@
-page.title=OpenGL ES 1.0
-parent.title=Tutorials
-parent.link=../../browser.html?tag=tutorial
-@jd:body
-
-
-<div id="qv-wrapper">
-  <div id="qv">
-    <h2>In this document</h2>
-    
-    <ol>
-      <li><a href="#creating">Create an Activity with GLSurfaceView</a></li>
-      <li>
-        <a href="#drawing">Draw a Shape on GLSurfaceView</a>
-        <ol>
-          <li><a href="#define-triangle">Define a Triangle</a></li>
-          <li><a href="#draw-triangle">Draw the Triangle</a></li>
-        </ol>
-      </li>
-      <li><a href="#projection-and-views">Apply Projection and Camera Views</a></li>
-      <li><a href="#motion">Add Motion</a></li>
-      <li><a href="#touch">Respond to Touch Events</a></li>
-    </ol>
-    <h2 id="code-samples-list">Related Samples</h2>
-    <ol>
-      <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-index.html">API Demos - graphics</a></li>
-      <li><a
-        href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-GLSurfaceViewActivity.html">OpenGL ES 1.0 Sample</a></li>
-      <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-TouchRotateActivity.html">TouchRotateActivity</a></li>
-    </ol>
-    <h2>See also</h2>
-    <ol>
-      <li><a href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a></li>
-      <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL
-ES 2.0</a></li>
-    </ol>
-    </div>
-  </div>
-
-<p>This tutorial shows you how to create a simple Android application that uses the OpenGL ES 1.0
-API to perform some basic graphics operations. You'll learn how to:</p>
-
-<ul>
-  <li>Create an activity using {@link android.opengl.GLSurfaceView} and {@link
-android.opengl.GLSurfaceView.Renderer}</li>
-  <li>Create and draw a graphic object</li>
-  <li>Define a projection to correct for screen geometry</li>
-  <li>Define a camera view</li>
-  <li>Rotate a graphic object</li>
-  <li>Make graphics touch-interactive</li>
-</ul>
-
-<p>The Android framework supports both the OpenGL ES 1.0/1.1 and OpenGL ES 2.0 APIs. You should
-carefully consider which version of the OpenGL ES API (1.0/1.1 or 2.0) is most appropriate for your
-needs. For more information, see
-<a href="{@docRoot}guide/topics/graphics/opengl.html#choosing-version">Choosing an OpenGL API
-Version</a>. If you would prefer to use OpenGL ES 2.0, see the <a
-href="{@docRoot}resources/tutorials/opengl/opengl-es20.html">OpenGL ES 2.0 tutorial</a>.</p>
-
-<p>Before you start, you should understand how to create a basic Android application. If you do not
-know how to create an app, follow the <a href="{@docRoot}resources/tutorials/hello-world.html">Hello
-World Tutorial</a> to familiarize yourself with the process.</p>
-
-<h2 id="creating">Create an Activity with GLSurfaceView</h2>
-
-<p>To get started using OpenGL, you must implement both a {@link android.opengl.GLSurfaceView} and a
-{@link android.opengl.GLSurfaceView.Renderer}. The {@link android.opengl.GLSurfaceView} is the main
-view type for applications that use OpenGL and the {@link android.opengl.GLSurfaceView.Renderer}
-controls what is drawn within that view. (For more information about these classes, see the <a
-href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.)</p>
-
-<p>To create an activity using {@code GLSurfaceView}:</p>
-  
-<ol>
-  <li>Start a new Android project that targets Android 1.6 (API Level 4) or higher.
-  </li>
-  <li>Name the project <strong>HelloOpenGLES10</strong> and make sure it includes an activity called
-{@code HelloOpenGLES10}.
-  </li> 
-  <li>Modify the {@code HelloOpenGLES10} class as follows:
-<pre>
-package com.example.android.apis.graphics;
-
-import android.app.Activity;
-import android.content.Context;
-import android.opengl.GLSurfaceView;
-import android.os.Bundle;
-
-public class HelloOpenGLES10 extends Activity {
-  
-    private GLSurfaceView mGLView;
-  
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-        // Create a GLSurfaceView instance and set it
-        // as the ContentView for this Activity.
-        mGLView = new HelloOpenGLES10SurfaceView(this);
-        setContentView(mGLView);
-    }
-    
-    &#64;Override
-    protected void onPause() {
-        super.onPause();
-        // The following call pauses the rendering thread.
-        // If your OpenGL application is memory intensive,
-        // you should consider de-allocating objects that
-        // consume significant memory here.
-        mGLView.onPause();
-    }
-    
-    &#64;Override
-    protected void onResume() {
-        super.onResume();
-        // The following call resumes a paused rendering thread.
-        // If you de-allocated graphic objects for onPause()
-        // this is a good place to re-allocate them.
-        mGLView.onResume();
-    }
-}
-  
-class HelloOpenGLES10SurfaceView extends GLSurfaceView {
-
-    public HelloOpenGLES10SurfaceView(Context context){
-        super(context);
-        
-        // Set the Renderer for drawing on the GLSurfaceView
-        setRenderer(new HelloOpenGLES10Renderer());
-    }
-}
-</pre>
-  <p class="note"><strong>Note:</strong> You will get a compile error for the {@code
-HelloOpenGLES10Renderer} class reference. That's expected; you will fix this error in the next step.
-  </p>
-  
-  <p>As shown above, this activity uses a single {@link android.opengl.GLSurfaceView} for its
-view. Notice that this activity implements crucial lifecycle callbacks for pausing and resuming its
-work.</p>
-
-  <p>The {@code HelloOpenGLES10SurfaceView} class in this example code above is just a thin wrapper
-for an instance of {@link android.opengl.GLSurfaceView} and is not strictly necessary for this
-example. However, if you want your application to monitor and respond to touch screen
-events&#8212;and we are guessing you do&#8212;you must extend {@link android.opengl.GLSurfaceView}
-to add touch event listeners, which you will learn how to do in the <a href="#touch">Reponding to
-Touch Events</a> section.</p>
-
-  <p>In order to draw graphics in the {@link android.opengl.GLSurfaceView}, you must define an
-implementation of {@link android.opengl.GLSurfaceView.Renderer}. In the next step, you create
-a renderer class to complete this OpenGL application.</p>
-  </li>
-
-  <li>Create a new file for the following class {@code HelloOpenGLES10Renderer}, which implements
-the {@link android.opengl.GLSurfaceView.Renderer} interface:
-
-<pre>
-package com.example.android.apis.graphics;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.opengl.GLSurfaceView;
-
-public class HelloOpenGLES10Renderer implements GLSurfaceView.Renderer {
-
-    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
-        // Set the background frame color
-        gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
-    }
-    
-    public void onDrawFrame(GL10 gl) {
-        // Redraw background color
-        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
-    }
-    
-    public void onSurfaceChanged(GL10 gl, int width, int height) {
-        gl.glViewport(0, 0, width, height);
-    }
-  
-}
-</pre>
-  <p>This minimal implementation of {@link android.opengl.GLSurfaceView.Renderer} provides the
-code structure needed to use OpenGL drawing methods:
-<ul>
-  <li>{@link
-    android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
-    javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} is called once to set up the
-{@link android.opengl.GLSurfaceView}
-environment.</li>
-  <li>{@link
-        android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
-        onDrawFrame()} is called for each redraw of the {@link
-android.opengl.GLSurfaceView}.</li>
-  <li>{@link
-    android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
-    int, int) onSurfaceChanged()} is called if the geometry of the {@link
-android.opengl.GLSurfaceView} changes, for example when the device's screen orientation
-changes.</li>
-</ul>
-  </p>
-  <p>For more information about these methods, see the <a
-href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.
-</p>
-  </li>
-</ol>
-
-<p>The code example above creates a simple Android application that displays a grey screen using
-OpenGL ES 1.0 calls. While this application does not do anything very interesting, by creating these
-classes, you have layed the foundation needed to start drawing graphic elements with OpenGL ES
-1.0.</p>
-
-<p>If you are familiar with the OpenGL ES APIs, these classes should give you enough information
-to use the OpenGL ES 1.0 API and create graphics. However, if you need a bit more help getting
-started with OpenGL, head on to the next sections for a few more hints.</p>
-
-<h2 id="drawing">Draw a Shape on GLSurfaceView</h2>
-
-<p>Once you have implemented a {@link android.opengl.GLSurfaceView.Renderer}, the next step is to
-draw something with it. This section shows you how to define and draw a triangle.</p>
-
-<h3 id="define-triangle">Define a Triangle</h3>
-
-<p>OpenGL allows you to define objects using coordinates in three-dimensional space. So, before you
-  can draw a triangle, you must define its coordinates. In OpenGL, the typical way to do this is to
-  define a vertex array for the coordinates.</p>
-  
-<p>By default, OpenGL ES assumes a coordinate system where [0,0,0] (X,Y,Z) specifies the center of
-  the {@link android.opengl.GLSurfaceView} frame, [1,1,0] is the top right corner of the frame and 
-[-1,-1,0] is  bottom left corner of the frame.</p> 
-
-<p>To define a vertex array for a triangle:</p>
-
-<ol>
-  <li>In your {@code HelloOpenGLES10Renderer} class, add new member variable to contain the
-vertices of a triangle shape:
-<pre>
-    private FloatBuffer triangleVB;
-</pre>
-  </li>
-
-  <li>Create a method, {@code initShapes()} which populates this member variable:
-<pre>
-    private void initShapes(){
-    
-        float triangleCoords[] = {
-            // X, Y, Z
-            -0.5f, -0.25f, 0,
-             0.5f, -0.25f, 0,
-             0.0f,  0.559016994f, 0
-        }; 
-        
-        // initialize vertex Buffer for triangle  
-        ByteBuffer vbb = ByteBuffer.allocateDirect(
-                // (# of coordinate values * 4 bytes per float)
-                triangleCoords.length * 4); 
-        vbb.order(ByteOrder.nativeOrder());// use the device hardware's native byte order
-        triangleVB = vbb.asFloatBuffer();  // create a floating point buffer from the ByteBuffer
-        triangleVB.put(triangleCoords);    // add the coordinates to the FloatBuffer
-        triangleVB.position(0);            // set the buffer to read the first coordinate
-    
-    }
-</pre>
-    <p>This method defines a two-dimensional triangle with three equal sides.</p>
-  </li>
-  <li>Modify your {@code onSurfaceCreated()} method to initialize your triangle: 
-    <pre>
-    public void onSurfaceCreated(GL10 gl, EGLConfig config) {
-    
-        // Set the background frame color
-        gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
-        
-        // initialize the triangle vertex array
-        initShapes();
-    }
-</pre>
-  <p class="caution"><strong>Caution:</strong> Shapes and other static objects should be initialized
-    once in your {@code onSurfaceCreated()} method for best performance. Avoid initializing the
-    new objects in {@code onDrawFrame()}, as this causes the system to re-create the objects
-    for every frame redraw and slows down your application.
-  </p>
-  </li>
-
-</ol>
-
-<p>You have now defined a triangle shape, but if you run the application, nothing appears. What?!
-You also have to tell OpenGL to draw the triangle, which you'll do in the next section.
-</p>
-
-
-<h3 id="draw-triangle">Draw the Triangle</h3>
-
-<p>Before you can draw your triangle, you must tell OpenGL that you are using vertex arrays. After
-that setup step, you can call the drawing APIs to display the triangle.</p>
-
-<p>To draw the triangle:</p>
-  
-<ol>
-  <li>Add the {@code glEnableClientState()} method to the end of {@code onSurfaceCreated()} to
-enable vertex arrays.
-<pre>
-        // Enable use of vertex arrays
-        gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);
-</pre>
-    <p>At this point, you are ready to draw the triangle object in the OpenGL view.</p>
-  </li>
-  
-  <li>Add the following code to the end of your {@code onDrawFrame()} method to draw the triangle.
-<pre>
-        // Draw the triangle
-        gl.glColor4f(0.63671875f, 0.76953125f, 0.22265625f, 0.0f);
-        gl.glVertexPointer(3, GL10.GL_FLOAT, 0, triangleVB);
-        gl.glDrawArrays(GL10.GL_TRIANGLES, 0, 3);
-</pre>
-  </li>
-  <li id="squashed-triangle">Run the app! Your application should look something like this:
-  </li>
-</ol>
-    
-<img src="{@docRoot}images/opengl/helloopengl-es10-1.png">
-<p class="img-caption">
-  <strong>Figure 1.</strong> Triangle drawn without a projection or camera view.
-</p>
-
-<p>There are a few problems with this example. First of all, it is not going to impress your
-friends. Secondly, the triangle is a bit squashed and changes shape when you change the screen
-orientation of the device. The reason the shape is skewed is due to the fact that the object is
-being rendered in a frame which is not perfectly square. You'll fix that problem using a projection
-and camera view in the next section.</p>
-
-<p>Lastly, because the triangle is stationary, the system is redrawing the object repeatedly in
-exactly the same place, which is not the most efficient use of the OpenGL graphics pipeline. In the
-<a href="#motion">Add Motion</a> section, you'll make this shape rotate and justify
-this use of processing power.</p>
-
-<h2 id="projection-and-views">Apply Projection and Camera View</h2>
-
-<p>One of the basic problems in displaying graphics is that Android device displays are typically
-not square and, by default, OpenGL happily maps a perfectly square, uniform coordinate
-system onto your typically non-square screen. To solve this problem, you can apply an OpenGL
-projection mode and camera view (eye point) to transform the coordinates of your graphic objects
-so they have the correct proportions on any display. For more information about OpenGL coordinate
-mapping, see <a href="{@docRoot}guide/topics/graphics/opengl.html#coordinate-mapping">Mapping
-Coordinates for Drawn Objects</a>.</p>
-
-<p>To apply projection and camera view transformations to your triangle:
-</p>
-<ol>
-  <li>Modify your {@code onSurfaceChanged()} method to enable {@link
-    javax.microedition.khronos.opengles.GL10#GL_PROJECTION GL10.GL_PROJECTION} mode, calculate the
-    screen ratio and apply the ratio as a transformation of the object coordinates.
-<pre>
-  public void onSurfaceChanged(GL10 gl, int width, int height) {
-      gl.glViewport(0, 0, width, height);
-      
-      // make adjustments for screen ratio
-      float ratio = (float) width / height;
-      gl.glMatrixMode(GL10.GL_PROJECTION);        // set matrix to projection mode
-      gl.glLoadIdentity();                        // reset the matrix to its default state
-      gl.glFrustumf(-ratio, ratio, -1, 1, 3, 7);  // apply the projection matrix
-  }  
-</pre>
-  </li>
-
-  <li>Next, modify your {@code onDrawFrame()} method to apply the {@link
-javax.microedition.khronos.opengles.GL10#GL_MODELVIEW GL_MODELVIEW} mode and set
-a view point using {@link android.opengl.GLU#gluLookAt(javax.microedition.khronos.opengles.GL10,
-float, float, float, float, float, float, float, float, float) GLU.gluLookAt()}.
-<pre>
-    public void onDrawFrame(GL10 gl) {
-        // Redraw background color
-        gl.glClear(GL10.GL_COLOR_BUFFER_BIT | GL10.GL_DEPTH_BUFFER_BIT);
-        
-        // Set GL_MODELVIEW transformation mode
-        gl.glMatrixMode(GL10.GL_MODELVIEW);
-        gl.glLoadIdentity();   // reset the matrix to its default state
-        
-        // When using GL_MODELVIEW, you must set the view point
-        GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);        
-        
-        // Draw the triangle
-        ...
-    }
-</pre>
-  </li>
-  <li>Run the updated application and you should see something like this:</li>
-</ol>
-
-<img src="{@docRoot}images/opengl/helloopengl-es10-2.png">
-<p class="img-caption">
-  <strong>Figure 2.</strong> Triangle drawn with a projection and camera view applied.
-</p>
-
-<p>Now that you have applied this transformation, the triangle has three equal sides, instead of the
-<a href="#squashed-triangle">squashed triangle</a> in the earlier version.</p>
-
-<h2 id="motion">Add Motion</h2>
-
-<p>While it may be an interesting exercise to create static graphic objects with OpenGL ES, chances
-are you want at least <em>some</em> of your objects to move. In this section, you'll add motion to
-your triangle by rotating it.</p>
-
-<p>To add rotation to your triangle:</p>
-<ol>
-  <li>Modify your {@code onDrawFrame()} method to rotate the triangle object:
-<pre>
-    public void onDrawFrame(GL10 gl) {
-        ...    
-        // When using GL_MODELVIEW, you must set the view point
-        GLU.gluLookAt(gl, 0, 0, -5, 0f, 0f, 0f, 0f, 1.0f, 0.0f);        
-    
-        // Create a rotation for the triangle
-        long time = SystemClock.uptimeMillis() % 4000L;
-        float angle = 0.090f * ((int) time);
-        gl.glRotatef(angle, 0.0f, 0.0f, 1.0f);        
-        
-        // Draw the triangle
-        ...
-    }
-</pre>
-  </li>
-  <li>Run the application and your triangle should rotate around its center.</li>
-</ol>
-
-
-<h2 id="touch">Respond to Touch Events</h2>
-<p>Making objects move according to a preset program like the rotating triangle  is useful for
-getting some attention, but what if you want to have users interact with your OpenGL graphics? In
-this section, you'll learn how listen for touch events to let users interact with objects in your
-{@code HelloOpenGLES10SurfaceView}.</p>
-  
-<p>The key to making your OpenGL application touch interactive is expanding your implementation of
-{@link android.opengl.GLSurfaceView} to override the {@link 
-android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} to listen for touch events.
-Before you do that, however, you'll modify the renderer class to expose the rotation angle of the
-triangle. Afterwards, you'll modify the {@code HelloOpenGLES10SurfaceView} to process touch events
-and pass that data to your renderer.</p>
-
-<p>To make your triangle rotate in response to touch events:</p>
-
-<ol>
-  <li>Modify your {@code HelloOpenGLES10Renderer} class to include a new, public member so that
-your {@code HelloOpenGLES10SurfaceView} class is able to pass new rotation values your renderer:
-<pre>
-    public float mAngle;
-</pre>  
-  </li>
-  <li>In your {@code onDrawFrame()} method, comment out the code that generates an angle and
-replace the {@code angle} variable with {@code mAngle}.
-<pre>
-        // Create a rotation for the triangle (Boring! Comment this out:)
-        // long time = SystemClock.uptimeMillis() % 4000L;
-        // float angle = 0.090f * ((int) time);
-
-        // Use the mAngle member as the rotation value
-        gl.glRotatef(mAngle, 0.0f, 0.0f, 1.0f); 
-</pre>
-  </li>
-  <li>In your {@code HelloOpenGLES10SurfaceView} class, add the following member variables.
-<pre>
-    private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
-    private HelloOpenGLES10Renderer mRenderer;
-    private float mPreviousX;
-    private float mPreviousY;
-</pre>
-  </li>
-  <li>In the constructor method for {@code HelloOpenGLES10SurfaceView}, set the {@code mRenderer}
-member so you have a handle to pass in rotation input and set the render mode to {@link
-android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY}.
-<pre>
-    public HelloOpenGLES10SurfaceView(Context context){
-        super(context);
-        // set the mRenderer member
-        mRenderer = new HelloOpenGLES10Renderer();
-        setRenderer(mRenderer);
-        
-        // Render the view only when there is a change
-        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
-    }
-</pre>
-  </li>
-  <li>In your {@code HelloOpenGLES10SurfaceView} class, override the {@link
-android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} method to listen for touch
-events and pass them to your renderer.
-<pre>
-    &#64;Override 
-    public boolean onTouchEvent(MotionEvent e) {
-        // MotionEvent reports input details from the touch screen
-        // and other input controls. In this case, you are only
-        // interested in events where the touch position changed.
-
-        float x = e.getX();
-        float y = e.getY();
-        
-        switch (e.getAction()) {
-            case MotionEvent.ACTION_MOVE:
-    
-                float dx = x - mPreviousX;
-                float dy = y - mPreviousY;
-    
-                // reverse direction of rotation above the mid-line
-                if (y &gt; getHeight() / 2) {
-                  dx = dx * -1 ;
-                }
-    
-                // reverse direction of rotation to left of the mid-line
-                if (x &lt; getWidth() / 2) {
-                  dy = dy * -1 ;
-                }
-              
-                mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;
-                requestRender();
-        }
-
-        mPreviousX = x;
-        mPreviousY = y;
-        return true;
-    } 
-</pre>
-  <p class="note"><strong>Note:</strong> Touch events return pixel coordinates which <em>are not the
-same</em> as OpenGL coordinates. Touch coordinate [0,0] is the bottom-left of the screen and the
-highest value [max_X, max_Y] is the top-right corner of the screen. To match touch events to OpenGL
-graphic objects, you must translate touch coordinates into OpenGL coordinates.</p>
-  </li>
-  <li>Run the application and drag your finger or cursor around the screen to rotate the
-triangle.</li>
-</ol>
-<p>For another example of OpenGL touch event functionality, see <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-TouchRotateActivity.html">TouchRotateActivity</a>.</p>
\ No newline at end of file
diff --git a/docs/html/resources/tutorials/opengl/opengl-es20.jd b/docs/html/resources/tutorials/opengl/opengl-es20.jd
deleted file mode 100644
index dd23dbf..0000000
--- a/docs/html/resources/tutorials/opengl/opengl-es20.jd
+++ /dev/null
@@ -1,652 +0,0 @@
-page.title=OpenGL ES 2.0
-parent.title=Tutorials
-parent.link=../../browser.html?tag=tutorial
-@jd:body
-
-
-<div id="qv-wrapper">
-  <div id="qv">
-    <h2>In this document</h2>
-    
-    <ol>
-      <li><a href="#creating">Create an Activity with GLSurfaceView</a></li>
-      <li>
-        <a href="#drawing">Draw a Shape on GLSurfaceView</a>
-        <ol>
-          <li><a href="#define-triangle">Define a Triangle</a></li>
-          <li><a href="#draw-triangle">Draw the Triangle</a></li>
-        </ol>
-      </li>
-      <li><a href="#projection-and-views">Apply Projection and Camera Views</a></li>
-      <li><a href="#motion">Add Motion</a></li>
-      <li><a href="#touch">Respond to Touch Events</a></li>
-    </ol>
-    <h2 id="code-samples-list">Related Samples</h2>
-    <ol>
-      <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-index.html">API Demos - graphics</a></li>
-      <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-GLES20Activity.html">OpenGL ES 2.0 Sample</a></li>
-      <li><a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-TouchRotateActivity.html">TouchRotateActivity</a></li>
-    </ol>
-    <h2>See also</h2>
-    <ol>
-      <li><a href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a></li>
-      <li><a href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL
-ES 1.0</a></li>
-    </ol>
-    </div>
-  </div>
-
-<p>This tutorial shows you how to create a simple Android application that uses the OpenGL ES 2.0
-API to perform some basic graphics operations. You'll learn how to:</p>
-
-<ul>
-  <li>Create an activity using {@link android.opengl.GLSurfaceView} and {@link
-android.opengl.GLSurfaceView.Renderer}</li>
-  <li>Create and draw a graphic object</li>
-  <li>Define a projection to correct for screen geometry</li>
-  <li>Define a camera view</li>
-  <li>Rotate a graphic object</li>
-  <li>Make graphics touch interactive</li>
-</ul>
-
-<p>The Android framework supports both the OpenGL ES 1.0/1.1 and OpenGL ES 2.0 APIs. You should
-carefully consider which version of the OpenGL ES API (1.0/1.1 or 2.0) is most appropriate for your
-needs. For more information, see
-<a href="{@docRoot}guide/topics/graphics/opengl.html#choosing-version">Choosing an OpenGL API
-Version</a>. If you would prefer to use OpenGL ES 1.0, see the <a
-href="{@docRoot}resources/tutorials/opengl/opengl-es10.html">OpenGL ES 1.0 tutorial</a>.</p>
-
-<p>Before you start, you should understand how to create a basic Android application. If you do not
-know how to create an app, follow the <a href="{@docRoot}resources/tutorials/hello-world.html">Hello
-World Tutorial</a> to familiarize yourself with the process.</p>
-
-<p class="caution"><strong>Caution:</strong> OpenGL ES 2.0 <em>is currently not supported</em> by
-the Android Emulator. You must have a physical test device running Android 2.2 (API Level 8) or
-higher in order to run and test the example code in this tutorial.</p>
-
-<h2 id="creating">Create an Activity with GLSurfaceView</h2>
-
-<p>To get started using OpenGL, you must implement both a {@link android.opengl.GLSurfaceView} and a
-{@link android.opengl.GLSurfaceView.Renderer}. The {@link android.opengl.GLSurfaceView} is the main
-view type for applications that use OpenGL and the {@link android.opengl.GLSurfaceView.Renderer}
-controls what is drawn within that view. (For more information about these classes, see the <a
-href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.)</p>
-
-<p>To create an activity using {@code GLSurfaceView}:</p>
-  
-<ol>
-  <li>Start a new Android project that targets Android 2.2 (API Level 8) or higher.
-  </li>
-  <li>Name the project <strong>HelloOpenGLES20</strong> and make sure it includes an activity called
-{@code HelloOpenGLES20}.
-  </li> 
-  <li>Modify the {@code HelloOpenGLES20} class as follows:
-<pre>
-package com.example.android.apis.graphics;
-
-import android.app.Activity;
-import android.content.Context;
-import android.opengl.GLSurfaceView;
-import android.os.Bundle;
-
-public class HelloOpenGLES20 extends Activity {
-  
-    private GLSurfaceView mGLView;
-  
-    &#64;Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        
-        // Create a GLSurfaceView instance and set it
-        // as the ContentView for this Activity
-        mGLView = new HelloOpenGLES20SurfaceView(this);
-        setContentView(mGLView);
-    }
-    
-    &#64;Override
-    protected void onPause() {
-        super.onPause();
-        // The following call pauses the rendering thread.
-        // If your OpenGL application is memory intensive,
-        // you should consider de-allocating objects that
-        // consume significant memory here.
-        mGLView.onPause();
-    }
-    
-    &#64;Override
-    protected void onResume() {
-        super.onResume();
-        // The following call resumes a paused rendering thread.
-        // If you de-allocated graphic objects for onPause()
-        // this is a good place to re-allocate them.
-        mGLView.onResume();
-    }
-}
-  
-class HelloOpenGLES20SurfaceView extends GLSurfaceView {
-
-    public HelloOpenGLES20SurfaceView(Context context){
-        super(context);
-        
-        // Create an OpenGL ES 2.0 context.
-        setEGLContextClientVersion(2);
-        // Set the Renderer for drawing on the GLSurfaceView
-        setRenderer(new HelloOpenGLES20Renderer());
-    }
-}
-</pre>
-  <p class="note"><strong>Note:</strong> You will get a compile error for the {@code
-HelloOpenGLES20Renderer} class reference. That's expected; you will fix this error in the next step.
-  </p>
-  
-  <p>As shown above, this activity uses a single {@link android.opengl.GLSurfaceView} for its
-view. Notice that this activity implements crucial lifecycle callbacks for pausing and resuming its
-work.</p>
-
-  <p>The {@code HelloOpenGLES20SurfaceView} class in this example code above is just a thin wrapper
-for an instance of {@link android.opengl.GLSurfaceView} and is not strictly necessary for this
-example. However, if you want your application to monitor and respond to touch screen
-events&#8212;and we are guessing you do&#8212;you must extend {@link android.opengl.GLSurfaceView}
-to add touch event listeners, which you will learn how to do in the <a href="#touch">Reponding to
-Touch Events</a> section.</p>
-
-  <p>In order to draw graphics in the {@link android.opengl.GLSurfaceView}, you must define an
-implementation of {@link android.opengl.GLSurfaceView.Renderer}. In the next step, you create
-a renderer class to complete this OpenGL application.</p>
-  </li>
-
-  <li>Create a new file for the following class {@code HelloOpenGLES20Renderer}, which implements
-the {@link android.opengl.GLSurfaceView.Renderer} interface:
-
-<pre>
-package com.example.android.apis.graphics;
-
-import javax.microedition.khronos.egl.EGLConfig;
-import javax.microedition.khronos.opengles.GL10;
-
-import android.opengl.GLES20;
-import android.opengl.GLSurfaceView;
-
-public class HelloOpenGLES20Renderer implements GLSurfaceView.Renderer {
-  
-    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
-    
-        // Set the background frame color
-        GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
-    }
-    
-    public void onDrawFrame(GL10 unused) {
-    
-        // Redraw background color
-        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
-    }
-    
-    public void onSurfaceChanged(GL10 unused, int width, int height) {
-        GLES20.glViewport(0, 0, width, height);
-    }
-  
-}
-</pre>
-  <p>This minimal implementation of {@link android.opengl.GLSurfaceView.Renderer} provides the
-code structure needed to use OpenGL drawing methods:
-<ul>
-  <li>{@link
-    android.opengl.GLSurfaceView.Renderer#onSurfaceCreated(javax.microedition.khronos.opengles.GL10,
-    javax.microedition.khronos.egl.EGLConfig) onSurfaceCreated()} is called once to set up the
-{@link android.opengl.GLSurfaceView}
-environment.</li>
-  <li>{@link
-        android.opengl.GLSurfaceView.Renderer#onDrawFrame(javax.microedition.khronos.opengles.GL10)
-        onDrawFrame()} is called for each redraw of the {@link
-android.opengl.GLSurfaceView}.</li>
-  <li>{@link
-    android.opengl.GLSurfaceView.Renderer#onSurfaceChanged(javax.microedition.khronos.opengles.GL10,
-    int, int) onSurfaceChanged()} is called if the geometry of the {@link
-android.opengl.GLSurfaceView} changes, for example when the device's screen orientation
-changes.</li>
-</ul>
-  </p>
-  <p>For more information about these methods, see the <a
-href="{@docRoot}guide/topics/graphics/opengl.html">3D with OpenGL</a> document.
-</p>
-  </li>
-</ol>
-
-<p>The code example above creates a simple Android application that displays a grey screen using
-OpenGL ES 2.0 calls. While this application does not do anything very interesting, by creating these
-classes, you have layed the foundation needed to start drawing graphic elements with OpenGL ES
-2.0.</p>
-
-<p>If you are familiar with the OpenGL ES APIs, these classes should give you enough information
-to use the OpenGL ES 2.0 API and create graphics. However, if you need a bit more help getting
-started with OpenGL, head on to the next sections for a few more hints.</p>
-
-<p class="note"><strong>Note:</strong> If your application requires OpenGL 2.0, make sure you
-declare this in your manifest:</p>
-<pre>
-    &lt;!-- Tell the system this app requires OpenGL ES 2.0. --&gt;
-    &lt;uses-feature android:glEsVersion="0x00020000" android:required="true" /&gt;
-</pre>
-<p>For more information, see <a
-href="{@docRoot}guide/topics/graphics/opengl.html#manifest">OpenGL manifest declarations</a> in the
-<em>3D with OpenGL</em> document.</p>
-
-
-<h2 id="drawing">Draw a Shape on GLSurfaceView</h2>
-
-<p>Once you have implemented a {@link android.opengl.GLSurfaceView.Renderer}, the next step is to
-draw something with it. This section shows you how to define and draw a triangle.</p>
-
-<h3 id="define-triangle">Define a Triangle</h3>
-
-<p>OpenGL allows you to define objects using coordinates in three-dimensional space. So, before you
-  can draw a triangle, you must define its coordinates. In OpenGL, the typical way to do this is to
-  define a vertex array for the coordinates.</p>
-  
-<p>By default, OpenGL ES assumes a coordinate system where [0,0,0] (X,Y,Z) specifies the center of
-  the {@link android.opengl.GLSurfaceView} frame, [1,1,0] is the top-right corner of the frame and 
-[-1,-1,0] is  bottom-left corner of the frame.</p> 
-
-<p>To define a vertex array for a triangle:</p>
-
-<ol>
-  <li>In your {@code HelloOpenGLES20Renderer} class, add new member variable to contain the
-vertices of a triangle shape:
-<pre>
-    private FloatBuffer triangleVB;
-</pre>
-  </li>
-
-  <li>Create a method, {@code initShapes()} which populates this member variable:
-<pre>
-    private void initShapes(){
-    
-        float triangleCoords[] = {
-            // X, Y, Z
-            -0.5f, -0.25f, 0,
-             0.5f, -0.25f, 0,
-             0.0f,  0.559016994f, 0
-        }; 
-        
-        // initialize vertex Buffer for triangle  
-        ByteBuffer vbb = ByteBuffer.allocateDirect(
-                // (# of coordinate values * 4 bytes per float)
-                triangleCoords.length * 4); 
-        vbb.order(ByteOrder.nativeOrder());// use the device hardware's native byte order
-        triangleVB = vbb.asFloatBuffer();  // create a floating point buffer from the ByteBuffer
-        triangleVB.put(triangleCoords);    // add the coordinates to the FloatBuffer
-        triangleVB.position(0);            // set the buffer to read the first coordinate
-    
-    }
-</pre>
-    <p>This method defines a two-dimensional triangle shape with three equal sides.</p>
-  </li>
-  <li>Modify your {@code onSurfaceCreated()} method to initialize your triangle:
-<pre>
-    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
-    
-        // Set the background frame color
-        GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
-        
-        // initialize the triangle vertex array
-        initShapes();
-    }
-</pre>
-  <p class="caution"><strong>Caution:</strong> Shapes and other static objects should be initialized
-    once in your {@code onSurfaceCreated()} method for best performance. Avoid initializing the
-    new objects in {@code onDrawFrame()}, as this causes the system to re-create the objects
-    for every frame redraw and slows down your application.
-  </p>
-  </li>
-
-</ol>
-
-<p>You have now defined a triangle shape, but if you run the application, nothing appears. What?!
-You also have to tell OpenGL to draw the triangle, which you'll do in the next section.
-</p>
-
-
-<h3 id="draw-triangle">Draw the Triangle</h3>
-
-<p>The OpenGL ES 2.0 requires a bit more code than OpenGL ES 1.0/1.1 in order to draw objects. In
-this section, you'll create vertex and fragment shaders, a shader loader, apply the shaders, enable
-the use of vertex arrays for your triangle and, finally, draw it on screen.</p>
-
-<p>To draw the triangle:</p>
-  
-<ol>
-  <li>In your {@code HelloOpenGLES20Renderer} class, define a vertex shader and a fragment
-shader. Shader code is defined as a string which is compiled and run by the OpenGL ES 2.0 rendering
-engine.
-<pre>
-    private final String vertexShaderCode = 
-        "attribute vec4 vPosition; \n" +
-        "void main(){              \n" +
-        " gl_Position = vPosition; \n" +
-        "}                         \n";
-    
-    private final String fragmentShaderCode = 
-        "precision mediump float;  \n" +
-        "void main(){              \n" +
-        " gl_FragColor = vec4 (0.63671875, 0.76953125, 0.22265625, 1.0); \n" +
-        "}                         \n";
-</pre>
-    <p>The vertex shader controls how OpenGL positions and draws the vertices of shapes in space.
-The fragment shader controls what OpenGL draws <em>between</em> the vertices of shapes.</p>
-  </li>
-  <li>In your {@code HelloOpenGLES20Renderer} class, create a method for loading the shaders.
-<pre>
-    private int loadShader(int type, String shaderCode){
-    
-        // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
-        // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
-        int shader = GLES20.glCreateShader(type); 
-        
-        // add the source code to the shader and compile it
-        GLES20.glShaderSource(shader, shaderCode);
-        GLES20.glCompileShader(shader);
-        
-        return shader;
-    }
-</pre>
-  </li>
-  
-  <li>Add the following members to your {@code HelloOpenGLES20Renderer} class for an OpenGL
-Program and the positioning control for your triangle.
-<pre>
-    private int mProgram;
-    private int maPositionHandle;
-</pre>
-    <p>In OpenGL ES 2.0, you attach vertex and fragment shaders to a <em>Program</em> and then
-apply the program to the OpenGL graphics pipeline.</p>
-  </li>
-  
-  <li>Add the following code to the end of your {@code onSurfaceCreated()} method to load the
-shaders and attach them to an OpenGL Program.
-<pre>
-        int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
-        int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
-        
-        mProgram = GLES20.glCreateProgram();             // create empty OpenGL Program
-        GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
-        GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
-        GLES20.glLinkProgram(mProgram);                  // creates OpenGL program executables
-        
-        // get handle to the vertex shader's vPosition member
-        maPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
-</pre>
-    <p>At this point, you are ready to draw the triangle object in the OpenGL view.</p>
-  </li>
-  
-  <li>Add the following code to the end of your {@code onDrawFrame()} method apply the OpenGL
-program you created, load the triangle object and draw the triangle.
-<pre>
-        // Add program to OpenGL environment
-        GLES20.glUseProgram(mProgram);
-        
-        // Prepare the triangle data
-        GLES20.glVertexAttribPointer(maPositionHandle, 3, GLES20.GL_FLOAT, false, 12, triangleVB);
-        GLES20.glEnableVertexAttribArray(maPositionHandle);
-        
-        // Draw the triangle
-        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, 3);
-</pre>
-  </li>
-  <li id="squashed-triangle">Run the app! Your application should look something like this:
-  </li>
-</ol>
-
-<img src="{@docRoot}images/opengl/helloopengl-es20-1.png">
-<p class="img-caption">
-  <strong>Figure 1.</strong> Triangle drawn without a projection or camera view.
-</p>
-
-<p>There are a few problems with this example. First of all, it is not going to impress your
-friends. Secondly, the triangle is a bit squashed and changes shape when you change the screen
-orientation of the device. The reason the shape is skewed is due to the fact that the object is
-being rendered in a frame which is not perfectly square. You'll fix that problem using a projection
-and camera view in the next section.</p>
-
-<p>Lastly, because the triangle is stationary, the system is redrawing the object repeatedly in
-exactly the same place, which is not the most efficient use of the OpenGL graphics pipeline. In the
-<a href="#motion">Add Motion</a> section, you'll make this shape rotate and justify
-this use of processing power.</p>
-
-<h2 id="projection-and-views">Apply Projection and Camera View</h2>
-
-<p>One of the basic problems in displaying graphics is that Android device displays are typically
-not square and, by default, OpenGL happily maps a perfectly square, uniform coordinate
-system onto your typically non-square screen. To solve this problem, you can apply an OpenGL
-projection mode and camera view (eye point) to transform the coordinates of your graphic objects
-so they have the correct proportions on any display. For more information about OpenGL coordinate
-mapping, see <a href="{@docRoot}guide/topics/graphics/opengl.html#coordinate-mapping">Mapping
-Coordinates for Drawn Objects</a>.</p>
-
-<p>To apply projection and camera view transformations to your triangle:
-</p>
-<ol>
-  <li>Add the following members to your {@code HelloOpenGLES20Renderer} class.
-<pre>
-    private int muMVPMatrixHandle;
-    private float[] mMVPMatrix = new float[16];
-    private float[] mMMatrix = new float[16];
-    private float[] mVMatrix = new float[16];
-    private float[] mProjMatrix = new float[16];
-</pre>
-    </li>
-    <li>Modify your {@code vertexShaderCode} string to add a variable for a model view
-projection matrix.
-<pre>
-    private final String vertexShaderCode = 
-        // This matrix member variable provides a hook to manipulate
-        // the coordinates of the objects that use this vertex shader
-        "uniform mat4 uMVPMatrix;   \n" +
-        
-        "attribute vec4 vPosition;  \n" +
-        "void main(){               \n" +
-        
-        // the matrix must be included as a modifier of gl_Position
-        " gl_Position = uMVPMatrix * vPosition; \n" +
-        
-        "}  \n";
-</pre>
-    </li>
-    <li>Modify the {@code onSurfaceChanged()} method to calculate the device screen ratio and
-create a projection matrix.
-<pre>
-    public void onSurfaceChanged(GL10 unused, int width, int height) {
-        GLES20.glViewport(0, 0, width, height);
-        
-        float ratio = (float) width / height;
-        
-        // this projection matrix is applied to object coodinates
-        // in the onDrawFrame() method
-        Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
-    }  
-</pre>
-    </li>
-    <li>Add the following code to the end of your {@code onSurfaceChanged()} method to
-reference the {@code uMVPMatrix} shader matrix variable you added in step 2.
-<pre>
-        muMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
-</pre>
-    </li>
-    <li>Add the following code to the end of your {@code onSurfaceChanged()} method to define
-a camera view matrix.
-<pre>
-        Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
-</pre>
-    </li>
-    <li>Finally, modify your {@code onDrawFrame()} method to combine the projection and
-camera view matrices and then apply the combined transformation to the OpenGL rendering pipeline.
-<pre>
-    public void onDrawFrame(GL10 unused) {
-        ...
-        // Apply a ModelView Projection transformation
-        Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
-        GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
-        
-        // Draw the triangle
-        ...
-    }
-</pre>
-  </li>
-  <li>Run the updated application and you should see something like this:</li>
-</ol>
-
-<img src="{@docRoot}images/opengl/helloopengl-es20-2.png">
-<p class="img-caption">
-  <strong>Figure 2.</strong> Triangle drawn with a projection and camera view applied.
-</p>
-
-<p>Now that you have applied this transformation, the triangle has three equal sides, instead of the
-<a href="#squashed-triangle">squashed triangle</a> in the earlier version.</p>
-
-<h2 id="motion">Add Motion</h2>
-
-<p>While it may be an interesting exercise to create static graphic objects with OpenGL ES, chances
-are you want at least <em>some</em> of your objects to move. In this section, you'll add motion to
-your triangle by rotating it.</p>
-
-<p>To add rotation to your triangle:</p>
-<ol>
-  <li>Add an additional tranformation matrix member to your {@code HelloOpenGLES20Renderer}
-class.
-    <pre>
-      private float[] mMMatrix = new float[16];
-    </pre>
-    </li>
-  <li>Modify your {@code onDrawFrame()} method to rotate the triangle object.
-<pre>
-    public void onDrawFrame(GL10 gl) {
-        ...
-    
-        // Create a rotation for the triangle
-        long time = SystemClock.uptimeMillis() % 4000L;
-        float angle = 0.090f * ((int) time);
-        Matrix.setRotateM(mMMatrix, 0, angle, 0, 0, 1.0f);
-        Matrix.multiplyMM(mMVPMatrix, 0, mVMatrix, 0, mMMatrix, 0);
-        Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mMVPMatrix, 0);
-        
-        // Apply a ModelView Projection transformation
-        GLES20.glUniformMatrix4fv(muMVPMatrixHandle, 1, false, mMVPMatrix, 0);
-        
-        // Draw the triangle
-        ...
-    }
-</pre>
-  </li>
-  <li>Run the application and your triangle should rotate around its center.</li>
-</ol>
-
-
-<h2 id="touch">Respond to Touch Events</h2>
-<p>Making objects move according to a preset program like the rotating triangle  is useful for
-getting some attention, but what if you want to have users interact with your OpenGL graphics? In
-this section, you'll learn how listen for touch events to let users interact with objects in your
-{@code HelloOpenGLES20SurfaceView}.</p>
-  
-<p>The key to making your OpenGL application touch interactive is expanding your implementation of
-{@link android.opengl.GLSurfaceView} to override the {@link 
-android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} to listen for touch events.
-Before you do that, however, you'll modify the renderer class to expose the rotation angle of the
-triangle. Afterwards, you'll modify the {@code HelloOpenGLES20SurfaceView} to process touch events
-and pass that data to your renderer.</p>
-
-<p>To make your triangle rotate in response to touch events:</p>
-
-<ol>
-  <li>Modify your {@code HelloOpenGLES20Renderer} class to include a new, public member so that
-your {@code HelloOpenGLES10SurfaceView} class is able to pass new rotation values your renderer:
-<pre>
-    public float mAngle;
-</pre>  
-  </li>
-  <li>In your {@code onDrawFrame()} method, comment out the code that generates an angle and
-replace the {@code angle} variable with {@code mAngle}.
-<pre>
-        // Create a rotation for the triangle (Boring! Comment this out:)
-        // long time = SystemClock.uptimeMillis() % 4000L;
-        // float angle = 0.090f * ((int) time);
-
-        // Use the mAngle member as the rotation value
-        Matrix.setRotateM(mMMatrix, 0, mAngle, 0, 0, 1.0f);
-</pre>
-  </li>
-  <li>In your {@code HelloOpenGLES20SurfaceView} class, add the following member variables.
-<pre>
-    private final float TOUCH_SCALE_FACTOR = 180.0f / 320;
-    private HelloOpenGLES20Renderer mRenderer;
-    private float mPreviousX;
-    private float mPreviousY;
-</pre>
-  </li>
-  <li>In the constructor method for {@code HelloOpenGLES20SurfaceView}, set the {@code mRenderer}
-member so you have a handle to pass in rotation input and set the render mode to {@link
-android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY}.<pre>
-    public HelloOpenGLES20SurfaceView(Context context){
-        super(context);
-        // Create an OpenGL ES 2.0 context.
-        setEGLContextClientVersion(2);
-            
-        // set the mRenderer member
-        mRenderer = new HelloOpenGLES20Renderer();
-        setRenderer(mRenderer);
-        
-        // Render the view only when there is a change
-        setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
-    }
-</pre>
-  </li>
-  <li>In your {@code HelloOpenGLES20SurfaceView} class, override the {@link
-android.view.View#onTouchEvent(android.view.MotionEvent) onTouchEvent()} method to listen for touch
-events and pass them to your renderer.
-<pre>
-    &#64;Override 
-    public boolean onTouchEvent(MotionEvent e) {
-        // MotionEvent reports input details from the touch screen
-        // and other input controls. In this case, you are only
-        // interested in events where the touch position changed.
-
-        float x = e.getX();
-        float y = e.getY();
-        
-        switch (e.getAction()) {
-            case MotionEvent.ACTION_MOVE:
-    
-                float dx = x - mPreviousX;
-                float dy = y - mPreviousY;
-    
-                // reverse direction of rotation above the mid-line
-                if (y &gt; getHeight() / 2) {
-                  dx = dx * -1 ;
-                }
-    
-                // reverse direction of rotation to left of the mid-line
-                if (x &lt; getWidth() / 2) {
-                  dy = dy * -1 ;
-                }
-              
-                mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;
-                requestRender();
-        }
-
-        mPreviousX = x;
-        mPreviousY = y;
-        return true;
-    } 
-</pre>
-  <p class="note"><strong>Note:</strong> Touch events return pixel coordinates which <em>are not the
-same</em> as OpenGL coordinates. Touch coordinate [0,0] is the bottom-left of the screen and the
-highest value [max_X, max_Y] is the top-right corner of the screen. To match touch events to OpenGL
-graphic objects, you must translate touch coordinates into OpenGL coordinates.</p>
-  </li>
-  <li>Run the application and drag your finger or cursor around the screen to rotate the
-triangle.</li>
-</ol>
-<p>For another example of OpenGL touch event functionality, see <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/
-TouchRotateActivity.html">TouchRotateActivity</a>.</p>
\ No newline at end of file
diff --git a/docs/html/resources/tutorials/testing/activity_test.jd b/docs/html/resources/tutorials/testing/activity_test.jd
deleted file mode 100644
index f88b768..0000000
--- a/docs/html/resources/tutorials/testing/activity_test.jd
+++ /dev/null
@@ -1,1381 +0,0 @@
-page.title=Activity Testing
-parent.title=Tutorials
-parent.link=../../browser.html?tag=tutorial
-@jd:body
- <div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-      <a href="#Prerequisites">Prerequisites</a>
-    </li>
-    <li>
-      <a href="#DownloadCode">Installing the Tutorial Sample Code</a>
-    </li>
-    <li>
-        <a href="#SetupEmulator">Setting Up the Emulator</a>
-    </li>
-    <li>
-        <a href="#SetupProjects">Setting Up the Projects</a>
-    </li>
-    <li>
-      <a href="#CreateTestCaseClass">Creating the Test Case Class</a>
-      <ol>
-        <li>
-          <a href="#AddTestCaseClass">Adding the test case class file</a>
-        </li>
-        <li>
-          <a href="#AddConstructor">Adding the test case constructor</a>
-        </li>
-        <li>
-            <a href="#AddSetupMethod">Adding the setup method</a>
-        </li>
-        <li>
-            <a href="#AddPreConditionsTest">Adding an initial conditions test</a>
-        </li>
-        <li>
-            <a href="#AddUITest">Adding a UI test</a>
-        </li>
-        <li>
-            <a href="#StateManagementTests">Adding state management tests</a>
-        </li>
-      </ol>
-    </li>
-    <li>
-        <a href="#RunTests">Running the Tests and Seeing the Results</a>
-    </li>
-    <li>
-        <a href="#TestFailure">Forcing Some Tests to Fail</a>
-    </li>
-    <li>
-        <a href="#NextSteps">Next Steps</a>
-    </li>
-</ol>
-<h2 id="#Appendix">Appendix</h2>
-<ol>
-    <li>
-        <a href="#InstallCompletedTestApp">Installing the Completed Test Application Java File</a>
-    </li>
-    <li>
-        <a href="#EditorCommandLine">For Users Not Developing In Eclipse</a>
-    </li>
-</ol>
-<h2>Related Tutorials</h2>
-<ol>
-    <li>
-        <a href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">Hello, Testing</a>
-    </li>
-</ol>
-<h2>See Also</h2>
-<ol>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a>
-    </li>
-    <li>
-        {@link android.test.ActivityInstrumentationTestCase2}
-    </li>
-    <li>
-        {@link junit.framework.Assert}
-    </li>
-    <li>
-        {@link android.test.InstrumentationTestRunner}
-    </li>
-</ol>
-</div>
-</div>
-<p>
-  Android includes powerful tools for testing applications. The tools extend JUnit with additional features, provide convenience classes for mock Android system objects, and use
-  instrumentation to give you control over your main application while you are testing it. The entire Android testing environment is discussed in the document
-  <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a>.
-</p>
-<p>
-  This tutorial demonstrates the Android testing tools by presenting a simple Android application and then leading you step-by-step through the creation of a test application for it.
-  The test application demonstrates these key points:
-</p>
-  <ul>
-    <li>
-      An Android test is itself an Android application that is linked to the application under test by entries in its <code>AndroidManifest.xml</code> file.
-    </li>
-    <li>
-      Instead of Android components, an Android test application contains one or more test cases. Each of these is a separate class definition.
-    </li>
-    <li>
-      Android test case classes extend the JUnit {@link junit.framework.TestCase} class.
-    </li>
-    <li>
-      Android test case classes for activities extend JUnit and also connect you to the application under test with instrumentation. You can send keystroke or touch events directly to the UI.
-    </li>
-    <li>
-      You choose an Android test case class based on the type of component (application, activity, content provider, or service) you are testing.
-    </li>
-    <li>
-      Additional test tools in Eclipse/ADT provide integrated support for creating test applications, running them, and viewing the results.
-    </li>
-  </ul>
-<p>
-  The test application contains methods that perform the following tests:
-</p>
-  <ul>
-    <li>
-      Initial conditions test. Tests that the application under test initializes correctly. This is also a unit test of the application's
-      {@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method. Testing initial conditions also provides a confidence measure for subsequent tests.
-    </li>
-    <li>
-      UI test. Tests that the main UI operation works correctly. This test demonstrates the instrumentation features available in activity testing.
-      It shows that you can automate UI tests by sending key events from the test application to the main application.
-    </li>
-    <li>
-      State management tests. Test the application's code for saving state. This test demonstrates the instrumentation features of the test runner, which
-      are available for testing any component.
-    </li>
-  </ul>
-<h2 id="Prerequisites">Prerequisites</h2>
-<p>
-  The instructions and code in this tutorial depend on the following:
-</p>
-  <ul>
-    <li>
-      Basic knowledge of Android programming. If you haven't yet written an Android application, do the
-      <a href="{@docRoot}resources/tutorials/hello-world.html">Hello, World</a> tutorial. If you
-      want to learn more about Spinner, the application under test, then you might want to visit the
-      <a href="{@docRoot}resources/tutorials/views/hello-spinner.html">Hello Views &gt; Spinner</a> example.
-    </li>
-    <li>
-      Some familiarity with the Android testing framework and concepts. If you haven't explored
-      Android testing yet, start by reading the Developer Guide topic <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a>
-      or following the <a href="{@docRoot}resources/tutorials/testing/helloandroid_test.html">
-      Hello, Testing</a> tutorial.
-    </li>
-    <li>
-        Eclipse with ADT. This tutorial describes how to set up and run a test application using
-        Eclipse with ADT. If you haven't yet installed Eclipse and the ADT plugin,
-        follow the steps in <a href="{@docRoot}sdk/installing.html">Installing the SDK</a>
-        to install them before continuing. If you are not developing in Eclipse, you will
-        find instructions for setting up and running the test application in the
-        <a href="#EditorCommandLine">appendix</a> of this document.
-    </li>
-    <li>
-        Android 1.5 platform (API Level 3) or higher. You must have the Android 1.5 platform
-        (API Level 3) or higher installed in your SDK, because this tutorial uses APIs that
-        were introduced in that version.
-        <p>
-            If you are not sure which platforms are installed in your SDK,
-            open the Android SDK and AVD Manager and check in the
-            <strong>Installed Packages</strong> panel.
-            If aren't sure how to download a platform into your SDK,
-            read <a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>.
-        </p>
-    </li>
-  </ul>
-<h2 id="DownloadCode">Installing the Tutorial Sample Code</h2>
-<p>
-    During this tutorial, you will be working with sample code that is provided as part
-    of the downloadable Samples component of the SDK. Specifically, you will be working
-    with a pair of related sample applications &mdash; an application under test and a test
-    application:
-</p>
-    <ul>
-        <li>
-            Spinner is the application under test. This tutorial focuses on the
-            common situation of writing tests for an application that already exists, so the main
-            application is provided to you.
-        </li>
-        <li>
-             SpinnerTest is the test application. In the tutorial, you create this application
-             step-by-step. If you want to run quickly through the tutorial,
-             you can install the completed SpinnerTest application first, and then follow the
-             text. You may get more from the tutorial, however, if you create the test application
-             as you go. The instructions for installing the completed test application are in the
-             section <a href="#InstallCompletedTestApp">Installing the Completed Test Application Java File</a>.
-        </li>
-    </ul>
-<p>
-    The sample applications are provided in the SDK component named
-    "Samples for SDK API 8" and in later versions of the Samples.
-</p>
-<p>
-    To get started with the tutorial, first use the Android SDK and AVD manager to install an
-    appropriate version of the Samples:
-</p>
-<ol>
-    <li>
-        In Eclipse, select <strong>Window</strong> &gt; <strong>Android SDK and AVD Manager</strong>.
-    </li>
-    <li>
-        Open the <strong>Installed Packages</strong> panel and check whether
-        &quot;Samples for SDK API 8&quot; (or higher version) is listed.
-        If so, skip to the next section,
-        <a href="#SetupProjects">Setting Up the Projects</a>, to get started with the tutorial.
-        Otherwise, continue with the next step.
-     </li>
-     <li>
-        Open the <strong>Available Packages</strong> panel.
-     </li>
-     <li>
-        Select the &quot;Samples for SDK API 8&quot; component and click <strong>Install Selected</strong>.
-     </li>
-     <li>
-        Verify and accept the component and then click <strong>Install Accepted</strong>.
-        The Samples component will now be installed into your SDK.
-     </li>
-</ol>
-<p>
-    When the installation is complete, the applications in the
-    Samples component are stored at this location on your computer:
-</p>
-<p style="margin-left:2em">
-    <code>&lt;<em>sdk</em>&gt;/samples/android-8/</code>
-</p>
-<p>
-    For general information about the Samples, see
-    <a href="{@docRoot}resources/samples/get.html">Getting the Samples</a>
-</p>
-<p class="note">
-    <strong>Note:</strong> Although the sample code for this tutorial is provided in the
-    &quot;Samples for SDK API 8&quot; component, that does not imply that you need to build or
-    run the application against the corresponding platform (Android 2.2).
-    The API level referenced in the Samples component name indicates only the origin branch from
-    which the samples were built.
-</p>
-<h2 id="SetupEmulator">Setting Up the Emulator</h2>
-<p>
-  In this tutorial, you will use the Android emulator to run applications. The emulator needs
-  an Android Virtual Device (AVD) with an API level equal to or higher than the one you set for the projects in the previous step.
-  To find out how to check this and create the right AVD if necessary, 
-  see <a href="{@docRoot}guide/developing/devices/managing-avds.html">Creating an AVD</a>.
-</p>
-<p>
-    As a test of the AVD and emulator, run the SpinnerActivity application in Eclipse with ADT. When it starts,
-    click the large downward-pointing arrow to the right of the spinner text. You see the spinner expand and display the title &quot;Select a planet&quot; at the top.
-    Click one of the other planets. The spinner closes, and your selection appears below it on the screen.
-</p>
-<h2 id="SetupProjects">Setting Up the Projects</h2>
-<p>
-    When you are ready to get started with the tutorial, begin by setting up Eclipse projects for
-    both Spinner (the application under test) and SpinnerTest (the test application).
-</p>
-<p>
-    You'll be using the Spinner application as-is, without modification, so you'll be loading it
-    into Eclipse as a new Android project from existing source. In the process, you'll be
-    creating a new test project associated with Spinner that will contain the SpinnerTest
-    application. The SpinnerTest application will be completely new and you'll be
-    using the code examples in this tutorial to add test classes and tests to it.
-</p>
-<p>
-    To install the Spinner app in a new Android project from existing source, following these steps:
-</p>
-<ol>
-    <li>
-        In Eclipse, select <strong>File</strong>&nbsp;&gt;&nbsp;<strong>New</strong>&nbsp;&gt;&nbsp;<strong>Project</strong>&nbsp;&gt;&nbsp;<strong>Android</strong>&nbsp;&gt;&nbsp;<strong>Android Project</strong>,
-        then click Next. The <strong>New Android Project</strong> dialog appears.
-    </li>
-    <li>
-        In the <em>Project name</em> text box, enter &quot;SpinnerActivity&quot;. The <em>Properties</em> area is filled in automatically.
-    </li>
-    <li>
-        In the <em>Contents</em> area, set &quot;Create project from existing source&quot;.
-    </li>
-    <li>
-        For <em>Location</em>, click <strong>Browse</strong>, navigate to the directory <code>&lt;SDK_path&gt;/samples/android-8/Spinner</code>,
-        then click Open. The directory name <code>&lt;SDK_path&gt;/samples/android-8/Spinner</code> now appears in the <em>Location</em> text box.
-    </li>
-    <li>
-        In the <em>Build Target</em> area, set a API level of 3 or higher. If you are already developing with a particular target, and it is API level 3 or higher, then use that target.
-    </li>
-    <li>
-        In the <em>Properties</em> area, in the <em>Min SDK Version:</em>, enter &quot;3&quot;.
-    </li>
-    <li>
-        You should now see these values:
-        <ul>
-            <li><em>Project Name:</em> &quot;SpinnerActivity&quot;</li>
-            <li><em>Create project from existing source:</em> set</li>
-            <li><em>Location:</em> &quot;<code>&lt;SDK_path&gt;/samples/android-8/Spinner</code>&quot;</li>
-            <li><em>Build Target:</em> &quot;API level of 3 or higher&quot; (<em>Target Name</em> &quot;Android 1.5 or higher&quot;)</li>
-            <li><em>Package name:</em> (disabled, set to &quot;<code>com.android.example.spinner</code>&quot;)</li>
-            <li><em>Create Activity:</em> (disabled, set to &quot;.SpinnerActivity&quot;)</li>
-            <li><em>Min SDK Version:</em> &quot;3&quot;</li>
-        </ul>
-        <p>
-            The following screenshot summarizes these values:
-        </p>
-            <a href="{@docRoot}images/testing/eclipse_new_android_project_complete_callouts.png">
-                <img src="{@docRoot}images/testing/eclipse_new_android_project_complete_callouts.png" alt="New Android Project dialog with filled-in values" style="height:230px"/>
-            </a>
-
-    </li>
-</ol>
-<p>
-    To create a new test project for the SpinnerTest application, follow these steps:
-</p>
-<ol>
-    <li>
-        Click Next. The <strong>New Android Test Project</strong> dialog appears.
-    </li>
-    <li>
-        Set &quot;Create a Test Project&quot;.
-    </li>
-    <li>
-        Leave the other values unchanged. The result should be:
-        <ul>
-            <li><em>Create a Test Project:</em> checked</li>
-            <li><em>Test Project Name:</em> &quot;SpinnerActivityTest&quot;</li>
-            <li><em>Use default location:</em> checked (this should contain the directory name &quot;<code>workspace/SpinnerActivityTest</code>&quot;).</li>
-            <li><em>Build Target:</em> Use the same API level you used in the previous step.</li>
-            <li><em>Application name:</em> &quot;SpinnerActivityTest&quot;</li>
-            <li><em>Package name:</em> &quot;<code>com.android.example.spinner.test</code>&quot;</li>
-            <li><em>Min SDK Version:</em> &quot;3&quot;</li>
-        </ul>
-        <p>
-            The following screenshot summarizes these values:
-        </p>
-            <a href="{@docRoot}images/testing/eclipse_new_android_testproject_complete_callouts.png">
-            <img src="{@docRoot}images/testing/eclipse_new_android_testproject_complete_callouts.png" alt="New Android Test Project dialog with filled-in values" style="height:230px"/>
-            </a>
-    </li>
-    <li>
-        Click Finish. Entries for SpinnerActivity and SpinnerActivityTest should appear in the
-        <strong>Package Explorer</strong>.
-        <p class="note">
-            <strong>Note:</strong> If you set <em>Build Target</em> to an API level higher than &quot;3&quot;, you will see the warning
-            &quot;The API level for the selected SDK target does not match the Min SDK version&quot;. You do not need to change the API level or the Min SDK version.
-            The message tells you that you are building the projects with one particular API level, but specifying that a lower API level is required. This may
-            occur if you have chosen not to install the optional earlier API levels.
-        </p>
-        <p>
-            If you see errors listed in the <strong>Problems</strong> pane at the bottom of the Eclipse window, or if a red error marker appears next to
-            the entry for SpinnerActivity in the Package Explorer, highlight the SpinnerActivity entry and then select
-            <strong>Project</strong>&nbsp;&gt;&nbsp;<strong>Clean</strong>. This should fix any errors.
-        </p>
-    </li>
-</ol>
-<p>
-    You now have the application under test in the SpinnerActivity project,
-    and an empty test project in SpinnerActivityTest. You may
-    notice that the two projects are in different directories, but Eclipse with
-    ADT handles this automatically. You should have no problem in either building or running them.
-</p>
-<p>
-    Notice that Eclipse and ADT have already done some initial setup for your test application.
-    Expand the SpinnerActivityTest project, and notice that it already has an
-    Android manifest file <code>AndroidManifest.xml</code>.
-    Eclipse with ADT created this when you added the test project.
-    Also, the test application is already set up to use instrumentation. You can see this
-    by examining <code>AndroidManifest.xml</code>.
-    Open it, then at the bottom of the center pane click <strong>AndroidManifest.xml</strong>
-    to display the XML contents:
-</p>
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?&gt;
-&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
-      package="com.android.example.spinner.test"
-      android:versionCode="1"
-      android:versionName="1.0"&gt;
-    &lt;uses-sdk android:minSdkVersion="3" /&gt;
-    &lt;instrumentation
-        android:targetPackage="com.android.example.spinner"
-        android:name="android.test.InstrumentationTestRunner" /&gt;
-    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
-        &lt;uses-library android:name="android.test.runner" /&gt;
-        ...
-    &lt;/application&gt;
-&lt;/manifest&gt;
-</pre>
-<p>
-    Notice the <code>&lt;instrumentation&gt;</code> element. The attribute
-    <code>android:targetPackage="com.android.example.spinner"</code> tells Android that the
-    application under test is defined in the Android package
-    <code>com.android.example.spinner</code>. Android now knows to use that
-    package's <code>AndroidManifest.xml</code> file to launch the application under test.
-    The <code>&lt;instrumentation&gt;</code> element also contains the attribute
-    <code>android:name="android.test.InstrumentationTestRunner"</code>, which tells Android
-    instrumentation to run the test application with Android's instrumentation-enabled test runner.
-</p>
-<h2 id="CreateTestCaseClass">Creating the Test Case Class</h2>
-
-<p>
-    You now have a test project SpinnerActivityTest, and the basic structure of a test
-    application also called SpinnerActivityTest. The basic structure includes all the files and
-    directories you need to build and run a test application, except for the class that
-    contains your tests (the test case class).
-</p>
-<p>
-    The next step is to define the test case class. In this tutorial, you'll be creating a
-    test case class that includes:
-</p>
-<ul>
-    <li>
-        Test setup. This use of the JUnit {@link junit.framework.TestCase#setUp() setUp()}
-        method demonstrates some of the tasks you might perform before running an Android test.
-    </li>
-    <li>
-        Testing initial conditions. This test demonstrates a good testing technique.
-        It also demonstrates that with Android instrumentation you can look at the application
-        under test <em>before</em> the main activity starts. The test checks that the application's
-        important objects have been initialized.
-        If the test fails, you then know that any other tests against the application are
-        unreliable, since the application was running in an incorrect state.
-        <p class="note">
-            <strong>Note:</strong> The purpose of testing initial conditions is not the same as
-            using <code>setUp()</code>. The JUnit {@link junit.framework.TestCase#setUp()} runs once
-            before <strong>each test method</strong>, and its purpose is to create a clean test
-            environment. The initial conditions test runs once, and its purpose is to verify that the
-            application under test is ready to be tested.
-        </p>
-    </li>
-    <li>
-        Testing the UI. This test shows how to control the main application's UI
-        with instrumentation, a powerful automation feature of Android testing.
-    </li>
-    <li>
-        Testing state management. This test shows some techniques for testing how
-        well the application maintains state in the Android environment. Remember that to
-        provide a satisfactory user experience, your application must never lose its current state,
-        even if it's interrupted by a phone call or destroyed because of memory constraints.
-        The Android activity lifecycle provides ways to maintain state, and the
-        <code>SpinnerActivity</code> application uses them. The test shows the techniques for
-        verifying that they work.
-    </li>
-</ul>
-<p>
-  Android tests are contained in a special type of Android application that contains one or more test class definitions. Each of these contains
-  one or more test methods that do the actual tests. In this tutorial, you will first add a test case class, and then add tests to it.
-</p>
-<p>
- You first choose an Android test case class to extend. You choose from the base test case classes according to the Android component you are testing and the types of tests you are doing.
- In this tutorial, the application under test has a single simple activity, so the test case class will be for an Activity component. Android offers several, but the one that tests in
- the most realistic environment is {@link android.test.ActivityInstrumentationTestCase2}, so you will use it as the base class. Like all activity test case classes,
- <code>ActivityInstrumentationTestCase2</code> offers convenience methods for interacting directly with the UI of the application under test.
-</p>
-<h3 id="AddTestCaseClass">Adding the test case class file</h3>
-<p>
-    To add <code>ActivityInstrumentationTestCase2</code> as the base test case class, follow these steps:
-</p>
-<ol>
-  <li>
-    In the Package Explorer, expand the test project SpinnerActivityTest if it is not open already.
-  </li>
-  <li>
-    Within SpinnerActivityTest, expand the <code>src/</code> folder and then the package marker for
-    <code>com.android.example.spinner.test</code>. Right-click on the package name and select <strong>New</strong> &gt; <strong>Class</strong>:<br/>
-    <a href="{@docRoot}images/testing/spinner_create_test_class_callouts.png">
-      <img alt="Menu for creating a new class in the test application" src="{@docRoot}images/testing/spinner_create_test_class_callouts.png" style="height:230px"/>
-    </a>
-    <p>
-      The <strong>New Java Class</strong> wizard appears:
-    </p>
-    <a href="{@docRoot}images/testing/spinnertest_new_class_callouts.png">
-      <img alt="New Java Class wizard dialog" src="{@docRoot}images/testing/spinnertest_new_class_callouts.png" style="height:230px"/>
-    </a>
-  </li>
-  <li>
-    In the wizard, enter the following:
-    <ul>
-      <li>
-        <em>Name:</em> &quot;SpinnerActivityTest&quot;. This becomes the name of your test class.
-      </li>
-      <li>
-        <em>Superclass:</em> &quot;<code>android.test.ActivityInstrumentationTestCase2&lt;SpinnerActivity&gt;</code>&quot;. The superclass is parameterized, so
-        you have to provide it your main application's class name.
-      </li>
-    </ul>
-    <p>
-      Do not change any of the other settings. Click Finish.
-    </p>
-  </li>
-  <li>
-    You now have a new file <code>SpinnerActivityTest.java</code> in the project.
-  </li>
-  <li>
-    To resolve the reference to SpinnerActivity, add the following import:
-<pre>
-import com.android.example.spinner.SpinnerActivity;
-</pre>
-  </li>
-</ol>
-<h3 id="AddConstructor">Adding the test case constructor</h3>
-  <p>
-    To ensure that the test application is instantiated correctly, you must set up a constructor that the test
-    runner will call when it instantiates your test class. This constructor has no parameters, and its sole
-    purpose is to pass information to the superclass's default constructor. To set up this constructor, enter the
-    following code in the class:
-  </p>
-<pre>
-  public SpinnerActivityTest() {
-    super("com.android.example.spinner", SpinnerActivity.class);
-  } // end of SpinnerActivityTest constructor definition
-</pre>
-<p>
-  This calls the superclass constructor with the Android package name (<code>com.android.example.spinner</code>)and main activity's class
-  (<code>SpinnerActivity.class</code>) for the application under test. Android uses this information to find the application and activity to test.
-</p>
-<p>
-  You are now ready to add tests, by adding test methods to the class.
-</p>
-<h3 id="AddSetupMethod">Adding the setup method</h3>
-<p>
-    The <code>setUp()</code> method is invoked before every test. You use it to initialize variables and clean up from previous tests. You can also use
-    the JUnit {@link junit.framework.TestCase#tearDown() tearDown()} method, which runs <strong>after</strong> every test method. The tutorial does not use it.
-</p>
-<p>
-    The method you are going to add does the following:
-</p>
-<ul>
-  <li>
-    <code>super.setUp()</code>. Invokes the superclass constructor for <code>setUp()</code>, which is required by JUnit.
-  </li>
-  <li>
-    Calls {@link android.test.ActivityInstrumentationTestCase2#setActivityInitialTouchMode(boolean) setActivityInitialTouchMode(false)}.
-    This turns off <strong>touch mode</strong> in the device or emulator. If any of your test methods send key events to the application,
-    you must turn off touch mode <em>before</em> you start any activities; otherwise, the call is ignored.
-  </li>
-  <li>
-    Stores references to system objects. Retrieves and stores a reference to the activity under test, the <code>Spinner</code>
-    widget used by the activity, the <code>SpinnerAdapter</code> that backs the widget, and the string value of the selection that is
-    set when the application is first installed. These objects are used in the state management test. The methods invoked are:
-    <ul>
-      <li>
-        {@link android.test.ActivityInstrumentationTestCase2#getActivity()}. Gets a reference to the activity under test (<code>SpinnerActivity</code>).
-        This call also starts the activity if it is not already running.
-      </li>
-      <li>
-        {@link android.app.Activity#findViewById(int)}. Gets a reference to the <code>Spinner</code> widget of the application under test.
-      </li>
-      <li>
-        {@link android.widget.AbsSpinner#getAdapter()}. Gets a reference to the adapter (an array of strings) backing the spinner.
-      </li>
-    </ul>
-  </li>
-</ul>
-<p>
-    Add this code to the definition of <code>SpinnerActivityTest</code>, after the constructor definition:
-</p>
-<pre>
-  &#64;Override
-  protected void setUp() throws Exception {
-    super.setUp();
-
-    setActivityInitialTouchMode(false);
-
-    mActivity = getActivity();
-
-    mSpinner =
-      (Spinner) mActivity.findViewById(
-        com.android.example.spinner.R.id.Spinner01
-      );
-
-      mPlanetData = mSpinner.getAdapter();
-
-  } // end of setUp() method definition
-</pre>
-<p>
-    Add these members to the test case class:
-</p>
-<pre>
-  private SpinnerActivity mActivity;
-  private Spinner mSpinner;
-  private SpinnerAdapter mPlanetData;
-</pre>
-<p>
-  Add these imports:
-</p>
-<pre>
-import android.widget.Spinner;
-import android.widget.SpinnerAdapter;
-</pre>
-<p>
-    You now have the the complete <code>setUp()</code> method.
-</p>
-<h3 id="AddPreConditionsTest">Adding an initial conditions test</h3>
-<p>
-  The initial conditions test verifies that the application under test is initialized correctly. It is an illustration of the types of tests you can run, so it is not comprehensive.
-  It verifies the following:
-</p>
-<ul>
-  <li>
-    The item select listener is initialized. This listener is called when a selection is made from the spinner.
-  </li>
-  <li>
-    The adapter that provides values to the spinner is initialized.
-  </li>
-  <li>
-    The adapter contains the right number of entries.
-  </li>
-</ul>
-<p>
-  The actual initialization of the application under test is done in <code>setUp()</code>, which the test runner calls automatically before every test. The verifications are
-  done with JUnit {@link junit.framework.Assert} calls. As a useful convention, the method name is <code>testPreConditions()</code>:
-</p>
-<pre>
-  public void testPreConditions() {
-    assertTrue(mSpinner.getOnItemSelectedListener() != null);
-    assertTrue(mPlanetData != null);
-    assertEquals(mPlanetData.getCount(),ADAPTER_COUNT);
-  } // end of testPreConditions() method definition
-</pre>
-<p>
-  Add this member:
-</p>
-<pre>
-  public static final int ADAPTER_COUNT = 9;
-</pre>
-<h3 id="AddUITest">Adding a UI test</h3>
-<p>
-  Now create a UI test that selects an item from the <code>Spinner</code> widget. The test sends key events to the UI with key events.
-  The test confirms that the selection matches the result you expect.
-</p>
-<p>
-  This test demonstrates the power of using instrumentation in Android testing. Only an instrumentation-based test class allows you to send key events (or touch events)
-  to the application under test. With instrumentation, you can test your UI without having to take screenshots, record the screen, or do human-controlled testing.
-</p>
-<p>
-  To work with the spinner, the test has to request focus for it and then set it to a known position. The test uses {@link android.view.View#requestFocus() requestFocus()} and
-  {@link android.widget.AbsSpinner#setSelection(int) setSelection()} to do this. Both of these methods interact with a View in the application under test, so you have to call them
-  in a special way.
-</p>
-<p>
-  Code in a test application that interacts with a View of the application under test must run in the main application's thread, also
-  known as the <em>UI thread</em>. To do this, you use the {@link android.app.Activity#runOnUiThread(java.lang.Runnable) Activity.runOnUiThread()}
-  method. You pass the code to <code>runOnUiThread()</code>in an anonymous {@link java.lang.Runnable Runnable} object. To set
-  the Java statements in the <code>Runnable</code> object, you override the object's {@link java.lang.Runnable#run()} method.
-</p>
-<p>
-  To send key events to the UI of the application under test, you use the <a href="{@docRoot}reference/android/test/InstrumentationTestCase.html#sendKeys(int...)">sendKeys</a>() method.
-  This method does not have to run on the UI thread, since Android uses instrumentation to pass the key events to the application under test.
-</p>
-<p>
-  The last part of the test compares the selection made by sending the key events to a pre-determined value. This tests that the spinner is working as intended.
-</p>
-<p>
-    The following sections show you how to add the code for this test.
-</p>
-<ol>
-    <li>
-        Get focus and set selection. Create a new method <code>public void testSpinnerUI()</code>. Add
-        code to to request focus for the spinner and set its position to default or initial position, "Earth". This code is run on the UI thread of
-        the application under test:
-<pre>
-  public void testSpinnerUI() {
-
-    mActivity.runOnUiThread(
-      new Runnable() {
-        public void run() {
-          mSpinner.requestFocus();
-          mSpinner.setSelection(INITIAL_POSITION);
-        } // end of run() method definition
-      } // end of anonymous Runnable object instantiation
-    ); // end of invocation of runOnUiThread
-</pre>
-        <p>
-          Add the following member to the test case class.
-        </p>
-<pre>
-  public static final int INITIAL_POSITION = 0;
-</pre>
-    </li>
-    <li>
-      Make a selection. Send key events to the spinner to select one of the items. To do this, open the spinner by
-      "clicking" the center keypad button (sending a DPAD_CENTER key event) and then clicking (sending) the down arrow keypad button five times. Finally,
-      click the center keypad button again to highlight the desired item. Add the following code:
-<pre>
-    this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
-    for (int i = 1; i &lt;= TEST_POSITION; i++) {
-      this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
-    } // end of for loop
-
-    this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
-</pre>
-    <p>
-      Add the following member to the test case class:
-    </p>
-<pre>
-  public static final int TEST_POSITION = 5;
-</pre>
-    <p>
-      This sets the final position of the spinner to "Saturn" (the spinner's backing adapter is 0-based).
-    </p>
-  </li>
-  <li>
-    Check the result. Query the current state of the spinner, and compare its current selection to the expected value.
-    Call the method {@link android.widget.AdapterView#getSelectedItemPosition() getSelectedItemPosition()} to find out the current selection position, and then
-    {@link android.widget.AdapterView#getItemAtPosition(int) getItemAtPosition()} to get the object corresponding to that position (casting it to a String). Assert that
-    this string value matches the expected value of "Saturn":
-<pre>
-    mPos = mSpinner.getSelectedItemPosition();
-    mSelection = (String)mSpinner.getItemAtPosition(mPos);
-    TextView resultView =
-      (TextView) mActivity.findViewById(
-        com.android.example.spinner.R.id.SpinnerResult
-      );
-
-    String resultText = (String) resultView.getText();
-
-    assertEquals(resultText,mSelection);
-
-  } // end of testSpinnerUI() method definition
-</pre>
-<p>
-  Add the following members to the test case class:
-</p>
-<pre>
-  private String mSelection;
-  private int mPos;
-</pre>
-  <p>
-    Add the following imports to the test case class:
-  </p>
-<pre>
-  import android.view.KeyEvent;
-  import android.widget.TextView;
-</pre>
-  </li>
-</ol>
-<p>
-  Pause here to run the tests you have. The procedure for running a test application is different
-  from running a regular Android application. You run a test application as an Android JUnit
-  application. To see how to do this, see <a href="#RunTests">Running the Tests and Seeing the Results</a>.
-</p>
-<p>
-    Eventually, you will see the <code>SpinnerActivity</code> application start, and the test
-    application controlling it by sending it key events. You will also see a new
-    <strong>JUnit</strong> view in the Explorer pane, showing the results of the
-    test. The JUnit view is documented in a following section,
-    <a href="#RunTests">Running the Test and Seeing the Results</a>.
-</p>
-<h3 id="StateManagementTests">Adding state management tests</h3>
-<p>
-  You now write two tests that verify that SpinnerActivity maintains its state when it is paused or terminated.
-  The state, in this case, is the current selection in the spinner. When users make a selection,
-  pause or terminate the application, and then resume or restart it, they should see
-  the same selection.
-</p>
-<p>
-  Maintaining state is an important feature of an application. Users may switch from the current
-  application temporarily to answer the phone, and then switch back. Android may decide to
-  terminate and restart an activity to change the screen orientation, or terminate an unused
-  activity to regain storage. In each case, users are best served by having the UI return to its
-  previous state (except where the logic of the application dictates otherwise).
-</p>
-<p>
-  SpinnerActivity manages its state in these ways:
-</p>
-  <ul>
-    <li>
-      Activity is hidden. When the spinner screen (the activity) is running but hidden by some other screen, it
-      stores the spinner's position and value in a form that persists while the application is running.
-    </li>
-    <li>
-      Application is terminated. When the activity is terminated, it stores the spinner's position and value in
-      a permanent form. The activity can read the position and value when it restarts, and restore the spinner to its previous state.
-    </li>
-    <li>
-      Activity re-appears. When the user returns to the spinner screen, the previous selection is restored.
-    </li>
-    <li>
-      Application is restarted. When the user starts the application again, the previous selection is restored.
-    </li>
-  </ul>
-<p class="note">
-    <strong>Note:</strong> An application can manage its state in other ways as well, but these are
-    not covered in this tutorial.
-</p>
-<p>
-  When an activity is hidden, it is <strong>paused</strong>. When it re-appears, it
-  <strong>resumes</strong>. Recognizing that these are key points in an activity's life cycle,
-  the Activity class provides two callback methods {@link android.app.Activity#onPause()} and
-  {@link android.app.Activity#onResume()} for handling pauses and resumes.
-  SpinnerActivity uses them for code that saves and restores state.
-</p>
-<p>
-  <strong>Note:</strong> If you would like to learn more about the difference between losing
-  focus/pausing and killing an application,
-  read about the <a href="{@docRoot}guide/topics/fundamentals/activities.html#Lifecycle">activity
-lifecycle</a>.
-</p>
-<p>
-  The first test verifies that the spinner selection is maintained after the entire application is shut down and then restarted. The test uses instrumentation to
-  set the spinner's variables outside of the UI. It then terminates the activity by calling {@link android.app.Activity#finish() Activity.finish()}, and restarts it
-  using the instrumentation method {@link android.test.ActivityInstrumentationTestCase2#getActivity()}. The test then asserts that the current spinner state matches
-  the test values.
-</p>
-<p>
-  The second test verifies that the spinner selection is maintained after the activity is paused and then resumed. The test uses instrumentation to
-  set the spinner's variables outside of the UI and then force calls to the <code>onPause()</code> and <code>onResume()</code> methods. The test then
-  asserts that the current spinner state matches the test values.
-</p>
-<p>
-  Notice that these tests make limited assumptions about the mechanism by which the activity manages state. The tests use the activity's getters and
-  setters to control the spinner. The first test also knows that hiding an activity calls <code>onPause()</code>, and bringing it back to the foreground
-  calls <code>onResume()</code>. Other than this, the tests treat the activity as a "black box".
-</p>
-<p>
-    To add the code for testing state management across shutdown and restart, follow these steps:
-</p>
- <ol>
-    <li>
-      Add the test method <code>testStateDestroy()</code>, then
-      set the spinner selection to a test value:
-<pre>
-  public void testStateDestroy() {
-    mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);
-    mActivity.setSpinnerSelection(TEST_STATE_DESTROY_SELECTION);
-</pre>
-    </li>
-    <li>
-      Terminate the activity and restart it:
-<pre>
-    mActivity.finish();
-    mActivity = this.getActivity();
-</pre>
-    </li>
-    <li>
-      Get the current spinner settings from the activity:
-<pre>
-    int currentPosition = mActivity.getSpinnerPosition();
-    String currentSelection = mActivity.getSpinnerSelection();
-</pre>
-    </li>
-    <li>
-      Test the current settings against the test values:
-<pre>
-    assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
-    assertEquals(TEST_STATE_DESTROY_SELECTION, currentSelection);
-  } // end of testStateDestroy() method definition
-</pre>
-<p>
-  Add the following members to the test case class:
-<pre>
-  public static final int TEST_STATE_DESTROY_POSITION = 2;
-  public static final String TEST_STATE_DESTROY_SELECTION = "Earth";
-</pre>
-    </li>
- </ol>
-<p>
-    To add the code for testing state management across a pause and resume, follow these steps:
-</p>
-<ol>
-    <li>
-      Add the test method <code>testStatePause()</code>:
-<pre>
-    &#64;UiThreadTest
-    public void testStatePause() {
-</pre>
-    <p>
-      The <code>@UiThreadTest</code> annotation tells Android to build this method so that it runs
-      on the UI thread. This allows the method to change the state of the spinner widget in the
-      application under test. This use of <code>@UiThreadTest</code> shows that, if necessary, you
-      can run an entire method on the UI thread.
-    </p>
-    </li>
-   <li>
-    Set up instrumentation. Get the instrumentation object
-    that is controlling the application under test. This is used later to
-    invoke the <code>onPause()</code> and <code>onResume()</code> methods:
-<pre>
-    Instrumentation mInstr = this.getInstrumentation();
-</pre>
-  </li>
-  <li>
-    Set the spinner selection to a test value:
-<pre>
-    mActivity.setSpinnerPosition(TEST_STATE_PAUSE_POSITION);
-    mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION);
-</pre>
-  </li>
-  <li>
-    Use instrumentation to call the Activity's <code>onPause()</code>:
-<pre>
-    mInstr.callActivityOnPause(mActivity);
-</pre>
-    <p>
-      Under test, the activity is waiting for input. The invocation of
-      {@link android.app.Instrumentation#callActivityOnPause(android.app.Activity)}
-      performs a call directly to the activity's <code>onPause()</code> instead
-      of manipulating the activity's UI to force it into a paused state.
-    </p>
-  </li>
-  <li>
-    Force the spinner to a different selection:
-<pre>
-    mActivity.setSpinnerPosition(0);
-    mActivity.setSpinnerSelection("");
-</pre>
-    <p>
-      This ensures that resuming the activity actually restores the
-      spinner's state rather than simply leaving it as it was.
-    </p>
-  </li>
-  <li>
-    Use instrumentation to call the Activity's <code>onResume()</code>:
-<pre>
-    mInstr.callActivityOnResume(mActivity);
-</pre>
-    <p>
-      Invoking {@link android.app.Instrumentation#callActivityOnResume(android.app.Activity)}
-      affects the activity in a way similar to <code>callActivityOnPause</code>. The
-      activity's <code>onResume()</code> method is invoked instead of manipulating the
-      activity's UI to force it to resume.
-    </p>
-  </li>
-  <li>
-    Get the current state of the spinner:
-<pre>
-    int currentPosition = mActivity.getSpinnerPosition();
-    String currentSelection = mActivity.getSpinnerSelection();
-</pre>
-  </li>
-  <li>
-    Test the current spinner state against the test values:
-<pre>
-    assertEquals(TEST_STATE_PAUSE_POSITION,currentPosition);
-    assertEquals(TEST_STATE_PAUSE_SELECTION,currentSelection);
-  } // end of testStatePause() method definition
-</pre>
-    <p>
-      Add the following members to the test case class:
-    </p>
-<pre>
-  public static final int TEST_STATE_PAUSE_POSITION = 4;
-  public static final String TEST_STATE_PAUSE_SELECTION = "Jupiter";
-</pre>
-  </li>
-  <li>
-    Add the following imports:
-<pre>
-  import android.app.Instrumentation;
-  import android.test.UiThreadTest;
-</pre>
-  </li>
-</ol>
-<h2 id="RunTests">Running the Tests and Seeing the Results</h2>
- <p>
-    The most simple way to run the <code>SpinnerActivityTest</code> test case is to run it directly from the Package Explorer.
- </p>
- <p>
-    To run the <code>SpinnerActivityTest</code> test, follow these steps:
-</p>
- <ol>
-    <li>
-      In the Package Explorer, right-click the project SpinnerActivityTest at the top level, and then
-      select <strong>Run As</strong> &gt; <strong>Android JUnit Test</strong>:<br/>
-      <a href="{@docRoot}images/testing/spinnertest_runas_menu_callouts.png">
-        <img alt="Menu to run a test as an Android JUnit test" src="{@docRoot}images/testing/spinnertest_runas_menu_callouts.png" style="height:230px">
-      </a>
-    </li>
-    <li>
-        You will see the emulator start. When the unlock option is displayed (its appearance depends on the API level you specified for the AVD),
-        unlock the home screen.
-    </li>
-    <li>
-      The test application starts. You see a new tab for the <strong>JUnit</strong> view, next to the Package Explorer tab:<br/>
-      <a href="{@docRoot}images/testing/spinnertest_junit_panel.png">
-        <img alt="The JUnit window" src="{@docRoot}images/testing/spinnertest_junit_panel.png" style="height:230px">
-      </a>
-    </li>
-</ol>
-<p>
-    This view contains two sub-panes. The top pane summarizes the tests that were run, and the bottom pane shows failure traces for
-    highlighted tests.
-</p>
-<p>
-   At the conclusion of a successful test run, this is the view's appearance:<br/>
-   <a href="{@docRoot}images/testing/spinnertest_junit_success.png">
-    <img src="{@docRoot}images/testing/spinnertest_junit_success.png" alt="JUnit test run success" style="height:230px"/>
-   </a>
-</p>
-<p>
-    The upper pane summarizes the test:
-</p>
-    <ul>
-        <li>
-            Total time elapsed for the test application(labeled <em>Finished after &lt;x&gt; seconds</em>).
-        </li>
-        <li>
-            Number of runs (<em>Runs:</em>) - the number of tests in the entire test class.
-        </li>
-        <li>
-            Number of errors (<em>Errors:</em>) - the number of program errors and exceptions encountered during
-            the test run.
-        </li>
-        <li>
-            Number of failures (<em>Failures:</em>) - the number of test failures encountered during the test
-            run. This is the number of assertion failures. A test can fail even if the program does not encounter an error.
-        </li>
-        <li>
-            A progress bar. The progress bar extends from left to right as the tests run.
-            <p>
-               If all the tests succeed, the bar remains green. If a test fails, the bar turns from green to red.
-            </p>
-        </li>
-        <li>
-            A test method summary. Below the bar, you see a line for each class in the test application. To look at the results for the individual
-            methods in a test, click the arrow at the left to expand the line. You see the name of each test method. To the
-            right of the name, you see the time taken by the test. You can look at the test's code
-            by double-clicking its name.
-        </li>
-    </ul>
-<p>
-    The lower pane contains the failure trace. If all the tests are successful, this pane is empty. If some tests fail,
-    then if you highlight a failed test in the upper pane, the lower view contains a stack trace for the test. This is
-    demonstrated in the next section.
-</p>
-<p class="note">
-    <strong>Note:</strong> If you run the test application and nothing seems to happen, look for
-    the JUnit view. If you do not see it, you may have run the test application
-    as a regular Android application.
-    Remember that you need to run it as an Android <strong>JUnit</strong>
-    application.
-</p>
-<h2 id="TestFailure">Forcing Some Tests to Fail</h2>
-<p>
-  A test is as useful when it fails as when it succeeds. This section shows what happens in Eclipse with ADT when a test fails. You
-  can quickly see that a test class has failed, find the method or methods that failed, and then use a failure trace to find
-  the exact problem.
-</p>
-<p>
-  The example application SpinnerActivity that you downloaded passes all the tests in the test application SpinnerActivityTest.
-  To force the test to fail, you must modify the example application. You change a line of setup code in the application under test. This
-  causes the <code>testPreConditions()</code> and <code>testTextView()</code> test methods to fail.
-</p>
-<p>
-    To force the tests to fail, follow these steps:
-</p>
-<ol>
-  <li>
-    In Eclipse with ADT, go to the SpinnerActivity project and open the file <code>SpinnerActivity.java</code>.
-  </li>
-  <li>
-    At the top of <code>SpinnerActivity.java</code>, at the end of the <code>onCreate()</code> method, find the following line:
-<pre>
-    // mySpinner.setOnItemSelectedListener(null);
-</pre>
-    <p>Remove the forward slash characters at the beginning of the line to
-    uncomment the line. This sets the listener callback to null:
-    </p>
-<pre>
-    mySpinner.setOnItemSelectedListener(null);
-</pre>
-  </li>
-  <li>
-    The <code>testPreConditions()</code> method in <code>SpinnerActivityTest</code> contains the following test:
-    <code>assertTrue(mSpinner.getOnItemSelectedListener() != null);</code>. This test asserts that the listener callback is <em>not</em> null.
-    Since you have modified the application under test, this assertion now fails.
-  </li>
-  <li>
-    Run the test, as described in the previous section <a href="#RunTests">Running the Tests and Seeing the Results</a>.
-  </li>
-</ol>
-<p>
-    The JUnit view is either created or updated with the results of the test. Now, however, the progress bar is red,
-    the number of failures is 2, and small "x" icons appear in the list icons next to the testPreConditions and
-    TestSpinnerUI tests. This indicates that the tests have failed. The display is similar to this:<br/>
-    <a href="{@docRoot}images/testing/spinnertest_junit_panel_fail_callouts.png">
-      <img src="{@docRoot}images/testing/spinnertest_junit_panel_fail_callouts.png" alt="The JUnit Failure window" style="height:230px"/>
-    </a>
-</p>
-<p>
-  You now want to look at the failures to see exactly where they occurred.
-</p>
-<p>
-    To examine the failures, follow these steps:
-</p>
-<ol>
-  <li>
-    Click the testPreconditions entry. In the lower pane entitled <strong>Failure Trace</strong>,
-    you see a stack trace of the calls that led to the failure. This trace is similar to the following screenshot:<br/>
-    <a href="{@docRoot}images/testing/spinnertest_junit_panel_failtrace_callouts.png">
-      <img src="{@docRoot}images/testing/spinnertest_junit_panel_failtrace_callouts.png" alt="The JUnit failure trace" style="height:230px"/>
-    </a>
-  </li>
-  <li>
-      The first line of the trace tells you the error. In this case, a JUnit assertion failed. To look at the
-      assertion in the test code, double-click the next line (the first line of the trace). In the center pane
-      a new tabbed window opens, containing the code for the test application <code>SpinnerActivityTest</code>. The failed assertion
-      is highlighted in the middle of the window.
-  </li>
-</ol>
-<p>
-    The assertion failed because you modified the main application to set the <code>getOnItemSelectedListener</code> callback to <code>null</code>.
-</p>
-<p>
-    You can look at the failure in <code>testTextView</code> if you want. Remember, though, that <code>testPreConditions</code> is meant to verify the
-    initial setup of the application under test. If testPreConditions() fails, then succeeding tests can't be trusted. The best strategy to follow is to
-    fix the problem and re-run all the tests.
-</p>
-<p>
-    Remember to go back to <code>SpinnerActivity.java</code> and re-comment the line you uncommented in an earlier step.
-</p>
-<p>
-  You have now completed the tutorial.
-</p>
-<h2 id="NextSteps">Next Steps</h2>
-<p>
-    This example test application has shown you how to create a test project and link it to
-    the application you want to test, how to choose and add a test case class, how to write
-    UI and state management tests, and how to run the tests against the application under
-    test. Now that you are familiar with the basics of testing Android applications, here
-    are some suggested next steps:
-</p>
-<p>
-    <strong>Learn more about testing on Android</strong>
-</p>
-<ul>
-    <li>
-        If you haven't done so already, read the
-        <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a>
-        document in the <em>Dev Guide</em>. It provides an overview of how testing on Android
-        works. If you are just getting started with Android testing, reading that document will
-        help you understand the tools available to you, so that you can develop effective
-        tests.
-    </li>
-</ul>
-<p>
-    <strong>Review the main Android test case classes</strong>
-</p>
-<ul>
-    <li>
-        {@link android.test.ActivityInstrumentationTestCase2}
-    </li>
-    <li>
-        {@link android.test.ActivityUnitTestCase}
-    </li>
-    <li>
-        {@link android.test.ProviderTestCase2}
-    </li>
-    <li>
-        {@link android.test.ServiceTestCase}
-    </li>
-</ul>
-<p>
-    <strong>Learn more about the assert and utility classes</strong>
-</p>
-<ul>
-    <li>
-        {@link junit.framework.Assert}, the JUnit Assert class.
-    </li>
-    <li>
-        {@link android.test.MoreAsserts}, additional Android assert methods.
-    </li>
-    <li>
-        {@link android.test.ViewAsserts}, useful assertion methods for testing Views.
-    </li>
-    <li>
-        {@link android.test.TouchUtils}, utility methods for simulating touch events in an Activity.
-    </li>
-</ul>
-<p>
-    <strong>Learn about instrumentation and the instrumented test runner</strong>
-</p>
-<ul>
-    <li>
-        {@link android.app.Instrumentation}, the base instrumentation class.
-    </li>
-    <li>
-        {@link android.test.InstrumentationTestCase}, the base instrumentation test case.
-    </li>
-    <li>
-        {@link android.test.InstrumentationTestRunner}, the standard Android test runner.
-    </li>
-</ul>
-<h2 id="Appendix">Appendix</h2>
-<h3 id="InstallCompletedTestApp">Installing the Completed Test Application Java File</h3>
-<p>
-    The recommended approach to this tutorial is to follow the instructions step-by-step and
-    write the test code as you go. However, if you want to do this tutorial quickly,
-    you can install the entire Java file for the test application into the test project.
-</p>
-<p>
-    To do this, you first create a test project with the necessary structure and files by using
-    the automated tools in Eclipse. Then you exit Eclipse and copy the test application's Java file
-    from the SpinnerTest sample project into your test project. The SpinnerTest sample project is
-    part of the Samples component of the SDK.
-</p>
-<p>
-    The result is a complete test application, ready to run against the Spinner sample application.
-</p>
-<p>
-    To install the test application Java file, follow these steps:
-</p>
-<ol>
-    <li>
-        Set up the projects for the application under test and the test application, as described
-        in the section section <a href="#SetupProjects">Setting Up the Projects</a>.
-    </li>
-    <li>
-        Set up the emulator, as described in the section <a href="#SetupEmulator">Setting Up the Emulator</a>.
-    </li>
-    <li>
-        Add the test case class, as described in the section <a href="#AddTestCaseClass">Adding the test case class file</a>.
-    </li>
-    <li>
-        Close Eclipse with ADT.
-    </li>
-    <li>
-        Copy the file <code>&lt;SDK_path&gt;/samples/android-8/SpinnerTest/src/com/android/example/spinner/test/SpinnerActivityTest.java</code>
-        to the directory <code>workspace/SpinnerActivityTest/src/com/android/example/spinner/test/</code>.
-    </li>
-    <li>
-        Restart Eclipse with ADT.
-    </li>
-    <li>
-        In Eclipse with ADT, re-build the project <code>SpinnerActivityTest</code> by selecting it in the Package Explorer, right-clicking,
-        and selecting <em>Project</em>&nbsp;&gt;&nbsp;<em>Clean</em>.
-    </li>
-    <li>
-        The complete, working test application should now be in the <code>SpinnerActivityTest</code> project.
-    </li>
-</ol>
-<p>
-    You can now continue with the tutorial, starting at the section <a href="#AddConstructor">Adding the test case constructor</a> and
-    following along in the text.
-</p>
-<h3 id="EditorCommandLine">For Users Not Developing In Eclipse</h3>
-<p>
-    If you are not developing in Eclipse, you can still do this tutorial. Android provides tools for
-    creating test applications using a code editor and command-line tools. You use the following tools:
-</p>
-<ul>
-  <li>
-   <a href="{@docRoot}guide/developing/tools/adb.html">adb</a> - Installs and uninstalls applications and test applications to a device or the emulator. You
-   also use this tool to run the test application from the command line.
-  </li>
-  <li>
-    <a href="{@docRoot}guide/developing/tools/android.html">android</a> - Manages projects and test projects. This tool also manages AVDs and Android platforms.
-  </li>
-</ul>
-  <p>
-    You use the <code>emulator</code> tool to run the emulator from the command line.
-  </p>
-  <p>
-    Here are the general steps for doing this tutorial using an editor and the command line:
-  </p>
-<ol>
-  <li>
-    As described in the section <a href="#DownloadCode">Installing the Tutorial Sample Code</a>, get the sample code. You will then
-    have a directory <code>&lt;SDK_path&gt;/samples/android-8</code>, containing (among others) the directories <code>Spinner</code>
-    and <code>SpinnerTest</code>:
-    <ul>
-        <li>
-            <code>Spinner</code> contains the main application, also known as the <strong>application under test</strong>. This tutorial focuses on the
-            common situation of writing tests for an application that already exists, so the main application is provided to you.
-        </li>
-        <li>
-            <code>SpinnerTest</code> contains all the code for the test application. If you want to run quickly through the tutorial, you can
-            install the test code and then follow the text. You may get more from the tutorial, however, if you write the code as you go. The instructions
-            for installing the test code are in the section <a href="#InstallCompletedTestApp">Appendix: Installing the Completed Test Application</a>.
-        </li>
-        </ul>
-  </li>
-  <li>
-    Navigate to the directory <code>&lt;SDK_path&gt;/samples/android-8</code>.
-  </li>
-  <li>
-    Create a new Android application project using <code>android create project</code>:
-<pre>
-$ android create project -t &lt;APItarget&gt; -k com.android.example.spinner -a SpinnerActivity -n SpinnerActivity -p Spinner
-</pre>
-    <p>
-        The value of <code>&lt;APItarget&gt;</code> should be &quot;3&quot; (API level 3) or higher. If you are already developing with a particular API level, and it is
-        higher than 3, then use that API level.
-    </p>
-    <p>
-        This a new Android project <code>SpinnerActivity</code> in the existing <code>Spinner</code> directory. The existing source and
-        resource files are not touched, but the <code>android</code> tool adds the necessary build files.
-    </p>
-  </li>
-  <li>
-    Create a new Android test project using <code>android create test-project</code>:
-<pre>
-$ android create test-project -m ../Spinner -n SpinnerActivityTest -p SpinnerActivityTest
-</pre>
-    <p>
-        This will create a new Android test project in the <em>new</em> directory <code>SpinnerActivityTest</code>. You do this
-        so that the solution to the tutorial that is in <code>SpinnerTest</code> is left untouched. If you want to use the solution
-        code instead of entering it as you read through the tutorial, refer to the section
-        <a href="#InstallCompletedTestApp">Appendix: Installing the Completed Test Application</a>.
-    </p>
-    <p class="Note">
-      <strong>Note:</strong> Running <code>android create test-project</code> will automatically create
-      the file <code>AndroidManifest.xml</code> with the correct <code>&lt;instrumentation&gt;</code> element.
-    </p>
-  </li>
-  <li>
-    Build the sample application. If you are building with Ant, then it is easiest to use the command <code>ant debug</code> to build a debug version, since the SDK comes
-    with a debug signing key. The result will be the file <code>Spinner/bin/SpinnerActivity-debug.apk</code>.
-    You can install this to your device or emulator. Attach your device or start the emulator if you haven't already, and run the command:
-<pre>
-$ adb install Spinner/bin/SpinnerActivity-debug.apk
-</pre>
-  </li>
-  <li>
-    To create the test application, create a file <code>SpinnerActivityTest.java</code> in the directory
-    <code>SpinnerActivityTest/src/com/android/example/spinner/test/</code>.
-  </li>
-  <li>
-    Follow the tutorial, starting with the section <a href="#CreateTestCaseClass">Creating the Test Case Class</a>. When you are prompted to
-    run the sample application, go the the Launcher screen in your device or emulator and select SpinnerActivity.
-    When you are prompted to run the test application, return here to continue with the following instructions.
-  </li>
-  <li>
-    Build the test application. If you are building with Ant, then it is easiest to use the command <code>ant debug</code> to build a
-    debug version, since the SDK comes with a debug signing key. The result will be the Android file
-    <code>SpinnerActivityTest/bin/SpinnerActivityTest-debug.apk</code>. You can install this to your device or emulator.
-    Attach your device or start the emulator if you haven't already, and run the command:
-<pre>
-$ adb install SpinnerActivityTest/bin/SpinnerActivityTest-debug.apk
-</pre>
-  </li>
-  <li>
-    In your device or emulator, check that both the main application <code>SpinnerActivity</code> and the test application
-    <code>SpinnerActivityTest</code> are installed.
-  </li>
-  <li>
-    To run the test application, enter the following at the command line:
-<pre>
-$ adb shell am instrument -w com.android.example.spinner.test/android.test.InstrumentationTestRunner
- </pre>
-  </li>
-</ol>
-<p>
-    The result of a successful test looks like this:
-</p>
-<pre>
-com.android.example.spinner.test.SpinnerActivityTest:....
-Test results for InstrumentationTestRunner=....
-Time: 10.098
-OK (4 tests)
-</pre>
-<p>
-    If you force the test to fail, as described in the previous section <a href="#TestFailure">Forcing Some Tests to Fail</a>, then
-    the output looks like this:
-</p>
-<pre>
-com.android.example.spinner.test.SpinnerActivityTest:
-Failure in testPreConditions:
-junit.framework.AssertionFailedError
-  at com.android.example.spinner.test.SpinnerActivityTest.testPreConditions(SpinnerActivityTest.java:104)
-  at java.lang.reflect.Method.invokeNative(Native Method)
-  at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:205)
-  at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:195)
-  at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:175)
-  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
-  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
-  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
-  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
-Failure in testSpinnerUI:
-junit.framework.ComparisonFailure: expected:&lt;Result&gt; but was:&lt;Saturn&gt;
-  at com.android.example.spinner.test.SpinnerActivityTest.testSpinnerUI(SpinnerActivityTest.java:153)
-  at java.lang.reflect.Method.invokeNative(Native Method)
-  at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:205)
-  at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:195)
-  at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:175)
-  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
-  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
-  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
-  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
-..
-Test results for InstrumentationTestRunner=.F.F..
-Time: 9.377
-FAILURES!!!
-Tests run: 4,  Failures: 2,  Errors: 0
-</pre>
diff --git a/docs/html/resources/tutorials/testing/helloandroid_test.jd b/docs/html/resources/tutorials/testing/helloandroid_test.jd
deleted file mode 100644
index 4d949c8..0000000
--- a/docs/html/resources/tutorials/testing/helloandroid_test.jd
+++ /dev/null
@@ -1,508 +0,0 @@
-page.title=Hello, Testing
-parent.title=Tutorials
-parent.link=../../browser.html?tag=tutorial
-@jd:body
- <div id="qv-wrapper">
-  <div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li>
-        <a href="#CreateTestProject">Creating the Test Project</a>
-    </li>
-    <li>
-        <a href="#CreateTestClass">Creating the Test Case Class</a>
-        <ol>
-            <li>
-                <a href="#CreateTestCaseClassFile">Adding the test case class file</a>
-            </li>
-            <li>
-                <a href="#CreateConstructor">Adding the test case constructor</a>
-            </li>
-            <li>
-                <a href="#CreateSetUp">Adding a setup method</a>
-            </li>
-            <li>
-                <a href="#CreatePreConditions">Adding a preconditions test</a>
-            </li>
-            <li>
-                <a href="#CreateText">Adding a unit test</a>
-            </li>
-            <li>
-                <a href="#CompleteTest">The finished test case class</a>
-            </li>
-        </ol>
-    </li>
-    <li>
-        <a href="#RunTest">Running the Tests and Seeing the Results</a>
-    </li>
-    <li>
-        <a href="#NextSteps">Next Steps</a>
-    </li>
-  </ol>
-<h2>Related Tutorials</h2>
-<ol>
-    <li>
-        <a href="{@docRoot}resources/tutorials/hello-world.html">Hello, World</a>
-    </li>
-    <li>
-        <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-    </li>
-</ol>
-<h2>See Also</h2>
-<ol>
-    <li>
-        <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a>
-    </li>
-    <li>
-        {@link android.test.ActivityInstrumentationTestCase2}
-    </li>
-    <li>
-        {@link android.test.InstrumentationTestRunner}
-    </li>
-</ol>
-
-</div>
-</div>
-<p>
-    Android offers a powerful but easy-to-use testing framework that is well integrated with the SDK tools. Because writing
-    tests is an important part of any development effort, this tutorial introduces the basics of testing and helps you get started testing quickly.
-
-    To keep things simple, this tutorial builds on the <a href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a> tutorial, which you may have already completed.
-    It guides you through the process of setting up a test project, adding a test, and running the test against the Hello World application, all from inside the Eclipse environment.
-    Of course, when you are done with this tutorial, you will want to create a test project for your own app and add various types of tests to it.
-</p>
-<p>
-    If you'd like to read an overview of the test and instrumentation framework and the core test case classes available, look at
-    the <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a> topic.
-    If you prefer a more advanced testing tutorial, try the
-    <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a> tutorial.
-</p>
-<h2 id="Prerequisites">Prerequisites</h2>
-    <p>
-        This tutorial and its code depend on the Hello World tutorial. If you haven't completed that tutorial already,
-        do so now. You will learn the fundamentals of Android application development, and you will
-        have an Android application that is ready to be tested. The tutorial guides you through the
-        setup of an Android test project using the ADT Plugin for Eclipse and other SDK tools.
-        You will need an SDK development platform that is version 1.5
-        (API level 3) or higher.
-    </p>
-    <p>
-        If you aren't developing in Eclipse with ADT or you would like to run tests directly from the
-        command line, please see the topic <a href="{@docRoot}guide/developing/testing/testing_otheride.html">Testing in Other IDEs</a>
-        for instructions.
-    </p>
-<h2 id="CreateTestProject">Creating the Test Project</h2>
-<p>
-    In the Hello World tutorial you created Android application project called
-    HelloAndroid. A test of an Android application is also an Android
-    application, and you create it within an Eclipse project. The Eclipse with ADT
-    <strong>New Android Test Project</strong> dialog creates a new test project and the
-    framework of a new test application at the same time.
-</p>
-<p>
-    To create the test project and test application framework in Eclipse with ADT, follow these steps
-</p>
-    <ol>
-        <li>
-            In Eclipse, select <strong>New</strong> &gt; <strong>Project</strong> &gt; <strong>Android</strong> &gt; <strong>Android Test Project</strong>.
-            <p>
-              <a href="{@docRoot}images/testing/hwtest_new_test_project_menu.png">
-                  <img alt="New Android Test Project menu" src="{@docRoot}images/testing/hwtest_new_test_project_menu.png" style="height:230px"/>
-              </a>
-            </p>
-            <p>
-              The New Android Test Project dialog appears.
-            </p>
-        </li>
-        <li>
-            Set the following values:
-            <ul>
-                <li>
-                    <em>Test Project Name:</em> &quot;HelloAndroidTest&quot;
-                </li>
-                <li>
-                    <em>Test Target:</em> Set &quot;An existing Android project&quot;, click Browse, and then
-                    select &quot;HelloAndroid&quot; from the list of projects.
-                </li>
-                <li>
-                    <em>Build Target:</em> Set a target whose platform is Android 1.5 or above.
-                </li>
-                <li>
-                    <em>Application name:</em> &quot;HelloAndroidTest&quot;
-                </li>
-                <li>
-                    <em>Package name:</em> &quot;<code>com.example.helloandroid.test</code>&quot;
-                </li>
-            </ul>
-            <p>
-                The dialog should now look like this:
-            </p>
-            <a href="{@docRoot}images/testing/hwtest_new_test_project_dialog_complete_callouts.png">
-                <img alt="New Android Test Project dialog with entries" src="{@docRoot}images/testing/hwtest_new_test_project_dialog_complete_callouts.png" style="height:230px"/>
-            </a>
-        </li>
-        <li>
-            Click Finish. The new project appears in the Package Explorer.
-        </li>
-    </ol>
-<h2 id="CreateTestClass">Creating the Test Case Class</h2>
-<p>
-    You now have a test project HelloAndroidTest, and the basic structure of a test application
-    also called HelloAndroidTest. The basic structure includes all the files and directories you
-    need to build and run a test application, <em>except for</em> the class that contains
-    your tests (the <strong>test case class</strong>).
-</p>
-<p>
-    The next step is to define the test case class. In this tutorial, you define a test case class
-    that extends one of Android's test case classes designed for Activities. The class contains
-    definitions for four methods:
-</p>
-    <ol>
-        <li>
-            <code>HelloAndroidTest</code>: This defines the constructor for the class. It is
-            required by the Android testing framework.
-        </li>
-        <li>
-            <code>setUp()</code>: This overrides the JUnit <code>setUp()</code> method. You use
-            it to initialize the environment before each test runs.
-        </li>
-        <li>
-            <code>testPreconditions()</code>: This defines a small test that ensures the Hello, Android
-            application starts up correctly.
-        </li>
-        <li>
-            <code>testText()</code>: This tests that what is displayed on the screen is the
-            same as what is contained in the application's string resources. It is an example of
-            a real unit test you would perform against an application's UI.
-        </li>
-    </ol>
-<p>
-    The following sections contain the code for the test case class and its methods.
-</p>
-
-<h3 id="CreateTestCaseClassFile">Adding the test case class file</h3>
-<p>
-  To add the Java file for the test case class, follow these steps
-</p>
-    <ol>
-        <li>
-            In Eclipse, open the HelloAndroidTest project if it is not already open.
-        </li>
-        <li>
-            Within HelloAndroidTest, expand the <code>src/</code> folder and
-            then find the package icon for <code>com.example.helloandroid.test</code>.
-            Right-click on the package icon and select <strong>New</strong> &gt; <strong>Class</strong>:
-            <p>
-              <a href="{@docRoot}images/testing/hwtest_create_test_class_menu_callouts.png">
-                  <img alt="Menu for creating a new class in the test application" src="{@docRoot}images/testing/hwtest_create_test_class_menu_callouts.png" style="height:230px"/>
-              </a>
-            </p>
-            <p>
-                The New Java Class dialog appears.
-            </p>
-        </li>
-        <li>
-            In the dialog, enter the following:
-            <ul>
-                <li>
-                    <em>Name:</em> &quot;HelloAndroidTest&quot;. This becomes the name of your test class.
-                </li>
-                <li>
-                    <em>Superclass:</em> &quot;<code>android.test.ActivityInstrumentationTestCase2&lt;HelloAndroid&gt;</code>&quot;.
-                    The superclass is parameterized by an Activity class name.
-                    <p>
-                        The dialog should now look like this:
-                    </p>
-                    <a href="{@docRoot}images/testing/hwtest_new_test_class_dialog_complete_callouts.png">
-                        <img alt="New Java Class dialog with entries" src="{@docRoot}images/testing/hwtest_new_test_class_dialog_complete_callouts.png" style="height:230px"/>
-                    </a>
-                </li>
-            </ul>
-            <p>
-                Do not change any of the other settings. Click Finish.
-            </p>
-        </li>
-        <li>
-            You now have a new file <code>HelloAndroidTest.java</code> in the project.
-            This file contains the class <code>HelloAndroidTest</code>,
-            which extends the Activity test case class
-            <code>ActivityInstrumentationTestCase2&lt;T&gt;</code>. You parameterize the
-            class with <code>HelloAndroid</code>, which is the class name of the activity under test.
-        </li>
-        <li>
-            Open <code>HelloAndroidTest.java</code>. It should look like this:
-<pre class="prettyprint">
-package com.example.helloandroid.test;
-
-import android.test.ActivityInstrumentationTestCase2;
-
-public class HelloAndroidTest extends ActivityInstrumentationTestCase2&lt;HelloAndroid&gt; {
-}
-</pre>
-        </li>
-        <li>
-            The test case class depends on the <code>HelloAndroid</code> class, which is not
-            yet imported. To import the class, add the following line just before the current
-            <code>import</code> statement:
-<pre class="prettyprint">
-import com.example.helloandroid.HelloAndroid;
-</pre>
-        </li>
-    </ol>
-<h3 id="CreateConstructor">Adding the test case constructor</h3>
-<p>
-    The test case class constructor is used by the Android testing framework when you run the test.
-    It calls the super constructor with parameters that tell the framework what Android application
-    should be tested.
-</p>
-<p>
-    Add the following constructor method immediately after the class definition:
-</p>
-<pre class="prettyprint">
-    public HelloAndroidTest() {
-      super("com.example.helloandroid", HelloAndroid.class);
-    }
-</pre>
-<p>
-    Save the file <code>HelloAndroidTest.java</code>.
-</p>
-<h3 id="CreateSetUp">Adding a setup method</h3>
-<p>
-    The <code>setUp()</code> method overrides the JUnit {@link junit.framework.TestCase#setUp() setUp()}
-    method, which the Android testing framework calls prior to running each test method. You use
-    <code>setUp()</code> to initialize variables and prepare the test environment. For this
-    test case, the <code>setUp()</code> method starts the Hello, Android application,
-    retrieves the text being displayed on the screen, and retrieves the text string in the
-    resource file.
-</p>
-<p>
-    First, add the following code immediately after the constructor method:
-</p>
-<pre class="prettyprint">
-    &#064;Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mActivity = this.getActivity();
-        mView = (TextView) mActivity.findViewById(com.example.helloandroid.R.id.textview);
-        resourceString = mActivity.getString(com.example.helloandroid.R.string.hello);
-    }
-</pre>
-<p>
-    For this code to work, you must also add some class members and another import statement. To
-    add the class members, add the following code immediately after the class definition:
-</p>
-<pre class="prettyprint">
-    private HelloAndroid mActivity;
-    private TextView mView;
-    private String resourceString;
-</pre>
-<p>
-    To add the import statement, add the following statement just after the import for
-    <code>android.test.ActivityInstrumentationTestCase2</code>:
-</p>
-<pre class="prettyprint">
-  import android.widget.TextView;
-</pre>
-<h3 id="CreatePreConditions">Adding a preconditions test</h3>
-<p>
-    A preconditions test checks the initial application conditions prior to executing other tests.
-    It's similar to <code>setUp()</code>, but with less overhead, since it only runs once.
-</p>
-<p>
-    Although a preconditions test can check for a variety of different conditions,
-    in this application it only needs to check whether the application under test is
-    initialized properly and the target TextView exists.
-    To do this, it calls the inherited
-    {@link junit.framework.Assert#assertNotNull(Object) assertNotNull()}
-    method, passing a reference to the TextView.
-    The test succeeds only if the object reference is not null.
-</p>
-<pre class="prettyprint">
-    public void testPreconditions() {
-      assertNotNull(mView);
-    }
-</pre>
-<h3 id="CreateText">Adding a unit test</h3>
-<p>
-    Now add a simple unit test to the test case class.
-    The method <code>testText()</code> will call a
-    {@link junit.framework.Assert JUnit Assert}
-    method to check whether the target TextView is displaying the expected text.
-</p>
-<p>
-    For this example, the test expects that the TextView is
-    displaying the string resource that was originally declared for it in HelloAndroid's
-    <code>main.xml</code> file, referred to by the resource ID <code>hello</code>.
-    The call to
-    {@link junit.framework.Assert#assertEquals(String, String) assertEquals(String,String)}
-    compares the expected value, read directly from the <code>hello</code>string resource,
-    to the text displayed by the TextView, obtained from the
-    TextView's <code>getText()</code> method. The test succeeds only if the strings match.
-</p>
-<p>
-    To add this test, add the following code
-    immediately after the <code>testPreconditions()</code> method:
-</p>
-<pre class="prettyprint">
-    public void testText() {
-      assertEquals(resourceString,(String)mView.getText());
-    }
-</pre>
-<h3 id="CompleteTest">The finished test case class</h3>
-<p>
-    You have now finished writing the test. This is what the complete test case class
-    should look like:
-</p>
-<pre class="prettyprint">
-package com.example.helloandroid.test;
-
-import com.example.helloandroid.HelloAndroid;
-import android.test.ActivityInstrumentationTestCase2;
-import android.widget.TextView;
-
-public class HelloAndroidTest extends ActivityInstrumentationTestCase2&lt;HelloAndroid&gt; {
-    private HelloAndroid mActivity;  // the activity under test
-    private TextView mView;          // the activity's TextView (the only view)
-    private String resourceString;
-
-    public HelloAndroidTest() {
-      super("com.example.helloandroid", HelloAndroid.class);
-    }
-    &#064;Override
-    protected void setUp() throws Exception {
-        super.setUp();
-        mActivity = this.getActivity();
-        mView = (TextView) mActivity.findViewById(com.example.helloandroid.R.id.textview);
-        resourceString = mActivity.getString(com.example.helloandroid.R.string.hello);
-    }
-    public void testPreconditions() {
-      assertNotNull(mView);
-    }
-    public void testText() {
-      assertEquals(resourceString,(String)mView.getText());
-    }
-}
-</pre>
-<h2 id="RunTest">Running the Tests and Seeing the Results</h2>
-<p>
-    You can now run the tests you've created against the Hello, Android application. In Eclipse with
-    ADT, you run a test application as an <strong>Android JUnit test</strong> rather than a regular
-    Android application.
-</p>
-<p>
-    To run the test application as an Android JUnit test, in the Package Explorer right-click
-    the HelloAndroidTest project and select <strong>Run As</strong> &gt; <strong>Android JUnit Test</strong>
-</p>
-    <a href="{@docRoot}images/testing/hwtest_runas_menu_callouts.png">
-        <img alt="Menu to run Hello, World as an Android JUnit test"
-            src="{@docRoot}images/testing/hwtest_runas_menu_callouts.png" style="height:230px">
-    </a>
-<p>
-    The ADT plugin then launches the test application and the application
-    under test on a the target emulator or device. When both applications are running,
-    the testing framework runs the tests and reports the results in the JUnit view of Eclipse,
-    which appears by default as a tab next to the Package Explorer.
-</p>
-<p>
-    As shown below, the JUnit view shows test results in two separate panes:
-    an upper pane summarizes the tests that were run and a lower pane reports the failure traces
-    for the tests. In this case, the tests in this example have run successfully, so there is no
-    failure reported in the view:
-</p>
-    <a href="{@docRoot}images/testing/hwtest_junit_success.png">
-        <img src="{@docRoot}images/testing/hwtest_junit_success.png"
-            alt="JUnit test run success" style="height:230px"/>
-    </a>
-<p>
-    The upper pane summarizes the test:
-</p>
-    <ul>
-        <li>
-            &quot;Finished after <em>x</em> seconds&quot;: How long the test took to run.
-        </li>
-        <li>
-            &quot;Runs&quot;: The number of tests run.
-        </li>
-        <li>
-            &quot;Errors:&quot;: The number of program errors and exceptions encountered during
-            the test run.
-        </li>
-        <li>
-            &quot;Failures:&quot;: The number of assertion failures encountered during the
-            test run.
-        </li>
-        <li>
-            A progress bar. The progress bar extends from left to right as the tests run.
-            <p>
-              If all the tests succeed, the bar remains green.
-              If a test fails, the bar turns from green to red.
-            </p>
-        </li>
-        <li>
-            A test method summary. Below the bar, you see a line for each class in the
-            test application, labeled by its fully-qualified class name.
-            To look at the results for the individual methods in a test case class,
-            click the arrow at the left of the class to expand the line.
-            You see the name of each test method. To the right of the method name, you see the
-            time needed to run that method. You can look at the method's code by
-            double-clicking its name.
-        </li>
-     </ul>
-     <p>
-        The lower pane contains the failure trace. If all the tests are successful,
-        this pane is empty. If some tests fail, then if you select a failed test in the
-        upper pane, the lower view contains a stack trace for the test.
-     </p>
-<h2 id="NextSteps">Next Steps</h2>
-<p>
-    This simple example test application has shown you how to create a test project,
-    create a test class and test cases, and then run the tests against a target application.
-    Now that you are familiar with these fundamentals, here are some suggested next steps:
-</p>
-<p>
-    <strong>Learn more about testing on Android</strong>
-</p>
-<ul>
-    <li>
-        The
-      <a href="{@docRoot}guide/topics/testing/testing_android.html">Testing Android Applications</a>
-        document in the <em>Dev Guide</em> provides an overview of how testing on Android works.
-        If you are just getting started with Android testing, reading that document will
-        help you understand the tools available to you, so that you can develop effective
-        tests.
-    </li>
-</ul>
-<p>
-    <strong>Learn more about the testing classes available in Android</strong>
-</p>
-<ul>
-    <li>
-        For an overview of the types of testing classes you can use,
-        browse through the reference documentation for
-        {@link android.test.ActivityInstrumentationTestCase2},
-        {@link android.test.ProviderTestCase2},
-        {@link android.test.ServiceTestCase}, and
-        {@link junit.framework.Assert}.
-    </li>
-</ul>
-<p>
-    <strong>Explore the Android instrumentation framework</strong>
-</p>
-<ul>
-    <li>
-        The {@link android.test.InstrumentationTestRunner} class contains the code that Android uses
-        to run tests against an application. The {@link android.test.InstrumentationTestCase} class
-        is the base class for test case classes that use additional instrumentation features.
-    </li>
-</ul>
-<p>
-    <strong>Follow the Activity Testing tutorial</strong>
-</p>
-<ul>
-    <li>
-        The <a href="{@docRoot}resources/tutorials/testing/activity_test.html">Activity Testing</a>
-        tutorial is an excellent follow-up to this tutorial.
-        It guides you through a more complex testing scenario that you develop against a
-        more realistic application.
-    </li>
-</ul>
diff --git a/docs/html/resources/tutorials/views/hello-autocomplete.jd b/docs/html/resources/tutorials/views/hello-autocomplete.jd
deleted file mode 100644
index e26683d..0000000
--- a/docs/html/resources/tutorials/views/hello-autocomplete.jd
+++ /dev/null
@@ -1,173 +0,0 @@
-page.title=Auto Complete
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>To create a text entry widget that provides auto-complete suggestions, use
-the {@link android.widget.AutoCompleteTextView} widget. Suggestions are received from a
-collection of strings associated with the widget through an {@link
-android.widget.ArrayAdapter}.</p>
-
-<p>In this tutorial, you will create a {@link android.widget.AutoCompleteTextView} widget that
-provides suggestions for a country name.</p>
-
-
-<ol>
-  <li>Start a new project named <em>HelloAutoComplete</em>.</li>
-  <li>Create an XML file named <code>list_item.xml</code> and save it inside the
-<code>res/layout/</code> folder. Edit the file to look like this:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:padding="10dp"
-    android:textSize="16sp"
-    android:textColor="#000">
-&lt;/TextView>
-</pre>
-  <p>This file defines a simple {@link android.widget.TextView} that will be used for each
-item that appears in the list of suggestions.</p>
-  </li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:orientation="horizontal"
-    android:layout_width="fill_parent" 
-    android:layout_height="wrap_content"
-    android:padding="5dp">
-    &lt;TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Country" />
-    &lt;AutoCompleteTextView android:id="@+id/autocomplete_country"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="5dp"/>
-&lt;/LinearLayout>
-</pre>
-  <p>The {@link android.widget.TextView} is a label that introduces the {@link
-android.widget.AutoCompleteTextView} widget.
-</li>
-
-<li>Open <code>HelloAutoComplete.java</code> and insert the following code for the {@link
-android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-&#64;Override
-protected void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.autocomplete_country);
-    ArrayAdapter&lt;String> adapter = new ArrayAdapter&lt;String>(this, R.layout.list_item, COUNTRIES);
-    textView.setAdapter(adapter);
-}
-</pre>
-
-<p>After the content view is set to the <code>main.xml</code> layout, the {@link
-android.widget.AutoCompleteTextView} widget is captured from the layout with {@link
-android.app.Activity#findViewById(int)}. A new {@link
-android.widget.ArrayAdapter} is then initialized to bind the <code>list_item.xml</code> layout
-to each list item in the <code>COUNTRIES</code> string array (defined in the next step).
-Finally, {@link android.widget.AutoCompleteTextView#setAdapter(T) setAdapter()} is called to
-associate the {@link android.widget.ArrayAdapter} with the
-{@link android.widget.AutoCompleteTextView} widget so that the string array will populate
-the list of suggestions.</p>
-</li>
-
-<li>Inside the <code>HelloAutoComplete</code> class, add the string array:
-<pre>
-static final String[] COUNTRIES = new String[] {
-  "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
-  "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
-  "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
-  "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
-  "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
-  "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
-  "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
-  "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
-  "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
-  "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
-  "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
-  "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
-  "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
-  "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
-  "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
-  "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
-  "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
-  "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
-  "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
-  "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
-  "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
-  "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
-  "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
-  "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
-  "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
-  "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
-  "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
-  "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
-  "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
-  "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
-  "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
-  "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
-  "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
-  "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
-  "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
-  "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
-  "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
-  "Ukraine", "United Arab Emirates", "United Kingdom",
-  "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
-  "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
-  "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
-};
-</pre>
-<p>This is the list of suggestions that will be provided in a drop-down list when the user types into
-the {@link android.widget.AutoCompleteTextView} widget.</p>
-</li>
-
-<li>Run the application.</li>
-</ol>
-<p>As you type, you should see something like this:</p>
-<img src="images/hello-autocomplete.png" width="150px" />
-
-
-<h2>More Information</h2>
-
-<p>Note that using a hard-coded string array is not a recommended design practice because your
-application code should focus on behavior, not content. Application content such as strings
-should be externalized from the code in order to make modifications to the content easier and
-facilitate localization of the content. The hard-coded strings are used in this tutorial only to
-make it simple and focus on the {@link android.widget.AutoCompleteTextView} widget.
-Instead, your application should declare such string arrays in an XML file. This can be done
-with a {@code &lt;string-array&lt;} resource in your project {@code res/values/strings.xml} file.
-For example:</p>
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
-    &lt;string-array name="countries_array">
-        &lt;item>Bahrain&lt;/item>
-        &lt;item>Bangladesh&lt;/item>
-        &lt;item>Barbados&lt;/item>
-        &lt;item>Belarus&lt;/item>
-        &lt;item>Belgium&lt;/item>
-        &lt;item>Belize&lt;/item>
-        &lt;item>Benin&lt;/item>
-    &lt;/string-array>
-&lt;/resources>
-</pre>
-<p>To use these resource strings for the {@link android.widget.ArrayAdapter}, replace the original
-{@link android.widget.ArrayAdapter} constructor line with the following:</p>
-<pre>
-String[] countries = getResources().getStringArray(R.array.countries_array);
-ArrayAdapter&lt;String> adapter = new ArrayAdapter&lt;String>(this, R.layout.list_item, countries);
-</pre>
-
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.ArrayAdapter}</li>
-	<li>{@link android.widget.AutoCompleteTextView}</li>
-</ul>
-
-
diff --git a/docs/html/resources/tutorials/views/hello-datepicker.jd b/docs/html/resources/tutorials/views/hello-datepicker.jd
deleted file mode 100644
index c50d650..0000000
--- a/docs/html/resources/tutorials/views/hello-datepicker.jd
+++ /dev/null
@@ -1,173 +0,0 @@
-page.title=Date Picker
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>To provide a widget for selecting a date, use the {@link android.widget.DatePicker}
-widget, which allows the user to select the month, day, and year, in a familiar interface.</p>
-
-<p>In this tutorial, you'll create a {@link android.app.DatePickerDialog}, which presents the
-date picker in a floating dialog box at the press of a button. When the date is set by
-the user, a {@link android.widget.TextView} will update with the new date.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloDatePicker</em>.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-    &lt;TextView android:id="@+id/dateDisplay"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text=""/>
-    &lt;Button android:id="@+id/pickDate"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Change the date"/>
-&lt;/LinearLayout>
-</pre>
-  <p>This creates a basic {@link android.widget.LinearLayout} with a {@link android.widget.TextView}
-  that will display the date and a {@link android.widget.Button} that will open the {@link
-  android.app.DatePickerDialog}.</p>
-  </li>
-
-  <li>Open <code>HelloDatePicker.java</code> and add the following members to the class:
-<pre>
-    private TextView mDateDisplay;
-    private Button mPickDate;
-    private int mYear;
-    private int mMonth;
-    private int mDay;
-
-    static final int DATE_DIALOG_ID = 0;
-</pre>
-  <p>The first group of members define variables for the layout {@link android.view.View}s and the
-date items. The <code>DATE_DIALOG_ID</code> is a static integer that uniquely identifies the {@link
-android.app.Dialog} that will display the date picker.</p>
-  </li>
-
-  <li>Now add the following code for the {@link android.app.Activity#onCreate(Bundle) onCreate()}
-method:
-<pre>
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-
-        // capture our View elements
-        mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
-        mPickDate = (Button) findViewById(R.id.pickDate);
-
-        // add a click listener to the button
-        mPickDate.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                showDialog(DATE_DIALOG_ID);
-            }
-        });
-
-        // get the current date
-        final Calendar c = Calendar.getInstance();
-        mYear = c.get(Calendar.YEAR);
-        mMonth = c.get(Calendar.MONTH);
-        mDay = c.get(Calendar.DAY_OF_MONTH);
-
-        // display the current date (this method is below)
-        updateDisplay();
-    }
-</pre>
-
-<p>First, the content is set to the <code>main.xml</code> layout. Then the {@link
-android.widget.TextView} and {@link android.widget.Button} elements are captured from the layout
-with {@link android.app.Activity#findViewById(int)}. A
-new {@link android.view.View.OnClickListener} is created for the
-{@link android.widget.Button}, so that when it is clicked, it
-will call {@link android.app.Activity#showDialog(int)}, passing the unique integer ID for
-the date picker dialog. Using {@link android.app.Activity#showDialog(int)} allows the {@link
-android.app.Activity} to manage the life-cycle of the dialog and will call the {@link
-android.app.Activity#onCreateDialog(int)} callback method to request the {@link android.app.Dialog}
-that should be displayed (which you'll
-define later). After the on-click listener is set, a new {@link java.util.Calendar} is created
-and the current year, month and day are acquired. Finally, the private
-<code>updateDisplay()</code> method is called in order to fill the {@link android.widget.TextView}
-with the current date.</p>
-</li>
-
-<li>Add the <code>updateDisplay()</code> method:
-<pre>
-    // updates the date in the TextView
-    private void updateDisplay() {
-        mDateDisplay.setText(
-            new StringBuilder()
-                    // Month is 0 based so add 1
-                    .append(mMonth + 1).append("-")
-                    .append(mDay).append("-")
-                    .append(mYear).append(" "));
-    }
-</pre>
-<p>This method uses the member date values declared for the class to write the date to the layout's
-{@link android.widget.TextView}, {@code mDateDisplay}, which was also declared and initialized
-above.</p>
-</li>
-
-<li>Initialize a new {@link android.app.DatePickerDialog.OnDateSetListener} as a member of the
-<code>HelloDatePicker</code> class:
-<pre>
-    // the callback received when the user "sets" the date in the dialog
-    private DatePickerDialog.OnDateSetListener mDateSetListener =
-            new DatePickerDialog.OnDateSetListener() {
-
-                public void onDateSet(DatePicker view, int year, 
-                                      int monthOfYear, int dayOfMonth) {
-                    mYear = year;
-                    mMonth = monthOfYear;
-                    mDay = dayOfMonth;
-                    updateDisplay();
-                }
-            };
-</pre>
-<p>The {@link android.app.DatePickerDialog.OnDateSetListener} listens for when the user
-has set the date (by clicking the "Set" button). At that time, the {@link
-android.app.DatePickerDialog.OnDateSetListener#onDateSet(DatePicker,int,int,int) onDateSet()}
-callback method is called, which is defined to update the {@code mYear}, {@code mMonth}, and
-{@code mDay} member fields with the new date then call the private <code>updateDisplay()</code>
-method to update the {@link android.widget.TextView}.</p>
-</li>
-
-<li>Now add the {@link android.app.Activity#onCreateDialog(int)} callback method to the {@code
-HelloDatePicker} class:
-<pre>
-&#64;Override
-protected Dialog onCreateDialog(int id) {
-    switch (id) {
-    case DATE_DIALOG_ID:
-        return new DatePickerDialog(this,
-                    mDateSetListener,
-                    mYear, mMonth, mDay);
-    }
-    return null;
-}
-</pre>
-<p>This is an {@link android.app.Activity} callback method that is passed the integer ID given to
-{@link android.app.Activity#showDialog(int)} (which is called by the button's {@link
-android.view.View.OnClickListener}). When the ID matches the switch case defined here, a {@link
-android.app.DatePickerDialog} is instantiated with the {@link
-android.app.DatePickerDialog.OnDateSetListener} created in the previous
-step, along with the date variables to initialize the widget date.</p>
-</li>
-
-<li>Run the application.</li>
-</ol>
-<p>When you press the "Change the date" button, you should see the following:</p>
-<img src="images/hello-datepicker.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-<li>{@link android.app.DatePickerDialog}</li>
-<li>{@link android.app.DatePickerDialog.OnDateSetListener}</li>
-<li>{@link android.widget.Button}</li>
-<li>{@link android.widget.TextView}</li>
-<li>{@link java.util.Calendar}</li>
-</ul>
-
diff --git a/docs/html/resources/tutorials/views/hello-formstuff.jd b/docs/html/resources/tutorials/views/hello-formstuff.jd
deleted file mode 100644
index 1ddd1df..0000000
--- a/docs/html/resources/tutorials/views/hello-formstuff.jd
+++ /dev/null
@@ -1,400 +0,0 @@
-page.title=Form Stuff
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>This tutorial introduces a variety of widgets that are useful when creating forms, such as
-image buttons, text fields, checkboxes and radio buttons.</p>
-
-
-<ol>
-  <li>Start a new project named <em>HelloFormStuff</em>.</li>
-  <li>Your <code>res/layout/main.xml</code> file should already have a basic {@link
-android.widget.LinearLayout}:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent" >
-&lt;/LinearLayout>
-</pre>
-    <p>For each widget you want to add, just put the respective View inside this {@link
-android.widget.LinearLayout}.</p>
-  </li>
-</ol>
-<p>Each section below also assumes that your <code>HelloFormStuff</code> Activity has the following
-default implementation of the {@link android.app.Activity#onCreate(Bundle) onCreate()} method:</p>
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-
-<p>Now select which kind of form widget you'd like to create:</p>
-<ul>
-  <li><a href="#CustomButton">Custom Button</a></li>
-  <li><a href="#EditText">Edit Text</a></li>
-  <li><a href="#Checkbox">Checkbox</a></li>
-  <li><a href="#RadioButtons">Radio Buttons</a></li>
-  <li><a href="#ToggleButton">Toggle Button</a></li>
-  <li><a href="#RatingBar">Rating Bar</a></li>
-</ul>
-
-
-
-<h2 id="CustomButton">Custom Button</h2>
-
-<p>In this section, you will create a button with a custom image instead of text, using the {@link
-android.widget.Button} widget and an XML file that defines three different images to use for the
-different button states. When the button is pressed, a short message will be displayed.</p>
-
-<img src="images/android_pressed.png" style="float:right;" title="android_pressed.png"/>
-<img src="images/android_focused.png" style="float:right;clear:right;" title="android_focused.png"/>
-<img src="images/android_normal.png" style="float:right;clear:right;" title="android_normal.png"/>
-<ol>
-  <li>Copy the images on the right into the <code>res/drawable/</code> directory of
-your project. These will be used for the different button states.</li>
-  <li>Create a new file in the <code>res/drawable/</code> directory named
-<code>android_button.xml</code>.
-Insert the following XML:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;selector xmlns:android="http://schemas.android.com/apk/res/android">
-    &lt;item android:drawable="@drawable/android_pressed"
-          android:state_pressed="true" />
-    &lt;item android:drawable="@drawable/android_focused"
-          android:state_focused="true" />
-    &lt;item android:drawable="@drawable/android_normal" />
-&lt;/selector>
-</pre>
-  <p>This defines a single drawable resource, which will change its image based on the current
-state of the button. The first <code>&lt;item></code> defines
-<code>android_pressed.png</code> as the image when the button is pressed (it's been
-activated); the second <code>&lt;item></code> defines <code>android_focused.png</code> as the image
-when the button is focused (when the button is highlighted using the trackball or directional
-pad); and the third <code>&lt;item></code> defines <code>android_normal.png</code> as the image
-for the normal state (when neither pressed nor focused). This XML file now represents a single
-drawable resource and when referenced by a {@link android.widget.Button} for its background,
-the image displayed will change based on these three states.</p>
-  <p class="note"><strong>Note:</strong> The order of the <code>&lt;item></code> elements is
-important. When this drawable is referenced, the  <code>&lt;item></code>s are traversed in-order to
-determine which one is appropriate for the current button state. Because the "normal" image is last,
-it is only applied when the conditions <code>android:state_pressed</code> and
-<code>android:state_focused</code> have both evaluated false.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and add the {@link
-android.widget.Button} element:
-<pre>
-    &lt;Button
-        android:id="@+id/button"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:padding="10dp"
-        android:background="@drawable/android_button"
-        android:onClick="onButtonClicked"/>
-</pre>
-	<p>The <code>android:background</code> attribute specifies the drawable resource to use for the
-button background (which, when saved at <code>res/drawable/android.xml</code>, is
-referenced as <code>@drawable/android</code>). This replaces the normal background image
-applied by the system with the drawable created above, which changes its image based on
-the button state.</p>
-    <p>The attribute <code>android:onClick</code> specifies the name of a method in your activity 
-that the system should call when the user clicks the button. You'll create that method next.</p>
-</li>
-
-<li>To make the button do something when pressed, add the following
-method inside your {@link android.app.Activity} class:
-<pre>
-public void onButtonClicked(View v) {
-    // Do something when the button is clicked
-    Toast.makeText(HelloFormStuff.this, "Button clicked", Toast.LENGTH_SHORT).show();
-}
-</pre>
-<p>When you specify this kind of method, which is used in your layout file with the {@code
-android:onClick} attribute, the method must be <code>public</code>, have a <code>void</code> return
-value, and accept a single {@code android.view.View} parameter. When the system calls this method,
-it passes the {@code android.view.View} that was clicked.</p>
-</li>
-<li>Now run the application.</li>
-</ol>
-
-
-
-<h2 id="EditText">Edit Text</h2>
-
-<p>In this section, you will create a text field for user input, using the {@link
-android.widget.EditText} widget. Once text has been entered into the field, the "Enter" key will
-display the text in a toast message.</p>
-
-<ol>
-  <li>Open the <code>res/layout/main.xml</code> file and add the {@link android.widget.EditText}
-element (inside the {@link android.widget.LinearLayout}):
-<pre>
-    &lt;EditText
-        android:id="@+id/edittext"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"/>
-</pre>
-</li>
-<li>To do something with the text that the user types, add the following code
-to the end of the {@link android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-final EditText edittext = (EditText) findViewById(R.id.edittext);
-edittext.setOnKeyListener(new OnKeyListener() {
-    public boolean onKey(View v, int keyCode, KeyEvent event) {
-        // If the event is a key-down event on the "enter" button
-        if ((event.getAction() == KeyEvent.ACTION_DOWN) &amp;&amp;
-            (keyCode == KeyEvent.KEYCODE_ENTER)) {
-          // Perform action on key press
-          Toast.makeText(HelloFormStuff.this, edittext.getText(), Toast.LENGTH_SHORT).show();
-          return true;
-        }
-        return false;
-    }
-});
-</pre>
-<p>This captures the {@link android.widget.EditText} element from the layout and adds an {@link
-android.view.View.OnKeyListener}. The {@link android.view.View.OnKeyListener} must implement the
-{@link android.view.View.OnKeyListener#onKey(View,int,KeyEvent)} method, which
-defines the action to be made when a key is pressed while the widget has focus. In this case, the
-method is defined to listen for the Enter key (when pressed down), then pop up a {@link
-android.widget.Toast} message with the text that has been entered. The {@link
-android.view.View.OnKeyListener#onKey(View,int,KeyEvent)} method should always return
-<code>true</code> if the event has been handled, so that the event doesn't bubble-up (which would
-result in a carriage return in the text field).</p>
-</li>
-<li>Run the application.</li>
-</ol>
-
-
-
-<h2 id="Checkbox">Checkbox</h2>
-
-<p>In this section, you will create a checkbox for selecting items, using the {@link
-android.widget.CheckBox} widget. When the checkbox is pressed, a toast message will
-indicate the current state of the checkbox.</p>
-
-<ol>
-  <li>Open the <code>res/layout/main.xml</code> file and add the {@link android.widget.CheckBox}
-element (inside the {@link android.widget.LinearLayout}):
-<pre>
-    &lt;CheckBox android:id="@+id/checkbox"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="check it out"
-        android:onClick="onCheckboxClicked"/>
-</pre>
-    <p>The attribute <code>android:onClick</code> specifies the name of a method in your activity 
-that the system should call when the user clicks the check box. You'll create that method next.</p>
-</li>
-<li>To do something when the state is changed, add the following method inside your {@link
-android.app.Activity} class:</p>
-
-<pre>
-public void onCheckboxClicked(View v) {
-    // Perform action on clicks, depending on whether it's now checked
-    if (((CheckBox) v).isChecked()) {
-        Toast.makeText(HelloFormStuff.this, "Selected", Toast.LENGTH_SHORT).show();
-    } else {
-        Toast.makeText(HelloFormStuff.this, "Not selected", Toast.LENGTH_SHORT).show();
-    }
-}
-</pre>
-
-<p>When you specify this kind of method, which is used in your layout file with the {@code
-android:onClick}
-attribute, the method must be <code>public</code>, have a <code>void</code> return value, and
-accept a single {@code android.view.View} parameter. When the system calls this method, it
-passes the {@code android.view.View} that was clicked. In this example, the {@code
-android.view.View} is cast to a {@link android.widget.CheckBox} to determine whether the widget
-has been checked or unchecked. The {@link android.widget.CheckBox} widget
-handles its own state changes, so you only need to query the current state.</p>
-</li>
-<li>Run it.</li>
-</ol>
-<p class="note"><strong>Tip:</strong> If you need to change the state
-yourself (such as when loading a saved {@link android.preference.CheckBoxPreference}),
-use the {@link android.widget.CompoundButton#setChecked(boolean)} or {@link
-android.widget.CompoundButton#toggle()} method.</p>
-
-
-
-<h2 id="RadioButtons">Radio Buttons</h2>
-
-<p>In this section, you will create two mutually-exclusive radio buttons (enabling one disables
-the other), using the {@link android.widget.RadioGroup} and {@link android.widget.RadioButton}
-widgets. When either radio button is pressed, a toast message will be displayed.</p>
-
-<ol>
-  <li>Open the <code>res/layout/main.xml</code> file and add two {@link
-android.widget.RadioButton}s, nested in a {@link android.widget.RadioGroup} (inside the {@link
-android.widget.LinearLayout}):
-<pre>
-    &lt;RadioGroup
-      android:layout_width="fill_parent"
-      android:layout_height="wrap_content"
-      android:orientation="vertical">
-      &lt;RadioButton android:id="@+id/radio_red"
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:text="Red"
-          android:onClick="onRadioButtonClicked"/>
-      &lt;RadioButton android:id="@+id/radio_blue"
-          android:layout_width="wrap_content"
-          android:layout_height="wrap_content"
-          android:text="Blue"
-          android:onClick="onRadioButtonClicked"/>
-    &lt;/RadioGroup>
-</pre>
-<p>It's important that the {@link android.widget.RadioButton}s are grouped together by the {@link
-android.widget.RadioGroup} element so that no more than one can be selected at a time. This logic
-is automatically handled by the Android system. When one {@link android.widget.RadioButton} within
-a group is selected, all others are automatically deselected.</p>
-    <p>The attribute <code>android:onClick</code> specifies the name of a method in your activity 
-that the system should call when the user clicks the radio button. You'll create that method
-next.</p>
-</li>
-
-<li>To do something when each {@link android.widget.RadioButton} is selected, add the following
-method inside your {@link android.app.Activity} class:</p>
-
-<pre>
-public void onRadioButtonClicked(View v) {
-    // Perform action on clicks
-    RadioButton rb = (RadioButton) v;
-    Toast.makeText(HelloFormStuff.this, rb.getText(), Toast.LENGTH_SHORT).show();
-}
-</pre>
-
-<p>When you specify this kind of method, which is used in your layout file with the {@code
-android:onClick}
-attribute, the method must be <code>public</code>, have a <code>void</code> return value, and
-accept a single {@code android.view.View} parameter. When the system calls this method, it
-passes the {@code android.view.View} that was clicked.</p>
-<p>Because each {@link android.widget.RadioButton} widget is grouped into a {@link
-android.widget.RadioGroup}, each widget handles its own state changes when a new button is
-selected.</p>
-</li>
-<li>Run the application.</li>
-</ol>
-
-<p class="note"><strong>Tip:</strong> If you need to change the state
-yourself (such as when loading a saved {@link android.preference.CheckBoxPreference}),
-use the {@link android.widget.CompoundButton#setChecked(boolean)} or {@link
-android.widget.CompoundButton#toggle()} method.</p>
-
-
-
-<h2 id="ToggleButton">Toggle Button</h2>
-
-<p>In this section, you'll create a button used specifically for toggling between two
-states, using the {@link android.widget.ToggleButton} widget. This widget is an excellent
-alternative to radio buttons if you have two simple states that are mutually exclusive ("on" and
-"off", for example).</p>
-
-<ol>
-  <li>Open the <code>res/layout/main.xml</code> file and add the {@link android.widget.ToggleButton}
-element (inside the {@link android.widget.LinearLayout}):
-<pre>
-    &lt;ToggleButton android:id="@+id/togglebutton"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:textOn="Vibrate on"
-        android:textOff="Vibrate off"
-        android:onClick="onToggleClicked"/>
-</pre>
-  <p>The attributes <code>android:textOn</code> and <code>android:textOff</code> specify the text
-for the button when the button has been toggled on or off. The default values are "ON" and
-"OFF".</p>
-    <p>The attribute <code>android:onClick</code> specifies the name of a method in your activity 
-that the system should call when the user clicks the button. You'll create that method next.</p>
-</li>
-<li>To do something when the user clicks the button, add the following
-method inside your {@link android.app.Activity} class:</p>
-
-<pre>
-public void onToggleClicked(View v) {
-    // Perform action on clicks
-    if (((ToggleButton) v).isChecked()) {
-        Toast.makeText(HelloFormStuff.this, "Toggle on", Toast.LENGTH_SHORT).show();
-    } else {
-        Toast.makeText(HelloFormStuff.this, "Toggle off", Toast.LENGTH_SHORT).show();
-    }
-}
-</pre>
-
-<p>When you specify this kind of method, which is used in your layout file with the {@code
-android:onClick}
-attribute, the method must be <code>public</code>, have a <code>void</code> return value, and
-accept a single {@code android.view.View} parameter. When the system calls this method, it
-passes the {@code android.view.View} that was clicked.</p>
-<p>In this example, the callback
-method checks the new state of the button, then shows a {@link android.widget.Toast} message that
-indicates the current state.</p>
-
-<p>Notice that the {@link android.widget.ToggleButton} handles its own state change between checked
-and unchecked, so you just ask which it is.</p>
-<li>Run the application.</li>
-</ol>
-
-<p class="note"><strong>Tip:</strong> If you need to change the state
-yourself (such as when loading a saved {@link android.preference.CheckBoxPreference}),
-use the {@link android.widget.CompoundButton#setChecked(boolean)} or {@link
-android.widget.CompoundButton#toggle()} method.</p>
-
-
-
-
-<h2 id="RatingBar">Rating Bar</h2>
-
-<p>In this section, you'll create a widget that allows the user to provide a rating,
-with the {@link android.widget.RatingBar} widget.</p>
-
-<ol>
-  <li>Open the <code>res/layout/main.xml</code> file and add the {@link android.widget.RatingBar}
-element (inside the {@link android.widget.LinearLayout}):
-<pre>
-    &lt;RatingBar android:id="@+id/ratingbar"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:numStars="5"
-        android:stepSize="1.0"/>
-</pre>
-  <p>The <code>android:numStars</code> attribute defines how many stars to display for the rating
-bar. The <code>android:stepSize</code> attribute defines the granularity for each
-star (for example, a value of <code>0.5</code> would allow half-star ratings). </p>
-</li>
-<li>To do something when a new rating has been set, add the following code
-to the end of the {@link android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-final RatingBar ratingbar = (RatingBar) findViewById(R.id.ratingbar);
-ratingbar.setOnRatingBarChangeListener(new OnRatingBarChangeListener() {
-    public void onRatingChanged(RatingBar ratingBar, float rating, boolean fromUser) {
-        Toast.makeText(HelloFormStuff.this, "New Rating: " + rating, Toast.LENGTH_SHORT).show();
-    }
-});
-</pre>
-<p>This captures the {@link android.widget.RatingBar} widget from the layout with {@link
-android.app.Activity#findViewById(int)} and then sets an {@link
-android.widget.RatingBar.OnRatingBarChangeListener}. The {@link
-android.widget.RatingBar.OnRatingBarChangeListener#onRatingChanged(RatingBar,float,boolean)
-onRatingChanged()} callback method then defines the action to perform when the user sets a rating.
-In this case, a simple {@link android.widget.Toast} message displays the new rating.</p>
-
-<li>Run the application.</li>
-</ol>
-
-<p>If you've added all the form widgets above, your application should look like this:</p>
-<img src="images/hello-formstuff.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.ImageButton}</li>
-	<li>{@link android.widget.EditText}</li>
-	<li>{@link android.widget.CheckBox}</li>
-	<li>{@link android.widget.RadioButton}</li>
-	<li>{@link android.widget.ToggleButton}</li>
-  <li>{@link android.widget.RatingBar}</li>
-</ul>
-
diff --git a/docs/html/resources/tutorials/views/hello-gallery.jd b/docs/html/resources/tutorials/views/hello-gallery.jd
deleted file mode 100644
index 5f2ed32..0000000
--- a/docs/html/resources/tutorials/views/hello-gallery.jd
+++ /dev/null
@@ -1,171 +0,0 @@
-page.title=Gallery
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.Gallery} is a layout widget used to display items in a
-horizontally scrolling list and positions the current selection at the center of the view.</p>
-
-<p>In this tutorial, you'll create a gallery of photos and then display a toast message each time a
-gallery item is selected.</p>
-
-
-<ol>
-  <li>Start a new project named <em>HelloGallery</em>.</li>
-  <li>Find some photos you'd like to use, or use these <a
-href="{@docRoot}shareables/sample_images.zip">sample images</a>. Save the images into the project's
-<code>res/drawable/</code> directory.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;Gallery xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:id="@+id/gallery"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content"
-/>
-</pre>
-  </li>
-
-<li>Open the <code>HelloGallery.java</code> file and insert the following code for the
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    Gallery gallery = (Gallery) findViewById(R.id.gallery);
-    gallery.setAdapter(new ImageAdapter(this));
-
-    gallery.setOnItemClickListener(new OnItemClickListener() {
-        public void onItemClick(AdapterView parent, View v, int position, long id) {
-            Toast.makeText(HelloGallery.this, "" + position, Toast.LENGTH_SHORT).show();
-        }
-    });
-}
-</pre>
-  <p>This starts by setting the {@code main.xml} layout as the content view and then capturing the
-{@link android.widget.Gallery} from
-the layout with {@link
-android.app.Activity#findViewById(int)}. A custom {@link android.widget.BaseAdapter} called
-<code>ImageAdapter</code> is
-instantiated and applied to the {@link android.widget.Gallery} with {@link
-android.widget.AdapterView#setAdapter(T) setAdapter()}. (The <code>ImageAdapter</code> class is
-defined next.)
-Then an anonymous {@link android.widget.AdapterView.OnItemClickListener} is instantiated. The
-{@link android.widget.AdapterView.OnItemClickListener#onItemClick(AdapterView,View,int,long)}
-callback method receives the {@link android.widget.AdapterView} where the click occurred, the
-specific {@link android.view.View} that received the click, the
-position of the {@link android.view.View} clicked (zero-based), and the row ID of the item clicked
-(if applicable). In this example, all that's needed is the position of the click to show a {@link
-android.widget.Toast} message that says the position of the item, using 
-{@link android.widget.Toast#makeText(Context,CharSequence,int)} and {@link
-android.widget.Toast#show()} (in a real world scenario, this ID could be used to get the full sized
-image for some other task).
-</p>
-</li>
-  <li>Create a new XML file in the <code>res/values/</code> directory named <code>attrs.xml</code>.
-Insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
-    &lt;declare-styleable name="HelloGallery">
-        &lt;attr name="android:galleryItemBackground" />
-    &lt;/declare-styleable>
-&lt;/resources>
-</pre>
-  <p>This is a custom styleable resource that can be applied to a layout. In this case, it will be
-applied to the individual items placed into the {@link android.widget.Gallery} widget. The
-<code>&lt;attr></code> element defines a specific attribute for the styleable, and in this case, it
-refers to an existing platform attribute, {@link android.R.attr#galleryItemBackground}, which
-defines a border styling for gallery items. In the next step, you'll
-see how this attribute is referenced and then later applied to each item in the gallery.</p>
-  </li>
-
-  <li>Go back to the <code>HelloGallery.java</code> file. After the {@link
-  android.app.Activity#onCreate(Bundle)} method, define the custom <code>ImageAdapter</code> class:
-<pre>
-public class ImageAdapter extends BaseAdapter {
-    int mGalleryItemBackground;
-    private Context mContext;
-
-    private Integer[] mImageIds = {
-            R.drawable.sample_1,
-            R.drawable.sample_2,
-            R.drawable.sample_3,
-            R.drawable.sample_4,
-            R.drawable.sample_5,
-            R.drawable.sample_6,
-            R.drawable.sample_7
-    };
-
-    public ImageAdapter(Context c) {
-        mContext = c;
-        TypedArray attr = mContext.obtainStyledAttributes(R.styleable.HelloGallery);
-        mGalleryItemBackground = attr.getResourceId(
-                R.styleable.HelloGallery_android_galleryItemBackground, 0);
-        attr.recycle();
-    }
-
-    public int getCount() {
-        return mImageIds.length;
-    }
-
-    public Object getItem(int position) {
-        return position;
-    }
-
-    public long getItemId(int position) {
-        return position;
-    }
-
-    public View getView(int position, View convertView, ViewGroup parent) {
-        ImageView imageView = new ImageView(mContext);
-
-        imageView.setImageResource(mImageIds[position]);
-        imageView.setLayoutParams(new Gallery.LayoutParams(150, 100));
-        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
-        imageView.setBackgroundResource(mGalleryItemBackground);
-
-        return imageView;
-    }
-}
-</pre>
-<p>First, there are a few member variables, including an array of IDs that reference
-the images saved in the drawable resources directory ({@code res/drawable/}).</p>
-<p>Next is the class constructor, where the {@link android.content.Context} for an {@code
-ImageAdapter} instance is defined and the styleable
-resource defined in the last step is acquired and saved to a local field. At the end of the
-constructor, {@link android.content.res.TypedArray#recycle()} is called on the {@link
-android.content.res.TypedArray} so it can be re-used by the system.</p>
-<p>The methods {@link android.widget.Adapter#getCount()}, {@link
-android.widget.Adapter#getItem(int)}, and {@link android.widget.Adapter#getItemId(int)} are methods
-that must be implemented for simple queries on the {@link android.widget.Adapter}.
-The {@link android.widget.Adapter#getView(int,View,ViewGroup) method does the
-work to apply an image to an {@link android.widget.ImageView} that will be embedded in the
-{@link android.widget.Gallery}. In this method, the member {@link android.content.Context} is used
-to create a new {@link android.widget.ImageView}. The {@link android.widget.ImageView} is prepared
-by applying an image from the local array of drawable resources, setting the {@link
-android.widget.Gallery.LayoutParams} height and width for the image, setting the scale to fit the
-{@link android.widget.ImageView} dimensions, and then finally setting the background to use the
-styleable attribute acquired in the constructor.</p>
-
-<p>See {@link android.widget.ImageView.ScaleType} for other image scaling options.</p>
-</li>
-
-<li>Run the application.</li>
-</ol>
-
-<p>You should see something like this:</p>
-<img src="images/hello-gallery.png" width="150px" />
-
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.BaseAdapter}</li>
-	<li>{@link android.widget.Gallery}</li>
-	<li>{@link android.widget.ImageView}</li>
-  <li>{@link android.widget.AdapterView.OnItemClickListener}</li>
-</ul>
-
-
diff --git a/docs/html/resources/tutorials/views/hello-gridview.jd b/docs/html/resources/tutorials/views/hello-gridview.jd
deleted file mode 100644
index 03bfc54..0000000
--- a/docs/html/resources/tutorials/views/hello-gridview.jd
+++ /dev/null
@@ -1,182 +0,0 @@
-page.title=Grid View
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.GridView} is a {@link android.view.ViewGroup} that displays items in a
-two-dimensional,
-scrollable grid. The grid items are automatically inserted to the layout using a {@link
-android.widget.ListAdapter}.</p>
-
-<p>In this tutorial, you'll create a grid of image thumbnails. When an item is selected, a
-toast message will display the position of the image.</p>
-
-
-<ol>
-  <li>Start a new project named <em>HelloGridView</em>.</li>
-  <li>Find some photos you'd like to use, or <a
-href="{@docRoot}shareables/sample_images.zip">download these sample images</a>. Save the image files
-into the project's
-<code>res/drawable/</code> directory.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;GridView xmlns:android="http://schemas.android.com/apk/res/android" 
-    android:id="@+id/gridview"
-    android:layout_width="fill_parent" 
-    android:layout_height="fill_parent"
-    android:columnWidth="90dp"
-    android:numColumns="auto_fit"
-    android:verticalSpacing="10dp"
-    android:horizontalSpacing="10dp"
-    android:stretchMode="columnWidth"
-    android:gravity="center"
-/>
-</pre>
-  <p>This {@link android.widget.GridView} will fill the entire screen. The attributes are rather
-self explanatory. For more information about valid attributes, see the {@link
-android.widget.GridView} reference.</p>
-</li>
-  <li>Open <code>HelloGridView.java</code> and insert the following code for the
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    GridView gridview = (GridView) findViewById(R.id.gridview);
-    gridview.setAdapter(new ImageAdapter(this));
-
-    gridview.setOnItemClickListener(new OnItemClickListener() {
-        public void onItemClick(AdapterView&lt;?> parent, View v, int position, long id) {
-            Toast.makeText(HelloGridView.this, "" + position, Toast.LENGTH_SHORT).show();
-        }
-    });
-}
-</pre>
-  <p>After the {@code main.xml} layout is set for the content view, the
-{@link android.widget.GridView} is captured from the layout with {@link
-android.app.Activity#findViewById(int)}. The {@link
-android.widget.GridView#setAdapter(T) setAdapter()} method then sets a custom adapter ({@code
-ImageAdapter}) as the source for all items to be displayed in the grid. The {@code ImageAdapter} is
-created in the next step.</p>
-<p>To do something when an item in the grid is clicked, the {@link
-android.widget.AdapterView#setOnItemClickListener(OnItemClickListener) setOnItemClickListener()}
-method is passed a new {@link android.widget.AdapterView.OnItemClickListener}. This anonymous
-instance defines the {@link
-android.widget.AdapterView.OnItemClickListener#onItemClick(AdapterView,View,int,long)
-onItemClick()} callback method to show a {@link android.widget.Toast} that displays the index
-position (zero-based) of the selected item (in a real world scenario, the position could be used to
-get the full sized
-image for some other task).</p>
-
-</li>
-<li>Create a new class called <code>ImageAdapter</code> that extends {@link
-android.widget.BaseAdapter}:
-<pre>
-public class ImageAdapter extends BaseAdapter {
-    private Context mContext;
-
-    public ImageAdapter(Context c) {
-        mContext = c;
-    }
-
-    public int getCount() {
-        return mThumbIds.length;
-    }
-
-    public Object getItem(int position) {
-        return null;
-    }
-
-    public long getItemId(int position) {
-        return 0;
-    }
-
-    // create a new ImageView for each item referenced by the Adapter
-    public View getView(int position, View convertView, ViewGroup parent) {
-        ImageView imageView;
-        if (convertView == null) {  // if it's not recycled, initialize some attributes
-            imageView = new ImageView(mContext);
-            imageView.setLayoutParams(new GridView.LayoutParams(85, 85));
-            imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
-            imageView.setPadding(8, 8, 8, 8);
-        } else {
-            imageView = (ImageView) convertView;
-        }
-
-        imageView.setImageResource(mThumbIds[position]);
-        return imageView;
-    }
-
-    // references to our images
-    private Integer[] mThumbIds = {
-            R.drawable.sample_2, R.drawable.sample_3,
-            R.drawable.sample_4, R.drawable.sample_5,
-            R.drawable.sample_6, R.drawable.sample_7,
-            R.drawable.sample_0, R.drawable.sample_1,
-            R.drawable.sample_2, R.drawable.sample_3,
-            R.drawable.sample_4, R.drawable.sample_5,
-            R.drawable.sample_6, R.drawable.sample_7,
-            R.drawable.sample_0, R.drawable.sample_1,
-            R.drawable.sample_2, R.drawable.sample_3,
-            R.drawable.sample_4, R.drawable.sample_5,
-            R.drawable.sample_6, R.drawable.sample_7
-    };
-}
-</pre>
-<p>First, this implements some required methods inherited from {@link
-android.widget.BaseAdapter}. The constructor and {@link
-android.widget.Adapter#getCount()} are self-explanatory. Normally, {@link
-android.widget.Adapter#getItem(int)} should return the actual object at the specified position in
-the adapter, but it's ignored for this example. Likewise, {@link
-android.widget.Adapter#getItemId(int)} should return the row id of the item, but it's not
-needed here.</p>
-
-<p>The first method necessary is {@link android.widget.Adapter#getView(int,View,ViewGroup)
-getView()}. This method creates a new {@link android.view.View} for each image added to the {@code
-ImageAdapter}. When this is called, a {@link android.view.View} is passed in, which is normally a
-recycled object (at least after this has been called once), so there's a check to see if the
-object is null. If it <em>is</em> null, an {@link android.widget.ImageView} is instantiated and
-configured with desired properties for the image presentation:</p>
-<ul>
-  <li>{@link android.view.View#setLayoutParams(ViewGroup.LayoutParams)} sets
-the height and width for the View&mdash;this ensures that, no matter the size of the drawable, each
-image is resized and cropped to fit in these dimensions, as appropriate.</li>
-  <li>{@link android.widget.ImageView#setScaleType(ImageView.ScaleType)} declares that images should
-be cropped toward the center (if necessary).</li>
-  <li>{@link android.widget.ImageView#setPadding(int,int,int,int)} defines the padding for all
-sides. (Note that, if the images have different aspect-ratios, then less
-padding will cause for more cropping of the image if it does not match
-the dimensions given to the ImageView.)</li>
-</ul>
-
-<p>If the {@link android.view.View} passed to {@link
-android.widget.Adapter#getView(int,View,ViewGroup) getView()} is <em>not</em> null, then the local
-{@link android.widget.ImageView} is initialized with the recycled {@link android.view.View}
-object.</p>
-
-<p>At the end of the {@link android.widget.Adapter#getView(int,View,ViewGroup) getView()} method,
-the {@code
-position} integer passed into the method is used to select an image from the {@code mThumbIds}
-array, which is set as the image resource for the {@link android.widget.ImageView}.</p>
-<p>All that's left is to define the {@code mThumbIds} array of drawable resources.</p>
-</li>
-<li>Run the application.</li>
-</ol>
-<p>Your grid layout should look something like this:</p>
-<img src="images/hello-gridview.png" width="150px" />
-
-<p>Try experimenting with the behaviors of the {@link android.widget.GridView} and {@link
-android.widget.ImageView} elements by adjusting their properties. For example, instead of using
-{@link android.view.View#setLayoutParams(ViewGroup.LayoutParams)}, try using
-{@link android.widget.ImageView#setAdjustViewBounds(boolean)}. </p>
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.GridView}</li>
-	<li>{@link android.widget.ImageView}</li>
-	<li>{@link android.widget.BaseAdapter}</li>
-  <li>{@link android.widget.AdapterView.OnItemClickListener}</li>
-</ul>
-
diff --git a/docs/html/resources/tutorials/views/hello-linearlayout.jd b/docs/html/resources/tutorials/views/hello-linearlayout.jd
deleted file mode 100644
index 8e072b1..0000000
--- a/docs/html/resources/tutorials/views/hello-linearlayout.jd
+++ /dev/null
@@ -1,133 +0,0 @@
-page.title=Linear Layout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.LinearLayout} is a {@link android.view.ViewGroup} that displays child
-{@link android.view.View} elements in a linear direction, either vertically or horizontally.</p>
-
-<p>You should be careful about over-using the {@link android.widget.LinearLayout}. If you begin
-nesting multiple {@link android.widget.LinearLayout}s, you may want to consider using a {@link
-android.widget.RelativeLayout} instead.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloLinearLayout</em>.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-
-  &lt;LinearLayout
-      android:orientation="horizontal"
-      android:layout_width="fill_parent"
-      android:layout_height="fill_parent"
-      android:layout_weight="1">
-      &lt;TextView
-          android:text="red"
-          android:gravity="center_horizontal"
-          android:background="#aa0000"
-          android:layout_width="wrap_content"
-          android:layout_height="fill_parent"
-          android:layout_weight="1"/>
-      &lt;TextView
-          android:text="green"
-          android:gravity="center_horizontal"
-          android:background="#00aa00"
-          android:layout_width="wrap_content"
-          android:layout_height="fill_parent"
-          android:layout_weight="1"/>
-      &lt;TextView
-          android:text="blue"
-          android:gravity="center_horizontal"
-          android:background="#0000aa"
-          android:layout_width="wrap_content"
-          android:layout_height="fill_parent"
-          android:layout_weight="1"/>
-      &lt;TextView
-          android:text="yellow"
-          android:gravity="center_horizontal"
-          android:background="#aaaa00"
-          android:layout_width="wrap_content"
-          android:layout_height="fill_parent"
-          android:layout_weight="1"/>
-  &lt;/LinearLayout>
-	
-  &lt;LinearLayout
-    android:orientation="vertical"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:layout_weight="1">
-    &lt;TextView
-        android:text="row one"
-        android:textSize="15pt"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"/>
-    &lt;TextView
-        android:text="row two"
-        android:textSize="15pt"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"/>
-    &lt;TextView
-        android:text="row three"
-        android:textSize="15pt"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"/>
-    &lt;TextView
-        android:text="row four"
-        android:textSize="15pt"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_weight="1"/>
-  &lt;/LinearLayout>
-
-&lt;/LinearLayout>
-</pre>
-
-<p>Carefully inspect this XML. There is a root {@link android.widget.LinearLayout} that defines
-its orientation to be vertical&mdash;all child {@link android.view.View}s (of which it has two) will
-be stacked vertically. The first child is
-another {@link android.widget.LinearLayout} that uses a horizontal orientation and the second child
-is a {@link android.widget.LinearLayout} that uses a vertical orientation. Each of these nested
-{@link android.widget.LinearLayout}s contain several {@link android.widget.TextView} elements, which
-are oriented with each other in the manner defined by their parent {@link
-android.widget.LinearLayout}.</p>
-</li>
-<li>Now open <code>HelloLinearLayout.java</code> and be sure it loads the
-<code>res/layout/main.xml</code> layout in the
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method:</p>
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p>The {@link android.app.Activity#setContentView(int)} method loads the
-layout file for the {@link android.app.Activity}, specified by the resource
-ID &mdash; <code>R.layout.main</code> refers to the <code>res/layout/main.xml</code> layout
-file.</p>
-</li>
-<li>Run the application.</li>
-</ol>
-<p>You should see the following:</p>
-<img src="images/hello-linearlayout.png" width="150px" />
-
-<p>Notice how the XML attributes define each View's behavior. Try
-experimenting with different values for <code>android:layout_weight</code> to see how the screen
-real estate is distributed based on the weight of each element. See the <a
-href="{@docRoot}guide/topics/ui/layout-objects.html#linearlayout">Common Layout Objects</a>
-document for more about how {@link android.widget.LinearLayout} handles the
-<code>android:layout_weight</code> attribute.</p>
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.LinearLayout}</li>
-  <li>{@link android.widget.TextView}</li>
-</ul>
-
-
diff --git a/docs/html/resources/tutorials/views/hello-listview.jd b/docs/html/resources/tutorials/views/hello-listview.jd
deleted file mode 100644
index 194258e..0000000
--- a/docs/html/resources/tutorials/views/hello-listview.jd
+++ /dev/null
@@ -1,170 +0,0 @@
-page.title=List View
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.ListView} is a {@link android.view.ViewGroup} that creates a list of
-scrollable items. The list items are automatically inserted to the list using a {@link
-android.widget.ListAdapter}.</p>
-
-<p>In this tutorial, you'll create a scrollable list of country names that are read from a string array.
-When a list item is selected, a toast message will display the position of the item in the list.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloListView</em>.</li>
-  <li>Create an XML file named <code>list_item.xml</code> and save it inside the
-<code>res/layout/</code> folder. Insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;TextView xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:padding="10dp"
-    android:textSize="16sp" >
-&lt;/TextView>
-</pre>
-  <p>This file defines the layout for each item that will be placed in the {@link
-android.widget.ListView}.</p>
-  </li>
-
-  <li>Open the <code>HelloListView.java</code> and make the class extend {@link
-android.app.ListActivity} (instead of {@link android.app.Activity}):
-	<pre>public class HelloListView extends ListActivity {</pre>
-  </li>
-  <li>Insert the following code for the {@link android.app.Activity#onCreate(Bundle) onCreate()}
-method:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-  super.onCreate(savedInstanceState);
-
-  setListAdapter(new ArrayAdapter&lt;String>(this, R.layout.list_item, COUNTRIES));
-
-  ListView lv = getListView();
-  lv.setTextFilterEnabled(true);
-
-  lv.setOnItemClickListener(new OnItemClickListener() {
-    public void onItemClick(AdapterView&lt;?> parent, View view,
-        int position, long id) {
-      // When clicked, show a toast with the TextView text
-      Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
-          Toast.LENGTH_SHORT).show();
-    }
-  });
-}
-</pre>
-<p>Notice that this does not load a layout file for the Activity (which you usually do with {@link
-android.app.Activity#setContentView(int)}). Instead, {@link
-android.app.ListActivity#setListAdapter(ListAdapter)} automatically
-adds a {@link android.widget.ListView} to fill the entire screen of the {@link
-android.app.ListActivity}. This method takes an {@link android.widget.ArrayAdapter}, which
-manages the array of list items that will be placed into the {@link android.widget.ListView}. The
-{@link android.widget.ArrayAdapter} constructor takes the application {@link
-android.content.Context}, the
-layout description for each list item (created in
-the previous step), and a {@link java.util.List} of objects to insert in the {@link
-android.widget.ListView} (defined next).</p>
-
-<p>The {@link android.widget.ListView#setTextFilterEnabled(boolean)} method turns on text filtering
-for the {@link android.widget.ListView}, so that when the user begins typing, the list will be
-filtered.</p>
-
-<p>The {@link android.widget.ListView#setOnItemClickListener(OnItemClickListener)} method defines
-the on-click listener for each item. When an item in the {@link android.widget.ListView} is clicked,
-the {@link android.widget.AdapterView.OnItemClickListener#onItemClick(AdapterView,View,int,long)
-onItemClick()} method is called and a {@link android.widget.Toast} message is displayed, using the
-text from the clicked item.</p>
-
-<p class="note"><strong>Tip:</strong> You can use list item designs provided by the platform
-instead of defining your own layout file for the {@link android.widget.ListAdapter}. For example,
-try using <code>android.R.layout.simple_list_item_1</code> instead of
-<code>R.layout.list_item</code>.</p>
-</li>
-
-<li>After the {@link android.app.Activity#onCreate(Bundle) onCreate()} method, add the string
-array:
-<pre>
-  static final String[] COUNTRIES = new String[] {
-    "Afghanistan", "Albania", "Algeria", "American Samoa", "Andorra",
-    "Angola", "Anguilla", "Antarctica", "Antigua and Barbuda", "Argentina",
-    "Armenia", "Aruba", "Australia", "Austria", "Azerbaijan",
-    "Bahrain", "Bangladesh", "Barbados", "Belarus", "Belgium",
-    "Belize", "Benin", "Bermuda", "Bhutan", "Bolivia",
-    "Bosnia and Herzegovina", "Botswana", "Bouvet Island", "Brazil", "British Indian Ocean Territory",
-    "British Virgin Islands", "Brunei", "Bulgaria", "Burkina Faso", "Burundi",
-    "Cote d'Ivoire", "Cambodia", "Cameroon", "Canada", "Cape Verde",
-    "Cayman Islands", "Central African Republic", "Chad", "Chile", "China",
-    "Christmas Island", "Cocos (Keeling) Islands", "Colombia", "Comoros", "Congo",
-    "Cook Islands", "Costa Rica", "Croatia", "Cuba", "Cyprus", "Czech Republic",
-    "Democratic Republic of the Congo", "Denmark", "Djibouti", "Dominica", "Dominican Republic",
-    "East Timor", "Ecuador", "Egypt", "El Salvador", "Equatorial Guinea", "Eritrea",
-    "Estonia", "Ethiopia", "Faeroe Islands", "Falkland Islands", "Fiji", "Finland",
-    "Former Yugoslav Republic of Macedonia", "France", "French Guiana", "French Polynesia",
-    "French Southern Territories", "Gabon", "Georgia", "Germany", "Ghana", "Gibraltar",
-    "Greece", "Greenland", "Grenada", "Guadeloupe", "Guam", "Guatemala", "Guinea", "Guinea-Bissau",
-    "Guyana", "Haiti", "Heard Island and McDonald Islands", "Honduras", "Hong Kong", "Hungary",
-    "Iceland", "India", "Indonesia", "Iran", "Iraq", "Ireland", "Israel", "Italy", "Jamaica",
-    "Japan", "Jordan", "Kazakhstan", "Kenya", "Kiribati", "Kuwait", "Kyrgyzstan", "Laos",
-    "Latvia", "Lebanon", "Lesotho", "Liberia", "Libya", "Liechtenstein", "Lithuania", "Luxembourg",
-    "Macau", "Madagascar", "Malawi", "Malaysia", "Maldives", "Mali", "Malta", "Marshall Islands",
-    "Martinique", "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia", "Moldova",
-    "Monaco", "Mongolia", "Montserrat", "Morocco", "Mozambique", "Myanmar", "Namibia",
-    "Nauru", "Nepal", "Netherlands", "Netherlands Antilles", "New Caledonia", "New Zealand",
-    "Nicaragua", "Niger", "Nigeria", "Niue", "Norfolk Island", "North Korea", "Northern Marianas",
-    "Norway", "Oman", "Pakistan", "Palau", "Panama", "Papua New Guinea", "Paraguay", "Peru",
-    "Philippines", "Pitcairn Islands", "Poland", "Portugal", "Puerto Rico", "Qatar",
-    "Reunion", "Romania", "Russia", "Rwanda", "Sqo Tome and Principe", "Saint Helena",
-    "Saint Kitts and Nevis", "Saint Lucia", "Saint Pierre and Miquelon",
-    "Saint Vincent and the Grenadines", "Samoa", "San Marino", "Saudi Arabia", "Senegal",
-    "Seychelles", "Sierra Leone", "Singapore", "Slovakia", "Slovenia", "Solomon Islands",
-    "Somalia", "South Africa", "South Georgia and the South Sandwich Islands", "South Korea",
-    "Spain", "Sri Lanka", "Sudan", "Suriname", "Svalbard and Jan Mayen", "Swaziland", "Sweden",
-    "Switzerland", "Syria", "Taiwan", "Tajikistan", "Tanzania", "Thailand", "The Bahamas",
-    "The Gambia", "Togo", "Tokelau", "Tonga", "Trinidad and Tobago", "Tunisia", "Turkey",
-    "Turkmenistan", "Turks and Caicos Islands", "Tuvalu", "Virgin Islands", "Uganda",
-    "Ukraine", "United Arab Emirates", "United Kingdom",
-    "United States", "United States Minor Outlying Islands", "Uruguay", "Uzbekistan",
-    "Vanuatu", "Vatican City", "Venezuela", "Vietnam", "Wallis and Futuna", "Western Sahara",
-    "Yemen", "Yugoslavia", "Zambia", "Zimbabwe"
-  };
-</pre>
-  <p>This is the array of strings that will be placed into the {@link android.widget.ListView}.</p>
-</li>
-<li>Run the application.</li>
-</ol>
-<p>You can scroll the list, or type to filter it, then click an item to see a message. You
-should see something like this:</p>
-<img src="images/hello-listview.png" width="150px" />
-
-<p>Note that using a hard-coded string array is not the best design practice. One is
-used in this tutorial for simplicity, in order to demonstrate the {@link
-android.widget.ListView} widget. The better practice is to reference a string array
-defined by an external resource, such as with a {@code &lt;string-array&gt;}
-resource in your project {@code res/values/strings.xml} file. For example:</p>
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
-    &lt;string-array name="countries_array">
-        &lt;item>Bahrain&lt;/item>
-        &lt;item>Bangladesh&lt;/item>
-        &lt;item>Barbados&lt;/item>
-        &lt;item>Belarus&lt;/item>
-        &lt;item>Belgium&lt;/item>
-        &lt;item>Belize&lt;/item>
-        &lt;item>Benin&lt;/item>
-    &lt;/string-array>
-&lt;/resources>
-</pre>
-<p>To use these resource strings for the {@link android.widget.ArrayAdapter}, replace the original
-{@link android.app.ListActivity#setListAdapter(ListAdapter)} line with the following:</p>
-<pre>
-String[] countries = getResources().getStringArray(R.array.countries_array);
-setListAdapter(new ArrayAdapter&lt;String>(this, R.layout.list_item, countries));
-</pre>
-
-<h3>References</h3>
-<ul>
-	<li>{@link android.widget.ListView}</li>
-	<li>{@link android.widget.ListAdapter}</li>
-</ul>
-
diff --git a/docs/html/resources/tutorials/views/hello-mapview.jd b/docs/html/resources/tutorials/views/hello-mapview.jd
deleted file mode 100644
index 7a0bedf..0000000
--- a/docs/html/resources/tutorials/views/hello-mapview.jd
+++ /dev/null
@@ -1,303 +0,0 @@
-page.title=Google Map View
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>Using the Google Maps library, you can create your own map-viewing Activity. In this
-tutorial, you'll create a simple map application in two parts. In Part 1, you'll create an app that
-shows a map the user can pan and zoom. In Part 2, you'll add overlay items that mark
-points of interest.</p>
-
-<div class="special">
-<p>This tutorial requires that you have the external Google Maps library
-installed in your SDK environment. The Maps library is included with the Google APIs
-add-on, which you can install using the Android SDK and
-AVD Manager. To learn how, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>.</p>
-
-<p>After installing the Google APIs add-on in your SDK, set your project properties to use the build
-target called "Google APIs by Google Inc.". See the instructions for setting a build
-target in <a href="{@docRoot}guide/developing/projects/projects-eclipse.html#CreatingAProject">
-Creating and Managing Projects in Eclipse</a> or <a
-href="{@docRoot}guide/developing/projects/projects-cmdline.html#CreatingAProject">
-Creating and Managing Projects on the Command Line</a>, as appropriate for your environment.</p>
-
-<p>You will also need to set up a new AVD that uses the same Google APIs deployment target. See <a
-href="{@docRoot}guide/developing/devices/index.html">Creating and Managing Virtual Devices</a> for
-more information.</p>
-
-<p>For reference material, see the <a
-href="http://code.google.com/android/add-ons/google-apis/reference/index.html">Google Maps
-library documentation</a>.</p>
-
-</div>
-
-<h2>Part 1: Creating a Map Activity</h2>
-
-<ol>
-  <li>Start a new project named <em>HelloGoogleMaps</em>.</li>
-
-  <li>Because the Maps library is not a part of the standard Android library, you must
-  declare it in the Android Manifest. Open the <code>AndroidManifest.xml</code>
-  file and add the following as a child of the <code>&lt;application></code> element:
-  <pre>&lt;uses-library android:name="com.google.android.maps" /></pre>
-  </li>
-
-  <li>You also need access to the Internet in order to retrieve map tiles,
-  so you must also request the {@link android.Manifest.permission#INTERNET} permission.
-  In the manifest file, add the following as a child of the <code>&lt;manifest></code> element:
-  <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre>
-  </li>
-
-  <li>While you're in the manifest, give the map some more space by getting rid of the title bar
-with the "NoTitleBar" theme:
-<pre>
-&lt;activity android:name=".HelloGoogleMaps" android:label="@string/app_name"
-     <strong>android:theme="@android:style/Theme.NoTitleBar"</strong>&gt;
-</pre>
-  </li>
-
-
-  <li>Open the <code>res/layout/main.xml</code> file and add a single
-  {@code com.google.android.maps.MapView} as the root node:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;com.google.android.maps.MapView
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/mapview"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:clickable="true"
-    android:apiKey="<em>Your Maps API Key goes here</em>"
-/>
-</pre>
-    <p>The <code>android:clickable</code> attribute defines whether you want to allow
-    user-interaction with the map. If this is "false" then touching the map does nothing.</p>
-
-    <p>The <code>android:apiKey</code> attribute holds the Maps API Key for your
-    application, which proves your application and signer certificate has been registered with the
-    Maps service. This is required in order to receive the map data, even while you are
-    developing. Registration to the service is free and it only takes a couple
-    minutes to register your certificate and get a Maps API Key.</p>
-    <p>Go now to get a key. For instructions, read
-    <a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">Obtaining a Maps API
-    Key</a>. For the purpose of this tutorial, you should <a
-  href="http://code.google.com/android/add-ons/google-apis/mapkey.html#getdebugfingerprint">register
-    with the SDK debug certificate</a>, which will only be valid while your application is signed
-    with the debug key (once you sign with your private key, you will need a new API key).
-    When you get your key, insert it for the value of <code>android:apiKey</code>.</p>
-  </li>
-
-  <li>Now open the <code>HelloGoogleMaps.java</code> file. For this Activity, extend
-  {@code MapActivity} (instead of {@code android.app.Activity}):</p>
-
-    <pre>public class HelloGoogleMaps extends MapActivity {</pre>
-    <p>This is a special sub-class of {@link android.app.Activity}, provided by the Maps
-    library, which provides important map capabilities.</p>
-
-   <li>Inside every {@code MapActivity}, the <code>isRouteDisplayed()</code> method is required, so
-    override this method:
-<pre>
-&#64;Override
-protected boolean isRouteDisplayed() {
-    return false;
-}
-</pre>
-<p>This method is required for some accounting from the Maps service to see if you're currently
-displaying any route information. In this case, you're not, so return false.</p>
-</li>
-
-<li>Now add the standard {@link android.app.Activity#onCreate(Bundle) onCreate()} callback method
-to the class:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p>This loads the layout file created above. In fact, this is now a workable application that will
-display map tiles and allow the user to pan around the map. But there's no ability to zoom.
-Fortunately, there's a very simple zoom feature built into the {@code MapView} class, which you can
-summon with {@code setBuiltInZoomControls(boolean)}. Do this at the end of the {@link
-android.app.Activity#onCreate(Bundle) onCreate()} method:</p>
-<pre>
-    MapView mapView = (MapView) findViewById(R.id.mapview);
-    mapView.setBuiltInZoomControls(true);
-</pre>
-</li>
-<li>That's all there is to it. Run the application. (Remember, you must have an <a
-href="{@docRoot}guide/developing/devices/index.html">AVD</a> configured to use the Google APIs
-target, or be using a development device that includes the Maps library.)</li>
-</ol>
-
-<h2>Part 2: Adding Overlay Items</h2>
-
-<p>So, now you have a map, but in many cases you'll also want to create your own map
-markers and lay-overs. That's what you'll do now. In order to do so, you must implement the
-{@code ItemizedOverlay} class, which can manage a whole set of {@code Overlay} (which are the
-individual items placed on the map).</p>
-
-<ol>   
-  <li>Create a new Java class named <code>HelloItemizedOverlay</code> that implements
-  {@code ItemizedOverlay}.
-
-    <p>When using Eclipse, right-click the package name in the Eclipse Package Explorer, and
-    select <strong>New > Class</strong>. Fill-in
-    the Name field as <em>HelloItemizedOverlay</em>. For the Superclass, enter
-    "com.google.android.maps.ItemizedOverlay". Click the checkbox for <em>Constructors from
-    superclass</em>. Click Finish.</p></li>
-
-  <li>First, you need an <code>OverlayItem</code> {@link java.util.ArrayList}, in which you'll put
-  each of the <code>OverlayItem</code> objects you want on the map. Add this at the top of the
-  <code>HelloItemizedOverlay</code> class:
-
-      <pre>private ArrayList&lt;OverlayItem> mOverlays = new ArrayList&lt;OverlayItem>();</pre>
-  </li>
-
-  <li>Now define the <code>HelloItemizedOverlay</code> constructors. The constructor must
-  define the default marker for each of the {@code OverlayItem}s. In order for the {@link
-  android.graphics.drawable.Drawable} to actually get drawn, it must have its bounds  defined. Most
-  commonly, you want the center-point at the bottom of the image to be the point at which it's
-  attached to the map coordinates. This is handled for  you with the {@code boundCenterBottom()}
-  method. Wrap this  around our defaultMarker, so the super  constructor call looks like this:
-<pre>
-public HelloItemizedOverlay(Drawable defaultMarker) {
-  super(boundCenterBottom(defaultMarker));
-}
-</pre>
-  </li>
-
-  <li>In order to add new {@code OverlayItem}s to the ArrayList, you need a new method:
-<pre>
-public void addOverlay(OverlayItem overlay) {
-    mOverlays.add(overlay);
-    populate();
-}</pre>
-    <p>Each time you add a new {@code OverlayItem} to the ArrayList, you must call
-    <code>populate()</code> for the {@code ItemizedOverlay}, which will read each of the
-    {@code OverlayItem}s and prepare them to be drawn.</p>
-  </li>
-
-  <li>When the <code>populate()</code> method executes, it will call <code>createItem(int)</code> in
-  the {@code ItemizedOverlay} to retrieve each {@code OverlayItem}. You must override this method to
-  properly read from the ArrayList and return the {@code OverlayItem} from the position specified
-  by the given integer. Your override method should look like this:
-
-<pre>
-&#64;Override
-protected OverlayItem createItem(int i) {
-  return mOverlays.get(i);
-}
-</pre>
-  </li>
-
-  <li>You must also override the <code>size()</code> method to return the current number of
-  items in the ArrayList:
-<pre>
-&#64;Override
-public int size() {
-  return mOverlays.size();
-}
-</pre>
-  </li>
-
-  <li>Now set up the ability to handle touch events on the overlay items. First, you're
-  going to need a reference to the application {@link android.content.Context} as a member of
-  this class. So add {@code Context mContext} as a class member, then initialize it with a
-  new class constructor:
-<pre>
-public HelloItemizedOverlay(Drawable defaultMarker, Context context) {
-  super(boundCenterBottom(defaultMarker));
-  mContext = context;
-}
-</pre>
-    <p>This passes the {@code defaultMarker} up to the default constructor to bound its coordinates
-    and then initialize {@code mContext} with the given {@link android.content.Context}.</p>
-
-    <p>Then override the {@code onTap(int)} callback method, which will handle the event
-    when an item is tapped by the user:</p>
-<pre>
-&#64;Override
-protected boolean onTap(int index) {
-  OverlayItem item = mOverlays.get(index);
-  AlertDialog.Builder dialog = new AlertDialog.Builder(mContext);
-  dialog.setTitle(item.getTitle());
-  dialog.setMessage(item.getSnippet());
-  dialog.show();
-  return true;
-}
-</pre>
-    <p>This uses the member {@code android.content.Context} to create a new {@link
-android.app.AlertDialog.Builder} and uses the tapped {@code OverlayItem}'s title and snippet for
-the dialog's title and message text. (You'll see the {@code OverlayItem} title and snippet defined
-when you create it below.)</p>
-  </li>
-
-</ol>
-
-<p>You're now done with the <code>HelloItemizedOverlay</code> class and can start using it
-to add items on the map.</p>
-
-<p>Go back to the <code>HelloGoogleMaps</code> class. In the following procedure, you'll create an
-{@code OverlayItem} and add it to an instance of the <code>HelloItemizedOverlay</code> class, then
-add the <code>HelloItemizedOverlay</code> to the <code>MapView</code> using a {@code GeoPoint}
-to define its coordinates on the map.</p>
-
-<img src="images/androidmarker.png" align="right" />
-<ol>
-  <li>First, you need the image for the map overlay. If you don't have one handy, use the Android on
-  the right. Drag this image (or your own) into the <code>res/drawable/</code> directory of your
-  project.</li>
-
-  <li>At the end of your existing {@code onCreate()} method, instantiate :
-
-<pre>
-List&lt;Overlay> mapOverlays = mapView.getOverlays();
-Drawable drawable = this.getResources().getDrawable(R.drawable.androidmarker);
-HelloItemizedOverlay itemizedoverlay = new HelloItemizedOverlay(drawable, this);</pre>
-
-    <p>All overlay elements on a map are held by the {@code MapView}, so when you want to add some,
-    you have to get a list from the <code>getOverlays()</code> method. Then instantiate the {@link
-    android.graphics.drawable.Drawable} used for the map marker, which was saved in the {@code
-    res/drawable/} directory. The constructor for {@code HelloItemizedOverlay} (your custom {@code
-    ItemizedOverlay}) takes the Drawable in order to set the default marker for all overlay
-    items.</p>
-  </li>
-
-  <li>Now create a {@code GeoPoint} that defines the map coordinates for the first overlay item,
-  and pass it to a new {@code OverlayItem}:
-<pre>
-GeoPoint point = new GeoPoint(19240000,-99120000);
-OverlayItem overlayitem = new OverlayItem(point, "Hola, Mundo!", "I'm in Mexico City!");
-</pre>
-
-    <p>{@code GeoPoint} coordinates are specified in microdegrees (<code>degrees * 1e6</code>). The
-    {@code OverlayItem} constructor accepts the {@code GeoPoint} location, a string for the
-    item's title, and a string for the item's snippet text, respectively.</p>
-  </li>
-
-  <li>All that's left is to add this {@code OverlayItem} to your collection in the
-  {@code HelloItemizedOverlay} instance, then add the {@code HelloItemizedOverlay} to the MapView:
-<pre>
-itemizedoverlay.addOverlay(overlayitem);
-mapOverlays.add(itemizedoverlay);
-</pre>
-  </li>
-
-  <li>Now run the application.</li>
-</ol>
-
-<p>You should see the following:</p>
-<img src="images/hello-mapview.png" width="150px" />
-<p>When you tap the overlay item, you'll see the dialog appear.</p>
-
-<p>Because the {@code ItemizedOverlay} class uses an {@code java.util.ArrayList} for all of the
-{@code OverlayItem}s, it's easy to add more. Try adding another one. Before the
-<code>addOverlay()</code> method is called, add these lines:</p>
-<pre>
-GeoPoint point2 = new GeoPoint(35410000, 139460000);
-OverlayItem overlayitem2 = new OverlayItem(point2, "Sekai, konichiwa!", "I'm in Japan!");
-</pre>
-<p>Run the application again. (You probably need to move the map to find the new overlay item.)</p>
-
diff --git a/docs/html/resources/tutorials/views/hello-relativelayout.jd b/docs/html/resources/tutorials/views/hello-relativelayout.jd
deleted file mode 100644
index adc1179..0000000
--- a/docs/html/resources/tutorials/views/hello-relativelayout.jd
+++ /dev/null
@@ -1,89 +0,0 @@
-page.title=Relative Layout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.RelativeLayout} is a {@link android.view.ViewGroup} that displays
-child {@link android.view.View} elements in relative positions. The position of a {@link
-android.view.View} can be specified as relative to sibling elements (such as to the left-of or below
-a given element) or in positions relative to the {@link android.widget.RelativeLayout} area (such as
-aligned to the bottom, left of center).</p>
-
-<p>A {@link android.widget.RelativeLayout} is a very powerful utility for designing a user
-interface because it can eliminate nested {@link android.view.ViewGroup}s. If you find
-yourself using several nested {@link android.widget.LinearLayout} groups, you may be able to
-replace them with a single {@link android.widget.RelativeLayout}.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloRelativeLayout</em>.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-    &lt;TextView
-        android:id="@+id/label"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:text="Type here:"/>
-    &lt;EditText
-        android:id="@+id/entry"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:background="@android:drawable/editbox_background"
-        android:layout_below="@id/label"/>
-    &lt;Button
-        android:id="@+id/ok"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_below="@id/entry"
-        android:layout_alignParentRight="true"
-        android:layout_marginLeft="10dip"
-        android:text="OK" />
-    &lt;Button
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_toLeftOf="@id/ok"
-        android:layout_alignTop="@id/ok"
-        android:text="Cancel" />
-&lt;/RelativeLayout>
-</pre>
-<p>Notice each of the <code>android:layout_*</code> attributes, such as <code>layout_below</code>,
-<code>layout_alignParentRight</code>, and <code>layout_toLeftOf</code>. When using a {@link
-android.widget.RelativeLayout}, you can use these attributes to describe
-how you want to position each {@link android.view.View}. Each one of these attributes define a
-different kind
-of relative position. Some attributes use the resource ID of a sibling {@link android.view.View}
-to define its own relative position. For example, the last {@link android.widget.Button} is
-defined to lie to the left-of and aligned-with-the-top-of the {@link android.view.View}
-identified by the ID <code>ok</code> (which is the previous {@link android.widget.Button}).</p>
-<p>All of the available layout attributes are defined in {@link
-android.widget.RelativeLayout.LayoutParams}.</p>
-</li>
-<li>Make sure you load this layout in the
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method:</p>
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p>The {@link android.app.Activity#setContentView(int)} method loads the
-layout file for the {@link android.app.Activity}, specified by the resource
-ID &mdash; <code>R.layout.main</code> refers to the <code>res/layout/main.xml</code> layout
-file.</p>
-</li>
-<li>Run the application.</li>
-</ol>
-<p>You should see the following layout:</p>
-<img src="images/hello-relativelayout.png" width="150px" />
-
-<h3>Resources</h3>
-<ul>
-  <li>{@link android.widget.RelativeLayout}</li>
-  <li>{@link android.widget.RelativeLayout.LayoutParams}</li>
-  <li>{@link android.widget.TextView}</li>
-  <li>{@link android.widget.EditText}</li>
-  <li>{@link android.widget.Button}</li>
-</ul>
diff --git a/docs/html/resources/tutorials/views/hello-spinner.jd b/docs/html/resources/tutorials/views/hello-spinner.jd
deleted file mode 100644
index e9dc20f..0000000
--- a/docs/html/resources/tutorials/views/hello-spinner.jd
+++ /dev/null
@@ -1,149 +0,0 @@
-page.title=Spinner
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.widget.Spinner} is a widget similar to a drop-down list for selecting items.</p>
-
-<p>In this tutorial, you'll create
-a simple spinner widget that displays a list of planets. When one is selected, a toast message
-will display the selected item.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloSpinner</em>.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:orientation="vertical"
-    android:padding="10dip"
-    android:layout_width="fill_parent"
-    android:layout_height="wrap_content">
-    &lt;TextView
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="10dip"
-        android:text="@string/planet_prompt"
-    />
-    &lt;Spinner 
-        android:id="@+id/spinner"
-        android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:prompt="@string/planet_prompt"
-    />
-&lt;/LinearLayout>
-</pre>
-  <p>Notice that the {@link android.widget.TextView}'s <code>android:text</code> attribute and the
-{@link android.widget.Spinner}'s <code>android:prompt</code> attribute both reference the same
-string resource. This text behaves as a title for the widget. When applied to the {@link
-android.widget.Spinner}, the title text will appear
-in the selection dialog that appears upon selecting the widget.</p>
-</li>
-
-<li>Create a <code>strings.xml</code> file in <code>res/values/</code> and edit the file to look
-like this:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;resources>
-    &lt;string name="planet_prompt">Choose a planet&lt;/string>
-    &lt;string-array name="planets_array">
-        &lt;item>Mercury&lt;/item>
-        &lt;item>Venus&lt;/item>
-        &lt;item>Earth&lt;/item>
-        &lt;item>Mars&lt;/item>
-        &lt;item>Jupiter&lt;/item>
-        &lt;item>Saturn&lt;/item>
-        &lt;item>Uranus&lt;/item>
-        &lt;item>Neptune&lt;/item>
-    &lt;/string-array>
-&lt;/resources>
-</pre>
-  <p>The {@code &lt;string>} element defines the title string referenced by the {@link
-android.widget.TextView} and {@link android.widget.Spinner} in the layout above. The {@code
-&lt;string-array} element defines the list of strings that will be displayed as the list in
-the {@link android.widget.Spinner} widget.</p>
-</li>
-
-<li>Now open the <code>HelloSpinner.java</code> file and insert the following code for the {@link
-android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-&#64;Override
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    Spinner spinner = (Spinner) findViewById(R.id.spinner);
-    ArrayAdapter&lt;CharSequence> adapter = ArrayAdapter.createFromResource(
-            this, R.array.planets_array, android.R.layout.simple_spinner_item);
-    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
-    spinner.setAdapter(adapter);
-}
-</pre>
-  <p>After the {@code main.xml} layout is set as the content view, the  {@link
-android.widget.Spinner} widget is captured from the layout with {@link
-android.app.Activity#findViewById(int)}. The {@link
-android.widget.ArrayAdapter#createFromResource(Context,int,int) createFromResource()} method then
-creates a new {@link  android.widget.ArrayAdapter}, which binds each item in the string array
-to the initial appearance for the {@link android.widget.Spinner} (which is how each item will
-appear in the spinner when selected). The {@code
-R.array.planets_array} ID references the {@code string-array} defined above and the
-{@code android.R.layout.simple_spinner_item} ID references a layout for the standard spinner
-appearance, defined by the platform. Then {@link
-android.widget.ArrayAdapter#setDropDownViewResource(int)} is called to define the appearance for
-each item when the widget is opened ({@code simple_spinner_dropdown_item} is
-another standard layout defined by the platform). Finally, the {@link android.widget.ArrayAdapter}
-is set to associate all of its items with the {@link android.widget.Spinner} by calling {@link
-android.widget.AdapterView#setAdapter(T)}.</p>
-</li>
-
-<li>Now create a nested class that implements {@link
-android.widget.AdapterView.OnItemSelectedListener}. This will provide a callback method that will
-notify your application when an item has been selected from the {@link
-android.widget.Spinner}. Here's what this class should look like:
-<pre>
-public class MyOnItemSelectedListener implements OnItemSelectedListener {
-
-    public void onItemSelected(AdapterView&lt;?> parent,
-        View view, int pos, long id) {
-      Toast.makeText(parent.getContext(), "The planet is " +
-          parent.getItemAtPosition(pos).toString(), Toast.LENGTH_LONG).show();
-    }
-
-    public void onNothingSelected(AdapterView<?> parent) {
-      // Do nothing.
-    }
-}
-</pre>
-<p>The {@link android.widget.AdapterView.OnItemSelectedListener} requires the {@link
-android.widget.AdapterView.OnItemSelectedListener#onItemSelected(AdapterView,View,int,long)
-onItemSelected()} and {@link
-android.widget.AdapterView.OnItemSelectedListener#onNothingSelected(AdapterView)
-onNothingSelected()} callback methods. The former is called when an item from the {@link
-android.widget.AdapterView} is selected, in which case, a short {@link android.widget.Toast}
-message displays the selected text; and the latter is called when a selection disappears from the
-{@link android.widget.AdapterView}, which doesn't happen in this case, so it's ignored.</p>
-</li>
-
-<li>Now the {@code MyOnItemSelectedListener} needs to be applied to the {@link
-android.widget.Spinner}. Go back to the {@link android.app.Activity#onCreate(Bundle) onCreate()}
-method and add the following line to the end:
-<pre>
-    spinner.setOnItemSelectedListener(new MyOnItemSelectedListener());
-</pre>
-<p>This creates a new anonymous instance of the {@code MyOnItemSelectedListener} and sets it as the
-listener for the {@link android.widget.Spinner}.</p>
-</li>
-
-<li>Run the application.</li>
-</ol>
-<p>It should look like this:</p>
-<img src="images/hello-spinner.png" width="150px" />
-
-
-<h3>Resources</h3>
-<ul>
-	<li>{@link android.R.layout}</li>
-	<li>{@link android.widget.ArrayAdapter}</li>
-	<li>{@link android.widget.Spinner}</li>
-</ul>
-
diff --git a/docs/html/resources/tutorials/views/hello-tablelayout.jd b/docs/html/resources/tutorials/views/hello-tablelayout.jd
deleted file mode 100644
index c8c5982..0000000
--- a/docs/html/resources/tutorials/views/hello-tablelayout.jd
+++ /dev/null
@@ -1,124 +0,0 @@
-page.title=Table Layout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-
-<p>{@link android.widget.TableLayout} is a {@link android.view.ViewGroup} that
-displays child {@link android.view.View} elements in rows and columns.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloTableLayout</em>.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-    android:stretchColumns="1">
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Open..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-O"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Save..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-S"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Save As..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-Shift-S"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;View
-        android:layout_height="2dip"
-        android:background="#FF909090" />
-
-    &lt;TableRow>
-        &lt;TextView
-            android:text="X"
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Import..."
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;TableRow>
-        &lt;TextView
-            android:text="X"
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Export..."
-            android:padding="3dip" />
-        &lt;TextView
-            android:text="Ctrl-E"
-            android:gravity="right"
-            android:padding="3dip" />
-    &lt;/TableRow>
-
-    &lt;View
-        android:layout_height="2dip"
-        android:background="#FF909090" />
-
-    &lt;TableRow>
-        &lt;TextView
-            android:layout_column="1"
-            android:text="Quit"
-            android:padding="3dip" />
-    &lt;/TableRow>
-&lt;/TableLayout>
-</pre>
-<p>Notice how this resembles the structure of an HTML table. The {@link android.widget.TableLayout}
-element is like the HTML <code>&lt;table&gt;</code> element; {@link android.widget.TableRow} is like
-a <code>>&lt;tr>&gt;</code> element;
-but for the cells, you can use any kind of {@link android.view.View} element. In this example, a
-{@link android.widget.TextView} is used for each cell. In between some of the rows, there is also a
-basic {@link android.view.View}, which is used to draw a horizontal line.</p>
-
-</li>
-<li>Make sure your <em>HelloTableLayout</em> Activity loads this layout in the
-{@link android.app.Activity#onCreate(Bundle) onCreate()} method:
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-}
-</pre>
-<p>The {@link android.app.Activity#setContentView(int)} method loads the
-layout file for the {@link android.app.Activity}, specified by the resource
-ID &mdash; <code>R.layout.main</code> refers to the <code>res/layout/main.xml</code> layout
-file.</p>
-</li>
-<li>Run the application.</li>
-</ol>
-<p>You should see the following:</p>
-<img src="images/hello-tablelayout.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-  <li>{@link android.widget.TableLayout}</li>
-  <li>{@link android.widget.TableRow}</li>
-  <li>{@link android.widget.TextView}</li>
-</ul>
-
-
diff --git a/docs/html/resources/tutorials/views/hello-tabwidget.jd b/docs/html/resources/tutorials/views/hello-tabwidget.jd
deleted file mode 100644
index 9bafd84..0000000
--- a/docs/html/resources/tutorials/views/hello-tabwidget.jd
+++ /dev/null
@@ -1,210 +0,0 @@
-page.title=Tab Layout
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>To create a tabbed UI, you need to use a {@link android.widget.TabHost} and a {@link
-android.widget.TabWidget}. The {@link android.widget.TabHost} must be the root node for the layout,
-which contains both the {@link android.widget.TabWidget} for displaying the tabs and a {@link
-android.widget.FrameLayout} for displaying the tab content.</p>
-
-<p>You can implement your tab content in one of two ways: use the tabs to swap
-{@link android.view.View}s within the same {@link android.app.Activity}, or use the tabs to change
-between entirely separate activities. Which method you want for your application will depend on your
-demands, but if each tab provides a distinct user activity, then it probably makes sense to use
-a separate {@link android.app.Activity} for each tab, so that you can better manage the application
-in discrete groups, rather than one massive application and layout.</p>
-
-<p>In this tutorial, you'll create a tabbed UI that uses a separate {@link
-android.app.Activity} for each tab.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloTabWidget</em>.</li>
-  <li>First, create three separate {@link android.app.Activity} classes in your project:
-<code>ArtistsActivity</code>, <code>AlbumsActivity</code>, and <code>SongsActivity</code>. These
-will each represent a separate tab. For now, make each one display a simple message using a {@link
-android.widget.TextView}. For example:
-<pre>
-public class ArtistsActivity extends Activity {
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        TextView textview = new TextView(this);
-        textview.setText("This is the Artists tab");
-        setContentView(textview);
-    }
-}
-</pre>
-  <p>Notice that this doesn't use a layout file. Just create a {@link
-android.widget.TextView}, give it some text and set that as the content. Duplicate this for
-each of the three activities, and add the corresponding <code>&lt;activity/&gt;</code> tags to the Android Manifest file.</p>
-
-  <li>You need an icon for each of your tabs. For each icon, you should create two versions: one
-for when the tab is selected and one for when it is unselected. The
-general design recommendation is for the selected icon to be a dark color (grey), and the
-unselected icon to be a light color (white). (See the <a
-href="{@docRoot}guide/practices/ui_guidelines/icon_design.html#tabstructure">Icon Design
-Guidelines</a>.) For example:
-  <p>
-  <img src="images/ic_tab_artists_white.png" title="unselected tab icon"  alt="" />
-  <img src="images/ic_tab_artists_grey.png" title="selected tab icon" alt="" />
-  </p>
-  <p>For this tutorial, you can copy these images and use them for all three tabs. (When you
-create tabs in your own application, you should create customized tab icons.)</p>
-  <p>Now create a <a
-href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state-list drawable</a>
-that specifies which image to use for each tab state:</p>
-  <ol>
-    <li>Save the icon images in your project <code>res/drawable/</code> directory.</li>
-    <li>Create a new XML file in <code>res/drawable/</code>
-named <code>ic_tab_artists.xml</code> and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;selector xmlns:android="http://schemas.android.com/apk/res/android">
-    &lt;!-- When selected, use grey -->
-    &lt;item android:drawable="@drawable/ic_tab_artists_grey"
-          android:state_selected="true" />
-    &lt;!-- When not selected, use white-->
-    &lt;item android:drawable="@drawable/ic_tab_artists_white" />
-&lt;/selector>
-</pre>
-  <p>This is a <a
-href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state-list drawable</a>,
-which you will apply as the tab image. When the tab state changes, the tab icon will
-automatically switch between the images defined here.</p>
-    </li>
-  </ol>
-  </li>
-
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-  <pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;TabHost xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@android:id/tabhost"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent">
-    &lt;LinearLayout
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
-        android:padding="5dp">
-        &lt;TabWidget
-            android:id="@android:id/tabs"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content" />
-        &lt;FrameLayout
-            android:id="@android:id/tabcontent"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
-            android:padding="5dp" />
-    &lt;/LinearLayout>
-&lt;/TabHost>
-</pre>
-    <p>This is the layout that will display the tabs and provide navigation between each {@link
-    android.app.Activity} created above.</p>
-    <p>The {@link android.widget.TabHost} requires that a {@link android.widget.TabWidget} and a
-{@link android.widget.FrameLayout} both live somewhere within it. To position the {@link
-android.widget.TabWidget} and {@link android.widget.FrameLayout} vertically, a {@link
-android.widget.LinearLayout} is used. The {@link android.widget.FrameLayout} is where the content
-for each tab goes, which is empty now because the {@link android.widget.TabHost} will automatically
-embed each {@link android.app.Activity} within it.</p>
-    <p>Notice that the {@link android.widget.TabWidget} and the {@link android.widget.FrameLayout}
-    elements have the IDs {@code tabs} and {@code tabcontent}, respectively. These names
-    must be used so that the {@link android.widget.TabHost} can retrieve references to each of
-    them. It expects exactly these names.</p>
-  </li>
-
-  <li>Now open <code>HelloTabWidget.java</code> and make it extend {@link
-  android.app.TabActivity}:</p>
-<pre>
-public class HelloTabWidget extends TabActivity {
-</pre>
-  </li>
-  <li>Use the following code for the {@link android.app.Activity#onCreate(Bundle) onCreate()}
-  method:
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    Resources res = getResources(); // Resource object to get Drawables
-    TabHost tabHost = getTabHost();  // The activity TabHost
-    TabHost.TabSpec spec;  // Resusable TabSpec for each tab
-    Intent intent;  // Reusable Intent for each tab
-
-    // Create an Intent to launch an Activity for the tab (to be reused)
-    intent = new Intent().setClass(this, ArtistsActivity.class);
-
-    // Initialize a TabSpec for each tab and add it to the TabHost
-    spec = tabHost.newTabSpec("artists").setIndicator("Artists",
-                      res.getDrawable(R.drawable.ic_tab_artists))
-                  .setContent(intent);
-    tabHost.addTab(spec);
-
-    // Do the same for the other tabs
-    intent = new Intent().setClass(this, AlbumsActivity.class);
-    spec = tabHost.newTabSpec("albums").setIndicator("Albums",
-                      res.getDrawable(R.drawable.ic_tab_albums))
-                  .setContent(intent);
-    tabHost.addTab(spec);
-
-    intent = new Intent().setClass(this, SongsActivity.class);
-    spec = tabHost.newTabSpec("songs").setIndicator("Songs",
-                      res.getDrawable(R.drawable.ic_tab_songs))
-                  .setContent(intent);
-    tabHost.addTab(spec);
-
-    tabHost.setCurrentTab(2);
-}
-</pre>
-    <p>This sets up each tab with their text and icon, and assigns each one an {@link
-android.app.Activity}.</p>
-    <p>A reference to the {@link android.widget.TabHost} is first captured with {@link
-android.app.TabActivity#getTabHost()}. Then, for
-each tab, a {@link android.widget.TabHost.TabSpec} is created to define the tab properties. The
-{@link android.widget.TabHost#newTabSpec(String)} method creates a new {@link
-android.widget.TabHost.TabSpec} identified by the given string tag. For each
-{@link android.widget.TabHost.TabSpec}, {@link
-android.widget.TabHost.TabSpec#setIndicator(CharSequence,Drawable)} is called to set the text and
-icon for the tab, and {@link android.widget.TabHost.TabSpec#setContent(Intent)} is called to specify
-the {@link android.content.Intent} to open the appropriate {@link android.app.Activity}. Each
-{@link android.widget.TabHost.TabSpec} is then added to the {@link android.widget.TabHost} by
-calling {@link android.widget.TabHost#addTab(TabHost.TabSpec)}.</p>
-
-    <p>At the very end, {@link
-    android.widget.TabHost#setCurrentTab(int)} opens the tab to be displayed by default, specified
-    by the index position of the tab.</p>
-
-    <p>Notice that not once was the {@link android.widget.TabWidget} object referenced. This is
-    because a {@link android.widget.TabWidget} must always be a child of a {@link
-    android.widget.TabHost}, which is what you use for almost all interaction with the tabs. So when
-    a tab is added to the {@link android.widget.TabHost}, it's automatically added to the child
-    {@link android.widget.TabWidget}.</p>
-  </li>
-
-  <li>Now open the Android Manifest file and add the <code>NoTitleBar</code> theme to the
-<em>HelloTabWidget</em>'s
-  <code>&lt;activity></code> tag. This will remove the default application title from the top
-  of the layout, leaving more space for the tabs, which effectively operate as their own titles.
-  The <code>&lt;activity></code> tag should look like this:
-<pre>
-&lt;activity android:name=".HelloTabWidget" android:label="@string/app_name"
-          android:theme="&#64;android:style/Theme.NoTitleBar">
-</pre>
-  </li>
-
-  <li>Run the application.</li>
-</ol>
-
-
-<p>Your application should look like this (though your icons may be different):</p>
-<img src="images/hello-tabwidget.png" width="150px" />
-
-<h3>References</h3>
-<ul>
-<li>{@link android.widget.TabWidget}</li>
-<li>{@link android.widget.TabHost}</li>
-<li>{@link android.widget.TabHost.TabSpec}</li>
-<li>{@link android.widget.FrameLayout}</li>
-</ul>
-
diff --git a/docs/html/resources/tutorials/views/hello-timepicker.jd b/docs/html/resources/tutorials/views/hello-timepicker.jd
deleted file mode 100644
index cf16c8e..0000000
--- a/docs/html/resources/tutorials/views/hello-timepicker.jd
+++ /dev/null
@@ -1,167 +0,0 @@
-page.title=Time Picker
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>To provide a widget for selecting a time, use the {@link android.widget.TimePicker}
-widget, which allows the user to select the hour and minute in a familiar interface.</p>
-
-<p>In this tutorial, you'll create a {@link android.app.TimePickerDialog}, which presents the
-time picker in a floating dialog box at the press of a button. When the time is set by
-the user, a {@link android.widget.TextView} will update with the new date.</p>
-
-<ol>
-  <li>Start a new project named <em>HelloTimePicker</em>.</li>
-  <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-    <pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:layout_width="wrap_content"
-    android:layout_height="wrap_content"
-    android:orientation="vertical">
-    &lt;TextView android:id="@+id/timeDisplay"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text=""/>
-    &lt;Button android:id="@+id/pickTime"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:text="Change the time"/>
-&lt;/LinearLayout>
-</pre>
-<p>This is a basic {@link android.widget.LinearLayout} with a {@link android.widget.TextView}
-that will display the time and a {@link android.widget.Button} that will open the {@link
-android.app.TimePickerDialog}.</p>
-    </li>
-
-  <li>Open <code>HelloTimePicker.java</code> and insert the following class members:
-<pre>
-    private TextView mTimeDisplay;
-    private Button mPickTime;
-
-    private int mHour;
-    private int mMinute;
-
-    static final int TIME_DIALOG_ID = 0;
-</pre>
-<p>This declares variables for the layout elements and time fields.
-The <code>TIME_DIALOG_ID</code> is a static integer that uniquely identifies the dialog.</p>
-  </li>
-  <li>Now insert the following code for the {@link android.app.Activity#onCreate(Bundle) onCreate()}
-method:
-<pre>
-    &#64;Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.main);
-
-        // capture our View elements
-        mTimeDisplay = (TextView) findViewById(R.id.timeDisplay);
-        mPickTime = (Button) findViewById(R.id.pickTime);
-
-        // add a click listener to the button
-        mPickTime.setOnClickListener(new View.OnClickListener() {
-            public void onClick(View v) {
-                showDialog(TIME_DIALOG_ID);
-            }
-        });
-
-        // get the current time
-        final Calendar c = Calendar.getInstance();
-        mHour = c.get(Calendar.HOUR_OF_DAY);
-        mMinute = c.get(Calendar.MINUTE);
-
-        // display the current date
-        updateDisplay();
-    }
-</pre>
-
-<p>First, the content is set to the <code>main.xml</code> layout and then the {@link
-android.widget.TextView} and {@link android.widget.Button} are captured with {@link
-android.app.Activity#findViewById(int)}.
-Then an {@link android.view.View.OnClickListener} is created for the {@link android.widget.Button},
-so that when clicked, it will call {@link
-android.app.Activity#showDialog(int)}, passing the unique integer ID for the time picker
-dialog. Using {@link android.app.Activity#showDialog(int)} allows the {@link
-android.app.Activity} to manage the life-cycle of the dialog and will call the {@link
-android.app.Activity#onCreateDialog(int)} callback method to request the {@link android.app.Dialog}
-that should be displayed (which you'll define later). After the on-click listener is set, a new
-{@link java.util.Calendar} is created to get the current hour and minute. Finally, the
-private <code>updateDisplay()</code> method is called in order to fill the {@link
-android.widget.TextView} with the current time.</p>
-</li>
-
-<li>Add the <code>updateDisplay()</code> and <code>pad()</code> methods:
-<pre>
-// updates the time we display in the TextView
-private void updateDisplay() {
-    mTimeDisplay.setText(
-        new StringBuilder()
-                .append(pad(mHour)).append(":")
-                .append(pad(mMinute)));
-}
-
-private static String pad(int c) {
-    if (c >= 10)
-        return String.valueOf(c);
-    else
-        return "0" + String.valueOf(c);
-}
-</pre>
-<p>The <code>updateDisplay()</code> method uses the member fields for the time and inserts them in
-the <code>mTimeDisplay</code> {@link android.widget.TextView}. The <code>pad()</code> method returns
-the appropriate string representation of the hour or minute&mdash;it will prefix a zero to the
-number if it's a single digit.</p>
-</li>
-
-<li>Add a class member for a {@link android.app.TimePickerDialog.OnTimeSetListener} that will be
-called when the user sets a new time:
-<pre>
-// the callback received when the user "sets" the time in the dialog
-private TimePickerDialog.OnTimeSetListener mTimeSetListener =
-    new TimePickerDialog.OnTimeSetListener() {
-        public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
-            mHour = hourOfDay;
-            mMinute = minute;
-            updateDisplay();
-        }
-    };
-</pre>
-<p>When the user is done setting the time (clicks the "Set" button), the
-<code>onTimeSet()</code> method is called and it updates the member fields with
-the new time and updates the layout's {@link android.widget.TextView}.</p>
-</li>
-
-<li>Add the {@link android.app.Activity#onCreateDialog(int)} callback method:
-<pre>
-&#64;Override
-protected Dialog onCreateDialog(int id) {
-    switch (id) {
-    case TIME_DIALOG_ID:
-        return new TimePickerDialog(this,
-                mTimeSetListener, mHour, mMinute, false);
-    }
-    return null;
-}
-</pre>
-<p>This is an {@link android.app.Activity} callback that is passed the identifier you passed to
-{@link android.app.Activity#showDialog(int)}, in the {@link android.widget.Button}'s on-click
-listener. When the ID matches, this initializes the {@link android.app.TimePickerDialog} with the
-member variables initialized at the end of <code>onCreate()</code> and the {@link
-android.app.TimePickerDialog.OnTimeSetListener} created in the previous step.</p>
-</li>
-
-<li>Run the application.</li>
-</ol>
-<p>When you press the "Change the time" button, you should see the following:</p>
-<img src="images/hello-timepicker.png" width="150px" />
-
-<h3>References</h3>
-<ol>
-  <li>{@link android.widget.TimePicker}</li>
-  <li>{@link android.app.TimePickerDialog.OnTimeSetListener}</li>
-  <li>{@link android.widget.Button}</li>
-  <li>{@link android.widget.TextView}</li>
-  <li>{@link java.util.Calendar}</li>
-</ol>
-
diff --git a/docs/html/resources/tutorials/views/hello-webview.jd b/docs/html/resources/tutorials/views/hello-webview.jd
deleted file mode 100644
index f6a6a71..0000000
--- a/docs/html/resources/tutorials/views/hello-webview.jd
+++ /dev/null
@@ -1,131 +0,0 @@
-page.title=Web View
-parent.title=Hello, Views
-parent.link=index.html
-@jd:body
-
-<p>{@link android.webkit.WebView} allows you to create your own window for viewing web pages (or even
-develop a complete browser). In this tutorial, you'll create a simple {@link android.app.Activity}
-that can view and navigate web pages.</p>
-
-<ol>
-   <li>Create a new project named <em>HelloWebView</em>.</li>
-   <li>Open the <code>res/layout/main.xml</code> file and insert the following:
-<pre>
-&lt;?xml version="1.0" encoding="utf-8"?>
-&lt;WebView  xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/webview"
-    android:layout_width="fill_parent"
-    android:layout_height="fill_parent"
-/>
-</pre>
-  </li>
-
-   <li>Now open the <code>HelloWebView.java</code> file.
-      At the top of the class, declare a {@link android.webkit.WebView} object:
-<pre>WebView mWebView;</pre>
-  <p>Then use the following code for the {@link android.app.Activity#onCreate(Bundle) onCreate()}
-  method:</p>
-<pre>
-public void onCreate(Bundle savedInstanceState) {
-    super.onCreate(savedInstanceState);
-    setContentView(R.layout.main);
-
-    mWebView = (WebView) findViewById(R.id.webview);
-    mWebView.getSettings().setJavaScriptEnabled(true);
-    mWebView.loadUrl("http://www.google.com");
-}
-</pre>
-  <p>This initializes the member {@link android.webkit.WebView} with the one from the
-  {@link android.app.Activity} layout; requests a {@link android.webkit.WebSettings} object with
-  {@link android.webkit.WebView#getSettings()}; and enables JavaScript for the {@link
-  android.webkit.WebView} with {@link android.webkit.WebSettings#setJavaScriptEnabled(boolean)}.
-  Finally, an initial web page is loaded with {@link
-  android.webkit.WebView#loadUrl(String)}.</p>
-  </li>
-
-  <li>Because this application needs access to the Internet, you need to add the appropriate
-  permissions to the Android manifest file. Open the <code>AndroidManifest.xml</code> file
-  and add the following as a child of the <code>&lt;manifest></code> element:
-
-    <pre>&lt;uses-permission android:name="android.permission.INTERNET" /></pre></li>
-
-  <li>While you're in the manifest, give some more space for web pages by removing the title
-  bar, with the "NoTitleBar" theme:
-<pre>
-&lt;activity android:name=".HelloWebView" android:label="@string/app_name"
-     <strong>android:theme="@android:style/Theme.NoTitleBar"</strong>&gt;
-</pre>
-  </li>
-
-  <li>Now run the application.
-  <p>You now have a simplest web page viewer.
-  It's not quite a browser yet because as soon as you click a link, the default Android Browser
-  handles the Intent to view a web page, because this {@link android.app.Activity} isn't
-  technically enabled to do so. Instead of adding an intent filter to view web pages, you can
-  override the {@link android.webkit.WebViewClient} class and enable this {@link
-  android.app.Activity} to handle its own URL requests.</p>
-  </li>
-
-  <li>In the <code>HelloAndroid</code> Activity, add this nested class:
-<pre>
-private class HelloWebViewClient extends WebViewClient {
-    &#64;Override
-    public boolean shouldOverrideUrlLoading(WebView view, String url) {
-        view.loadUrl(url);
-        return true;
-    }
-}
-</pre>
-  </li>
-  <li>Then towards the end of the {@link android.app.Activity#onCreate(Bundle)} method, set an
-  instance of the <code>HelloWebViewClient</code> as the {@link android.webkit.WebViewClient}:
-   <pre>mWebView.setWebViewClient(new HelloWebViewClient());</pre>
-
-    <p>This line can go anywhere following the initialization of the {@link
-    android.webkit.WebView} object.</p>
-    <p>This creates a {@link android.webkit.WebViewClient} that will load any URL selected from this
-    {@link android.webkit.WebView} into the same {@link android.webkit.WebView}. The 
-    {@link android.webkit.WebViewClient#shouldOverrideUrlLoading(WebView,String)} method is passed
-the current    {@link android.webkit.WebView} and the URL requested, so all it needs to do is load
-the URL in    the given view. Returning <code>true</code> says that the method has handled the URL
-and the    event should not propagate (in which case, an Intent would be created that's handled by
-the    Browser application).</p>
-    <p>If you run the application again, new pages will now load in this Activity.
-    However, you can't navigate back to previous pages. To do this, you need to handle the BACK
-    button on the device, so that it will return to the previous page, rather than exit the
-    application.</p>
-    </li>
-
-  <li>To handle the BACK button key press, add the following method inside the
-  <code>HelloWebView</code> Activity:
-<pre> 
-&#64;Override
-public boolean onKeyDown(int keyCode, KeyEvent event) {
-    if ((keyCode == KeyEvent.KEYCODE_BACK) &amp;&amp; mWebView.canGoBack()) {
-        mWebView.goBack();
-        return true;
-    }
-    return super.onKeyDown(keyCode, event);
-}
-</pre>
-    <p>This {@link android.app.Activity#onKeyDown(int,KeyEvent)} callback method will be called
-    anytime a button is pressed while in the Activity. The condition inside uses the {@link
-    android.view.KeyEvent} to check whether the key pressed is the BACK button and whether the
-    {@link android.webkit.WebView} is actually capable of navigating back (if it has a history). If
-    both are true, then the {@link android.webkit.WebView#goBack()} method is called,
-    which will navigate back one step in the {@link android.webkit.WebView}
-    history.Returning <code>true</code> indicates that the event has been handled. If this condition
-    is not met, then the event is sent back to the system.</p>
-</li>
-<li>Run the application again. You'll now be able to follow links and navigate back through the
-page history.</li>
-</ol>
-<p>When you open the application, it should look like this:</p>
-<img src="images/hello-webview.png" width="150px" />
-
-<h3>Resource</h3>
-<ul>
-<li>{@link android.webkit.WebView}</li>
-<li>{@link android.webkit.WebViewClient}</li>
-<li>{@link android.view.KeyEvent}</li>
-</ul>
diff --git a/docs/html/resources/tutorials/views/images/android.png b/docs/html/resources/tutorials/views/images/android.png
deleted file mode 100755
index 39a1ac7..0000000
--- a/docs/html/resources/tutorials/views/images/android.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/androidmarker.png b/docs/html/resources/tutorials/views/images/androidmarker.png
deleted file mode 100755
index 8c43d46..0000000
--- a/docs/html/resources/tutorials/views/images/androidmarker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-autocomplete.png b/docs/html/resources/tutorials/views/images/hello-autocomplete.png
deleted file mode 100644
index 0b3e680..0000000
--- a/docs/html/resources/tutorials/views/images/hello-autocomplete.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-datepicker.png b/docs/html/resources/tutorials/views/images/hello-datepicker.png
deleted file mode 100755
index 2075066..0000000
--- a/docs/html/resources/tutorials/views/images/hello-datepicker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-formstuff.png b/docs/html/resources/tutorials/views/images/hello-formstuff.png
deleted file mode 100644
index 949319f..0000000
--- a/docs/html/resources/tutorials/views/images/hello-formstuff.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-gallery.png b/docs/html/resources/tutorials/views/images/hello-gallery.png
deleted file mode 100755
index 22d1eaf..0000000
--- a/docs/html/resources/tutorials/views/images/hello-gallery.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-gridview.png b/docs/html/resources/tutorials/views/images/hello-gridview.png
deleted file mode 100755
index 2def0df..0000000
--- a/docs/html/resources/tutorials/views/images/hello-gridview.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-linearlayout.png b/docs/html/resources/tutorials/views/images/hello-linearlayout.png
deleted file mode 100755
index dfef819..0000000
--- a/docs/html/resources/tutorials/views/images/hello-linearlayout.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-relativelayout.png b/docs/html/resources/tutorials/views/images/hello-relativelayout.png
deleted file mode 100755
index ec4d9d4..0000000
--- a/docs/html/resources/tutorials/views/images/hello-relativelayout.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-spinner.png b/docs/html/resources/tutorials/views/images/hello-spinner.png
deleted file mode 100755
index 42e2a91..0000000
--- a/docs/html/resources/tutorials/views/images/hello-spinner.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-tablelayout.png b/docs/html/resources/tutorials/views/images/hello-tablelayout.png
deleted file mode 100755
index 3d80e7f..0000000
--- a/docs/html/resources/tutorials/views/images/hello-tablelayout.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/images/hello-timepicker.png b/docs/html/resources/tutorials/views/images/hello-timepicker.png
deleted file mode 100755
index bd5a1ee..0000000
--- a/docs/html/resources/tutorials/views/images/hello-timepicker.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/resources/tutorials/views/index.jd b/docs/html/resources/tutorials/views/index.jd
deleted file mode 100644
index bba8330..0000000
--- a/docs/html/resources/tutorials/views/index.jd
+++ /dev/null
@@ -1,121 +0,0 @@
-page.title=Hello, Views
-parent.title=Tutorials
-parent.link=../../browser.html?tag=tutorial
-@jd:body
-
-<style>
-.view {float:left; margin:10px; font-size:120%; font-weight:bold;}
-#jd-content .view img {border:1px solid black; margin:8px 0 0 0; padding:5px;}
-</style>
-
-<p>This is a collection of "Hello World"-style tutorials designed
-to get you started quickly with common Android layouts and widgets.</p>
-
-<p>A certain amount of knowledge is assumed for these tutorials. Before you start,
-you should have completed the <a href="{@docRoot}resources/tutorials/hello-world.html">Hello,
-World</a> tutorial&mdash;it will teach you several things about basic
-Android development. More specifically, you should know:</p>
-<ul>
-  <li>How to create an Android project and run it</li>
-  <li>The basic structure of an Android project (resource files, layout files, etc.)</li>
-  <li>The basic components of an {@link android.app.Activity}</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> In order to make these tutorials as simple as possible,
-some code may not conform to best practices for coding Android applications. In particular,
-hard-coded strings are used in places, when the better practice is to reference strings from a
-<code>res/values/strings.xml</code> resource file.</p>
-
-<p class="note"><strong>Tip:</strong> After you have pasted sample code into an Eclipse project,
-press <strong>Ctrl (or Cmd) + Shift + O</strong> to import the required packages.</p>
-
-<h2>Layouts</h2>
-
-<div class="view">
-<a href="hello-linearlayout.html">Linear Layout</a><br/>
-<a href="hello-linearlayout.html"><img src="images/hello-linearlayout.png" height="285" width="200"
-/></a>
-</div>
-
-<div class="view">
-<a href="hello-relativelayout.html">Relative Layout</a><br/>
-<a href="hello-relativelayout.html"><img src="images/hello-relativelayout.png" height="285"
-width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-tablelayout.html">Table Layout</a><br/>
-<a href="hello-tablelayout.html"><img src="images/hello-tablelayout.png" height="285" width="200"
-/></a>
-</div>
-
-<div class="view">
-<a href="hello-gridview.html">Grid View</a><br/>
-<a href="hello-gridview.html"><img src="images/hello-gridview.png" height="285" width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-tabwidget.html">Tab Layout</a><br/>
-<a href="hello-tabwidget.html"><img src="images/hello-tabwidget.png" height="285" width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-listview.html">List View</a><br/>
-<a href="hello-listview.html"><img src="images/hello-listview.png" height="285" width="200" /></a>
-</div>
-
-<p style="clear:left">&nbsp;</p>
-
-<h2>Widgets &amp; Other Views</h2>
-
-<div class="view">
-<a href="hello-datepicker.html">Date Picker</a><br/>
-<a href="hello-datepicker.html"><img src="images/hello-datepicker.png" height="285" width="200"
-/></a>
-</div>
-
-<div class="view">
-<a href="hello-timepicker.html">Time Picker</a><br/>
-<a href="hello-timepicker.html"><img src="images/hello-timepicker.png" height="285" width="200"
-/></a>
-</div>
-
-<div class="view">
-<a href="hello-formstuff.html">Form Stuff</a><br/>
-<a href="hello-formstuff.html"><img src="images/hello-formstuff.png" height="285" width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-spinner.html">Spinner</a><br/>
-<a href="hello-spinner.html"><img src="images/hello-spinner.png" height="285" width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-autocomplete.html">Auto Complete</a><br/>
-<a href="hello-autocomplete.html"><img src="images/hello-autocomplete.png" height="285" width="200"
-/></a>
-</div>
-
-<div class="view">
-<a href="hello-gallery.html">Gallery</a><br/>
-<a href="hello-gallery.html"><img src="images/hello-gallery.png" height="285" width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-mapview.html">Google Map View</a><br/>
-<a href="hello-mapview.html"><img src="images/hello-mapview.png" height="285" width="200" /></a>
-</div>
-
-<div class="view">
-<a href="hello-webview.html">Web View</a><br/>
-<a href="hello-webview.html"><img src="images/hello-webview.png" height="285" width="200" /></a>
-</div>
-
-
-<p class="note" style="clear:left">
-There are plenty more layouts and widgets available. See the {@link android.view.View} class
-for more on View layouts, and the {@link android.widget widget package}
-for more useful widgets. And for more raw code samples, visit the 
-<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/index.html">Api
-Demos</a>.</p>
-
diff --git a/docs/html/sdk/OLD_RELEASENOTES.jd b/docs/html/sdk/OLD_RELEASENOTES.jd
index 7751681..6865db2 100644
--- a/docs/html/sdk/OLD_RELEASENOTES.jd
+++ b/docs/html/sdk/OLD_RELEASENOTES.jd
@@ -173,9 +173,9 @@
 
 <p>The SDK includes several new development tools, such as</p>
 <ul>
-	<li><a href="{@docRoot}guide/developing/tools/hierarchy-viewer.html">HierarchyViewer</a> is a visual tool for inspecting and debugging your user interfaces and layout. </li>
-	<li><a href="{@docRoot}guide/developing/tools/draw9patch.html">Draw 9-patch</a> allows you to easily create a NinePatch graphic using a WYSIWYG editor. </li>
-	<li>The <a href="{@docRoot}guide/developing/tools/monkey.html">UI/Application Exerciser Monkey</a> generates pseudo-random system and user events, for testing your application. </li>
+	<li><a href="{@docRoot}tools/help/hierarchy-viewer.html">HierarchyViewer</a> is a visual tool for inspecting and debugging your user interfaces and layout. </li>
+	<li><a href="{@docRoot}tools/help/draw9patch.html">Draw 9-patch</a> allows you to easily create a NinePatch graphic using a WYSIWYG editor. </li>
+	<li>The <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> generates pseudo-random system and user events, for testing your application. </li>
 </ul>
 <p>
 	<b>Application Signing</b>
@@ -326,7 +326,7 @@
 
 <h4>traceview</h4>
 <ul>
-    <li>The <a href="{@docRoot}guide/developing/tools/traceview.html">traceview</a> tool is now included in the SDK.</li>
+    <li>The <a href="{@docRoot}tools/help/traceview.html">traceview</a> tool is now included in the SDK.</li>
 </ul>
 
 <h3>Resolved Issues</h3>
@@ -387,13 +387,13 @@
 <ul>
 <li>Now provides support for emulating inbound SMS messages. The ADT plugin and DDMS provide integrated access to 
 this capability. For more information about how to emulate inbound SMS from the console, 
-see <a href="{@docRoot}guide/developing/tools/emulator.html#sms">SMS Emulation</a>. </li>
+see <a href="{@docRoot}tools/help/emulator.html#sms">SMS Emulation</a>. </li>
 </ul>
 
 <h4>Emulator</h4>
 <ul><li>The default emulator skin has been changed to HVGA-P from QVGA-L. For information 
 about emulator skins and how to load a specific skin when starting the emulator, see 
-<a href="{@docRoot}guide/developing/tools/emulator.html#skins">Using Emulator Skins</a>.</li>
+<a href="{@docRoot}tools/help/emulator.html#skins">Using Emulator Skins</a>.</li>
 </ul>
 
 <h3>Resolved Issues</h3>
diff --git a/docs/html/sdk/RELEASENOTES.jd b/docs/html/sdk/RELEASENOTES.jd
index 91eb57f..c7ece42 100644
--- a/docs/html/sdk/RELEASENOTES.jd
+++ b/docs/html/sdk/RELEASENOTES.jd
@@ -37,15 +37,15 @@
 
 <ul>
 <li>Notes for the Android 2.0.1 platform are in the <a
-href="{@docRoot}sdk/android-2.0.1.html">Android 2.0.1, Release 1</a> document. </li>
+href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1, Release 1</a> document. </li>
 <li>You can find information about tools changes in the <a
-href="{@docRoot}sdk/tools-notes.html#notes">SDK Tools</a> and <a
-href="{@docRoot}sdk/eclipse-adt.html#notes">ADT Plugin for Eclipse</a>.</li>
+href="{@docRoot}tools/sdk/tools-notes.html#notes">SDK Tools</a> and <a
+href="{@docRoot}tools/sdk/eclipse-adt.html#notes">ADT Plugin for Eclipse</a>.</li>
 </ul>
 
 <p>To get started with the SDK, review the Quick Start summary on the <a
 href="{@docRoot}sdk/index.html">Android SDK download page</a> or read <a
-href="{@docRoot}sdk/installing.html">Installing the SDK</a> for detailed
+href="{@docRoot}sdk/installing/index.html">Installing the SDK</a> for detailed
 installation instructions. </p>
 
 
@@ -64,7 +64,7 @@
 skins. </li>
     <li>Android SDK and AVD Manager, a graphical UI to let you manage your
 SDK and AVD environments more easily. The tool lets you create and manage 
-your <a href="{@docRoot}guide/developing/devices/managing-avds.html">Android Virtual
+your <a href="{@docRoot}tools/devices/managing-avds.html">Android Virtual
 Devices</a> and download new SDK packages (such as platform versions and 
 add-ons) into your environment.</li>
     <li>Improved support for test packages in New Project Wizard</li>
@@ -72,7 +72,7 @@
 capability that lets you display only the parts of the API that are actually 
 available to your application, based on the <code>android:minSdkVersion</code>
 value the application declares in its manifest. For more information, see
-<a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a></li>
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
   </ul>
 
 <p>For details about the Android platforms included in the SDK &mdash; including
@@ -109,7 +109,7 @@
 <p>The new version of ADT is downloadable from the usual remote update site or
 is separately downloadable as a .zip archive. For instructions on how to
 download the plugin, please see <a
-href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>. </p>
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>. </p>
 
 <h3>Android SDK and AVD Manager</h3>
 
@@ -222,7 +222,7 @@
 density for each skin, to create any combination of resolution/density (WVGA
 with medium density, for instance).  To do so, use the <code>android</code> tool
 command line to create a new AVD that uses a custom hardware configuration. See
-<a href="{@docRoot}guide/developing/devices/managing-avds.html#createavd">Creating an
+<a href="{@docRoot}tools/devices/managing-avds.html#createavd">Creating an
 AVD</a> for more information.</p>
 
 <h3>Other Notes and Resolved Issues</h3>
@@ -330,7 +330,7 @@
 Android 1.5). The tools are updated to let you deploy your application
 on any platform in the SDK, which helps you ensure forward-compatibility and, 
 if applicable, backward-compatibility.</li>
-    <li>Introduces <a href="{@docRoot}guide/developing/devices/managing-avds.html">Android
+    <li>Introduces <a href="{@docRoot}tools/devices/managing-avds.html">Android
 Virtual Devices</a> &mdash; (AVD) configurations of options that you
 run in the emulator to better model actual devices. Each AVD gets its
 own dedicated storage area, making it much easier to work with multiple emulators 
@@ -352,7 +352,7 @@
 
 <p>For details about the Android platforms included in the SDK &mdash; including
 bug fixes, features, and API changes &mdash; please read the <a
-href="{@docRoot}sdk/android-1.5.html">Android 1.5 version notes</a>.</p>
+href="{@docRoot}about/versions/android-1.5.html">Android 1.5 version notes</a>.</p>
 
 <h3>Installation and Upgrade Notes</h3>
 
@@ -407,7 +407,7 @@
 available to use.</p>
 
 <p>For more information about AVDs, see <a
-href="{@docRoot}guide/developing/devices/index.html">Creating and Managing Virtual Devices</a>
+href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>
 
 <h3>Other Notes</h3>
 
@@ -491,7 +491,7 @@
 
 <p>For details about the Android 1.1 system image included in the SDK &mdash;
 including bug fixes, features, and API changes &mdash; please read the <a
-href="{@docRoot}sdk/android-1.1.html">Android 1.1 version notes</a>.</p>
+href="{@docRoot}about/versions/android-1.1.html">Android 1.1 version notes</a>.</p>
 
 <h3>App Versioning for Android 1.1</h3>
 
@@ -545,7 +545,7 @@
 Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a
 previous version of ADT, you should update to the latest version for use
 with this SDK. For information about how to update your ADT plugin, see
-<a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
+<a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
 
 <h3>Installation and Upgrade Notes</h3>
 
@@ -585,7 +585,7 @@
 <p>The USB driver files are located in the
 <code>&lt;SDK&gt;/usb_driver</code> directory. For details and
 installation instructions, see <a
-href="{@docRoot}guide/developing/device.html#setting-up">Connecting Hardware Devices</a>.</p>
+href="{@docRoot}tools/device.html#setting-up">Connecting Hardware Devices</a>.</p>
 </p>
 
 <h3>Resolved Issues, Changes</h3>
@@ -650,7 +650,7 @@
 Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are
 using a previous version of ADT, you should update to the latest version for use
 with this SDK. For information about how to update your ADT plugin, see <a
-href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
 
 <h3>Other Notes</h3>
 
diff --git a/docs/html/sdk/adding-components.jd b/docs/html/sdk/adding-components.jd
deleted file mode 100644
index 599b2a8..0000000
--- a/docs/html/sdk/adding-components.jd
+++ /dev/null
@@ -1,209 +0,0 @@
-page.title=Adding SDK Packages
-@jd:body
-
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Quickview</h2>
-<ul>
-  <li>Use the Android SDK Manager to
-   set up your SDK and keep it up-to-date.</li>
-</ul>
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#launching">Launching the Android SDK Manager</a>
-  <li><a href="#InstallingComponents">Installing SDK Packages</a>
-  <li><a href="#UpdatingComponents">Updating SDK Packages</a>
-  <li><a href="#dependencies">Package Dependencies</a></li>
-  <li><a href="#AddingSites">Adding New Sites</a></li>
-  <li><a href="#troubleshooting">Troubleshooting</a></li>
-</ol>
-</div>
-</div>
-
-<p>Adding and updating packages in your Android SDK is fast and easy. To add or
-update the individual SDK packages that you need, use the <em>Android SDK
-Manager</em> (included in the SDK Tools).</p>
-
-<p>It only takes a couple of clicks to install individual versions of the
-Android platform, new development tools, new documentation, and SDK add-ons. The
-new SDK packages are automatically installed into your existing SDK directory,
-so you don't need to update your development environment to specify a new SDK
-location.</p>
-
-<p>If you're setting up your Android SDK for the first time,
-see <a href="{@docRoot}sdk/installing.html#components">Installing the SDK</a> for information about
-what packages to install.</p>
-
-<p class="note"><strong>Note:</strong> If you develop in Eclipse, you might also need
-to update your ADT plugin when you update your development tools. See the revisions listed in the
-<a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a> document.</p>
-
-<img src="{@docRoot}images/sdk_manager_packages.png" alt="" />
-<p class="img-caption"><strong>Figure 1.</strong> The Android SDK Manager's
-<strong>Available Packages</strong> panel, which shows the SDK packages that are
-available for you to download into your environment. </p>
-</div>
-
-<h2 id="launching">Launching the Android SDK Manager</h2>
-
-<p>The Android SDK Manager is the tool that you use to install and
-upgrade SDK packages in your development environment. </p>
-
-<p>You can launch the Android SDK Manager in one of the following ways.</p>
-
-<h4>Launching from Eclipse/ADT</h4>
-
-<p>If you are developing in Eclipse and have already installed the ADT Plugin,
-follow these steps to access the Android SDK Manager tool:</p>
-
-<ol>
-<li>Open Eclipse</li>
-<li>Select <strong>Window</strong> &gt; <strong>Android SDK
-Manager</strong>.</li>
-</ol>
-
-<h4>Launching from the SDK Manager script (Windows only)</h4>
-
-<p>For Windows only, the SDK includes a script that invokes the Android SDK Manager. To launch the
-tool using the script, double-click {@code SDK
-Manager.exe} at the root of the the SDK directory.</p>
-
-<h4>Launching from a command line</h4>
-
-<p>In all development environments, follow these steps to access the Android SDK Manager tool from
-the command line: </p>
-
-<ol>
-<li>Navigate to the <code>&lt;<em>sdk</em>&gt;/tools/</code> directory.</li>
-<li>Execute the {@code android} tool command with no options.
-  <pre style="width:400px">$ android</pre></li>
-</ol>
-
-
-<h2 id="InstallingComponents">Installing SDK Packages</h2>
-
-<p class="caution"><strong>Caution:</strong> Before you install SDK packages,
-we recommend that you disable any antivirus software that may be running on
-your computer. There are cases in which antivirus software on Windows is known to interfere with the
-installation process, so we suggest you disable your antivirus until installation is
-complete.</p>
-
-<p>Follow these steps to install new SDK packages in your environment:</p>
-
-<ol>
-  <li>Launch the Android SDK Manager as described in the section above.</li>
-  <li>Select <strong>Available Packages</strong> in the left panel.
-  This will reveal all of the packages that are currently available for download
-  from the SDK repository.</li>
-  <li>Select the package(s) you'd like to install and click <strong>Install
-  Selected</strong>. (If you aren't sure which packages to select, read <a
-  href="installing.html#which">Recommended Packages</a>.)</li>
-  <li>Verify and accept the packages you want (ensure each one is selected with a green
-checkmark) and click <strong>Install</strong>. The packages will now be installed into
-your existing Android SDK directories.</li>
-</ol>
-
-<p>New platforms are automatically saved into the
-<code>&lt;sdk&gt;/platforms/</code> directory of your SDK;
-new add-ons are saved in the <code>&lt;sdk&gt;/add-ons/</code>
-directory; samples are saved in the
-<code>&lt;sdk&gt;/samples/android-&lt;level&gt;/</code>;
-and new documentation is saved in the existing
-<code>&lt;sdk&gt;/docs/</code> directory (old docs are replaced).</p>
-
-
-<h2 id="UpdatingComponents">Updating SDK Packages</h2>
-
-<p>From time to time, new revisions of existing SDK packages are released and
-made available to you through the SDK repository. In most cases, if you have those
-packages installed in your environment, you will want
-to download the new revisions as soon as possible. </p>
-
-<p>You can learn about the release of new revisions in two ways: </p>
-
-<ul>
-<li>You can watch for updates listed in the "SDK" tab of the Android Developers
-site, in the "Downloadable SDK Packages" section. </li>
-<li>You can watch for updates listed in the <strong>Available Packages</strong>
-panel of the Android SDK Manager. </li>
-</ul>
-
-<p>When you see that a new revision is available, you can use the Android SDK Manager to quickly
-download it to your environment. Follow the same
-procedure as given in <a href="#InstallingComponents">Installing SDK Packages</a>, above. The new
-package is installed in place of the old, but without impacting your
-applications. </p>
-
-<p class="note"><strong>Tip:</strong>
-Use the "Display updates only" checkbox to show only the packages
-you do not have.</p>
-
-
-<h2 id="dependencies">SDK Package Dependencies</h2>
-
-<p>In some cases, an SDK package may require a specific minimum revision of
-another package or SDK tool. Where such dependencies exist, they are
-documented in the revision notes for each package, available from the links in
-the "Downloadable SDK packages" section at left.</p>
-
-<p>For example, there may be a dependency between the ADT Plugin for Eclipse and
-the SDK Tools package. When you install the SDK Tools
-package, you should also upgrade to the required version of ADT (if you
-are developing in Eclipse). In this case,  the major version number for your ADT plugin should
-always match the revision number of your SDK Tools (for example, ADT 8.x requires SDK Tools r8).
-</p>
-
-<p>Also make sure that, each time you install a new version of the Android platform, you have
-the latest version of the SDK Platform-tools package. The SDK Platform-tools contain
-tools that are backward compatible with all versions of the Android platform and are
-often updated to support new features in the latest version of the Android platform.</p>
-
-<p>The development tools will notify you with debug warnings if there is dependency that you need to
-address. The Android SDK Manager also enforces dependencies by requiring that you download any
-packages that are needed by those you have selected.</p>
-
-
-<h2 id="AddingSites">Adding New Sites</h2>
-
-<p>By default, <strong>Available Packages</strong> displays packages available from the
-<em>Android Repository</em> and <em>Third party Add-ons</em>. You can add other sites that host
-their own Android SDK add-ons, then download the SDK add-ons
-from those sites.</p>
-
-<p>For example, a mobile carrier or device manufacturer might offer additional
-API libraries that are supported by their own Android-powered devices. In order
-to develop using their libraries, you must install their Android SDK add-on, if it's not already
-available under <em>Third party Add-ons</em>. </p>
-
-<p>If a carrier or device manufacturer has hosted an SDK add-on repository file
-on their web site, follow these steps to add their site to the Android SDK
-Manager:</p>
-
-<ol>
-  <li>Select <strong>Available Packages</strong> in the left panel.</li>
-  <li>Click <strong>Add Add-on Site</strong> and enter the URL of the
-{@code repository.xml} file. Click <strong>OK</strong>.</li>
-</ol>
-<p>Any SDK packages available from the site will now be listed under a new item named
-<strong>User Add-ons</strong>.</p>
-
-
-<h2 id="troubleshooting">Troubleshooting</h2>
-
-<p><strong>Problems connecting to the SDK repository</strong></p>
-
-<p>If you are using the Android SDK Manager to download packages and are encountering
-connection problems, try connecting over http, rather than https. To switch the
-protocol used by the Android SDK Manager, follow these steps: </p>
-
-<ol>
-  <li>With the Android SDK Manager window open, select "Settings" in the
-  left pane. </li>
-  <li>On the right, in the "Misc" section, check the checkbox labeled "Force
-  https://... sources to be fetched using http://..." </li>
-  <li>Click <strong>Save &amp; Apply</strong>.</li>
-</ol>
-
-
diff --git a/docs/html/sdk/android-1.5.jd b/docs/html/sdk/android-1.5.jd
deleted file mode 100644
index 9ed798c..0000000
--- a/docs/html/sdk/android-1.5.jd
+++ /dev/null
@@ -1,375 +0,0 @@
-page.title=Android 1.5 Platform
-sdk.platform.version=1.5
-sdk.platform.apiLevel=3
-sdk.platform.majorMinor=major
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#features">Platform Highlights</a></li>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#api">Framework API Changes</a>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-
-    </ol>
-  </li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
-deployable to Android-powered handsets starting in May 2009.
-The release includes new features for users and developers, as well as changes
-in the Android framework API. </p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes a
-fully compliant Android library and system image, as well as a set of emulator
-skins, sample applications, and more. The downloadable platform is fully
-compliant and includes no external libraries. </p>
-
-<p>To get started developing or testing against the Android
-{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your Android 1.6 or later SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>.</p>
-
-
-<h2 id="features">Platform Highlights</h2>
-
-<p>For a list of new user features and platform highlights, see the <a
-href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Android 
-{@sdkPlatformVersion} Platform Highlights</a> document.</p>
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-  padding: .25em 1em 0em 1em;
-  margin-bottom: 0;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.5, Revision 4</a> <em>(May 2010)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r6 or higher.</p>
-</dd>
-
-<dt>Tools:</dt>
-<dd>
-<ul> 
-<li>Adds support for library projects in the Ant build system.</li>
-<li>Fixes test project build in the Ant build system.</li>
-</ul> 
-</dd>
-
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.5, Revision 3</a> <em>(July 2009)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r3 or higher.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.5, Revision 2</a> <em>(May 2009)</em></a>
-  <div class="toggleme">
-<p>Not available as an SDK component &mdash; please use Android 1.5, r3 instead. </p>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.5, Revision 1</a> <em>(April 2009)</em></a>
-  <div class="toggleme">
-<p>Not available as an SDK component &mdash; please use Android 1.5, r3 instead. </p>
- </div>
-</div>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
-application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
-<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
-element in your application's manifest. </p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="api">Framework API Changes</h2>
-
-<p>The sections below provide information about the application framework API provided by the Android {@sdkPlatformVersion} platform. </p>
-
-<h3>UI framework</h3>
-  <ul>
-    <li>Framework for easier background/UI thread interaction</li>
-    <li>New {@link android.widget.SlidingDrawer SlidingDrawer} widget</li>
-    <li>New {@link android.widget.HorizontalScrollView HorizontalScrollview} widget</li>
-  </ul>
-
-<h3>AppWidget framework</h3>
-  <ul>
-    <li>APIs for creating secure home screen {@link android.appwidget
-AppWidgets}. For information about how to use AppWidgets, see the Developer's
-Guide <a href="{@docRoot}guide/topics/appwidgets/index.html">AppWidgets</a>
-documentation. Also see <a
-href="http://android-developers.blogspot.com/2009/04/introducing-home-screen-widgets-and.html">
-Introducing home screen widgets and the AppWidget
-framework</a> on the Android Developer's Blog.</li>
-    <li>APIs for populating {@link android.provider.LiveFolders Live Folders}
-        with custom content.</li>
-  </ul>
-
-<h3>Media framework</h3>
-  <ul>
-    <li>Raw audio recording and playback APIs</li>
-    <li>Interactive MIDI playback engine</li>
-    <li>Video recording APIs for developers (3GP format)</li>
-    <li>Video and photo sharing Intents</li>
-    <li>Media search Intent</li>
-  </ul>
-
-<h3>Input Method framework </h3>
-   <ul>
-    <li>{@link android.inputmethodservice.InputMethodService Input Method
-        Service} framework</li>
-    <li>Text-prediction engine</li>
-    <li>Ability to provide downloadable IMEs to users</li>
-  </ul>
-
-<h3>Application-defined hardware requirements</h3>
-
-<p>Applications can now use a new element in their manifest files, <a
-href="{@docRoot}guide/topics/manifest/uses-configuration-element.html"><code>&lt;uses-configuration&gt;</code></a>
- to indicate to the Android system what hardware features
-they require in order to function properly. For example, an application might
-use the element to specify that it requires a physical keyboard or a particular
-navigation device, such as a trackball. Prior to installing the application, the
-Android system checks the attributes defined for the
-<code>&lt;uses-configuration&gt;</code> element and allows the installation to
-continue only if the required hardware is present.</p>
-
-<h3>Speech recognition framework</h3>
-    <ul>
-    <li>Support for using speech recognition libraries via Intent. See {@link
-android.speech.RecognizerIntent RecognizerIntent}.</li>
-  </ul>
-
-<h3>Miscellaneous API additions</h3>
-  <ul>
-    <li>LocationManager - Applications can get location change updates via
-        Intent</li>
-    <li>WebView - Touch start/end/move/cancel DOM event support</li>
-    <li>Redesigned {@link android.hardware.SensorManager Sensor Manager
-        APIs}</li>
-    <li>GLSurfaceView - convenience framework for creating OpenGL
-        applications</li>
-    <li>Broadcast Intent for app update install succeeded - for smoother app
-        upgrade experience</li>
-  </ul>
-
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
-the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API 
-Differences Report</a>.</p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-	<ul>
-	<li>Alarm Clock</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camcorder</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Custom Locale (developer app)</li>
-	<li>Dev Tools (developer app)</li>
-	</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-	<ul>
-	<li>Dialer</li>
-	<li>Email</li>
-	<li>Gallery</li>
-	<li>IME for Japanese text input</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Settings</li>
-	<li>Spare Parts (developer app)</li>
-	</ul>
-</td>
-</tr>
-</table>
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system 
-image are listed below (with <em>language</em>_<em>country/region</em> 
-locale descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-<li>Czech (cs_CZ)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>English, US (en_US)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>French, France (fr_FR)</li>
-<li>French, Belgium (fr_BE)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Polish (pl_PL)</li>
-<li>Russian (ru_RU)</li>
-<li>Spanish (es_ES)</li>
-</td>
-</tr>
-</table>
-
-<p>Localized UI strings match the locales that are accessible 
-through Settings.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use for modeling your application in different screen sizes and resolutions. The emulator skins are: </p>
-
-<ul>
-  <li>
-    QVGA-P (240x320, low density, small screen)
-  </li>
-  <li>
-    QVGA-L (320x480, low density, small screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    HVGA-P (320x480, medium density, normal screen)
-  </li>
-  <li>
-    HVGA-L (320x480, medium density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
diff --git a/docs/html/sdk/android-1.6-highlights.jd b/docs/html/sdk/android-1.6-highlights.jd
deleted file mode 100644
index f0a50fb..0000000
--- a/docs/html/sdk/android-1.6-highlights.jd
+++ /dev/null
@@ -1,213 +0,0 @@
-page.title=Android 1.6 Platform Highlights
-sdk.date=September 2009
-
-@jd:body
-
-
-<style type="text/css">
-#jd-content div.screenshot,
-#jd-content div.video {
-  float:right;
-  clear:right;
-  padding:15px 70px;
-  font-size:.9em;
-  font-weight:bold;
-  line-height:1.7em;
-}
-#jd-content div.video {
-  padding-top:0;
-  margin-top:-15px;
-}
-#jd-content div.screenshot img {
-  margin:0;
-}
-</style>
-
-<div class="video">
-<object width="278" height="180">
-<param name="movie" value="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&"></param>
-<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
-<embed src="http://www.youtube.com/v/MBRFkLKRwFw&hl=en&fs=1&" type="application/x-shockwave-flash" 
-allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
-</object>
-</div>
-
-
-<p>The Android 1.6 platform introduces new features for users and developers. 
-This page provides an overview of some new features and technologies.</p>
-
-<ul>
-  <li><a href="#UserFeatures">New User Features</a></li>
-  <li><a href="#GooglePlayUpdates">Google Play Updates</a></li>
-  <li><a href="#PlatformTechnologies">New Platform Technologies</a></li>
-</ul>
-
-
-    
-<h2 id="UserFeatures" style="clear:right">New User Features</h2>
-
-<!-- screenshots float right -->
-
-<div class="screenshot">
-<img src="images/search.png" class="screenshot" alt="" /><br/>
-Quick Search Box
-</div>
- 
-<div class="screenshot">
-<img src="images/camera.png" class="screenshot" alt="" /><br/>
-New Camera/Camcorder UI
-</div>
-
-<div class="screenshot">
-<img src="images/battery.png" class="screenshot" alt="" /><br/>
-Battery Usage Indicator
-</div>
-
-
-<h3 id="QuickSearchBox">Quick Search Box for Android</h3>
-
-<p>Android 1.6  includes a redesigned search framework that provides a quick, 
-effective, and consistent way for users to search across multiple sources&mdash;such as 
-browser bookmarks &amp; history, contacts, and the web&mdash;directly from 
-the home screen.</p>
-
-<p>The system constantly learns which search results are more relevant based on what is 
-clicked. So popular contacts or apps that have previously been picked will bubble up to 
-the top when a user types the first few letters of a relevant query.</p>
-
-<p>The search framework also provides developers a way to easily expose relevant 
-content from their applications in Quick Search Box.</p>
-
-<h3 id="Camera">Camera, Camcorder, and Gallery</h3>
-
-<p>An updated user interface provides an integrated camera, camcorder, and gallery experience. 
-Users can quickly toggle between still and video capture modes. Additionally, the gallery 
-enables users to select multiple photos for deletion.</p>
-
-<p>Android 1.6 also provides a much faster camera experience.
-Compared to the previous release, launching the camera is now 39% faster, 
-and there is a 28% improvement in the time from completing one shot to the next.</p>
-
-
-<h3 id="VPN">VPN, 802.1x</h3>
-
-<p>A new Virtual Private Network (VPN) control panel in Settings allows users 
-to configure and connect to the following types of VPNs:</p>
-
-<ul>
-  <li>L2TP/IPSEC pre-shared key based VPN</li>
-  <li>L2TP/IPsec certificate based VPN</li>
-  <li>L2TP only VPN</li>
-  <li>PPTP only VPN</li>
-</ul>
-
-
-<h3 id="Battery">Battery usage indicator</h3>
-
-<p>A new battery usage screen lets users see which apps and services are consuming 
-battery power. If the user determines that a particular service or application is 
-using too much power, they can take action to save the battery by
-adjusting settings, stopping the application, or uninstalling the application.</p>
-
-
-<h3 id="A11y">Accessibility</h3>
-
-<p>Users will be able to download new accessibility services built
-on the new accessibility framework and enable them in Settings.</p>
-
-
-
-
-<h2 id="GooglePlayUpdates" style="clear:right">Google Play Updates</h2>
-
-<div class="screenshot" style="margin-top:-35px">
-<img src="images/market.png" class="screenshot" alt="" /><br/>
-New Google Play UI
-</div>
-
-<p>For devices with Google Play, the latest version improves the overall user experience and makes
-it easier for users to discover great apps and games from developers.</p>
-
-<ul>
-  <li>At the homescreen, users can choose among <em>Apps</em>, <em>Games</em>, and <em>Downloads</em>.</li>
-  <li>Inside a category, users can explore titles that are <em>Top paid</em>, <em>Top free</em>, and <em>Just in</em>.</li>
-  <li>For each title, users can now see screenshots submitted by developers in addition to 
-  reviews from other users.</li>
-</ul>
-    
-    
-
-
-<h2 id="PlatformTechnologies" style="clear:right">New Platform Technologies</h2>
-
-<h3 id="SearchFramework">Expanded Search Framework</h3>
-
-<p>The Android search framework has been redesigned and expanded to provide
-third-party applications the opportunity to surface
-content from their applications in Quick Search Box, the global search tool. 
-To do this, developers will need to make their app "searchable" and provide 
-suggestions in response to user queries.
-To enable application search suggestions, users simply select each application from which 
-they'd like to receive suggestions, under Searchable items in the Search settings.</p>
-
-
-<h3 id="TTS">Text-to-speech engine</h3>
-
-<p>Android 1.6 features a multi-lingual speech synthesis engine called Pico. 
-It allows any Android application to "speak" a string of text with an accent that matches the language. 
-The engine supports the following languages: English (American and British accents), French, 
-Italian, German and Spanish. If you're using a T-Mobile G1 or Dream device, you'll need to download the 
-SpeechSynthesis Data Installer from Google Play, which includes the "voices" needed by the 
-text-to-speech engine.</p>
-
-
-<h3 id="Gestures">Gestures</h3>
-
-<p>A new gestures framework provides application developers with a framework for creating, storing, 
-loading, and recognizing gestures and associating them with specific actions.</p>
-
-<p>Developers can use the new GestureBuilder tool included in the Android 1.6 SDK to generate libraries 
-of gestures to include with their application.</p>
-
-
-<h3 id="A11y">Accessibility</h3>
-
-<p>Android 1.6 provides a new accessibility framework. 
-With this framework, developers can create accessibility plugins that respond to user input, 
-such as making a sound when a new window is shown, vibrating when navigating to the top of 
-a list, and providing spoken feedback.</p>
-
-
-<h3 id="Screens">Expanded support for screen densities and resolutions</h3>
-
-<p>Android 1.6 adds screen support that enables applications to be rendered properly on different 
-display resolutions and densities. Developers can also specify the types of screens supported by their 
-application.</p>
-
-
-<h3 id="CDMA">Telephony support for CDMA</h3>
-
-<p>Android 1.6 includes support for CDMA in the telephony stack.</p>
-
-
-<h3 id="OpenCore">New version of OpenCore</h3>
-
-<p>Android 1.6 includes the updated OpenCore 2 media engine, which has:</p>
-
-<ul>
-  <li>Support for OpenMAX encoders</li>
-  <li>Support for additional audio codecs in AuthorEngine</li>
-  <li>Improved buffering model supports shared buffers allocated in the decoder</li>
-</ul>
-
-<h3 id="LinuxKernel">2.6.29 Linux kernel</h3>
-
-<p>Android 1.6 upgrades the Linux kernel from 2.6.27 to 2.6.29.</p>
-
-
-<h3 id="DeveloperAPIs">New Framework APIs</h3>
-
-<p>For a detailed overview of new APIs, see the 
-<a href="{@docRoot}sdk/android-1.6.html#api-changes">Version Notes</a>. 
-For a complete report of all API changes, see the 
-<a href="{@docRoot}sdk/api_diff/4/changes.html">API Differences Report</a>.
diff --git a/docs/html/sdk/android-1.6.jd b/docs/html/sdk/android-1.6.jd
deleted file mode 100644
index a01a5f6..0000000
--- a/docs/html/sdk/android-1.6.jd
+++ /dev/null
@@ -1,505 +0,0 @@
-page.title=Android 1.6 Platform
-sdk.platform.version=1.6
-sdk.platform.apiLevel=4
-sdk.platform.majorMinor=minor
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#features">Platform Highlights</a></li>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#api">Framework API Changes</a>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-
-    </ol>
-  </li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
-deployable to Android-powered handsets since October 2009.
-The platform includes new features for users and developers, as well as changes
-in the Android framework API. </p>
-
-<p>For developers, a new release of the Android {@sdkPlatformVersion} platform
-is available as a downloadable component for the Android SDK. The platform
-&mdash; Android 1.6 r2 &mdash; includes a fully compliant Android library and
-system image, as well as a set of emulator skins, sample applications, and minor
-development updates. The downloadable platform is fully compliant (API Level 4)
-and includes no external libraries.</p>
-
-<p>To get started developing or testing against the Android
-{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the latest Android 1.6 platform into your Android 1.6 or later SDK. For
-more information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>.</p>
-
-
-<h2 id="features">Platform Highlights</h2>
-
-<p>For a list of new user features and platform highlights, see the <a
-href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Android 
-{@sdkPlatformVersion} Platform Highlights</a> document.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-  padding: .25em 1em 0em 1em;
-  margin-bottom: 0;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.6, Revision 3</a> <em>(May 2010)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r6 or higher.</p>
-</dd>
-<dt>Tools:</dt> 
-<dd>
-<ul> 
-<li>Adds support for library projects in the Ant build system.</li>
-</ul> 
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.6, Revision 2</a> <em>(December 2009)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r4 or higher.</p>
-</dd>
-
-<dt>API related:</dt> 
-<dd>
-<ul> 
-<li>Properly exposes CDMA-related constants in <code><a href="{@docRoot}reference/android/telephony/TelephonyManager.html">android.telephony.TelephonyManager</a></code>: <code>DATA_ACTIVITY_DORMANT</code>,
-<code>PHONE_TYPE_CDMA</code>, <code>NETWORK_TYPE_CDMA</code>,
-<code>NETWORK_TYPE_EVDO_0</code>, <code>NETWORK_TYPE_EVDO_A</code>, and
-<code>NETWORK_TYPE_1xRTT</code>.</li> 
-</ul> 
-</dd>
-<dt>System image:</dt> 
-<dd>
-<ul> 
-<li>Fixes bug so that Bitmap's density is now propagated through Parcelable.</li> 
-<li>Fixes NinePatchDrawable to properly scale its reported padding for compatibility mode.</li> 
-<li>Fixes TextView to properly compute styled font metrics based on the screen density.</li> 
-<li>Updates kernel to 2.6.29, to match kernel on commercially
-available Android-powered devices.</li> 
-</ul> 
-</dd>
-<dt>Tools:</dt> 
-<dd>
-<ul> 
-<li>Adds new Ant build system with support for Emma instrumentation projects
-(code coverage).</li> 
-<li>Fixes emulator skins to properly emulate d-pad in landscape mode.</li> 
-<li>Fixes density rendering in the layout editor in ADT.</li> 
-</ul> 
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-        Android 1.6, Revision 1</a> <em>(September 2009)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies</dt>
-<dd>
-<p>Requires SDK Tools r3 or higher.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
-application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
-<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
-element in your application's manifest. </p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="api">Framework API Changes</h2>
-
-<p>The sections below provide information about the application framework API provided by the Android {@sdkPlatformVersion} platform. </p>
-
-<h3 id="UIFramework">UI framework</h3>
-    <ul>
-      <li>New classes in {@link android.view.animation}
-      to control the behavior of animations:
-        <ul>
-          <li><code>AnticipateInterpolator</code></li>
-          <li><code>AnticipateOvershootInterpolator</code></li>
-          <li><code>BounceInterpolator</code></li>
-          <li><code>OvershootInterpolator</code></li>
-        </ul>
-      </li>
-      <li>New XML attribute <code>android:onClick</code> to specify a View's 
-<a href="/reference/android/view/View.OnClickListener.html">View.OnClickListener</a> 
-from a layout file.
-      </li>
-      <li>New support for dealing with varying screen densities. Density
-information is associated with Bitmap and Canvas for performing the
-correct scaling. The framework will automatically scale bitmaps and
-nine-patches based on the density the resource was found under and the
-density of the screen, etc.
-      </li><p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to 
-set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&lt;uses-sdk&gt;</code> 
-element in your application's manifest. </p>
-    </ul>
-
-<h3>Search framework</h3>
-  <ul>
-    <li>Applications can now expose relevant content to users as search
-suggestions in the Quick Search Box, a new device-wide search capability that is
-accessible from the home screen. To support this, the search framework adds new
-attributes to the searchable metadata file. For complete information, see the
-{@link android.app.SearchManager SearchManager} documentation.
-    </li>
-  </ul>
-
-<h3>Accessibility framework</h3>
-  <ul>
-    <li>New {@link android.view.accessibility android.accessibility} package
-that includes classes for capturing accessibility events and forwarding them to
-an {@link android.accessibilityservice AccessibilityService} handler. </li>
-    <li>New {@link android.accessibilityservice AccessibilityService} package
-that lets your application track user events and provide visual, audible, or
-haptic feedback to the user. </li>
-  </ul>
-
-<h3>Gesture input</h3>
-  <ul>
-    <li>New {@link android.gesture gesture} API for creating, recognizing,
-loading, and saving gestures.</li>
-  </ul>
-
-<h3>Text-to-speech</h3>
-  <ul>
-    <li>New {@link android.speech.tts android.speech.tts} package provides
-classes for synthesizing speech from text, for immediate playback or to create a
-sound file.</li>
-  </ul>
-
-<h3>Graphics</h3>
-  <ul>
-    <li>Classes in {@link android.graphics android.graphics} now support scaling
-for different screen densities.</li>
-  </ul>
-
-<h3>Telephony</h3>
-  <ul>
-    <li>New {@link android.telephony.SmsManager SmsManager} and other classes
-for sending and receiving SMS messages.</li>
-  </ul>
-
-<h3>Utilities</h3>
-  <ul>
-    <li>New {@link android.util.DisplayMetrics DisplayMetrics} fields for
-determining the density of the current device screen.</li>
-  </ul>
-
-<h3 id="AndroidManifest">Android Manifest elements</h3>
-
-    <ul>
-      <li>New <a href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code 
-      &lt;supports-screens>}</a> element lets you specify the device screen sizes that your 
-      application is designed and tested to support, where "size" is a combination
-      of resolution and density. If your application is run on a device whose screen 
-      size is not specified in the <code>&lt;supports-screen&gt;</code> element, the system 
-      displays the application in <em>compatibility mode</em>, which performs best-effort scaling
-      of the application UI to match the resolution and density of the screen. 
-
-    <p>The attributes available for defining an application's screen support are:
-
-        <ul>
-
-          <li><code>smallScreen</code>: Boolean value that indicates whether the
-            application is designed to run on devices with small screens. 
-            Examples: QVGA low density; VGA high density.
-          </li>
-          <li><code>normalScreens</code>: Boolean value that indicates whether 
-            the application is designed to run on devices with normal screens. 
-            Examples: WQVGA low density; HVGA medium density; WVGA high density.
-          </li>
-          <li><code>largeScreens</code>: Boolean value that indicates whether 
-            the application is designed to run on devices with significantly 
-            larger screens, such that special care may be required on
-            the application's part to make proper use of the screen area. 
-            Examples: VGA medium density; WVGA medium density.
-          </li>
-          <li><code>anyDensity</code>: Boolean value that indicates whether 
-            the application can accommodate any screen density.
-          </li>
-          <li><code>resizable</code>: Boolean value that indicates whether
-            the application can expand its layout to fit slightly larger screens.
-          </li>
-        </ul>
-    </p>
-    </li>
-
-      <li>New <a href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature>}</a>
-        element lets an application specify hardware (or other)
-        features that it requires to function normally. When an application
-        specifies such features, the system allows the application to be installed only
-        on devices that offer the required features. The element supports these
-        attributes:
-        <ul>
-          <li><code>name</code>: The name of the feature required by the application. Currently accepts 
-          "android.hardware.camera" and "android.hardware.camera.autofocus" values, which specify that a 
-          camera and camera autofocus are required, respectively.</li>
-          <li><code>glEsVersion</code>: Indicates the minimum version of OpenGL ES required.</li>
-        </ul>
-      </li>
-      <li>New attributes for the 
-      <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk>}</a> element:
-        <ul>
-          <li><code>targetSdkVersion</code>: Indicates the API Level that the application is targeting. 
-          It is able to run on older versions (down to minSdkVersion), but was explicitly tested to 
-          work with the version specified here. Specifying this version allows the platform to 
-          disable compatibility code that is not required or enable newer features that are not 
-          available to older applications. </li>
-          <li><code>maxSdkVersion</code>: Indicates the maximum API Level on which an application is 
-          designed to run. <strong>Important:</strong> Please read the <a
-          href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
-          documentation before using this attribute. </li>
-        </ul>
-      </li>
-
-      </li>
-    </ul>
-
-<h3>New permissions</h3>
-
-    <ul>
-      <li>{@link android.Manifest.permission#CHANGE_WIFI_MULTICAST_STATE
-          CHANGE_WIFI_MULTICAST_STATE}: Allows applications to enter Wi-Fi 
-          Multicast mode.
-      </li>
-      <li>{@link android.Manifest.permission#GLOBAL_SEARCH}: Allows the 
-          global search system to access the data of a specified content provider.
-      </li> 
-      <li>{@link android.Manifest.permission#INSTALL_LOCATION_PROVIDER INSTALL_LOCATION_PROVIDER}: 
-          Allows an application to install a location provider into the Location Manager.
-      </li>
-      <li>{@link android.Manifest.permission#READ_HISTORY_BOOKMARKS READ_HISTORY_BOOKMARKS}: 
-          Allows an application to read (but not write) the user's browsing history 
-          and bookmarks.
-      </li>
-      <li>{@link android.Manifest.permission#WRITE_HISTORY_BOOKMARKS WRITE_HISTORY_BOOKMARKS}: 
-          Allows an application to write (but not read) the user's browsing history 
-          and bookmarks.
-      </li>
-      <li>{@link android.Manifest.permission#WRITE_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE}: 
-          Allows an application to write to external storage. Applications using API Level 3
-          and lower will be implicitly granted this permission (and this will be visible to 
-          the user); Applications using API Level 4 or higher must explicitly request this 
-          permission.
-      </li>
-    </ul>
-
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
-the previous version, see the <a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API 
-Differences Report</a>.</p>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-	<ul>
-	<li>Alarm Clock</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camcorder</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Custom Locale (developer app)</li>
-	<li>Dev Tools (developer app)</li>
-	<li>Dialer</li>
-	</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-	<ul>
-	<li>Email</li>
-	<li>Gallery</li>
-	<li>Gestures Builder</li>
-	<li>IME for Japanese text input</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Settings</li>
-	<li>Spare Parts (developer app)</li>
-	</ul>
-</td>
-</tr>
-</table>
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system 
-image are listed below (with <em>language</em>_<em>country/region</em> 
-locale descriptor).</p>
-
-<table style="border:0;margin-bottom:0;padding-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-<li>Czech (cs_CZ)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>English, US (en_US)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>French, France (fr_FR)</li>
-<li>French, Belgium (fr_BE)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Polish (pl_PL)</li>
-<li>Russian (ru_RU)</li>
-<li>Spanish (es_ES)</li>
-</td>
-</tr>
-</table>
-
-<p>Localized UI strings match the locales that are accessible 
-through Settings.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can 
-use for modeling your application in different screen sizes and resolutions. 
-The emulator skins are: </p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
diff --git a/docs/html/sdk/android-2.0-highlights.jd b/docs/html/sdk/android-2.0-highlights.jd
deleted file mode 100644
index d4d13fc..0000000
--- a/docs/html/sdk/android-2.0-highlights.jd
+++ /dev/null
@@ -1,201 +0,0 @@
-page.title=Android 2.0 Platform Highlights
-sdk.date=October 2009
-
-@jd:body
-
-
-<style type="text/css">
-#jd-content div.screenshot,
-#jd-content div.video {
-  float:right;
-  clear:right;
-  padding:15px 60px;
-  font-size:.9em;
-  font-weight:bold;
-  line-height:1.7em;
-}
-#jd-content div.video {
-  padding-top:0;
-  margin-top:-15px;
-}
-#jd-content div.screenshot.second {
-  clear:none;
-  padding:15px 0 15px 60px;
-}
-#jd-content div.screenshot img {
-  margin:0;
-  border:1px solid #ccc;
-}
-</style>
-
-<div class="video">
-<object width="278 height="180">
-<param name="movie" value="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&"></param>
-<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param>
-<embed src="http://www.youtube.com/v/opZ69P-0Jbc&hl=en&fs=1&" type="application/x-shockwave-flash" 
-allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
-</object>
-</div>
-
-
-<p>The Android 2.0 platform introduces many new and exciting features for
-users and developers. This document provides a glimpse at some of the new features
-and technologies in Android 2.0.</p>
-
-<ul>
-  <li><a href="#UserFeatures">New User Features</a></li>
-  <li><a href="#PlatformTechnologies">New Platform Technologies</a></li>
-</ul>
-
-
-    
-<h2 id="UserFeatures" style="clear:right">New User Features</h2>
-
-<!-- screenshots float right -->
-
-<div class="screenshot">
-  <img src="images/2.0/quick-connect.png" class="screenshot" alt="" /><br/>
-  Quick Contact for Android
-</div>
-
-<div class="screenshot second">
-  <img src="images/2.0/multiple-accounts.png" class="screenshot" alt="" /><br/>
-  Multiple Accounts
-</div>
-
-<div class="screenshot">
-  <img src="images/2.0/mms-search.png" class="screenshot" alt="" /><br/>
-  Messaging Search
-</div>
-
-<div class="screenshot second">
-  <img src="images/2.0/email-inbox.png" class="screenshot" alt="" /><br/>
-  Email Combined Inbox
-</div>
-
-<div class="screenshot">
-  <img src="images/2.0/camera-modes.png" class="screenshot" alt="" /><br/>
-  Camera Modes
-</div>
-
-
-
-<h3 id="Contacts">Contacts and accounts</h3>
-
-<ul>
-  <li>Multiple accounts can be added to a device for email and contact
-synchronization, including Exchange accounts. (Handset manufacturers can
-choose whether to include Exchange support in their devices.)</li>
-  <li>Developers can create sync adapters that provide synchronization with
-additional data sources.</li>
-  <li>Quick Contact for Android provides instant access to
-a contact's information and communication modes. For example, a user can tap a
-contact photo and select to call, SMS, or email the person. Other applications
-such as Email, Messaging, and Calendar can also reveal the Quick Contact widget
-when you touch a contact photo or status icon.</li>
-</ul>
-
-
-<!--
-<ul>
-  <li>Sync support for contacts from multiple data sources including Exchange. 
-  Handset manufacturers can choose whether or not to include Exchange support 
-  in their devices.</li>
-  <li>New way to hover on a person to see more info and select communication 
-  mode (for example, phone, SMS, email).</li>
-</ul>
--->
-
-<h3 id="Email">Email</h3>
-
-<ul>
-  <li>Exchange support.</li>
-  <li>Combined inbox to browse email from multiple accounts in one page.</li>
-</ul>
-
-
-<h3 id="Messaging">Messaging</h3>
-
-<ul>
-  <li>Search functionality for all saved SMS and MMS messages.</li>
-  <li>Auto delete the oldest messages
-  in a conversation when a defined limit is reached.</li>
-</ul>
-
-
-<h3 id="Camera">Camera</h3>
-
-<ul>
-  <li>Built-in flash support</li>
-  <li>Digital zoom</li>
-  <li>Scene mode</li>
-  <li>White balance</li>
-  <li>Color effect</li>
-  <li>Macro focus</li>
-</ul>
-
-<h3 id="Keyboard">Android virtual keyboard</h3>
-
-<ul>
-  <li>An improved keyboard layout to makes it easier to hit the correct characters
-  and improve typing speed.</li>
-  <li>The framework's multi-touch support ensures that key presses aren't missed
-  while typing rapidly with two fingers.</li>
-  <li>A smarter dictionary learns from word usage and automatically includes
-  contact names as suggestions.</li>
-</ul>
-
-
-<h3 id="Browser">Browser</h3>
-
-<ul>
-  <li>Refreshed UI with actionable browser URL bar enables users to directly 
-  tap the address bar for instant searches and navigation.</li>
-  <li>Bookmarks with web page thumbnails.</li>
-  <li>Support for double-tap zoom.</li>
-  <li>Support for HTML5:</p>
-    <ul>
-      <li>Database API support, for client-side databases using SQL.</li>
-      <li>Application cache support, for offline applications.</li>
-      <li>Geolocation API support, to provide location information about the device.</li>
-      <li>{@code &lt;video>} tag support in fullscreen mode.</li>
-    </ul>
-  </li>
-</ul>
-
-
-<h3 id="Calendar">Calendar</h3>
-<ul>
-  <li>Agenda view provides infinite scrolling.</li>
-  <li>Events indicate the attending status for each invitee.</li>
-  <li>Invite new guests to events.</li>
-</ul>
-
-
-<h2 id="PlatformTechnologies" style="clear:right">New Platform Technologies</h2>
-
-<h3 id="MediaFramework">Media Framework</h3>
-
-<p>Revamped graphics architecture for improved performance that enables better
-hardware acceleration.</p>
-
-
-<h3 id="Bluetooth">Bluetooth</h3>
-
-<ul>
-  <li>Bluetooth 2.1</li>
-  <li>New BT profiles: Object Push Profile (OPP) and Phone Book Access Profile (PBAP)</li>
-</ul>
-
-
-<h3 id="DeveloperAPIs">New Framework APIs</h3>
-
-<p>Android 2.0 includes several new developer APIs.
-For an overview of new APIs, see the 
-<a href="{@docRoot}sdk/android-2.0.html#api">Android 2.0 version notes</a>.</p>
-
-<p>For a complete report of all API changes, see the 
-<a href="{@docRoot}sdk/api_diff/5/changes.html">API Differences Report</a>.</p>
-
-
-
diff --git a/docs/html/sdk/android-2.0.1.jd b/docs/html/sdk/android-2.0.1.jd
deleted file mode 100644
index 0c8afb6..0000000
--- a/docs/html/sdk/android-2.0.1.jd
+++ /dev/null
@@ -1,361 +0,0 @@
-page.title=Android 2.0.1, Release 1
-sdk.platform.version=2.0.1
-sdk.platform.apiLevel=6
-sdk.platform.majorMinor=minor
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-	<li><a href="#features">Platform Highlights</a></li>
-	<li><a href="#relnotes">Revisions</a></li>
-	<li><a href="#apps">Built-in Applications</a></li>
-	<li><a href="#locs">Locales</a></li>
-	<li><a href="#skins">Emulator Skins</a></li>
-	<li><a href="#dev-features">Developer Features</a></li>
-	<li><a href="#api">Framework API</a>
-    <ol>
-      <li><a href="#api-level">API level</a></li>
-      <li><a href="#api-changes">API changes summary</a></li>
-      <li><a href="#behavior-changes">Behavior changes</a></li>
-      <li><a href="#bug-fixes">Bug fixes</a></li>
-      <li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-differences report &raquo;</a> </li>
-    </ol>
-  </li>
-  </ol>
-
-  <h2>See Also</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>
-
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
-deployable to Android-powered handsets starting in December 2009.
-This release includes minor API
-changes, bug fixes and framework behavioral changes. For information on changes
-and fixes, see the <a href="#api">Framework API</a> section.</p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes a
-fully compliant Android library and system image, as well as a set of emulator
-skins, sample applications, and more. The downloadable platform
-includes no external libraries. </p>
-
-<p>To get started developing or testing against the Android
-{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your Android 1.6 or later SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>.</p>
-
-
-<h2 id="features">Platform Highlights</h2>
-
-<p>For a list of new user features and platform highlights, see the <a
-href="http://developer.android.com/sdk/android-2.0-highlights.html">Android
-2.0 Platform Highlights</a> document.</p>
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-padding: .25em 1em;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-        Android 2.0.1, Revision 1</a> <em>(December 2009)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r4 or higher.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-	<ul>
-	<li>Alarm Clock</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camcorder</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Custom Locale (developer app)</li>
-	<li>Dev Tools (developer app)</li>
-	<li>Dialer</li>
-	</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-	<ul>
-	<li>Email</li>
-	<li>Gallery</li>
-	<li>Gestures Builder</li>
-	<li>IME for Japanese text input</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Settings</li>
-	<li>Spare Parts (developer app)</li>
-	</ul>
-</td>
-</tr>
-</table>
-
-<p><span class="new">New with 2.0.1</span> The Dev Tools app now
-includes a "Sync Tester" application to provide quick and easy testing of
-third-party sync adapters.</p>
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system 
-image are listed below (with <em>language</em>_<em>country/region</em> locale 
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-<li>Czech (cs_CZ)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>English, US (en_US)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>French, France (fr_FR)</li>
-<li>French, Belgium (fr_BE)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Polish (pl_PL)</li>
-<li>Russian (ru_RU)</li>
-<li>Spanish (es_ES)</li>
-</td>
-</tr>
-</table>
-
-<p>Localized UI strings match the locales that are accessible 
-through Settings.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use for modeling your application in different screen sizes and resolutions. The emulator skins are: </p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA (240x400, low density, normal screen)
-  </li>
-  <li>
-    FWQVGA (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
-
-<h2 id="dev-features">Developer Features</h2>
-
-<p>The sections below provide information about new developer features offered by the downloadable Android 2.0 platform component.</p>
-
-<h3 id="ant">Ant Support</h3>
-
-<ul>
-<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}guide/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
-
-<li>Adds new Ant build system with support for Emma instrumentation projects (code coverage).</li>
-</ul>
-
-<h2 id="api">Framework API</h2>
-
-<p>The sections below provide information about changes made to the application
-framework API provided by the Android {@sdkPlatformVersion} platform. Note,
-however, that Android 2.0.1 is a minor release to Android 2.0, so for more
-information about the changes made to in Android 2.0, please refer to the
-<a href="{@docRoot}sdk/android-2.0.html#api">Android 2.0 version notes</a>.</p>
-
-
-<h3 id="api-level">API level</h3>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework
-API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash; <strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to 
-set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&lt;uses-sdk&gt;</code> 
-element in your application's manifest. </p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h3 id="api-changes">API changes summary</h3>
-
-<p>The following is a summary of changes to the framework APIs.</p>
-
-<ul>
-<li>New {@code quickContactBadgeStyle*} attributes that let
-applications apply necessary styles to the {@link
-android.widget.QuickContactBadge} widget.</li>
-
-<li>Remove support for the {@link
-android.content.Intent#ACTION_CONFIGURATION_CHANGED} broadcast when declared as
-a filter in the manifest. To receive this broadcast, an application must
-do so from the application at run-time, with {@link
-android.content.Context#registerReceiver(BroadcastReceiver, IntentFilter)}.</li>
-</ul>
-
-<h3 id="behavior-changes">Behavior changes</h3>
-
-<p>The following is a summary of changes that affect the behavior of some
-framework APIs but do not add or remove API functionality.</p>
-
-<h4>Bluetooth</h4>
-
-<p>Changes to the values returned by {@link
-android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} and
-{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE}:</p>
-
-<ul>
-<li>{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_ENABLE} now
-returns {@link android.app.Activity#RESULT_OK} if Bluetooth was successfully
-enabled and {@link android.app.Activity#RESULT_CANCELED} if the user rejected
-the request to enable Bluetooth, rather than 0 and -1 (or -2),
-respectively.</li>
-
-<li>{@link android.bluetooth.BluetoothAdapter#ACTION_REQUEST_DISCOVERABLE}
-now returns {@link android.app.Activity#RESULT_CANCELED} if the user rejected
-the request to enable discoverability or if Bluetooth is not enabled, rather
-than -1 and -2, respectively.</li>
-</ul>
-
-<h4>Contacts</h4>
-
-<p>The {@link android.content.Intent#ACTION_INSERT} Intent now returns {@link
-android.app.Activity#RESULT_CANCELED} in cases where the contact was not
-persisted (for example, if the save was trimmed to a no-op).</p>
-
-
-<h3 id="bug-fixes">Bug fixes</h3>
-
-<p>The following is a summary of bug fixes that affect some framework APIs.</p>
-
-<h4>Resources</h4>
-
-<p>The framework now correctly selects application resources in project
-folders that use the API Level qualifier. For example, {@code drawable-v4/} is a
-folder of drawable resources for API Level 4 (or higher) devices. This version
-matching did not work properly and has been fixed.</p>
-
-<h4>Contacts</h4>
-
-<p>The {@link android.content.Intent#ACTION_INSERT} Intent now returns the
-appropriate kind of URI when the request is made using the (now
-deprecated) {@link android.provider.Contacts} APIs.</p>
-
-<h4>Other Framework fixes</h4>
-
-<ul>
-<li>{@link android.app.Activity#getCallingPackage()} now properly reports the
-package name, rather than the process name.</li>
-</ul>
-
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
-API Level 5, see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>. There are very few API changes in API Level 6, 
-so you might also be interested in reviewing the <a
-href="{@docRoot}sdk/api_diff/5/changes.html">API
-differences between 4 and 5</a>.</p>
-
diff --git a/docs/html/sdk/android-2.0.jd b/docs/html/sdk/android-2.0.jd
deleted file mode 100644
index 2c31923..0000000
--- a/docs/html/sdk/android-2.0.jd
+++ /dev/null
@@ -1,384 +0,0 @@
-page.title=Android 2.0, Release 1
-sdk.platform.version=2.0
-sdk.platform.apiLevel=5
-sdk.platform.majorMinor=major
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-	<li><a href="#features">Platform Highlights</a></li>
-	<li><a href="#relnotes">Revisions</a></li>
-	<li><a href="#apps">Built-in Applications</a></li>
-	<li><a href="#locs">Locales</a></li>
-	<li><a href="#skins">Emulator Skins</a></li>
-	<li><a href="#dev-features">Developer Features</a></li>
-	<li><a href="#api">Framework API</a>
-        <ol>
-	<li><a href="#api-level">API level</a></li>
-	<li><a href="#api-changes">API changes summary</a></li>
-	<li><a href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API differences report &raquo;</a> </li>
-        </ol></li>
-  </ol>
-
-  <h2>See Also</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
-deployable to Android-powered handsets starting in November 2009.
-The release includes new features for users and developers, as well as changes
-in the Android framework API. </p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes a
-fully compliant Android library and system image, as well as a set of emulator
-skins, sample applications, and more. The downloadable platform is fully
-compliant and includes no external libraries. </p>
-
-<p>To get started developing or testing against the Android
-{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>.</p>
-
-
-<h2 id="features">Platform Highlights</h2>
-
-<p>For a list of new user features and platform highlights, see the <a
-href="http://developer.android.com/sdk/android-{@sdkPlatformVersion}-highlights.html">Android 
-{@sdkPlatformVersion} Platform Highlights</a> document.</p>
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-padding: .25em 1em;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
-        Android 2.0, Revision 1</a> <em>(October 2009)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r3 or higher.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-	<ul>
-	<li>Alarm Clock</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camcorder</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Custom Locale (developer app)</li>
-	<li>Dev Tools (developer app)</li>
-	<li>Dialer</li>
-	</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-	<ul>
-	<li>Email</li>
-	<li>Gallery</li>
-	<li>Gestures Builder</li>
-	<li>IME for Japanese text input</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Settings</li>
-	<li>Spare Parts (developer app)</li>
-	</ul>
-</td>
-</tr>
-</table>
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system 
-image are listed below (with <em>language</em>_<em>country/region</em> locale 
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-<li>Czech (cs_CZ)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>English, US (en_US)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>French, France (fr_FR)</li>
-<li>French, Belgium (fr_BE)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Polish (pl_PL)</li>
-<li>Russian (ru_RU)</li>
-<li>Spanish (es_ES)</li>
-</td>
-</tr>
-</table>
-
-<p>Localized UI strings match the locales that are accessible 
-through Settings.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use for modeling your application in different screen sizes and resolutions. The emulator skins are: </p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA (240x400, low density, normal screen)
-  </li>
-  <li>
-    FWQVGA (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays and functions properly on all Android-powered devices, see <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.</p>
-
-<h2 id="dev-features">Developer Features</h2>
-
-<p>The sections below provide information about new developer features offered by the downloadable Android 2.0 platform component.</p>
-
-<h3 id="ant">Ant Support</h3>
-
-<ul>
-<li>Debug- and release-mode application signing. Release-mode signing includes integrated support for <code>zipalign</code> optimization. For more information, see <a href="{@docRoot}guide/publishing/app-signing.html#releasecompile">Signing Your Applications</a>.</li>
-
-<li>Adds new Ant build system with support for Emma instrumentation projects (code coverage).</li>
-</ul>
-
-<h2 id="api">Framework API</h2>
-
-<p>The sections below provide information about the application framework API provided by the Android {@sdkPlatformVersion} platform. </p>
-
-
-<h3 id="api-level">API level</h3>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of the framework
-API. As with previous versions, the Android {@sdkPlatformVersion} API 
-is assigned an integer identifier &mdash; <strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need to 
-set the proper value, "{@sdkPlatformApiLevel}", in the attributes of the <code>&lt;uses-sdk&gt;</code> 
-element in your application's manifest. </p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h3 id="api-changes">API changes summary</h3>
-
-<h4>Bluetooth</h4>
-<ul>
-<li>Turn on/off Bluetooth</li>
-<li>Device and service discovery</li>
-<li>Connect to a remote device using RFCOMM and send/receive data</li>
-<li>Advertise RFCOMM services and listen for incoming RFCOMM connection</li>
-</ul>
-
-<h4>Sync adapters </h4>
-<ul>
-<li>New APIs for sync adapters to connect to any backend</li>
-</ul>
-
-<h4>Account Manager</h4>
-<ul>
-<li>Centralized account manager API to securely store and access auth tokens/passwords </li>
-</ul>
-
-<h4>Contacts</h4>
-<ul>
-<li>New contacts APIs that allow for data from multiple accounts</li>
-<li>New Quick Contact framework APIs enable developers to create contact badges in their app. Clicking on the badge opens a window with a list of ways to contact the person with one click.</li>
-</ul>
-
-<h4>WebView</h4>
-<ul>
-<li>Deprecated classes: UrlInterceptHandler, Plugin, PluginData, PluginList, UrlInterceptRegistry.</li>
-</ul>
-
-<h4>Camera</h4>
-<ul>
-<li>New parameters for color effect, scene mode, flash mode, focus mode, white balance, rotation, and other settings.</li>
-<li>New ZoomCallback interface to perform actions when the zoom level has changed.</li>
-</ul>
-
-<h4>Media</h4>
-<ul>
-<li>MediaScanner now generates thumbnails for all images when they are inserted into MediaStore.</li>
-<li>New Thumbnail API for retrieving image and video thumbnails on demand.</li>
-</ul>
-
-<h4>Other Framework</h4>
-<ul>
-<li>New system themes in android.R.style to easily display activities on top of the current system wallpaper or keep the previous activity visible in the background. </li>
-<li>New WallpaperManager API replaces and extends the wallpaper APIs that were previously in Context, to allow applications to request and set the system wallpaper.</li>
-<li>New Service APIs to help applications correctly handle Service life-cycle, in particular low memory situations where a Service may be killed while it is running.
-  <ul>
-  <li>Service.setForeground() has been deprecated and now effectively performs no operation. This is replaced with a new API, startForeground(), that helps (and requires) associating an ongoing notification with the foreground state.</li>
-  </ul>
-</li>
-<li>MotionEvent can now report simultaneous-touch information for devices that support it. Up to three pointers can be tracked simultaneously. </li>
-<li>KeyEvent has new key dispatching APIs, to help implement action-on-up and long press behavior, as well a new mechanism to cancel key presses (for virtual keys).</li>
-<li>WindowManager.LayoutParams has new constants that allow a window to wake up the screen when it is displayed and show the window even if the screen is locked. This allows applications to more cleanly implement things like alarm clocks that should wake the device.</li>
-<li>New Intent APIs that broadcast the docking state of the device and allow applications to launch special activities when the device is placed in a desktop or car dock.</li>
-</ul>
-
-<h4>Key events executed on key-up</h4>
-
-<p>Android 2.0 is designed to run on devices that use virtual keys for HOME,
-MENU, BACK, and SEARCH, rather than physical keys. To support the best user
-experience on those devices, the Android platform now executes these buttons at
-key-up, for a key-down/key-up pair, rather than key-down. This helps prevent 
-accidental button events and lets the user press the button area and then drag 
-out of it without generating an event. </p>
-
-<p>This change in behavior should only affect your application if it is
-intercepting button events and taking an action on key-down, rather than on
-key-up. Especially if your application is intercepting the BACK key, you should
-make sure that your application is handling the key events properly. </p>
-
-<p>In general, intercepting the BACK key in an application is not recommended,
-however, if your application is doing so and it invokes some action on
-key-down, rather than key-up, you should modify your code. </p>
-
-<p>If your application will use APIs introduced in Android 2.0 (API Level 5), 
-you can take advantage of new APIs for managing key-event pairs:</p>
-
-<ul>
-<li>If you are intercepting the BACK key in an activity or dialog, just
-implement the new {@link android.app.Activity#onBackPressed()} method. </li>
-<li>If you are intercepting the BACK key in a view, you should track the key
-event on key-down (through the new {@link android.view.KeyEvent#startTracking}
-method), then invoke the action at key up. Here's a pattern you can use:</li>
-
-<pre>    public boolean onKeyDown(int keyCode, KeyEvent event) {
-        if (keyCode == KeyEvent.KEYCODE_BACK
-                && event.getRepeatCount() == 0) {
-            event.startTracking();
-            return true;
-        }
-        return super.onKeyDown(keyCode, event);
-    }
-
-    public boolean onKeyUp(int keyCode, KeyEvent event) {
-        if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
-                && !event.isCanceled()) {
-            // *** DO ACTION HERE ***
-            return true;
-        }
-        return super.onKeyUp(keyCode, event);
-    }</pre>
-
-</ul>
-
-<p>If you want to update a legacy application so that its handling of the BACK
-key works properly for both Android 2.0 and older platform versions, you 
-can use an approach similar to that shown above. Your code can catch the
-target button event on key-down, set a flag to track the key event, and 
-then also catch the event on key-up, executing the desired action if the tracking 
-flag is set. You'll also want to watch for focus changes and clear the tracking 
-flag when gaining/losing focus.</p>
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of API changes in Android {@sdkPlatformVersion} (API Level {@sdkPlatformApiLevel}), as compared to 
-the previous version, see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
-
diff --git a/docs/html/sdk/android-2.1.jd b/docs/html/sdk/android-2.1.jd
deleted file mode 100644
index 1ee833c..0000000
--- a/docs/html/sdk/android-2.1.jd
+++ /dev/null
@@ -1,373 +0,0 @@
-page.title=Android 2.1 Platform
-sdk.platform.version=2.1
-sdk.platform.apiLevel=7
-sdk.platform.majorMinor=minor
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#features">Platform Highlights</a></li>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#api">Framework API Changes</a>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-
-    </ol>
-  </li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release
-deployable to Android-powered handsets starting in January 2010.
-This release includes new API
-changes and bug fixes. For information on changes, see the <a href="#api">Framework API</a>
-section.</p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes a
-fully compliant Android library and system image, as well as a set of emulator
-skins, sample applications, and more. The downloadable platform
-includes no external libraries. </p>
-
-<p>To get started developing or testing against the Android
-{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>.</p>
-
-
-<h2 id="features">Platform Highlights</h2>
-
-<p>Android {@sdkPlatformVersion} does not add significant user features, see the <a
-href="http://developer.android.com/sdk/android-2.0-highlights.html">Android
-2.0 Platform Highlights</a> document for the latest user features.</p>
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
-higher.</p>
-</dd>
-<dt>Notes:</dt>
-<dd>
-<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
-Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
-bugs in the previous rendering library. It also unlocks several editor features that were added in
-ADT 12.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 2</a> <em>(May 2010)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r6 or higher.</p>
-</dd>
-
-<dt>Tools:</dt>
-<dd>
-<ul> 
-<li>Adds support for library projects in the Ant build system.</li>
-<li>Adds improved layout rendering in ADT’s visual layout editor.</li>
-</ul> 
-</dd>
-
-</dl>
- </div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 1</a> <em>(January 2010)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r4 or higher.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
-application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
-<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
-element in your application's manifest. </p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="api">Framework API Changes</h2>
-
-<p>The sections below provide information about changes made to the application
-framework API provided by the Android {@sdkPlatformVersion} platform.</p>
-
-<h3>Live Wallpapers</h3>
-
-<p>The following additions provide APIs for you to develop animated wallpapers:</p>
-<ul>
-<li>New {@link android.service.wallpaper} package.</li>
-<li>New {@link android.app.WallpaperInfo} class.</li>
-<li>Updated {@link android.app.WallpaperManager}.</li>
-</ul>
-
-<p>Additionally, if your application uses or provides Live Wallpapers, you must
-remember to add a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature></code></a>
- element to the application's manifest, declaring the attribute
-<code>android:name="android.software.live_wallpaper"</code>. For example:</p>
-
-<pre class="no-pretty-print">
-&lt;uses-feature android:name="android.software.live_wallpaper" />
-</pre>
-
-<p>When you've published your application, Google Play checks for the
-presence of this element and uses it as a filter, ensuring that your application
-is not made available to users whose devices do not support Live Wallpapers.
-</p>
-
-<h3>Telephony</h3>
-
-<ul>
-<li>New {@link android.telephony.SignalStrength} class provides information
-about the device's current network signal. This can be acquired from the
-new {@link
-android.telephony.PhoneStateListener#onSignalStrengthsChanged(SignalStrength)}
-callback.</li>
-
-<li>New {@link
-android.telephony.PhoneStateListener#onDataConnectionStateChanged(int,int)}
-callback.</li>
-</ul>
-
-<h3>Views</h3>
-
-<ul>
-<li>New {@link android.view.View} methods {@link android.view.View#isOpaque()}
-and {@link android.view.View#onDrawScrollBars(Canvas)}.</li>
-
-<li>New {@link android.widget.RemoteViews} methods {@link
-android.widget.RemoteViews#addView(int,RemoteViews)} and {@link
-android.widget.RemoteViews#removeAllViews(int)}.</li>
-
-<li>New {@link android.view.ViewGroup} methods {@link
-android.view.ViewGroup#isChildrenDrawingOrderEnabled()} and {@link
-android.view.ViewGroup#setChildrenDrawingOrderEnabled(boolean)}.</li>
-</ul>
-
-<h3>WebKit</h3>
-
-<ul>
-<li>New {@link android.webkit.WebStorage} methods to manipulate web
-storage databases.</li>
-
-<li>New {@link android.webkit.GeolocationPermissions} methods to
-get Geolocation permissions from, and set them on the WebView.</li>
-
-<li>New {@link android.webkit.WebSettings} methods to manage settings for
-app cache, web storage, and zooming based on screen density.</li>
-
-<li>New {@link android.webkit.WebChromeClient} methods for handling video,
-browsing history, custom Views, app cache limits, and more.</li>
-</ul>
-
-</ul>
-
-<!--
-<h3 id="behavior-changes">Behavior changes</h3>
-
-<h3 id="bug-fixes">Bug fixes</h3>
--->
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
-Level {@sdkPlatformApiLevel}), as compared to API Level 6, see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>.</p>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-	<ul>
-	<li>Alarm Clock</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Custom Locale (developer app)</li>
-	<li>Dev Tools (developer app)</li>
-    <li>Email</li>
-	</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-	<ul>
-
-	<li>Gallery</li>
-	<li>IMEs for Japanese, Chinese, and Latin text input</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Phone</li>
-	<li>Settings</li>
-	<li>Spare Parts (developer app)</li>
-	</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-<li>Czech (cs_CZ)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>English, US (en_US)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>French, France (fr_FR)</li>
-<li>French, Belgium (fr_BE)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Polish (pl_PL)</li>
-<li>Russian (ru_RU)</li>
-<li>Spanish (es_ES)</li>
-</td>
-</tr>
-</table>
-
-<p>Localized UI strings match the locales that are accessible
-through Settings.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use
-for modeling your application in different screen sizes and resolutions. The
-emulator skins are:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA (240x400, low density, normal screen)
-  </li>
-  <li>
-    FWQVGA (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
diff --git a/docs/html/sdk/android-2.2.jd b/docs/html/sdk/android-2.2.jd
deleted file mode 100644
index c22220c..0000000
--- a/docs/html/sdk/android-2.2.jd
+++ /dev/null
@@ -1,470 +0,0 @@
-page.title=Android 2.2 Platform
-sdk.platform.version=2.2
-sdk.platform.apiLevel=8
-sdk.platform.majorMinor=minor
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#features">Platform Highlights</a></li>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#api">Framework API Changes</a>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-
-    </ol>
-  </li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is a {@sdkPlatformMajorMinor} platform release including user
-features, developer features, API changes, and bug
-fixes. For  information on developer features and API changes, see the
-<a href="#api">Framework API</a> section.</p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes a
-fully compliant Android library and system image, as well as a set of emulator
-skins, sample applications, and more. The downloadable platform
-includes no external libraries. </p>
-
-<p>To get started developing or testing against the Android
-{@sdkPlatformVersion} platform, use the Android SDK and AVD Manager tool to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
-first.</p>
-
-
-<h2 id="features">Platform Highlights</h2>
-
-<p>For a list of new user features and platform highlights, see the <a
-href="http://developer.android.com/sdk/android-2.2-highlights.html">Android
-2.2 Platform Highlights</a> document.</p>
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
-higher.</p>
-</dd>
-<dt>Notes:</dt>
-<dd>
-<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
-Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
-bugs in the previous rendering library. It also unlocks several editor features that were added in
-ADT 12.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2010)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r6 or higher.</p>
-</dd>
-
-<dt>System Image:</dt>
-<dd>
-<ul>
-<li>Adds default Search Widget.</li>
-<li>Includes proper provisioning for the platform's Backup Manager. For more information about how to use the Backup Manager, see <a href="{@docRoot}guide/topics/data/backup.html">Data Backup</a>.</li>
-<li>Updates the Android 2.2 system image to FRF91.</li>
-</ul>
-</dd>
-
-</dl>
- </div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2010)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r6 or higher.</p>
-</dd>
-
-<dt>Tools:</dt>
-<dd>
-<p>Adds support for building with Android library projects. See <a href="tools-notes.html">SDK Tools, r6</a> for information.</p>
-</dd>
-
-</dl>
- </div>
-</div>
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your
-application, you need to set the proper value, "{@sdkPlatformApiLevel}", in the
-<code>android:minSdkVersion</code> attributes of the <code>&lt;uses-sdk&gt;</code>
-element in your application's manifest. </p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="api">Framework API Changes</h2>
-
-<p>The sections below provide information about changes made to the application
-framework API provided by the Android {@sdkPlatformVersion} platform.</p>
-
-<h3 id="install-loc">App installation on external storage media</h3>
-
-<p>The Android platform now allows applications to request installation onto the
-device's external storage media (such as the SD card), as an alternative to
-installation onto the device's internal memory. </p>
-
-<p>Application developers can express the preferred installation location for
-their applications by means of a new attribute of <code>&lt;manifest&gt;</code>
-in the manifest file, <a
-href="{@docRoot}guide/topics/manifest/manifest-element.html#install"><code>
-android:installLocation</code></a>. The attribute supports three values:
-<code>"internalOnly"</code>, <code>"preferExternal"</code>, and
-<code>"auto"</code>. At install time, the system checks the value of
-<code>android:installLocation</code> and installs the application
-<code>.apk</code> according to the preferred location, if possible. If the
-application has requested external installation, the system installs it into a
-private, encrypted partition in the external media. Once an application .apk is
-installed externally, the system lets the user change the storage location of
-the .apk and move it onto the device's internal memory if needed (and vice
-versa), through Manage Applications in the user settings.</p>
-
-<p>By default, the system installs all applications onto the device's internal
-memory, except for those that explicitly request external installation. This
-means that the system will always install legacy applications onto internal
-memory, since they do not have access to the
-<code>android:installLocation</code> attribute. However, it is possible to
-configure and compile a legacy application such that it is installed internally
-on older versions of the platform and externally on Android 2.2 and later
-platforms, if necessary. </p>
-
-<p>Note that requesting installation onto the device's external media is not
-suitable for all applications, particularly because the external media may be
-removable and unmounting/remounting may disrupt the user experience and system
-settings.</p>
-
-<p>For more information about setting a preferred install location for your
-application, including a discussion of what types of applications should and
-should not request external installation, please read the <a
-href="{@docRoot}guide/appendix/install-location.html">App Install Location</a>
-document. </p>
-
-<h3 id="backup-manager">Data backup</h3>
-
-<p>The platform now provides a generalized backup service that
-applications can use to backup and restore user data, to ensure that users can
-maintain their data when switching devices or reinstalling the application. The
-Backup Manager handles the work of transporting the application data to and from
-the backup storage area in the cloud. The Backup Manager can store any type of
-data, from arbitrary data to files, and manages backup and restore operations
-in an atomic manner. For more information, see <a
-href="{@docRoot}guide/topics/data/backup.html">Data Backup</a>.</p>
-
-<h3>Graphics</h3>
-
-<ul>
-<li>New OpenGL ES 2.0 APIs in {@link android.opengl.GLES20 android.opengl.GLES20}.</li>
-<li>New {@link android.opengl.ETC1}, {@link android.opengl.ETC1Util}, and {@link android.opengl.ETC1Util.ETC1Texture} classes and utility methods for using ETC1 for texture compression.</li>
-<li>New {@link android.graphics.ImageFormat} class.</li>
-<li>New {@link android.graphics.YuvImage YUV image format API} to enable compression from YUV to JPEG and manipulation of YUV data.</li>
-</ul>
-
-<h3>Media</h3>
-
-<ul>
-<li>New APIs in {@link android.media.AudioManager android.media.AudioManager} for managing audio focus, transport control, transient loss of audio focus, ducking.</li>
-<li>New broadcast intent for routing audio to SCO &mdash; {@link android.media.AudioManager#ACTION_SCO_AUDIO_STATE_CHANGED} with extras indicating new state.</li>
-<li>New APIs in {@link android.media.SoundPool} to detect completion of sound-loading.</li>
-<li>New APIs in {@link android.media.SoundPool} for auto pause and resume.</li>
-<li>New APIs in {@link android.media.MediaRecorder} for specifying audio settings for number of channels, encoding and sampling rates, sampling rate.</li>
-<li>New APIs for adding files to the media database, so that they are automatically scanned. See {@link android.media.MediaScannerConnection#scanFile(Context, String[], String[], OnScanCompletedListener) MediaScannerConnection.scanFile} and {@link android.media.MediaScannerConnection.OnScanCompletedListener MediaScannerConnection.OnScanCompletedListener}.</li>
-</ul>
-
-<h3>Speech recognition and third-party recognition engines</h3>
-
-<ul>
-<li>The platform provides new speech-recognition APIs that allow applications to have a richer interaction with the available voice recognizer. For example, the APIs are sufficient to integrate voice recognition deeply into an IME.</li>
-<li>The platform also provides a {@link android.speech.RecognitionService} base class that lets third-party developers create plug-in recognition engines. </li>
-<li>New {@link android.speech.RecognitionListener} interface to receive callbacks.</li>
-<li>New {@link android.speech.RecognizerIntent} extras that let a requester app specify details as preferred language, minimum length in milliseconds, and so on.</li>
-</ul>
-
-<h3>Camera and camcorder</h3>
-
-<ul>
-<li>Changes to camera preview API to improve efficieny of preview pipeline. </li>
-<li>New display orientation for camera (it can now work in portrait orientation).</li>
-<li>New APIs in {@link android.hardware.Camera android.hardware.Camera} for managing zoom level.</li>
-<li>New APIs {@link android.hardware.Camera.Parameters android.hardware.Camera.Parameters} for querying and setting device camera settings such as focal length, exposure, zoom level, view angle, and others.</li>
-<li>New {@link android.media.ThumbnailUtils thumbnail} utility for video and image thumbnails.</li>
-<li>New {@link android.media.CamcorderProfile} and {@link android.media.CamcorderProfile} classes enable apps to determine device hardware camera capablities.</li>
-<li>New support in {@link android.media.ExifInterface android.media.ExifInterface} for retrieving GPS and focal length.</li>
-</ul>
-
-<h3>Device policy manager</h3>
-
-<p>New device policy management APIs allow developers to write "device
-administrator" applications that can control security features of the device,
-such as the minimum password strength, data wipe, and so on. Users can select
-the administrators that are enabled on their devices. For more information, see
-the {@link android.app.admin android.app.admin} classees or the example
-application code in <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html">DeviceAdminSample.java</a>.</p>
-
-<h3>UI Framework</h3>
-
-<ul>
-<li>New UI modes "car mode" and "night mode" and {@link android.app.UiModeManager} let applications adjust their application UI for specific user modes. </li>
-<li>New {@link android.view.ScaleGestureDetector} that lets Views detect and handle transformation gestures that involve more than one pointer (multitouch) using the supplied MotionEvents. </li>
-<li>Improvements in the way that multitouch events are reported in {@link android.view.MotionEvent} objects.</li>
-<li>The layout attribute <code>fill_parent</code> is renamed to <code>match_parent</code>. This affects both XML and Java code (see {@link android.view.ViewGroup.LayoutParams}). Note that the platform will continue to honor uses of <code>fill_parent</code> in legacy applications. </li>
-<li>New layout attributes {@link android.R.attr#tabStripEnabled}, {@link android.R.attr#tabStripRight}, and {@link android.R.attr#tabStripLeft} let developers customize the bottom strip of TabWidgets.</li>
-<li>Better support for managed dialogs in Activity.</li>
-</ul>
-
-<h3>Accounts and sync</h3>
-
-<ul>
-<li>New method {@link android.content.ContentResolver#addPeriodicSync(Account, String, Bundle, long) AddPeriodicSync()} lets you schedule a periodic sync with a specific account, authority, and extras at the given frequency.</li>
-</ul>
-
-<h3>New manifest elements and attributes</h3>
-
-<ul>
-<li>For specifying the application's preferred install location (see <a href="#install-loc">App Installation on External Storage Media</a>, above):
-
-<ul>
-  <li>New <code>android:installLocation</code> attribute of the <code>&lt;manifest&gt;</code> element. Specifies the default install location defined by an application.</li>
-</ul>
-</li>
-
-<li>For managing user data backup (see <a href="#backup-manager">Backup manager</a>, above, for more information):
-
-<ul>
-  <li> New <code>android:backupAgent</code> attribute of the
-<code>&lt;application&gt;</code> element. Specifies the component name of the
-BackupAgent subclass provided by the application to handle backup/restore
-operations, if any.</li>
-  <li> New <code>android:restoreAnyVersion</code> attribute of the
-<code>&lt;application&gt;</code> element. Boolean value that indicates whether
-the application is prepared to attempt a restore of any backed-up dataset, even
-if the backup is apparently from a newer version of the application than is
-currently installed on the device.</li>
-</ul>
-</li>
-
-<li>For managing the platform's JIT compiler:
-
-<ul>
-<li>New <code>android:vmSafeMode</code> attribute of the <code>&lt;application&gt;</code> element. Boolean value that specifies whether to disable JIT compiler optimizations when running the application.</li>
-</ul>
-</li>
-</ul>
-
-<h3>Permissions</h3>
-
-<ul>
-<li><code>android.permission.BIND_DEVICE_ADMIN</code> &mdash; Any device administration broadcast receiver must require this permission, to ensure that only the system can interact with it.</li>
-<li><code>android.permission.KILL_BACKGROUND_PROCESSES</code> &mdash; Allows an application to call {@link android.app.ActivityManager#killBackgroundProcesses(String)}.
-<li><code>android.permission.BIND_WALLPAPER</code> &mdash; Any {@link android.service.wallpaper.WallpaperService} must require this permission, to ensure that only the system can interact with it.</li>
-<li><code>android.permission.SET_TIME</code> &mdash; Allows an application to set the system time.</li>
-</ul>
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
-Level {@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>.</p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-	<ul>
-	<li>Alarm Clock</li>
-	<li>Browser</li>
-	<li>Calculator</li>
-	<li>Camera</li>
-	<li>Contacts</li>
-	<li>Custom Locale (developer app)</li>
-	<li>Dev Tools (developer app)</li>
-    <li>Email</li>
-	</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-	<ul>
-
-	<li>Gallery</li>
-	<li>IMEs for Japanese, Chinese, and Latin text input</li>
-	<li>Messaging</li>
-	<li>Music</li>
-	<li>Phone</li>
-	<li>Settings</li>
-	<li>Spare Parts (developer app)</li>
-	</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-<li>Czech (cs_CZ)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>English, US (en_US)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>French, France (fr_FR)</li>
-<li>French, Belgium (fr_BE)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Polish (pl_PL)</li>
-<li>Russian (ru_RU)</li>
-<li>Spanish (es_ES)</li>
-</td>
-</tr>
-</table>
-
-<p>Localized UI strings match the locales that are accessible
-through Settings.</p>
-
-<p class="note"><strong>Note:</strong> Android supports more locales than are listed above. However,
-the entire collection of locale strings cannot fit on a single system image, so the above list is
-only what's included in the system image for the SDK. All of Android's supported locales are
-available in the <a href="http://source.android.com/">Android Open Source Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use
-for modeling your application in different screen sizes and resolutions. The
-emulator skins are:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA (240x400, low density, normal screen)
-  </li>
-  <li>
-    FWQVGA (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
diff --git a/docs/html/sdk/android-2.3-highlights.jd b/docs/html/sdk/android-2.3-highlights.jd
deleted file mode 100644
index b076b3d..0000000
--- a/docs/html/sdk/android-2.3-highlights.jd
+++ /dev/null
@@ -1,446 +0,0 @@
-page.title=Android 2.3 Platform Highlights
-
-@jd:body
-
-
-<style type="text/css">
-#jd-content {
-  max-width:1200px;
-}
-#jd-content div.screenshot {
-  float:left;
-  clear:left;
-  padding:15px 30px 15px 0;
-}
-#jd-content div.video {
-  float:right;
-  padding:0 60px 40px;
-  margin-top:-15px;
-}
-#jd-content table.columns {
-  margin:0 0 1em 0;
-}
-#jd-content table.columns td {
-  padding:0;
-}
-#jd-content table.columns td+td {
-  padding:0 2em;
-}
-#jd-content table.columns td img {
-  margin:0;
-}
-#jd-content table.columns td+td>*:first-child {
-  margin-top:-2em;
-}
-.green {
-  color:#8db529;
-  font-weight:bold;
-}
-</style>
-
-<div class="video">
-<object width="278" height="180">
-<param name="movie" value="http://www.youtube.com/v/Jx3pdWBlZ34?hl=en&fs=1"></param>
-<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
-value="always"></param>
-<embed src="http://www.youtube.com/v/Jx3pdWBlZ34?hl=en&fs=1" type="application/x-shockwave-flash"
-allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
-</object>
-</div>
-
-<p>The Android 2.3 platform introduces many new and exciting features for
-users and developers. This document provides a glimpse at some of the new features
-and technologies in Android 2.3. For detailed information about the new developer APIs, see the <a
-href="android-2.3.html">Android 2.3 version notes</a>.</p>
-
-<ul>
-  <li><a href="#UserFeatures">New User Features</a></li>
-  <li><a href="#DeveloperApis">New Developer Features</a></li>
-  <li><a href="#PlatformTechnologies">New Platform Technologies</a></li>
-</ul>
-
-
-<h2 id="UserFeatures" style="clear:right">New User Features</h2>
-
-<div>
-<img style="float:right;padding-bottom:2em;" src="images/2.3/home-menu.png" alt="" height="280" />
-<img style="float:right;padding-bottom:2em;" src="images/2.3/home-plain.png" alt="" height="280" />
-
-<h3>UI refinements for simplicity and speed</h3>
-
-<p>The user interface is refined in many ways across the system, making it
-easier to learn, faster to use, and more power-efficient. A simplified
-visual theme of colors against black brings vividness and contrast to the
-notification bar, menus, and other parts of the UI.  Changes in menus and
-settings make it easier for the user to navigate and control the features
-of the system and device. </p>
-
-<h3>Faster, more intuitive text input</h3>
-
-<p>The Android soft keyboard is redesigned and optimized for faster text input
-and editing. The keys themselves are reshaped and repositioned for improved
-targeting, making them easier to see and press accurately, even at high speeds.
-The keyboard also displays the current character and dictionary suggestions in a
-larger, more vivid style that is easier to read.</p>
-
-<p>The keyboard adds the capability to correct entered words from suggestions in
-the dictionary. As the user selects a word already entered, the keyboard
-displays suggestions that the user can choose from, to replace the selection.
-The user can also switch to voice input mode to replace the selection. Smart
-suggestions let the user accept a suggestion and then return to correct it
-later, if needed, from the original set of suggestions.</p>
-
-<p>New multitouch key-chording lets the user quickly enter numbers and symbols
-by pressing Shift+&lt;<em>letter</em>&gt; and ?123+&lt;<em>symbol</em>&gt;,
-without needing to manually switch input modes. From certain keys, users can
-also access a popup menu of accented characters, numbers, and symbols by holding
-the key and sliding to select a character.</p>
-</div>
-
-<div  style="padding-top:1em;">
-<div style="margin-right:1em;float:left;"><img src="images/2.3/onetouch.png" alt="" height="260" /></div>
-<div style="padding-right:2em;float:left;"><img src="images/2.3/selection.png" alt="" height="160" /></div>
-
-
-<h3>One-touch word selection and copy/paste</h3>
-
-<p>When entering text or viewing a web page, the user can quickly select a word
-by press-hold, then copy to the clipboard and paste. Pressing on a word enters a
-free-selection mode &mdash; the user can adjust the selection area as needed by
-dragging a set of bounding arrows to new positions, then copy the bounded area
-by pressing anywhere in the selection area. For text entry, the user can
-slide-press to enter a cursor mode, then reposition the cursor easily and
-accurately by dragging the cursor arrow. With both the selection and cursor
-modes, no use of a trackball is needed.</p>
-
-</div>
-
-<div style="clear:left">
-<div style="padding-right:2em;float:right;"><img src="images/2.3/running.png" alt="" height="280" /></div>
-<div style="padding-left:1em;float:right;"><img src="images/2.3/power.png" alt="" height="280" /></div>
-
-<h3>Improved power management </h3>
-
-<p>The Android system takes a more active role in managing apps that are keeping
-the device awake for too long or that are consuming CPU while running in the
-background. By managing such apps &mdash; closing them if appropriate &mdash;
-the system helps ensure best possible performance and maximum battery life.</p>
-
-<p>The system also gives the user more visibility over the power being consumed
-by system components and running apps. The Application settings provides an
-accurate overview of how the battery  is being used, with details of the usage
-and relative power consumed  by each component or application.</p>
-
-<h3>Control over applications</h3>
-
-<p>A shortcut to the Manage Applications control now appears in the Options Menu
-in the Home screen and Launcher, making it much easier to check and manage
-application activity. Once the user enters Manage Applications, a new Running
-tab displays a list of active applications and the storage and memory being used
-by each. The user can read further details about each application and if
-necessary stop an application or report feedback to its developer. </p>
-</div>
-
-<h3>New ways of communicating, organizing</h3>
-
-<p>An updated set of standard applications lets the user take new approaches to
-managing information and relationships. </p>
-
-<div  style="padding-top:1em;">
-<div style="padding-right:1.5em;float:left;"><img src="images/2.3/sipcall.png" alt="" height="190" align="left"/><br>
-<img src="images/2.3/ffc.png" alt="" height="190" align="left" style="margin-bottom:1.5em;margin-top:.75em;"/><div></div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Internet calling</strong></p>
-
-<p>The user can make voice calls over the internet to other users who have SIP
-accounts. The user can add an internet calling number (a SIP address) to any
-Contact and can initiate a call from Quick Contact or Dialer. To use internet
-calling, the user must create an account at the SIP provider of their choice
-&mdash; SIP accounts are not provided as part of the internet calling feature.
-Additionally, support for the platform's SIP and internet calling features on
-specific devices is determined by their manufacturers and associated carriers.
-</p>
-
-<div style="padding-right:1.5em;float:right;;"><img src="images/2.3/nfc.png" alt="" height="190" /> </div>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Near-field communications</strong></p>
-
-<p>An NFC Reader application lets the user read and interact with near-field
-communication (NFC)  tags. For example, the user can “touch” or “swipe” an NFC
-tag that might be embedded in a poster, sticker, or advertisement, then act on
-the data read from the tag. A typical use would be to read a tag at a
-restaurant, store, or event and then rate or register by jumping to a web site
-whose URL is included in the tag data. NFC communication relies on wireless
-technology in the device hardware, so support for the platform's NFC features on
-specific devices is determined by their manufacturers.
-</p>
-</div>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Downloads management</strong></p>
-
-<p>The Downloads application gives the user easy access to any file downloaded from
-the browser, email, or another application. Downloads is built on an completely new
-download manager facility in the system that any other applications can use, to
-more easily manage and store their downloads.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Camera</strong></p>
-
-<p>The application now lets the user access multiple cameras on the device,
-including a front-facing camera, if available. </p>
-
-
-<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
-
-<p>Android 2.3 delivers a variety of features and APIs that
-let developers bring new types of applications to the Android
-platform.</p>
-
- <ul>
-<li><a href="#gaming">Enhancements for gaming</a></li>
-<li><a href="#communication">New forms of communication</a></li>
-<li><a href="#multimedia">Rich multimedia</a></li>
-</ul>
-
-<h3 id="gaming">Enhancements for gaming</h3>
-
-<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Performance</strong></p>
-
-<p>Android 2.3 includes a variety of improvements across the system that make
-common operations faster and more efficient for all applications. Of particular
-interest to game developers are:</p>
-
-<ul>
-<li>Concurrent garbage collector &mdash; The Dalivik VM introduces a new,
-concurrent garbage collector that minimizes application pauses, helping to
-ensure smoother animation and increased responsiveness in games and similar
-applications. </li>
-<li>Faster event distribution &mdash; The plaform now handles touch and keyboard
-events faster and more efficiently, minimizing CPU utilization during event
-distribution. The changes improve responsiveness for all applications, but
-especially benefit games that use touch events in combination with 3D graphics
-or other CPU-intensive operations. </li>
-<li>Updated video drivers &mdash; The platform uses updated third-party video
-drivers that improve the efficiency of OpenGL ES operations, for faster overall
-3D graphics performance. </li>
-</ul>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native input and
-sensor events</strong></p>
-
-<p>Applications that use native code can now receive and process input and
-sensor events directly in their native code, which dramatically improves
-efficiency and responsiveness. </p>
-
-<p>Native libraries exposed by the platform let applications handle the same
-types of input events as those available through the framework. Applications
-can receive events from all supported sensor types and can enable/disable
-specific sensors and manage event delivery rate and queueing. </p>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Gyroscope and other
-new sensors, for improved 3D motion processing</strong></p>
-
-<p>Android 2.3 adds API support for several new sensor types, including
-gyroscope, rotation vector, linear acceleration, gravity, and barometer sensors.
-Applications can use the new sensors in combination with any other sensors
-available on the device, to track three-dimensional device motion and
-orientation change with high precision and accuracy. For example, a game
-application could use readings from a gyroscope and accelerometer on the device
-to recognize complex user gestures and motions, such as tilt, spin, thrust, and
-slice.  </p>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Open API for native
-audio</strong></p>
-
-<p>The platform provides a software implementation of <a
-href="http://www.khronos.org/opensles/">Khronos OpenSL ES</a>, a standard API
-that gives applications access to powerful audio controls and effects from
-native code. Applications can use the API to manage audio devices and control
-audio input, output, and processing directly from native code.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native graphics
-management</strong></p>
-
-<p>The platform provides an interface to its <a
-href="http://www.khronos.org/egl/">Khronos EGL</a> library, which lets
-applications manage graphics contexts and create and manage OpenGL ES textures
-and surfaces from native code.</p>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native access to
-Activity lifecycle, window management</strong></p>
-
-<p>Native applications can declare a new type of Activity class,
-<code>NativeActivity</code> whose lifecycle callbacks are implemented directly
-in native code. The <code>NativeActivity</code> and its underlying native code
-run in the system just as do other Activities &mdash; they run in the
-application's system process and execute on the application's main UI thread,
-and they receive the same lifecycle callbacks as do other Activities. </p>
-
-<p>The platform also exposes native APIs for managing windows, including the
-ability to lock/unlock the pixel buffer to draw directly into it. Through the
-API, applications can obtain a native window object associated with a framework
-Surface object and interact with it directly in native code.</p>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Native access to
-assets, storage</strong></p>
-
-<p>Applications can now access a native Asset Manager API to retrieve
-application assets directly from native code without needing to go through JNI.
-If the assets are compressed, the platform does streaming decompression as the
-application reads the asset data. There is no longer a limit on the size of
-compressed <code>.apk</code> assets that can be read.</p>
-
-<p>Additionally, applications can access a native Storage Manager API to work
-directly with OBB files downloaded and managed by the system. Note that although
-platform support for OBB is available in Android 2.3, development tools for
-creating and managing OBB files will not be available until early 2011.</p>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Robust native
-development environment</strong></p>
-
-<p>The Android NDK (r5 or higher) provides a complete set of tools, toolchains,
-and libraries for developing applications that use the rich native environment
-offered by the Android 2.3 platform. For more information or to download the
-NDK, please see the <a
-href="http://developer.android.com/sdk/ndk/index.html">Android&nbsp;NDK</a>
-page. </p>
-
-
-<h3 id="communication">New forms of communication</h3>
-
-<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Internet
-telephony</strong></p>
-
-<p>Developers can now add SIP-based internet telephony features to their
-applications. Android 2.3 includes a full SIP protocol stack and integrated call
-management services that let applications easily set up outgoing and incoming
-voice calls, without having to manage sessions, transport-level communication,
-or audio record or playback directly. </p>
-
-<p>Support for the platform's SIP and internet calling features on specific
-devices is determined by their manufacturers and associated carriers.</p>
-
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Near Field
-Communications (NFC)</strong></p>
-
-<p>The platform's support for Near Field Communications (NFC) lets developers
-get started creating a whole new class of applications for Android. Developers
-can create new applications that offer proximity-based information and services
-to users, organizations, merchants, and advertisers. </p>
-
-<p>Using the NFC API,
-applications can read and respond to NFC tags “discovered” as the user “touches” an
-NFC-enabled device to elements embedded in stickers, smart posters, and even
-other devices. When a tag of interest is collected, applications can respond to
-the tag, read messages from it, and then store the messages, prompting
-the user as needed. </p>
-
-<p>Starting from Android 2.3.3, applications can also write to tags and
-set up peer-to-peer connections with other NFC devices.</p>
-
-<p>NFC communication relies on wireless technology in the device hardware, so
-support for the platform's NFC features on specific devices is determined by
-their manufacturers.</p>
-
-
-<h3 id="multimedia">Rich multimedia</h3>
-
-<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Mixable audio
-effects</strong></p>
-
-<p>A new audio effects API lets developers easily create rich audio environments
-by adding equalization, bass boost, headphone virtualization (widened
-soundstage), and reverb to audio tracks and sounds. Developers can mix multiple
-audio effects in a local track or apply effects globally, across multiple
-tracks.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Support for new media
-formats</strong></p>
-
-<p>The platform now offers built-in support for the VP8 open video compression
-format and the WebM open container format. The platform also adds support for
-AAC encoding and AMR wideband encoding (in software), so that applications can
-capture higher quality audio than narrowband. </p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Access to multiple
-cameras</strong></p>
-
-<p>The Camera API now lets developers access any cameras that are available on a
-device, including a front-facing camera. Applications can query the platform for
-the number of cameras on the device and their types and characteristics, then
-open the camera needed. For example, a video chat application might want to access a
-front-facing camera that offers lower-resolution, while a photo application
-might prefer a back-facing camera that offers higher-resolution.</p>
-
-
-<h2 id="PlatformTechnologies">New Platform Technologies</h2>
-
-<h3>Media Framework</h3>
-
-<ul>
-<li>New media framework fully replaces OpenCore, maintaining all previous
-codec/container support for encoding and decoding.</li>
-<li>Integrated support for the VP8 open video compression format and the WebM
-open container format</li>
-<li>Adds AAC encoding and AMR wideband encoding</li>
-</ul>
-
-<h3>Linux Kernel </h3>
-<ul>
-<li>Upgraded to 2.6.35</li>
-</ul>
-
-<h3>Networking</h3>
-<ul>
-<li>SIP stack, configurable by device manufacturer
-<li>Support for Near Field Communications (NFC), configurable by device manufacturer</li>
-<li>Updated BlueZ stack</li>
-</ul>
-
-<h3>Dalvik runtime</h3>
-
-<ul>
-<li>Dalvik VM:
-<ul>
-<li>Concurrent garbage collector (target sub-3ms pauses)</li>
-<li>Adds further JIT (code-generation) optimizations</li>
-<li>Improved code verification</li>
-<li>StrictMode debugging, for identifying performance and memory issues</li>
-</ul>
-</li>
-
-
-<li>Core libraries:
-<ul>
-  <li>Expanded I18N support (full worldwide encodings, more locales)
-  <li>Faster Formatter and number formatting. For example, float formatting is 2.5x faster.</li>
-  <li>HTTP responses are gzipped by default. XML and JSON API response sizes may be reduced by 60% or more.</li>
-  <li>New collections and utilities APIs</li>
-  <li>Improved network APIs</li>
-  <li>Improved file read and write controls</li>
-  <li>Updated JDBC</li>
-</ul>
-</li>
-
-<li>Updates from upstream projects:
-  <ul>
-  <li>OpenSSL 1.0.0a</li>
-  <li>BouncyCastle 1.45</li>
-  <li>ICU 4.4</li>
-  <li>zlib 1.2.5</li>
-  </ul>
-</li>
-
-
-</ul>
-
-<p>For more information about the new developer APIs, see the <a
-href="android-2.3.html">Android 2.3 version notes</a> and the <a
-href="{@docRoot}sdk/api_diff/9/changes.html">API Differences Report</a>.</p>
diff --git a/docs/html/sdk/android-2.3.3.jd b/docs/html/sdk/android-2.3.3.jd
deleted file mode 100644
index 405c063..0000000
--- a/docs/html/sdk/android-2.3.3.jd
+++ /dev/null
@@ -1,419 +0,0 @@
-page.title=Android 2.3.3 Platform
-sdk.platform.version=2.3.3
-sdk.platform.apiLevel=10
-
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android 2.3.3 is a small feature release that adds several improvements
-and APIs to the Android 2.3 platform.</p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes 
-an Android library and system image, as well as a set of emulator
-skins and more. The downloadable platform
-includes no external libraries.</p>
-
-<p>To get started developing or testing against Android
-{@sdkPlatformVersion}, use the Android SDK Manager to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
-first.</p>
-
-<p>For a high-level introduction to Android 2.3, see the <a
-href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
-higher.</p>
-</dd>
-<dt>Notes:</dt>
-<dd>
-<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
-Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
-bugs in the previous rendering library. It also unlocks several editor features that were added in
-ADT 12.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r9 or higher.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-
-<h2 id="api">API Overview</h2>
-
-<p>The sections below provide a technical overview of what's new for developers
-in {@sdkPlatformVersion}, including new features and changes in the framework
-API since the previous version.</p>
-
-<h3 id="nfc">Near Field Communications (NFC)</h3>
-
-<p>Android 2.3.3 provides improved and extended support for NFC, to allow
-applications to interact with more types of tags in new ways.</p>
-
-<p>A new, comprehensive set of APIs give applications read and write access
-to a wider range of standard tag technologies, including:</p>
-
-<ul>
-<li>NFC-A (ISO 14443-3A)</li>
-<li>NFC-B (ISO 14443-3B)</li>
-<li>NFC-F (JIS 6319-4)</li>
-<li>NFC-V (ISO 15693)</li>
-<li>ISO-DEP (ISO 14443-4)</li>
-<li>MIFARE Classic</li>
-<li>MIFARE Ultralight</li>
-<li>NFC Forum NDEF tags</li>
-</ul>
-
-<p>The platform also provides a limited peer-to-peer communication protocol
-and API. Foreground Activities can use the API to register an NDEF
-message that will get pushed to other NFC devices when they connect.</p>
-
-<p>Advanced tag dispatching now gives applications more control over how and
-when they are launched, when an NFC tag is discovered. Previously, the platform
-used a single-step intent dispatch to notify interested applications that a tag
-was discovered. The platform now uses a four-step process that enables the
-foreground application to take control of a tag event before it is passed to any
-other applications (<code>android.nfc.NfcAdapter.enableForegroundDispatch()</code>).
-
-The new dispatch process also lets apps listen for specific tag content and
-tag technologies, based on two new intent actions &mdash;
-<code>android.nfc.action.NDEF_DISCOVERED</code> and
-<code>android.nfc.action.TECH_DISCOVERED</code>.</p>
-
-<p>The NFC API is available in the {@link android.nfc} and 
-{@link android.nfc.tech} packages. The key classes are: </p>
-
-<ul>
-<li>{@link android.nfc.NfcAdapter}, which represents the NFC hardware on the device.</li>
-<li>{@link android.nfc.NdefMessage}, which represents an NDEF data message,
-the standard format in which "records" carrying data are transmitted between
-devices and tags. An NDEF message certain many NDEF records of different types.
-Applications can receive these messages from 
-{@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED NDEF_DISCOVERED},
-{@link android.nfc.NfcAdapter#ACTION_TECH_DISCOVERED TECH_DISCOVERED}, or
-{@link android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED TAG_DISCOVERED} Intents.</li>
-<li>{@link android.nfc.NdefRecord}, delivered in an
-{@link android.nfc.NdefMessage}, which describes the type of data being shared
-and carries the data itself.</li>
-<li>{@link android.nfc.Tag}, which represents a tag scanned by the device.
-Multiple types of tags are supported, based on the underlying tag
-technology.</li>
-<li>{@link android.nfc.tech.TagTechnology}, an interface that gives applications
-access to tag properties and I/O operations based on the technologies present
-in the tag. For a full list of tag technologies supported in Android 2.3.3, see
-{@link android.nfc.tech}.</li>
-</ul>
-
-<p>NFC communication relies on wireless technology in the device hardware, and
-is not present in all Android devices. Android devices that do not support
-NFC will return a null object when
-{@link android.nfc.NfcAdapter#getDefaultAdapter(android.content.Context)
-getDefaultAdapter(Context)} is called, and
-<code>context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_NFC)</code>
-will return <code>false</code>. The NFC API is always present, however, regardless of
-underlying hardware support.</p>
-
-<p>To use the NFC API, applications must request permission from the user by
-declaring <code>&lt;uses-permission
-android:name="android.permission.NFC"&gt;</code> in their manifest files.</p>
-
-<p>Additionally, developers can request filtering on Google Play, such that
-their applications are not discoverable to users whose devices do not support
-NFC. To request filtering, add
-<code>&lt;uses-feature android:name="android.hardware.nfc"
-android:required="true"&gt;</code> to the application's manifest.</p>
-
-<p class="note">To look at sample code for NFC, see
-<a href="{@docRoot}resources/samples/NFCDemo/index.html">NFCDemo app</a>, <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/TechFilter.html">filtering by tag technology</a></li>, <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html">using foreground dispatch</a>, and <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundNdefPush.html">foreground NDEF push (P2P)</a>.</p>
-
-<h3 id="bluetooth">Bluetooth</h3>
-
-<p>Android 2.3.3 adds platform and API support for Bluetooth nonsecure socket
-connections. This lets applications communicate with simple devices that may not
-offer a UI for authentication. See 
-{@link android.bluetooth.BluetoothDevice#createInsecureRfcommSocketToServiceRecord(java.util.UUID)} and 
-{@link android.bluetooth.BluetoothAdapter#listenUsingInsecureRfcommWithServiceRecord(java.lang.String, java.util.UUID)}
-for more information. </p>
-
-<h3 id="graphics">Graphics</h3>
-
-<ul>
-<li>A new {@link android.graphics.BitmapRegionDecoder} class lets applications
-decode a rectangle region from an image. The API is particularly useful when an
-original image is large and and the application only need parts of the image.
-</li>
-<li>A new {@link
-android.graphics.BitmapFactory.Options#inPreferQualityOverSpeed} field in {@link
-android.graphics.BitmapFactory.Options} allows applications to use a more accurate
-but slightly slower IDCT method in JPEG decode. This in turn improves the
-quality of the reconstructed image.</li>
-</ul>
-
-
-<h3 id="media">Media framework</h3>
-
-<ul>
-<li>A new {@link android.media.MediaMetadataRetriever} class provides a unified
-interface for retrieving frame and metadata from an input media file.</li>
-<li>{@link android.media.MediaRecorder.AudioEncoder} and {@link
-android.media.MediaRecorder.OutputFormat} include new fields for specifying AMR
-Wideband and AAC formats. </li>
-</ul>
-
-
-<h3 id="speech">Speech recognition</h3>
-
-<p>The speech-recognition API includes new constants to let you manage voice
-search results in new ways. Although the new constants are not needed for normal
-use of speech recognition, you could use them to offer a different view of voice
-search results in your application. For information, see {@link
-android.speech.RecognizerResultsIntent}.</p>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
-you need compile the application against the Android library that is provided in
-the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
-also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
-attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
-manifest. If your application is designed to run only on Android 2.3 and higher,
-declaring the attribute prevents the application from being installed on earlier
-versions of the platform.</p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Contacts</li>
-<li>Cusom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gallery</li>
-<li>IMEs for Japanese, Chinese, and Latin text input</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>Phone</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Spare Parts (developer app)</li>
-<li>Speech Recorder</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian-Bokmol, Norway(nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use
-for modeling your application in different screen sizes and resolutions. The
-emulator skins are:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA400 (240x400, low density, normal screen)
-  </li>
-  <li>
-    WQVGA432 (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
diff --git a/docs/html/sdk/android-2.3.4.jd b/docs/html/sdk/android-2.3.4.jd
deleted file mode 100644
index 4bfdabd..0000000
--- a/docs/html/sdk/android-2.3.4.jd
+++ /dev/null
@@ -1,381 +0,0 @@
-page.title=Android 2.3.4 Platform
-sdk.platform.version=2.3.4
-sdk.platform.apiLevel=10
-
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#openaccessory">Open Accessory Library</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android 2.3.4 is a maintenance release that adds several bug fixes and patches
-to the Android 2.3 platform, without any API changes from Android 2.3.3. Additionally, 
-Android 2.3.4 brings support for the Open Accessory API to mobile devices,
-through the optional <a href="#usb">Open Accessory Library</a>. </p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform and the Open
-Accessory Library are available together in the latest version of the Google
-APIs Add-On, a downloadable component for the Android SDK.</p>
-
-<p>To get started developing or testing against Android {@sdkPlatformVersion},
-use the Android SDK Manager to download the latest version of the Google APIs
-Add-On into your SDK. For more information, see <a
-href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a>. If you
-are new to Android, <a href="{@docRoot}sdk/index.html">download the SDK Starter
-Package</a> first.</p>
-
-<p>For a high-level introduction to Android 2.3, see the <a
-href="{@docRoot}sdk/android-2.3-highlights.html">Platform Highlights</a>.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-  padding: .25em 1em 0em 1em;
-  margin-bottom: 0;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
-        Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2011)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r11 or higher.</p>
-</dd>
-
-</dl>
- </div>
-</div>
-
-
-<h2 id="api">API Overview</h2>
-
-<p>Android 2.3.4 provides the same framework API to applications as Android 2.3.3
-(API level 10). For a summary of the API, see the
-<a href="{@docRoot}sdk/android-2.3.3.html">Android 2.3.3 version notes</a>.</p>
-
-
-<h2 id="openaccessory">Open Accessory Library</h2>
-
-<p><em>Open Accessory</em> is a new capability for integrating
-connected peripherals with applications running on the platform. The capability
-is based on a USB (Universal Serial Bus) stack built into the platform and an
-API exposed to applications. Peripherals that attach to Android-powered devices
-as accessories connect as USB hosts. </p>
-
-<p>Open Accessory is introduced in <a
-href="{@docRoot}sdk/android-3.1.html#usb">Android 3.1</a> (API level 12), but is
-made available to devices running Android 2.3.4 by means of an optional external
-library, the Open Accessory Library. The library exposes a framework API that
-lets applications discover, communicate with, and manage a variety of device
-types connected over USB. It also provides the implementation of the API against
-parts of the Android platform that are not directly exposed to applications in
-Android 2.3.4.</p>
-
-<p>The Open Accessory Library is optional on any given device. Device
-manufacturers may choose whether to include the Open Accessory Library in their
-products or exclude it. The library is forward-compatible with Android 3.1, so
-applications developed against Android 2.3.4 will run properly on devices
-running Android 3.1, if those devices support USB accessories. </p>
-
-<p>The API provided by the Open Accessory Library is based on the Open Accessory
-API provided in Android 3.1. In most areas, you can use the same techniques and
-APIs. However, developing for the Open Accessory Library on Android 2.3.4 differs
-from the standard USB API in these ways:
-
-<ul>
-<li>Obtaining a {@link android.hardware.usb.UsbManager} object &mdash; To obtain
-a {@link android.hardware.usb.UsbManager} object when using the add-on library,
-use the helper method <code>getInstance()</code> rather than {@link
-android.content.Context#getSystemService(java.lang.String) getSystemService()}
-For example:
-
-<pre>UsbManager manager = UsbManager.getInstance(this);</pre></li>
-
-<li>Obtaining a {@link android.hardware.usb.UsbAccessory} from a filtered intent
-&mdash; When you filter for a connected device or accessory with an intent
-filter, the {@link android.hardware.usb.UsbAccessory} object is contained
-inside the intent that is passed to your application. If you are using the
-add-on library, you can get the {@link android.hardware.usb.UsbAccessory} object
-in the following manner:
-
-<pre>UsbAccessory accessory = UsbManager.getAccessory(intent)</pre></li>
-
-<li>No USB host support &mdash; Android 2.3.4 and the Open Accessory Library do
-not support USB host mode (for example, through {@link
-android.hardware.usb.UsbDevice}), although USB host mode is supported in Android
-3.1. An Android-powered device running Android 2.3.4 can not function as a USB
-host. The library enables the Android-powered device to function as
-a peripheral only, with the connected accessory functioning as USB host
-(through {@link android.hardware.usb.UsbAccessory}).</li>
-</ul>
-
-<p>To develop apps using the Open Accessory Library, you need:</p>
-
-<ul>
-<li>The latest version of the Android SDK tools</li>
-<li>The latest version of the Google APIs add-on, which includes the library
-itself (for linking)</li>
-<li>An actual hardware device running Android 2.3.4 (or Android 3.1) with USB
-accessories support, for runtime testing against connected devices</li>
-</ul>
-
-<p>For a full discussion of how to develop applications that interact with USB
-accessories, please see the related <a
-href="{@docRoot}guide/topics/usb/index.html">developer documentation</a>.</p>
-
-<p>Additionally, developers can request filtering on Google Play, such that
-their applications are not available to users whose devices do not provide the
-appropriate accessory support. To request filtering, add the element below
-to the application manifest:</p>
-
-<pre>&lt;uses-feature
-  android:name="android.hardware.usb.accessory"
-  android:required="true"&gt;</pre>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android 2.3.4 platform does <em>not</em> increment the API level &mdash;
-it uses the same API level as Android 2.3.3, API level 10.
-
-<p>To use APIs introduced in API level 10 in your application,
-you need compile the application against the Android library that is provided in
-the latest version of the Google APIs Add-On, which also includes the Open
-Accessory Library.</p>
-
-<p>Depending on your needs, you might
-also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
-attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
-manifest. If your application is designed to run only on Android 2.3.3 and higher,
-declaring the attribute prevents the application from being installed on earlier
-versions of the platform.</p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Contacts</li>
-<li>Custom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gallery</li>
-<li>IMEs for Japanese, Chinese, and Latin text input</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>Phone</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Spare Parts (developer app)</li>
-<li>Speech Recorder</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian-Bokmol, Norway(nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</ul>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use
-for modeling your application in different screen sizes and resolutions. The
-emulator skins are:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA400 (240x400, low density, normal screen)
-  </li>
-  <li>
-    WQVGA432 (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
diff --git a/docs/html/sdk/android-2.3.jd b/docs/html/sdk/android-2.3.jd
deleted file mode 100644
index b466913..0000000
--- a/docs/html/sdk/android-2.3.jd
+++ /dev/null
@@ -1,942 +0,0 @@
-page.title=Android 2.3 Platform
-sdk.platform.version=2.3
-sdk.platform.apiLevel=9
-
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Components</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>
-<em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes 
-an Android library and system image, as well as a set of emulator
-skins and more. The downloadable platform
-includes no external libraries.</p>
-
-<p>To get started developing or testing against Android
-{@sdkPlatformVersion}, use the Android SDK Manager to
-download the platform into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a>
-first.</p>
-
-<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
-href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform Highlights</a>.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Android {@sdkPlatformVersion} platform component for the Android SDK, as denoted by
-revision number. To determine what revision(s) of the Android
-{@sdkPlatformVersion} platforms are installed in your SDK environment, refer to
-the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-  padding: .25em 1em 0em 1em;
-  margin-bottom: 0;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px" />
-        Android {@sdkPlatformVersion}, Revision 1</a> <em>(December 2010)</em></a>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires SDK Tools r8 or higher.</p>
-</dd>
-
-</dl>
- </div>
-</div>
-
-<h2 id="api">API Overview</h2>
-
-<p>The sections below provide a technical overview of what's new for developers
-in {@sdkPlatformVersion}, including new features and changes in the framework
-API since the previous version.</p>
-
-
-<h3 id="sip">SIP-based VoIP</h3>
-
-<p>The platform now includes a SIP protocol stack and framework API that lets
-developers build internet telephony applications. Using the API, applications can offer
-voice calling features without having to manage sessions, transport-level
-communication, or audio &mdash; these are handled
-transparently by the platform's SIP API and services.</p>
-
-<p>The SIP API is available in the {@link android.net.sip android.net.sip}
-package. The key class is {@link android.net.sip.SipManager}, which applications
-use to set up and manage SIP profiles, then initiate audio calls and receive
-audio calls. Once an audio call is established, applications can mute calls,
-turn on speaker mode, send DTMF tones, and more. Applications can also use the
-{@link android.net.sip.SipManager} to create generic SIP connections.</p>
-
-<p>The platform’s underlying SIP stack and services are available on devices at
-the discretion of the manufacturer and associated carrier. For this reason,
-applications should use the  {@link android.net.sip.SipManager#isApiSupported
-isApiSupported()} method to check whether SIP support is available, before
-exposing calling functionality to users. </p>
-
-<p>To use the SIP API, applications must request permission from the user by
-declaring <code>&lt;uses-permission
-android:name="android.permission.INTERNET"&gt;</code> and <code>&lt;uses-permission
-android:name="android.permission.USE_SIP"&gt;</code> in their manifest files.</p>
-
-<p>Additionally, developers can request filtering on Google Play, such that
-their applications are not discoverable to users whose devices do not include
-the platform’s SIP stack and services. To request filtering, add <code>&lt;uses-feature
-android:name="android.software.sip"
-android:required="true"&gt;</code> and <code>&lt;uses-feature
-android:name="android.software.sip.voip"&gt;</code> to the application manifest.</p>
-
-<p class="note">To look at a sample application that uses the SIP API, see <a
-href="{@docRoot}resources/samples/SipDemo/index.html">SIP Demo</a>.</p>
-
-<h3 id="nfc">Near Field Communications (NFC)</h3>
-
-<p>Android 2.3 includes an NFC stack and framework API that lets developers
-read NDEF tags that are discovered as a user touches an NFC-enabled device
-to tag elements embedded in stickers, smart posters, and even other devices.</p>
-
-<p>The platform provides the underlying NFC services that work with the device
-hardware to discover tags when they come into range. On discovering a tag, the
-platform notifies applications by broadcasting an Intent, appending the tag's
-NDEF messages to the Intent as extras. Applications can create Intent filters to
-recognize and handle targeted tags and messages. For example, after receiving a
-tag by Intent, applications extract the NDEF messages, store them, alert the
-user, or handle them in other ways. </p>
-
-<p>The NFC API is available in the {@link android.nfc} package. The key classes are: </p>
-
-<ul><li>{@link android.nfc.NfcAdapter}, which represents the NFC hardware on the device.</li>
-<li>{@link android.nfc.NdefMessage}, which represents an NDEF data message,
-the standard format in which "records" carrying data are transmitted between
-devices and tags. Applications can receive these messages from {@link
-android.nfc.NfcAdapter#ACTION_TAG_DISCOVERED}</code> Intents.</li>
-<li>{@link android.nfc.NdefRecord}, delivered in an
-{@link android.nfc.NdefMessage}, which describes the type of data being shared and
-carries the data itself.</li>
-</ul>
-
-<p>NFC communication relies on wireless technology in the device hardware, so
-support for the platform's NFC features on specific devices is determined by
-their manufacturers. To determine the NFC support on the current device,
-applications can call {@link android.nfc.NfcAdapter#isEnabled isEnabled()} to
-query the {@link android.nfc.NfcAdapter}. The NFC API is always present,
-however, regardless of underlying hardware support.</p>
-
-<p>To use the NFC API, applications must request permission from the user by
-declaring <code>&lt;uses-permission
-android:name="android.permission.NFC"&gt;</code> in their manifest files.</p>
-
-<p>Additionally, developers can request filtering on Google Play, such that
-their applications are not discoverable to users whose devices do not support
-NFC. To request filtering, add
-<code>&lt;uses-feature android:name="android.hardware.nfc"
-android:required="true"&gt;</code> to the application's manifest.</p>
-
-<p class="note">To look at a sample application that uses the NFC API, see
-<a href="{@docRoot}resources/samples/NFCDemo/index.html">NFCDemo</a>.</p>
-
-<h3 id="sensors">Gyroscope and other sensors</h3>
-
-<p>Android 2.3 adds platform and API support for several new sensor reading
-types &mdash; gyroscope, rotation vector, linear acceleration, gravity, and barometer.
-Developers can use the new sensor readings to create applications that respond
-quickly and smoothly to precise changes in device position and motion. The
-Sensor API reports gyroscope and other sensor changes to interested
-applications, whether they are running on the application framework or in native
-code. </p>
-
-<p>Note that the specific set of hardware sensors available on any given device
-varies at the discretion of the device manufacturer. </p>
-
-<p>Developers can request filtering on Google Play, such that their
-applications are not discoverable to users whose devices do not offer a
-gyroscope sensor. To do so, add <code>&lt;uses-feature
-android:name="android.hardware.sensor.gyroscope"
-android:required="true"&gt;</code> to the application manifest.</p>
-
-<p>For API details, see {@link android.hardware.Sensor}.</p>
-
-
-<h3 id="cameras">Multiple cameras support</h3>
-
-<p>Applications can now make use of any cameras that are available on a device,
-for either photo or video capture. The {@link android.hardware.Camera} lets
-applications query for the number of cameras available and the unique
-characteristics of each. </p>
-
-<ul>
-<li>New {@link android.hardware.Camera.CameraInfo} class stores a camera's
-positional characteristics (orientation, front-facing or back-facing).</li>
-<li>New {@link android.hardware.Camera#getNumberOfCameras()} and {@link
-android.hardware.Camera#getCameraInfo(int,CameraInfo) getCameraInfo()} methods in the {@link
-android.hardware.Camera} class let applications query for the cameras available
-and open the camera that they need.</li>
-<li>New {@link android.media.CamcorderProfile#get get()} method lets
-applications retrieve a {@link android.media.CamcorderProfile} for a specific camera. </li>
-<li>New {@link android.media.CameraProfile#getJpegEncodingQualityParameter(int, int)
-getJpegEncodingQualityParameter()} lets applications obtain the still-image
-capture quality level for a specific camera.</li>
-</ul>
-
-<p class="note">To look at sample code for accessing a front-facing camera, see <a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html">CameraPreview.java</a>
-in the ApiDemos sample application.</p>
-
-<p>The Camera API also adds: </p>
-<ul>
-<li>New parameters for cameras, including focus distance, focus mode, and
-preview fps maximum/minimum. New {@link
-android.hardware.Camera.Parameters#getFocusDistances(float[])
-getFocusDistances()}, {@link
-android.hardware.Camera.Parameters#getPreviewFpsRange(int[])
-getPreviewFpsRange()}, and {@link
-android.hardware.Camera.Parameters#getSupportedPreviewFpsRange()
-getSupportedPreviewFpsRange()} for getting camera parameters, as well as {@link
-android.hardware.Camera.Parameters#setPreviewFpsRange(int, int)
-setPreviewFpsRange()} for setting preview framerate. </li>
-</ul>
-
-<h3 id="media">Mixable audio effects</h3>
-
-<p>The platform's media framework adds support for new per-track or global audio effects,
-including bass boost, headphone virtualization, equalization, and reverb.</p>
-<ul>
-<li>New {@link android.media.audiofx android.media.audiofx} package provides the
-API to access audio effects.</li>
-<li>New {@link android.media.audiofx.AudioEffect AudioEffect} is the  base class
-for controlling audio effects provided by the Android audio framework.
-<li>New audio session ID that lets an application associate a set of audio
-effects with an instance of {@link android.media.AudioTrack} or {@link
-android.media.MediaPlayer}.</li>
-<li>New {@link android.media.AudioTrack#AudioTrack(int, int, int, int, int, int,
-int) AudioTrack} class constructor that lets you create an {@link
-android.media.AudioTrack} with a specific session ID. New {@link
-android.media.AudioTrack#attachAuxEffect(int) attachAuxEffect()}, {@link
-android.media.AudioTrack#getAudioSessionId() getAudioSessionId()}, and {@link
-android.media.AudioTrack#setAuxEffectSendLevel(float) setAuxEffectSendLevel()}
-methods.</li>
-<li>New {@link android.media.MediaPlayer#attachAuxEffect(int)
-attachAuxEffect()}, {@link android.media.MediaPlayer#getAudioSessionId()
-getAudioSessionId()}, {@link android.media.MediaPlayer#setAudioSessionId(int)
-setAudioSessionId(int)}, and {@link
-android.media.MediaPlayer#setAuxEffectSendLevel(float) setAuxEffectSendLevel()}
-methods and supporting types.</li>
-</ul>
-
-<p class="note">To look at sample code for audio effects, see
-<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.html">AudioFxDemo.java</a>
-in the ApiDemos sample application.</p>
-
-<p>The media framework also adds:</p>
-<ul>
-<li>New support for altitude tag in EXIF metadata for JPEG files. New method
-{@link android.media.ExifInterface#getAltitude(double) getAltitude()} method to
-retrieve the value of the EXIF altitude tag.</li>
-<li>New {@link android.media.MediaRecorder#setOrientationHint(int)
-setOrientationHint()} method lets an application tell {@link
-android.media.MediaRecorder} of the orientation during video capture.</li>
-</ul>
-
-<h3 id="download">Download manager</h3>
-
-<p>The platform includes a new {@link android.app.DownloadManager} system service
-that handles long-running HTTP downloads. Applications can request that a URI be
-downloaded to a particular destination file. The <code>DownloadManager</code>
-will conduct the download in the background, taking care of HTTP interactions
-and retrying downloads after failures or across connectivity changes and system
-reboots. </p>
-<ul>
-<li>Applications can obtain an instance of the {@link android.app.DownloadManager}
-class by calling {@link
-android.content.Context#getSystemService(String)} and passing
-{@link android.content.Context#DOWNLOAD_SERVICE}. Applications that request 
-downloads through this API should register a broadcast receiver for {@link
-android.app.DownloadManager#ACTION_NOTIFICATION_CLICKED}, to appropriately
-handle when the user clicks on a running download in a notification or from the
-Downloads UI.</li>
-<li>The {@link android.app.DownloadManager.Request} class lets an
-application provide all the information necessary to request a new download,
-such as request URI and download destination. A request URI is the only required
-parameter. Note that the default download destination is a shared volume where
-the system can delete your file if it needs to reclaim space for system use. For
-persistent storage of a download, specify a download destination on external
-storage (see {@link
-android.app.DownloadManager.Request#setDestinationUri(Uri)}).</li>
-<li>The {@link android.app.DownloadManager.Query} class provides methods that let
-an application query for and filter active downloads.</li>
-</ul>
-
-<h3 id="strictmode">StrictMode</h3>
-
-<p>To help developers monitor and improve the performance of their applications,
-the platform offers a new system facility called {@link android.os.StrictMode}.
-When implemented in an application, StrictMode catches and notifies the
-developer of accidental disk or network activity that could degrade application
-performance, such as activity taking place on the application's main thread
-(where UI operations are received and animations are also taking place).
-Developers can evaluate the network and disk usages issues raised in StrictMode
-and correct them if needed, keeping the main thread more responsive and
-preventing ANR dialogs from being shown to users.
-
-<ul>
-<li>{@link android.os.StrictMode} is the core class and is the main integration
-point with the system and VM. The class provides convenience methods for
-managing the thread and VM policies that apply to the instance.</li>
-<li>{@link android.os.StrictMode.ThreadPolicy} and {@link
-android.os.StrictMode.VmPolicy} hold the policies that you define and apply to
-thread and VM instances.</li>
-</ul>
-
-<p>For more information about how to use StrictMode to optimize your
-application, see the class documentation and sample code at {@link
-android.os.StrictMode android.os.StrictMode}.</p>
-
-<h3 id="ui">UI Framework</h3>
-
-<ul>
-<li>Support for overscroll
-<ul>
-<li>New support for overscroll in Views and Widgets. In Views, applications can
-enable/disable overscroll for a given view, set the overscoll mode, control the
-overscroll distance, and handle the results of overscrolling. </li>
-<li>In Widgets, applications can control overscroll characteristics such as
-animation, springback, and overscroll distance. For more information, see {@link
-android.view.View android.view.View} and {@link android.widget.OverScroller
-android.widget.OverScroller}. </li>
-<li>{@link android.view.ViewConfiguration} also provides methods {@link
-android.view.ViewConfiguration#getScaledOverflingDistance()} and {@link
-android.view.ViewConfiguration#getScaledOverscrollDistance()}.</li>
-<li>New <code>overScrollMode</code>, <code>overScrollFooter</code>, and
-<code>overScrollHeader</code> attributes for <code>&lt;ListView&gt;</code> elements,
-for controlling overscroll behavior.</li>
-</ul>
-</li>
-
-<li>Support for touch filtering
-<ul>
-<li>New support for touch filtering, which lets an application improve the
-security of Views that provide access to sensitive functionality. For example,
-touch filtering is appropriate to ensure the security of user actions such as
-granting a permission request, making a purchase, or clicking on an
-advertisement. For details, see the <a
-href="{@docRoot}reference/android/view/View.html#Security">View class
-documentation</a>.</li>
-<li>New <code>filterTouchesWhenObscured</code> attribute for view elements,
-which declares whether to filter touches when the view's window is obscured by
-another visible window. When set to <code>"true"</code>, the view will not
-receive touches whenever a toast, dialog or other window appears above the
-view's window. Refer to <a
-href="{@docRoot}reference/android/view/View.html#Security">View security
-documentation</a> for details.</li>
-</ul>
-
-<p class="note">To look at sample code for touch filtering, see
-<a href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/SecureView.html">SecureView.java</a>
-in the ApiDemos sample application.</p>
-</li>
-
-<li>Improved event management
-<ul>
-<li>New base class for input events, {@link android.view.InputEvent}. The class
-provides methods that let applications determine the meaning of the event, such
-as by querying for the InputDevice from which the event orginated. The {@link
-android.view.KeyEvent} and {@link android.view.MotionEvent} are subclasses of
-{@link android.view.InputEvent}.</li>
-<li>New base class for input devices, {@link android.view.InputDevice}. The
-class stores information about the capabilities of a particular input device and
-provides methods that let applications determine how to interpret events from an
-input device.</li>
-</ul>
-</li>
-
-<li>Improved motion events
-<ul>
-<li>The {@link android.view.MotionEvent} API is extended to include "pointer ID"
-information, which lets applications to keep track of individual fingers as they
-move up and down. The class adds a variety of methods that let an application
-work efficiently with motion events.</li>
-<li>The input system now has logic to generate motion events with the new
-pointer ID information, synthesizing identifiers as new pointers are down. The
-system tracks multiple pointer IDs separately during a motion event, and
-ensures proper continuity of pointers by evaluating at the distance
-between the last and next set of pointers.</li>
-</ul>
-</li>
-
-<li>Text selection controls
-<ul>
-<li>A new <code>setComposingRegion</code> method lets an application mark a
-region of text as composing text, maintaining the current styling. A
-<code>getSelectedText</code> method returns the selected text to the
-application. The methods are available in {@link
-android.view.inputmethod.BaseInputConnection}, {@link
-android.view.inputmethod.InputConnection}, and {@link
-android.view.inputmethod.InputConnectionWrapper}.</li>
-<li>New <code>textSelectHandle</code>, <code>textSelectHandleLeft</code>,
-<code>textSelectHandleRight</code>, and <code>textSelectHandleWindowStyle</code>
-attributes for <code>&lt;TextView&gt;</code>, for referencing drawables that will be
-used to display text-selection anchors and the style for the containing
-window.</li>
-</ul>
-</li>
-
-<li>Activity controls
-<ul>
-<li>{@link android.content.pm.ActivityInfo} adds new constants for managing
-Activity orientation:
-{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_FULL_SENSOR},
-{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_LANDSCAPE},
-{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_REVERSE_PORTRAIT},
-{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_LANDSCAPE},
-and
-{@link android.content.pm.ActivityInfo#SCREEN_ORIENTATION_SENSOR_PORTRAIT}.
-</li>
-<li>New constant {@link
-android.app.ActivityManager.RunningAppProcessInfo#IMPORTANCE_PERCEPTIBLE} for
-the {@link android.app.ActivityManager.RunningAppProcessInfo#importance} field
-in {@link android.app.ActivityManager.RunningAppProcessInfo}. The value
-indicates that a specific process is running something that is considered to be
-actively perceptible to the user. An example would be an application performing
-background music playback.</li>
-<li>The Activity.setPersistent(boolean) method to mark an
-Activity as persistent is now deprecated and the implementation is a no-op.</li>
-</ul>
-</li>
-
-<li>Notification text and icon styles
-<ul>
-<li>New {@link android.R.style#TextAppearance_StatusBar_EventContent
-TextAppearance.StatusBar.EventContent},
-{@link android.R.style#TextAppearance_StatusBar_EventContent_Title
-TextAppearance.StatusBar.EventContent.Title},
-{@link android.R.style#TextAppearance_StatusBar_Icon
-TextAppearance.StatusBar.Icon}, and
-{@link android.R.style#TextAppearance_StatusBar_Title
-TextAppearance.StatusBar.Title} for managing
-notification style.</li>
-</ul>
-</li>
-
-<li>WebView
-<ul>
-<li>New {@link
-android.webkit.WebSettings#setUseWebViewBackgroundForOverscrollBackground(
-boolean) setUseWebViewBackgroundForOverscrollBackground()} method lets a {@link
-android.webkit.WebView} specify whether to use its own background for the
-overscroll background. </li>
-</ul>
-</li>
-</ul>
-
-<h3 id="extralargescreens">Extra Large Screens</h3>
-
-<p>The platform now supports extra large screen sizes, such as those that might
-be found on tablet devices. Developers can indicate that their applications are
-designed to support extra large screen sizes by adding a <code>&lt;supports
-screens ... android:xlargeScreens="true"&gt;</code> element to their manifest
-files. Applications can use a new resource qualifier, <code>xlarge</code>, to
-tag resources that are specific to extra large screens. For
-details on how to support extra large and other screen sizes, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
-
-<h3 id="graphics">Graphics</h3>
-
-<ul>
-<li>Adds remaining OpenGL ES 2.0 methods {@link
-android.opengl.GLES20#glDrawElements(int, int, int, int) glDrawElements()} and
-{@link android.opengl.GLES20#glVertexAttribPointer(int, int, int, boolean, int,
-int) glVertexAttribPointer()} in the {@link android.opengl.GLES20
-android.opengl.GLES20} class.</li>
-<li>Adds support for {@link android.graphics.ImageFormat#YV12} pixel format, a
-planar 4:2:0 YCrCb format.</li>
-</ul>
-
-<h3 id="providers">Content Providers</h3>
-
-<ul>
-<li>New {@link android.provider.AlarmClock} provider class for setting an alarm
-or handling an alarm. The provider contains a <code>ACTION_SET_ALARM</code> Intent
-action and extras that can be used to start an Activity to set a new alarm in an
-alarm clock application. Applications that wish to receive the
-<code>SET_ALARM</code> Intent should create an activity that requires the
-the SET_ALARM permission. Applications that wish to create a new
-alarm should use {@link
-android.content.Context#startActivity(android.content.Intent)
-Context.startActivity()}, so that the user has the option of choosing
-which alarm clock application to use.</li>
-
-<li>{@link android.provider.MediaStore} supports a new Intent action, {@link
-android.provider.MediaStore#INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH
-PLAY_FROM_SEARCH}, that lets an application search for music media and
-automatically play content from the result when possible. For example, an
-application could fire this Intent as the result of a voice recognition command
-to listen to music.</li>
-<li>{@link android.provider.MediaStore} also adds a new {@link
-android.provider.MediaStore#MEDIA_IGNORE_FILENAME} flag that tells the media
-scanner to ignore media in the containing directory and its subdirectories.
-Developers can use this to avoid having graphics appear in the Gallery and
-likewise prevent application sounds and music from showing up in the Music
-app.</li>
-
-<li>The {@link android.provider.Settings} provider adds the new Activity actions
-{@link android.provider.Settings#ACTION_APPLICATION_DETAILS_SETTINGS
-APPLICATION_DETAILS_SETTINGS} and {@link
-android.provider.Settings#ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS
-MANAGE_ALL_APPLICATIONS_SETTINGS}, which let an application show the details
-screen for a specific application or show the Manage Applications screen. </li>
-
-<li>The {@link android.provider.ContactsContract} provider adds the {@link
-android.provider.ContactsContract.CommonDataKinds.SipAddress} data kind, for
-storing a contact's SIP (Internet telephony) address. </li>
-</ul>
-
-<h3 id="location">Location</h3>
-
-<ul>
-<li>The {@link android.location.LocationManager} now tracks application
-requests that result in wake locks or wifi locks according to
-{@link android.os.WorkSource}, a system-managed class that identifies the
-application.
-<p>The <code>LocationManager</code> keeps track
-of all clients requesting periodic updates, and tells its providers
-about them as a <code>WorkSource</code> parameter, when setting their minimum
-update times.
-The network location provider uses <code>WorkSource</code> to track the
-wake and wifi locks initiated by an application and adds it to the application's
-battery usage reported in Manage Applications. </p></li>
-<li>The {@link android.location.LocationManager} adds several new methods that
-let an Activity register to receive periodic or one-time location updates based
-on specified criteria (see below).</li>
-<li>A new  {@link android.location.Criteria} class lets an application specify a
-set of criteria for selecting a location provider. For example, providers may be
-ordered according to accuracy, power usage, ability to report altitude, speed,
-and bearing, and monetary cost. </li>
-</ul>
-
-<h3 id="storage">Storage</h3>
-
-<ul>
-<li>Android 2.3 adds a new {@link android.os.storage.StorageManager} that
-supports OBB (Opaque Binary Blob) files. Although platform support for OBB is
-available in Android 2.3, development tools for creating and managing OBB files
-will not be availble until early 2011.</li>
-<li>The Android 2.3 platform adds official support for devices that do not
-include SD cards (although it provides virtual SD Card partition, when no
-physical SD card is available). A convenience method, {@link
-android.os.Environment#isExternalStorageRemovable()}, lets applications
-determine whether a physical SD card is present.</li>
-</ul>
-
-<h3 id="packagemanager">Package Manager</h3>
-
-<ul>
-<li>New constants for declaring hardware and software features. See the list in
-the <a href="#feature_constants">New Feature Constants</a> section, below.</li>
-<li>{@link android.content.pm.PackageInfo} adds new {@link
-android.content.pm.PackageInfo#firstInstallTime} and {@link
-android.content.pm.PackageInfo#lastUpdateTime} fields that store the time of the
-package installation and last update. </li>
-<li>New {@link
-android.content.pm.PackageManager#getProviderInfo(android.content.ComponentName,
-int) getProviderInfo()} method for retrieving all of the information known about
-a particular content provider class.</li>
-</ul>
-
-<h3 id="telephony">Telephony</h3>
-
-<ul>
-<li>The {@link android.telephony.TelephonyManager} adds the constant {@link
-android.telephony.TelephonyManager#NETWORK_TYPE_EVDO_B} for specifying the CDMA
-EVDO Rev B network type.</li>
-<li>New {@link android.telephony.gsm.GsmCellLocation#getPsc()} method returns
-the primary scrambling code of the serving cell on a UMTS network.</li>
-</ul>
-
-<h3 id="native">Native access to Activity lifecycle, windows</h3>
-
-<p>Android 2.3 exposes a broad set of APIs to applications that use native
-code. Framework classes of interest to such applications include: </p>
-
-<ul>
-<li>{@link android.app.NativeActivity} is a new type of Activity class, whose
-lifecycle callbacks are implemented directly in native code. A
-<code>NativeActivity</code> and its underlying native code run in the system
-just as do other Activities &mdash; specifically they run in the Android
-application's system process and execute on the application's main UI thread,
-and they receive the same lifecycle callbacks as do other Activities. </li>
-<li>New {@link android.view.InputQueue} class and callback interface lets native
-code manage event queueing. </li>
-<li>New {@link android.view.SurfaceHolder.Callback2} interface lets native code
-manage a {@link android.view.SurfaceHolder}. </li>
-<li>New {@link
-android.view.Window#takeInputQueue(android.view.InputQueue.Callback)
-takeInputQueue} and {@link
-android.view.Window#takeSurface(android.view.SurfaceHolder.Callback2)
-takeSurface()} methods in {@link android.view.Window} let native code manage
-events and surfaces.</li>
-</ul>
-
-<p>For full information on working with native code or to download the NDK,
-see the <a href="{@docRoot}sdk/ndk/index.html">Android NDK</a> page.</p>
-
-
-<h3 id="dalvik">Dalvik Runtime</h3>
-
-<ul>
-<li>{@link dalvik.system dalvik.system}
-removes several classes that were previously deprecated.</li>
-<li>Dalvik core libraries:
-<ul>
-  <li>New collections: {@link java.util.ArrayDeque}, {@link java.util.NavigableMap},
-  {@link java.util.concurrent.ConcurrentSkipListMap},
-  {@link java.util.concurrent.LinkedBlockingDeque}</li>
-  <li>New {@link java.util.Arrays} utilities: <code>binarySearch()</code>,
-  <code>copyOf()</code>, <code>copyOfRange()</code>, and others.</li>
-  <li>{@link java.net.CookieManager} for {@link java.net.HttpURLConnection}.</li>
-  <li>More complete network APIs: {@link java.net.InterfaceAddress},
-  {@link java.net.NetworkInterface} and {@link java.net.IDN}</li>
-  <li>{@link java.io.File} read and write controls</li>
-  <li>{@link java.lang.String#isEmpty() String.isEmpty()}</li>
-  <li>{@link java.text.Normalizer} and {@link java.text.Normalizer.Form}</li>
-  <li>Improved {@link javax.net.ssl} server sockets.</li>
-</ul>
-</li>
-</ul>
-
-<h3 id="manifest">New manifest elements and attributes</h3>
-
-<ul>
-<li>New <code>xlargeScreens</code> attribute for <a
-href="{@docRoot}guide/topics/manifest/supports-screens-element.html">{@code
-&lt;supports-screens&gt;}</a>
-element, to indicate whether the application supports
-extra large screen form-factors. For details, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</li>
-<li>New values for <code>android:screenOrientation</code> attribute of
-<code>&lt;activity&gt;</code> element:
-<ul>
-<li><code>"reverseLandscape"</code> &mdash; The Activity would like to have the
-screen in landscape orientation, turned in the opposite direction from normal
-landscape.</li>
-<li><code>"reversePortrait"</code> &mdash; The Activity would like to have the
-screen in portrait orientation, turned in the opposite direction from normal
-portrait.</li>
-<li><code>"sensorLandscape"</code> &mdash; The Activity would like to have the
-screen in landscape orientation, but can use the sensor to change which
-direction the screen is facing.</li>
-<li><code>"sensorPortrait"</code> &mdash; The Activity would like to have the
-screen in portrait orientation, but can use the sensor to change which direction
-the screen is facing.</li>
-<li><code>"fullSensor"</code> &mdash; Orientation is determined by a physical
-orientation sensor: the display will rotate based on how the user moves the
-device. This allows any of the 4 possible rotations, regardless of what the
-device will normally do (for example some devices won't normally use 180 degree
-rotation).</li>
-</ul>
-</li>
-</ul>
-
-<h3 id="permissions">New Permissions</h3>
-
-<ul>
-<li><code>com.android.permission.SET_ALARM</code> &mdash; Allows an application
-to broadcast an Intent to set an alarm for the user. An Activity that handles
-the {@link android.provider.AlarmClock#ACTION_SET_ALARM SET_ALARM} Intent action
-should require this permission.</li>
-<li><code>android.permission.USE_SIP</code> &mdash; Allows an application to use
-the {@link android.net.sip SIP API} to make or receive internet calls.
-<li><code>android.permission.NFC</code> &mdash; Allows an application to use the
-{@link android.nfc NFC API} to read NFC tags.</li>
-</ul>
-
-<h3 id="feature_constants">New Feature Constants</h3>
-
-<p>The platform adds several new hardware features that developers can declare
-in their application manifests as being required by their applications. This
-lets developers control how their application is filtered, when published on
-Google Play. </p>
-
-<ul>
-<li>{@link android.content.pm.PackageManager#FEATURE_AUDIO_LOW_LATENCY
-android.hardware.audio.low_latency} &mdash; The application uses a low-latency
-audio pipeline on the device and is sensitive to delays or lag in sound input or
-output.</li>
-<li>{@link android.content.pm.PackageManager#FEATURE_CAMERA_FRONT
-android.hardware.camera.front} &mdash; The application uses a front-facing
-camera on the device.</li>
-<li>{@link android.content.pm.PackageManager#FEATURE_NFC android.hardware.nfc}
-&mdash; The application uses NFC radio features in the device.</li>
-<li>{@link android.content.pm.PackageManager#FEATURE_SENSOR_BAROMETER
-android.hardware.sensor.barometer} &mdash; The application uses the device's
-barometer.</li>
-<li>{@link android.content.pm.PackageManager#FEATURE_SENSOR_GYROSCOPE
-android.hardware.sensor.gyroscope} &mdash; The application uses the device's
-gyroscope sensor.</li>
-<li>{@link android.content.pm.PackageManager#FEATURE_SIP android.software.sip}
-&mdash; The application uses the SIP API on the device.</li>
-<li>{@link android.content.pm.PackageManager#FEATURE_SIP_VOIP
-android.software.sip.voip} &mdash; The application uses a SIP-based VoIP
-service on the device.</li>
-<li>{@link
-android.content.pm.PackageManager#FEATURE_TOUCHSCREEN_MULTITOUCH_JAZZHAND
-android.hardware.touchscreen.multitouch.jazzhand} &mdash; The application uses
-advanced multipoint multitouch capabilities on the device screen, for tracking
-five or more points fully independently.</li>
-</ul>
-
-<p>For full information about how to declare features and use them for
-filtering, see the documentation for <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>.</p>
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
-Level {@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>.</p>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
-you need compile the application against the Android library that is provided in
-the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
-also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
-attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
-manifest. If your application is designed to run only on Android 2.3 and higher,
-declaring the attribute prevents the application from being installed on earlier
-versions of the platform.</p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Contacts</li>
-<li>Cusom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gallery</li>
-<li>IMEs for Japanese, Chinese, and Latin text input</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>Phone</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Spare Parts (developer app)</li>
-<li>Speech Recorder</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android {@sdkPlatformVersion} system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian-Bokmol, Norway(nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes a set of emulator skins that you can use
-for modeling your application in different screen sizes and resolutions. The
-emulator skins are:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA400 (240x400, low density, normal screen)
-  </li>
-  <li>
-    WQVGA432 (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
diff --git a/docs/html/sdk/android-3.0-highlights.jd b/docs/html/sdk/android-3.0-highlights.jd
deleted file mode 100644
index 33897de..0000000
--- a/docs/html/sdk/android-3.0-highlights.jd
+++ /dev/null
@@ -1,263 +0,0 @@
-page.title=Android 3.0 Platform Highlights
-
-@jd:body
-
-
-<style type="text/css">
-#jd-content {
-  max-width:1200px;
-}
-#jd-content div.screenshot {
-  float:left;
-  clear:left;
-  padding:15px 30px 15px 0;
-}
-#jd-content div.video {
-  float:right;
-  padding:0 60px 40px;
-  margin-top:-15px;
-}
-#jd-content table.columns {
-  margin:0 0 1em 0;
-}
-#jd-content table.columns td {
-  padding:0;
-}
-#jd-content table.columns td+td {
-  padding:0 2em;
-}
-#jd-content table.columns td img {
-  margin:0;
-}
-#jd-content table.columns td+td>*:first-child {
-  margin-top:-2em;
-}
-.green {
-  color:#8db529;
-  font-weight:bold;
-}
-</style>
-
-
-<p>Welcome to Android 3.0!</p>
-
-<p>The Android 3.0 platform introduces many new and exciting features for users and developers. 
-This document provides a glimpse of some of the new features and technologies, as delivered in
-Android 3.0. For a more detailed look at new developer APIs, see the <a
-href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
-
-<ul>
-  <li><a href="#UserFeatures">New User Features</a></li>
-  <li><a href="#DeveloperApis">New Developer Features</a></li>
-</ul>
-
-<h2 id="UserFeatures" style="clear:right">New User Features</h2>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a href="images/3.0/home_hero1_full.png" target="_android"><img src="images/3.0/home_hero1.png" alt="" height="280" /></a></div>
-
-<h3>New UI designed from the ground up for tablets</h3>
-
-<p>Android 3.0 is a new version of the Android platform that is specifically optimized for devices with larger screen sizes, particularly tablets. It introduces a brand new, truly virtual and “holographic” UI design, as well as an elegant, content-focused interaction model.</p>
-
-<p>Android 3.0 builds on the things people love most about Android &mdash; refined multitasking, rich notifications, Home screen customization, widgets, and more &mdash; and transforms them with a vibrant, 3D experience and deeper interactivity, making them familiar but even better than before.</p> 
-
-<p>The new UI brings fresh paradigms for interaction, navigation, and customization and makes them available to all applications &mdash; even those built for earlier versions of the platform. Applications written for Android 3.0 are able to use an extended set of UI objects, powerful graphics, and media capabilities to engage users in new ways.</p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>System Bar, for global status and notifications</strong></p>
-
-<p>Across the system and in all applications, users have quick access to notifications, system status, and soft navigation buttons in a System Bar, available at the bottom of the screen. The System Bar is always present and is a key touchpoint for users, but in a new "lights out mode" can also be dimmed for full-screen viewing, such as for videos.</p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Action Bar, for application control</strong></p>
-
-<p>In every application, users have access to contextual options, navigation, widgets, or other types of content in an Action Bar, displayed at the top of the screen. The Action Bar is always present when an application is in use, although its content, theme, and other properties are managed by the application rather than the system. The Action Bar is another key touchpoint for users, especially with action items and an overflow dropdown menu, which users frequently access in a similar manner in most applications. </p>
-
-</div>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/homescreen_cust_port_full.png" target="_android"><img src="images/3.0/homescreen_cust_port.png" alt="" height="280" /></a></div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Customizable Home screens</strong></p>
-
-<p>Five customizable Home screens give users instant access to all parts of the system from any context. Each screen offers a large grid that maintains spatial arrangement in all orientations. Users can select and manipulate Home screen widgets, app shortcuts, and wallpapers using a dedicated visual layout mode. Visual cues and drop shadows improve visibility when adjusting the layout of shortcuts and widgets. Each Home screen also offers a familiar launcher for access to all installed applications, as well as a Search box for universal search of apps, contacts, media files, web content, and more.</p>
-
-</div>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1.5em;float:left;"><a href="images/3.0/tasks_full.png" target="_android"><img src="images/3.0/tasks.png" alt="" height="280" /></a>
-
-<!--<p style="font-size:90%">Figure</p> --></div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Recent Apps, for easy visual multitasking</strong></p>
-
-<p>Multitasking is a key strength of Android and it is central to the Android 3.0 experience. As users launch applications to handle various tasks, they can use the Recent Apps list in the System Bar to see the tasks underway and quickly jump from one application context to another. To help users rapidly identify the task associated with each app, the list shows a snapshot of its actual state when the user last viewed it.</p>
-
-</div>
-
-
-<h3>Redesigned keyboard</h3>
-
-<p>The Android soft keyboard is redesigned to make entering text fast and accurate on larger screen sizes. The keys are reshaped and repositioned for improved targeting, and new keys have been added, such as a Tab key, to provide richer and more efficient text input. Users can touch-hold keys to access menus of special characters and switch text/voice input modes from a button in the System Bar.</p>
-
-<div  style="padding-top:1em;">
-<div style="margin-right:1em;float:right;"><a href="images/3.0/copy_full.png" target="_android"><img src="images/3.0/copy.png" alt="" height="180" /></a></div>
-
-
-<h3>Improved text selection, copy and paste</h3>
-
-<p>When entering or viewing text, a new UI lets users quickly select a word by press-hold and then adjust the selection area as needed by dragging a set of bounding arrows to new positions. Users can then select an action from the Action Bar, such as copy to the clipboard, share, paste, web search, or find. </p>
-
-
-<h3>New connectivity options</h3>
-
-<p>Android 3.0 includes new connectivity features that add versatility and convenience for users. Built-in support for Media/Picture Transfer Protocol lets users instantly sync media files with a USB-connected camera or desktop computer, without needing to mount a USB mass-storage device. Users can also connect full keyboards over either USB or Bluetooth, for a familiar text-input environment. For improved wi-fi connectivity, a new combo scan reduces scan times across bands and filters. New support for Bluetooth tethering means that more types of devices can share the network connection of an Android-powered device.</p>
-
-
-<h3>Updated set of standard apps</h3>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;;padding-top:0em;margin-left:1em;"><a href="images/3.0/browser_full.png" target="_android"><img src="images/3.0/browser.png" alt="" height="200" /></a><br>
-<a href="images/3.0/camera_full.png" target="_android"><img src="images/3.0/camera.png" alt="" height="200" /></a></div>
-
-<p>The Android 3.0 platform includes an updated set of standard applications that are designed for use on larger screen devices. The sections below highlight some of the new features. </p>
-
-<strong>Browser</strong></p>
-
-<p>The browser includes new features that let users navigate and organize more efficiently. Multiple tabs replace browser windows and a new “incognito” mode allows anonymous browsing. Bookmarks and history are presented and managed in a single unified view. Users can now choose to automatically sign into Google sites on the browser with a supplied account and sync bookmarks with Google Chrome. New multitouch support is now available to JavaScript and plugins. Users can enjoy a better browsing experience at non-mobile sites through an improved zoom and viewport model, overflow scrolling, support for fixed positioning, and more.</p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Camera and Gallery</strong></p>
-
-<p>The Camera application has been redesigned to take advantage of a larger screen for quick access to exposure, focus, flash, zoom, front-facing camera, and more. To let users capture scenes in new ways, it adds built-in support for time-lapse video recording. The Gallery application lets users view albums and other collections in full-screen mode, with easy access to thumbnails for other photos in the collection. </p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Contacts</strong></p>
-
-<p>The Contacts app uses a new two-pane UI and Fast Scroll to let users easily organize and locate contacts. The application offers improved formatting of international phone numbers as user types, based on home country and an international  number parsing library. Contact information is presented in a card-like UI, making it easier for users to read and edit contacts.</p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Email</strong></p>
-
-<p>The Email application uses a new two-pane UI to make viewing and organizing messages more efficient. The app lets users select one or more messages, then select an action from the Action Bar, such as moving them to a folder. Users can sync attachments for later viewing and keep track of email using a home screen Widget.</p>
-
-</div>
-
-
-<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
-
-<p>The Android 3.0 platform is designed specially to meet the unique needs of applications on devices with larger screen sizes. It offers all of the tools developers need to create incredible visual and interaction experiences on these devices.</p>
-
- <ul>
-<li><a href="#ui">New UI framework for creating great tablet apps</a></li>
-<li><a href="#graphics">High-performance 2D and 3D graphics</a></li>
-<li><a href="#multicore">Support for multicore processor architectures</a></li>
-<li><a href="#multimedia">Rich multimedia and connectivity</a></li>
-<li><a href="#enterprise">Enhancements for enterprise</a></li>
-<li><a href="#compatibility">Compatibility with existing apps</a></li>
-</ul>
-
-<h3 id="ui">New UI Framework for creating great tablet apps</h3>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/contacts_full.png" target="_android"><img src="images/3.0/contacts.png" alt="" height="200" /></a></div>
-
-
-<p style="margin-top:.75em;margin-bottom:.75em;"><strong>Activity fragments, for greater control of content and design flexibility</strong></p>
-
-<p>Starting with Android 3.0, developers can break the Activities of their applications into subcomponents called Fragments, then combine them in a variety of ways to create a richer, more interactive experience. For example, an application can use a set of Fragments to create a true multipane UI, with the user being able to interact with each pane independently. Fragments can be added, removed, replaced, and animated inside an Activity dynamically, and they are modular and reusable across multiple Activities. Because they are modular, Fragments also offer an efficient way for developers to write applications that can run properly on both larger screen as well as smaller screen devices.</p>
-
-</div>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Redesigned UI widgets</strong></p>
-
-<p>Android 3.0 offers an updated set of UI widgets that developers can use to quickly add new types of content to their applications. The new UI widgets are redesigned for use on larger screens such as tablets and incorporate the new holographic UI theme. Several new widget types are available, including a 3D stack, search box, a date/time picker, number picker, calendar, popup menu, and others. Most of the redesigned UI widgets can now be used as remote views in application widgets displayed on the home screen. Applications written for earlier versions can inherit the new Widget designs and themes.</p>
-
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1.5em;float:left;margin-left:0em;"><a href="images/3.0/widgets.png" target="_android"><img src="images/3.0/widgets.png" alt="" height="200"  target="_android" /></a></div>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Expanded Home screen widgets</strong></p>
-
-<p>Home screen widgets are popular with users because they offer fast access to application-specific data directly from the home screen. Android 3.0 lets developers take home screen widgets to the next level, offering more types of content and new modes of interaction with users. Developers can now use more standard UI widget types  home screen widgets, including widgets that let users flip through collections of content as 3D stacks, grids, or lists. Users can interact with the home screen widgets in new ways, such as by using touch gestures to scroll and flip the content displayed in a widget.  </p>
-
-</div>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Persistent Action Bar</strong></p>
-
-<p>The platform provides each application with its own instance of the Action Bar at the top of the screen, which the application can use to give the user quick access to contextual options, widgets, status, navigation, and more. The application can also customize the display theme of its Action Bar instance. The Action Bar lets developers expose more features of their applications to users in a familiar location, while also unifying the experience of using an application that spans multiple Activities or states.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Richer notifications</strong></p>
-
-<p>Notifications are a key part of the Android user experience because they let applications show key updates and status information to users in real time. Android 3.0 extends this capability, letting developers include richer content and control more properties. A new builder class lets developers quickly create notifications that include large and small icons, a title, a priority flag, and any properties already available in previous versions. Notifications can offer more types of content by building on the expanded set of UI Widgets that are now available as remote Views.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;"><a href="images/3.0/mail_drag_full.png" target="_android"><img src="images/3.0/mail_drag.png" alt="" height="200" style="padding-top:1em;"/></a></div>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Multiselect, clipboard, and drag-and-drop</strong></p>
-
-<p>The platform offers convenient new interaction modes that developers can use. For managing collections of items in lists or grids, developers can offer a new multiselect mode that lets users choose multiple items for an action. Developers can also use a new system-wide Clipboard to let users easily copy any type of data into and out of their applications. To make it easier for users to manage and organize files, developers can now add drag-and-drop interaction through a DragEvent framework.</p>
-
-</div>
-
-
-<h3 id="graphics">High-performance 2D and 3D graphics</h3>
-
-<p style="margin-top:.75em;margin-bottom:.75em;"><strong>New animation framework</strong></p>
-
-<p>The platform includes a flexible new animation framework that lets developers easily animate the properties of UI elements such as Views, Widgets, Fragments, Drawables, or any arbitrary object. Animations can create fades or movement between states, loop an animated image or an existing animation, change colors, and much more. Adding animation to UI elements can add visual interest to an application and refine the user experience, to keep users engaged.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Hardware-accelerated 2D graphics</strong></p>
-
-<p>Android 3.0 offers a new hardware-accelerated OpenGL renderer that gives a performance boost to many common graphics operations for applications running in the Android framework. When the renderer is enabled, most operations in Canvas, Paint, Xfermode, ColorFilter, Shader, and Camera are accelerated. Developers can control how hardware-acceleration is applied at every level, from enabling it globally in an application to enabling it in specific Activities and Views inside the application.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Renderscript 3D graphics engine</strong></p>
-
-<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well as a special, platform-independent shader language for maximum performance. Using Renderscript, you can accelerate graphics operations and data processing. Renderscript is an ideal way to create high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
-
-
-<h3 id="multicore">Support for multicore processor architectures</h3>
-
-<p>Android 3.0 is the first version of the platform designed to run on either single or multicore processor architectures. A variety of changes in the Dalvik VM, Bionic library, and elsewhere add support for symmetric multiprocessing in multicore environments. These optimizations can benefit all applications, even those that are single-threaded. For example, with two active cores, a single-threaded application might still see a performance boost if the Dalvik garbage collector runs on the second core. The system will arrange for this automatically.</p>
-
-
-<h3 id="multimedia">Rich multimedia and connectivity</h3>
-
-<p style="margin-top:.75em;margin-bottom:.75em;"><strong>HTTP Live streaming</strong></p>
-
-<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live streaming session. The media framework supports most of the HTTP Live streaming specification, including adaptive bit rate.</p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Pluggable DRM framework</strong></p>
-
-<p>Android 3.0 includes an extensible DRM framework that lets applications manage protected content according to a variety of DRM mechanisms that may be available on the device. For application developers, the framework API offers an consistent, unified API that simplifies the management of protected content, regardless of the underlying DRM engines. </p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>Digital media file transfer</strong></p>
-
-<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB, which lets users easily transfer any type of media files between devices and to a host computer. Developers can build on this support, creating applications that let users create or manage media files that they may want to transfer or share across devices. </p>
-
-<p style="margin-top:1.25em;margin-bottom:.75em;"><strong>More types of connectivity</strong></p>
-
-<p>The platform offers new connectivity that developers can build on. API support for Bluetooth A2DP and HSP profiles lets applications query Bluetooth profiles for connected devices, audio state, and more, then notify the user. For example, a music application can check connectivity and status and let the user know that music is playing through a stereo headset. Applications can also register to receive system broadcasts of pre-defined vendor-specific AT commands, such as Platronics Xevent. For example, an application could receive broadcasts that indicate a connected device's battery level and could notify the user or take other action as needed. Applications can also take advantage of the platform's new support for full keyboards connected by USB or Bluetooth. </p>
-
-
-<h3 id="enterprise">Enhancements for enterprise</h3>
-
-<p>In Android 3.0, developers of device administration applications can support new types of policies, including policies for encrypted storage, password expiration, password history, and password complex characters required. </p>
-
-<h3 id="compatibility">Compatibility with existing apps</h3>
-
-<p>Android 3.0 brings a new UI designed for tablets and other larger screen devices, but it also is fully compatible with applications developed for earlier versions of the platform, or for smaller screen sizes. Existing applications can seamlessly participate in the new holographic UI theme without code changes, by adding a single attribute in their manifest files. The platform emulates the Menu key, which is replaced by the overflow menu in the Action Bar in the new UI. Developers wanting to take fuller advantage of larger screen sizes can also create dedicated layouts and assets for larger screens and add them to their existing applications.</p>
-
-
-<h2>More information</h2>
-
-<div class="video">
-<object width="278" height="180">
-<param name="movie" value="http://www.youtube.com/v/hPUGNCIozp0?hl=en&fs=1"></param>
-<param name="allowFullScreen" value="true"></param><param name="allowscriptaccess"
-value="always"></param>
-<embed src="http://www.youtube.com/v/hPUGNCIozp0?hl=en&fs=1" type="application/x-shockwave-flash"
-allowscriptaccess="always" allowfullscreen="true" width="278" height="180"></embed>
-</object>
-</div>
-
-<p>For more information about the new developer APIs, see the <a
-href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a> document.</p>
-
-<p>For a video overview of platform features, see the Android 3.0 Sneak Peek. </p>
diff --git a/docs/html/sdk/android-3.0.jd b/docs/html/sdk/android-3.0.jd
deleted file mode 100644
index 3acb358..0000000
--- a/docs/html/sdk/android-3.0.jd
+++ /dev/null
@@ -1,1186 +0,0 @@
-page.title=Android 3.0 Platform
-sdk.platform.version=3.0
-sdk.platform.apiLevel=11
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/11/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
-Handsets</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a downloadable
-component for the Android SDK. The downloadable platform includes an Android library and system
-image, as well as a set of emulator skins and more. The downloadable platform includes no external
-libraries.</p>
-
-<p>To get started developing or testing against Android {@sdkPlatformVersion}, use the Android SDK
-Manager to download the platform into your SDK. For more information, see <a
-href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
-
-<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
-href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
-Highlights</a>.</p>
-
-<p class="note"><strong>Note:</strong>
-If you've already published an Android application, please test and optimize your application on
-Android 3.0 as soon as possible. You should do so to be sure your application provides the best
-experience possible on the latest Android-powered devices. For information about what you can do,
-read <a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
-Handsets</a>.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>To determine what revision of the Android {@sdkPlatformVersion} platform you have installed,
-refer to the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
-
-
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
-higher.</p>
-</dd>
-<dt>Notes:</dt>
-<dd>
-<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
-Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
-bugs in the previous rendering library. It also unlocks several editor features that were added in
-ADT 12.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 1</a> <em>(February 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-    
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-
-
-<h2 id="#api">API Overview</h2>
-
-<p>The sections below provide a technical overview of what's new for developers in Android 3.0,
-including new features and changes in the framework API since the previous version.</p>
-
-
-
-
-
-<h3>Fragments</h3>
-
-<p>A fragment is a new framework component that allows you to separate distinct elements of an
-activity into self-contained modules that define their own UI and lifecycle. To create a
-fragment, you must extend the {@link android.app.Fragment} class and implement several lifecycle
-callback methods, similar to an {@link android.app.Activity}. You can then combine multiple
-fragments in a single activity to build a multi-pane UI in which each
-pane manages its own lifecycle and user inputs.</p>
-
-<p>You can also use a fragment without providing a UI and instead use the fragment as a worker
-for the activity, such as to manage the progress of a download that occurs only while the
-activity is running.</p>
-
-<p>Additionally:</p>
-
-<ul>
-  <li>Fragments are self-contained and you can reuse them in multiple activities</li>
-  <li>You can add, remove, replace and animate fragments inside the activity</li>
-  <li>You can add fragments to a back stack managed by the activity, preserving the state of
-fragments as they are changed and allowing the user to navigate backward through the different
-states</li>
-  <li>By <a
-href="{@docRoot}guide/topics/resources/providing-resources.html#AlternativeResources">providing
-alternative layouts</a>, you can mix and match fragments, based
-on the screen size and orientation</li>
-  <li>Fragments have direct access to their container activity and can contribute items to the
-activity's Action Bar (discussed next)</li>
-</ul>
-
-<p>To manage the fragments in your activity, you must use the {@link
-android.app.FragmentManager}, which provides several APIs for interacting with fragments, such
-as finding fragments in the activity and popping fragments off the back stack to restore their
-previous state.</p>
-
-<p>To perform a transaction, such as add or remove a fragment, you must create a {@link
-android.app.FragmentTransaction}. You can then call methods such as {@link
-android.app.FragmentTransaction#add add()} {@link android.app.FragmentTransaction#remove
-remove()}, or {@link android.app.FragmentTransaction#replace replace()}. Once you've applied all
-the changes you want to perform for the transaction, you must call {@link
-android.app.FragmentTransaction#commit commit()} and the system applies the fragment transaction to
-the activity.</p>
-
-<p>For more information about using fragments, read the <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> documentation. Several
-samples are also available in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#Fragment">
-API Demos</a> application.</p>
-
-
-
-
-<h3>Action Bar</h3>
-
-<p>The Action Bar is a replacement for the traditional title bar at the top of the activity window.
-It includes the application logo in the left corner and provides a new interface for items in the
-<a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>. Additionally, the
-Action Bar allows you to:</p>
-
-<ul>
-  <li>Add menu items directly in the Action Bar&mdash;as "action items."
-    <p>In your XML declaration for the menu item, include the {@code
-android:showAsAction} attribute with a value of {@code "ifRoom"}. When there's enough room, the menu
-item appears directly in the Action Bar. Otherwise, the item is placed in the
-overflow menu, revealed by the menu icon on the right side of the Action Bar.</p></li>
-
-  <li>Replace an action item with a widget (such as a search box)&mdash;creating an
-"action view."
-    <p>In the XML declaration for the menu item, add the {@code android:actionViewLayout} attribute
-with a layout resource or the {@code android:actionViewClass} attribute with the class name of a
-widget. (You must also declare the {@code android:showAsAction} attribute so that the item appears
-in the Action Bar.) If there's not enough room in the Action Bar and the item appears in the
-overflow menu, it behaves like a regular menu item and does not show the widget.</p></li>
-
-  <li>Add an action to the application logo and replace it with a custom logo
-    <p>The application logo is automatically assigned the {@code android.R.id.home} ID,
-which the system delivers to your activity's {@link android.app.Activity#onOptionsItemSelected
-onOptionsItemSelected()} callback when touched. Simply respond to this ID in your callback
-method to perform an action such as go to your application's "home" activity.</p>
-    <p>To replace the icon with a logo, specify your application logo in the manifest file with the
-<a href="{@docRoot}guide/topics/manifest/application-element.html#logo">{@code android:logo}</a>
-attribute, then call {@link android.app.ActionBar#setDisplayUseLogoEnabled
-setDisplayUseLogoEnabled(true)} in your activity.</p></li>
-
-  <li>Add breadcrumbs to navigate backward through the back stack of fragments</li>
-  <li>Add tabs or a drop-down list to navigate through fragments</li>
-  <li>Customize the Action Bar with themes and backgrounds</li>
-</ul>
-
-<p>The Action Bar is standard for all applications that use the new holographic theme, which is
-also standard when you set either the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-android:minSdkVersion}</a> or <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-android:targetSdkVersion}</a> to {@code "11"}.</p>
-
-<p>For more information about the Action Bar, read the <a
-href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> documentation. Several
-samples are also available in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/index.html#ActionBar">
-API Demos</a> application.</p>
-
-
-
-
-<h3>System clipboard</h3>
-
-<p>Applications can now copy and paste data (beyond mere text) to and from the system-wide
-clipboard. Clipped data can be plain text, a URI, or an intent.</p>
-
-<p>By providing the system access to the data you want the user to copy, through a content provider,
-the user can copy complex content (such as an image or data structure) from your application and
-paste it into another application that supports that type of content.</p>
-
-<p>To start using the clipboard, get the global {@link android.content.ClipboardManager} object
-by calling {@link android.content.Context#getSystemService getSystemService(CLIPBOARD_SERVICE)}.</p>
-
-<p>To copy an item to the clipboard, you need to create a new {@link
-android.content.ClipData} object, which holds one or more {@link android.content.ClipData.Item}
-objects, each describing a single entity. To create a {@link android.content.ClipData} object
-containing just one {@link android.content.ClipData.Item}, you can use one of the helper methods,
-such as {@link android.content.ClipData#newPlainText newPlainText()}, {@link
-android.content.ClipData#newUri newUri()}, and {@link android.content.ClipData#newIntent
-newIntent()}, which each return a {@link android.content.ClipData} object pre-loaded with the
-{@link android.content.ClipData.Item} you provide.</p>
-
-<p>To add the {@link android.content.ClipData} to the clipboard, pass it to {@link
-android.content.ClipboardManager#setPrimaryClip setPrimaryClip()} for your instance of {@link
-android.content.ClipboardManager}.</p>
-
-<p>You can then read a file from the clipboard (in order to paste it) by calling {@link
-android.content.ClipboardManager#getPrimaryClip()} on the {@link
-android.content.ClipboardManager}. Handling the {@link android.content.ClipData} you receive can
-be complicated and you need to be sure you can actually handle the data type in the clipboard
-before attempting to paste it.</p>
-
-<p>The clipboard holds only one piece of clipped data (a {@link android.content.ClipData}
-object) at a time, but one {@link android.content.ClipData} can contain multiple {@link
-android.content.ClipData.Item}s.</p>
-
-<p>For more information, read the <a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy
-and Paste</a> documentation. You can also see a simple implementation of copy and paste in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html">API Demos</a>
-and a more complete implementation in the <a
-href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> application.</p>
-
-
-
-
-<h3>Drag and drop</h3>
-
-<p>New APIs simplify drag and drop operations in your application's user interface. A drag
-operation is the transfer of some kind of data&mdash;carried in a {@link android.content.ClipData}
-object&mdash;from one place to another. The start and end point for the drag operation is a {@link
-android.view.View}, so the APIs that directly handle the drag and drop operations are
-in the {@link android.view.View} class.</p>
-
-<p>A drag and drop operation has a lifecycle that's defined by several drag actions&mdash;each
-defined by a {@link android.view.DragEvent} object&mdash;such as {@link
-android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
-{@link android.view.DragEvent#ACTION_DROP}. Each view that wants to participate in a drag
-operation can listen for these actions.</p>
-
-<p>To begin dragging content in your activity, call {@link android.view.View#startDrag startDrag()}
-on a {@link android.view.View}, providing a {@link android.content.ClipData} object that represents
-the data to drag, a {@link android.view.View.DragShadowBuilder} to facilitate the "shadow"
-that users see under their fingers while dragging, and an {@link java.lang.Object} that can share
-information about the drag object with views that may receive the object.</p>
-
-<p>To accept a drag object in a {@link android.view.View} (receive the "drop"), register the view
-with an {@link android.view.View.OnDragListener OnDragListener} by calling {@link
-android.view.View#setOnDragListener setOnDragListener()}. When a drag event occurs on the view, the
-system calls {@link android.view.View.OnDragListener#onDrag onDrag()} for the  {@link
-android.view.View.OnDragListener OnDragListener}, which receives a {@link android.view.DragEvent}
-describing the type of drag action has occurred (such as {@link
-android.view.DragEvent#ACTION_DRAG_STARTED}, {@link android.view.DragEvent#ACTION_DRAG_ENTERED}, and
-{@link android.view.DragEvent#ACTION_DROP}). During a drag, the system repeatedly calls {@link
-android.view.View.OnDragListener#onDrag onDrag()} for the view underneath the drag, to deliver a
-stream of drag events. The receiving view can inquire the event type delivered to {@link
-android.view.View#onDragEvent onDragEvent()} by calling {@link android.view.DragEvent#getAction
-getAction()} on the {@link android.view.DragEvent}.</p>
-
-<p class="note"><strong>Note:</strong> Although a drag event may carry a {@link
-android.content.ClipData} object, this is not related to the system clipboard. A drag and drop
-operation should never put the dragged data in the system clipboard.</p>
-
-<p>For more information, read the <a href="{@docRoot}guide/topics/ui/drag-drop.html">Dragging and
-Dropping</a> documentation. You can also see an implementation of drag and drop in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html">
-API Demos</a> application and the <a
-href="{@docRoot}resources/samples/HoneycombGallery/index.html">Honeycomb Gallery</a>
-application.</p>
-
-
-
-<h3>App widgets</h3>
-
-<p>Android 3.0 supports several new widget classes for more interactive app widgets on the users
-Home screen, including: {@link android.widget.GridView}, {@link android.widget.ListView}, {@link
-android.widget.StackView}, {@link android.widget.ViewFlipper}, and {@link
-android.widget.AdapterViewFlipper}.</p>
-
-<p>More importantly, you can use the new {@link android.widget.RemoteViewsService} to create app
-widgets with collections, using widgets such as {@link android.widget.GridView}, {@link
-android.widget.ListView}, and {@link android.widget.StackView} that are backed by remote data,
-such as from a content provider.</p>
-
-<p>The {@link android.appwidget.AppWidgetProviderInfo} class (defined in XML with an {@code
-&lt;appwidget-provider&gt;} element) also supports two new fields: {@link
-android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} and {@link
-android.appwidget.AppWidgetProviderInfo#previewImage}. The {@link
-android.appwidget.AppWidgetProviderInfo#autoAdvanceViewId} field lets you specify the view ID of the
-app widget subview that should be auto-advanced by the app widget’s host. The
-{@link android.appwidget.AppWidgetProviderInfo#previewImage} field specifies a preview of what the
-app widget looks like and is shown to the user from the widget picker. If this field is not
-supplied, the app widget's icon is used for the preview.</p>
-
-<p>To help create a preview image for your app widget (to specify in the {@link
-android.appwidget.AppWidgetProviderInfo#previewImage} field), the Android emulator includes an
-application called "Widget Preview." To create a preview image, launch this application, select the
-app widget for your application and set it up how you'd like your preview image to appear, then save
-it and place it in your application's drawable resources.</p>
-
-<p>You can see an implementation of the new app widget features in the <a
-href="{@docRoot}resources/samples/StackWidget/index.html">StackView App Widget</a> and <a
-href="{@docRoot}resources/samples/WeatherListWidget/index.html">Weather List Widget</a>
-applications.</p>
-
-
-
-<h3>Status bar notifications</h3>
-
-<p>The {@link android.app.Notification} APIs have been extended to support more content-rich status
-bar notifications, plus a new {@link android.app.Notification.Builder} class allows you to easily
-create {@link android.app.Notification} objects.</p>
-<p>New features include:</p>
-<ul>
-  <li>Support for a large icon in the notification, using {@link
-android.app.Notification.Builder#setLargeIcon setLargeIcon()}. This is usually for
-social applications to show the contact photo of the person who is the source of the
-notification or for media apps to show an album thumbnail.</li>
-  <li>Support for custom layouts in the status bar ticker, using {@link
-android.app.Notification.Builder#setTicker(CharSequence,RemoteViews) setTicker()}.</li>
-  <li>Support for custom notification layouts to include buttons with {@link
-android.app.PendingIntent}s, for more interactive notification widgets. For example, a
-notification can control music playback without starting an activity.</li>
-</ul>
-
-
-
-<h3>Content loaders</h3>
-
-<p>New framework APIs facilitate asynchronous loading of data using the {@link
-android.content.Loader} class. You can use it in combination with UI components such as views and
-fragments to dynamically load data from worker threads. The {@link
-android.content.CursorLoader} subclass is specially designed to help you do so for data backed by
-a {@link android.content.ContentProvider}.</p>
-
-<p>All you need to do is implement the {@link android.app.LoaderManager.LoaderCallbacks
-LoaderCallbacks} interface to receive callbacks when a new loader is requested or the data has
-changed, then call {@link android.app.LoaderManager#initLoader initLoader()} to initialize the
-loader for your activity or fragment.</p>
-
-<p>For more information, read the <a
-href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> documentation. You can also see
-example code using loaders in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html">LoaderCursor</a>
-and <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html">
-LoaderThrottle</a> samples.</p>
-
-
-
-<h3>Bluetooth A2DP and headset APIs</h3>
-
-<p>Android now includes APIs for applications to verify the state of connected Bluetooth A2DP and
-headset profile devices. For example, applications can identify when a Bluetooth headset is
-connected for listening to music and notify the user as appropriate. Applications can also receive
-broadcasts for vendor specific AT commands and notify the user about the state of the connected
-device, such as when the connected device's battery is low.</p>
-
-<p>You can initialize the respective {@link android.bluetooth.BluetoothProfile} by calling {@link
-android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with either the {@link
-android.bluetooth.BluetoothProfile#A2DP} or {@link android.bluetooth.BluetoothProfile#HEADSET}
-profile constant and a {@link android.bluetooth.BluetoothProfile.ServiceListener} to receive
-callbacks when the Bluetooth client is connected or disconnected.</p>
-
-
-
-
-<h3 id="animation">Animation framework</h3>
-
-<p>An all new flexible animation framework allows you to animate arbitrary properties of any object
-(View, Drawable, Fragment, Object, or anything else). It allows you to define several aspects of an
-animation, such as:</p>
-<ul>
-  <li>Duration</li>
-  <li>Repeat amount and behavior</li>
-  <li>Type of time interpolation</li>
-  <li>Animator sets to play animations together, sequentially, or after specified delays</li>
-  <li>Frame refresh delay</li>
-</ul>
-
- <p>You can define these animation aspects, and others, for an object's int, float, and hexadecimal
-color values, by default. That is, when an object has a property field for one of these types, you
-can change its value over time to affect an animation. To animate any other type of value, you tell
-the system how to calculate the values for that given type, by implementing the {@link
-android.animation.TypeEvaluator} interface.</p>
-
-<p>There are two animators you can use to animate the values of a property: {@link
-android.animation.ValueAnimator} and {@link android.animation.ObjectAnimator}. The {@link
-android.animation.ValueAnimator} computes the animation values, but is not aware of the specific
-object or property that is animated as a result. It simply performs the calculations, and you must
-listen for the updates and process the data with your own logic. The {@link
-android.animation.ObjectAnimator} is a subclass of {@link android.animation.ValueAnimator} and
-allows you to set the object and property to animate, and it handles all animation work.
-That is, you give the {@link android.animation.ObjectAnimator} the object to animate, the
-property of the object to change over time, and a set of values to apply to the property over
-time, then start the animation.</p>
-
-<p>Additionally, the {@link android.animation.LayoutTransition} class enables automatic transition
-animations for changes you make to your activity layout. To enable transitions for part of the
-layout, create a {@link android.animation.LayoutTransition} object and set it on
-any {@link android.view.ViewGroup} by calling {@link
-android.view.ViewGroup#setLayoutTransition setLayoutTransition()}. This causes default
-animations to run whenever items are added to or removed from the group. To specify custom
-animations, call {@link android.animation.LayoutTransition#setAnimator setAnimator()} on the {@link
-android.animation.LayoutTransition} and provide a custom {@link android.animation.Animator},
-such as a {@link android.animation.ValueAnimator} or {@link android.animation.ObjectAnimator}
-discussed above.</p>
-
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/graphics/animation.html">Property Animation</a> documentation. You can
-also see several samples using the animation APIs in the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html">API
-Demos</a> application.</p>
-
-
-
-
-<h3>Extended UI framework</h3>
-
-<ul>
-  
-  <li><b>Multiple-choice selection for ListView and GridView</b>
-
-<p>New {@link android.widget.AbsListView#CHOICE_MODE_MULTIPLE_MODAL} mode for {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode()} allows users to select multiple items
-from a {@link android.widget.ListView} or {@link android.widget.GridView}. When used in
-conjunction with the Action Bar, users can select multiple items and then select the action to
-perform from a list of options in the Action Bar (which has transformed into a Multi-choice
-Action Mode).</p>
-
-<p>To enable multiple-choice selection, call {@link
-android.widget.AbsListView#setChoiceMode setChoiceMode(CHOICE_MODE_MULTIPLE_MODAL)} and register a
-{@link android.widget.AbsListView.MultiChoiceModeListener MultiChoiceModeListener} with {@link
-android.widget.AbsListView#setMultiChoiceModeListener setMultiChoiceModeListener()}.</p>
-
-<p>When the user performs a long-press on an item, the Action Bar switches to the Multi-choice
-Action Mode. The system notifies the {@link android.widget.AbsListView.MultiChoiceModeListener
-MultiChoiceModeListener} when items are selected by calling {@link
-android.widget.AbsListView.MultiChoiceModeListener#onItemCheckedStateChanged
-onItemCheckedStateChanged()}.</p>
-
-<p>For an example of multiple-choice selection, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html">List15.
-java</a>
-class in the API Demos sample application.</p>
-  </li>
-
-  
-  <li><b>New APIs to transform views</b>
-  
-    <p>New APIs allow you to easily apply 2D and 3D transformations to views in your activity
-layout. New transformations are made possible with a set of object properties that define the view's
-layout position, orientation, transparency and more.</p>
-    <p>New methods to set the view properties include: {@link android.view.View#setAlpha
-setAlpha()}, {@link
-android.view.View#setBottom setBottom()}, {@link android.view.View#setLeft setLeft()}, {@link
-android.view.View#setRight setRight()}, {@link android.view.View#setBottom setBottom()}, {@link
-android.view.View#setPivotX setPivotX()}, {@link android.view.View#setPivotY setPivotY()}, {@link
-android.view.View#setRotationX setRotationX()}, {@link android.view.View#setRotationY
-setRotationY()}, {@link android.view.View#setScaleX setScaleX()}, {@link android.view.View#setScaleY
-setScaleY()}, {@link android.view.View#setAlpha setAlpha()}, and others.</p>
-
-    <p>Some methods also have a corresponding XML attribute that you can specify in your layout
-file, to apply a default transformation. Available attributes include: {@code translationX}, {@code
-translationY}, {@code rotation},
-{@code rotationX}, {@code rotationY}, {@code scaleX}, {@code scaleY}, {@code transformPivotX},
-{@code transformPivotY}, and {@code alpha}.</p>
-
-    <p>Using some of these new view properties in combination with the new <a
-href="#animation">animation framework</a> (discussed
-above), you can easily apply some fancy animations to your views. For example, to rotate a
-view on its y-axis, supply {@link android.animation.ObjectAnimator} with the {@link
-android.view.View}, the "rotationY" property, and the start and end values:</p>
-<pre>
-ObjectAnimator animator = ObjectAnimator.ofFloat(myView, "rotationY", 0, 360);
-animator.setDuration(2000);
-animator.start();
-</pre>
-  </li>
-
-  
-  <li><b>New holographic themes</b>
-
-    <p>The standard system widgets and overall look have been redesigned and incorporate a new
-"holographic" user interface theme. The system applies the new theme
-using the standard <a href="{@docRoot}guide/topics/ui/themes.html">style and theme</a> system.</p>
-
-<p>Any application that targets the Android 3.0 platform&mdash;by setting either the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
-or <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-android:targetSdkVersion}</a> value to {@code "11"}&mdash;inherits the holographic theme by default.
-However, if your application also applies its own theme, then your theme will override the
-holographic theme, unless you update your styles to inherit the holographic theme.</p>
-
-<p>To apply the holographic theme to individual activities or to inherit them in your own theme
-definitions, use one of several new {@link android.R.style#Theme_Holo Theme.Holo}
-themes. If your application is compatible with version of Android lower than 3.0 and applies
-custom themes, then you should <a
-href="{@docRoot}guide/topics/ui/themes.html#SelectATheme">select a theme based on platform
-version</a>.</p>
-
-  </li>
-  
-  
-  <li><b>New widgets</b>
-
-    <ul>
-    <li>{@link android.widget.AdapterViewAnimator}
-    <p>Base class for an {@link android.widget.AdapterView} that performs animations when switching
-    between its views.</p></li>
-    
-    <li>{@link android.widget.AdapterViewFlipper}
-    <p>Simple {@link android.widget.ViewAnimator} that animates between two or more views that have
-    been added to it. Only one child is shown at a time. If requested, it can automatically flip
-  between
-    each child at a regular interval.</p></li>
-    
-    <li>{@link android.widget.CalendarView}
-    <p>Allows users to select dates from a calendar by touching the date and can scroll or fling the
-calendar to a desired date. You can configure the range of dates available in the widget.</p></li>
-    
-    <li>{@link android.widget.ListPopupWindow}
-    <p>Anchors itself to a host view and displays a list of choices, such as for a list of
-    suggestions when typing into an {@link android.widget.EditText} view.</p></li>
-    
-    <li>{@link android.widget.NumberPicker}
-    <p>Enables the user to select a number from a predefined range. The widget presents an input
-field and up and down buttons for selecting a number. Touching the input field allows the user to
-scroll through values or touch again to directly edit the current value. It also allows you to map
-positions to strings, so that the corresponding string is displayed instead of the index
-position.</p></li>
-    
-    <li>{@link android.widget.PopupMenu}
-    <p>Displays a {@link android.view.Menu} in a modal popup window that's anchored to a view. The
-popup appears below the anchor view if there is room, or above it if there is not. If the IME (soft
-keyboard) is visible, the popup does not overlap the IME it until the user touches the
-menu.</p></li>
-    
-    <li>{@link android.widget.SearchView}
-    <p>Provides a search box that you can configure to deliver search queries to a specified
-activity and display search suggestions (in the same manner as the traditional search dialog). This
-widget is particularly useful for offering a search widget in the Action Bar. For more information,
-see <a href="{@docRoot}guide/topics/search/search-dialog.html">Creating a Search Interface.</p></li>
-    
-    <li>{@link android.widget.StackView}
-    <p>A view that displays its children in a 3D stack and allows users to swipe through
-  views like a rolodex.</p></li>
-    
-    </ul>
-  </li>
-  
-</ul>
-
-
-
-<h3>Graphics</h3>
-
-<ul>
-  <li><b>Hardware accelerated 2D graphics</b>
-
-<p>You can now enable the OpenGL renderer for your application by setting {@code
-android:hardwareAccelerated="true"} in your manifest element's <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
-element or for individual <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a>
-elements.</p>
-
-<p>This flag helps applications by making them draw faster. This results in smoother animations,
-smoother scrolling, and overall better performance and response to user interaction.</p></li>
-
-
-  <li><b>View support for hardware and software layers</b>
-  
-    <p>By default, a {@link android.view.View} has no layer specified. You can specify that the
-view be backed by either a hardware or software layer, specified by values {@link
-android.view.View#LAYER_TYPE_HARDWARE} and {@link android.view.View#LAYER_TYPE_SOFTWARE}, using
-{@link android.view.View#setLayerType setLayerType()} or the <a
-href="{@docRoot}reference/android/view/View.html#attr_android:layerType">{@code layerType}</a>
-attribute.</p>
-    <p>A hardware layer is backed by a hardware specific texture (generally Frame Buffer Objects or
-FBO on OpenGL hardware) and causes the view to be rendered using Android's hardware rendering
-pipeline, but only if hardware acceleration is turned on for the view hierarchy. When hardware
-acceleration is turned off, hardware layers behave exactly as software layers.</p>
-    <p>A software layer is backed by a bitmap and causes the view to be rendered using Android's
-software rendering pipeline, even if hardware acceleration is enabled. Software layers should be
-avoided when the affected view tree updates often. Every update will require to re-render the
-software layer, which can potentially be slow.</p>
-    <p>For more information, see the {@link android.view.View#LAYER_TYPE_HARDWARE} and {@link
-android.view.View#LAYER_TYPE_SOFTWARE} documentation.</p>
-  </li>
-  
-
-  <li><b>Renderscript 3D graphics engine</b>
-
-<p>Renderscript is a runtime 3D framework that provides both an API for building 3D scenes as well
-as a special, platform-independent shader language for maximum performance. Using Renderscript, you
-can accelerate graphics operations and data processing. Renderscript is an ideal way to create
-high-performance 3D effects for applications, wallpapers, carousels, and more.</p>
-<p>For more information, see the <a
-href="{@docRoot}guide/topics/graphics/renderscript.html">3D Rendering and Computation with
-Renderscript</a> documentation.</p></li>
-</ul>
-
-
-
-
-<h3>Media</h3>
-
-
-<ul>
-
-  <li><b>Time lapse video</b>
-
-<p>Camcorder APIs now support the ability to record time lapse video. The {@link
-android.media.MediaRecorder#setCaptureRate setCaptureRate()} sets the rate at which frames
-should be captured.</p></li>
-
-  <li><b>Texture support for image streams</b>
-    
-<p>New {@link android.graphics.SurfaceTexture} allows you to capture an image stream as an OpenGL ES
-texture. By calling {@link android.hardware.Camera#setPreviewTexture setPreviewTexture()} for your
-{@link android.hardware.Camera} instance, you can specify the {@link
-android.graphics.SurfaceTexture} upon which to draw video playback or preview frames from the
-camera.</p></li>
-
-  <li><b>HTTP Live streaming</b>
-    
-<p>Applications can now pass an M3U playlist URL to the media framework to begin an HTTP Live
-streaming session. The media framework supports most of the HTTP Live streaming specification,
-including adaptive bit rate. See the <a
-href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a> document for
-more information.</p></li>
-
-  <li><b>EXIF data</b>
-    
-<p>The {@link android.media.ExifInterface} includes new fields for photo aperture, ISO, and exposure
-time.</p></li>
-
-  <li><b>Camcorder profiles</b>
-
-<p>New {@link android.media.CamcorderProfile#hasProfile hasProfile()} method and several video
-quality profiles (such as {@link android.media.CamcorderProfile#QUALITY_1080P}, {@link
-android.media.CamcorderProfile#QUALITY_720P}, {@link
-android.media.CamcorderProfile#QUALITY_CIF}, and others) allow you to determine camcorder
-quality options.</p></li>
-
-  <li><b>Digital media file transfer</b>
-
-<p>The platform includes built-in support for Media/Picture Transfer Protocol (MTP/PTP) over USB,
-which lets users easily transfer any type of media files between devices and to a host computer.
-Developers can build on this support, creating applications that let users create or manage rich
-media files that they may want to transfer or share across devices. </p></li>
-
-  <li><b>Digital rights management (DRM)</b>
-
-<p>New extensible digital rights management (DRM) framework for checking and enforcing digital
-rights. It's implemented in two architectural layers:</p>
-<ul>
-  <li>A DRM framework API, which is exposed to applications and runs through the Dalvik VM for
-standard applications.</li>
-  <li>A native code DRM manager that implements the framework API and exposes an interface for DRM
-plug-ins to handle rights management and decryption for various DRM schemes.</li>
-</ul>
-
-<p>For application developers, the framework offers an abstract, unified API that simplifies the
-management of protected content. The API hides the complexity of DRM operations and allows a
-consistent operation mode for both protected and unprotected content, and across a variety of DRM
-schemes.</p>
-
-<p>For device manufacturers, content owners, and Internet digital media providers the DRM
-framework?s plugin API provides a means of adding support for a DRM scheme of choice into the
-Android system, for secure enforcement of content protection.</p>
-
-<p>The preview release does not provide any native DRM plug-ins for checking and enforcing digital
-rights. However, device manufacturers may ship DRM plug-ins with their devices.</p>
-
-<p>You can find all of the DRM APIs in the {@link android.drm} package.</p></li>
-
-</ul>
-
-
-
-<h3>Keyboard support</h3>
-
-<ul>
-<li>Support for Control, Meta, Caps Lock, Num Lock and Scroll Lock modifiers. For more information,
-see {@link android.view.KeyEvent#META_CTRL_ON} and related fields.</li>
-
-<li>Support for full desktop-style keyboards, including support for keys such as Escape, Home, End,
-Delete and others. You can determine whether key events are coming from a full keyboard by
-querying {@link android.view.KeyCharacterMap#getKeyboardType()} and checking for {@link
-android.view.KeyCharacterMap#FULL KeyCharacterMap.FULL}</li>
-
-<li>{@link android.widget.TextView} now supports keyboard-based cut, copy, paste, and select-all,
-using the key combinations Ctrl+X, Ctrl+C, Ctrl+V, and Ctrl+A.  It also supports PageUp/PageDown,
-Home/End, and keyboard-based text selection.</li>
-
-<li>{@link android.view.KeyEvent} adds several new methods to make it easier to check the key
-modifier state correctly and consistently. See {@link android.view.KeyEvent#hasModifiers(int)},
-{@link android.view.KeyEvent#hasNoModifiers()},
-{@link android.view.KeyEvent#metaStateHasModifiers(int,int) metaStateHasModifiers()},
-{@link android.view.KeyEvent#metaStateHasNoModifiers(int) metaStateHasNoModifiers()}.</li>
-
-<li>Applications can implement custom keyboard shortcuts by subclassing {@link
-android.app.Activity}, {@link android.app.Dialog}, or {@link android.view.View} and implementing
-{@link android.app.Activity#onKeyShortcut onKeyShortcut()}.  The framework calls this method
-whenever a key is combined with Ctrl key.  When creating an <a
-href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options Menu</a>, you can register keyboard
-shortcuts by setting either the {@code android:alphabeticShortcut} or {@code
-android:numericShortcut} attribute for each <a
-href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code &lt;item&gt;}</a>
-element (or with {@link android.view.MenuItem#setShortcut setShortcut()}).</li>
-
-<li>Android 3.0 includes a new "virtual keyboard" device with the id {@link
-android.view.KeyCharacterMap#VIRTUAL_KEYBOARD KeyCharacterMap.VIRTUAL_KEYBOARD}. The virtual
-keyboard has a desktop-style US key map which is useful for synthesizing key events for testing
-input.</li>
-
-</ul>
-
-
-
-
-<h3>Split touch events</h3>
-
-<p>Previously, only a single view could accept touch events at one time. Android 3.0
-adds support for splitting touch events across views and even windows, so different views can accept
-simultaneous touch events.</p>
-
-<p>Split touch events is enabled by default when an application targets
-Android 3.0. That is, when the application has set either the <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
-or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-android:targetSdkVersion}</a> attribute's value to {@code "11"}.</p>
-
-<p>However, the following properties allow you to disable split touch events across views inside
-specific view groups and across windows.</p>
-
-<ul>
-<li>The {@link android.R.attr#splitMotionEvents android:splitMotionEvents} attribute for view groups
-allows you to disable split touch events that occur between child views in a layout. For example:
-<pre>
-&lt;LinearLayout android:splitMotionEvents="false" ... >
-    ...
-&lt;/LinearLayout>
-</pre>
-<p>This way, child views in the linear layout cannot split touch events&mdash;only one view can
-receive touch events at a time.</p>
-</li>
-
-<li>The {@link android.R.attr#windowEnableSplitTouch android:windowEnableSplitTouch} style property
-allows you to disable split touch events across windows, by applying it to a theme for the activity
-or entire application. For example:
-<pre>
-&lt;style name="NoSplitMotionEvents" parent="android:Theme.Holo">
-    &lt;item name="android:windowEnableSplitTouch">false&lt;/item>
-    ...
-&lt;/style>
-</pre>
-<p>When this theme is applied to an <a
-href="{@docRoot}guide/topics/manifest/activity-element.html">{@code &lt;activity&gt;}</a> or <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>,
-only touch events within the current activity window are accepted. For example, by disabling split
-touch events across windows, the system bar cannot receive touch events at the same time as the
-activity. This does <em>not</em> affect whether views inside the activity can split touch
-events&mdash;by default, the activity can still split touch events across views.</p>
-
-<p>For more information about creating a theme, read <a
-href="{@docRoot}guide/topics/ui/themes.html">Applying Styles and Themes</a>.</p>
-</li>
-</ul>
-
-
-
-<h3>WebKit</h3>
-
-<ul>
-  <li>New {@link android.webkit.WebViewFragment} class to create a fragment composed of a
-{@link android.webkit.WebView}.</li>
-  <li>New {@link android.webkit.WebSettings} methods:
-    <ul>
-      <li>{@link
-android.webkit.WebSettings#setDisplayZoomControls setDisplayZoomControls()} allows you to hide
-the on-screen zoom controls while still allowing the user to zoom with finger gestures ({@link
-android.webkit.WebSettings#setBuiltInZoomControls setBuiltInZoomControls()} must be set
-{@code true}).</li>
-      <li>New {@link android.webkit.WebSettings} method, {@link
-android.webkit.WebSettings#setEnableSmoothTransition setEnableSmoothTransition()}, allows you
-to enable smooth transitions when panning and zooming. When enabled, WebView will choose a solution
-to maximize the performance (for example, the WebView's content may not update during the
-transition).</li>
-    </ul>
-  <li>New {@link android.webkit.WebView} methods:
-    <ul>
-      <li>{@link android.webkit.WebView#onPause onPause()} callback, to pause any processing
-associated with the WebView when it becomes hidden. This is useful to reduce unnecessary CPU or
-network traffic when the WebView is not in the foreground.</li>
-      <li>{@link android.webkit.WebView#onResume onResume()} callback, to resume processing
-associated with the WebView, which was paused during {@link android.webkit.WebView#onPause
-onPause()}.</li>
-      <li>{@link android.webkit.WebView#saveWebArchive saveWebArchive()} allows you to save the
-current view as a web archive on the device.</li>
-      <li>{@link android.webkit.WebView#showFindDialog showFindDialog()} initiates a text search in
-the current view.</li>
-    </ul>
-  </li>
-</ul>
-
-
-
-<h3>Browser</h3>
-
-<p>The Browser application adds the following features to support web applications:</p>
-
-<ul>
-  <li><b>Media capture</b>
-    <p>As defined by the <a href="http://dev.w3.org/2009/dap/camera/">HTML Media Capture</a>
-specification, the Browser allows web applications to access audio, image and video capture
-capabilities of the device. For example, the following HTML provides an input for the user to
-capture a photo to upload:</p>
-<pre>
-&lt;input type="file" accept="image/*;capture=camera" />
-</pre>
-<p>Or by excluding the {@code capture=camera} parameter, the user can choose to either capture a
-new image with the camera or select one from the device (such as from the Gallery application).</p>
-  </li>
-
-  <li><b>Device Orientation</b>
-    <p>As defined by the <a
-href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device Orientation Event</a>
-specification, the Browser allows web applications to listen to DOM events that provide information
-about the physical orientation and motion of the device.</p>
-    <p>The device orientation is expressed with the x, y, and z axes, in degrees and motion is
-expressed with acceleration and rotation rate data. A web page can register for orientation
-events by calling {@code window.addEventListener} with event type {@code "deviceorientation"}
-and register for motion events by registering the {@code "devicemotion"} event type.</p>
-  </li>
-  
-  <li><b>CSS 3D Transforms</b>
-    <p>As defined by the <a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D Transform
-Module</a> specification, the Browser allows elements rendered by CSS to be transformed in three
-dimensions.</p>
-  </li>
-</ul>
-
-
-
-<h3>JSON utilities</h3>
-
-<p>New classes, {@link android.util.JsonReader} and {@link android.util.JsonWriter}, help you
-read and write JSON streams. The new APIs complement the {@link org.json} classes, which manipulate
-a document in memory.</p>
-
-<p>You can create an instance of {@link android.util.JsonReader} by calling
-its constructor method and passing the {@link java.io.InputStreamReader} that feeds the JSON string.
-Then begin reading an object by calling {@link android.util.JsonReader#beginObject()}, read a
-key name with {@link android.util.JsonReader#nextName()}, read the value using methods
-respective to the type, such as {@link android.util.JsonReader#nextString()} and {@link
-android.util.JsonReader#nextInt()}, and continue doing so while {@link
-android.util.JsonReader#hasNext()} is true.</p>
-
-<p>You can create an instance of {@link android.util.JsonWriter} by calling its constructor and
-passing the appropriate {@link java.io.OutputStreamWriter}. Then write the JSON data in a manner
-similar to the reader, using {@link android.util.JsonWriter#name name()} to add a property name
-and an appropriate {@link android.util.JsonWriter#value value()} method to add the respective
-value.</p>
-
-<p>These classes are strict by default. The {@link android.util.JsonReader#setLenient setLenient()}
-method in each class configures them to be more liberal in what they accept. This lenient
-parse mode is also compatible with the {@link org.json}'s default parser.</p>
-
-
-
-
-<h3>New feature constants</h3>
-
-<p>The <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> 
-manfest element should be used to inform external entities (such as Google Play) of the set of
-hardware and software features on which your application depends. In this release, Android adds the
-following new constants that applications can declare with this element:</p>
-
-<ul>
-  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}
-    <p>When declared, this indicates that the application is compatible with a device that offers an
-emulated touchscreen (or better). A device that offers an emulated touchscreen provides a user input
-system that can emulate a subset of touchscreen
-capabilities. An example of such an input system is a mouse or remote control that drives an
-on-screen cursor. Such input systems support basic touch events like click down, click up, and drag.
-However, more complicated input types (such as gestures, flings, etc.) may be more difficult or
-impossible on faketouch devices (and multitouch gestures are definitely not possible).</p>
-    <p>If your application does <em>not</em> require complicated gestures and you do
-<em>not</em> want your application filtered from devices with an emulated touchscreen, you
-should declare {@link
-android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"} with a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
-element. This way, your application will be available to the greatest number of device types,
-including those that provide only an emulated touchscreen input.</p>
-    <p>All devices that include a touchscreen also support {@link
-android.content.pm.PackageManager#FEATURE_FAKETOUCH "android.hardware.faketouch"}, because
-touchscreen capabilities are a superset of faketouch capabilities. Thus, unless you actually require
-a touchscreen, you should add a <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a>
-element for faketouch.</p>
-  </li>
-</ul>
-
-
-
-
-<h3>New permissions</h3>
-
-<ul>
-  <li>{@link android.Manifest.permission#BIND_REMOTEVIEWS
-"android.permission.BIND_REMOTEVIEWS"}
-  <p>This must be declared as a required permission in the <a
-href="{@docRoot}guide/topics/manifest/service-element.html">{@code &lt;service&gt;}</a> manifest
-element for an implementation of {@link android.widget.RemoteViewsService}. For example, when
-creating an App Widget that uses {@link android.widget.RemoteViewsService} to populate a
-collection view, the manifest entry may look like this:</p>
-<pre>
-&lt;service android:name=".widget.WidgetService"
-    android:exported="false"
-    android:permission="android.permission.BIND_REMOTEVIEWS" />
-</pre>
-</ul>
-
-
-
-<h3>New platform technologies</h3>
-
-<ul>
-<li><strong>Storage</strong>
-  <ul>
-  <li>ext4 file system support to enable onboard eMMC storage.</li>
-  <li>FUSE file system to support MTP devices.</li>
-  <li>USB host mode support to support keyboards and USB hubs.</li>
-  <li>Support for MTP/PTP </li>
-  </ul>
-</li>
-
-<li><strong>Linux Kernel</strong>
-  <ul>
-  <li>Upgraded to 2.6.36</li>
-  </ul>
-</li>
-
-<li><strong>Dalvik VM</strong>
-  <ul>
-  <li>New code to support and optimize for SMP</li>
-  <li>Various improvements to the JIT infrastructure</li>
-  <li>Garbage collector improvements:
-    <ul>
-    <li>Tuned for SMP</li>
-    <li>Support for larger heap sizes</li>
-    <li>Unified handling for bitmaps and byte buffers</li>
-    </ul>
-  </li>
-  </ul>
-</li>
-
-<li><strong>Dalvik Core Libraries</strong>
-  <ul>
-  <li>New, much faster implementation of NIO (modern I/O library)</li>
-  <li>Improved exception messages</li>
-  <li>Correctness and performance fixes throughout</li>
-  </ul>
-</li>
-</ul>
-
-
-
-<h3 id="api-diff">API differences report</h3>
-
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
-{@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
-
-
-
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
-you need compile the application against the Android library that is provided in
-the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you might 
-also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
-attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
-manifest. If your application is designed to run only on Android 2.3 and higher,
-declaring the attribute prevents the application from being installed on earlier
-versions of the platform.</p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>API Demos</li>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Contacts</li>
-<li>Custom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gallery</li>
-<li>Gestures Builder</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Spare Parts</li>
-<li>Speech Recorder</li>
-<li>Widget Preview</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android 3.0 system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian bokmål, Norway (nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes the following emulator skin:</p>
-
-<ul>
-  <li>
-    WXGA (1280x800, medium density, xlarge screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/android-3.1-highlights.jd b/docs/html/sdk/android-3.1-highlights.jd
deleted file mode 100644
index 88bc1ee..0000000
--- a/docs/html/sdk/android-3.1-highlights.jd
+++ /dev/null
@@ -1,380 +0,0 @@
-page.title=Android 3.1 Platform Highlights
-
-@jd:body
-
-
-<style type="text/css">
-#jd-content {
-  max-width:1200px;
-}
-#jd-content div.screenshot {
-  float:left;
-  clear:left;
-  padding:15px 30px 15px 0;
-}
-#jd-content div.video {
-  float:right;
-  padding:0 60px 40px;
-  margin-top:-15px;
-}
-#jd-content table.columns {
-  margin:0 0 1em 0;
-}
-#jd-content table.columns td {
-  padding:0;
-}
-#jd-content table.columns td+td {
-  padding:0 2em;
-}
-#jd-content table.columns td img {
-  margin:0;
-}
-#jd-content table.columns td+td>*:first-child {
-  margin-top:-2em;
-}
-.green {
-  color:#8db529;
-  font-weight:bold;
-}
-</style>
-
-<p>Welcome to Android 3.1!</p>
-
-<p>Android 3.1 is an incremental platform release that refines many of the
-features introduced in Android 3.0. It builds on the same tablet-optimized UI
-and features offered in Android 3.0 and adds several new capabilities for
-users and developers. This document provides an overview of the new features and
-technologies introduced in Android 3.1. For a more detailed look at new
-developer APIs, see the <a href="{@docRoot}sdk/android-3.1.html">API
-Overview</a> document.</p>
-
-<p>For a high-level introduction to Android 3.0, please see the <a
-href="{@docRoot}sdk/android-3.0-highlights.html">Android 3.0 Platform
-Highlights</a>.</p>
-
-<ul>
-  <li><a href="#UserFeatures">New User Features</a></li>
-  <li><a href="#DeveloperApis">New Developer Features</a></li>
-</ul>
-
-<h2 id="UserFeatures" style="clear:right">New User Features</h2>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;margin-left:1em;float:right;padding-top:2em;"><a href="images/3.1/home_full.png" target="_android"><img src="images/3.1/home.png" alt="" height="280" /></a>
-<div style="padding-left:1.25em;padding-bottom:1.25em;width:450px;font-size:.9em"><strong>Figure 1.</strong> An Android 3.1 Home screen.</div>
-</div>
-
-<h3>UI refinements</h3>
-
-<p>The Android 3.1 platform adds a variety of refinements to make the user
-interface more intuitive and more efficient to use.</p>
-
-<p>UI transitions are improved throughout the system and across the standard
-apps. The Launcher animation is optimized for faster, smoother transition to and
-from the Apps list. Adjustments in color, positioning, and text make UI elements
-easier to see, understand, and use. Accessibility is improved with consistent
-audible feedback throughout the UI and a new setting to let users customize the
-touch-hold interval to meet their needs.</p>
-
-<p>Navigation to and from the five home screens is now easier &mdash; touching
-the Home button in the system bar now takes you to the home screen most recently
-used. Settings offers an improved view of internal storage,
-showing the storage used by a larger set of file types. </p>
-
-<h3 id="accessories">Connectivity for USB accessories</h3>
-
-<p>Android 3.1 adds broad platform support for a variety of USB-connected
-peripherals and accessories. Users can attach many types of input devices
-(keyboards, mice, game controllers) and digital cameras. Applications can build
-on the platform’s USB support to extend connectivity to almost any type of USB
-device.</p>
-
-<p>The platform also adds new support for USB accessories &mdash; external
-hardware devices designed to attach to Android-powered devices as USB hosts. When an
-accessory is attached, the framework will look for a corresponding application
-and offer to launch it for the user.  The accessory can also present a URL 
-to the user, for downloading an appropriate application if one is not already
-installed.  Users can interact with the application to control powered accessories such
-as robotics controllers; docking stations; diagnostic and musical equipment;
-kiosks; card readers; and much more.</p>
-
-<p>The platform’s USB capabilities rely on components in device hardware, so
-support for USB on specific devices may vary and is determined by device
-manufacturers.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:.8em;float:left;width:200px;"><img src="{@docRoot}sdk/images/3.1/tasks.png" alt="" />
-<div style="padding-left:1em;padding-bottom:1em;xwidth:auto;font-size:.9em"><strong>Figure 2.</strong> The Recent Apps menu is now expandable and scrollable.</div>
-</div>
-
-<h3 id="recentapps">Expanded Recent Apps list</h3>
-
-<p>For improved multitasking and instant visual access to a much larger number
-of apps, the Recent Apps list is now expandable. Users can now scroll the list
-of recent apps vertically to see thumbnail images all of the tasks in progress
-and recently used apps, then touch a thumbnail to jump back into that task.</p>
-
-<h3 id="resizewidgets">Resizeable Home screen widgets</h3>
-
-<p>For more flexible Home screen customization, users can now resize their Home
-screen widgets using drag bars provided by the system. Users can expand widgets
-both horizontally and/or vertically to include more content, where supported by
-each widget.</p>
-
-
-<h3 id="keyboards">Support for external keyboards
-and pointing devices</h3>
-
-<p>Users can now attach almost any type of external keyboard or mouse to their
-Android-powered devices, to create a familiar environment and work more
-efficiently. One or more input devices can be attached to the system simultaneously
-over USB and/or Bluetooth HID, in any combination. No special configuration or
-driver is needed, in most cases. When multiple devices are connected, users can
-conveniently manage the active keyboard and IME using the keyboard settings that
-are available from the System bar.</p>
-
-<p>For pointing devices, the platform supports most types of mouse with a single
-button and optionally a scroll wheel, as well as similar devices such as
-trackballs. When these are connected, users can interact with the UI using
-point, select, drag, scroll, hover, and other standard actions.</p>
-
-<h3 id="joysticks">Support for joysticks and gamepads</h3>
-
-<p>To make the platform even better for gaming, Android 3.1 adds support for
-most PC joysticks and gamepads that are connected over USB or Bluetooth HID.</p>
-
-<p>For example, users can connect PlayStation<sup>&reg;</sup>3 and Xbox 360<sup>&reg;</sup>
-game controllers over USB (but not Bluetooth), Logitech Dual Action&trade; gamepads and
-flight sticks, or a car racing controller. Game controllers that use proprietary
-networking or pairing are not supported by default, but in general, the platform
-supports most PC-connectible joysticks and gamepads.</p>
-
-<h3 id="wifi">Robust Wi-Fi networking</h3>
-
-<p>Android 3.1 adds robust Wi-Fi features, to make sure that users and their
-apps can take full advantage of higher-speed Wi-Fi access at home, at work, and
-while away.</p>
-
-<p>A new high-performance Wi-Fi lock lets applications maintain
-high-performance Wi-Fi connections even when the device screen is off. Users can
-take advantage of this to play continuous streamed music, video, and voice
-services for long periods, even when the device is otherwise idle and the screen
-is off. </p>
-
-<p>Users can now configure an HTTP proxy for each individual Wi-Fi access
-point, by touch-hold of the access point in Settings. The browser uses the HTTP
-proxy when communicating with the network over the access point and other apps
-may also choose to do so. The platform also provides backup and restore of the
-user-defined IP and proxy settings.</p>
-<p>The platform adds support for Preferred Network Offload (PNO), a background
-scanning capability that conserves battery power savings in cases where Wi-Fi
-needs to be available continuously for long periods of time.</p>
-
-<h3 id="apps">Updated set of standard apps</h3>
-
-<p>The Android 3.1 platform includes an updated set of standard applications
-that are optimized for use on larger screen devices. The sections below
-highlight some of the new features.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;margin-top:1.5em;margin-bottom:0;padding-bottom:0;"><img src="{@docRoot}sdk/images/3.1/controls.png" alt="" height="280px" />
-<div style="padding-left:1.25em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><strong>Figure 3.</strong> Quick Controls menu in the Browser.</div>
-</div>
-</div>
-
-<p><strong>Browser</strong></p>
-
-<p>The Browser app includes a variety of new features and UI improvements that
-make viewing web content simpler, faster, and more convenient.</p>
-
-<p>The Quick Controls UI, accessible from Browser Settings, is extended and
-redesigned. Users can now use the controls to view thumbnails of open tabs and
-close the active tab, as well as access the overflow menu for instant access to
-Settings and other controls.</p>
-
-<p>To ensure a consistent viewing experience, the Browser extends it's support
-for popular web standards such as CSS 3D, animations, and CSS fixed
-positioning to all sites, mobile or desktop. It also adds support for embedded
-playback of HTML5 video content. To make it easier to manage favorite
-content, users can now save a web page locally for offline viewing, including
-all styling and images. For convenience when visiting Google sites, an improved
-auto-login UI lets users sign in quickly and manage access when multiple users
-are sharing a device.</p>
-
-<p>For best performance, the Browser adds support for plugins that use hardware
-accelerated rendering. Page zoom performance is also dramatically improved,
-making it faster to navigate and view web pages.</p>
-
-<p><strong>Gallery</strong></p>
-
-<p>The Gallery app now supports Picture Transfer Protocol (PTP), so that users
-can connect their cameras over USB and import their pictures to Gallery with a
-single touch. The app also copies the pictures to local storage and provides an
-indicator to let users see how much space is available.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:left;margin-left:0em;"><img src="{@docRoot}sdk/images/3.1/resizeable.png" alt="" width="170"  target="_android" style="margin-bottom:0;" />
-<div style="padding-left:1.4em;padding-bottom:1em;width:180px;font-size:.9em"><strong>Figure 
-4.</strong> Home screen widgets can now be resized.</div></div>
-
-<p><strong>Calendar</strong></p>
-
-<p>Calendar grids are larger, for better readability and more accurate
-touch-targeting. Additionally, users can create a larger viewing area for grids
-by hiding the calendar list controls. Controls in the date picker are
-redesigned, making them easier to see and use.</li>
-</ul>
-
-<p><strong>Contacts</strong></p>
-
-<p>The Contacts app now lets you locate contacts more easily using full text
-search. Search returns matching results from all fields that are stored for a
-contact.
-</p>
-
-<p><strong>Email</strong></p>
-
-<p>When replying or forwarding an HTML message, The Email app now sends both
-plain text and HTML bodies as a multi-part mime message. This ensures that the
-message will be formatted properly for all recipients. Folder prefixes for IMAP
-accounts are now easier to define and manage. To conserve battery power and
-minimize cell data usage, the application now prefetches email from the server
-only when the device is connected to a Wi-Fi access point. </p>
-
-<p>An updated Home screen widget give users quick access to more email. Users
-can touch Email icon at the top of the widget to cycle through labels such as
-Inbox, Unread, and Starred. The widget itself is now resizable, both
-horizontally and vertically.</p>
-
-<h3 id="enterprise">Enterprise support</h3>
-
-<p>Users can now configure an HTTP proxy for each connected Wi-Fi access point.
-This lets administrators work with users to set a proxy hostname, port, and any
-bypass subdomains. This proxy configuration is automatically used by the Browser
-when the Wi-Fi access point is connected, and may optionally be used by other
-apps. The proxy and IP configuration is now backed up and restored across system
-updates and resets.</p>
-
-<p>To meet the needs of tablet users, the platform now allows a "encrypted
-storage card" device policy to be accepted on devices with emulated storage
-cards and encrypted primary storage.</p>
-
-
-<h2 id="DeveloperApis" style="clear:both">New Developer Features</h2>
-
-<p>The Android 3.1 platform adds refinements and new capabilities that
-developers can build on, to create powerful and engaging application experiences
-on tablets and other large-screen devices. </p>
-
-<h3 id="accessory">Open Accessory API for rich interaction with
-peripherals</h3>
-
-<p>Android 3.1 introduces a new API for integrating hardware accessories with
-applications running on the platform. The API provides a way to interact across
-a wide range of peripherals, from robotics controllers to musical equipment,
-exercise bicycles, and more.</p>
-
-<p>The API is based on a new USB (Universal Serial Bus) stack and services
-that are built into the platform. The platform provides services for discovering
-and identifying connected hardware, as well as for notifying interested
-applications that the hardware is available.</p>
-
-<p>When a user plugs in a USB accessory, the platform receives
-identifying information such as product name, accessory type, manufacturer, and
-version. The platform sets up communication with the accessory and uses its
-information to notify and launch a targeted app, if one is available. Optionally,
-an accessory can provide a URL that lets users find and download an
-app that works with the accessory. These discovery features make
-first-time setup easier for the user and ensure that an appropriate application
-is available for interacting with the connected hardware. </p>
-
-<p>For application developers and accessory manufacturers, accessory mode offers
-many new ways to engage users and build powerful interaction experiences with
-connected hardware.</p>
-
-<p>To learn more about how to develop applications that interact with
-accessories, see the <a href="{@docRoot}guide/topics/usb/accessory.html">USB
-Accessory</a> documentation.</p>
-
-<h3 id="host">USB host API</h3>
-
-<p>Android 3.1 provides built-in platform support for USB host mode and exposes
-an API that lets applications manage connected peripherals. On devices that
-support host mode, applications can use the API to identify and communicate with
-connected devices such as audio devices. input devices, communications devices,
-hubs, cameras, and more.</p>
-
-<p>To learn more about how to develop applications that interact with
-USB devices, see the <a href="{@docRoot}guide/topics/usb/host.html">USB
-Host</a> documentation.</p>
-
-<h3 id="inputdevices">Input from mice, joysticks, and gamepads</h3>
-
-<p>Android 3.1 extends the input event system to support a variety of new input
-sources and motion events, across all views and windows. Developers can build on
-these capabilities to let users interact with their applications using mice,
-trackballs, joysticks, gamepads, and other devices, in addition to keyboards and
-touchscreens.</p>
-
-<p>For mouse and trackball input, the platform supports two new motion event
-actions: scroll (horizontal or vertical) such as from a scrollwheel; and hover,
-which reports the location of the mouse when no buttons are pressed.
-Applications can handle these events in any way needed.</p>
-
-<p>For joysticks and gamepads, the platform provides a large number of motion
-axes that applications can use from a given input source, such as X, Y, Hat X,
-Hat Y, rotation, throttle, pressure, size, touch, tool, orientation, and others.
-Developers can also define custom axes if needed, to capture motion in
-additional ways. The platform provides motion events to applications as a batch,
-and applications can query the details of the movements included in the batch,
-for more efficient and precise handling of events.</p>
-
-<p>Applications can query for the list of connected input devices and the motion
-ranges (axes) supported by each device. Applications can also handle multiple
-input and motion events from a single input device. For example, an application
-can use mouse and joystick and mouse event sources from a single input
-device.</p>
-
-<h3 id="resizewidgetsapp">Resizable Home screen widgets</h3>
-
-<p>Developers can now create Home screen widgets that users can resize
-horizontally, vertically, or both. By simply adding an attribute to the
-declaration of a widget, the widget becomes resizable horizontally, vertically,
-or both. This lets users customize the display of the widget content and display
-more of it on their Home screens.</p>
-
-<h3 id="mtp">MTP API for integrating with external cameras</h3>
-
-<p>In Android 3.1, a new MTP (Media Transfer Protocol) API lets developers write
-apps that interact directly with connected cameras and other PTP devices. The
-new API makes it easy for applications to receive notifications when devices are
-attached and removed, manage files and storage on those devices, and transfer
-files and metadata to and from them. The MTP API implements the PTP (Picture
-Transfer Protocol) subset of the MTP specification.</p>
-
-<h3 id="rtp">RTP API, for control over audio streaming sessions</h3>
-
-<p>Android 3.1 exposes an API to its built-in RTP (Real-time Transport Protocol)
-stack, which applications can use to directly manage on-demand or interactive
-data streaming. In particular, apps that provide VOIP, push-to-talk,
-conferencing, and audio streaming can use the API to initiate sessions and
-transmit or receive data streams over any available network.</p>
-
-<h3 id="performance">Performance optimizations</h3>
-
-<p>Android 3.1 includes a variety of performance optimizations that help make
-applications faster and more responsive. Some of the optimizations include:</p>
-
-<ul>
-<li>A new LRU cache class lets applications benefit from efficient caching.
-Applications can use the class to reduce the time spent computing or downloading
-data from the network, while maintaining a sensible memory footprint for the
-cached data.</li>
-<li>The UI framework now supports partial invalidates in hardware-accelerated
-Views, which makes drawing operations in those Views more efficient.</li>
-<li>A new graphics method, {@link android.graphics.Bitmap#setHasAlpha(boolean)
-setHasAlpha()}, allows apps to hint that a given bitmap is opaque. This provides
-an extra performance boost for some types of blits and is especially useful for
-applications that use ARGB_8888 bitmaps.</li>
-</ul>
-
diff --git a/docs/html/sdk/android-3.1.jd b/docs/html/sdk/android-3.1.jd
deleted file mode 100644
index 7ec7e33..0000000
--- a/docs/html/sdk/android-3.1.jd
+++ /dev/null
@@ -1,1106 +0,0 @@
-page.title=Android 3.1 Platform
-sdk.platform.version=3.1
-sdk.platform.apiLevel=12
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/12/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing
-Apps for Android 3.x</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes
-an Android library and system image, as well as a set of emulator skins and
-more. The downloadable platform includes no external libraries.</p>
-
-<p>To get started developing or testing against Android {@sdkPlatformVersion},
-use the Android SDK Manager to download the platform into your SDK. For more
-information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
-
-<p>For a high-level introduction to Android {@sdkPlatformVersion}, see the <a
-href="{@docRoot}sdk/android-{@sdkPlatformVersion}-highlights.html">Platform
-Highlights</a>.</p>
-
-<p class="note"><strong>Reminder:</strong> If you've already published an
-Android application, please test and optimize your application on Android 3.0
-and Android 3.1 as soon as possible. You should do so to be sure your
-application provides the best experience possible on the latest Android-powered
-devices. For information about what you can do, read <a
-href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for
-Android 3.0</a>.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
-have installed, refer to the "Installed Packages" listing in the Android SDK and
-AVD Manager.</p>
-
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a> or
-higher.</p>
-</dd>
-<dt>Notes:</dt>
-<dd>
-<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
-Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
-bugs in the previous rendering library. It also unlocks several editor features that were added in
-ADT 12.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 2</a> <em>(May 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r11</a> or
-higher.</p>
-</dd>
-<dt>Notes:</dt>
-<dd>
-<p>Fixes an issue with the visual layout editor rendering library that prevented Android 3.1 from
-running in ADT.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-<p><a href="#" onclick="return toggleContent(this)">
-  <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-  Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2011)</em>
-</a></p>
-
-<div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>Requires <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r11</a> or
-higher.</p>
-</dd>
-</dl>
-
-</div>
-</div>
-
-
-<h2 id="#api" style="margin-top:1.5em;">API Overview</h2>
-
-<p>The sections below provide a technical overview of what's new for developers
-in Android 3.1, including new features and changes in the framework API since
-the previous version.</p>
-
-<h3 id="usb">USB APIs</h3>
-
-<p>Android 3.1 introduces powerful new APIs for
-integrating connected peripherals with applications running on the platform.
-The APIs are based on a USB (Universal Serial Bus) stack and services that are
-built into the platform, including support for both USB host and device
-interactions. Using the APIs, developers can create applications that are able to
-discover, communicate with, and manage a variety of device types connected over
-USB. </p>
-
-<p>The stack and APIs distinguish two basic types of USB hardware, based on
-whether the Android-powered device is acting as host or the external hardware
-is acting as host: </p>
-
-<ul>
-<li>A <em>USB device</em> is a piece of connected hardware that depends on the
-Android-powered device to serve as host. For example, most input devices, mice,
-and joysticks are USB devices, as are many cameras, hubs, and so on.</li>
-<li>A <em>USB accessory</em> is a piece of connected hardware that has a USB
-host controller, provides power, and is designed to communicate with
-Android-powered devices over USB, A variety of peripherals can connect as
-accessories, from robotics controllers to musical equipment, exercise bicycles,
-and more.</li>
-</ul>
-
-<p>For both types &mdash; USB devices and USB accessories &mdash; the
-platform's USB APIs support discovery by intent broadcast when attached or
-detached, as well as standard interfaces, endpoints, and transfer modes
-(control, bulk, and interrupt).</p>
-
-<p>The USB APIs are available in the package {@link android.hardware.usb}. The
-central class is {@link android.hardware.usb.UsbManager}, which provides
-helper methods for identifying and communicating with
-both USB devices and USB accessories. Applications can acquire an instance of
-{@link android.hardware.usb.UsbManager} and then query for the list of attached
-devices or accessories and then communicate with or manage them.
-{@link android.hardware.usb.UsbManager} also declares intent actions that the
-system broadcasts, to announce when a USB device or accessory is attached or
-detached.</p>
-
-<p>Other classes include:</p>
-
-<ul>
-<li>{@link android.hardware.usb.UsbDevice}, a class representing external
-hardware connected as a USB device (with the Android-powered device acting as
-host).</li>
-<li>{@link android.hardware.usb.UsbAccessory}, representing external hardware
-connected as the USB host (with the Android-powered device acting as a USB
-device).</li>
-<li>{@link android.hardware.usb.UsbInterface} and {@link
-android.hardware.usb.UsbEndpoint}, which provide access to standard USB
-interfaces and endpoints for a device.</li>
-<li>{@link android.hardware.usb.UsbDeviceConnection} and {@link
-android.hardware.usb.UsbRequest}, for sending and receiving data and control
-messages to or from a USB device, sychronously and asynchronously.
-<li>{@link android.hardware.usb.UsbConstants}, which provides constants for
-declaring endpoint types, device classes, and so on.</li>
-</ul>
-
-<p>Note that although the USB stack is built into the platform, actual support
-for USB host and open accessory modes on specific devices is determined by
-their manufacturers. In particular, host mode relies on appropriate USB
-controller hardware in the Android-powered device. </p>
-
-<p>Additionally, developers can request filtering on Google Play, such that
-their applications are not availabe to users whose devices do not provide the
-appropriate USB support. To request filtering, add one or both of the elements
-below to the application manifest, as appropriate: </p>
-
-<ul>
-<li>If the application should only be visible to devices that support USB
-host mode (connection of USB devices), declare this element:
-  <p style="margin-left:1.5em;"><code>&lt;uses-feature
-  android:name="android.hardware.usb.host"
-  android:required="true"&gt;</code></p>
-</li>
-<li>If the application should only be visible to devices that support USB
-accessories (connection of USB hosts), declare this element:
-  <p style="margin-left:1.5em;"><code>&lt;uses-feature
-  android:name="android.hardware.usb.accessory"
-  android:required="true"&gt;</code></p>
-</li>
-</ul>
-
-<p>For complete information about how to develop applications that interact with
-USB accessories, please see the
-<a href="{@docRoot}guide/topics/usb/index.html">developer documentation</a>.</p>
-
-<p class="note">To look at sample applications that use the USB host API, see <a
-href="{@docRoot}resources/samples/USB/AdbTest/index.html">ADB Test</a> and <a
-href="{@docRoot}resources/samples/USB/MissileLauncher/index.html">Missile
-Launcher</a></p>
-
-<h3>MTP/PTP API</h3>
-
-<p>Android 3.1 exposes a new MTP API that lets applications interact directly
-with connected cameras and other PTP devices. The new API makes it easy for an
-application to receive notifications when devices are attached and removed,
-manage files and storage on those devices, and transfer files and metadata to
-and from them. The MTP API implements the PTP (Picture Transfer Protocol) subset
-of the MTP (Media Transfer Protocol) specification.</p>
-
-<p>The MTP API is available in the {@link android.mtp} package and provides
-these classes: </p>
-
-<ul>
-  <li>The {@link android.mtp.MtpDevice} encapsulates an MTP device that is
-connected over the USB host bus. An application can instantiate an object of
-this type and then use its methods to get information about the device and
-objects stored on it, as well as opening the connection and transferring data.
-Some of the methods include:
-    <ul>
-      <li>{@link android.mtp.MtpDevice#getObjectHandles(int, int, int)
-getObjectHandles()} returns a list of handles for all objects on the device that
-match a specified format and parent. To get information about an object, an
-application can pass a handle to {@link android.mtp.MtpDevice#getObjectInfo(int)
-getObjectInfo()}.</li>
-      <li>{@link android.mtp.MtpDevice#importFile(int, java.lang.String)
-importFile()} lets an application copy data for an object to a file in external
-storage. This call may block for an arbitrary amount of time depending on the
-size of the data and speed of the devices, so should be made from a spearate
-thread.</li>
-      <li>{@link
-android.mtp.MtpDevice#open(android.hardware.usb.UsbDeviceConnection) open()}
-lets an application open a connected MTP/PTP device. </li>
-      <li>{@link android.mtp.MtpDevice#getThumbnail(int) getThumbnail()} returns
-the thumbnail of the object as a byte array. </li>
-    </ul>
-  </li>
-  <li>{@link android.mtp.MtpStorageInfo} holds information about about a storage
-unit on an MTP device, corresponding to the StorageInfo Dataset described in
-section 5.2.2 of the MTP  specification. Methods in the class let an application
-get a storage unit’s description string, free space, maximum storage capacity,
-storage ID, and volume identifier.</li>
-  <li>{@link android.mtp.MtpDeviceInfo}  holds information about an MTP device
-corresponding to the DeviceInfo Dataset described in section 5.1.1 of the MTP
-specification. Methods in the class let applications get a device’s
-manufacturer, model, serial number, and version.</li>
-  <li>{@link android.mtp.MtpObjectInfo} holds information about an object stored
-on an MTP device, corresponding to the ObjectInfo Dataset described in section
-5.3.1 of the MTP specification. Methods in the class let applications get an
-object’s size, data format, association type, creation date, and thumbnail
-information.</li>
-  <li>{@link android.mtp.MtpConstants} provides constants for declaring MTP file
-format codes, association type, and protection status.</li>
-</ul>
-
-<h3 id="motionevents">Support for new input devices and motion events</h3>
-
-<p>Android 3.1 extends the input subsystem to support new input devices and new
-types of motion events, across all views and windows. Developers can build on
-these capabilities to let users interact with their applications using mice,
-trackballs, joysticks, gamepads, and other devices, in addition to keyboards and
-touchscreens. </p>
-
-<p>For handling mouse, scrollwheel, and trackball input, the platform supports
-two new motion event actions:</p>
-<ul>
-<li>{@link android.view.MotionEvent#ACTION_SCROLL}, which describes the pointer
-location at which a non-touch scroll motion, such as from a mouse scroll wheel,
-took place. In the MotionEvent, the value of the {@link
-android.view.MotionEvent#AXIS_HSCROLL} and {@link
-android.view.MotionEvent#AXIS_VSCROLL} axes specify the relative scroll
-movement. </li>
-<li>{@link android.view.MotionEvent#ACTION_HOVER_MOVE}, reports the current
-position of the mouse when no buttons are pressed, as well as any intermediate
-points since the last <code>HOVER_MOVE</code> event. Hover enter and exit
-notifications are not yet supported.</li>
-</ul>
-
-<p>To support joysticks and gamepads, the {@link android.view.InputDevice} class
-includes these new input device sources:</p>
-<ul>
-<li>{@link android.view.InputDevice#SOURCE_CLASS_JOYSTICK} &mdash; the source
-device has joystick axes.</li>
-<li>{@link android.view.InputDevice#SOURCE_CLASS_BUTTON} &mdash; the source
-device has buttons or keys.</li>
-<li>{@link android.view.InputDevice#SOURCE_GAMEPAD}  &mdash;  the source device
-has gamepad buttons such as {@link android.view.KeyEvent#KEYCODE_BUTTON_A}
-or {@link android.view.KeyEvent#KEYCODE_BUTTON_B}. Implies
-{@link android.view.InputDevice#SOURCE_CLASS_BUTTON}</li>
-<li>{@link android.view.InputDevice#SOURCE_JOYSTICK} &mdash; the source device
-has joystick axes.  Implies SOURCE_CLASS_JOYSTICK.</li>
-</ul>
-
-<p>To describe motion events from these new sources, as well as those from mice
-and trackballs, the platform now defines axis codes on {@link
-android.view.MotionEvent}, similar to how it defines key codes on {@link
-android.view.KeyEvent}. New axis codes for joysticks
-and game controllers include
-{@link android.view.MotionEvent#AXIS_HAT_X}, {@link
-android.view.MotionEvent#AXIS_HAT_Y}, {@link
-android.view.MotionEvent#AXIS_RTRIGGER}, {@link
-android.view.MotionEvent#AXIS_ORIENTATION}, {@link
-android.view.MotionEvent#AXIS_THROTTLE}, and many others. 
-Existing {@link android.view.MotionEvent} axes are represented by {@link
-android.view.MotionEvent#AXIS_X}, {@link android.view.MotionEvent#AXIS_Y},
-{@link android.view.MotionEvent#AXIS_PRESSURE}, {@link
-android.view.MotionEvent#AXIS_SIZE}, {@link
-android.view.MotionEvent#AXIS_TOUCH_MAJOR}, {@link
-android.view.MotionEvent#AXIS_TOUCH_MINOR}, {@link
-android.view.MotionEvent#AXIS_TOOL_MAJOR}, {@link
-android.view.MotionEvent#AXIS_TOOL_MINOR}, and {@link
-android.view.MotionEvent#AXIS_ORIENTATION}.</p>
-
-<p>Additionally, {@link android.view.MotionEvent} defines a number of generic
-axis codes that are used when the framework does not know how to map a
-particular axis. Specific devices can use the generic axis codes to pass custom
-motion data to applications. For a full list of axes and their intended
-interpretations, see the {@link android.view.MotionEvent} class documentation.
-</p>
-
-<p>The platform provides motion events to applications in batches, so a single
-event may contain a current position and multiple so-called historical movements.
-Applications should use {@link android.view.MotionEvent#getHistorySize()} to get
-the number of historical samples, then retrieve and process all historical
-samples in order using {@link
-android.view.MotionEvent#getHistoricalAxisValue(int, int, int)
-getHistoricalAxisValue()}.  After that, applications should process the current
-sample using {@link android.view.MotionEvent#getAxisValue(int) getAxisValue()}.
-</p>
-
-<p>Some axes can be retrieved using special accessor methods.  For example,
-instead of calling {@link android.view.MotionEvent#getAxisValue(int)
-getAxisValue()}, applications can call {@link android.view.MotionEvent#getX(int)
-getX()}.  Axes that have built-in accessors include {@link
-android.view.MotionEvent#AXIS_X}, {@link android.view.MotionEvent#AXIS_Y},
-{@link android.view.MotionEvent#AXIS_PRESSURE}, {@link
-android.view.MotionEvent#AXIS_SIZE}, {@link
-android.view.MotionEvent#AXIS_TOUCH_MAJOR}, {@link
-android.view.MotionEvent#AXIS_TOUCH_MINOR}, {@link
-android.view.MotionEvent#AXIS_TOOL_MAJOR}, {@link
-android.view.MotionEvent#AXIS_TOOL_MINOR}, and {@link
-android.view.MotionEvent#AXIS_ORIENTATION}.</p>
-
-<p>Each input device has a unique, system-assigned ID and may also provide
-multiple sources. When a device provides multiple sources, more than one source
-can provide axis data using the same axis. For example, a touch event coming
-from the touch source uses the X axis for screen position data, while a joystick
-event coming from the joystick source will use the X axis for the stick position
-instead. For this reason, it's important for applications to interpret axis
-values according to the source from which they originate. When handling a motion
-event, applications should use methods on the {@link android.view.InputDevice}
-class to determine the axes supported by a device or source. Specifically,
-applications can use {@link android.view.InputDevice#getMotionRanges()
-getMotionRanges()} to query for all axes of a device or all axes of a given
-source of the device. In both cases, the range information for axes returned in
-the {@link android.view.InputDevice.MotionRange} object specifies the source for
-each axis value.</p>
-
-<p>Finally, since the motion events from joysticks, gamepads, mice, and
-trackballs are not touch events, the platform adds a new callback method for
-passing them to a {@link android.view.View} as "generic" motion events.
-Specifically, it reports the non-touch motion events to 
-{@link android.view.View}s through a call to {@link
-android.view.View#onGenericMotionEvent(android.view.MotionEvent)
-onGenericMotionEvent()}, rather than to {@link
-android.view.View#onTouchEvent(android.view.MotionEvent)
-onTouchEvent()}.</p>
-
-<p>The platform dispatches generic motion events differently, depending on the
-event source class. {@link android.view.InputDevice#SOURCE_CLASS_POINTER} events
-go to the {@link android.view.View} under the pointer, similar to how touch
-events work.  All others go to the currently focused {@link android.view.View}.
-For example, this means a {@link android.view.View} must take focus in order to
-receive joystick events. If needed, applications can handle these events at the
-level of Activity or Dialog by implementing {@link
-android.view.View#onGenericMotionEvent(android.view.MotionEvent)
-onGenericMotionEvent()} there instead.</p>
-
-<p class="note">To look at a sample application that uses joystick motion
-events, see <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html">GameControllerInput</a> 
-and <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html">GameView</a>.</p>
-
-<h3>RTP API</h3>
-
-<p>Android 3.1 exposes an API to its built-in RTP (Real-time Transport Protocol)
-stack, which applications can use to manage on-demand or interactive data
-streaming. In particular, apps that provide VOIP, push-to-talk, conferencing,
-and audio streaming can use the API to initiate sessions and transmit or receive
-data streams over any available network.</p>
-
-<p>The RTP API is available in the {@link android.net.rtp} package. Classes
-include: </p>
-<ul>
-<li>{@link android.net.rtp.RtpStream}, the base class of streams that send and
-receive network packets with media payloads over RTP.</li>
-<li>{@link android.net.rtp.AudioStream}, a subclass of {@link
-android.net.rtp.RtpStream} that carries audio payloads over RTP.</li>
-<li>{@link android.net.rtp.AudioGroup}, a local audio hub for managing and
-mixing the device speaker, microphone, and {@link android.net.rtp.AudioStream}.</li>
-<li>{@link android.net.rtp.AudioCodec}, which holds a collection of codecs that
-you define for an {@link android.net.rtp.AudioStream}.</li>
-</ul>
-
-<p>To support audio conferencing and similar usages, an application instantiates
-two classes as endpoints for the stream:</p>
-
-<ul>
-<li>{@link android.net.rtp.AudioStream} specifies a remote endpoint and consists
-of network mapping and a configured {@link android.net.rtp.AudioCodec}.</li>
-<li>{@link android.net.rtp.AudioGroup} represents the local endpoint for one
-or more {@link android.net.rtp.AudioStream}s. The {@link android.net.rtp.AudioGroup} mixes
-all the {@link android.net.rtp.AudioStream}s and optionally interacts with the device
-speaker and the microphone at the same time.</li>
-</ul>
-
-<p>The simplest usage involves a single remote endpoint and local endpoint.
-For more complex usages, please refer to the limitations described for
-{@link android.net.rtp.AudioGroup}.</p>
-
-<p>To use the RTP API, applications must request permission from the user by
-declaring <code>&lt;uses-permission
-android:name="android.permission.INTERNET"&gt;</code>
-in their manifest files. To acquire the device microphone, the <code>&lt;uses-permission
-android:name="android.permission.RECORD_AUDIO"&gt;</code> permission is also required.</p>
-
-<h3 id="resizewidgets">Resizable app widgets</h3>
-
-<p>Starting in Android 3.1, developers can make their homescreen widgets
-resizeable &mdash; horizontally, vertically, or on both axes. Users touch-hold a
-widget to show its resize handles, then drag the horizontal and/or vertical
-handles to change the size on the layout grid. </p>
-
-<p>Developers can make any Home screen widget resizeable by defining a
-<code>resizeMode</code> attribute in the widget's {@link
-android.appwidget.AppWidgetProviderInfo} metadata. Values for the
-<code>resizeMode</code> attribute include "horizontal", "vertical", and "none".
-To declare a widget as resizeable horizontally and vertically, supply the value
-"horizontal|vertical".
-
-<p>Here's an example: </p>
-
-<pre>&lt;appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="294dp"
-    android:minHeight="72dp"
-    android:updatePeriodMillis="86400000"
-    android:previewImage="@drawable/preview"
-    android:initialLayout="@layout/example_appwidget"
-    android:configure="com.example.android.ExampleAppWidgetConfigure"
-    android:resizeMode="horizontal|vertical" >
-&lt;/appwidget-provider></pre>
-
-<p>For more information about Home screen widgets, see the <a
-href="{@docRoot}guide/topics/appwidgets/index.html">App Widgets</a>
-documentation.</p>
-
-<h3 id="animation" style="margin-top:1.25em;">Animation framework</h3>
-
-<ul>
-<li>New ViewPropertyAnimator class
-  <ul>
-    <li>A new {@link android.view.ViewPropertyAnimator} class provides a
-convenient
-way for developers to animate select properties on {@link android.view.View} objects. The class
-automaties and optimizes the animation of the properties and makes it easier to
-manage multiple simulataneous animations on a {@link android.view.View} object.
-<p>Using the {@link android.view.ViewPropertyAnimator} is straightforward. To animate properties for
-a {@link android.view.View}, call {@link android.view.View#animate()} to
-construct a {@link android.view.ViewPropertyAnimator} object for that {@link android.view.View}. Use the
-methods on the {@link android.view.ViewPropertyAnimator} to specify what property to
-animate and how to animate it. For example, to fade the {@link android.view.View} to transparent,
-call <code>alpha(0);</code>. The {@link android.view.ViewPropertyAnimator} object
-handles the details of configuring the underlying {@link
-android.animation.Animator} class and starting it, then rendering the
-animation.</p></li>
-  </ul>
-</li>
-<li>Animation background color
-  <ul>
-    <li>New {@link android.view.animation.Animation#getBackgroundColor()} and
-    {@link android.view.animation.Animation#setBackgroundColor(int)} methods let
-    you get/set the background color behind animations, for window animations
-only. Currently the background must be black, with any desired alpha level.</li>
-  </ul>
-</li>
-<li>Getting animated fraction from <code>ViewAnimator</code>
-  <ul>
-    <li>A new {@link android.animation.ValueAnimator#getAnimatedFraction()}
-method
-lets you get the current animation fraction &mdash; the elapsed/interpolated
-fraction used in the most recent frame update &mdash; from a {@link
-android.animation.ValueAnimator}.</li>
-  </ul>
-</li>
-</ul>
-
-<h3 "ui">UI framework</h3>
-<ul>
-<li>Forced rendering of a layer
-  <ul>
-    <li>A new {@link android.view.View#buildLayer()} method lets an application
-force a View's layer to be created and the View rendered into it immediately.
-For example, an application could use this method to render a View into its
-layer before starting an animation. If the View is complex, rendering it into
-the layer before starting the animation will avoid skipping frames.</li>
-  </ul>
-</li>
-<li>Camera distance
-  <ul>
-    <li>Applications can use a new method
-{@link android.view.View#setCameraDistance(float)} to set the distance from the
-camera
-to a View. This gives applications improved control over 3D transformations of
-the View, such as rotations. </li>
-  </ul>
-</li>
-<li>Getting a calendar view from a DatePicker
-  <ul>
-    <li>A new {@link android.widget.DatePicker#getCalendarView()} method
-    lets you get a {@link android.widget.CalendarView} from a {@link
-android.widget.DatePicker}
-    instance.</li>
-  </ul>
-</li>
-<li>Getting callbacks when views are detached
-  <ul>
-    <li>A new {@link android.view.View.OnAttachStateChangeListener} lets you
-receive
-callbacks when a View is attached or detached from its window. Use {@link
-android.view.View#addOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener) addOnAttachStateChangeListener()}
-to add a listener and {@link
-android.view.View#removeOnAttachStateChangeListener(android.view.View.OnAttachStateChangeListener) addOnAttachStateChangeListener()} to remove it.</li>
-  </ul>
-</li>
-<li>Fragment breadcrumb listener, new onInflate() signature
-  <ul>
-    <li>A new method, {@link
-android.app.FragmentBreadCrumbs#setOnBreadCrumbClickListener(android.app.FragmentBreadCrumbs.OnBreadCrumbClickListener) setOnBreadCrumbClickListener()},
-provides a hook to let
-applications intercept fragment-breadcrumb clicks and take any action needed
-before going to the backstack entry or fragment that was clicked. </li>
-    <li>In the {@link android.app.Fragment} class, {@link
-android.app.Fragment#onInflate(android.util.AttributeSet, android.os.Bundle)
-onInflate(attrs, savedInstanceState)} is deprecated. Please use {@link
-android.app.Fragment#onInflate(android.app.Activity, android.util.AttributeSet,
-android.os.Bundle) onInflate(activity, attrs, savedInstanceState)} instead.</li>
-  </ul>
-</li>
-<li>Display search result in new tab
-  <ul>
-    <li>An {@link android.app.SearchManager#EXTRA_NEW_SEARCH} data key for {@link
-android.content.Intent#ACTION_WEB_SEARCH} intents lets you open a search in a
-new browser tab, rather than in an existing one.</li>
-  </ul>
-</li>
-
-<li>Drawable text cursor
-  <ul>
-<li>You can now specify a drawable to use as the text cursor using the new
-resource attribute {@link android.R.attr#textCursorDrawable}.</li>
-  </ul>
-</li>
-<li>Setting displayed child in remote views
-  <ul>
-    <li>A new convenience method, {@link
-android.widget.RemoteViews#setDisplayedChild(int, int) setDisplayedChild(viewId,
-childIndex)}, is available in {@link android.widget.RemoteViews} subclasses, to
-let you set the child displayed in {@link android.widget.ViewAnimator} and
-{@link android.widget.AdapterViewAnimator} subclasses such as {@link
-android.widget.AdapterViewFlipper}, {@link android.widget.StackView}, {@link
-android.widget.ViewFlipper}, and {@link android.widget.ViewSwitcher}.</li>
-  </ul>
-</li>
-<li>Generic keys for gamepads and other input devices
-  <ul>
-    <li>{@link android.view.KeyEvent} adds a range of generic keycodes to
-    accommodate gamepad buttons. The class also adds
-    {@link android.view.KeyEvent#isGamepadButton(int)} and several other
-    helper methods for working with keycodes.</li>
-  </ul>
-</li>
-</ul>
-
-<h3 id="graphics" style="margin-top:1.3em;">Graphics</h3>
-
-<ul>
-<li>Helpers for managing bitmaps
-  <ul>
-  <li>{@link android.graphics.Bitmap#setHasAlpha(boolean)} lets an app indicate that
-all of the pixels in a Bitmap are known to be opaque (false) or that some of the
-pixels may contain non-opaque alpha values (true). Note, for some configs (such
-as RGB_565) this call is ignored, since it does not support per-pixel alpha
-values. This is meant as a drawing hint, as in some cases a bitmap that is known
-to be opaque can take a faster drawing case than one that may have non-opaque
-per-pixel alpha values. </li>
-  <li>{@link android.graphics.Bitmap#getByteCount()} gets a Bitmap's size in
-bytes.</li>
-  <li>{@link android.graphics.Bitmap#getGenerationId()} lets an application find
-out whether a Bitmap has been modified, such as for caching.</li>
-  <li>{@link android.graphics.Bitmap#sameAs(android.graphics.Bitmap)} determines
-whether a given Bitmap differs from the current Bitmap, in dimension,
-configuration, or pixel data. </li>
-  </ul>
-</li>
-<li>Setting camera location and rotation
-  <ul>
-  <li>{@link android.graphics.Camera} adds two new methods {@link
-android.graphics.Camera#rotate(float, float, float) rotate()} and {@link
-android.graphics.Camera#setLocation(float, float, float) setLocation()} for
-control of the
-camera's location, for 3D transformations.</li>
-</ul>
-</li>
-</ul>
-
-<h3 id="network" style="margin-top:1.25em;">Network</h3>
-
-<ul>
-<li>High-performance Wi-Fi lock
-  <ul>
-    <li>A new high-performance Wi-Fi lock lets applications maintain
-high-performance Wi-Fi connections even when the device screen is off.
-Applications that stream music, video, or voice for long periods can acquire the
-high-performance Wi-Fi lock to ensure streaming performance even when the screen
-is off. Because it uses more power, applications should acquire the
-high-performance Wi-Fi when there is a need for a long-running active
-connection.
-<p>To create a high-performance lock, pass {@link
-android.net.wifi.WifiManager#WIFI_MODE_FULL_HIGH_PERF} as the lock mode in a
-call to {@link android.net.wifi.WifiManager#createWifiLock(int,
-java.lang.String) createWifiLock()}.</p></li>
-  </ul>
-</li>
-<li>More traffic stats
-  <ul>
-    <li>Applications can now access statistics about more types of network usage
-using new methods in {@link android.net.TrafficStats}. Applications can use the
-methods to get UDP stats, packet count, TCP transmit/receive payload bytes and
-segments for a given UID.</li>
-  </ul>
-</li>
-<li>SIP auth username
-  <ul>
-    <li>Applications can now get and set the SIP auth username for a profile
-using
-the new methods {@link android.net.sip.SipProfile#getAuthUserName()
-getAuthUserName()} and {@link
-android.net.sip.SipProfile.Builder#setAuthUserName(java.lang.String)
-setAuthUserName()}.</li>
-  </ul>
-</li>
-</ul>
-
-
-<h3 id="download" style="margin-top:1.25em;">Download Manager</h3>
-<ul>
-<li>Handling of completed downloads
-  <ul>
-    <li>Applications can now initiate downloads that notify users only on
-completion. To initiate this type of download, applications pass {@link
-android.app.DownloadManager.Request#VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION}
-in the {@link
-android.app.DownloadManager.Request#setNotificationVisibility(int)
-setNotificationVisibility()} method of
-the a request object.</li>
-    <li>A new method, {@link
-android.app.DownloadManager#addCompletedDownload(java.lang.String,
-java.lang.String, boolean, java.lang.String, java.lang.String, long, boolean)
-addCompletedDownload()}, lets an application add a file to the
-downloads database, so that it can be managed by the Downloads application.</li>
-  </ul>
-</li>
-<li>Show downloads sorted by size
-  <ul>
-    <li>Applications can start the Downloads application in sort-by-size mode by
-adding the new extra {@link
-android.app.DownloadManager#INTENT_EXTRAS_SORT_BY_SIZE} to an {@link
-android.app.DownloadManager#ACTION_VIEW_DOWNLOADS} intent.</li>
-    </ul>
-</li>
-</ul>
-
-<h3 id="ime" style="margin-top:1.25em;">IME framework</h3>
-
-<ul>
-<li>Getting an input method's extra value key
-  <ul><li>The {@link android.view.inputmethod.InputMethodSubtype} adds the
-method
-{@link
-android.view.inputmethod.InputMethodSubtype#containsExtraValueKey(java.lang.String) containsExtraValueKey()} to check whether an ExtraValue string is stored
-for the subtype and
-the method {@link
-android.view.inputmethod.InputMethodSubtype#getExtraValueOf(java.lang.String)
-getExtraValueOf()} to extract a specific key value from the ExtraValue hashmap.
-</li>
-  </ul>
-</li>
-</ul>
-
-<h3 id="media" style="margin-top:1.25em;">Media</h3>
-
-<ul>
-<li>New streaming audio formats
-  <ul>
-    <li>The media framework adds built-in support for raw ADTS AAC content, for
-improved streaming audio, as well as support for FLAC audio, for highest quality
-(lossless) compressed audio content. See the <a
-href="{@docRoot}guide/appendix/media-formats.html">Supported Media Formats</a>
-document for more information.</p></li>
-  </ul>
-</li>
-</ul>
-
-<h3 id="launchcontrols" style="margin-top:1.25em;">Launch controls on stopped
-applications</h3>
-
-<p>Starting from Android 3.1, the system's package manager keeps track of
-applications that are in a stopped state and provides a means of controlling
-their launch from background processes and other applications.</p>
-
-<p>Note that an application's stopped state is not the same as an Activity's
-stopped state. The system manages those two stopped states separately.</p>
-
-<p>The platform defines two new intent flags that let a sender specify
-whether the Intent should be allowed to activate components in stopped
-application.</p>
-
-<ul>
-<li>{@link android.content.Intent#FLAG_INCLUDE_STOPPED_PACKAGES} &mdash;
-Include intent filters of stopped applications in the list of potential targets
-to resolve against. </li>
-<li>{@link android.content.Intent#FLAG_EXCLUDE_STOPPED_PACKAGES} &mdash;
-Exclude intent filters of stopped applications from the list of potential
-targets.</li>
-</ul>
-
-<p>When neither or both of these flags is defined in an intent, the default
-behavior is to include filters of stopped applications in the list of
-potential targets.</p>
-
-<p>Note that the system adds {@link
-android.content.Intent#FLAG_EXCLUDE_STOPPED_PACKAGES} <em>to all broadcast
-intents</em>. It does this to prevent broadcasts from background services from
-inadvertently or unnecessarily launching components of stoppped applications.
-A background service or application can override this behavior by adding the
-{@link android.content.Intent#FLAG_INCLUDE_STOPPED_PACKAGES} flag to broadcast
-intents that should be allowed to activate stopped applications.</p>
-
-<p>Applications are in a stopped state when they are first installed but are not
-yet launched and when they are manually stopped by the user (in Manage
-Applications).</p>
-
-<h3 id="installnotification">Notification of application first launch and upgrade</h3>
-
-<p>The platform adds improved notification of application first launch and
-upgrades through two new intent actions:</p>
-
-<ul>
-<li>{@link android.content.Intent#ACTION_PACKAGE_FIRST_LAUNCH} &mdash; Sent to
-the installer package of an application when that application is first launched
-(that is, the first time it is moved out of a stopped state). The data
-contains the name of the package. </li>
-
-<li>{@link android.content.Intent#ACTION_MY_PACKAGE_REPLACED} &mdash; Notifies
-an application that it was updated, with a new version was installed over
-an existing version.  This is only sent to the application that was replaced. It
-does not contain any additional data. To receive it, declare an intent filter
-for this action. You can use the intent to trigger code that helps get your
-application back in proper running shape after an upgrade.
-
-<p>This intent is sent directly to the application, but only if the application
-was upgraded while it was in started state (not in a stopped state).</p></li>
-
-</ul>
-
-<h3 id="other">Core utilities</h3>
-
-<ul>
-<li>LRU cache
-  <ul>
-    <li>A new {@link android.util.LruCache} class lets your applications benefit
-from efficient caching. Applications can use the class to reduce the time spent
-computing or downloading data from the network, while maintaining a sensible
-memory footprint for the cached data.{@link android.util.LruCache} is a cache
-that holds strong references to a limited number of values. Each time a value is
-accessed, it is moved to the head of a queue. When a value is added to a full
-cache, the value at the end of that queue is evicted and may become eligible for
-garbage collection.</li>
-  </ul>
-</li>
-<li>File descriptor as <code>int</code>
-  <ul>
-    <li>You can now get the native file descriptor int for a {@link
-android.os.ParcelFileDescriptor} using either of the new methods {@link
-android.os.ParcelFileDescriptor#getFd()} or {@link
-android.os.ParcelFileDescriptor#detachFd()}. </li>
-  </ul>
-</li>
-</ul>
-
-
-
-
-
-
-<h3 id="webkit" style="margin-top:1.25em;">WebKit</h3>
-
-<ul>
-
-<li>File scheme cookies
-  <ul>
-    <li>The {@link android.webkit.CookieManager} now supports cookies that use
-the
-<code>file:</code> URI scheme. You can use {@link
-android.webkit.CookieManager#setAcceptFileSchemeCookies(boolean)
-setAcceptFileSchemeCookies()} to
-enable/disable support for file scheme cookies, before constructing an instance
-of <code>WebView</code> or <code>CookieManager</code>. In a
-<code>CookieManager</code> instance, you can check whether file scheme cookies
-is enabled by calling {@link
-android.webkit.CookieManager#allowFileSchemeCookies()}.</li>
-  </ul>
-</li>
-<li>Notification of login request
-  <ul>
-  <li>To support the browser autologin features introduced in Android 3.0, the
-new
-method {@link
-android.webkit.WebViewClient#onReceivedLoginRequest(android.webkit.WebView,java.lang.String, java.lang.String, java.lang.String) onReceivedLoginRequest()}
-notifies the host
-application that an autologin request for the user was processed. </li>
-  </ul>
-</li>
-<li>Removed classes and interfaces
-  <ul>
-    <li>Several classes and interfaces were removed from the public API, after
-previously being in deprecated state. See the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a> for more information.</p></li>
-  </ul>
-  </li>
-</ul>
-
-
-
-<h3 id="browser" style="margin-top:1.25em;">Browser</h3>
-
-<p>The Browser application adds the following features to support web
-applications:</p>
-
-<ul>
-<li>Support for inline playback of video embedded in HTML5
-<code>&lt;video&gt;</code> tag. Playback is hardware-accelerated where possible.
-</li>
-<li>Layer support for fixed position elements for all sites (mobile and
-desktop).</li>
-</ul>
-
-
-
-
-
-<h3 id="features">New feature constants</h3>
-
-<p>The platform adds new hardware feature constants that developers can declare
-in their application manifests, to inform external entities such as Google
-Play of the application's requirement for new hardware capabilities supported
-in this version of the platform. Developers declare these and other feature
-constants in <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-&lt;uses-feature&gt;}</a> manifest elements.
-
-<ul>
-  <li>{@link android.content.pm.PackageManager#FEATURE_USB_ACCESSORY
-android.hardware.usb.accessory} &mdash; The application uses the <a href="#usb">USB
-API</a> to communicate with external hardware devices connected over USB and
-function as hosts.</li>
-  <li>{@link android.content.pm.PackageManager#FEATURE_USB_HOST
-android.hardware.usb.host} &mdash; The application uses the <a href="#usb">USB API</a>
-to communicate with external hardware devices connected over USB and function as
-devices.</li>
-</ul>
-
-<p>Google Play filters applications based on features declared in <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-&lt;uses-feature&gt;}</a> manifest elements. For more information about
-declaring features in an application manifest, read <a
-href="{@docRoot}guide/appendix/market-filters.html">Google Play
-Filters</a>.</p>
-
-
-
-<h3 id="api-diff">API Differences Report</h3>
-
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
-Level
-{@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>.</p>
-
-
-
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
-you need compile the application against the Android library that is provided in
-the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you
-might
-also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
-attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
-manifest.</p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>API Demos</li>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Contacts</li>
-<li>Custom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gallery</li>
-<li>Gestures Builder</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Spare Parts</li>
-<li>Speech Recorder</li>
-<li>Widget Preview</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety
-of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android 3.0 system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian bokmål, Norway (nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes the following emulator skin:</p>
-
-<ul>
-  <li>
-    WXGA (1280x800, medium density, xlarge screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/android-3.2.jd b/docs/html/sdk/android-3.2.jd
deleted file mode 100644
index 27df22c..0000000
--- a/docs/html/sdk/android-3.2.jd
+++ /dev/null
@@ -1,741 +0,0 @@
-page.title=Android 3.2 Platform
-sdk.platform.version=3.2
-sdk.platform.apiLevel=13
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#highlights">Highlights</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/13/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-<h2>See Also</h2>
-<ol>
-  <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting
-  Multiple Screens</a></li>
-  <li><a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing
-Apps for Android 3.x</a></li>
-</ol>
-
-</div>
-</div>
-
-
-<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Welcome to Android 3.2!</p>
-
-<p>Android 3.2 is an incremental platform release that adds new
-capabilities for users and developers. The sections below provide an overview
-of the new features and developer APIs.</p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The downloadable platform includes
-an Android library and system image, as well as a set of emulator skins and
-more. The downloadable platform includes no external libraries.</p>
-
-<p>To get started developing or testing against Android {@sdkPlatformVersion},
-use the Android SDK Manager to download the platform into your SDK. For more
-information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
-
-<p class="note"><strong>Reminder:</strong> If you've already published an
-Android application, please test and optimize your application on Android 3.2 as
-soon as possible. You should do so to be sure your application provides the best
-experience possible on the latest Android-powered devices. For information about
-what you can do, read <a
-href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for
-Android 3.x</a>.</p>
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
-have installed, refer to the "Installed Packages" listing in the Android SDK and
-AVD Manager.</p>
-
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-    Android {@sdkPlatformVersion}, Revision 1</a> <em>(July 2011)</em>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-
-<dl>
-<dt>Initial release. SDK Tools r12 or higher is recommended.</dt>
-</dl>
-
-  </div>
-</div>
-
-<h2 id="highlights" style="margin-top:1.5em;">Platform Highlights</h2>
-
-<h3>New user features</h3>
-
-<ul>
-<li><strong>Optimizations for a wider range of tablets</strong>
-
-<p>Android 3.2 includes a variety of optimizations across the system
-to ensure a great user experience on a wider range of tablet devices.</p></li>
-
-<li><strong>Compatibility zoom for fixed-sized apps</strong>
-
-<p>Android 3.2 introduces a new <em>compatibility zoom</em> mode that gives
-users a new way to view fixed-sized apps on larger devices. The new mode provides a
-pixel-scaled alternative to the standard UI stretching for apps that are not
-designed to run on larger screen sizes, such as on tablets. The new mode is
-accessible to users from a menu icon in the system bar, for apps that need
-compatibility support.</p></li>
-
-<li><strong>Media sync from SD card</strong>
-<p>On devices that support an SD card, users can now load media files directly
-from the SD card to apps that use them. A system facility makes the files
-accessible to apps from the system media store.</p></li>
-</ul>
-
-
-<h3>New developer features</h3>
-
-<ul>
-<li><strong>Extended API for managing screens support</strong>
-
-<p>Android 3.2 introduces extensions to the platform's screen support API to
-give developers additional ways to manage application UI across the range of
-Android-powered devices. The API includes new resource qualifiers and new
-manifest attributes that give you more precise control over how your
-apps are displayed on different sizes, rather than relying on generalized
-size categories.</p>
-
-<p>To ensure the best possible display for fixed-sized apps and apps with limited
-support for various screen sizes, the platform also provides a new zoom
-compatibility mode that renders the UI on a smaller screen area, then scales it
-up to fill the space available on the display. For more information about the
-screen support API and the controls it provides, see the sections below. </p></li>
-</ul>
-
-
-<h2 id="api">API Overview</h2>
-
-<h3 id="usb">Screens Support APIs</h3>
-
-<p>Android 3.2 introduces new screens support APIs that give you more
-control over how their applications are displayed across different screen sizes.
-The API builds on the existing screens-support API, including the platform's
-generalized screen density model, but extends it with the ability to precisely
-target specific screen ranges by their dimensions, measured in
-density-independent pixel units (such as 600dp or 720dp wide), rather than
-by their generalized screen sizes (such as large or xlarge)</p>
-
-<p>When designing an application's UI, you can still rely on the platform to
-provide density abstraction, which means that applications do not need to
-compensate for the differences in actual pixel density across devices. You
-can design the application UI according to the amount of horizontal or vertical
-space available. The platform expresses the amount of space available using three new
-characteristics: <em>smallestWidth</em>, <em>width</em>, and
-<em>height</em>.</p>
-
-<ul>
-<li>A screen's <em>smallestWidth</em> is its fundamental minimum size,
-measured in density-independent pixel ("dp") units. Of the screen's height or
-width, it is the shorter of the two. For a screen in portrait orientation, the
-smallestWidth is normally based on its width, while in landscape orientation it is based
-on its height. In all cases, the smallestWidth is derived from a fixed characteristic of the
-screen and the value does not change, regardless of orientation. The smallestWidth
-is important for applications because it represents the shortest possible width
-in which the application UI will need to be drawn, not including screen areas
-reserved by the system.
-</li>
-
-<li>In contrast, a screen's <em>width</em> and <em>height</em> represent the
-current horizontal or vertical space available for application layout, measured
-in "dp" units, not including screen areas reserved by the system. The width and
-height of a screen change when the user switches orientation between landscape
-and portrait. </li>
-
-</ul>
-
-<p>The new screens support API is designed to let you manage application UI
-according to the smallestWidth of the current screen. You can also manage the
-UI according to current width or height, as needed. For those purposes, the API
-provides these tools:</p>
-
-<ul>
-<li>New resource qualifiers for targeting layouts and other resources to a
-minimum smallestWidth, width, or height, and</li> 
-<li>New manifest attributes, for specifying the app's maximum
-screen compatibility range</li>
-</ul>
-
-<p>Additionally, applications can still query the system and manage UI and
-resource loading at runtime, as in the previous versions of the platform.</p>
-
-<p>Since the new API lets you target screens more directly through smallestWidth,
-width, and height, it's helpful to understand the typical
-characteristics of the different screen types. The table below provides some
-examples, measured in "dp" units. </p>
-
-<p class="caption"><strong>Table 1.</strong> Typical devices, with density
-and size in dp.</p>
-
-<table>
-<tr>
-<th>Type</th>
-<th>Density (generalized)</th>
-<th>Dimensions (dp)</th>
-<th>smallestWidth (dp)</th>
-</tr>
-<tr>
-<td>Baseline phone</td>
-<td>mdpi</td>
-<td>320x480</td>
-<td>320</td>
-</td>
-<tr>
-<td>Small tablet/large phone</td>
-<td>mdpi</td>
-<td>480x800</td>
-<td>480</td>
-</tr>
-<tr>
-<td>7-inch tablet</td>
-<td>mdpi</td>
-<td>600x1024</td>
-<td>600</td>
-</tr>
-<tr>
-<td>10-inch tablet</td>
-<td>mdpi</td>
-<td>800x1280</td>
-<td>800</td>
-</tr>
-</table>
-
-<p>The sections below provide more information about the new screen qualifiers
-and manifest attributes. For complete information about how to use the screen
-support API, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
-
-<h4>New resource qualifiers for screens support</h4>
-
-<p>The new resource qualifiers in Android 3.2 let you better target your layouts
-for ranges of screen sizes. Using the qualifiers, you can create resource
-configurations designed for a specific minimum smallestWidth, current width, or
-current height, measured in density-independent pixels.</p>
-
-<p>The new qualifiers are:</p>
-<ul>
-<li><code>swNNNdp</code> &mdash; Specifies the minimum smallestWidth on which
-the resource should be used, measured in "dp" units. As mentioned above, a
-screen's smallestWidth is constant, regardless of orientation. Examples:
-<code>sw320dp</code>, <code>sw720dp</code>, <code>sw720dp</code>.</li>
-
-<li><code>wNNNdp</code> and <code>hNNNdp</code> &mdash; Specifies the minimum 
-width or height on which the resource should be used, measured in "dp" units. As
-mentioned above, a screen's width and height are relative to the orientation of
-the screen and change whenever the orientation changes. Examples:
-<code>w320dp</code>, <code>w720dp</code>, <code>h1024dp</code>.</p></li>
-</ul>
-
-<p>You can also create multiple overlapping resource configurations if needed.
-For example, you could tag some resources for use on any screen wider than 480
-dp, others for wider than 600  dp, and others for wider than 720 dp. When
-multiple resource configurations are qualified for a given screen, the system
-selects the configuration that is the closest match. For precise control over
-which resources are loaded on a given screen, you can tag resources with one
-qualifier or combine several new or existing qualifiers. 
-
-<p>Based on the typical dimensions listed earlier, here are some examples of how
-you could use the new qualifiers:</p>
-
-<pre class="classic prettyprint">res/layout/main_activity.xml   # For phones
-res/layout-sw600dp/main_activity.xml   # For 7” tablets
-res/layout-sw720dp/main_activity.xml   # For 10” tablets
-res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
-res/layout-sw600dp-w720dp/main_activity.xml   # For large width</pre>
-
-<p>Older versions of the platform will ignore the new qualifiers, so you can
-mix them as needed to ensure that your app looks great on any device. Here
-are some examples:</p>
-
-<pre class="classic prettyprint">res/layout/main_activity.xml   # For phones
-res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
-res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets</pre>
-
-<p>For complete information about how to use the new qualifiers, see <a href="{@docRoot}guide/practices/screens_support.html#NewQualifiers">Using new
-size qualifiers</a>.</p>
-
-<h4>New manifest attributes for screen-size compatibility</h4>
-
-<p>The framework offers a new set of <a
-href="{@docRoot}"><code>&lt;supports-screens&gt;</code></a> manifest attributes that let
-you manage your app's support for different screen sizess.
-Specifically, you can specify the largest and smallest screens on which your app
-is designed to run, as well as the largest screen on which it is designed run
-without needing the system's new <a href="{@docRoot}guide/practices/screen-compat-mode.html">screen
-compatibility mode</a>. Like the resource qualifiers described above, the new
-manifest attributes specify the range of screens that the application supports,
-as specified by the smallestWidth. </p>
-
-<p>The new manifest attributes for screen support are: </p>
-
-<ul>
-<li><code>android:compatibleWidthLimitDp="<em>numDp"</em></code> &mdash; This
-attribute lets you specify the maximum smallestWidth on which the application
-can run without needing compatibility mode. If the current screen is larger than
-the value specified, the system displays the application in normal mode but
-allows the user to optionally switch to compatibility mode through a setting in
-the system bar.</li>
-
-<li><code>android:largestWidthLimitDp="<em>numDp</em>"</code> &mdash; This
-attribute lets you specify the maximum smallestWidth on which the application
-is designed to run.  If the current screen is larger than the value specified,
-the system forces the application into screen compatibility mode, to ensure best
-display on the current screen.</li>
-
-<li><code>android:requiresSmallestWidthDp="<em>numDp"</em></code> &mdash; This
-attribute lets you specify the minimum smallestWidth on which the application
-can run. If the current screen is smaller than the value specified, the system
-considers the application incompatible with the device, but does not prevent it
-from being installed and run.</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Google Play does not currently filter
-apps based on any of the attributes above. Support for filtering will be
-added in a later platform release. Applications that require
-filtering based on screen size can use the existing <code>&lt;supports-screens&gt;</code>
-attributes.</p>
-
-<p>For complete information about how to use the new attributes, see <a href="{@docRoot}guide/practices/screens_support.html#DeclaringScreenSizeSupport">Declaring
-screen size support</a>.</p>
-
-<h4>Screen compatibility mode</h4>
-
-<p>Android 3.2 provides a new screen compatibility mode for applications
-explicitly declaring that they do not support screens as large as the one on
-which they are running. This new "zoom" mode is a pixel-scaled &mdash; it
-renders the application in a smaller screen area and then scales the pixels to
-fill the current screen.</p>
-
-<p>By default, the system offers screen compatibility mode as an user option, for apps
-that require it. Users can turn the zoom mode on and off using a control available
-in the system bar. </p>
-
-<p>Because the new screen compatibility mode may not be appropriate for all
-applications, the platform allows the application to disable it using manifest
-attributes. When disabled by the app, the system does not offer "zoom" compatibility
-mode as an option for users when the app is running.</p>
-
-<p class="note"><strong>Note:</strong> For important information about how
-to control compatibility mode in your applications, please review the <a
-href="http://android-developers.blogspot.com/2011/07/new-mode-for-apps-on-large-
-screens.html">New Mode for Apps on Large Screens</a> article on the Android
-Developers Blog. </p>
-
-<h4>New screen density for 720p televisions and similar devices</h4>
-
-<p>To meet the needs of applications running on 720p televisions or similar with
-moderate density screens, Android 3.2 introduces a new generalized density,
-<code>tvdpi</code>, with an approximate dpi of 213. Applications can query for
-the new density in {@link android.util.DisplayMetrics#densityDpi} and can use
-the new <code>tvdpi</code> qualifier to tag resources for televisions and
-similar devices. For example:</p>
-
-<pre class="classic prettyprint">res/drawable-tvdpi/my_icon.png   # Bitmap for tv density</pre>
-
-<p>In general, applications should not need to work with this density. For situations
-where output is needed for a 720p screen, the UI elements can be scaled
-automatically by the platform.</p>
-
-
-<h3 id="ui" style="margin-top:1.25em;">UI framework</h3>
-<ul>
-<li>Fragments
-  <ul>
-    <li>New {@link android.app.Fragment.SavedState} class holds the state
-    information retrieved from a fragment instance through
-    {@link android.app.FragmentManager#saveFragmentInstanceState(android.app.Fragment) saveFragmentInstanceState()}.</li>
-    <li>New method {@link android.app.FragmentManager#saveFragmentInstanceState(android.app.Fragment) saveFragmentInstanceState()}
-    saves the current instance state of
-    the given Fragment. The state can be used later when creating a new instance
-    of the Fragment that matches the current state.</li>
-    <li>New method {@link android.app.Fragment#setInitialSavedState(SavedState) setInitialSavedState()}
-    sets the initial saved state for a Fragment when first constructed.</li>
-    <li>New {@link android.app.Fragment#onViewCreated(android.view.View, android.os.Bundle)
-    onViewCreated()} callback method notifies the Fragment that
-    {@link android.app.Fragment#onCreateView(LayoutInflater, ViewGroup, Bundle) onCreateView()}
-    has returned, but before any saved state has been restored in to the View.</li>
-    <li>{@link android.app.Fragment#isDetached()} method determines whether
-    the Fragment has been explicitly detached from the UI.</li>
-    <li>New {@link android.app.FragmentTransaction#attach(android.app.Fragment) attach()}
-    and {@link android.app.FragmentTransaction#detach(android.app.Fragment) detach()}
-    methods let an application re-attach or detach fragments in the UI.</li>
-    <li>A new {@link android.app.FragmentTransaction#setCustomAnimations(int, int, int, int)
-    setCustomAnimations()} overload method lets you set specific animation
-    resources to run for enter/exit operations and specifically when
-    popping the back stack. The existing implementation does not account
-    for the different behavior of fragments when popping the back stack.</li>
-  </ul>
-</li>
-<li>Screen size information in ActivityInfo and ApplicationInfo
-  <ul>
-    <li>{@link android.content.pm.ActivityInfo} adds {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_SIZE}
-    and {@link android.content.pm.ActivityInfo#CONFIG_SMALLEST_SCREEN_SIZE} as bit masks
-    in {@link android.R.attr#configChanges}. The bits indicate whether an Activity can
-    itself handle the screen size and smallest screen size.</li>
-    <li>{@link android.content.pm.ApplicationInfo} adds
-    {@link android.content.pm.ApplicationInfo#largestWidthLimitDp}, {@link android.content.pm.ApplicationInfo#compatibleWidthLimitDp},
-    and {@link android.content.pm.ApplicationInfo#requiresSmallestWidthDp} fields,
-    derived from the corresponding <code>&lt;supports-screens&gt;</code> attributes
-    in the application manifest file.</li>
-  </ul>
-</li>
-<li>Helpers for getting display size from WindowManager
-  <ul>
-    <li>New methods {@link android.view.Display#getSize(android.graphics.Point)
-    getSize()} and {@link android.view.Display#getRectSize(android.graphics.Rect)
-    getRectSize()} let applications get the raw size of the display.</li>
-  </ul>
-</li>
-<li>New public "holographic" styles
-  <ul>
-    <li>The platform now exposes a variety of public "holographic" styles
-    for text, actionbar widgets and tabs, and more. See
-    {@link android.R.style} for a full list.</li>
-  </ul>
-</li>
-<li>{@link android.app.LocalActivityManager}, {@link android.app.ActivityGroup}, and
-    {@link android.app.LocalActivityManager} are now deprecated
-  <ul>
-    <li>New applications should use Fragments instead of these classes. To
-    continue to run on older versions of the platform, you can use the v4 Support
-    Library (compatibility library), available in the Android SDK. The v4 Support
-    Library provides a version of the Fragment API that is compatible down to
-    Android 1.6 (API level 4).
-    <li>For apps developing against Android 3.0 (API level
-    11) or higher, tabs are typically presented in the UI using the new
-    {@link android.app.ActionBar#newTab() ActionBar.newTab()} and related APIs
-    for placing tabs within their action bar area.</p></li>
-  </ul>
-</li>
-</ul>
-
-<h3 id="media" style="margin-top:1em;">Media framework</h3>
-<ul>
-    <li>Applications that use the platform's media provider ({@link
-    android.provider.MediaStore}) can now read media data directly from the
-    removeable SD card, where supported by the device. Applications can also
-    interact with the SD card files directly, using the MTP API. </li>
-
-</ul>
-<h3 id="graphics" style="margin-top:1.25em;">Graphics</h3>
-<ul>
-<li>Parcelable utilities in Point and PointF
-  <ul>
-    <li>{@link android.graphics.Point} and {@link android.graphics.PointF}
-    classes now include the {@link android.os.Parcelable} interface and utility methods {@link
-    android.graphics.Point#describeContents()}, {@link
-    android.graphics.Point#readFromParcel(android.os.Parcel) readFromParcel()}, and {@link
-    android.graphics.Point#writeToParcel(android.os.Parcel, int) writeToParcel()}.</li>
-  </ul>
-</li>
-</ul>
-
-
-<h3 id="ime" style="margin-top:1.25em;">IME framework</h3>
-<ul>
-    <li>New {@link android.view.KeyEvent#getModifiers()} method for
-    retrieving the current state of the modifier keys.</li>
-</ul>
-
-
-<h3 id="usb" style="margin-top:1.25em;">USB framework</h3>
-<ul>
-    <li>New {@link
-    android.hardware.usb.UsbDeviceConnection#getRawDescriptors()} method for
-    retrieving the raw USB descriptors for the device. You can use the
-    method to access descriptors not supported directly via the higher
-    level APIs.</li>
-</ul>
-
-
-<h3 id="network" style="margin-top:1.25em;">Network</h3>
-<ul>
-<li>Network type constants
-   <ul>
-     <li>{@link android.net.ConnectivityManager} adds the constants {@link
-     android.net.ConnectivityManager#TYPE_ETHERNET} and {@link
-     android.net.ConnectivityManager#TYPE_BLUETOOTH}.</li>
-  </ul>
-</li>
-</ul>
-
-
-<h3 id="telephony" style="margin-top:1.25em;">Telephony</h3>
-<ul>
-    <li>New {@link android.telephony.TelephonyManager#NETWORK_TYPE_HSPAP} network type constant.</li>
-</ul>
-
-<h3 id="other" style="margin-top:1.25em;">Core utilities</h3>
-<ul>
-<li>Parcelable utilities
-  <ul>
-    <li>New interface {@link android.os.Parcelable.ClassLoaderCreator} allows
-    the application to receive the ClassLoader in which the object is being created.</li>
-    <li>New {@link android.os.ParcelFileDescriptor#adoptFd(int) adoptFd}, {@link
-    android.os.ParcelFileDescriptor#dup(java.io.FileDescriptor) dup()}, and {@link
-    android.os.ParcelFileDescriptor#fromFd(int) fromFd()} for managing
-    {@link android.os.ParcelFileDescriptor} objects.</li>
-  </ul>
-</li>
-<li>Binder and IBinder
-  <ul>
-    <li>New method {@link android.os.Binder#dumpAsync(java.io.FileDescriptor, java.lang.String[]) dumpAsync()}
-    in {@link android.os.Binder} and {@link android.os.IBinder} let applications
-    dump to a specified file, ensuring that the target executes asynchronously.</li>
-    <li>New {@link android.os.IBinder} protocol transaction code {@link
-    android.os.IBinder#TWEET_TRANSACTION} lets applications send a tweet
-    to the target object.</li>
-  </ul>
-</li>
-</ul>
-
-
-
-
-<h3 id="features">New feature constants</h3>
-
-<p>The platform adds new hardware feature constants that you can declare
-in their application manifests, to inform external entities such as Google
-Play of required hardware and software capabilities. You declare these
-and other feature constants in <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code
-&lt;uses-feature&gt;}</a> manifest elements.
-
-<p>Google Play filters applications based on their <code>&lt;uses-feature&gt;</code> attributes, to ensure that they are available only to devices on which their requirements are met. </p>
-
-<ul>
-<li>Feature constants for landscape or portrait requirements
-
-<p>Android 3.2 introduces new feature constants that let applications specify whether they require display in landscape orientation, portrait orientation, or both. Declaring these constants indicates that the application must not be installed on a device that doesn't offer the associated orientation. Conversely, if one or both of the constants are not declared, it indicates that the application does not have a preference for the undeclared orientations and may be installed on a device that doesn't offer them. </p>
-
-<ul>
-  <li>{@link android.content.pm.PackageManager#FEATURE_SCREEN_LANDSCAPE
-android.hardware.screen.landscape} &mdash; The application requires display in
-landscape orientation.</li>
-  <li>{@link android.content.pm.PackageManager#FEATURE_SCREEN_PORTRAIT
-android.hardware.screen.portrait} &mdash; The application requires display in
-portrait orientation.</li>
-</ul>
-
-<p>A typical application that functions properly in both landscape and portrait orientations would not normally need to declare an orientation requirement. Rather, an application designed primarily for one orientation, such as an app designed for a television, could declare one of the constants to ensure that it isn't available to devices that don't provide that orientation.</p>
-
-<p>If any of activities declared in the manifest request that they run in a specific orientation,
-using the <a href="{@docRoot}guide/topics/manifest/activity-element.html#screen">{@code
-android:screenOrientation}</a> attribute, then this also declares that the application
-requires that orientation.</p>
-
-</li>
-<li>Other feature constants
-
-<ul>
-  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH_MULTITOUCH_DISTINCT
-android.hardware.faketouch.multitouch.distinct} &mdash; The application requires support for emulated mulitouch input with distinct tracking of two or more points.</li>
-
-  <li>{@link android.content.pm.PackageManager#FEATURE_FAKETOUCH_MULTITOUCH_JAZZHAND
-android.hardware.faketouch.multitouch.jazzhand} &mdash; The application requires support for emulated mulitouch input with distinct tracking of five or more points.</li>
-</ul>
-
-</li>
-</ul>
-
-
-<h3 id="api-diff">API Differences Report</h3>
-
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API
-Level
-{@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API
-Differences Report</a>.</p>
-
-
-
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} platform delivers an updated version of
-the framework API. The Android {@sdkPlatformVersion} API
-is assigned an integer identifier &mdash;
-<strong>{@sdkPlatformApiLevel}</strong> &mdash; that is
-stored in the system itself. This identifier, called the "API Level", allows the
-system to correctly determine whether an application is compatible with
-the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application,
-you need compile the application against the Android library that is provided in
-the Android {@sdkPlatformVersion} SDK platform. Depending on your needs, you
-might
-also need to add an <code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code>
-attribute to the <code>&lt;uses-sdk&gt;</code> element in the application's
-manifest.</p>
-
-<p>For more information about how to use API Level, see the <a
-href="{@docRoot}guide/appendix/api-levels.html">API Levels</a> document. </p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>API Demos</li>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Contacts</li>
-<li>Custom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gallery</li>
-<li>Gestures Builder</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Spare Parts</li>
-<li>Speech Recorder</li>
-<li>Widget Preview</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety
-of
-built-in locales. In some cases, region-specific strings are available for the
-locales. In other cases, a default version of the language is used. The
-languages that are available in the Android 3.0 system
-image are listed below (with <em>language</em>_<em>country/region</em> locale
-descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, Zimbabwe (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian bokmål, Norway (nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes the following emulator skin:</p>
-
-<ul>
-  <li>
-    WXGA (1280x800, medium density, xlarge screen)
-  </li>
-</ul>
-
-<p>For more information about how to develop an application that displays
-and functions properly on all Android-powered devices, see <a
-href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
-Screens</a>.</p>
diff --git a/docs/html/sdk/android-4.0-highlights.jd b/docs/html/sdk/android-4.0-highlights.jd
deleted file mode 100644
index 98f467d..0000000
--- a/docs/html/sdk/android-4.0-highlights.jd
+++ /dev/null
@@ -1,1009 +0,0 @@
-page.title=Android 4.0 Platform Highlights
-
-@jd:body
-
-
-<style type="text/css">
-#jd-content {
-  max-width:1024px;
-}
-#jd-content div.screenshot {
-  float:left;
-  clear:left;
-  padding:15px 30px 15px 0;
-}
-#jd-content div.video {
-  float:right;
-  padding:0 0 40px 60px;
-  margin-top:-30px;
-}
-#jd-content table.columns {
-  margin:0 0 1em 0;
-}
-#jd-content table.columns td {
-  padding:0;
-}
-#jd-content table.columns td+td {
-  padding:0 2em;
-}
-#jd-content table.columns td img {
-  margin:0;
-}
-#jd-content table.columns td+td>*:first-child {
-  margin-top:-2em;
-}
-.green {
-  color:#8db529;
-  font-weight:bold;
-}
-</style>
-
-<div class="video">
-<iframe width="380" height="223" src="http://www.youtube.com/embed/-F_ke3rxopc?hd=1" frameborder="0"
-allowfullscreen></iframe>
-</div>
-
-<p>Welcome to Android 4.0!</p>
-
-<p>Android 4.0 delivers a refined, unified UI for phones and tablets and
-introduces innovative features for users and developers. This document provides
-a glimpse of the many new features and technologies that make Android 4.0
-simple, beautiful, and beyond smart. <!--For technical details about
-new developer APIs described below, see the <a
-href="{@docRoot}sdk/android-4.0.html">Android 4.0 API Overview</a>
-document.--></p>
-
-<ul>
-  <li><a href="#UserFeatures">Android 4.0 for Users</a></li>
-  <li><a href="#DeveloperApis">Android 4.0 for Developers</a></li>
-</ul>
-
-<h2 id="UserFeatures" style="clear:right">Android 4.0 for Users</h2>
-
-<div style="padding-bottom:0em;">
-<a href="{@docRoot}sdk/images/4.0/home-lg.png" target="_android"><img style="float:right;xborder:1px solid #ddd;border-radius: 5px;" src="{@docRoot}sdk/images/4.0/home.png" alt="" height="300" width="180" /></a>
-<a href="{@docRoot}sdk/images/4.0/lock-lg.png" target="_android"><img style="float:right;border:1px solid #ddd;border-radius: 5px;" src="{@docRoot}sdk/images/4.0/lock.png" alt="" height="300"  width="180" /></a>
-</div>
-
-
-<h3 id="simple" style="color:#172861">Simple, beautiful, beyond smart</h3>
-
-<p>Android 4.0 builds on the things people love most about Android &mdash; easy
-multitasking, rich notifications, customizable home screens, resizable widgets,
-and deep interactivity &mdash; and adds powerful new ways of communicating and
-sharing.</p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Refined, evolved UI</strong></p>
-
-<p>Focused on bringing the power of Android to the surface, Android 4.0 makes
-<strong>common actions more visible</strong> and lets users navigate with
-simple, intuitive gestures. Refined <strong>animations</strong> and feedback
-throughout the system make interactions engaging and interesting. An entirely
-<strong>new typeface</strong> optimized for high-resolution screens improves
-readability and brings a polished, modern feel to the user interface.</p>
-
-<p>Virtual buttons in the System Bar let users navigate instantly to Back, Home,
-and Recent Apps. The <strong>System Bar</strong> and virtual buttons are present
-across all apps, but can be dimmed by applications for full-screen viewing.
-Users can access each application's contextual options in the <strong>Action
-Bar</strong>, displayed at the top (and sometimes also at the bottom) of the
-screen.</p>
-
-<p><strong>Multitasking</strong> is a key strength of Android and it's made even
-easier and more visual on Android 4.0. The Recent Apps button lets users jump
-instantly from one task to another using the list in the System Bar. The list
-pops up to show thumbnail images of apps used recently &mdash; tapping a
-thumbnail switches to the app.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:.5em;float:left;width:182px;padding-top:.5em;">
-<a href="{@docRoot}sdk/images/4.0/tasks-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/tasks.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:1em;">The Recent Apps list makes multitasking simple.</div>
-<a href="{@docRoot}sdk/images/4.0/lock-camera-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/lock-camera.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:1.75em;">Jump to the camera or see notifications without unlocking.</div>
-<a href="{@docRoot}sdk/images/4.0/contact-call-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
-<!--<a href="{@docRoot}sdk/images/4.0/quick-response-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/quick-responses-new.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>-->
-<div style="padding-left:1em;padding-bottom:.5em;font-size:.9em;padding-right:1.75em;">For incoming calls, you can respond instantly by&nbsp;text.</div>
-</div>
-</div>
-
-<p>Rich and interactive <strong>notifications</strong> let users keep in
-constant touch with incoming messages, play music tracks, see real-time updates
-from apps, and much more. On smaller-screen devices, notifications appear at the
-top of the screen, while on larger-screen devices they appear in the System
-Bar.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;margin-top:.5em;margin-bottom:0;padding-bottom:0;width:326px">
-<a href="{@docRoot}sdk/images/4.0/allapps-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/allapps.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<a href="{@docRoot}sdk/images/4.0/calendar-widget-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/calendar-widget.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->The All Apps launcher (left) and resizable widgets (right) give you apps and rich content from the home screen.</div>
-</div>
-</div>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Home screen folders and
-favorites tray</strong></p>
-
-<p>New home screen <strong>folders</strong> offer a new way for users to group
-their apps and shortcuts logically, just by dragging one onto another. Also, 
-in All Apps launcher, users can now simply <strong>drag an app</strong> to get
-information about it or immediately uninstall it, or disable a pre-installed app.</p>
-
-<p>On smaller-screen devices, the home screen now includes a customizable
-<strong>favorites tray</strong> visible from all home screens. Users can drag
-apps, shortcuts, folders, and other priority items in or out of the favorites
-tray for instant access from any home screen.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Resizable
-widgets</strong></p>
-
-<p>Home screens in Android 4.0 are designed to be content-rich and customizable.
-Users can do much more than add shortcuts &mdash; they can embed live
-application content directly through interactive <strong>widgets</strong>.
-Widgets let users check email, flip through a calendar, play music, check social
-streams, and more &mdash; right from the home screen, without having to launch
-apps. Widgets are resizable, so users can expand them to show more content or
-shrink them to save space.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>New lock screen
-actions</strong></p>
-
-<p>The lock screens now let users do more without unlocking. From the slide lock
-screen, users can <strong>jump directly to the camera</strong> for a picture or
-<strong>pull down the notifications window</strong> to check for messages. When
-listening to music, users can even manage music tracks and see album art. </p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Quick responses for
-incoming calls</strong></p>
-
-<p>When an incoming call arrives, users can now quickly <strong>respond by text
-message</strong>, without needing to pick up the call or unlock the device. On
-the incoming call screen, users simply slide a control to see a list of text
-responses and then tap to send and end the call. Users can add their own
-responses and manage the list from the Settings app.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Swipe to dismiss
-notifications, tasks, and browser tabs</strong></p>
-
-<p>Android 4.0 makes managing notifications, recent apps, and browser tabs even
-easier. Users can now dismiss individual notifications, apps from the Recent
-Apps list, and browser tabs with a simple swipe of a finger. </p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;margin-top:1.5em;margin-bottom:0;padding-bottom:0;width:200px">
-<a href="{@docRoot}sdk/images/4.0/text-replace-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/text-replace.png" alt="" width="190" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->A spell-checker lets you find errors and fix them faster. </div>
-<a href="{@docRoot}sdk/images/4.0/tts-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/tts.png" alt="" width="190" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A powerful voice input engine lets you dictate continously.</div>
-</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Improved text input and
-spell-checking</strong></p>
-  
-<p>The soft keyboard in Android 4.0 makes text input even faster and more
-accurate. Error correction and word suggestion are improved through a new set of
-default dictionaries and more accurate heuristics for handling cases such as
-double-typed characters, skipped letters, and omitted spaces. Word suggestion
-is also improved and the suggestion strip is simplified to show only three
-words at a time.</p>
-
-<p>To fix misspelled words more easily, Android 4.0 adds a
-<strong>spell-checker</strong> that locates and underlines errors and suggests
-replacement words. With one tap, users can choose from multiple spelling
-suggestions, delete a word, or add it to the dictionary. Users can even tap to
-see replacement suggestions for words that are spelled correctly. For
-specialized features or additional languages, users can now download and install
-third-party dictionaries, spell-checkers, and other text services.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Powerful voice input
-engine</strong></p>
-
-<p>Android 4.0 introduces a powerful new voice input engine that offers a
-continuous "open microphone" experience and streaming voice recognition. The new
-voice input engine lets users dictate the text they want, for as long as they
-want, using the language they want. Users can <strong>speak continously</strong> for a prolonged
-time, even pausing for intervals if needed, and dictate punctuation to create
-correct sentences. As the voice input engine enters text, it underlines possible
-dictation errors in gray. After dictating, users can tap the underlined words to
-quickly replace them from a list of suggestions.</p>
-
-<div  style="padding-top:0em;">
-<div style="margsin-right:.8em;float:left;width:350px;padding-top:1em;">
-<a href="{@docRoot}sdk/images/4.0/usage-all-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/usage-all.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<a href="{@docRoot}sdk/images/4.0/usage-maps-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/usage-maps.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:1.75em;"><!--<strong>Figure 3.</strong>--> Data usage controls let you monitor total usage by network type and application and then set limits if needed.</div>
-</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Control over network
-data</strong></p>
-
-<p>Mobile devices can make extensive use of network data for streaming content,
-synchronizing data, downloading apps, and more. To meet the needs of users with
-<strong>tiered or metered data plans</strong>, Android 4.0 adds new controls for
-managing network data usage.</p>
-
-<p>In the Settings app, colorful charts show the total data usage on each
-network type (mobile or Wi-Fi), as well as amount of data used by each running
-application. Based on their data plans, users can optionally set warning levels
-or hard limits on data usage or disable mobile data altogether. Users can also
-manage the background data used by individual applications as needed.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Designed for
-accessibility</strong></p>
-
-<p>A variety of new features greatly enhance the accessibility of Android 4.0
-for blind or visually impaired users. Most important is a new
-<strong>explore-by-touch mode</strong> that lets users navigate without having
-to see the screen. Touching the screen once triggers audible feedback that
-identifies the UI component below; a second touch in the same component
-activates it with a full touch event. The new mode is especially important to
-support users on new devices that use virtual buttons in the System Bar, rather
-than dedicated hardware buttons or trackballs. Also, standard apps are updated
-to offer an improved accessibility experience. The <strong>Browser</strong>
-supports a script-based screen reader for reading favorite web content and
-navigating sites. For improved readability, users can also increase the default
-font size used across&nbsp;the&nbsp;system.</p>
-
-<p>The accessibility experience begins at first setup &mdash; a simple
-<strong>touch gesture</strong> during setup (clockwise square from upper left)
-activates all accessibility features and loads a setup tutorial. Once
-accessibility features are active, everything visible on the screen can be
-spoken aloud by the standard screen reader.</p>
-
-
-<h3 id="comms" style="color:#172861">Communication and sharing</h3>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:.5em;margin-top:1.5em;margin-bottom:0;padding-bottom:0;width:490px">
-<!--<img src="{@docRoot}sdk/images/4.0/contact-call.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" />-->
-<a href="{@docRoot}sdk/images/4.0/contact-faves-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/contact-faves.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
-<a href="{@docRoot}sdk/images/4.0/contact-connect-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/contact-connect.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
-<a href="{@docRoot}sdk/images/4.0/contact-email-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/contact-email.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;padding:0" /></a>
-
-<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->Contacts and profiles are integrated across apps and social networks, for a consistent, personal experience everywhere &mdash; from incoming calls to emails.</div>
-</div>
-</div>
-
-<p>Designed for the way people live, Android 4.0 integrates rich social
-communication and sharing touchpoints across the system, making it easy to talk,
-email, text, and share.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>People and
-profiles</strong></p>
-
-<p>Throughout the system, a user’s social groups, profiles, and contacts are
-linked together and integrated for easy accessibility. At the center is a new
-<strong>People app</strong> that offers richer profile information, including a
-large profile picture, phone numbers, addresses and accounts, status updates,
-events, stream items, and a new button for connecting on integrated social networks. </p>
-
-<p>The user's own contact information is stored in a new <strong>"Me"
-profile</strong>, allowing easier sharing with apps and people. All of the
-user's integrated contacts are displayed in an easy to manage list, including
-controls over which contacts are shown from any integrated account or social
-network. Wherever the user navigates across the system, tapping a profile photo
-displays Quick Contacts, with large profile pictures, shortcuts to phone numbers,
-text messaging, and more. </p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Unified calendar, visual
-voicemail</strong></p>
-
-<p>To help organize appointments and events, an updated <strong>Calendar
-app</strong> brings together personal, work, school, and social agendas. With
-user permission, other applications can contribute events to the calendar and
-manage reminders, for an integrated view across multiple calendar providers. The
-app is redesigned to let users manage events more easily. Calendars are
-color-coded and users can <strong>swipe left or right</strong> to change dates
-and pinch to zoom in or out agendas. </p>
-
-<p>In the phone app, a new <strong>visual voicemail</strong> features integrates
-incoming messages, voice transcriptions, and audio files from one or more
-providers. Third-party applications can integrate with the Phone app to add
-their own voice messages, transcriptions, and more to the visual voicemail
-inbox. </p>
-
-<div  style="padding-top:0em;">
-<div style="margsin-right:0em;float:left;width:282px;padding-top:1em;">
-<a href="{@docRoot}sdk/images/4.0/camera-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/camera.png" alt="" width="240" height="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<a href="{@docRoot}sdk/images/4.0/gallery-edit-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/gallery-edit.png" alt="" width="240" height="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<a href="{@docRoot}sdk/images/4.0/gallery-share-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/gallery-share.png" alt="" width="240" height="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;font-size:.9em;padding-right:2.75em;">Capture the picture you want, edit, and share instantly. </div>
-</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Rich and versatile camera
-capabilities</strong></p>
-
-<p>The Camera app includes many new features that let users capture special moments
-with great photos and videos. After capturing images, they can edit and share
-them easily with friends. </p>
-
-<p>When taking pictures, <strong>continuous focus</strong>, <strong>zero shutter
-lag exposure</strong>, and decreased shot-to-shot speed help capture clear,
-precise images. <strong>Stabilized image zoom</strong> lets users compose photos
-and video in the way they want, including while video is recording. For new
-flexibility and convenience while shooting video, users can now take
-<strong>snapshots at full video resolution</strong> just by tapping the screen
-as video continues to record.</p>
-
-<p>To make it easier to take great pictures of people, built-in <strong>face
-detection</strong> locates faces in the frame and automatically sets focus. For
-more control, users can <strong>tap to focus</strong> anywhere in the preview
-image. </p>
-
-<p>For capturing larger scenes, the Camera introduces a <strong>single-motion
-panorama</strong> mode. In this mode, the user starts an exposure and then
-slowly turns the Camera to encompass as wide a perspective as needed. The Camera
-assembles the full range of continuous imagery into a single panoramic
-photo.</p>
-
-<p>After taking a picture or video, users can quickly share it by email, text
-message, bluetooth, social networks, and more, just by tapping the thumbnail in
-the camera controls. </p>
-
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;padding-top:1em;margin-bottom:1em;padding-bottom:0;width:160px">
-<img src="{@docRoot}sdk/images/4.0/gallery-widget.png" alt="" width="144" style="border:1px solid #ddd;border-radius: 6px;" />
-<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em">A Photo Gallery widget on the home screen.</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Redesigned Gallery app
-with photo editor</strong></p>
-
-<p>The Gallery app now makes it easier to manage, show, and share photos and
-videos. For managing collections, a <strong>redesigned album layout</strong>
-shows many more albums and offers larger thumbnails. There are many ways to sort
-albums, including by time, location, people, and tags. To help pictures look
-their best, the Gallery now includes a powerful <strong>photo editor</strong>.
-Users can crop and rotate pictures, set levels, remove red eyes, add effects,
-and much more. After retouching, users can select one or multiple pictures or
-videos to share instantly over email, text messaging, bluetooth, social
-networks, or other apps.</p>
-
-<p>An improved <strong>Picture Gallery widget</strong> lets users look at
-pictures directly on their home screen. The widget can display pictures from a
-selected album, shuffle pictures from all albums, or show a single image. After
-adding the widget to the home screen, users can flick through the photo stacks
-to locate the image they want, then tap to load it in Gallery. </p>
-
-<div  style="padding-top:0em;clear:right;">
-<div style="margin-right:1em;float:right;margin-left:1em;padding-top:1em;margin-bottom:1em;padding-bottom:0;width:320px">
-<img src="{@docRoot}sdk/images/4.0/live-effects.png" alt="" width="297" style="border:1px solid #ddd;border-radius: 6px;" />
-<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Live Effects let you change backgrounds and use Silly Faces during video.</div>
-</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Live Effects for transforming video</strong></p>
-
-<p>Live Effects is a collection of graphical transformations that add interest
-and fun to videos captured in the Camera app. For example, users can
-<strong>change the background</strong> behind them to any stock or custom image,
-for just the right setting when shooting videeo. Also available for video is
-Silly Faces, a set of morphing effects that use state-of-the-art face
-recognition and GPU filters to transform facial features. For example, you can
-use effects such as small eyes, big mouth, big nose, face squeeze, and more.
-Outside of the Camera app, Live Effects is available during video chat in the
-Google Talk app.</p>
-
-<div  style="padding-top:0em;">
-<div style="margsin-right:.8em;float:left;width:186px;padding-top:1em;">
-<a href="{@docRoot}sdk/images/4.0/screenshot-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/screenshot.png" alt="" height="240"  width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"> Snapping a screenshot.</div>
-</div>
-</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Sharing with screenshots</strong></p>
-
-<p>Users can now share what's on their screens more easily by taking
-screenshots. Hardware buttons let them snap a <strong>screenshot</strong> and
-store it locally. Afterward, they can view, edit, and share the screen shot in
-Gallery or a similar app.</p>
-
-
-<h3 id="cloud" style="color:#172861">Cloud-connected experience</h3>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;padding-top:1em;margin-bottom:0;padding-bottom:0;width:326px">
-<a href="{@docRoot}sdk/images/4.0/browser-tabs-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/browser-tabs.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<a href="{@docRoot}sdk/images/4.0/browser-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/browser.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1.25em;margin-top:0;padding-top:0;font-size:.9em"><!--<strong>Figure 3.</strong>-->The Browser tabs menu <em>(left)</em> lets you quickly switch browser tabs. The options menu <em>(right)</em> gives you new ways to manage your browsing experience.</div>
-<img src="{@docRoot}sdk/images/4.0/bbench.png" alt="" width="310" />
-<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Benchmark comparisons of Android Browser.</div>
-</div>
-</div>
-
-<p>Android has always been cloud-connected, letting users browse the web and
-sync photos, apps, games, email, and contacts &mdash; wherever they are and
-across all of their devices. Android 4.0 adds new browsing and email
-capabilities to let users take even more with them and keep communication
-organized.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Powerful web
-browsing</strong></p>
-
-<p>The Android Browser offers an experience that’s as rich and convenient as a
-desktop browser. It lets users instantly sync and manage <strong>Google Chrome
-bookmarks</strong> from all of their accounts, jump to their favorite content
-faster, and even save it for reading later in case there's no network
-available.</p>
-
-<p>To get the most out of web content, users can now request full
-<strong>desktop versions</strong> of web sites, rather than their mobile
-versions. Users can set their preference for web sites separately for each
-<strong>browser tab</strong>. For longer content, users can save a copy for
-<strong>offline reading</strong>. To find and open saved pages, users can browse
-a visual list that’s included with browser bookmarks and history.  For better
-readability and accessibility, users can increase the browser’s <strong>zoom
-levels</strong> and override the system default <strong>text sizes</strong>.</p>
-
-<p>Across all types of content, the Android Browser offers dramatically improved
-<strong>page rendering performance</strong> through updated versions of the
-WebKit core and the V8 Crankshaft compilation engine for JavaScript. In
-benchmarks run on a Nexus S device, the Android 4.0 browser showed an
-improvement of nearly 220% over the Android 2.3 browser in the V8 Benchmark
-Suite and more than 35% in the SunSpider 9.1 JavaScript Benchmark. When run on a
-Galaxy Nexus device, the Android 4.0 browser showed improvement of nearly 550%
-in the V8 benchmark and nearly 70% in the SunSpider benchmark.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Improved
-email</strong></p>
-
-<p>In Android 4.0, email is easier to send, read, and manage. For composing
-email, <strong>improved auto-completion</strong> of recipients helps with
-finding and adding frequent contacts more quickly. For easier input of frequent
-text, users can now create <strong>quick responses</strong> and store them in
-the app, then enter them from a convenient menu when composing. When replying to
-a message, users can now toggle the message to Reply All and Forward without
-changing screens.</p>
-
-<p>For easier browsing across accounts and labels, the app adds an
-<strong>integrated menu</strong> of accounts and recent labels. To help users
-locate and organize IMAP and Exchange email, the Email app now supports
-<strong>nested mail subfolders</strong>, each with synchronization rules. Users
-can also search across folders on the server, for faster results. </p>
-
-<p>For <strong>enterprises</strong>, the Email app supports EAS v14. It supports
-EAS certificate authentication, provides ABQ strings for device type and mode,
-and allows automatic sync to be disabled while roaming. Administrators can also
-limit attachment size or disable attachments.</p>
-
-<p>For keeping track of incoming email more easily, a <strong>resizable Email
-widget</strong> lets users flick through recent email right from the home
-screen, then jump into the Email app to compose or reply.</p>
-
-
-<div  style="padding-top:0em;">
-<div style="margsin-right:.8em;float:left;width:186px;padding-top:1em;">
-<a href="{@docRoot}sdk/images/4.0/beam-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/beam.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em;padding-right:1.5em;">Android Beam lets users share what they are using with a single tap.</div>
-</div>
-</div>
-
-<h3 id="innovation" style="color:#172861">Innovation</h3>
-
-<p>Android is continously driving innovation forward, pushing the boundaries of
-communication and sharing with new capabilities and interactions.</p>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Android Beam for
-NFC-based sharing</strong></p>
-
-<p>Android Beam is an innovative, convenient feature for sharing across two
-NFC-enabled devices, It lets people instantly exchange favorite apps, contacts,
-music, videos &mdash; almost anything. It’s incredibly simple and convenient to
-use &mdash; there’s no menu to open, application to launch, or pairing needed.
-Just touch one Android-powered phone to another, then tap to send.</p>
-
-<p>For sharing apps, Android Beam pushes a link to the app's details page in
-Google Play. On the other device, the Google Play client app launches and loads the
-details page, for easy downloading of the app. Individual apps can build on
-Android Beam to add other types of interactions, such as passing game scores,
-initiating a multiplayer game or chat, and more.</p>
-
-<div  style="padding-top:0em;">
-<div style="margin-right:1em;float:right;margin-left:1em;margin-top:.5em;margin-bottom:0;padding-bottom:0;width:160px">
-<a href="{@docRoot}sdk/images/4.0/face-unlock-lg.png" target="_android">
-<img src="{@docRoot}sdk/images/4.0/face-unlock.png" alt="" height="240" width="144" style="border:1px solid #ddd;border-radius: 6px;" /></a>
-<div style="padding-left:1em;padding-bottom:1em;margin-top:0;padding-top:0;font-size:.9em">Face recognition lets you unlock your phone with your face.</div>
-</div>
-</div>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Face Unlock</strong></p>
-
-<p>Android 4.0 introduces a completely new approach to securing a device, making
-each person's device even more personal &mdash; Face Unlock is a new screen-lock
-option that lets users unlock their devices with their faces. It takes advantage
-of the device front-facing camera and state-of-the-art facial recognition
-technology to register a face during setup and then to recognize it again when
-unlocking the device. Users just hold their devices in front of their faces to
-unlock, or use a backup PIN or pattern. </p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Wi-Fi Direct and Bluetooth HDP</strong></p>
-
-<p>Support for <strong>Wi-Fi Direct</strong> lets users connect directly to
-nearby peer devices over Wi-Fi, for more reliable, higher-speed communication.
-No internet connection or tethering is needed. Through third-party apps, users
-can connect to compatible devices to take advantage of new features such as
-instant sharing of files, photos, or other media; streaming video or audio from
-another device; or connecting to compatible printers or other devices.</p>
-
-<p>Android 4.0 also introduces built-in support for connecting to <strong>Bluetooth Health Device Profile (HDP)</strong> devices. With support from third-party apps, users can connect to wireless medical devices and sensors in hospitals, fitness centers, homes, and elsewhere.</p>
-
-
-<h2 id="DeveloperApis" style="clear:right">New Developer Features</h2>
-
-<!-- <ul>
-<li><a href="#ui-dev">Unified UI framework for phones, tablets, and more</a></li>
-<li><a href="#communication-dev">Communication and sharing</a></li>
-<li><a href="#media-dev">New media capabilities</a></li>
-<li><a href="#connectivity-dev">New types of connectivity</a></li>
-<li><a href="#uicomp-dev">New UI components and capabilities</a></li>
-<li><a href="input-dev">New input types and text services</a></li>
-<li><a href="#accessibility-dev">Enhanced accessibility APIs</a></li>
-<li><a href="#data-dev">Efficient network usage</a></li>
-<li><a href="#security-dev">Security for apps and content</a></li>
-<li><a href="#enterprise-dev">Enhancements for Enterprise</a></li>
-</ul>-->
-
-<h3 id="ui-dev">Unified UI framework for phones, tablets, and more</h3>
-
-<p>Android 4.0 brings a unified UI framework that lets developers create
-elegant, innovative apps for phones, tablets, and more. It includes all of the
-familiar Android 3.x interface elements and APIs &mdash; fragments, content
-loaders, Action Bar, rich notifications, resizable home screen widgets, and more
-&mdash; as well as new elements and APIs.</p>
-
-<p>For developers, the unified UI framework in Android 4.0 means new UI tools,
-consistent design practices, simplified code and resources, and streamlined
-development across the range of Android-powered devices.</p>
-
-<div class="sidebox-wrapper">
-<div class="sidebox" style="border-left:1px solid #22a5ca;background-color:#fff;">
-  <h3>Key Android 3.x developer features, <br>now for phones too</h3>
-
-<p>Core UI</p>
-<ul>
-<li>Fragments and content loaders</li>
-<li>Resizeable home screen widgets</li>
-<li>Rich notifications</li>
-<li>Multi-selection, drag-drop, clipboard</li>
-<li>Improved screen-support API</li>
-<li>Hardware-accelerated 2D graphics</li>
-</ul>
-
-<p>Graphics and animation</p>
-<ul>
-<li>Property-based animation</li>
-<li>Renderscript 3D graphics</li>
-</ul>
-
-<p>Media and connectivity</p>
-<ul>
-<li>HTTP Live streaming</li>
-<li>Bluetooth A2DP and HSP devices</li>
-<li>Support for RTP</li>
-<li>MTP/PTP file transfer</li>
-<li>DRM framework</li>
-<li>Input from keyboard, mouse, gamepad, joystick</li>
-</ul>
-
-<p>Enterprise</p>
-<ul>
-<li>Full device encryption</li>
-<li>DPM policies for encrypted storage and passwords</li>
-</ul>
-</div>
-</div>
-
-<h3 id="communication-dev">Communication and sharing</h3>
-
-<p>Android 4.0 extends social and sharing features to any application on the
-device. Applications can integrate contacts, profile data, stream items, 
-and calendar events from any of the user’s activities or social networks.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Social API</strong></p>
-
-<p>A shared social provider and API provide a new unified store for contacts,
-profile data, stream items, and photos. Any app or social network with user
-permission can contribute raw contacts and make them accessible to other apps
-and networks. Applications with user permission can also read profile data from
-the provider and display it in their applications.</p>
-
-<p>The social API lets applications store standard contact data as well as new
-types of content for any given contact, including large profile photos, stream
-items, and recent activity feedback. Recent activity feedback is a standard way for
-applications to “tag” a contact with common activity, such as when the user
-calls the contact or sends an email or SMS message. The social provider uses the
-recent activity feedback as a new signal in ranking, such as for name
-auto-complete, to keep the most relevant contacts ranked closest to the top.</p>
-
-<p>Applications can also let users set up a social connection to a contact from
-the People app. When the user touches Add Connection in a contact, the app
-sends a public intent that other apps can handle, displaying any UI needed
-to create the social connection.</p>
-
-<p>Building on the social API, developers can add powerful new interactions that
-span multiple social networks and contacts sources.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Calendar API</strong></p>
-
-<p>A shared calendar content provider and framework API make it easier for
-developers to add calendar services to their apps.</p>
-
-<p>With user permission, any application can add events to the shared database
-and manage dates, attendees, alerts, and reminders. Applications can also read
-entries from the database, including events contributed by other applications,
-and handle the display of event alerts and reminders. Using the calendar
-provider, applications can take advantage of event data sourced from a variety
-of apps and protocols, to offer innovative ways of viewing and managing a user’s
-events. Apps can also use calendar data to improve the relevance of their
-other content.</p>
-
-<p>For lighter-weight access to calendar services, the Calendar app defines a
-set of public Intents for creating, viewing, and editing events. Rather than
-needing to implement a calendar UI and integrate directly with the calendar
-provider, applications can simply broadcast calendar Intents. When the Calendar
-app receives the Intents, it launches the appropriate UI and stores any event
-data entered. Using calendar Intents, for example, apps can let users add events
-directly from lists, dialogs, or home screen widgets, such as for making
-restaurant reservations or booking time with friends.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Visual voicemail
-API</strong></p>
-
-<p>A shared Voicemail provider and API allow developers to build applications
-that contribute to a unified voicemail store.  Voicemails are displayed and
-played in the call log tab of the platform’s Phone app.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Android Beam</strong></p>
-
-<p>Android Beam is an NFC-based feature that lets users instantly share
-information about the apps they are using, just by touching two NFC-enabled
-phones together. When the devices are in range &mdash; within a few centimeters
-&mdash; the system sets up an NFC connection and displays a sharing UI. To share
-whatever they are viewing with the other device, users just touch the screen.
-</p>
-
-<p>For developers, Android Beam is a new way of triggering almost any type of
-proximity-based interaction. For example, it can let users instantly exchange
-contacts, set up multiplayer gaming, join a chat or video call, share a photo or
-video, and more. The system provides the low-level NFC support and the sharing
-UI, while the foreground app provides lightweight data to transfer to the other
-device. Developers have complete control over the data that is shared and how it
-is handled, so almost any interaction is possible. For larger payloads,
-developers can even use Android Beam to initiate a connection and transfer the
-data over Bluetooth, without the need for user-visible pairing.</p>
-
-<p>Even if developers do not add custom interactions based on Android Beam they
-can still benefit from it being deeply integrated into Android. By default the
-system shares the app’s Google Play URL, so it’s easy for the user to
-download or purchase the app right away.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Modular sharing
-widget</strong></p>
-
-<p>The UI framework includes a new widget, ShareActionProvider, that lets
-developers quickly embed standard share functionality and UI in the Action Bar
-of their applications. Developers simply add ShareActionProvider to the menu and
-set an intent that describes the desired sharing action. The system handles the
-rest, building up the list of applications that can handle the share intent and
-dispatching the intent when the user chooses from the menu.</p>
-
-
-<h3 id="media-dev">New media capabilities</h3>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Low-level streaming
-multimedia</strong></p>
-
-<p>Android 4.0 provides a direct, efficient path for low-level streaming
-multimedia. The new path is ideal for applications that need to maintain
-complete control over media data before passing it to the platform for
-presentation. For example, media applications can now retrieve data from any
-source, apply proprietary encryption/decryption, and then send the data to the
-platform for display.</p>
-
-<p>Applications can now send processed data to the platform as a multiplexed
-stream of audio/video content in MPEG-2 transport stream format. The platform
-de-muxes, decodes, and renders the content. The audio track is rendered to the
-active audio device, while the video track is rendered to either a Surface or a
-SurfaceTexture. When rendering to a SurfaceTexture, the application can apply
-subsequent graphics effects to each frame using OpenGL.</p>
-
-<p>To support this low-level streaming, the platform introduces a new native API
-based on <a href="http://www.khronos.org/openmax/al/" target="_top">Khronos
-OpenMAX AL 1.0.1</a>. The  API is implemented on the same underlying services as
-the platform’s existing OpenSL ES API, so developers can make use of both APIs
-together if needed. Tools support for low-level streaming multimedia will be
-available in an upcoming release of the Android NDK.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>New camera
-capabilities</strong></p>
-
-<p>Developers can take advantage of a variety of new camera features in Android
-4.0. ZSL exposure, continuous focus, and image zoom let apps capture better
-still and video images, including during video capture. Apps can even capture
-full-resolution snapshots while shooting video. Apps can now set custom metering
-regions in a camera preview, then manage white balance and exposure dynamically
-for those regions. For easier focusing and image processing, a face-detection
-service identifies and tracks faces in a preview and returns their screen
-coordinates.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Media effects for
-transforming images and video</strong></p>
-
-<p>A set of high-performance transformation filters let developers apply rich
-effects to any image passed as an OpenGL ES 2.0 texture. Developers can adjust
-color levels and brightness, change backgrounds, sharpen, crop, rotate, add lens
-distortion, and apply other effects. The transformations are processed by the
-GPU, so they are fast enough for processing image frames loaded from disk,
-camera, or video stream.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Audio remote
-controls</strong></p>
-
-<p>Android 4.0 adds a new audio remote control API that lets media applications
-integrate with playback controls that are displayed in a remote view. Media
-applications can integrate with a remote music playback control that’s built
-into in the platform’s lock screen, allowing users to control song selection and
-playback without having to unlock and navigate to the music app.</p>
-
-<p>Using the audio remote control API, any music or media app can register to
-receive media button events from the remote control and then manage play state
-accordingly. The application can also supply metadata to the remote control,
-such as album art or image, play state, track number and description, duration,
-genre, and more.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>New media codecs and
-containers</strong></p>
-
-<p>Android 4.0 adds support for additional media types and containers to give
-developers access to the formats they need. For high-quality compressed images,
-the media framework adds support for WebP content. For video, the framework now
-supports streaming VP8 content. For streaming multimedia, the framework supports
-HTTP Live streaming protocol version 3 and encoding of ADTS-contained AAC
-content. Additionally, developers can now use Matroska containers for Vorbis and
-VP8 content.</p>
-
-
-<h3 id="connectivity-dev">New types of connectivity</h3>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Wi-Fi Direct</strong></p>
-
-<p>Developers can use a framework API to discover and connect directly to nearby
-devices over a high-performance, secure Wi-Fi Direct connection. No internet
-connection or hotspot is needed.</p>
-
-<p>Wi-Fi Direct opens new opportunities for developers to add innovative
-features to their applications. Applications can use Wi-Fi Direct to share
-files, photos, or other media between devices or between a desktop computer and
-an Android-powered device. Applications could also use Wi-Fi Direct to stream
-media content from a peer device such as a digital television or audio player,
-connect a group of users for gaming, print files, and more.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Bluetooth Health Device
-Profile (HDP)</strong></p>
-
-<p>Developers can now build powerful medical applications that use Bluetooth to
-communicate with wireless devices and sensors in hospitals, fitness centers,
-homes, and elsewhere. Applications can collect and manage data from HDP source
-devices and transmit it to backend medical applications such as records systems,
-data analysis services, and others.</p>
-
-<p>Using a framework API, applications can use Bluetooth to discover nearby
-devices, establish reliable or streaming data channels, and manage data
-transmission. Applications can supply any IEEE 11073 Manager to retrieve and
-interpret health data from Continua-certified devices such as heart-rate
-monitors, blood meters, thermometers, and scales. </p>
-
-
-<h3 id="uicomp-dev">New UI components and capabilities</h3>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Layout
-enhancements</strong></p>
-
-<p>A new layout, GridLayout, improves the performance of Android applications by
-supporting flatter view hierarchies that are faster to layout and render.
-Because hierarchies are flatter, developers can also manage alignments between
-components that are visually related to each other even when they are not
-logically related, for precise control over application UI. GridLayout is also
-specifically designed to be configured by drag-and-drop design tools such as the
-ADT Plug-in for Eclipse.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>OpenGL ES texture
-views</strong></p>
-
-<p>A new TextureView object lets developers directly integrate OpenGL ES
-textures as rendering targets in a UI hierarchy. The object lets developers
-display and manipulate OpenGL ES rendering just as they would a normal view
-object in the hierarchy, including moving, transforming, and animating the view
-as needed. The TextureView object makes it easy for developers to embed camera
-preview, decoded video, OpenGL game scenes, and more. TextureView can be viewed
-as a more powerful version of the existing SurfaceView object, since it offers
-the same benefits of access to a GL rendering surface, with the added advantage
-of having that surface participate fully in the normal view hierarchy.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Hardware-accelerated 2D
-drawing</strong></p>
-
-<p>All Android-powered devices running Android 4.0 are required to support
-hardware-accelerated 2D drawing. Developers can take advantage of this to add
-great UI effects while maintaining optimal performance on high-resolution
-screens, even on phones. For example, developers can rely on accelerated
-scaling, rotation, and other 2D operations, as well as accelerated UI components
-such as TextureView and compositing modes such as filtering, blending, and
-opacity.</p>
-
-
-<h3 id="input-dev">New input types and text services</h3>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Stylus input, button
-support, hover events</strong></p>
-
-<p>Android 4.0 includes full support for stylus input events, including tilt and
-distance axes, pressure, and related motion event properties. To help
-applications distinguish motion events from different sources, the platform adds
-distinct tool types for stylus, finger, mouse, and eraser. For improved input
-from multi-button pointing devices, the platform now provides distinct primary,
-secondary, and tertiary buttons, as well as back and forward buttons.
-Hover-enter and hover-exit events are also added, for improved navigation and
-accessibility. Developers can build on these new input features to add powerful
-interactions to their apps, such as precise drawing and gesturing, handwriting
-and shape recognition, improved mouse input, and others.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Text services API for
-integrating spelling checkers</strong></p>
-
-<p>Android 4.0 lets applications query available text services such as
-dictionaries and spell checkers for word suggestions, corrections, and similar
-data. The text services are external to the active IME, so developers can create
-and distribute dictionaries and suggestion engines that plug into the platform.
-When an application receives results from a text service &mdash; for example,
-word suggestions &mdash; it can display them in a dedicated suggestion popup
-window directly inside the text view, rather than relying on the IME to display
-them. </p>
-
-
-<h3 id="accessibility-dev">Enhanced accessibility APIs</h3>
-
-<p>Android 4.0 adds new accessibility features and an enhanced API to let
-developers improve the user experience in their apps, especially on devices that
-don’t have hardware buttons. For accessibility services such as screen readers
-in particular, the platform offers new APIs to query window content, for easier
-navigation, better feedback, and richer user interfaces.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Accessibility
-API</strong></p>
-
-<p>To let applications manage interactions more effectively when accessibility
-features are enabled, the platform adds accessibility events for
-explore-by-touch mode, scrolling, and text selection. For these and other
-events, the platform can attach a new object called an accessibility record that
-provides extra information about the event context.</p>
-
-<p>Using the accessibility record and related APIs, applications can now access
-the view hierarchy associated with an event. Applications can query for key
-properties such as parent and child nodes, available states, supported actions,
-screen position, and more. Applications can also request changes to certain
-properties to help manage focus and selected state. For example, an
-accessibility service could use these new capabilities to add convenient
-features such as screen-search by text. </p> 
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Text-to-speech
-API</strong></p>
-
-<p>A new framework API lets developers write text-to-speech engines and make
-them available to any app requesting TTS capabilities.</p>
-
-
-<h3 id="data-dev">Efficient network usage</h3>
-
-<p>In Android 4.0, users can see how much network data their running apps are
-using. They can also set limits on data usage by network type and disable
-background data usage for specific applications. In this context, developers
-need to design their apps to run efficiently and follow best practices for
-checking the network connection. Android 4.0 provides network APIs to let
-applications meet those goals.</p>
-
-<p>As users move between networks or set limits on network data, the platform
-lets applications query for connection type and availability. Developers can use
-this information to dynamically manage network requests to ensure the best
-experience for users. Developers can also build custom network and data-usage
-options into their apps, then expose them to users directly from Settings by
-means of a new system Intent.</p>
-
-
-<h3 id="security-dev">Security for apps and content</h3>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Secure management of
-credentials</strong></p>
-
-<p>Android 4.0 makes it easier for applications to manage authentication and
-secure sessions. A new keychain API and underlying encrypted storage let
-applications store and retrieve private keys and their corresponding certificate
-chains. Any application can use the keychain API to install and store user
-certificates and CAs securely.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Address Space Layout
-Randomization</strong></p>
-
-<p>Android 4.0 now provides address space layout randomization (ASLR) to help
-protect system and third party applications from exploitation due to
-memory-management issues.</p>
-
-
-<h3 id="enterprise-dev">Enhancements for Enterprise</h3>
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>VPN client
-API</strong></p>
-
-<p>Developers can now build or extend their own VPN solutions on the platform
-using a new VPN API and underlying secure credential storage. With user
-permission, applications can configure addresses and routing rules, process
-outgoing and incoming packets, and establish secure tunnels to a remote server.
-Enterprises can also take advantage of a standard VPN client built into the
-platform that provides access to L2TP and IPSec protocols.</p>
-
-
-<p style="margin-top:1em;margin-bottom:.75em;"><strong>Device policy management
-for camera</strong></p>
-
-<p>The platform adds a new policy control for administrators who manage devices
-using an installed Device Policy Manager. Administrators can now remotely
-disable the camera on a managed device for users working in sensitive
-environments.</p>
-
-
-
-
-
diff --git a/docs/html/sdk/android-4.0.3.jd b/docs/html/sdk/android-4.0.3.jd
deleted file mode 100644
index f6dbee0..0000000
--- a/docs/html/sdk/android-4.0.3.jd
+++ /dev/null
@@ -1,555 +0,0 @@
-page.title=Android 4.0.3 Platform
-sdk.platform.version=4.0.3
-sdk.platform.apiLevel=15
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#Honeycomb">Previous APIs</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/15/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-</div>
-</div>
-
-<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android {@sdkPlatformVersion} is an incremental release of the Android 4.x
-(Ice Cream Sandwich) platform family. This release includes new features for
-users and developers, API changes, and various bug fixes.</p>
-
-<p>For developers, the Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK. The development platform includes a
-fully compliant Android library and system image as well as a set of emulator
-skins, sample applications, and more. The downloadable platform includes no
-external libraries.</p>
-
-<p>To start developing or testing against Android {@sdkPlatformVersion},
-use the Android SDK Manager to download the platform into your SDK. For more
-information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
-
-<p>For a high-level overview of the new user and developer features, see the
-<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform
-Highlights</a>.</p>
-
-
-<h2 id="relnotes">Development Platform Revisions</h2>
-
-<p>The sections below provide notes about successive revisions of the Android
-{@sdkPlatformVersion} development platform for the Android SDK, as denoted by
-revision number. To determine what revisions you have installed in your SDK
-environment, refer to the "Installed Packages" listing in the Android SDK
-Manager.</p>
-
-<p class="caution"><strong>Important:</strong> To download the new Android
-4.0.x system components from the Android SDK Manager, you must first update the
-SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
-the Android 4.0.x system components will not be available for download.</p>
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-    Revision 3</a> <em>(March 2012)</em>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-
-    <p>Maintenance update. The system version is 4.0.4.</p>
-    <p class="note"><strong>Note:</strong> This system image includes support for emulator
-hardware graphics acceleration when used with SDK Tools r17 or higher.
-(<a href="{@docRoot}guide/developing/devices/emulator.html#accel-graphics">more info</a>)</p>
-    <dl>
-      <dt>Dependencies:</dt>
-      <dd>SDK Tools r17 or higher is required.</dd>
-    </dl>
-
-  </div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-    Revision 2</a> <em>(January 2012)</em>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-
-    <p>Maintenance update. The system version is 4.0.3.</p>
-    <dl>
-      <dt>Dependencies:</dt>
-      <dd>SDK Tools r14 or higher is required.</dd>
-    </dl>
-
-  </div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-    Revision 1</a> <em>(December 2011)</em>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-
-    <p>Initial release. The system version is 4.0.3.</p>
-    <dl>
-      <dt>Dependencies:</dt>
-      <dd>SDK Tools r14 or higher is required.</dd>
-    </dl>
-
-  </div>
-</div>
-
-<h2 id="api">API Overview</h2>
-
-<p>The sections below provide a technical overview of new APIs in Android 4.0.3.</p>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-    <strong>Table of Contents</strong>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-    <ol class="toc" style="margin-left:-1em">
-      <li><a href="#contacts">Social stream API in Contacts Provider</a></li>
-      <li><a href="#calendar">Calendar Provider</a></li>
-      <li><a href="#widgets">Home screen widgets</a></li>
-      <li><a href="#textservices">Spell-checking</a></li>
-      <li><a href="#bluetooth">Bluetooth</a></li>
-      <li><a href="#ui">UI toolkit</a></li>
-      <li><a href="#accessibility">Accessibility</a></li>
-      <li><a href="#tts">Text-to-speech</a></li>
-      <li><a href="#database">Database</a></li>
-      <li><a href="#intents">Intents</a></li>
-      <li><a href="#camera">Camera</a></li>
-      <li><a href="#permissions">Permissions</a></li>
-    </ol>
-  </div>
-</div>
-
-
-
-
-
-<h3 id="contacts">Social stream API in Contacts Provider</h3>
-
-<p>Applications that use social stream data such as status updates and check-ins
-can now sync that data with each of the user’s contacts, providing items in a
-stream along with photos for each.</p>
-
-<p>The database table that contains an individual contact’s social stream is
-defined by {@link android.provider.ContactsContract.StreamItems}, the Uri for
-which is nested within the {@link android.provider.ContactsContract.RawContacts}
-directory to which the stream items belong. Each social stream table includes
-several columns for metadata about each stream item, such as an icon
-representing the source (an avatar), a label for the item, the primary text
-content, comments about the item (such as responses from other people), and
-more. Photos associated with a stream are stored in another table, defined by
-{@link android.provider.ContactsContract.StreamItemPhotos}, which is available
-as a sub-directory of the {@link android.provider.ContactsContract.StreamItems}
-Uri.</p>
-
-<p>See {@link android.provider.ContactsContract.StreamItems} and
-{@link android.provider.ContactsContract.StreamItemPhotos} for more information.</p>
-
-<p>To read or write social stream items for a contact, an application must
-request permission from the user by declaring <code>&lt;uses-permission
-android:name="android.permission.READ_SOCIAL_STREAM"&gt;</code> and/or <code>&lt;uses-permission
-android:name="android.permission.WRITE_SOCIAL_STREAM"&gt;</code> in their manifest files.</p>
-
-<h3 id="calendar">Calendar Provider</h4>
-<ul>
-<li>Adds the class {@link android.provider.CalendarContract.Colors} to represent
-a color table in the <a href="{@docRoot}guide/topics/providers/calendar-provider.html">Calendar
-Provider</a>. The class provides fields for accessing
-colors available for a given account. Colors are referenced by 
-{@link android.provider.CalendarContract.ColorsColumns#COLOR_KEY COLOR_KEY}
-which must be unique for a given account name/type. These values can only be
-updated by the sync adapter.</li>
-<li>Adds {@link android.provider.CalendarContract.CalendarColumns#ALLOWED_AVAILABILITY ALLOWED_AVAILABILITY}
-and 
-{@link android.provider.CalendarContract.CalendarColumns#ALLOWED_ATTENDEE_TYPES ALLOWED_ATTENDEE_TYPES}
-for exchange/sync support.</li>
-<li>Adds {@link android.provider.CalendarContract.AttendeesColumns#TYPE_RESOURCE}
-(such as conference rooms) for attendees and 
-{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY_TENTATIVE},
-as well as {@link android.provider.CalendarContract.EventsColumns#EVENT_COLOR_KEY}
-for events.</li>
-</ul>
-
-<h3 id="widgets">Home screen widgets</h3>
-
-<p>Starting from Android 4.0, home screen widgets should no longer include their
-own padding. Instead, the system now automatically adds padding for each widget,
-based the characteristics of the current screen. This leads to a more uniform,
-consistent presentation of widgets in a grid. To assist applications that host
-home screen widgets, the platform provides a new method 
-{@link android.appwidget.AppWidgetHostView#getDefaultPaddingForWidget(android.content.Context, android.content.ComponentName, android.graphics.Rect)
-getDefaultPaddingForWidget()}. Applications can call this method to get the
-system-defined padding and account for it when computing the number of cells to
-allocate to the widget.</p>
-
-<h3 id="textservices">Spell-checking</h3>
-
-<ul>
-<li>For apps that accessing spell-checker services, a new {@link
-android.view.textservice.SpellCheckerSession#cancel() cancel()} method cancels
-any pending and running spell-checker tasks in a session.</li>
-
-<li>For spell-checker services, a new suggestions flag, 
-{@link android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS},
-lets the services distinguish higher-confidence suggestions from
-lower-confidence ones. For example, a spell-checker could set the flag if an
-input word is not in the user dictionary but has likely suggestions, or not set
-the flag if an input word is not in the dictionary and has suggestions that are
-likely to be less useful.
-
-<p>Apps connected to the spell-checker can use the {@link
-android.view.textservice.SuggestionsInfo#RESULT_ATTR_HAS_RECOMMENDED_SUGGESTIONS}
-flag in combination with other suggestion attributes, as well as the {@link
-android.view.textservice.SuggestionsInfo#getSuggestionsAttributes()} and {@link
-android.view.textservice.SuggestionsInfo#getSuggestionsCount()} methods, to
-determine whether to mark input words as typos and offer suggestions.</p></li>
-
-<li>A new {@link android.text.style.SuggestionSpan#FLAG_AUTO_CORRECTION} style
-for text spans indicates that auto correction is about to be applied to a
-word/text that the user is typing/composing. This type of suggestion is rendered
-differently, to indicate the auto correction is happening.</li>
-</ul>
-
-<h3 id="bluetooth">Bluetooth</h3>
-<p>New public methods {@link
-android.bluetooth.BluetoothDevice#fetchUuidsWithSdp()} and {@link
-android.bluetooth.BluetoothDevice#getUuids()} let apps determine the features
-(UUIDs) supported by a remote device. In the case of {@link
-android.bluetooth.BluetoothDevice#fetchUuidsWithSdp()}, the system performs a
-service discovery on the remote device to get the UUIDs supported, then
-broadcasts the result in an {@link
-android.bluetooth.BluetoothDevice#ACTION_UUID} intent.</p>
-
-<h3 id="ui">UI toolkit</h3>
-
-<p>New methods {@link android.app.Fragment#setUserVisibleHint(boolean) setUserVisibleHint()} and
-{@link android.app.Fragment#getUserVisibleHint() getUserVisibleHint()} allow a
-fragment to set a hint of whether or not it is currently user-visible. The
-system defers the start of fragments that are not user-visible until the loaders
-for visible fragments have run. The visibility hint is "true" by default.</li>
-</p>
-
-<h3 id="graphics">Graphics</h3>
-
-<ul>
-<li>New method {@link android.graphics.SurfaceTexture#setDefaultBufferSize(int
-width, int height)} in {@link android.graphics.SurfaceTexture} sets the default size of the image
-buffers. This method may be used to set the image size when producing images
-with {@link android.graphics.Canvas} (via {@link
-android.view.Surface#lockCanvas}), or OpenGL ES (via an EGLSurface).</li>
-<li>Adds definitions for the enums of the GL_OES_EGL_image_external OpenGL ES extension &mdash;
-{@link android.opengl.GLES11Ext#GL_REQUIRED_TEXTURE_IMAGE_UNITS_OES},
-{@link android.opengl.GLES11Ext#GL_SAMPLER_EXTERNAL_OES},
-{@link android.opengl.GLES11Ext#GL_TEXTURE_BINDING_EXTERNAL_OES}, and
-{@link android.opengl.GLES11Ext#GL_TEXTURE_EXTERNAL_OES}.</li>
-</ul>
-
-<h3 id="accessibility">Accessibility</h3>
-
-<ul>
-<li>Clients of {@link android.widget.RemoteViews} can now use the method {@link
-android.widget.RemoteViews#setContentDescription(int, java.lang.CharSequence)
-setContentDescription()} to set and get the content description of any View in
-the inflated layout.</li>
-
-<li>The methods {@link android.view.accessibility.AccessibilityRecord#getMaxScrollX()},
-{@link android.view.accessibility.AccessibilityRecord#getMaxScrollY()},
-{@link android.view.accessibility.AccessibilityRecord#setMaxScrollX(int) setMaxScrollX()}, and
-{@link android.view.accessibility.AccessibilityRecord#setMaxScrollY(int) setMaxScrollY()}
-allow apps to get and set the maximum scroll offset for an
-{@link android.view.accessibility.AccessibilityRecord} object.</li>
-
-<li>When touch-exploration mode is enabled, a new secure setting 
-{@link android.provider.Settings.Secure#ACCESSIBILITY_SPEAK_PASSWORD} 
-indicates whether the user requests the IME to speak text entered in password fields, even when
-a headset is not in use. By default, no password text is spoken unless a headset
-is in use.</li>
-</ul>
-
-<h3 id="tts">Text-to-speech</h3>
-
-<ul>
-<li>Adds the new method {@link
-android.speech.tts.TextToSpeech.Engine#getFeatures(java.util.Locale)
-getFeatures()}for querying and enabling network TTS support.
-<li>Adds a new listener class, {@link
-android.speech.tts.UtteranceProgressListener}, that engines can register to
-receive notification of speech-synthesis errors.</li>
-</ul>
-
-<h3 id="database">Database</h3>
-
-<ul>
-<li>A new {@link android.database.CrossProcessCursorWrapper} class lets content
-providers return results for a cross-process query more efficiently. The new
-class is a useful building block for wrapping cursors that will be sent to
-processes remotely. It can also transform normal {@link android.database.Cursor}
-objects into {@link android.database.CrossProcessCursor} objects
-transparently.
-
-<p>The {@link android.database.CrossProcessCursorWrapper} class fixes common
-performance issues and bugs that applications have encountered when
-implementing content providers.</p></li>
-
-<li>The {@link android.database.CursorWindow#CursorWindow(java.lang.String)}
-constructor now takes a name string as input. The system no longer distinguishes
-between local and remote cursor windows, so {@link
-android.database.CursorWindow#CursorWindow(boolean)} is now deprecated.</li>
-</ul>
-
-<h3 id="intents">Intents</h3>
-
-<p>Adds new categories for targeting common types of applications on the
-device, such as {@link android.content.Intent#CATEGORY_APP_BROWSER}, {@link
-android.content.Intent#CATEGORY_APP_CALENDAR}, {@link
-android.content.Intent#CATEGORY_APP_MAPS}, and more.</li>
-
-<h3 id="camera">Camera</h3>
-
-<ul>
-<li>{@link android.media.MediaMetadataRetriever} adds the new constant
-{@link android.media.MediaMetadataRetriever#METADATA_KEY_LOCATION} to let apps
-access retrieve location information for an image or video. </li>
-
-<li>{@link android.media.CamcorderProfile} adds the QVGA (320x240) resolution
-profiles. Quality level is represented by the
-{@link android.media.CamcorderProfile#QUALITY_QVGA}.and
-{@link android.media.CamcorderProfile#QUALITY_TIME_LAPSE_QVGA} constants.</li>
-
-<li>New methods {@link android.hardware.Camera.Parameters#setVideoStabilization(boolean) setVideoStabilization()},
-{@link android.hardware.Camera.Parameters#getVideoStabilization() setVideoStabilization()}, and {@link android.hardware.Camera.Parameters#isVideoStabilizationSupported() isVideoStabilizationSupported()}
-let you check and manage video stabilization for a {@link android.hardware.Camera}.</li>
-</ul>
-
-<h3 id="Permissions">Permissions</h3>
-
-<p>The following are new permissions:</p>
-<ul>
-<li>{@link android.Manifest.permission#READ_SOCIAL_STREAM} and 
-{@link android.Manifest.permission#WRITE_SOCIAL_STREAM}: Allow a sync
-adapter to read and write social stream data to a contact in the shared
-Contacts Provider.</li>
-</ul>
-
-
-<div class="special" style="margin-top:2em">
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
-{@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
-</div>
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} API is assigned an integer
-identifier&mdash;<strong>{@sdkPlatformApiLevel}</strong>&mdash;that is stored in the system itself.
-This identifier, called the "API level", allows the system to correctly determine whether an
-application is compatible with the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
-application against an Android platform that supports API level {@sdkPlatformApiLevel} or
-higher. Depending on your needs, you might also need to add an
-<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
-element.</p>
-
-<p>For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>
-document. </p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>API Demos</li>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Calendar</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Custom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-<li>Gallery</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gestures Builder</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>People</li>
-<li>Phone</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Speech Recorder</li>
-<li>Widget Preview</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety of built-in
-locales. In some cases, region-specific strings are available for the locales. In other cases, a
-default version of the language is used. The languages that are available in the Android 3.0 system
-image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian bokmål, Norway (nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes the following emulator skins:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA400 (240x400, low density, normal screen)
-  </li>
-  <li>
-    WQVGA432 (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-  <li>
-    WXGA720 (1280x720, extra-high density, normal screen) 
-  </li>
-  <li>
-    WSVGA (1024x600, medium density, large screen) 
-  </li>
-  <li>
-    WXGA (1280x800, medium density, xlarge screen)
-  </li>
-</ul>
-
-<p>To test your application on an emulator that represents the latest Android device, you can create
-an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
-currently doesn't support the new on-screen navigation bar for devices without hardware navigation
-buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
-<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
-
-<p>However, due to performance issues in the emulator when running high-resolution screens such as
-the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
-(hdpi, normal screen) to test your application.</p>
-
diff --git a/docs/html/sdk/android-4.0.jd b/docs/html/sdk/android-4.0.jd
deleted file mode 100644
index e3b13c8..0000000
--- a/docs/html/sdk/android-4.0.jd
+++ /dev/null
@@ -1,2059 +0,0 @@
-page.title=Android 4.0 Platform
-sdk.platform.version=4.0
-sdk.platform.apiLevel=14
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#relnotes">Revisions</a></li>
-  <li><a href="#api">API Overview</a></li>
-  <li><a href="#Honeycomb">Previous APIs</a></li>
-  <li><a href="#api-level">API Level</a></li>
-  <li><a href="#apps">Built-in Applications</a></li>
-  <li><a href="#locs">Locales</a></li>
-  <li><a href="#skins">Emulator Skins</a></li>
-</ol>
-
-<h2>Reference</h2>
-<ol>
-<li><a
-href="{@docRoot}sdk/api_diff/14/changes.html">API
-Differences Report &raquo;</a> </li>
-</ol>
-
-</div>
-</div>
-
-
-<p><em>API Level:</em>&nbsp;<strong>{@sdkPlatformApiLevel}</strong></p>
-
-<p>Android 4.0 is a major platform release that adds a variety of new features for users and app
-developers. Besides all the new features and APIs discussed below, Android 4.0 is an important
-platform release because it brings the extensive set of APIs and Holographic themes from Android 3.x
-to smaller screens. As an app developer, you now have a single platform and unified API framework
-that enables you to develop and publish your application with a single APK that provides an
-optimized user experience for handsets, tablets, and more, when running the same version of
-Android&mdash;Android 4.0 (API level 14) or greater. </p>
-
-<p>The Android {@sdkPlatformVersion} platform is available as a
-downloadable component for the Android SDK so you can begin developing and testing your
-applications on Android 4.0 with the Android emulator. The downloadable platform includes
-an Android library and system image, as well as a set of emulator skins and
-more. The downloadable platform does not include any external libraries.</p>
-
-<p>To start developing or testing against Android {@sdkPlatformVersion},
-use the Android SDK Manager to download the platform into your SDK. For more
-information, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK
-Components</a>. If you are new to Android, <a
-href="{@docRoot}sdk/index.html">download the SDK Starter Package</a> first.</p>
-
-<p class="note"><strong>Reminder:</strong> If you've already published an
-Android application, please test your application on Android {@sdkPlatformVersion} as
-soon as possible to be sure your application provides the best
-experience possible on the latest Android-powered devices.</p>
-
-<p>For a high-level overview of the new user and developer features in Android 4.0, see the
-<a href="http://developer.android.com/sdk/android-4.0-highlights.html">Platform Highlights</a>.</p>
-
-
-
-<h2 id="relnotes">Revisions</h2>
-
-<p>To determine what revision of the Android {@sdkPlatformVersion} platform you
-have installed, refer to the "Installed Packages" listing in the Android SDK Manager.</p>
-
-<p class="caution"><strong>Important:</strong> To download the new Android
-4.0 system components from the Android SDK Manager, you must first update the
-SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
-the Android 4.0 system components will not be available for download.</p>
-
-<div class="toggle-content opened" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png"
-class="toggle-content-img" alt="" />
-    Android {@sdkPlatformVersion}, Revision 2</a> <em>(December 2011)</em>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-    <p>Maintenance update. The system version is 4.0.2.</p>
-    <dl>
-      <dt>Dependencies:</dt>
-      <dd>SDK Tools r14 or higher is required.</dd>
-    </dl>
-  </div>
-</div>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-    Android {@sdkPlatformVersion}, Revision 1</a> <em>(October 2011)</em>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-    <p>Initial release. The system version is 4.0.1.</p>
-    <dl>
-      <dt>Dependencies:</dt>
-      <dd>SDK Tools r14 or higher is required.</dd>
-    </dl>
-  </div>
-</div>
-
-
-<h2 id="api">API Overview</h2>
-
-<p>The sections below provide a technical overview of new APIs in Android 4.0.</p>
-
-<div class="toggle-content closed" style="padding-left:1em;">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png"
-class="toggle-content-img" alt="" />
-    <strong>Table of Contents</strong>
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em;">
-    <ol class="toc" style="margin-left:-1em">
-      <li><a href="#Contacts">Social APIs in Contacts Provider</a></li>
-      <li><a href="#Calendar">Calendar Provider</a></li>
-      <li><a href="#Voicemail">Voicemail Provider</a></li>
-      <li><a href="#Multimedia">Multimedia</a></li>
-      <li><a href="#Camera">Camera</a></li>
-      <li><a href="#AndroidBeam">Android Beam (NDEF Push with NFC)</a></li>
-      <li><a href="#WiFiDirect">Wi-Fi Direct</a></li>
-      <li><a href="#Bluetooth">Bluetooth Health Devices</a></li>
-      <li><a href="#A11y">Accessibility</a></li>
-      <li><a href="#SpellChecker">Spell Checker Services</a></li>
-      <li><a href="#TTS">Text-to-speech Engines</a></li>
-      <li><a href="#NetworkUsage">Network Usage</a></li>
-      <li><a href="#RenderScript">RenderScript</a></li>
-      <li><a href="#Enterprise">Enterprise</a></li>
-      <li><a href="#Sensors">Device Sensors</a></li>
-      <li><a href="#ActionBar">Action Bar</a></li>
-      <li><a href="#UI">User Interface and Views</a></li>
-      <li><a href="#Input">Input Framework</a></li>
-      <li><a href="#Properties">Properties</a></li>
-      <li><a href="#HwAccel">Hardware Acceleration</a></li>
-      <li><a href="#Jni">JNI Changes</a></li>
-      <li><a href="#WebKit">WebKit</a></li>
-      <li><a href="#Permissions">Permissions</a></li>
-      <li><a href="#DeviceFeatures">Device Features</a></li>
-    </ol>
-  </div>
-</div>
-
-
-
-
-
-<h3 id="Contacts">Social APIs in Contacts Provider</h3>
-
-<p>The contact APIs defined by the {@link android.provider.ContactsContract} provider have been
-extended to support new social-oriented features such as a personal profile for the device owner and
-the ability for users to invite individual contacts to social networks that are installed on the
-device.</p>
-
-
-<h4>User Profile</h4>
-
-<p>Android now includes a personal profile that represents the device owner, as defined by the
-{@link android.provider.ContactsContract.Profile} table.  Social apps that maintain a user identity 
-can contribute to the user's profile data by creating a new {@link
-android.provider.ContactsContract.RawContacts} entry within the {@link
-android.provider.ContactsContract.Profile}. That is, raw contacts that represent the device user do
-not belong in the traditional raw contacts table defined by the {@link
-android.provider.ContactsContract.RawContacts} Uri; instead, you must add a profile raw contact in
-the table at {@link android.provider.ContactsContract.Profile#CONTENT_RAW_CONTACTS_URI}. Raw
-contacts in this table are then aggregated into the single user-visible profile labeled "Me".</p>
-
-<p>Adding a new raw contact for the profile requires the {@link
-android.Manifest.permission#WRITE_PROFILE} permission. Likewise, in order to read from the profile
-table, you must request the {@link android.Manifest.permission#READ_PROFILE} permission. However,
-most apps should not need to read the user profile, even when contributing data to the
-profile. Reading the user profile is a sensitive permission and you should expect users to be
-skeptical of apps that request it.</p>
-
-
-<h4>Invite Intent</h4>
-
-<p>The {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent action allows an app
-to invoke an action that indicates the user wants to add a contact to a social network. The app
-receiving the app uses it to invite the specified contact to that
-social network. Most apps will be on the receiving-end of this operation. For example, the
-built-in People app invokes the invite intent when the user selects "Add connection" for a specific
-social app that's listed in a person's contact details.</p> 
-
-<p>To make your app visible as in the "Add connection" list, your app must provide a sync adapter to
-sync contact information from your social network. You must then indicate to the system that your
-app responds to the {@link android.provider.ContactsContract.Intents#INVITE_CONTACT} intent by
-adding the {@code inviteContactActivity} attribute to your app’s sync configuration file, with a
-fully-qualified name of the activity that the system should start when sending the invite intent.
-The activity that starts can then retrieve the URI for the contact in question from the intent’s
-data and perform the necessary work to invite that contact to the network or add the person to the
-user’s connections.</p>
-
-<p>See the <a href="{@docRoot}resources/samples/SampleSyncAdapter/index.html">Sample Sync
-Adapter</a> app for an example (specifically, see the <a
-href="{@docRoot}resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html">contacts.xml</a>
-file).</p>
-
-
-<h4>Large photos</h4>
-
-<p>Android now supports high resolution photos for contacts. Now, when you push a photo into a
-contact record, the system processes it into both a 96x96 thumbnail (as it has previously) and a
-256x256 "display photo" that's stored in a new file-based photo store (the exact dimensions that the
-system chooses may vary in the future). You can add a large photo to a contact by putting a large
-photo in the usual {@link android.provider.ContactsContract.CommonDataKinds.Photo#PHOTO} column of a
-data row, which the system will then process into the appropriate thumbnail and display photo
-records.</p>
-
-
-<h4>Contact Usage Feedback</h4>
-
-<p>The new {@link android.provider.ContactsContract.DataUsageFeedback} APIs allow you to  help track
-how often the user uses particular methods of contacting people, such as how often the user uses
-each phone number or e-mail address. This information helps improve the ranking for each contact
-method associated with each person and provide better suggestions for contacting each person.</p>
-
-
-
-
-
-<h3 id="Calendar">Calendar Provider</h3>
-
-<p>The new calendar APIs allow you to read, add, modify and delete calendars, events, attendees,
-reminders and alerts, which are stored in the Calendar Provider.</p>
-
-<p>A variety of apps and widgets can use these APIs to read and modify calendar events. However,
-some of the most compelling use cases are sync adapters that synchronize the user's calendar from
-other calendar services with the Calendar Provider, in order to offer a unified location for all the
-user's events. Google Calendar events, for example, are synchronized with the Calendar Provider by
-the Google Calendar Sync Adapter, allowing these events to be viewed with Android's built-in
-Calendar app.</p>
-
-<p>The data model for calendars and event-related information in the Calendar Provider is
-defined by {@link android.provider.CalendarContract}. All the user’s calendar data is stored in a
-number of tables defined by various subclasses of {@link android.provider.CalendarContract}:</p>
-
-<ul>
-<li>The {@link android.provider.CalendarContract.Calendars} table holds the calendar-specific
-information. Each row in this table contains the details for a single calendar, such as the name,
-color, sync information, and so on.</li>
-
-<li>The {@link android.provider.CalendarContract.Events} table holds event-specific information.
-Each row in this table contains the information for a single event, such as the
-event title, location, start time, end time, and so on. The event can occur one time or recur
-multiple times. Attendees, reminders, and extended properties are stored in separate tables and
-use the event’s {@code _ID} to link them with the event.</li>
-
-<li>The {@link android.provider.CalendarContract.Instances} table holds the start and end time for
-occurrences of an event. Each row in this table represents a single occurrence. For one-time events
-there is a one-to-one mapping of instances to events. For recurring events, multiple rows are
-automatically generated to correspond to the multiple occurrences of that event.</li>
-
-<li>The {@link android.provider.CalendarContract.Attendees} table holds the event attendee or guest
-information. Each row represents a single guest of an event. It specifies the type of guest the
-person is and the person’s response for the event.</li>
-
-<li>The {@link android.provider.CalendarContract.Reminders} table holds the alert/notification data.
-Each row represents a single alert for an event. An event can have multiple reminders. The number of
-reminders per event is specified in {@code MAX_REMINDERS}, which is set by the sync adapter that
-owns the given calendar. Reminders are specified in number-of-minutes before the event is
-scheduled and specify an alarm method such as to use an alert, email, or SMS to remind
-the user.</li>
-
-<li>The {@link android.provider.CalendarContract.ExtendedProperties} table hold opaque data fields
-used by the sync adapter. The provider takes no action with items in this table except to delete
-them when their related events are deleted.</li>
-</ul>
-
-<p>To access a user’s calendar data with the Calendar Provider, your application must request 
-the {@link android.Manifest.permission#READ_CALENDAR} permission (for read access) and
-{@link android.Manifest.permission#WRITE_CALENDAR} (for write access).</p>
-
-
-<h4>Event intent</h4>
-
-<p>If all you want to do is add an event to the user’s calendar, you can use an {@link
-android.content.Intent#ACTION_INSERT} intent with the data defined by {@link
-android.provider.CalendarContract.Events#CONTENT_URI Events.CONTENT_URI} in order to start an
-activity in the Calendar app that creates new events. Using the intent does not require any
-permission and you can specify event details with the following extras:</p>
-
-<ul>
-  <li>{@link android.provider.CalendarContract.EventsColumns#TITLE Events.TITLE}: Name for the
-event</li>
-  <li>{@link
-android.provider.CalendarContract#EXTRA_EVENT_BEGIN_TIME CalendarContract.EXTRA_EVENT_BEGIN_TIME}:
-Event begin time in milliseconds from the
-epoch</li>
-  <li>{@link
-android.provider.CalendarContract#EXTRA_EVENT_END_TIME CalendarContract.EXTRA_EVENT_END_TIME}: Event
-end time in milliseconds from the epoch</li>
-  <li>{@link android.provider.CalendarContract.EventsColumns#EVENT_LOCATION Events.EVENT_LOCATION}:
-Location of the event</li>
-  <li>{@link android.provider.CalendarContract.EventsColumns#DESCRIPTION Events.DESCRIPTION}: Event
-description</li>
-  <li>{@link android.content.Intent#EXTRA_EMAIL Intent.EXTRA_EMAIL}: Email addresses of those to
-invite</li>
-  <li>{@link android.provider.CalendarContract.EventsColumns#RRULE Events.RRULE}: The recurrence
-rule for the event</li>
-  <li>{@link android.provider.CalendarContract.EventsColumns#ACCESS_LEVEL Events.ACCESS_LEVEL}:
-Whether the event is private or public</li>
-  <li>{@link android.provider.CalendarContract.EventsColumns#AVAILABILITY Events.AVAILABILITY}:
-Whether the time period of this event allows for other events to be scheduled at the same time</li>
-</ul>
-
-
-
-
-<h3 id="Voicemail">Voicemail Provider</h3>
-
-<p>The new Voicemail Provider allows applications to add voicemails to the
-device, in order to present all the user's voicemails in a single visual presentation. For instance,
-it’s possible that a user has multiple voicemail sources, such as
-one from the phone’s service provider and others from VoIP or other alternative voice
-services. These apps can use the Voicemail Provider APIs to add their voicemails to the device. The
-built-in Phone application then presents all voicemails to the user in a unified presentation.
-Although the system’s Phone application is the only application that can read all the voicemails,
-each application that provides voicemails can read those that it has added to the system (but cannot
-read voicemails from other services).</p>
-
-<p>Because the APIs currently do not allow third-party apps to read all the voicemails from the
-system, the only third-party apps that should use the voicemail APIs are those that have voicemail
-to deliver to the user.</p>
-
-<p>The {@link android.provider.VoicemailContract} class defines the content provider for the
-Voicemail Provder. The subclasses {@link android.provider.VoicemailContract.Voicemails} and {@link
-android.provider.VoicemailContract.Status} provide tables in which apps can
-insert voicemail data for storage on the device. For an example of a voicemail provider app, see the
-<a href="{@docRoot}resources/samples/VoicemailProviderDemo/index.html">Voicemail Provider
-Demo</a>.</p>
-
-
-
-
-
-<h3 id="Multimedia">Multimedia</h3>
-
-<p>Android 4.0 adds several new APIs for applications that interact with media such as photos,
-videos, and music.</p>
-
-
-<h4>Media Effects</h4>
-
-<p>A new media effects framework allows you to apply a variety of visual effects to images and
-videos. For example, image effects allow you to easily fix red-eye, convert an image to grayscale,
-adjust brightness, adjust saturation, rotate an image, apply a fisheye effect, and much more. The
-system performs all effects processing on the GPU to obtain maximum performance.</p>
-
-<p>For maximum performance, effects are applied directly to OpenGL textures, so your application
-must have a valid OpenGL context before it can use the effects APIs. The textures to which you apply
-effects may be from bitmaps, videos or even the camera. However, there are certain restrictions that
-textures must meet:</p>
-<ol>
-<li>They must be bound to a {@link android.opengl.GLES20#GL_TEXTURE_2D} texture image</li>
-<li>They must contain at least one mipmap level</li>
-</ol>
-
-<p>An {@link android.media.effect.Effect} object defines a single media effect that you can apply to
-an image frame. The basic workflow to create an {@link android.media.effect.Effect} is:</p>
-
-<ol>
-<li>Call {@link android.media.effect.EffectContext#createWithCurrentGlContext
-EffectContext.createWithCurrentGlContext()} from your OpenGL ES 2.0 context.</li>
-<li>Use the returned {@link android.media.effect.EffectContext} to call {@link
-android.media.effect.EffectContext#getFactory EffectContext.getFactory()}, which returns an instance
-of {@link android.media.effect.EffectFactory}.</li>
-<li>Call {@link android.media.effect.EffectFactory#createEffect createEffect()}, passing it an
-effect name from @link android.media.effect.EffectFactory}, such as {@link
-android.media.effect.EffectFactory#EFFECT_FISHEYE} or {@link
-android.media.effect.EffectFactory#EFFECT_VIGNETTE}.</li>
-</ol>
-
-<p>You can adjust an effect’s parameters by calling {@link android.media.effect.Effect#setParameter
-setParameter()} and passing a parameter name and parameter value. Each type of effect accepts
-different parameters, which are documented with the effect name. For example, {@link
-android.media.effect.EffectFactory#EFFECT_FISHEYE} has one parameter for the {@code scale} of the
-distortion.</p>
-
-<p>To apply an effect on a texture, call {@link android.media.effect.Effect#apply apply()} on the
-{@link
-android.media.effect.Effect} and pass in the input texture, it’s width and height, and the output
-texture. The input texture  must be bound to a {@link android.opengl.GLES20#GL_TEXTURE_2D} texture
-image (usually done by calling the {@link android.opengl.GLES20#glTexImage2D glTexImage2D()}
-function). You may provide multiple mipmap levels. If the output texture has not been bound to a
-texture image, it will be automatically bound by the effect as a {@link
-android.opengl.GLES20#GL_TEXTURE_2D} and with one mipmap level (0), which will have the same
-size as the input.</p> 
-
-<p>All effects listed in {@link android.media.effect.EffectFactory} are guaranteed to be supported.
-However, some additional effects available from external libraries are not supported by all devices,
-so you must first check if the desired effect from the external library is supported by calling
-{@link android.media.effect.EffectFactory#isEffectSupported isEffectSupported()}.</p>
-
-
-<h4>Remote control client</h4>
-
-<p>The new {@link android.media.RemoteControlClient} allows media players to enable playback
-controls from remote control clients such as the device lock screen. Media players can also expose
-information about the media currently playing for display on the remote control, such as track
-information and album art.</p>
-
-<p>To enable remote control clients for your media player, instantiate a {@link
-android.media.RemoteControlClient} with its constructor, passing it a {@link
-android.app.PendingIntent} that broadcasts {@link
-android.content.Intent#ACTION_MEDIA_BUTTON}. The intent must also declare the explicit {@link
-android.content.BroadcastReceiver} component in your app that handles the {@link
-android.content.Intent#ACTION_MEDIA_BUTTON} event.</p>
-
-<p>To declare which media control inputs your player can handle, you must call {@link
-android.media.RemoteControlClient#setTransportControlFlags setTransportControlFlags()} on your
-{@link android.media.RemoteControlClient}, passing a set of {@code FLAG_KEY_MEDIA_*} flags, such as
-{@link android.media.RemoteControlClient#FLAG_KEY_MEDIA_PREVIOUS} and {@link
-android.media.RemoteControlClient#FLAG_KEY_MEDIA_NEXT}.</p>
-
-<p>You must then register your {@link android.media.RemoteControlClient} by passing it to {@link
-android.media.AudioManager#registerRemoteControlClient MediaManager.registerRemoteControlClient()}.
-Once registered, the broadcast receiver you declared when you instantiated the {@link
-android.media.RemoteControlClient} will receive {@link android.content.Intent#ACTION_MEDIA_BUTTON}
-events when a button is pressed from a remote control. The intent you receive includes the {@link
-android.view.KeyEvent} for the media key pressed, which you can retrieve from the intent with {@link
-android.content.Intent#getParcelableExtra getParcelableExtra(Intent.EXTRA_KEY_EVENT)}.</p>
-
-<p>To display information on the remote control about the media playing, call {@link
-android.media.RemoteControlClient#editMetadata editMetaData()} and add metadata to the returned
-{@link android.media.RemoteControlClient.MetadataEditor}. You can supply a bitmap for media artwork,
-numerical information such as elapsed time, and text information such as the track title. For
-information on available keys see the {@code METADATA_KEY_*} flags in {@link
-android.media.MediaMetadataRetriever}.</p>
-
-<p>For a sample implementation, see the <a
-href="{@docRoot}resources/samples/RandomMusicPlayer/index.html">Random Music Player</a>, which
-provides compatibility logic such that it enables the remote control client on Android 4.0
-devices while continuing to support devices back to Android 2.1.</p>
-
-
-<h4>Media player</h4>
-
-<ul>
-<li>Streaming online media from {@link android.media.MediaPlayer} now requires the {@link
-android.Manifest.permission#INTERNET} permission. If you use {@link android.media.MediaPlayer} to
-play content from the Internet, be sure to add the {@link android.Manifest.permission#INTERNET}
-permission to your manifest or else your media playback will not work beginning with Android
-4.0.</li>
-
-<li>{@link android.media.MediaPlayer#setSurface(Surface) setSurface()} allows you define a {@link
-android.view.Surface} to behave as the video sink.</li>
-
-<li>{@link android.media.MediaPlayer#setDataSource(Context,Uri,Map) setDataSource()} allows you to
-send additional HTTP headers with your request, which can be useful for HTTP(S) live streaming</li>
-
-<li>HTTP(S) live streaming now respects HTTP cookies across requests</li>
-</ul>
-
-
-<h4>Media types</h4>
-
-<p>Android 4.0 adds support for:</p>
-<ul>
-<li>HTTP/HTTPS live streaming protocol version 3 </li>
-<li>ADTS raw AAC audio encoding</li>
-<li>WEBP images</li>
-<li>Matroska video</li>
-</ul>
-<p>For more info, see <a href="{@docRoot}guide/appendix/media-formats.html">Supported Media
-Formats</a>.</p>
-
-
-
-
-
-<h3 id="Camera">Camera</h3>
-
-<p>The {@link android.hardware.Camera} class now includes APIs for detecting faces and controlling
-focus and metering areas.</p>
-
-
-<h4>Face detection</h4>
-
-<p>Camera apps can now enhance their abilities with Android’s face detection APIs, which not
-only detect the face of a subject, but also specific facial features, such as the eyes and mouth.
-</p>
-
-<p>To detect faces in your camera application, you must register a {@link
-android.hardware.Camera.FaceDetectionListener} by calling {@link
-android.hardware.Camera#setFaceDetectionListener setFaceDetectionListener()}. You can then start
-your camera surface and start  detecting faces by calling {@link
-android.hardware.Camera#startFaceDetection}.</p>
-
-<p>When the system detects one or more faces in the camera scene, it calls the {@link
-android.hardware.Camera.FaceDetectionListener#onFaceDetection onFaceDetection()} callback in your
-implementation of {@link android.hardware.Camera.FaceDetectionListener}, including an array of
-{@link android.hardware.Camera.Face} objects.</p>
-
-<p>An instance of the {@link android.hardware.Camera.Face} class provides various information about
-the face detected, including:</p>
-<ul>
-<li>A {@link android.graphics.Rect} that specifies the bounds of the face, relative to the camera's
-current field of view</li>
-<li>An integer betwen 1 and 100 that indicates how confident the system is that the object is a
-human face</li>
-<li>A unique ID so you can track multiple faces</li>
-<li>Several {@link android.graphics.Point} objects that indicate where the eyes and mouth are
-located</li>
-</ul>
-
-<p class="note"><strong>Note:</strong> Face detection may not be supported on some
-devices, so you should check by calling {@link
-android.hardware.Camera.Parameters#getMaxNumDetectedFaces()} and ensure the return
-value is greater than zero. Also, some devices may not support identification of eyes and mouth,
-in which case, those fields in the {@link android.hardware.Camera.Face} object will be null.</p>
-
-  
-<h4>Focus and metering areas</h4>
-
-<p>Camera apps can now control the areas that the camera uses for focus and for metering white
-balance
-and auto-exposure. Both features use the new {@link android.hardware.Camera.Area} class to specify
-the region of the camera’s current view that should be focused or metered. An instance of the {@link
-android.hardware.Camera.Area} class defines the bounds of the area with a {@link
-android.graphics.Rect} and the area's weight&mdash;representing the level of importance of that
-area, relative to other areas in consideration&mdash;with an integer.</p>
-
-<p>Before setting either a focus area or metering area, you should first call {@link
-android.hardware.Camera.Parameters#getMaxNumFocusAreas} or {@link
-android.hardware.Camera.Parameters#getMaxNumMeteringAreas}, respectively. If these return zero, then
-the device does not support the corresponding feature.</p>
-
-<p>To specify the focus or metering areas to use, simply call {@link
-android.hardware.Camera.Parameters#setFocusAreas setFocusAreas()} or {@link
-android.hardware.Camera.Parameters#setMeteringAreas setMeteringAreas()}. Each take a {@link
-java.util.List} of {@link android.hardware.Camera.Area} objects that indicate the areas to consider
-for focus or metering. For example, you might implement a feature that allows the user to set the
-focus area by touching an area of the preview, which you then translate to an {@link
-android.hardware.Camera.Area} object and request that the camera focus on that area of the scene.
-The focus or exposure in that area will continually update as the scene in the area changes.</p>
-
-
-<h4>Continuous auto focus for photos</h4>
-
-<p>You can now enable continuous auto focusing (CAF) when taking photos. To enable CAF in your
-camera app, pass {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_PICTURE}
-to {@link android.hardware.Camera.Parameters#setFocusMode setFocusMode()}. When ready to capture
-a photo, call {@link android.hardware.Camera#autoFocus autoFocus()}. Your {@link
-android.hardware.Camera.AutoFocusCallback} immediately receives a callback to indicate whether
-focus was achieved. To resume CAF after receiving the callback, you must call {@link
-android.hardware.Camera#cancelAutoFocus()}.</p>
-
-<p class="note"><strong>Note:</strong> Continuous auto focus is also supported when capturing
-video, using {@link android.hardware.Camera.Parameters#FOCUS_MODE_CONTINUOUS_VIDEO}, which was
-added in API level 9.</p>
-
-
-<h4>Other camera features</h4>
-
-<ul>  
-<li>While recording video, you can now call {@link android.hardware.Camera#takePicture
-takePicture()} to save a photo without interrupting the video session. Before doing so, you should
-call {@link android.hardware.Camera.Parameters#isVideoSnapshotSupported} to be sure the hardware
-supports it.</li>
-
-<li>You can now lock auto exposure and white balance with {@link
-android.hardware.Camera.Parameters#setAutoExposureLock setAutoExposureLock()} and {@link
-android.hardware.Camera.Parameters#setAutoWhiteBalanceLock setAutoWhiteBalanceLock()} to prevent
-these properties from changing.</li>
-
-<li>You can now call {@link android.hardware.Camera#setDisplayOrientation
-setDisplayOrientation()} while the camera preview is running. Previously, you could call this
-only before beginning the preview, but you can now change the orientation at any time.</li>
-</ul>
-
-
-<h4>Camera broadcast intents</h4>
-
-<ul>
-<li>{@link android.hardware.Camera#ACTION_NEW_PICTURE Camera.ACTION_NEW_PICTURE}:
-This indicates that the user has captured a new photo. The built-in Camera app invokes this
-broadcast after a photo is captured and third-party camera apps should also broadcast this intent
-after capturing a photo.</li>
-<li>{@link android.hardware.Camera#ACTION_NEW_VIDEO Camera.ACTION_NEW_VIDEO}:
-This indicates that the user has captured a new video. The built-in Camera app invokes this
-broadcast after a video is recorded and third-party camera apps should also broadcast this intent
-after capturing a video.</li>
-</ul>
-
-
-
-
-
-<h3 id="AndroidBeam">Android Beam (NDEF Push with NFC)</h3>
-
-<p>Android Beam is a new NFC feature that allows you to send NDEF messages from one device to
-another (a process also known as “NDEF Push"). The data transfer is initiated when two
-Android-powered devices that support Android Beam are in close proximity (about 4 cm), usually with
-their backs touching. The data inside the NDEF message can contain any data that you wish to share
-between devices. For example, the People app shares contacts, YouTube shares videos, and Browser
-shares URLs using Android Beam.</p>
-
-<p>To transmit data between devices using Android Beam, you need to create an {@link
-android.nfc.NdefMessage} that contains the information you want to share while your activity is in
-the foreground. You must then pass the {@link android.nfc.NdefMessage} to the system in one of two
-ways:</p>
-
-<ul>
-<li>Define a single {@link android.nfc.NdefMessage} to push while in the activity:
-<p>Call {@link android.nfc.NfcAdapter#setNdefPushMessage setNdefPushMessage()} at any time to set
-the message you want to send. For instance, you might call this method and pass it your {@link
-android.nfc.NdefMessage} during your activity’s {@link android.app.Activity#onCreate onCreate()}
-method. Then, whenever Android Beam is activated with another device while the activity is in the
-foreground, the system sends the {@link android.nfc.NdefMessage} to the other device.</p></li>
-
-<li>Define the {@link android.nfc.NdefMessage} to push at the time that Android Beam is initiated:
-<p>Implement {@link android.nfc.NfcAdapter.CreateNdefMessageCallback}, in which your
-implementation of the {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()}
-method returns the {@link android.nfc.NdefMessage} you want to send. Then pass the {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback} implementation to {@link
-android.nfc.NfcAdapter#setNdefPushMessageCallback setNdefPushMessageCallback()}.</p>
-<p>In this case, when Android Beam is activated with another device while your activity is in the
-foreground, the system calls {@link
-android.nfc.NfcAdapter.CreateNdefMessageCallback#createNdefMessage createNdefMessage()} to retrieve
-the {@link android.nfc.NdefMessage} you want to send. This allows you to define the {@link
-android.nfc.NdefMessage} to deliver only once Android Beam is initiated, in case the contents
-of the message might vary throughout the life of the activity.</p></li>
-</ul>
-
-<p>In case you want to run some specific code once the system has successfully delivered your NDEF
-message to the other device, you can implement {@link
-android.nfc.NfcAdapter.OnNdefPushCompleteCallback} and set it with {@link
-android.nfc.NfcAdapter#setOnNdefPushCompleteCallback setNdefPushCompleteCallback()}. The system will
-then call {@link android.nfc.NfcAdapter.OnNdefPushCompleteCallback#onNdefPushComplete
-onNdefPushComplete()} when the message is delivered.</p>
-
-<p>On the receiving device, the system dispatches NDEF Push messages in a similar way to regular NFC
-tags. The system invokes an intent with the {@link android.nfc.NfcAdapter#ACTION_NDEF_DISCOVERED}
-action to start an activity, with either a URL or a MIME type set according to the first {@link
-android.nfc.NdefRecord} in the {@link android.nfc.NdefMessage}. For the activity you want to
-respond, you can declare intent filters for the URLs or MIME types your app cares about. For more
-information about Tag Dispatch see the <a
-href="{@docRoot}guide/topics/nfc/index.html#dispatch">NFC</a> developer guide.</p>
-
-<p>If you want your {@link android.nfc.NdefMessage} to carry a URI, you can now use the convenience
-method {@link android.nfc.NdefRecord#createUri createUri} to construct a new {@link
-android.nfc.NdefRecord} based on either a string or a {@link android.net.Uri} object. If the URI is
-a special format that you want your application to also receive during an Android Beam event, you
-should create an intent filter for your activity using the same URI scheme in order to receive the
-incoming NDEF message.</p>
-
-<p>You should also pass an “Android application record" with your {@link android.nfc.NdefMessage} in
-order to guarantee that your application handles the incoming NDEF message, even if other
-applications filter for the same intent action. You can create an Android application record by
-calling {@link android.nfc.NdefRecord#createApplicationRecord createApplicationRecord()}, passing it
-your application’s package name. When the other device receives the NDEF message with the
-application record and multiple applications contain activities that handle the specified intent,
-the system always delivers the message to the activity in your application (based on the matching
-application record). If the target device does not currently have your application installed, the
-system uses the Android application record to launch Google Play and take the user to the
-application in order to install it.</p>
-
-<p>If your application doesn’t use NFC APIs to perform NDEF Push messaging, then Android provides a
-default behavior: When your application is in the foreground on one device and Android Beam is
-invoked with another Android-powered device, then the other device receives an NDEF message with an
-Android application record that identifies your application. If the receiving device has the
-application installed, the system launches it; if it’s not installed, Google Play opens and takes
-the user to your application in order to install it.</p>
-
-<p>You can read more about Android Beam and other NFC features in the <a
-href="{@docRoot}guide/topics/nfc/nfc.html">NFC Basics</a> developer guide. For some example code
-using Android Beam, see the <a
-href="{@docRoot}resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html">Android
-Beam Demo</a>.</p>
-
-
-
-
-
-<h3 id="WiFiDirect">Wi-Fi Direct</h3>
-
-<p>Android now supports Wi-Fi Direct for peer-to-peer (P2P) connections between Android-powered
-devices and other device types without a hotspot or Internet connection. The Android framework
-provides a set of Wi-Fi P2P APIs that allow you to discover and connect to other devices when each
-device supports Wi-Fi Direct, then communicate over a speedy connection across distances much longer
-than a Bluetooth connection.</p>
-
-<p>A new package, {@link android.net.wifi.p2p}, contains all the APIs for performing peer-to-peer
-connections with Wi-Fi. The primary class you need to work with is {@link
-android.net.wifi.p2p.WifiP2pManager}, which you can acquire by calling {@link
-android.app.Activity#getSystemService getSystemService(WIFI_P2P_SERVICE)}. The {@link
-android.net.wifi.p2p.WifiP2pManager} includes APIs that allow you to:</p>
-<ul>
-<li>Initialize your application for P2P connections by calling {@link
-android.net.wifi.p2p.WifiP2pManager#initialize initialize()}</li>
-
-<li>Discover nearby devices by calling {@link android.net.wifi.p2p.WifiP2pManager#discoverPeers
-discoverPeers()}</li>
-
-<li>Start a P2P connection by calling {@link android.net.wifi.p2p.WifiP2pManager#connect
-connect()}</li>
-<li>And more</li>
-</ul>
-
-<p>Several other interfaces and classes are necessary as well, such as:</p>
-<ul>
-<li>The {@link android.net.wifi.p2p.WifiP2pManager.ActionListener} interface allows you to receive
-callbacks when an operation such as discovering peers or connecting to them succeeds or fails.</li>
-
-<li>{@link android.net.wifi.p2p.WifiP2pManager.PeerListListener} interface allows you to receive
-information about discovered peers. The callback provides a {@link
-android.net.wifi.p2p.WifiP2pDeviceList}, from which you can retrieve a {@link
-android.net.wifi.p2p.WifiP2pDevice} object for each device within range and get information such as
-the device name, address, device type, the WPS configurations the device supports, and more.</li>
-
-<li>The {@link android.net.wifi.p2p.WifiP2pManager.GroupInfoListener} interface allows you to
-receive information about a P2P group. The callback provides a {@link
-android.net.wifi.p2p.WifiP2pGroup} object, which provides group information such as the owner, the
-network name, and passphrase.</li>
-
-<li>{@link android.net.wifi.p2p.WifiP2pManager.ConnectionInfoListener} interface allows you to
-receive information about the current connection. The callback provides a {@link
-android.net.wifi.p2p.WifiP2pInfo} object, which has information such as whether a group has been
-formed and who is the group owner.</li>
-</ul>
-
-<p>In order to use the Wi-Fi P2P APIs, your app must request the following user permissions:</p>
-<ul>
-<li>{@link android.Manifest.permission#ACCESS_WIFI_STATE}</li>
-<li>{@link android.Manifest.permission#CHANGE_WIFI_STATE}</li>
-<li>{@link android.Manifest.permission#INTERNET} (although your app doesn’t technically connect
-to the Internet, communicating to Wi-Fi Direct peers with standard java sockets requires Internet
-permission).</li>
-</ul>
-
-<p>The Android system also broadcasts several different actions during certain Wi-Fi P2P events:</p>
-<ul>
-<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_CONNECTION_CHANGED_ACTION}: The P2P
-connection state has changed. This carries {@link
-android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_P2P_INFO} with a {@link
-android.net.wifi.p2p.WifiP2pInfo} object and {@link
-android.net.wifi.p2p.WifiP2pManager#EXTRA_NETWORK_INFO} with a {@link android.net.NetworkInfo}
-object.</li>
-
-<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_CHANGED_ACTION}: The P2P state has
-changed between enabled and disabled. It carries {@link
-android.net.wifi.p2p.WifiP2pManager#EXTRA_WIFI_STATE} with either {@link
-android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_DISABLED} or {@link
-android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_STATE_ENABLED}</li>
-
-<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_PEERS_CHANGED_ACTION}: The list of peer
-devices has changed.</li>
-
-<li>{@link android.net.wifi.p2p.WifiP2pManager#WIFI_P2P_THIS_DEVICE_CHANGED_ACTION}: The details for
-this device have changed.</li>
-</ul>
-
-<p>See the  {@link android.net.wifi.p2p.WifiP2pManager} documentation for more information. Also
-look at the <a href="{@docRoot}resources/samples/WiFiDirectDemo/index.html">Wi-Fi Direct Demo</a>
-sample application.</p>
-
-
-
-
-
-<h3 id="Bluetooth">Bluetooth Health Devices</h3>
-
-<p>Android now supports Bluetooth Health Profile devices, so you can create applications that use
-Bluetooth to communicate with health devices that support Bluetooth, such as heart-rate monitors,
-blood meters, thermometers, and scales.</p>
-
-<p>Similar to regular headset and A2DP profile devices, you must call {@link
-android.bluetooth.BluetoothAdapter#getProfileProxy getProfileProxy()} with a {@link
-android.bluetooth.BluetoothProfile.ServiceListener} and the {@link
-android.bluetooth.BluetoothProfile#HEALTH} profile type to establish a connection with the profile
-proxy object.</p>
-
-<p>Once you’ve acquired the Health Profile proxy (the {@link android.bluetooth.BluetoothHealth}
-object), connecting to and communicating with paired health devices involves the following new
-Bluetooth classes:</p>
-<ul>
-<li>{@link android.bluetooth.BluetoothHealthCallback}: You must extend this class and implement the
-callback methods to receive updates about changes in the application’s registration state and
-Bluetooth channel state.</li>
-<li>{@link android.bluetooth.BluetoothHealthAppConfiguration}: During callbacks to your {@link
-android.bluetooth.BluetoothHealthCallback}, you’ll receive an instance of this object, which
-provides configuration information about the available Bluetooth health device, which you must use
-to perform various operations such as initiate and terminate connections with the {@link
-android.bluetooth.BluetoothHealth} APIs.</li>
-</ul>
-
-<p>For more information about using the Bluetooth Health Profile, see the documentation for {@link
-android.bluetooth.BluetoothHealth}.</p>
-
-
-
-
-
-<h3 id="A11y">Accessibility</h3>
-
-<p>Android 4.0 improves accessibility for sight-impaired users with new explore-by-touch mode
-and extended APIs that allow you to provide more information about view content or
-develop advanced accessibility services.</p>
-
-
-<h4>Explore-by-touch mode</h4>
-
-<p>Users with vision loss can now explore the screen by touching and dragging a finger across the
-screen to hear voice descriptions of the content. Because the explore-by-touch mode works like a
-virtual cursor, it allows screen readers to identify the descriptive text the same way that screen
-readers can when the user navigates with a d-pad or trackball&mdash;by reading information provided
-by {@link android.R.attr#contentDescription android:contentDescription} and {@link
-android.view.View#setContentDescription setContentDescription()} upon a simulated "hover" event. So,
-consider this is a reminder that you should provide descriptive text for the views in your
-application, especially for {@link android.widget.ImageButton}, {@link android.widget.EditText},
-{@link android.widget.ImageView} and other widgets that might not naturally contain descriptive
-text.</p>
-
-
-<h4>Accessibility for views</h4>
-
-<p>To enhance the information available to accessibility services such as screen readers, you can
-implement new callback methods for accessibility events in your custom {@link
-android.view.View} components.</p>
-
-<p>It's important to first note that the behavior of the {@link
-android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} method has changed in Android
-4.0. As with previous version of Android, when the user enables accessibility services on the device
-and an input event such as a click or hover occurs, the respective view is notified with a call to
-{@link android.view.View#sendAccessibilityEvent sendAccessibilityEvent()}. Previously, the
-implementation of {@link android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} would
-initialize an {@link android.view.accessibility.AccessibilityEvent} and send it to {@link
-android.view.accessibility.AccessibilityManager}. The new behavior involves some additional callback
-methods that allow the view and its parents to add more contextual information to the event:
-<ol>
-  <li>When invoked, the {@link
-android.view.View#sendAccessibilityEvent sendAccessibilityEvent()} and {@link
-android.view.View#sendAccessibilityEventUnchecked sendAccessibilityEventUnchecked()} methods defer
-to {@link android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()}. 
-  <p>Custom implementations of {@link android.view.View} might want to implement {@link
-android.view.View#onInitializeAccessibilityEvent onInitializeAccessibilityEvent()} to
-attach additional accessibility information to the {@link
-android.view.accessibility.AccessibilityEvent}, but should also call the super implementation to
-provide default information such as the standard content description, item index, and more.
-However, you should not add additional text content in this callback&mdash;that happens
-next.</p></li>
-  <li>Once initialized, if the event is one of several types that should be populated with text
-information, the view then receives a call to {@link
-android.view.View#dispatchPopulateAccessibilityEvent dispatchPopulateAccessibilityEvent()}, which
-defers to the {@link android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}
-callback.
-  <p>Custom implementations of {@link android.view.View} should usually implement {@link
-android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()} to add additional
-text content to the {@link android.view.accessibility.AccessibilityEvent} if the {@link
-android.R.attr#contentDescription android:contentDescription} text is missing or
-insufficient. To add more text description to the
-{@link android.view.accessibility.AccessibilityEvent}, call {@link
-android.view.accessibility.AccessibilityEvent#getText()}.{@link java.util.List#add add()}.</p>
-</li>
-  <li>At this point, the {@link android.view.View} passes the event up the view hierarchy by calling
-{@link android.view.ViewGroup#requestSendAccessibilityEvent requestSendAccessibilityEvent()} on the
-parent view. Each parent view then has the chance to augment the accessibility information by
-adding an {@link android.view.accessibility.AccessibilityRecord}, until it
-ultimately reaches the root view, which sends the event to the {@link
-android.view.accessibility.AccessibilityManager} with {@link
-android.view.accessibility.AccessibilityManager#sendAccessibilityEvent
-sendAccessibilityEvent()}.</li>
-</ol>
-
-<p>In addition to the new methods above, which are useful when extending the {@link
-android.view.View} class, you can also intercept these event callbacks on any {@link
-android.view.View} by extending {@link
-android.view.View.AccessibilityDelegate AccessibilityDelegate} and setting it on the view with
-{@link android.view.View#setAccessibilityDelegate setAccessibilityDelegate()}.
-When you do, each accessibility method in the view defers the call to the corresponding method in
-the delegate. For example, when the view receives a call to {@link
-android.view.View#onPopulateAccessibilityEvent onPopulateAccessibilityEvent()}, it passes it to the
-same method in the {@link android.view.View.AccessibilityDelegate}. Any methods not handled by
-the delegate are given right back to the view for default behavior. This allows you to override only
-the methods necessary for any given view without extending the {@link android.view.View} class.</p>
-
-
-<p>If you want to maintain compatibility with Android versions prior to 4.0, while also supporting
-the new the accessibility APIs, you can do so with the latest version of the <em>v4 support
-library</em> (in <a href="{@docRoot}sdk/compatibility-library.html">Compatibility Package, r4</a>)
-using a set of utility classes that provide the new accessibility APIs in a backward-compatible
-design.</p>
-
-
-
-
-<h4>Accessibility services</h4>
-
-<p>If you're developing an accessibility service, the information about various accessibility events
-has been significantly expanded to enable more advanced accessibility feedback for users. In
-particular, events are generated based on view composition, providing better context information and
-allowing accessibility services to traverse view hierarchies to get additional view information and
-deal with special cases.</p>
-
-<p>If you're developing an accessibility service (such as a screen reader), you can access
-additional content information and traverse view hierarchies with the following procedure:</p>
-<ol>
-<li>Upon receiving an {@link android.view.accessibility.AccessibilityEvent} from an application,
-call the {@link android.view.accessibility.AccessibilityEvent#getRecord(int)
-AccessibilityEvent.getRecord()} to retrieve a specific {@link
-android.view.accessibility.AccessibilityRecord} (there may be several records attached to the
-event).</li>
-
-<li>From either {@link android.view.accessibility.AccessibilityEvent} or an individual {@link
-android.view.accessibility.AccessibilityRecord}, you can call {@link 
-android.view.accessibility.AccessibilityRecord#getSource() getSource()} to retrieve a {@link
-android.view.accessibility.AccessibilityNodeInfo} object.
-  <p>An {@link android.view.accessibility.AccessibilityNodeInfo} represents a single node
-of the window content in a format that allows you to query accessibility information about that
-node. The {@link android.view.accessibility.AccessibilityNodeInfo} object returned from {@link
-android.view.accessibility.AccessibilityEvent} describes the event source, whereas the source from
-an {@link android.view.accessibility.AccessibilityRecord} describes the predecessor of the event
-source.</p></li>
-
-<li>With the {@link android.view.accessibility.AccessibilityNodeInfo}, you can query information
-about it, call {@link
-android.view.accessibility.AccessibilityNodeInfo#getParent getParent()} or {@link
-android.view.accessibility.AccessibilityNodeInfo#getChild getChild()} to traverse the view
-hierarchy, and even add child views to the node.</li>
-</ol>
-
-<p>In order for your application to publish itself to the system as an accessibility service, it
-must declare an XML configuration file that corresponds to {@link
-android.accessibilityservice.AccessibilityServiceInfo}. For more information about creating an
-accessibility service, see {@link
-android.accessibilityservice.AccessibilityService} and {@link
-android.accessibilityservice.AccessibilityService#SERVICE_META_DATA
-SERVICE_META_DATA} for information about the XML configuration.</p>
-
-
-<h4>Other accessibility APIs</h4>
-
-<p>If you're interested in the device's accessibility state, the {@link
-android.view.accessibility.AccessibilityManager} has some new APIs such as:</p>
-<ul>
-  <li>{@link android.view.accessibility.AccessibilityManager.AccessibilityStateChangeListener}
-is an interface that allows you to receive a callback whenever accessibility is enabled or
-disabled.</li>
-  <li>{@link android.view.accessibility.AccessibilityManager#getEnabledAccessibilityServiceList
-    getEnabledAccessibilityServiceList()} provides information about which accessibility services
-    are currently enabled.</li>
-  <li>{@link android.view.accessibility.AccessibilityManager#isTouchExplorationEnabled()} tells
-  you whether the explore-by-touch mode is enabled.</li>
-</ul>
-
-
-
-
-
-
-<h3 id="SpellChecker">Spell Checker Services</h3>
-
-<p>A new spell checker framework allows apps to create spell checkers in a manner similar to the
-input method framework (for IMEs). To create a new spell checker, you must implement a service that
-extends
-{@link android.service.textservice.SpellCheckerService} and extend the {@link
-android.service.textservice.SpellCheckerService.Session} class to provide spelling suggestions based
-on text provided by the interface's callback methods. In the {@link
-android.service.textservice.SpellCheckerService.Session} callback methods, you must return the
-spelling suggestions as {@link android.view.textservice.SuggestionsInfo} objects. </p>
-
-<p>Applications with a spell checker service must declare the {@link
-android.Manifest.permission#BIND_TEXT_SERVICE} permission as required by the service.
-The service must also declare an intent filter with {@code &lt;action
-android:name="android.service.textservice.SpellCheckerService" />} as the intent’s action and should
-include a {@code &lt;meta-data&gt;} element that declares configuration information for the spell
-checker. </p>
-
-<p>See the sample <a href="{@docRoot}resources/samples/SpellChecker/SampleSpellCheckerService/index.html">
-Spell Checker Service</a> app and
-sample <a href="{@docRoot}resources/samples/SpellChecker/HelloSpellChecker/index.html">
-Spell Checker Client</a> app for example code.</p>
-
-
-
-
-<h3 id="TTS">Text-to-speech Engines</h3>
-
-<p>Android’s text-to-speech (TTS) APIs have been significantly extended to allow applications to
-more easily implement custom TTS engines, while applications that want to use a TTS engine have a
-couple new APIs for selecting an engine.</p>
-
-
-<h4>Using text-to-speech engines</h4>
-
-<p>In previous versions of Android, you could use the {@link android.speech.tts.TextToSpeech} class
-to perform text-to-speech (TTS) operations using the TTS engine provided by the system or set a
-custom engine using {@link android.speech.tts.TextToSpeech#setEngineByPackageName
-setEngineByPackageName()}. In Android 4.0, the {@link
-android.speech.tts.TextToSpeech#setEngineByPackageName setEngineByPackageName()} method has been
-deprecated and you can now specify the engine to use with a new {@link
-android.speech.tts.TextToSpeech} constructor that accepts the package name of a TTS engine.</p>
-
-<p>You can also query the available TTS engines with {@link
-android.speech.tts.TextToSpeech#getEngines()}. This method returns a list of {@link
-android.speech.tts.TextToSpeech.EngineInfo} objects, which include meta data such as the engine’s
-icon, label, and package name.</p>
-
-
-<h4>Building text-to-speech engines</h4>
-
-<p>Previously, custom engines required that the engine be built using an undocumented native header
-file. In Android 4.0, there is a complete set of framework APIs for building TTS engines. </p>
-
-<p>The basic setup requires an implementation of {@link android.speech.tts.TextToSpeechService} that
-responds to the {@link android.speech.tts.TextToSpeech.Engine#INTENT_ACTION_TTS_SERVICE} intent. The
-primary work for a TTS engine happens during the {@link
-android.speech.tts.TextToSpeechService#onSynthesizeText onSynthesizeText()} callback in a service
-that extends {@link android.speech.tts.TextToSpeechService}. The system delivers this method two
-objects:</p>
-<ul>
-<li>{@link android.speech.tts.SynthesisRequest}: This contains various data including the text to
-synthesize, the locale, the speech rate, and voice pitch.</li>
-<li>{@link android.speech.tts.SynthesisCallback}: This is the interface by which your TTS engine
-delivers the resulting speech data as streaming audio. First the engine must call {@link
-android.speech.tts.SynthesisCallback#start start()} to indicate that the engine is ready to deliver
-the audio, then call {@link android.speech.tts.SynthesisCallback#audioAvailable audioAvailable()},
-passing it the audio data in a byte buffer. Once your engine has passed all audio through the
-buffer, call {@link android.speech.tts.SynthesisCallback#done()}.</li>
-</ul>
-
-<p>Now that the framework supports a true API for creating TTS engines, support for the native code
-implementation has been removed. Look for a blog post about a compatibility layer
-that you can use to convert your old TTS engines to the new framework.</p>
-
-<p>For an example TTS engine using the new APIs, see the <a
-href="{@docRoot}resources/samples/TtsEngine/index.html">Text To Speech Engine</a> sample app.</p>
-
-
-
-
-
-
-<h3 id="NetworkUsage">Network Usage</h3>
-
-<p>Android 4.0 gives users precise visibility of how much network data their applications are using.
-The Settings app provides controls that allow users to manage set limits for network data usage and
-even disable the use of background data for individual apps. In order to avoid users disabling your
-app’s access to data from the background, you should develop strategies to use the data
-connection efficiently and adjust your usage depending on the type of connection available.</p>
-
-<p>If your application performs a lot of network transactions, you should provide user settings that
-allow users to control your app’s data habits, such as how often your app syncs data, whether to
-perform uploads/downloads only when on Wi-Fi, whether to use data while roaming, etc. With these
-controls available to them, users are much less likely to disable your app’s access to data when
-they approach their limits, because they can instead precisely control how much data your app uses.
-If you provide a preference activity with these settings, you should include in its manifest
-declaration an intent filter for the {@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE}
-action. For example:</p>
-
-<pre>
-&lt;activity android:name="DataPreferences" android:label="@string/title_preferences">
-    &lt;intent-filter>
-       &lt;action android:name="android.intent.action.MANAGE_NETWORK_USAGE" />
-       &lt;category android:name="android.intent.category.DEFAULT" />
-    &lt;/intent-filter>
-&lt;/activity>
-</pre>
-
-<p>This intent filter indicates to the system that this is the activity that controls your
-application’s data usage. Thus, when the user inspects how much data your app is using from the
-Settings app, a “View application settings" button is available that launches your
-preference activity so the user can refine how much data your app uses.</p>
-
-<p>Also beware that {@link android.net.ConnectivityManager#getBackgroundDataSetting()} is now
-deprecated and always returns true&mdash;use  {@link
-android.net.ConnectivityManager#getActiveNetworkInfo()} instead. Before you attempt any network
-transactions, you should always call {@link android.net.ConnectivityManager#getActiveNetworkInfo()}
-to get the {@link android.net.NetworkInfo} that represents the current network and query {@link
-android.net.NetworkInfo#isConnected()} to check whether the device has a
-connection. You can then check other connection properties, such as whether the device is
-roaming or connected to Wi-Fi.</p>
-
-
-
-
-
-
-
-
-<h3 id="RenderScript">RenderScript</h3>
-
-<p>Three major features have been added to RenderScript:</p>
-
-<ul>
-  <li>Off-screen rendering to a framebuffer object</li>
-  <li>Rendering inside a view</li>
-  <li>RS for each from the framework APIs</li>
-</ul>
-
-<p>The {@link android.renderscript.Allocation} class now supports a {@link
-android.renderscript.Allocation#USAGE_GRAPHICS_RENDER_TARGET} memory space, which allows you to
-render things directly into the {@link android.renderscript.Allocation} and use it as a framebuffer
-object.</p>
-
-<p>{@link android.renderscript.RSTextureView} provides a means to display RenderScript graphics
-inside of a {@link android.view.View},  unlike {@link android.renderscript.RSSurfaceView}, which
-creates a separate window. This key difference allows you to do things such as move, transform, or
-animate an {@link android.renderscript.RSTextureView} as well as draw RenderScript graphics inside
-a view that lies within an activity layout.</p>
-
-<p>The {@link android.renderscript.Script#forEach Script.forEach()} method allows you to call
-RenderScript compute scripts from the VM level and have them automatically delegated to available
-cores on the device. You do not use this method directly, but any compute RenderScript that you
-write will have a {@link android.renderscript.Script#forEach forEach()}  method that you can call in
-the reflected RenderScript class. You can call the reflected {@link
-android.renderscript.Script#forEach forEach()} method by passing in an input {@link
-android.renderscript.Allocation} to process, an output {@link android.renderscript.Allocation} to
-write the result to, and a {@link android.renderscript.FieldPacker} data structure in case the
-RenderScript needs more information. Only one of the {@link android.renderscript.Allocation}s is
-necessary and the data structure is optional.</p>
-
-
-
-
-
-
-
-
-
-<h3 id="Enterprise">Enterprise</h3>
-
-<p>Android 4.0 expands the capabilities for enterprise application with the following features.</p>
-
-<h4>VPN services</h4>
-
-<p>The new {@link android.net.VpnService} allows applications to build their own VPN (Virtual
-Private Network), running as a {@link android.app.Service}. A VPN service creates an interface for a
-virtual network with its own address and routing rules and performs all reading and writing with a
-file descriptor.</p>
-
-<p>To create a VPN service, use {@link android.net.VpnService.Builder}, which allows you to specify
-the network address, DNS server, network route, and more. When complete, you can establish the
-interface by calling {@link android.net.VpnService.Builder#establish()}, which returns a {@link
-android.os.ParcelFileDescriptor}. </p>
-
-<p>Because  a VPN service can intercept packets, there are security implications.  As such, if you
-implement {@link android.net.VpnService}, then your service must require the {@link
-android.Manifest.permission#BIND_VPN_SERVICE} to ensure that only the system can bind to it (only
-the system is granted this permission&mdash;apps cannot request it). To then use your VPN service,
-users must manually enable it in the system settings.</p>
-
-
-<h4>Device policies</h4>
-
-<p>Applications that manage the device restrictions can now disable the camera using {@link
-android.app.admin.DevicePolicyManager#setCameraDisabled setCameraDisabled()} and the {@link
-android.app.admin.DeviceAdminInfo#USES_POLICY_DISABLE_CAMERA} property (applied with a {@code
-&lt;disable-camera /&gt;} element in the policy configuration file).</p>
-
-
-<h4>Certificate management</h4>
-
-<p>The new {@link android.security.KeyChain} class provides APIs that allow you to import and access
-certificates in the system key store. Certificates streamline the installation of both client
-certificates (to validate the identity of the user) and certificate authority certificates (to
-verify server identity). Applications such as web browsers or email clients can access the installed
-certificates to authenticate users to servers. See the {@link android.security.KeyChain}
-documentation for more information.</p>
-
-
-
-
-
-
-
-<h3 id="Sensors">Device Sensors</h3>
-
-<p>Two new sensor types have been added in Android 4.0:</p>
-
-<ul>
-  <li>{@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE}: A temperature sensor that provides
-the ambient (room) temperature in degrees Celsius.</li>
-  <li>{@link android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY}: A humidity sensor that provides the
-relative ambient (room) humidity as a percentage.</li>
-</ul>
-
-<p>If a device has both {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} and  {@link
-android.hardware.Sensor#TYPE_RELATIVE_HUMIDITY} sensors, you can use them to calculate the dew point
-and the absolute humidity.</p>
-
-<p>The previous temperature sensor, {@link android.hardware.Sensor#TYPE_TEMPERATURE}, has been
-deprecated. You should use the {@link android.hardware.Sensor#TYPE_AMBIENT_TEMPERATURE} sensor
-instead.</p>
-
-<p>Additionally, Android’s three synthetic sensors have been greatly improved so they now have lower
-latency and smoother output. These sensors include the gravity sensor ({@link
-android.hardware.Sensor#TYPE_GRAVITY}), rotation vector sensor ({@link
-android.hardware.Sensor#TYPE_ROTATION_VECTOR}), and linear acceleration sensor ({@link
-android.hardware.Sensor#TYPE_LINEAR_ACCELERATION}). The improved sensors rely on the gyroscope
-sensor to improve their output, so the sensors appear only on devices that have a gyroscope.</p>
-
-
-
-
-
-<h3 id="ActionBar">Action Bar</h3>
-
-<p>The {@link android.app.ActionBar} has been updated to support several new behaviors. Most
-importantly, the system gracefully manages the action bar’s size and configuration when running on
-smaller screens in order to provide an optimal user experience on all screen sizes. For example,
-when the screen is narrow (such as when a handset is in portrait orientation), the action bar’s
-navigation tabs appear in a “stacked bar," which appears directly below the main action bar. You can
-also opt-in to a “split action bar," which places all action items in a separate bar at the bottom
-of the screen when the screen is narrow.</p>
-
-
-<h4>Split action bar</h4>
-
-<p>If your action bar includes several action items, not all of them will fit into the action bar on
-a narrow screen, so the system will place more of them into the overflow menu. However, Android 4.0
-allows you to enable “split action bar" so that more action items can appear on the screen in a
-separate bar at the bottom of the screen. To enable split action bar, add {@link
-android.R.attr#uiOptions android:uiOptions} with {@code "splitActionBarWhenNarrow"} to either your
-<a href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
-tag or
-individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-&lt;activity&gt;}</a> tags
-in your manifest file. When enabled, the system will add an additional bar at the bottom of the
-screen for all action items when the screen is narrow (no action items will appear in the primary
-action bar).</p>
-
-<p>If you want to use the navigation tabs provided by the {@link android.app.ActionBar.Tab} APIs,
-but don’t need the main action bar on top (you want only the tabs to appear at the top), then enable
-the split action bar as described above and also call {@link
-android.app.ActionBar#setDisplayShowHomeEnabled setDisplayShowHomeEnabled(false)} to disable the
-application icon in the action bar. With nothing left in the main action bar, it
-disappears&mdash;all that’s left are the navigation tabs at the top and the action items at the
-bottom of the screen.</p>
-
-
-<h4>Action bar styles</h4>
-
-<p>If you want to apply custom styling to the action bar, you can use new style properties {@link
-android.R.attr#backgroundStacked} and {@link android.R.attr#backgroundSplit} to apply a background
-drawable or color to the stacked bar and split bar, respectively. You can also set these styles at
-runtime with {@link android.app.ActionBar#setStackedBackgroundDrawable
-setStackedBackgroundDrawable()} and {@link android.app.ActionBar#setSplitBackgroundDrawable
-setSplitBackgroundDrawable()}.</p>
-
-
-<h4>Action provider</h4>
-
-<p>The new {@link android.view.ActionProvider} class allows you to create a specialized handler for
-action items. An action provider can define an action view, a default action behavior, and a submenu
-for each action item to which it is associated. When you want to create an action item that has
-dynamic behaviors (such as a variable action view, default action, or submenu), extending {@link
-android.view.ActionProvider} is a good solution in order to create a reusable component, rather than
-handling the various action item transformations in your fragment or activity.</p>
-
-<p>For example, the {@link android.widget.ShareActionProvider} is an extension of {@link
-android.view.ActionProvider} that facilitates a “share" action from the action bar. Instead of using
-traditional action item that invokes the {@link android.content.Intent#ACTION_SEND} intent, you can
-use this action provider to present an action view with a drop-down list of applications that handle
-the {@link android.content.Intent#ACTION_SEND} intent. When the user selects an application to use
-for the action, {@link android.widget.ShareActionProvider} remembers that selection and provides it
-in the action view for faster access to sharing with that app.</p>
-
-<p>To declare an action provider for an action item, include the {@code android:actionProviderClass}
-attribute in the <a href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
-&lt;item&gt;}</a> element for your activity’s options menu, with the class name of the action
-provider as the value. For example:</p>
-
-<pre>
-&lt;item android:id="@+id/menu_share"
-      android:title="Share"
-      android:showAsAction="ifRoom"
-      android:actionProviderClass="android.widget.ShareActionProvider" /&gt;
-</pre>
-
-<p>In your activity’s {@link android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()}
-callback method, retrieve an instance of the action provider from the menu item and set the
-intent:</p>
-
-<pre>
-public boolean onCreateOptionsMenu(Menu menu) {
-    getMenuInflater().inflate(R.menu.options, menu);
-    ShareActionProvider shareActionProvider =
-          (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider();
-    // Set the share intent of the share action provider.
-    shareActionProvider.setShareIntent(createShareIntent());
-    ...
-    return super.onCreateOptionsMenu(menu);
-}
-</pre>
-
-<p>For an example using the {@link android.widget.ShareActionProvider}, see <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html"
->ActionBarShareActionProviderActivity</a> in ApiDemos.</p>
-
-
-<h4>Collapsible action views</h4>
-
-<p>Action items that provide an action view can now toggle between their action view state and
-traditional action item state. Previously only the {@link android.widget.SearchView} supported
-collapsing when used as an action view, but now you can add an action view for any action item and
-switch between the expanded state (action view is visible) and collapsed state (action item is
-visible).</p>
-
-<p>To declare that an action item that contains an action view be collapsible, include the {@code
-“collapseActionView"} flag in the {@code android:showAsAction} attribute for the <a
-href="{@docRoot}guide/topics/resources/menu-resource.html#item-element">{@code
-&lt;item&gt;}</a> element in the menu’s XML file.</p>
-
-<p>To receive callbacks when an action view switches between expanded and collapsed, register an
-instance of {@link android.view.MenuItem.OnActionExpandListener} with the respective {@link
-android.view.MenuItem} by calling {@link android.view.MenuItem#setOnActionExpandListener
-setOnActionExpandListener()}. Typically, you should do so during the {@link
-android.app.Activity#onCreateOptionsMenu onCreateOptionsMenu()} callback.</p>
-
-<p>To control a collapsible action view, you can call {@link
-android.view.MenuItem#collapseActionView()} and {@link android.view.MenuItem#expandActionView()} on
-the respective {@link android.view.MenuItem}.</p>
-
-<p>When creating a custom action view, you can also implement the new {@link
-android.view.CollapsibleActionView} interface to receive callbacks when the view is expanded and
-collapsed.</p>
-
-
-<h4>Other APIs for action bar</h4>
-<ul>
-<li>{@link android.app.ActionBar#setHomeButtonEnabled setHomeButtonEnabled()} allows you to specify
-whether the icon/logo behaves as a button to navigate home or “up" (pass “true" to make it behave as
-a button).</li>
-
-<li>{@link android.app.ActionBar#setIcon setIcon()} and {@link android.app.ActionBar#setLogo
-setLogo()} allow you to define the action bar icon or logo at runtime.</li>
-
-<li>{@link android.app.Fragment#setMenuVisibility Fragment.setMenuVisibility()} allows you to enable
-or disable the visibility of the options menu items declared by the fragment. This is useful if the
-fragment has been added to the activity, but is not visible, so the menu items should be
-hidden.</li>
-
-<li>{@link android.app.FragmentManager#invalidateOptionsMenu
-FragmentManager.invalidateOptionsMenu()}
-allows you to invalidate the activity options menu during various states of the fragment lifecycle
-in which using the equivalent method from {@link android.app.Activity} might not be available.</li>
-</ul>
-
-
-
-
-
-
-
-
-<h3 id="UI">User Interface and Views</h3>
-
-<p>Android 4.0 introduces a variety of new views and other UI components.</p>
-
-
-<h4>GridLayout</h4>
-
-<p>{@link android.widget.GridLayout} is a new view group that places child views in a rectangular
-grid. Unlike {@link android.widget.TableLayout}, {@link android.widget.GridLayout} relies on a flat
-hierarchy and does not make use of intermediate views such as table rows for providing structure.
-Instead, children specify which row(s) and column(s) they should occupy (cells can span multiple
-rows and/or columns), and by default are laid out sequentially across the grid’s rows and columns.
-The {@link android.widget.GridLayout} orientation determines whether sequential children are by
-default laid out horizontally or vertically. Space between children may be specified either by using
-instances of the new {@link android.widget.Space} view or by setting the relevant margin parameters
-on children.</p>
-
-<p>See <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/index.html">ApiDemos</a
->
-for samples using {@link android.widget.GridLayout}.</p>
-
-
-
-<h4>TextureView</h4>
-
-<p>{@link android.view.TextureView} is a new view that allows you to display a content stream, such
-as a video or an OpenGL scene. Although similar to {@link android.view.SurfaceView}, {@link
-android.view.TextureView} is unique in that it behaves like a regular view, rather than creating a
-separate window, so you can treat it like any other {@link android.view.View} object. For example,
-you can apply transforms, animate it using {@link android.view.ViewPropertyAnimator}, or
-adjust its opacity with {@link android.view.View#setAlpha setAlpha()}.</p>
-
-<p>Beware that {@link android.view.TextureView} works only within a hardware accelerated window.</p>
-
-<p>For more information, see the {@link android.view.TextureView} documentation.</p>
-
-
-<h4>Switch widget</h4>
-
-<p>The new {@link android.widget.Switch} widget is a two-state toggle that users can drag to one
-side or the other (or simply tap) to toggle an option between two states.</p>
-
-<p>You can use the {@code android:textOn} and {@code android:textOff} attributes to specify the text
-to appear on the switch when in the on and off setting. The {@code android:text} attribute also
-allows you to place a label alongside the switch.</p>
-
-<p>For a sample using switches, see the <a
-href="{@docRoot}resources/samples/ApiDemos/res/layout/switches.html">switches.xml</a> layout file
-and respective <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html">Switches
-</a> activity.</p>
-
-
-<h4>Popup menus</h4>
-
-<p>Android 3.0 introduced {@link android.widget.PopupMenu} to create short contextual menus that pop
-up at an anchor point you specify (usually at the point of the item selected). Android 4.0 extends
-the {@link android.widget.PopupMenu} with a couple useful features:</p>
-<ul>
-<li>You can now easily inflate the contents of a popup menu from an XML <a
-href="{@docRoot}guide/topics/resources/menu-resource.html">menu resource</a> with {@link
-android.widget.PopupMenu#inflate inflate()}, passing it the menu resource ID.</li>
-<li>You can also now create a {@link android.widget.PopupMenu.OnDismissListener} that receives a
-callback when the menu is dismissed.</li>
-</ul>
-
-
-<h4>Preferences</h4>
-
-<p>A new {@link android.preference.TwoStatePreference} abstract class serves as the basis for
-preferences that provide a two-state selection option. The new {@link
-android.preference.SwitchPreference} is an extension of {@link
-android.preference.TwoStatePreference} that provides a {@link android.widget.Switch} widget in the
-preference view to allow users to toggle a setting on or off without the need to open an additional
-preference screen or dialog. For example, the Settings application uses a {@link
-android.preference.SwitchPreference} for the Wi-Fi and Bluetooth settings.</p>
-
-
-
-<h4>System themes</h4>
-
-<p>The default theme for all applications that target Android 4.0 (by setting either <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
-{@code “14"} or higher) is now the
-"device default" theme: {@link android.R.style#Theme_DeviceDefault Theme.DeviceDefault}. This may be
-the dark Holo theme or a different dark theme defined by the specific device.</p>
-
-<p>The {@link android.R.style#Theme_Holo Theme.Holo} family of themes are guaranteed to not change
-from one device to another when running the same version of Android. If you explicitly
-apply any of the {@link android.R.style#Theme_Holo Theme.Holo} themes to your activities, you can
-rest assured that these themes will not change character on different devices within the same
-platform version.</p>
-
-<p>If you wish for your app to blend in with the overall device theme (such as when different OEMs
-provide different default themes for the system), you should explicitly apply themes from the {@link
-android.R.style#Theme_DeviceDefault Theme.DeviceDefault} family.</p>
-
-
-<h4>Options menu button</h4>
-
-<p>Beginning with Android 4.0, you'll notice that handsets no longer require a Menu hardware button.
-However, there's no need for you to worry about this if your existing application provides an <a
-href="{@docRoot}guide/topics/ui/menus.html#options-menu">options menu</a> and expects there to be a
-Menu button. To ensure that existing apps continue to work as they expect, the system provides an
-on-screen Menu button for apps that were designed for older versions of Android.</p>
-
-<p>For the best user experience, new and updated apps should instead use the {@link
-android.app.ActionBar} to provide access to menu items and set <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
-{@code "14"} to take advantage of the latest framework default behaviors.</p>
-
-
-
-<h4>Controls for system UI visibility</h4>
-
-<p>Since the early days of Android, the system has managed a UI component known as the <em>status
-bar</em>, which resides at the top of handset devices to deliver information such as the carrier
-signal, time, notifications, and so on. Android 3.0 added the <em>system bar</em> for tablet
-devices, which resides at the bottom of the screen to provide system navigation controls (Home,
-Back, and so forth) and also an interface for elements traditionally provided by the status bar.  In
-Android 4.0, the system provides a new type of system UI called the <em>navigation bar</em>. You
-might consider the navigation bar a re-tuned version of the system bar designed for
-handsets&mdash;it provides navigation controls
-for devices that don’t have hardware counterparts for navigating the system, but it leaves out the
-system bar's notification UI and setting controls. As such, a device that provides the navigation
-bar also has the status bar at the top.</p>
-
-<p>To this day, you can hide the status bar on handsets using the {@link
-android.view.WindowManager.LayoutParams#FLAG_FULLSCREEN} flag. In Android 4.0, the APIs that control
-the system bar’s visibility have been updated to better reflect the behavior of both the system bar
-and navigation bar:</p>
-<ul>
-<li>The {@link android.view.View#SYSTEM_UI_FLAG_LOW_PROFILE} flag replaces the {@code
-STATUS_BAR_HIDDEN} flag. When set, this flag enables “low profile" mode for the system bar or
-navigation bar. Navigation buttons dim and other elements in the system bar also hide. Enabling
-this is useful for creating more immersive games without distraction for the system navigation
-buttons.</li>
-
-<li>The {@link android.view.View#SYSTEM_UI_FLAG_VISIBLE} flag replaces the {@code
-STATUS_BAR_VISIBLE} flag to request the system bar or navigation bar be visible.</li>
-
-<li>The {@link android.view.View#SYSTEM_UI_FLAG_HIDE_NAVIGATION} is a new flag that requests
-the navigation bar hide completely. Be aware that this works only for the <em>navigation bar</em>
-used by some handsets (it does <strong>not</strong> hide the system bar on tablets). The navigation
-bar returns to view as soon as the system receives user input. As such, this mode is useful
-primarily for video playback or other cases in which the whole screen is needed but user input is
-not required.</li>
-</ul>
-
-<p>You can set each of these flags for the system bar and navigation bar by calling {@link
-android.view.View#setSystemUiVisibility setSystemUiVisibility()} on any view in your activity. The
-window manager combines (OR-together) all flags from all views in your window and
-apply them to the system UI as long as your window has input focus. When your window loses input
-focus (the user navigates away from your app, or a dialog appears), your flags cease to have effect.
-Similarly, if you remove those views from the view hierarchy their flags no longer apply.</p>
-
-<p>To synchronize other events in your activity with visibility changes to the system UI (for
-example, hide the action bar or other UI controls when the system UI hides), you should register a
-{@link android.view.View.OnSystemUiVisibilityChangeListener} to be notified when the visibility
-of the system bar or navigation bar changes.</p>
-
-<p>See the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html">
-OverscanActivity</a> class for a demonstration of different system UI options.</p>
-
-
-
-
-
-<h3 id="Input">Input Framework</h3>
-
-<p>Android 4.0 adds support for cursor hover events and new stylus and mouse button events.</p>
-
-<h4>Hover events</h4>
-
-<p>The {@link android.view.View} class now supports “hover" events to enable richer interactions
-through the use of pointer devices (such as a mouse or other devices that drive an on-screen
-cursor).</p>
-
-<p>To receive hover events on a view, implement the {@link android.view.View.OnHoverListener} and
-register it with {@link android.view.View#setOnHoverListener setOnHoverListener()}. When a hover
-event occurs on the view, your listener receives a call to {@link
-android.view.View.OnHoverListener#onHover onHover()}, providing the {@link android.view.View} that
-received the event and a {@link android.view.MotionEvent} that describes the type of hover event
-that occurred. The hover event can be one of the following:</p>
-<ul>
-<li>{@link android.view.MotionEvent#ACTION_HOVER_ENTER}</li>
-<li>{@link android.view.MotionEvent#ACTION_HOVER_EXIT}</li>
-<li>{@link android.view.MotionEvent#ACTION_HOVER_MOVE}</li>
-</ul>
-
-<p>Your {@link android.view.View.OnHoverListener} should return true from {@link
-android.view.View.OnHoverListener#onHover onHover()} if it handles the hover event.  If your
-listener returns false, then the hover event will be dispatched to the parent view as usual.</p>
-
-<p>If your application uses buttons or other widgets that change their appearance based on the
-current state, you can now use the {@code android:state_hovered} attribute in a <a
-href="{@docRoot}guide/topics/resources/drawable-resource.html#StateList">state list drawable</a> to
-provide a different background drawable when a cursor hovers over the view.</p>
-
-<p>For a demonstration of the new hover events, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/view/Hover.html">Hover</a> class in
-ApiDemos.</p>
-
-
-<h4>Stylus and mouse button events</h4>
-
-<p>Android now provides APIs for receiving input from a stylus input device such as a digitizer
-tablet peripheral or a stylus-enabled touch screen.</p>
-
-<p>Stylus input operates in a similar manner to touch or mouse input.  When the stylus is in contact
-with the digitizer, applications receive touch events just like they would when a finger is used to
-touch the display.  When the stylus is hovering above the digitizer, applications receive hover
-events just like they would when a mouse pointer was being moved across the display when no buttons
-are pressed.</p>
-
-<p>Your application can distinguish between finger, mouse, stylus and eraser input by querying the
-“tool type" associated with each pointer in a {@link android.view.MotionEvent} using {@link
-android.view.MotionEvent#getToolType getToolType()}.  The currently defined tool types are: {@link
-android.view.MotionEvent#TOOL_TYPE_UNKNOWN}, {@link android.view.MotionEvent#TOOL_TYPE_FINGER},
-{@link android.view.MotionEvent#TOOL_TYPE_MOUSE}, {@link android.view.MotionEvent#TOOL_TYPE_STYLUS},
-and {@link android.view.MotionEvent#TOOL_TYPE_ERASER}.  By querying the tool type, your application
-can choose to handle stylus input in different ways from finger or mouse input.</p>
-
-<p>Your application can also query which mouse or stylus buttons are pressed by querying the “button
-state" of a {@link android.view.MotionEvent} using {@link android.view.MotionEvent#getButtonState
-getButtonState()}.  The currently defined button states are: {@link
-android.view.MotionEvent#BUTTON_PRIMARY}, {@link android.view.MotionEvent#BUTTON_SECONDARY}, {@link
-android.view.MotionEvent#BUTTON_TERTIARY}, {@link android.view.MotionEvent#BUTTON_BACK}, and {@link
-android.view.MotionEvent#BUTTON_FORWARD}. For convenience, the back and forward mouse buttons are
-automatically mapped to the {@link android.view.KeyEvent#KEYCODE_BACK} and {@link
-android.view.KeyEvent#KEYCODE_FORWARD} keys.  Your application can handle these keys to support
-mouse button based back and forward navigation.</p>
-
-<p>In addition to precisely measuring the position and pressure of a contact, some stylus input
-devices also report the distance between the stylus tip and the digitizer, the stylus tilt angle,
-and the stylus orientation angle.  Your application can query this information using {@link
-android.view.MotionEvent#getAxisValue getAxisValue()} with the axis codes {@link
-android.view.MotionEvent#AXIS_DISTANCE}, {@link android.view.MotionEvent#AXIS_TILT}, and {@link
-android.view.MotionEvent#AXIS_ORIENTATION}.</p>
-
-<p>For a demonstration of tool types, button states and the new axis codes, see the <a
-href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html">TouchPaint
-</a> class in ApiDemos.</p>
-
-
-
-
-
-
-<h3 id="Properties">Properties</h3>
-
-<p>The new {@link android.util.Property} class provides a fast, efficient, and easy way to specify a
-property on any object that allows callers to generically set/get values on target objects. It also
-allows the functionality of passing around field/method references and allows code to set/get values
-of the property without knowing the details of what the fields/methods are.</p>
-
-<p>For example, if you want to set the value of field {@code bar} on object {@code foo}, you would
-previously do this:</p>
-<pre>
-foo.bar = value;
-</pre>
-
-<p>If you want to call the setter for an underlying private field {@code bar}, you would previously
-do this:</p>
-<pre>
-foo.setBar(value);
-</pre>
-
-<p>However, if you want to pass around the {@code foo} instance and have some other code set the
-{@code bar} value, there is really no way to do it prior to Android 4.0.</p>
-
-<p>Using the {@link android.util.Property} class, you can declare a {@link android.util.Property}
-object {@code BAR} on class {@code Foo} so that you can set the field on instance {@code foo} of
-class {@code Foo} like this:</p>
-<pre>
-BAR.set(foo, value);
-</pre>
-
-<p>The {@link android.view.View} class now leverages the {@link android.util.Property} class to
-allow you to set various fields, such as transform properties that were added in Android 3.0 ({@link
-android.view.View#ROTATION}, {@link android.view.View#ROTATION_X}, {@link
-android.view.View#TRANSLATION_X}, etc.).</p>
-
-<p>The {@link android.animation.ObjectAnimator} class also uses the {@link android.util.Property}
-class, so you can create an {@link android.animation.ObjectAnimator} with a {@link
-android.util.Property}, which is faster, more efficient, and more type-safe than the string-based
-approach.</p>
-
-
-
-
-
-
-<h3 id="HwAccel">Hardware Acceleration</h3>
-
-<p>Beginning with Android 4.0, hardware acceleration for all windows is enabled by default if your
-application has set either <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> or
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> to
-{@code “14"} or higher. Hardware acceleration generally results in smoother animations, smoother
-scrolling, and overall better performance and response to user interaction.</p>
-
-<p>If necessary, you can manually disable hardware acceleration with the <a
-href="{@docRoot}guide/topics/manifest/activity-element.html#hwaccel">{@code hardwareAccelerated}</a>
-attribute for individual <a href="{@docRoot}guide/topics/manifest/activity-element.html">{@code
-&lt;activity&gt;}</a> elements or the <a
-href="{@docRoot}guide/topics/manifest/application-element.html">{@code &lt;application&gt;}</a>
-element. You can alternatively disable hardware acceleration for individual views by calling {@link
-android.view.View#setLayerType setLayerType(LAYER_TYPE_SOFTWARE)}.</p>
-
-<p>For more information about hardware acceleration, including a list of unsupported drawing
-operations, see the <a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware
-Acceleration</a> document.</p>
-
-
-
-<h3 id="Jni">JNI Changes</h3>
-
-<p>In previous versions of Android, JNI local references weren’t indirect handles; Android used
-direct pointers. This wasn't a problem as long as the garbage collector didn't move objects, but it
-seemed to work because it made it possible to write buggy code. In Android 4.0, the system now uses
-indirect references in order to detect these bugs.</p>
-
-<p>The ins and outs of JNI local references are described in “Local and Global References" in <a
-href="{@docRoot}guide/practices/design/jni.html">JNI Tips</a>. In Android 4.0, <a
-href="http://android-developers.blogspot.com/2011/07/debugging-android-jni-with-checkjni.html">
-CheckJNI</a> has been enhanced to detect these errors. Watch the <a
-href="http://android-developers.blogspot.com/">Android Developers Blog</a> for an upcoming post
-about common errors with JNI references and how you can fix them.</p>
-
-<p>This change in the JNI implementation only affects apps that target Android 4.0 by setting either
-the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code
-targetSdkVersion}</a> or <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code
-minSdkVersion}</a> to {@code “14"} or higher. If you’ve set these attributes to any lower value,
-then JNI local references behave the same as in previous versions.</p>
-
-
-
-
-
-<h3 id="WebKit">WebKit</h3>
-<ul>
-<li>WebKit updated to version 534.30</li>
-<li>Support for Indic fonts (Devanagari, Bengali, and Tamil, including the complex character support
-needed for combining glyphs) in {@link android.webkit.WebView} and the built-in Browser</li>
-<li>Support for Ethiopic, Georgian, and Armenian fonts in {@link android.webkit.WebView} and the
-built-in Browser</li>
-<li>Support for <a
-href="http://google-opensource.blogspot.com/2009/05/introducing-webdriver.html">WebDriver</a> makes
-it easier for you to test apps that use {@link android.webkit.WebView}</li>
-</ul>
-
-
-<h4>Android Browser</h4>
-
-<p>The Browser application adds the following features to support web applications:</p>
-<ul>
-<li>Updated V8 JavaScript compiler for faster performance</li>
-<li>Plus other notable enhancements carried over from <a
-href="{@docRoot}sdk/android-3.0.html">Android
-3.0</a> are now available for handsets:
-<ul>
-<li>Support for fixed position elements on all pages</li>
-<li><a href="http://dev.w3.org/2009/dap/camera/">HTML media capture</a></li>
-<li><a href="http://dev.w3.org/geo/api/spec-source-orientation.html">Device orientation
-events</a></li>
-<li><a href="http://www.w3.org/TR/css3-3d-transforms/">CSS 3D transformations</a></li>
-</ul>
-</li>
-</ul>
-
-
-
-<h3 id="Permissions">Permissions</h3>
-
-<p>The following are new permissions:</p>
-<ul>
-<li>{@link android.Manifest.permission#ADD_VOICEMAIL}: Allows a voicemail service to add voicemail
-messages to the device.</li>
-<li>{@link android.Manifest.permission#BIND_TEXT_SERVICE}: A service that implements {@link
-android.service.textservice.SpellCheckerService} must require this permission for itself.</li>
-<li>{@link android.Manifest.permission#BIND_VPN_SERVICE}: A service that implements {@link
-android.net.VpnService} must require this permission for itself.</li>
-<li>{@link android.Manifest.permission#READ_PROFILE}: Provides read access to the {@link
-android.provider.ContactsContract.Profile} provider.</li>
-<li>{@link android.Manifest.permission#WRITE_PROFILE}: Provides write access to the {@link
-android.provider.ContactsContract.Profile} provider.</li>
-</ul>
-
-
-
-<h3 id="DeviceFeatures">Device Features</h3>
-
-<p>The following are new device features:</p>
-<ul>
-<li>{@link android.content.pm.PackageManager#FEATURE_WIFI_DIRECT}: Declares that the application
-uses
-Wi-Fi for peer-to-peer communications.</li>
-</ul>
-
-
-<div class="special" style="margin-top:3em">
-<p>For a detailed view of all API changes in Android {@sdkPlatformVersion} (API Level
-{@sdkPlatformApiLevel}), see the <a
-href="{@docRoot}sdk/api_diff/{@sdkPlatformApiLevel}/changes.html">API Differences Report</a>.</p>
-</div>
-
-
-<h2 id="Honeycomb">Previous APIs</h2>
-
-<p>In addition to everything above, Android 4.0 naturally supports all APIs from previous releases.
-Because the Android 3.x platform is available only for large-screen devices, if you've
-been developing primarily for handsets, then you might not be aware of all the APIs added to Android
-in these recent releases.</p>
-
-<p>Here's a look at some of the most notable APIs you might have missed that are now available
-on handsets as well:</p>
-
-<dl>
-  <dt><a href="android-3.0.html">Android 3.0</a></dt>
-  <dd>
-    <ul>
-      <li>{@link android.app.Fragment}: A framework component that allows you to separate distinct
-elements of an activity into self-contained modules that define their own UI and lifecycle. See the
-<a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</li>
-      <li>{@link android.app.ActionBar}: A replacement for the traditional title bar at the top of
-the activity window. It includes the application logo in the left corner and provides a new
-interface for menu items. See the
-<a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a> developer guide.</li>
-      <li>{@link android.content.Loader}: A framework component that facilitates asynchronous
-loading of data in combination with UI components to dynamically load data without blocking the
-main thread. See the
-<a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</li>
-      <li>System clipboard: Applications can copy and paste data (beyond mere text) to and from
-the system-wide clipboard. Clipped data can be plain text, a URI, or an intent. See the
-<a href="{@docRoot}guide/topics/clipboard/copy-paste.html">Copy and Paste</a> developer guide.</li>
-      <li>Drag and drop: A set of APIs built into the view framework that facilitates drag and drop
-operations. See the
-<a href="{@docRoot}guide/topics/ui/drag-drop.html">Drag and Drop</a> developer guide.</li>
-      <li>An all new flexible animation framework allows you to animate arbitrary properties of any
-object (View, Drawable, Fragment, Object, or anything else) and define animation aspects such
-as duration, interpolation, repeat and more. The new framework makes Animations in Android
-simpler than ever. See the
-<a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a> developer
-guide.</li>
-      <li>RenderScript graphics and compute engine: RenderScript offers a high performance 3D
-graphics rendering and compute API at the native level, which you write in the C (C99 standard),
-providing the type of performance you expect from a native environment while remaining portable
-across various CPUs and GPUs. See the
-<a href="{@docRoot}guide/topics/renderscript/index.html">RenderScript</a> developer
-guide.</li>
-      <li>Hardware accelerated 2D graphics: You can now enable the OpenGL renderer for your
-application by setting {android:hardwareAccelerated="true"} in your manifest element's <a
-href="{@docRoot}guide/topics/manifest/application-element.html"><code>&lt;application&gt;</code></a>
-element or for individual <a
-href="{@docRoot}guide/topics/manifest/activity-element.html"><code>&lt;activity&gt;</code></a>
-elements. This results
-in smoother animations, smoother scrolling, and overall better performance and response to user
-interaction.
-      <p class="note"><strong>Note:</strong> If you set your application's <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code minSdkVersion}</a> or <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#target">{@code targetSdkVersion}</a> to
-{@code "14"} or higher, hardware acceleration is enabled by default.</p></li>
-      <li>And much, much more. See the <a href="android-3.0.html">Android 3.0 Platform</a>
-notes for more information.</li>
-    </ul>
-  </dd>
-  
-  <dt><a href="android-3.1.html">Android 3.1</a></dt>
-  <dd>
-    <ul>
-      <li>USB APIs: Powerful new APIs for integrating connected peripherals with
-Android applications. The APIs are based on a USB stack and services that are
-built into the platform, including support for both USB host and device interactions. See the <a
-href="{@docRoot}guide/topics/usb/index.html">USB Host and Accessory</a> developer guide.</li>
-      <li>MTP/PTP APIs: Applications can interact directly with connected cameras and other PTP
-devices to receive notifications when devices are attached and removed, manage files and storage on
-those devices, and transfer files and metadata to and from them. The MTP API implements the PTP
-(Picture Transfer Protocol) subset of the MTP (Media Transfer Protocol) specification. See the
-{@link android.mtp} documentation.</li>
-      <li>RTP APIs: Android exposes an API to its built-in RTP (Real-time Transport Protocol) stack,
-which applications can use to manage on-demand or interactive data streaming. In particular, apps
-that provide VOIP, push-to-talk, conferencing, and audio streaming can use the API to initiate
-sessions and transmit or receive data streams over any available network. See the {@link
-android.net.rtp} documentation.</li>
-      <li>Support for joysticks and other generic motion inputs.</li>
-      <li>See the <a href="android-3.1.html">Android 3.1 Platform</a>
-notes for many more new APIs.</li>
-    </ul>
-  </dd>
-  
-  <dt><a href="android-3.2.html">Android 3.2</a></dt>
-  <dd>
-    <ul>
-      <li>New screens support APIs that give you more control over how your applications are
-displayed across different screen sizes. The API extends the existing screen support model with the
-ability to precisely target specific screen size ranges by dimensions, measured in
-density-independent pixel units (such as 600dp or 720dp wide), rather than by their generalized
-screen sizes (such as large or xlarge). For example, this is important in order to help you
-distinguish between a 5" device and a 7" device, which would both traditionally be bucketed as
-"large" screens. See the blog post, <a
-href="http://android-developers.blogspot.com/2011/07/new-tools-for-managing-screen-sizes.html">
-New Tools for Managing Screen Sizes</a>.</li>
-      <li>New constants for <a
-href="{@docRoot}guide/topics/manifest/uses-feature-element.html">{@code &lt;uses-feature&gt;}</a> to
-declare landscape or portrait screen orientation requirements.</li>
-      <li>The device "screen size" configuration now changes during a screen orientation
-change. If your app targets API level 13 or higher, you must handle the {@code "screenSize"}
-configuration change if you also want to handle the {@code "orientation"} configuration change. See
-<a href="{@docRoot}guide/topics/manifest/activity-element.html#config">{@code
-android:configChanges}</a> for more information.</li>
-      <li>See the <a href="android-3.2.html">Android 3.2 Platform</a>
-notes for other new APIs.</li>
-    </ul>
-  </dd>
-
-</dl>
-
-
-
-
-<h2 id="api-level">API Level</h2>
-
-<p>The Android {@sdkPlatformVersion} API is assigned an integer
-identifier&mdash;<strong>{@sdkPlatformApiLevel}</strong>&mdash;that is stored in the system itself.
-This identifier, called the "API level", allows the system to correctly determine whether an
-application is compatible with the system, prior to installing the application. </p>
-
-<p>To use APIs introduced in Android {@sdkPlatformVersion} in your application, you need compile the
-application against an Android platform that supports API level {@sdkPlatformApiLevel} or
-higher. Depending on your needs, you might also need to add an
-<code>android:minSdkVersion="{@sdkPlatformApiLevel}"</code> attribute to the
-<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">{@code &lt;uses-sdk&gt;}</a>
-element.</p>
-
-<p>For more information, see the <a href="{@docRoot}guide/appendix/api-levels.html">API Levels</a>
-document. </p>
-
-
-<h2 id="apps">Built-in Applications</h2>
-
-<p>The system image included in the downloadable platform provides these
-built-in applications:</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>API Demos</li>
-<li>Browser</li>
-<li>Calculator</li>
-<li>Calendar</li>
-<li>Camera</li>
-<li>Clock</li>
-<li>Custom Locale</li>
-<li>Dev Tools</li>
-<li>Downloads</li>
-<li>Email</li>
-<li>Gallery</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<ul>
-<li>Gestures Builder</li>
-<li>Messaging</li>
-<li>Music</li>
-<li>People</li>
-<li>Phone</li>
-<li>Search</li>
-<li>Settings</li>
-<li>Speech Recorder</li>
-<li>Widget Preview</li>
-</ul>
-</td>
-</tr>
-</table>
-
-
-<h2 id="locs" style="margin-top:.75em;">Locales</h2>
-
-<p>The system image included in the downloadable SDK platform provides a variety of built-in
-locales. In some cases, region-specific strings are available for the locales. In other cases, a
-default version of the language is used. The languages that are available in the Android 3.0 system
-image are listed below (with <em>language</em>_<em>country/region</em> locale descriptor).</p>
-
-<table style="border:0;padding-bottom:0;margin-bottom:0;">
-<tr>
-<td style="border:0;padding-bottom:0;margin-bottom:0;">
-<ul>
-<li>Arabic, Egypt (ar_EG)</li>
-<li>Arabic, Israel (ar_IL)</li>
-<li>Bulgarian, Bulgaria (bg_BG)</li>
-<li>Catalan, Spain (ca_ES)</li>
-<li>Czech, Czech Republic (cs_CZ)</li>
-<li>Danish, Denmark(da_DK)</li>
-<li>German, Austria (de_AT)</li>
-<li>German, Switzerland (de_CH)</li>
-<li>German, Germany (de_DE)</li>
-<li>German, Liechtenstein (de_LI)</li>
-<li>Greek, Greece (el_GR)</li>
-<li>English, Australia (en_AU)</li>
-<li>English, Canada (en_CA)</li>
-<li>English, Britain (en_GB)</li>
-<li>English, Ireland (en_IE)</li>
-<li>English, India (en_IN)</li>
-<li>English, New Zealand (en_NZ)</li>
-<li>English, Singapore(en_SG)</li>
-<li>English, US (en_US)</li>
-<li>English, South Africa (en_ZA)</li>
-<li>Spanish (es_ES)</li>
-<li>Spanish, US (es_US)</li>
-<li>Finnish, Finland (fi_FI)</li>
-<li>French, Belgium (fr_BE)</li>
-<li>French, Canada (fr_CA)</li>
-<li>French, Switzerland (fr_CH)</li>
-<li>French, France (fr_FR)</li>
-<li>Hebrew, Israel (he_IL)</li>
-<li>Hindi, India (hi_IN)</li>
-</ul>
-</td>
-<td style="border:0;padding-bottom:0;margin-bottom:0;padding-left:5em;">
-<li>Croatian, Croatia (hr_HR)</li>
-<li>Hungarian, Hungary (hu_HU)</li>
-<li>Indonesian, Indonesia (id_ID)</li>
-<li>Italian, Switzerland (it_CH)</li>
-<li>Italian, Italy (it_IT)</li>
-<li>Japanese (ja_JP)</li>
-<li>Korean (ko_KR)</li>
-<li>Lithuanian, Lithuania (lt_LT)</li>
-<li>Latvian, Latvia (lv_LV)</li>
-<li>Norwegian bokmål, Norway (nb_NO)</li>
-<li>Dutch, Belgium (nl_BE)</li>
-<li>Dutch, Netherlands (nl_NL)</li>
-<li>Polish (pl_PL)</li>
-<li>Portuguese, Brazil (pt_BR)</li>
-<li>Portuguese, Portugal (pt_PT)</li>
-<li>Romanian, Romania (ro_RO)</li>
-<li>Russian (ru_RU)</li></li>
-<li>Slovak, Slovakia (sk_SK)</li>
-<li>Slovenian, Slovenia (sl_SI)</li>
-<li>Serbian (sr_RS)</li>
-<li>Swedish, Sweden (sv_SE)</li>
-<li>Thai, Thailand (th_TH)</li>
-<li>Tagalog, Philippines (tl_PH)</li>
-<li>Turkish, Turkey (tr_TR)</li>
-<li>Ukrainian, Ukraine (uk_UA)</li>
-<li>Vietnamese, Vietnam (vi_VN)</li>
-<li>Chinese, PRC (zh_CN)</li>
-<li>Chinese, Taiwan (zh_TW)</li>
-</td>
-</tr>
-</table>
-
-<p class="note"><strong>Note:</strong> The Android platform may support more
-locales than are included in the SDK system image. All of the supported locales
-are available in the <a href="http://source.android.com/">Android Open Source
-Project</a>.</p>
-
-<h2 id="skins">Emulator Skins</h2>
-
-<p>The downloadable platform includes the following emulator skins:</p>
-
-<ul>
-  <li>
-    QVGA (240x320, low density, small screen)
-  </li>
-  <li>
-    WQVGA400 (240x400, low density, normal screen)
-  </li>
-  <li>
-    WQVGA432 (240x432, low density, normal screen)
-  </li>
-  <li>
-    HVGA (320x480, medium density, normal screen)
-  </li>
-  <li>
-    WVGA800 (480x800, high density, normal screen)
-  </li>
-  <li>
-    WVGA854 (480x854 high density, normal screen)
-  </li>
-  <li>
-    WXGA720 (1280x720, extra-high density, normal screen) <span class="new">new</span>
-  </li>
-  <li>
-    WSVGA (1024x600, medium density, large screen) <span class="new">new</span>
-  </li>
-  <li>
-    WXGA (1280x800, medium density, xlarge screen)
-  </li>
-</ul>
-
-<p>To test your application on an emulator that represents the latest Android device, you can create
-an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
-currently doesn't support the new on-screen navigation bar for devices without hardware navigation
-buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
-<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
-
-<p>However, due to performance issues in the emulator when running high-resolution screens such as
-the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
-(hdpi, normal screen) to test your application.</p>
-
diff --git a/docs/html/sdk/api_diff/10/changes/changes-summary.html b/docs/html/sdk/api_diff/10/changes/changes-summary.html
index dbb2881..ff0e479 100644
--- a/docs/html/sdk/api_diff/10/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/10/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/11/changes/changes-summary.html b/docs/html/sdk/api_diff/11/changes/changes-summary.html
index b6af9ae..18e9f5d 100644
--- a/docs/html/sdk/api_diff/11/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/11/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/12/changes/changes-summary.html b/docs/html/sdk/api_diff/12/changes/changes-summary.html
index 2a630c2..e069d3d 100644
--- a/docs/html/sdk/api_diff/12/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/12/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/13/changes/changes-summary.html b/docs/html/sdk/api_diff/13/changes/changes-summary.html
index 082fcfb..3b1c55a 100644
--- a/docs/html/sdk/api_diff/13/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/13/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/14/changes/changes-summary.html b/docs/html/sdk/api_diff/14/changes/changes-summary.html
index ccb5d26..0cec877 100644
--- a/docs/html/sdk/api_diff/14/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/14/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/15/changes/changes-summary.html b/docs/html/sdk/api_diff/15/changes/changes-summary.html
index 0acb973..7f00168 100644
--- a/docs/html/sdk/api_diff/15/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/15/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/3/changes/changes-summary.html b/docs/html/sdk/api_diff/3/changes/changes-summary.html
index 65a37f8..4c0012a 100644
--- a/docs/html/sdk/api_diff/3/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/3/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/4/changes/changes-summary.html b/docs/html/sdk/api_diff/4/changes/changes-summary.html
index 88b8be6..bbed016 100644
--- a/docs/html/sdk/api_diff/4/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/4/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/5/changes/changes-summary.html b/docs/html/sdk/api_diff/5/changes/changes-summary.html
index 3a06d98..1f10f25 100644
--- a/docs/html/sdk/api_diff/5/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/5/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/6/changes/changes-summary.html b/docs/html/sdk/api_diff/6/changes/changes-summary.html
index 77ceb25..a1c3985 100644
--- a/docs/html/sdk/api_diff/6/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/6/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/7/changes/changes-summary.html b/docs/html/sdk/api_diff/7/changes/changes-summary.html
index 330f727..34d4d25 100644
--- a/docs/html/sdk/api_diff/7/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/7/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/8/changes/changes-summary.html b/docs/html/sdk/api_diff/8/changes/changes-summary.html
index f5fa7e6..5041182 100644
--- a/docs/html/sdk/api_diff/8/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/8/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/api_diff/9/changes/changes-summary.html b/docs/html/sdk/api_diff/9/changes/changes-summary.html
index f81cea1..4bccfe5 100644
--- a/docs/html/sdk/api_diff/9/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/9/changes/changes-summary.html
@@ -73,7 +73,7 @@
     <div id="docTitleContainer">
 <h1>Android&nbsp;API&nbsp;Differences&nbsp;Report</h1>
 <p>This report details the changes in the core Android framework API between two <a 
-href="http://developer.android.com/guide/appendix/api-levels.html" target="_top">API Level</a> 
+href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels" target="_top">API Level</a> 
 specifications. It shows additions, modifications, and removals for packages, classes, methods, and fields. 
 The report also includes general statistics that characterize the extent and type of the differences.</p>
 <p>This report is based a comparison of the Android API specifications 
diff --git a/docs/html/sdk/compatibility-library.jd b/docs/html/sdk/compatibility-library.jd
deleted file mode 100644
index f81e8ae..0000000
--- a/docs/html/sdk/compatibility-library.jd
+++ /dev/null
@@ -1,484 +0,0 @@
-page.title=Support Package
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<h2>In this document</h2>
-<ol>
-  <li><a href="#Notes">Revisions</a></li>
-  <li><a href="#Downloading">Downloading the Support Package</a></li>
-  <li><a href="#SettingUp">Setting Up a Project to Use a Library</a></li>
-  <li><a href="#Using">Using the v4 Library APIs</a></li>
-  <li><a href="#Docs">Reference Docs</a></li>
-  <li><a href="#Samples">Samples</a></li>
-</ol>
-
-<h2>See also</h2>
-<ol>
-  <li><a
-href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0</a></li>
-  <li><a href="http://code.google.com/p/iosched/">Google I/O App source code</a></li>
-</ol>
-
-</div>
-</div>
-
-<p><em>Minimum API level supported:</em> <b>4</b></p>
-
-<p>The Support Package includes static "support libraries" that you can add to your Android
-application in order to use APIs that are either not available for older platform versions or that
-offer "utility" APIs that aren't a part of the framework APIs. The goal is to simplify your
-development by offering more APIs that you can bundle with your application so you can
-worry less about platform versions.</p>
-
-<p class="note"><strong>Note:</strong> The Support Package includes more than one support
-library. Each one has a different <em>minimum API level</em>. For example, one library requires API
-level 4 or higher, while another requires API level 13 or higher (v13 is a superset of v4 and
-includes additional
-support classes to work with v13 APIs). The minimum version is indicated
-by the directory name, such as {@code v4/} and {@code v13/}.</p>
-
-
-<h2 id="Notes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the Support Package, as denoted by revision number.</p>
-
-<div class="toggle-content open">
-
-  <p><a href="#" onclick="return toggleContent(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" />
-    Support Package, revision 7 (March 2012)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-    <dl>
-      <dt>Changes for v4 support library:</dt>
-      <dd>
-        <ul>
-          <li>Added {@link android.support.v4.app.ShareCompat}, which provides helper classes
-for sending and receiving content for social sharing applications, including new metadata for
-attributing shared data to the source app. This class also provides compatible integration with the
-new {@link android.widget.ShareActionProvider} in Android 4.0.</li>
-          <li>Added {@link android.support.v4.app.NavUtils} and {@link
-android.support.v4.app.TaskStackBuilder} to provide support for implementing the
-<a href="{@docRoot}design/index.html">Android Design</a> guidelines for navigation. These 
-additions include a way to implement the action bar's <em>Up</em> button across versions.
-For an example implementation of this pattern, see the AppNavigation sample in
-({@code <em>&lt;sdk&gt;</em>/samples/<em>&lt;platform&gt;</em>/AppNavigation}).</li>
-          <li>Added {@link android.support.v4.app.NotificationCompat.Builder} to provide a
-compatibility implementation of Android 3.0's {@link android.app.Notification.Builder} helper class
-for creating standardized system notifications.</li>
-        </ul>
-      </dd>
-    </dl>
-  </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" />
-    Support Package, revision 6 (December 2011)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-    <p class="note"><strong>Note:</strong> Reference for support library APIs are now available with
-    the framework references, for example: {@link android.support.v4.app}.</p>
-<dl>
-      <dt>Changes for v4 support library:</dt>
-      <dd>
-        <ul>
-          <li>Changes to ViewPager:
-            <ul>
-              <li>Added extra decorative view support for {@link android.support.v4.view.ViewPager}.
-                Decorative views may be supplied as child views of a pager in XML layout.</li>
-              <li>Added {@link android.support.v4.view.PagerAdapter#getPageTitle
-                PagerAdapter.getPageTitle()} to supply title strings for pages, which defaults to no
-                title for each page.</li>
-              <li>Added {@link android.support.v4.view.PagerTitleStrip}, a non-interactive title
-                strip, that can be added as a child of ViewPager. Developers can supply text
-                appearance and color, as well as layout sizing and gravity information.</li>
-              <li>Updated {@link android.support.v4.view.PagerAdapter} methods to take ViewGroup
-                objects, rather than View to avoid class casting in adapter implementations.</li>
-              <li>Updated {@link android.support.v4.view.ViewPager} to use Launcher-style
-                fling behavior.</li>
-              <li>Bug fixes for user interface interaction and test automation.</li>
-            </ul>
-          </li>
-
-          <li>Support for Fragments:
-            <ul>
-              <li>Changed {@code setStartDeferred()} method to {@link
-                android.support.v4.app.Fragment#setUserVisibleHint}.</li>
-              <li>Added deferred start for off-screen pages to improve performance.</li>
-            </ul>
-          </li>
-
-          <li>Support for Accessiblity APIs:
-            <ul>
-              <li>Updated {@link android.support.v4.view.AccessibilityDelegateCompat} methods
-                to return empty lists instead of null.</li>
-              <li>Added new APIs needed by the v4 samples.</li>
-            </ul>
-          </li>
-
-        </ul>
-      </dd>
-    </dl>
-  </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" />
-    Support Package, revision 5 (December 2011)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-    <dl>
-      <dt>Changes for v4 support library:</dt>
-      <dd>
-        <ul>
-          <li>Support for Accessiblity APIs:
-            <ul>
-              <li>Added {@link android.support.v4.view.AccessibilityDelegateCompat}
-              to support {@link android.view.View.AccessibilityDelegate}.</li>
-
-              <li>Added {@link android.support.v4.view.accessibility.AccessibilityEventCompat}
-              to support {@link android.view.accessibility.AccessibilityEvent}.</li>
-
-              <li>Added {@link android.support.v4.view.accessibility.AccessibilityManagerCompat}
-              to support {@link android.view.accessibility.AccessibilityManager}.</li>
-
-              <li>Added {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
-              to support {@link android.view.accessibility.AccessibilityNodeInfo}.</li>
-
-              <li>Added {@link android.support.v4.view.accessibility.AccessibilityRecordCompat}
-              to support {@link android.view.accessibility.AccessibilityRecord}.</li>
-
-              <li>Added {@link
-              android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat}
-              to support {@link android.accessibilityservice.AccessibilityServiceInfo}.</li>
-
-              <li>Added {@link android.support.v4.view.ViewGroupCompat}
-              to support accessibility features in {@link android.view.ViewGroup}.
-              </li>
-
-              <li>Modified {@link android.support.v4.view.ViewCompat}
-              to support accessibility features in {@link android.view.View}.</li>
-            </ul>
-          </li>
-
-          <li>Changes to ViewPager:
-            <ul>
-              <li>Added support for margins between pages.
-              An optional {@link android.graphics.drawable.Drawable} can be provided
-              to fill the margins.</li>
-              <li>Added support for {@link android.widget.EdgeEffect}.</li>
-              <li>Added support for keyboard navigation</li>
-              <li>Added support to control how many pages are kept to either side
-              of the current page.</li>
-              <li>Improved touch physics.</li>
-              <li>Bug fixes for user interface behavior.</li>
-            </ul>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-  </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" />
-    Support Package, revision 4 (October 2011)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-    <dl>
-      <dt>Changes for v4 support library:</dt>
-      <dd>
-        <ul>
-          <li>Added <code>EdgeEffectCompat</code> to
-          support {@link android.widget.EdgeEffect}.</li>
-
-          <li>Added <code>LocalBroadcastManager</code> to allow applications to easily
-            register for and receive intents within a single application without
-            broadcasting them globally.</li>
-
-          <li>Added support in <code>ViewCompat</code> to check for and set overscroll
-          modes for {@link android.view.View}s on Android 2.3 and later.</li>
-          <li>Changes to Fragment APIs:
-            <ul>
-              <li>Added new APIs to control the visibility of new menus.</li>
-              <li>Added custom animation APIs.</li>
-              <li>Added APIs in <code>FragmentActivity</code> to retain custom,
-              non-configuration instance data.</li>
-              <li>Various bug fixes.</li>
-            </ul>
-          </li>
-
-          <li>Fixed a {@link android.content.Loader} bug that caused issues in
-          canceling {@link android.os.AsyncTask}s when running on Froyo and older
-          versions of the platform. The support
-          code now uses its own version of {@link android.os.AsyncTask} to keep the same
-          behavior on all platform versions.</li>
-
-        </ul>
-      </dd>
-    </dl>
-  </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" />
-    Compatibility Package, revision 3 (July 2011)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-    <dl>
-      <dt>Changes for v4 support library:</dt>
-      <dd>
-        <ul>
-          <li>Adds support for {@link android.app.Fragment.SavedState}</li>
-          <li>Adds {@code MotionEventCompat} to support newer {@link
-android.view.MotionEvent} APIs</li>
-          <li>Adds {@code VelocityTrackerCompat} to support a newer {@link
-android.view.VelocityTracker} APIs</li>
-          <li>Adds {@code ViewConfigurationCompat} to support a newer {@link
-android.view.ViewConfiguration} APIs</li>
-          <li>All new APIs (available only in the support library) that allow you to create UIs
-with horizontal paging, allowing users to swipe left and right between content views. Classes to
-support this include:
-            <ul>
-              <li>{@code ViewPager}: A {@link android.view.ViewGroup} that manages the
-layout for the child views, which the user can swipe between.</li>
-              <li>{@code PagerAdapter}: An adapter that populates the {@code ViewPager} with the
-views that represent each page.</li>
-              <li>{@code FragmentPagerAdapter}: An extension of {@code PagerAdapter} for flipping
-between fragments.</li>
-              <li>{@code FragmentStatePagerAdapter}: An extension of {@code PagerAdapter} for
-flipping between fragments that uses the library's support for {@link
-android.app.Fragment.SavedState}.</li>
-            </ul>
-          </li>
-        </ul>
-      </dd>
-      <dt>New v13 support library:</dt>
-      <dd>
-        <ul>
-          <li>Includes the {@code FragmentPagerAdapter} and {@code FragmentStatePagerAdapter}
-to support the horizontal paging.
-          <p>These are exactly the same as the APIs added to the v4 support library, but rely on
-other platform components in Android 3.2. Use this library instead of v4 if you're developing for
-Android 3.2 and higher (all other APIs in the v4 library are already available with API level
-13).</p>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-  </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" />
-    Compatibility Package, revision 2 (May 2011)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-    <dl>
-    <dt>Changes for v4 library:</dt>
-    <dd>
-      <ul>
-        <li>Support for fragment animations</li>
-        <li>Fix {@code android.support.v4.app.Fragment#onActivityResult Fragment.onActivityResult()}
-          bug</li>
-      </ul>
-    </dd>
-    </dl>
-  </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" />
-    Compatibility Package, revision 1 (March 2011)
-  </a></p>
-
-  <div class="toggle-content-toggleme" style="padding-left:2em">
-      <p>Initial release with the v4 library.</p>
-  </div>
-
-</div>
-
-
-
-<h2 id="Downloading">Downloading the Support Package</h2>
-
-<p>The Support Package is provided as a downloadable package from the Android SDK
-Manager. To install:</p>
-
-<ol>
-  <li>Launch the Android SDK Manager.
-    <p>From Eclipse, you can select <strong>Window</strong>
-&gt; <strong>Android SDK Manager</strong>. Or, launch {@code SDK Manager.exe} from
-the {@code &lt;sdk&gt;/} directory (on Windows only) or {@code android} from the {@code
-&lt;sdk&gt;/tools/} directory.</p></li>
-  <li>Expand the Android Repository, check <strong>Android Support package</strong>
-and click <strong>Install selected</strong>.</li>
-  <li>Proceed to install the package.</li>
-</ol>
-
-<p>When done, all files (including source code, samples, and the {@code .jar} files) are saved
-into the <code>&lt;sdk&gt;/extras/android/support/</code> directory. This directory contains
-each of the different support libraries, such as the library for API level 4 and up and the library
-for API level 13 and up, each named with the respective version (such as {@code v4/}).</p>
-
-
-<h2 id="SettingUp">Setting Up a Project to Use a Library</h2>
-
-<p>To add one of the libraries to your Android project:</p>
-<ol>
-  <li>In your Android project, create a directory named {@code libs} at the root of your
-project (next to {@code src/}, {@code res/}, etc.)</li>
-  <li>Locate the JAR file for the library you want to use and copy it into the {@code
-libs/} directory.
-    <p>For example, the library that supports API level 4 and up is located at {@code
-&lt;sdk&gt;/extras/android/support/v4/android-support-v4.jar}.</p>
-  </li>
-  <li>Add the JAR to your project build path.
-    <p>In Eclipse, right-click the JAR file in the Package Explorer, select <strong>Build
-Path</strong> &gt; <strong>Add to Build Path</strong>.</p>
-  </li>
-</ol>
-
-<p>Your application is now ready to use the library APIs. All the
-provided APIs are available in the {@code android.support} package (for
-example, {@code android.support.v4}).</p>
-
-<p class="note"><strong>Tip:</strong> To see the library APIs in action, take a look at the sample
-apps in {@code &lt;sdk&gt;/extras/android/support/&lt;version&gt;/samples/}.</p>
-
-<p class="warning"><strong>Warning:</strong> Be certain that you not confuse the standard
-{@code android} packages with those in {@code android.support} library. Some code completion tools
-might
-get this wrong, especially if you're building against recent versions of the platform. To be safe,
-keep your build target set to the same version as you have defined for your <a
-href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
-and double check the import statements for classes that also exist in the support library, such as
-{@code SimpleCursorAdapter}.</p>
-
-
-<h2 id="Using">Using the v4 Library APIs</h2>
-
-<p>The support library for v4 provides access to several classes introduced with Android 3.0 and
-beyond, plus some updated version of existing classes, and even some APIs that currently don't
-exist in the Android platform. Some of the most useful and notable classes that have
-counterparts in the v4 support library are:</p>
-
-<ul>
-  <li>{@link android.app.Fragment}</li>
-  <li>{@link android.app.FragmentManager}</li>
-  <li>{@link android.app.FragmentTransaction}</li>
-  <li>{@link android.app.ListFragment}</li>
-  <li>{@link android.app.DialogFragment}</li>
-  <li>{@link android.app.LoaderManager}</li>
-  <li>{@link android.content.Loader}</li>
-  <li>{@link android.content.AsyncTaskLoader}</li>
-  <li>{@link android.content.CursorLoader}</li>
-</ul>
-
-<p>For each of the classes above (and others not listed), the APIs work almost exactly the same
-as the counterparts in the latest Android platform. Thus, you can usually refer to
-the online documentation for information about the supported APIs. There are some
-differences, however. Most notably:</p>
-
-<ul>
-  <li>When creating an activity to use fragments, you must declare your activity to extend the
-{@link android.support.v4.app.FragmentActivity} class (instead of the traditional
-{@link android.app.Activity} class).</li>
-  <li>To manage your fragments and loaders, you must use the methods
-  {@link android.support.v4.app.FragmentActivity#getSupportFragmentManager
-  FragmentActivity.getSupportFragmentManager()} and
-  {@link android.support.v4.app.FragmentActivity#getSupportLoaderManager
-  FragmentActivity.getSupportLoaderManager()} (instead of the
-  {@link android.app.Activity#getFragmentManager()} and
-  {@link android.app.Activity#getLoaderManager()} methods).</li>
-  <li>The {@link android.app.ActionBar} is <strong>not supported</strong> by the library.
-However, when creating your <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options
-Menu</a>, you can declare which items should be added to the Action Bar when it's available (on
-Android 3.0 or later). You can do so with the
-{@link android.support.v4.view.MenuCompat#setShowAsAction MenuCompat.setShowAsAction()} method, for
-example:
-<pre>
-public boolean onCreateOptionsMenu(Menu menu) {
-    MenuInflater inflater = getMenuInflater();
-    inflater.inflate(R.menu.options, menu);
-    MenuCompat.setShowAsAction(menu.findItem(R.id.action_search), 1);
-    return true;
-}
-</pre>
-<p>Also see the <a href="{@docRoot}resources/samples/ActionBarCompat/index.html">Action Bar
-Compatibility</a> sample for a demonstration of how to use {@link android.app.ActionBar} on Android
-3.0+ and also support action bar functionality on older versions.</p>
-</li>
-</ul>
-
-<div class="note"><p><strong>Tip:</strong> To enable the Holographic theme on devices
-running Android 3.0 or higher, declare in your manifest file that your application targets
-API level 11, for example:</p>
-<pre>
-&lt;uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" /&gt;
-</pre>
-<p>This way, your application automatically receives the Holographic theme and the Action Bar for
-each activity when running on Android 3.0 and higher.</p>
-</div>
-
-<p>For more information about how you can optimize your application for the latest
-Android-powered devices, read <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing
-Apps for Android 3.0</a>.</p>
-
-
-<h2 id="Docs">Reference Docs</h2>
-
-<p>The reference documentation for the Support Packages is included as part of the Android
-online developer documentation:</p>
-
-<ul>
-  <li><a href="{@docRoot}reference/android/support/v4/app/package-summary.html">Support Package
-    API 4 Reference</a></li>
-  <li><a href="{@docRoot}reference/android/support/v13/app/package-summary.html">Support Package
-    API 13 Reference</a></li>
-</ul>
-
-
-<h2 id="Samples">Samples</h2>
-
-<p>If you want to see some code that uses the support libraries, samples are included with the
-Support Package, inside each support library directory, for example; {@code
-&lt;sdk&gt;/extras/android/support/v4/samples/}. You can also view these samples as part of the
-Android online developer documentation:</p>
-
-<ul>
-  <li><a href="{@docRoot}resources/samples/Support4Demos/index.html">Support API 4 Demos</a></li>
-  <li><a href="{@docRoot}resources/samples/Support13Demos/index.html">Support API 13 Demos</a></li>
-</ul>
-
-<p>Additionally, the <a href="http://code.google.com/p/iosched/">Google I/O App</a> is a complete
-application that uses the v4 support library to provide a single APK for both handsets and tablets
-and also demonstrates some of Android's best practices in Android UI design.</p>
diff --git a/docs/html/sdk/eclipse-adt.jd b/docs/html/sdk/eclipse-adt.jd
deleted file mode 100644
index e117118..0000000
--- a/docs/html/sdk/eclipse-adt.jd
+++ /dev/null
@@ -1,1413 +0,0 @@
-page.title=ADT Plugin for Eclipse
-adt.zip.version=18.0.0
-adt.zip.download=ADT-18.0.0.zip
-adt.zip.bytes=12834793
-adt.zip.checksum=b446fa157ed97af79d1e21629201efbb
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#notes">Revisions</a></li>
-    <li><a href="#installing">Installing the ADT Plugin</a>
-      <ol>
-        <li><a href="#preparing">Preparing for Installation</a></li>
-        <li><a href="#downloading">Downloading the ADT Plugin</a>
-        <li><a href="#configuring">Configuring the ADT Plugin</a></li>
-        <li><a href="#troubleshooting">Troubleshooting</a></li>
-      </ol>
-    </li>
-    <li><a href="#updating">Updating the ADT Plugin</a></li>
-  </ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>Android Development Tools (ADT) is a plugin for the Eclipse IDE
-that is designed to give you a powerful, integrated environment in which
-to build Android applications.</p>
-
-<p>ADT extends the capabilities of Eclipse to let you quickly set up new Android
-projects, create an application UI, add packages based on the Android
-Framework API, debug your applications using the Android SDK tools, and even
-export signed (or unsigned) {@code .apk} files in order to distribute your application.</p>
-
-<p>Developing in Eclipse with ADT is highly recommended and is the fastest way
-to get started. With the guided project setup it provides, as well as tools
-integration, custom XML editors, and debug output pane, ADT gives you an
-incredible boost in developing Android applications. </p>
-
-<p>This document provides step-by-step instructions on how to download the ADT
-plugin and install it into your Eclipse development environment. Note that
-before you can install or use ADT, you must have compatible versions of both the
-Eclipse IDE and the Android SDK installed. For details, make sure to read <a
-href="#installing">Installing the ADT Plugin</a>, below. </p>
-
-<p>If you are already using ADT, this document also provides instructions on
-how to update ADT to the latest version or how to uninstall it, if necessary.
-</p>
-
-<p>For information about the features provided by the ADT plugin, such as code
-editor features, SDK tool integration, and the graphical layout editor (for drag-and-drop layout
-editing), see the <a href="{@docRoot}guide/developing/tools/adt.html">Android Developer Tools</a>
-document.</p>
-
-
-<h2 id="notes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the ADT Plugin, as denoted by revision number. </p>
-
-<p>For a summary of all known issues in ADT, see <a
-href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-padding: .25em 1em;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 18.0.0</a> <em>(April 2012)</em>
-  <div class="toggleme">
-<dl>
-  <dt>Dependencies:</dt>
-
-  <dd>
-    <ul>
-      <li>Java 1.6 or higher is required for ADT 18.0.0.</li>
-      <li>Eclipse Helios (Version 3.6.2) or higher is required for ADT 18.0.0.</li>
-      <li>ADT 18.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools
-      r18</a>. If you haven't already installed SDK Tools r18 into your SDK, use the Android SDK
-      Manager to do so.</li>
-    </ul>
-  </dd>
-
-  <dt>Bug fixes:</dt>
-  <dd>
-    <ul>
-      <li>Fixed problem where exporting release package does not recompile libraries in release
-        mode.
-        (<a href="http://code.google.com/p/android/issues/detail?id=27940">Issue 27940</a>)</li>
-    </ul>
-  </dd>
-
-</dl>
-
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 17.0.0</a> <em>(March 2012)</em>
-  <div class="toggleme">
-<dl>
-  <dt>Dependencies:</dt>
-
-  <dd>
-    <ul>
-      <li>Java 1.6 or higher is required for ADT 17.0.0.</li>
-      <li>Eclipse Helios (Version 3.6.2) or higher is required for ADT 17.0.0.</li>
-      <li>ADT 17.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools
-      r17</a>. If you haven't already installed SDK Tools r17 into your SDK, use the Android SDK
-      Manager to do so.</li>
-    </ul>
-  </dd>
-
-  <dt>General improvements:</dt>
-  <dd>
-    <ul>
-      <li>New build features
-        <ul>
-          <li>Added feature to automatically setup JAR dependencies. Any {@code .jar} files in the
-          {@code /libs} folder are added to the build configuration (similar to how the Ant build
-          system works). Also, {@code .jar} files needed by library projects are also automatically
-          added to projects that depend on those library projects.
-          (<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">more
-          info</a>)</li>
-          <li>Added a feature that allows you to run some code only in debug mode. Builds now
-generate a class called {@code BuildConfig} containing a {@code DEBUG} constant that is
-automatically set according to your build type. You can check the ({@code BuildConfig.DEBUG})
-constant in your code to run debug-only functions.</li>
-          <li>Added support for custom views with custom attributes in libraries. Layouts using
-custom attributes must use the namespace URI {@code http://schemas.android.com/apk/res-auto} instead
-of the URI that includes the app package name. This URI is replaced with the app specific one at
-build time.</li>
-        </ul>
-      </li>
-      <li>Improved Lint features. See the <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r17</a>
-release notes.</li>
-      <li>Improved the Lint user interface
-        <ul>
-          <li>Added <strong>Run Lint</strong> toolbar action with a dropdown menu for selecting
-specific (or all) projects, clearing results and other actions.</li>
-          <li>Updated the results window to be organized as a tree rather than a flat list. Each
-issue type has a single top level item, which makes it easier to quickly scan through the reported
-issues and narrow down to the issues you are most interested in.</li>
-          <li>Added many new toolbar actions to the results window, including expand/collapse,
-ignore in file, ignore in project, ignore everywhere, show options, and configure columns.</li>
-          <li>Added new column options for the <strong>Lint Warnings</strong> tab, such as
-category, priority, project, file and line. The column selection (as well as the column sizes) are
-persisted. You can also click on columns to sort by those values.</li>
-          <li>Added Enable All and Disable All buttons to the Lint Options dialog, and a search
-filter textbox to filter by issue id, summary and severity.</li>
-        </ul>
-      </li>
-      <li>Added Quick Outline for XML editors (Ctrl-O, Command-O). This feature shows the structure
-of the current file including icons and ids, lets you filter and quickly jump to specific ids.</li>
-      <li>Updated the resource chooser to shows the resolved value for resources. For example,
-when selecting {@code @string/hello} the chooser displays a resolved value such as "Hello World").
-The resource chooser also now allows you to edit the chosen value directly.</li>
-      <li>Updated Layout Editor so that it does not assign default ids to layouts, includes and
-merge tags. This behavior tended to pollute the namespace with a lot of unused resources since
-layouts are not usually manipulated via code, or referenced from XML. (The RelativeLayout editor
-automatically assigns ids to views without ids when pointing to them.)</li>
-      <li>Added ability to export screenshots from the Layout Editor</li>
-    </ul>
-  </dd>
-
-  <dt>Bug fixes:</dt>
-  <dd>
-    <ul>
-      <li>Fixed problem using Layout Editor with {@link android.widget.SlidingDrawer} which could
-        not be dragged into the layout on some platforms.</li>
-      <li>Fixed preview rendering for {@link android.widget.SlidingDrawer} and 
-        {@link android.widget.TabHost}.
-        (<a href="http://code.google.com/p/android/issues/detail?id=23022">Issue 23022</a>).</li>
-      <li>Fixed issues that could prevent layout rendering due to unresolvable resources.
-        (<a href="http://code.google.com/p/android/issues/detail?id=21046">Issue 21046</a>,
-        <a href="http://code.google.com/p/android/issues/detail?id=21051">Issue 21051</a>)</li>
-      <li>Fixed a bug in resource chooser which made some types of framework resources impossible to
-select. (<a href="http://code.google.com/p/android/issues/detail?id=20589">Issue 20589</a>)</li>
-      <li>Fixed a bug in the formatter where a certain whitespace pattern could result in a
-        non-space character getting deleted.
-        (<a href="http://code.google.com/p/android/issues/detail?id=23940">Issue 23940</a>)</li>
-      <li>Fixed a locale bug affecting Turkish locales in particular.
-        (<a href="http://code.google.com/p/android/issues/detail?id=23747">Issue 23747</a>)</li>
-      <li>Fixed issue where dex complains about duplicate classes in cases where a Library
-        Project depends on the same jar files or Java-only projects.</li>
-      <li>Fixed issue where test projects had to independently reference the library projects used
-        by an app project. Now referencing only the app project is enough.</li>
-    </ul>
-  </dd>
-
-</dl>
-
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 16.0.1</a> <em>(December 2011)</em>
-  <div class="toggleme">
-<dl>
-  <dt>Dependencies:</dt>
-
-  <dd>
-    <ul>
-      <li>Eclipse Helios (Version 3.6) or higher is required for ADT 16.0.1.</li>
-      <li>ADT 16.0.1 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools
-        r16</a>. If you haven't already installed SDK Tools r16 into your SDK, use the Android SDK
-        Manager to do so.</li>
-    </ul>
-  </dd>
-
-  <dt>Bug fixes:</dt>
-  <dd>
-    <ul>
-      <li>Fixed build issue where the 9-patch could be packaged as normal bitmap in some cases.</li>
-      <li>Fixed minor issues in the <a href="http://tools.android.com/recent/lint">Lint</a>
-        tool.</li>
-      <li>Fixed minor issues in the SDK Manager.</li>
-    </ul>
-  </dd>
-</dl>
-
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 16.0.0</a> <em>(December 2011)</em>
-  <div class="toggleme">
-<dl>
-  <dt>Dependencies:</dt>
-
-  <dd>
-    <ul>
-      <li>Eclipse Helios (Version 3.6) or higher is required for ADT
-16.0.0.</li>
-      <li>ADT 16.0.0 is designed for use with <a
-href="{@docRoot}sdk/tools-notes.html">SDK Tools r16</a>. If you haven't already installed SDK Tools
-r16 into your SDK, use the Android SDK Manager to do so.</li>
-    </ul>
-  </dd>
-
-  <dt>General improvements:</dt>
-  <dd>
-    <ul>
-      <li>Added Lint tool to detect common errors in Android projects. (<a
-href="http://tools.android.com/recent/lint">more info</a>)</li>
-    </ul>
-  </dd>
-</dl>
-
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 15.0.1</a> <em>(November 2011)</em>
-  <div class="toggleme">
-<dl>
-  <dt>Dependencies:</dt>
-
-  <dd>ADT 15.0.1 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r15</a>.
-  If you haven't already installed SDK Tools r15 into your SDK, use the Android SDK Manager to
-  do so.</dd>
-
-  <dt>Bug fixes:</dt>
-  <dd>
-    <ul>
-      <li>Fixed how source files are attached to library project <code>.jar</code> files.</li>
-      <li>Fixed how the <code>bin/</code> folder for library projects are refreshed. This ensures that parent projects pick up changes in library projects.</li>
-      <li>Fixed how a parent project's library container is updated when a library project is recompiled. This ensures that parent projects are
-      recompiled when code in a library project changes.</li>
-      <li>Fixed how <code>res/</code> folders are checked in library projects. This ensures that all <code>res</code> folders are properly included
-      even if Eclipse is not aware of them due to refresh issues.</li>
-      <li>Fixed issue that prevented <code>aapt</code> from running when editing certain XML files.</li>
-      <li>Fixed minor XML formatting issues.</li>
-    </ul>
-  </dd>
-</dl>
-
-</div>
-</div>
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 15.0.0</a> <em>(October 2011)</em>
-  <div class="toggleme">
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 15.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r15</a>.
-If you haven't already installed SDK Tools r15 into your SDK, use the Android SDK Manager to
-do so.</dd>
-
-<dt>Bug fixes:</dt>
-<dd>
-<ul>
-  <li>Fixed build issue when using Renderscript in projects that target API levels 11-13
-    (<a href="http://code.google.com/p/android/issues/detail?id=21006">Issue 21006</a>).</li>
-  <li>Fixed issue when creating projects from existing source code.</li>
-  <li>Fixed issues in the SDK Manager
-    (<a href="http://code.google.com/p/android/issues/detail?id=20939">Issue 20939</a>,
-    <a href="http://code.google.com/p/android/issues/detail?id=20607">Issue 20607</a>).</li>
-  <li>Fixed scrolling issue in the new Logcat panel of DDMS.</li>
-</ul>
-</dd>
-</dl>
-
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 14.0.0</a> <em>(October 2011)</em>
-  <div class="toggleme">
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 14.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r14</a>.
-If you haven't already installed SDK Tools r14 into your SDK, use the Android SDK Manager to
-do so.</dd>
-
-<dt>Build system:</dt>
-<dd>
-  <ul>
-    <li>Changed <code>default.properties</code> to <code>project.properties</code> and
-    <code>build.properties</code> to <code>ant.properties</code>. ADT automatically
-    renames these files, if necessary, when you open a project in Eclipse.</li>
-    <li>Changed how library projects are built in Eclipse.</a></li>
-    <li>Changed output of <code>javac</code> from <code>bin/</code> to <code>bin/classes</code>
-    in Eclipse.</li>
-    <li>Improved incremental builds so that resource compilation runs less frequently. Builds no
-    longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
-    run once for each library project.</li>
-    <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
-    crunching all existing PNG files, all the time.</li>
-    <li>Modified resource compilation so it no longer happens for normal save operations. It only
-    happens when running or debugging (the build option that lets you disable the packaging
-    step, which was introduced in ADT 12, is now on by default.)</li>
-  </ul>
-<p>For a complete overview of the build system changes and what you need to do to support them,
-see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
-site</a>.</p>
-</dd>
-
-<dt>General improvements:</dt>
-<dd>
-  <ul>
-
-
-<li>Added a Welcome Wizard to help with the initial setup of the Android
-development environment (<a href="http://tools.android.com/recent/welcomewizard">more
-info</a>).</li>
-<li>Integrated the Android Asset Studio, which helps you create icons for things
-like the launcher, menus, and tabs. (<a
-href="http://tools.android.com/recent/assetstudiointegration">more
-info</a>).</li>
-<li>Revamped the Logcat view and added support to display and filter logs by
-   application names as well as PIDs (<a
-   href="http://tools.android.com/recent/updatedlogcatviewer">more info</a>).</li>
-<li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
-info</a>).</li>
-<li>Revamped the New Project and the New XML File wizards to have
-multiple pages. Sample projects are now copied into the workspace such that they can be modified
-and deleted without affecting the master copy
-(<a href="http://tools.android.com/recent/revampedwizards">more info</a>).</li>
-<li>Removed the dependency on Eclipse GEF.</li>
-</ul>
-</dd>
-
-<dt>XML and Java editors:</dt>
-<dd>
-  <ul>
-    <li>Added a new XML formatter that formats all XML files according to the
-   standard Android coding style. The formatter can also reorder
-   attributes to follow a recommended order and processes any changes made in the Layout editor.
-(<a href="http://tools.android.com/recent/xmlformatter">more info</a>).</li>
-  <li>Added the "Go to Matching" (Ctrl-Shift-P) feature, which lets you jump
-between opening and closing tags in XML files.</li>
-  <li>Added support for the "Select Enclosing Element" feature on Mac.</li>
-  <li>Added a Quickfix for extracting Strings when the caret is inside a String (<a href="">see
-more</a>).</li>
-  <li>Improved "smart indent", which allows automatic indentation and un-indentation
-   when pressing the Return key in XML editors (<a
-href="http://tools.android.com/recent/xmleditingimprovements">more info</a>).</li>
-
-  </ul>
-</dd>
-
-<dt>Layout editor:</dt>
-<dd>
-  <ul>
-    <li>Added tooltip feedback for dragging and resizing operations. For
-    example, when dragging in a relative layout, the proposed
-    constraints are shown. When resizing, the new dimensions are
-    shown (<a href="http://tools.android.com/recent/layouteditorfeedbacktooltips">more
-info</a>).</li>
-    <li>Added the ability to suppress rendering fidelity warnings (<a
-href="http://tools.android.com/recent/suppressrenderwarnings">more info</a>).</li>
-    <li>Added "Remove Container" visual refactoring that removes the
-    children of a container up to the top level and transfers
-    namespace and layout attributes if necessary (<a
-href="http://tools.android.com/recent/removecontainervisualrefactoring">more info</a>).</li>
-    <li>Added pull-right menus to the context menu for accessing
-    properties of the parents, which is useful when the children fully
-    cover the parent and make it hard to select on their own.</li>
-     <li>Improved access to properties in the context menu. The most
-    frequently set attributes for each view are listed at the top of
-    the menu. The Properties menu offers access to the most
-    recently set attributes, attributes organized by their defining
-    view, and layout attributes only or all attributes alphabetically (<a
-href="http://tools.android.com/recent/layouteditorcontextmenuimprovements">more info</a>).</li>
-  </ul>
-</dd>
-
-<dt>Bug fixes:</dt>
-<dd>Fixed many bugs and added <a
-href="http://tools.android.com/recent/miscellaneousrecentfixes">minor improvements</a>, in
-particular some <a href="http://tools.android.com/recent/linuxfixes">critical bug fixes on
-Linux</a>.</dd>
-
-</div>
-</div>
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 12.0.0</a> <em>(July 2011)</em>
-  <div class="toggleme">
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 12.0.0 is designed for use with <a href="{@docRoot}sdk/tools-notes.html">SDK Tools r12</a>. If you haven't
-already installed SDK Tools r12 into your SDK, use
-the Android SDK Manager to do so.</dd>
-
-<dt>Visual Layout Editor:</dt>
-<dd>
-<ul>
-  <li>New RelativeLayout drop support with guideline suggestions for
-   attachments and cycle prevention
-   (<a href="http://tools.android.com/recent/revampedrelativelayoutsupport">more info</a>).</li>
-  <li>Resize support in most layouts along with
-  guideline snapping to the sizes dictated by <code>wrap_content</code> and <code>match_parent</code>.
-  In LinearLayout, sizes are mapped to weights instead of pixel widths.
-  (<a href="http://tools.android.com/recent/resizesupport">more info</a>).</li>
-  <li>Previews of drawables and colors in the resource chooser dialogs
-  (<a href="http://tools.android.com/recent/imageandcolorpreviews">more info</a>).</li>
-  <li>Improved error messages and links for rendering errors including
-  detection of misspelled class names
-  (<a href="http://tools.android.com/recent/improvedrenderingerrordiagnostics">more info</a>).</li>
-</ul>
-</dd>
-
-<dt>Build system:</dt>
-<dd>
-<ul>
-  <li id="build-option">A new option lets you disable the packaging step in the automatic
-  builders. This improves performance when saving files by not
-  performing a full build, which can take a long time for large projects.
-  If the option is enabled, the APK is packaged when the
-  application is deployed to a device or emulator or when the
-  release APK is exported (<a href="http://tools.android.com/recent/finercontroloveradtbuildprocess">more info</a>).</li>
-</ul>
-</dd>
-
-<dt>Bug fixes:</dt>
-<dd>Many bug fixes are part of this release
-(<a href="http://tools.android.com/recent/adt12bugfixroundup">more info</a>).</dd>
-
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 11.0.0</a> <em>(June 2011)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 11.0.0 is designed for use with SDK Tools r11. If you haven't
-already installed SDK Tools r11 into your SDK, use the Android SDK Manager to do
-so.</dd>
-
-<dt>Visual Refactoring:</dt>
-<dd>
-  <ul>
-    <li>"Extract Style" feature pulls out style-related attributes from your layout and extracts
-them as a new style defined in {@code styles.xml} (<a
-href="http://tools.android.com/recent/extractstylerefactoring">more info</a>).</li>
-    <li>"Wrap in Container" feature lets you select a group of views then surround them
-    in a new layout (a new view group, such as a LinearLayout), and transfers namespace and layout
-    parameters to the new parent (<a
-href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
-info</a>).</li>
-    <li>"Change Layout" feature changes layouts from one type
-    to another, and can also flatten a layout hierarchy (<a
-href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
-info</a>).</li>
-    <li>"Change Widget Type" feature changes the type of the
-    selected views to a new type. Also, a new selection context menu
-    in the visual layout editor makes it easy to select siblings as
-    well as views anywhere in the layout that have the same type (<a
-href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
-info</a>).</li>
-    <li>"Extract as Include" feature finds identical collections of views
-    in other layouts and offers to combine them into a single layout that you can then include in
- each layout (<a
-href="http://tools.android.com/recent/extractasincludeimprovements">more info</a>).</li>
-    <li>Quick Assistant in Eclipse can be invoked
-    from the XML editor (with Ctrl-1) to apply any of the above
-    refactorings (and Extract String) to the current selection (<a
-href="http://tools.android.com/recent/refactoringquickassistant">more info</a>).</li>
-  </ul>
-</dd>
-
-<dt>Visual Layout Editor:</dt>
-<dd>
-  <ul>
-    <li>This is the update to the layout editor you've been waiting for! It includes (almost) all
-the goodies demonstrated at Google I/O. <a href="http://www.youtube.com/watch?v=Oq05KqjXTvs">Watch
-the video</a> on YouTube.</li>
-    <li>The palette now supports different configurations for supported widgets. That is, a single
-view is presented in various different configurations that you can drag into your layout. For
-example, there is a <em>Text Fields</em> palette category where you can drag an {@link
-android.widget.EditText} widget in as a password field, an e-mail field, a phone field, or other
-types of text boxes. Similarly, {@link android.widget.TextView} widgets are preconfigured
-with large, normal and small theme sizes, and {@link android.widget.LinearLayout} elements are
-preconfigured in horizontal and vertical configurations (<a
-href="http://tools.android.com/recent/multipletextfieldandlayouttypes">more info</a>).</li>
-    <li>The palette supports custom views. You can pick up any custom
-    implementations of the View class you've created in your project or from included libraries and
-drag them into your layout (<a
-href="http://tools.android.com/recent/customviewsinthepalette">more info</a>).</li>
-    <li>Fragments are available in the palette for placement in your layout. In the tool, you can
-choose which layout to show rendered for a given fragment tag. Go to declaration works for fragment
-classes (<a href="http://tools.android.com/recent/fragmentsupport">more info</a>).</li>
-    <li>The layout editor automatically applies a "zoom to fit" for newly
-    opened files as well as on device size and orientation changes to
-    ensure that large layouts are always fully visible unless you
-    manually zoom in.</li>
-    <li>You can drop in an {@code &lt;include&gt;} element from the palette, which will pop up
-    a layout chooser. When you select the layout to include, it is added with an {@code
-&lt;include&gt;}. Similarly, dropping images or image buttons will pop up image
-    resource choosers (<a
-href="http://tools.android.com/recent/includetagdropsupport">more info</a>).</li>
-    <li>The configuration chooser now applies the "Render Target" and
-    "Locale" settings project wide, making it trivial to check the
-    layouts for different languages or render targets without having
-    to configure these individually for each layout.</li>
-    <li>The layout editor is smarter about picking a default theme to
-    render a layout with, consulting factors like theme registrations
-    in the manifest, the SDK version, and other factors.</li>
-    <li>The layout editor is smarter about picking a default configuration to render a layout
-with, defaulting to the currently visible configuration in the previous file. It also considers the
-SDK target to determine whether to default to a tablet or phone screen size.</li>
-    <li>Basic focus support. The first text field dropped in a layout is assigned focus, and there
-are <strong>Request Focus</strong> and <strong>Clear Focus</strong> context menu items on text
-fields to change the focus.</li>
-  </ul>
-</dd>
-
-<dt>XML editors:</dt>
-<dd>
-<ul>
-  <li>Code completion has been significantly improved. It now works
-  with {@code &lt;style&gt;} elements, completes dimensional units,
-  sorts resource paths in values based on the attribute name, and more. There are also many fixes to
-handle text replacement (<a
-href="http://tools.android.com/recent/xmlcodecompletionimprovements">more info</a>).</li>
-  <li>AAPT errors are handled better. They are now underlined for the
-  relevant range in the editor, and a new quickfix makes it trivial
-  to create missing resources.</li>
-  <li>Code completion for drawable, animation and color XML files (<a
-href="http://tools.android.com/recent/codecompletionfordrawablescolorsandanimationfiles">more
-info</a>).</li>
-</ul>
-</dd>
-
-<dt>DDMS:</dt>
-<dd>
-<ul>
-  <li>"New Folder" action in the File Explorer.</li>
-  <li>The screenshot dialog will add timestamps to the filenames and preserve the orientation on
-snapshot refresh.</li>
-</ul>
-</dd>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>TraceView supports zooming with the mouse-wheel in the timeline.</li>
-    <li>The New Android Project wizard now supports Eclipse working sets.</li>
-  </ul>
-</dd>
-</dl>
-<p>More information about tool changes are available on the <a
-href="http://tools.android.com/recent">Android Tools Project Site</a>.</p>
-</div>
-</div>
-
-
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 10.0.1</a> <em>(March 2011)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 10.0.1 is designed for use with SDK Tools r10. If you haven't
-already installed SDK Tools r10 into your SDK, use the Android SDK Manager to do
-so.</dd>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>Temporary work-around to resolve the rare cases in which the layout editor will
-not open.</li>
-    <li>Fix issue in which ADT 10.0.0 would install on Eclipse 3.4 and lower, even though ADT
-requires Eclipse 3.5 or higher (as of 10.0.0).</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 10.0.0</a> <em>(February 2011)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 10.0.0 is designed for use with SDK Tools r10. If you haven't
-already installed SDK Tools r10 into your SDK, use the Android SDK Manager to do
-so.</dd>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-  <li>The tools now automatically generate Java Programming Language source files (in the <code>gen/</code> directory) and
-    bytecode (in the <code>res/raw/</code> directory) from your <code>.rs</code> files.</li>
-  <li>A Binary XML editor has been added (<a href="http://tools.android.com/recent/binaryxmleditor">details</a>).</li>
-  <li>Traceview is now integrated into the Eclipse UI (<a href="http://tools.android.com/recent/traceviewineclipse">details</a>).</li>
-  <li>The "Go To Declaration" feature for XML and <code>.java</code> files quickly show all the matches in the project
-  and allows you jump to specific items such as string translations or <code>onClick</code> handlers
-  (<a href="http://tools.android.com/recent/gotodeclarationimprovements">details</a>).</li>
-  <li>The Resource Chooser can create items such as dimensions, integers, ids, and booleans
-  (<a href="http://tools.android.com/recent/resourcechoosercannowcreatearbitraryvalues">details</a>).</li>
-  <li>Improvements to the Visual Layout Editor:
-      <ul>
-        <li>A new Palette with categories and rendering previews
-        (<a href="http://tools.android.com/recent/newpalette">details</a>).</li>
-        <li>A Layout Actions bar that provides quick access to common layout operations
-        (<a href="http://tools.android.com/recent/layoutactionsbar">details</a>).</li>
-        <li>When the Android 3.0 rendering library is selected, layouts render more like they do on devices.
-        This includes rendering of status and title bars to more accurately reflect the actual
-        screen space available to applications
-        (<a href="http://tools.android.com/recent/systembarandactionbar">details</a>).</li>
-        <li>Zoom improvements such as fit to view, persistent scale, and keyboard access.
-        (<a href="http://tools.android.com/recent/zoomimprovements">details</a>).</li>
-        <li>Further improvements to <code>&lt;merge&gt;</code> layouts, as well as layouts with gesture overlays
-        (<a href="http://tools.android.com/recent/improvedsupportformergetags">details</a>).</li>
-        <li>Improved rendering error diagnostics.</li>
-      </ul>
-    </li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 9.0.0</a> <em>(January 2011)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd>ADT 9.0.0 is designed for use with SDK Tools r9. If you haven't
-already installed SDK Tools r9 into your SDK, use the Android SDK Manager to do
-so.</dd>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>"Go To Declaration" hyperlink support: You can jump directly from code references (such as
-    <code>R.id.main</code>) to the corresponding XML declaration, or from XML attributes (such as
-    <code>@string</code>) to the corresponding resource definition, or from manifest XML
-    registrations to activities and services.</li>
-    <li>Improvements were made to name refactoring.</li>
-    <li>AVDs now automatically save their state, so they can restart almost instantly. You can enable this feature when
-    creating an AVD or by editing an AVD with the AVD Manager.</li>
-    <li>Improvements to the Visual Layout Editor:
-      <ul>
-        <li>Support for rendering targets: You can now choose an arbitrary Android platform to
-        render the current page, regardless of the project's minimum platform. This makes it
-        easy to verify the layout and appearance of your activity on different versions of
-        the platform.
-        </li>
-        <li>Improved support for empty and nested layouts: Dragging items over nested and
-        invisible layouts automatically enlarges and highlights these layouts, so that they
-        can receive drops.
-        </li>
-        <li>XML formatting improvements: The editor generates cleaner XML and you can now enable
-        XML auto-formatting in the <strong>Preferences</strong> menu.</li>
-        <li>Improved Outline labels: The Outline tab now displays additional information about each
-        View. Textual Views display a snippet of the actual text. Views with a source
-        (such as ImageView) displays the resource name. Included Views display the name of the View.
-        </li>
-        <li>When you right click a View in the Layout Editor,
-        the context menu now contains <strong>Edit ID...</strong> and <strong>Edit Text...</strong>
-        items. The <strong>Properties...</strong> context menus now list all of the properties and
-        provide a way to edit them
-        (<a href="http://tools.android.com/recent/editidtextandotherpropertiesviamenu">Details</a>).
-        </li>
-        <li>The layout editor now properly handles
-        <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element"><code>&lt;include&gt;</code></a>
-        and <a href="{@docRoot}guide/topics/resources/layout-resource.html#merge-element"><code>&lt;merge&gt;</code></a>
-        tags (<a href="http://tools.android.com/recent/supportforincludeandmerge">Details</a>).</li>
-        <li>"Extract as Include" refactoring: The Layout Editor has a new refactoring that allows
-        you to select one or more views in a layout, and extract it into a separate layout
-        (<a href="http://tools.android.com/recent/extractasincluderefactoring">Details</a>).</li>
-        <li>Improved diagnostics for class loading and rendering errors: Class loading and rendering
-        error messages are more useful and provide better information about the root cause of the
-        error.</li>
-        <li>Improved error handling to prevent drag and reordering operations from adding children
-        into an {@link android.widget.AdapterView}.</li>
-        <li>Outline reordering: Reordering your views in the Outline tab is much easier
-        (<a href="http://tools.android.com/recent/outlineimprovements">Details</a>).</li>
-        <li>Fix for keybinding bug where keyboard shortcuts did not work (Issues
-        <a href="http://code.google.com/p/android/issues/detail?id=13231">13231</a> and
-        <a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
-        <li>Fix for problems with Custom layout attribute menu (Issue
-        <a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
-        <li>Automatic configuration for various view types: Certain views have properties configured
-        by default. For example, the width of an {@link android.widget.EditText} object is set to
-        <code>match_parent</code> when added to a vertical {@link android.widget.LinearLayout}
-        or a default image is added to an {@link android.widget.ImageButton}.</li>
-        <li>Previews during dragging: Dragging from the palette or dragging within the layout editor
-        now shows live previews of the dragged item.</li>
-        <li>Navigation improvements: In the Layout Editor, double-clicking Views jumps to the
-        corresponding XML element. In the Outline view, double-clicking opens the Properties view.</li>
-        <li>The editor has Honeycomb style animation preview support.</li>
-        <li>Improved rendering support for various Views (such as TabHosts and SlidingDrawers) in
-        Honeycomb (Issues <a href="http://code.google.com/p/android/issues/detail?id=3162">3162</a>
-        and <a href="http://code.google.com/p/android/issues/detail?id=13092">13092</a>).</li>
-        <li>Included layouts can be rendered and edited in the context of the layouts that include
-        them. From a layout using an <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
-        <code>&lt;include&gt;</code></a> tag, double-clicking on the
-        <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
-        <code>&lt;include&gt;</code></a> element edits the referenced layout in the context of the
-        current layout. Additionally, when editing a layout that is included by other layouts,
-        you can quickly change between context layouts, by right clicking in the editor and choosing
-        <strong>Show included in...</strong>. This feature is only available in Honeycomb.</li>
-      </ul>
-    </li>
-    <li>This release fixes many other bugs, but the most important ones are listed below:
-  <ul>
-   <li>Fixed issue that prevented launching debug builds on productions devices when
-    <code>debuggable=true</code> was not set in the Android manifest.</li>
-    <li>The LogCat view in DDMS properly handles UTF-8 characters.</li>
-    <li>The SDK Manager is more reliable on Windows
-    (<a href="http://tools.android.com/recent/sdkmanagerfixes">Details</a>).</li>
-    <li>A JUnit initialization bug that prevented you from working with JUnit tests was fixed
-    (Issue <a href="http://code.google.com/p/android/issues/detail?id=12411">12411</a>).</li>
-  </ul>
-</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 8.0.1</a> <em>(December 2010)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<p><p>ADT 8.0.1 is designed for use with SDK Tools r8. If you haven't
-already installed SDK Tools r8 into your SDK, use the Android SDK Manager to do
-so.</p></dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-  <li>This is a quick follow-up to ADT 8.0.0 to fix some bugs.</li>
-  <li>Fixes an issue in which projects failed to compile, citing a dex error.</li>
-  <li>Better ProGuard error reporting when exporting applications for release.</li>
-</ul>
-<p>Also see the recent release notes for 8.0.0, below.</p>
-</dd>
-</dl>
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-ADT 8.0.0</a> <em>(December 2010)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<p><p>ADT 8.0.0 is designed for use with SDK Tools r8. If you haven't
-already installed SDK Tools r8 into your SDK, use the Android SDK Manager to do
-so.</p></dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-  <li>New version number scheme that follows the SDK Tools revision number. The major version
-number for your ADT plugin should now always match the revision number of your SDK Tools. For
-example, ADT 8.x is for SDK Tools r8.</li>
-  <li>Support for true debug build. You no longer need to change the value of the
-   <code>debuggable</code> attribute in the Android Manifest.
-  <p>Incremental builds automatically insert <code>debuggable="true"</code>, but if you perform
-  "export signed/unsigned application package", ADT does <em>not</em> insert it.
-  If you manually set <code>debuggable="true"</code> in the manifest file, then release builds will
-  actually create a debug build (it does not remove it if you placed it there).</p></li>
-  <li>Automatic <a href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a> support in
-  release builds. For it to work, you need to have a <code>proguard.config</code>
-  property in the <code>default.properties</code> file that points to a ProGuard config file.</li>
-  <li>Completely rewritten Visual Layout Editor. (This is still a work in progress.) Now includes:
-    <ul>
-      <li>Full drag and drop from palette to layout for all Layout classes.</li>
-      <li>Move widgets inside a Layout view, from one Layout view to another and from one layout file to another.</li>
-      <li>Contextual menu with enum/flag type properties.</li>
-      <li>New zoom controls.</li>
-    </ul></li>
-  <li>New HierarchyViewer plug-in integrated in Eclipse.</li>
-  <li>Android launch configurations don't recompile the whole workspace on launch anymore.</li>
-  <li><code>android.jar</code> source and javadoc location can now be configured.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-ADT 0.9.9</a> <em>(September 2010)</em>
-  <div class="toggleme">
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd><p>ADT 0.9.9 replaces ADT 0.9.8 and is designed for use with SDK Tools r7
-and later. ADT 0.9.9 includes the ADT 0.9.8 features as well as an important
-bugfix, so we recommend that you upgrade as soon as possible. If you haven't
-already installed SDK Tools r7 into your SDK, use the Android SDK Manager to do
-so.</p></dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-<li>Fixes a problem in project import, in which source files were deleted in some cases.</li>
-<li>Includes all other ADT 0.9.8 features (see below).</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-ADT 0.9.8</a> <em>(September 2010)</em>
-  <div class="toggleme">
-
-
-</ul>
-</dd>
-
-<dl>
-
-<dt>Dependencies:</dt>
-
-<dd><p>ADT 0.9.8 is now deprecated. Please use ADT 0.9.9 instead.</p></dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-<li>Adds a new Action, "Rename Application Package", to the Android Tools
-contextual menu. The Action does a full application package refactoring.
-<li>Adds support for library projects that don't have a source folder
-called <code>src/</code>. There is now support for any number of source folders,
-with no name restriction. They can even be in subfolder such as
-<code>src/java</code>. If you are already working with library projects created
-in ADT 0.9.7, see <a
-href="{@docRoot}guide/developing/projects/index.html#libraryMigrating">Migrating
-library projects to ADT 0.9.8</a> for important information about moving
-to the new ADT environment.</li>
-<li>Adds support for library projects that depend on other library
-projects.</li>
-<li>Adds support for additional resource qualifiers:
-<code>car</code>/<code>desk</code>, <code>night</code>/<code>notnight</code> and
-<code>navexposed</code>/<code>navhidden</code>.</li>
-<li>Adds more device screen types in the layout editor. All screen
-resolution/density combinations listed in the <a
-href="{@docRoot}guide/practices/screens_support.html#range">Supporting
-Multiple Screens</a> are now available.</li>
-<li>Fixes problems with handling of library project names that
-contain characters that are incompatible with the Eclipse path variable.
-Now properly sets up the link between the main project and the library
-project.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-ADT 0.9.7</a> <em>(May 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Library projects:</dt>
-<dd>
-<p>The ADT Plugin now supports the use of <em>library projects</em> during
-development, a capability that lets you store shared Android application
-code and resources in a separate development project. You can then reference the
-library project from other Android projects and, at build time, the tools
-compile the shared code and resources as part of the dependent applications.
-More information about this feature is available in the <a
-href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">Creating and Managing Projects</a> document. </p>
-<p>If you are not developing in Eclipse, <a
-href="tools-notes.html">SDK Tools r6</a> provides the equivalent library
-project support through the Ant build system.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-ADT 0.9.6</a> <em>(March 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-
-<dd><p>ADT 0.9.6 is designed for use with SDK Tools r5 and later. Before
-updating to ADT 0.9.6, we highly recommend that you use the Android SDK Manager to install SDK
-Tools r5 into your SDK.</p></dd>
-
-<dt>General Notes:</dt>
-<dd>
-<ul>
-<li>Editing <code>default.properties</code> outside of Eclipse will now
-automatically update the project.</li>
-<li>Loads the SDK content only when a project requires it. This will make
-Eclipse use less resources when the SDK contains many versions of Android.</li>
-<li>Resolves potential deadlock between modal dialogs, when launching ADT the
-first time with the SDK Usage panel.</li>
-<li>Fixes issues with the New Project Wizard when selecting samples.</li>
-</ul>
-</dd>
-<dt>AVD/SDK Manager:</dt>
-<dd>
-<ul>
-<li>Adds support for platform samples packages.</li>
-<li>Improves support for dependency between packages.</li>
-<li>AVDs now sorted by API level.</li>
-<li>The AVD creation dialog now enforces a minimum SD card size of 9MB.</li>
-<li>Prevents deletion of running AVDs.</li>
-</ul>
-</dd>
-<dt>DDMS:</dt>
-<dd>
-<ul>
-<li>DDMS plug-in now contains the Allocation Tracker view.</li>
-<li>New action in the Logcat view: "Go to problem" lets you go directly from an
-exception trace output to the code.</li>
-</ul>
-</dd>
-<dt>Editors:</dt>
-<dd>
-<ul>
-<li>Explode mode in the Visual Layout Editor adds a margin to all layout objects
-so that it's easier to see embedded or empty layouts.</li>
-<li>Outline mode in the Visual Layout Editor draws layout outline to make it
-easier to see layout objects.</li>
-<li>Several fixes in the configuration selector of the Visual Layout
-Editor.</li>
-</ul>
-</dd>
-<dt>Application launching:</dt>
-<dd>
-<ul>
-<li>Applications launched from ADT now behave as if they were clicked from the
-Home screen.</li>
-<li>Fixes issue where add-on with no optional library would not show up as valid
-targets for application launches.</li>
-<li>Resolves possible crash when launching applications.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-ADT 0.9.5</a> <em>(December 2009)</em>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-
-<dd><p>ADT 0.9.5 requires features provided in SDK Tools r4 or higher. If you install
-ADT 0.9.5, which is highly recommended, you should use the Android SDK
-Manager to download the latest SDK Tools into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>.</p>
-</dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-<li>AVD Launch dialog now shows scale value.</li>
-<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no skin name specified.</li>
-<li>Fixes XML validation issue in on older Java versions.</li>
-<li>.apk packaging now properly ignores vi swap files as well as hidden files.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-ADT 0.9.4</a> <em>(October 2009)</em>
-  <div class="toggleme">
-<dl>
-<dt>Dependencies:</dt>
-
-<dd><p>ADT 0.9.4 requires features provided in SDK Tools r3 or higher. If you install
-ADT 0.9.4, which is highly recommended, you should use the Android SDK
-Manager to download the latest SDK Tools into your SDK. For more information,
-see <a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>.</p>
-</dd>
-
-<dt>Project Creation Wizard:</dt>
-<dd>
-<ul>
-<li>New option to create a project from a sample by choosing it from a list.</li>
-</ul>
-</dd>
-
-<dt>Layout Editor:</dt>
-<dd>
-<ul>
-<li>Improved Configuration selector that lets you see how your layout will
-render on different devices. Default device descriptions include ADP1
-and Google Ion, while SDK add-ons can also provide new descriptions.
-A new UI allows you to create custom descriptions.</li>
-<li>Adds a new clipping toggle, to let you see your full layout even if it's
-bigger than the screen.</li>
-</ul>
-</dd>
-
-<dt>DDMS integration:</dt>
-<dd>
-<ul>
-<li>Includes the improvements from the standlone DDMS, revision 3.</li>
-<li>Adds an option to open HPROF files into eclipse instead of writing them on
-disk. If a profiler such as MAT (<a href="http://eclipse.org/mat">Memory Analyzer
-Tool</a>) is installed, it'll open the file.</li>
-</ul>
-</dd>
-
-<dt>Android SDK and AVD Manager integration:</dt>
-<dd>
-<ul>
-<li>Includes the improvements from the standalone Android SDK and AVD Manager,
-revision 3.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-
-
-<h2 id="installing">Installing the ADT Plugin</h2>
-
-<p>The sections below provide instructions on how to download and install
-ADT into your Eclipse environment. If you encounter problems, see the <a
-href="#troubleshooting">Troubleshooting</a> section.</p>
-
-
-<h3 id="preparing">Preparing Your Development Computer</h3>
-
-<p>ADT is a plugin for the Eclipse IDE. Before you can install or use ADT,
-you must have a compatible version of Eclipse installed on your development
-computer. Check the <a
-href="requirements.html">System Requirements</a> document for
-a list of Eclipse versions that are compatible with the Android SDK.</li></p>
-
-<ul>
-<li>If Eclipse is already installed on your computer, make sure that it is
-a version that is compatible with ADT and the Android SDK.
-
-<li>If you need to install or update Eclipse, you can download it from this
-location:
-
-<p style="margin-left:2em;"><a href=
-"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>
-</p>
-
-<p>The "Eclipse Classic" version is recommended. Otherwise, a Java or RCP
-version of Eclipse is recommended.</p></li>
-</ul>
-
-<p>Additionally, before you can configure or use ADT, you must install the
-Android SDK starter package, as described in <a
-href="installing.html#Installing">Downloading the SDK Starter Package</a>.
-Specifically, you need to install a compatible version of the Android SDK Tools
-and at least one development platform. To simplify ADT setup, we recommend
-installing the Android SDK prior to installing ADT. </p>
-
-<p>When your Eclipse and Android SDK environments are ready, continue with the
-ADT installation as described in the steps below. </p>
-
-<h3 id="downloading">Downloading the ADT Plugin</h3>
-
-<p>Use the Update Manager feature of your Eclipse installation to install the latest
-revision of ADT on your development computer.</p>
-
-<p>Assuming that you have a compatible version of the Eclipse IDE installed, as
-described in <a href="#preparing">Preparing for Installation</a>, above, follow
-these steps to download the ADT plugin and install it in your Eclipse
-environment.</p>
-
-
-<ol>
-    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Install New
-Software...</strong>.</li>
-    <li>Click <strong>Add</strong>, in the top-right corner.</li>
-    <li>In the Add Repository dialog that appears, enter "ADT Plugin" for the <em>Name</em> and the
-following URL for the <em>Location</em>:
-      <pre>https://dl-ssl.google.com/android/eclipse/</pre>
-    </li>
-    <li>Click <strong>OK</strong>
-      <p>Note: If you have trouble acquiring the plugin, try using "http" in the Location URL,
-instead of "https" (https is preferred for security reasons).</p></li>
-    <li>In the Available Software dialog, select the checkbox next to Developer Tools and click
-<strong>Next</strong>.</li>
-    <li>In the next window, you'll see a list of the tools to be downloaded. Click
-<strong>Next</strong>. </li>
-    <li>Read and accept the license agreements, then click <strong>Finish</strong>.
-      <p>Note: If you get a security warning saying that the authenticity or validity of
-the software can't be established, click <strong>OK</strong>.</p></li>
-    <li>When the installation completes, restart Eclipse. </li>
-</ol>
-
-<h3 id="configuring">Configuring the ADT Plugin</h3>
-
-<p>After you've successfully downloaded the ADT as described above, the next step
-is to modify your ADT preferences in Eclipse to point to the Android SDK directory:</p>
-
-<ol>
-    <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
-        panel (Mac OS X: <strong>Eclipse</strong> &gt; <strong>Preferences</strong>).</li>
-    <li>Select <strong>Android</strong> from the left panel.</li>
-      <p>You may see a dialog asking whether you want to send usage statistics to Google. If so,
-make your choice and click <strong>Proceed</strong>. You cannot continue with this procedure until
-you click <strong>Proceed</strong>.</p>
-    <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse...</strong> and
-        locate your downloaded SDK directory. </li>
-    <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
-</ol>
-
-<p>Done! If you haven't encountered any problems, then the installation is
-complete. If you're installing the Android SDK for the first time, return to <a
-href="{@docRoot}sdk/installing.html#InstallingADT">Installing the SDK</a> to complete your setup.
-</p>
-
-
-<h3 id="troubleshooting">Troubleshooting ADT Installation</h3>
-
-<p> If you are having trouble downloading the ADT plugin after following the
-steps above, here are some suggestions: </p>
-
-<ul>
-  <li>If Eclipse can not find the remote update site containing the ADT plugin,
-try changing the remote site URL to use http, rather than https. That is, set
-the Location for the remote site to:
-<pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
-<li>If you are behind a firewall (such as a corporate firewall), make sure that
-you have properly configured your proxy settings in Eclipse. In Eclipse,
-you can configure proxy information from the main Eclipse menu in
-<strong>Window</strong> (on Mac OS X, <strong>Eclipse</strong>) &gt;
-<strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network
-Connections</strong>.</li>
-</ul>
-
-<p> If you are still unable to use Eclipse to download the ADT plugin as a
-remote update site, you can download the ADT zip file to your local machine and
-manually install it:</p>
-
-<ol>
-  <li>Download the current ADT Plugin zip file from the table below (do not unpack it).
-
-  <table class="download">
-    <tr>
-      <th>Name</th>
-      <th>Package</th>
-      <th>Size</th>
-      <th>MD5 Checksum</th>
-  </tr>
-  <tr>
-    <td>ADT {@adtZipVersion}</td>
-    <td>
-      <a href="http://dl.google.com/android/{@adtZipDownload}">{@adtZipDownload}</a>
-    </td>
-    <td>{@adtZipBytes} bytes</td>
-    <td>{@adtZipChecksum}</td>
-  </tr>
-</table>
-</li>
-
-</li>
-  <li>Follow steps 1 and 2 in the <a href="#installing">default install
-      instructions</a> (above).</li>
-  <li>In the Add Site dialog, click <strong>Archive</strong>.</li>
-  <li>Browse and select the downloaded zip file.</li>
-  <li>Enter a name for the local update site (e.g.,
-      "Android Plugin") in the "Name" field.</li>
-  <li>Click <strong>OK</strong>.
-  <li>Follow the remaining procedures as listed for
-      <a href="#installing">default installation</a> above,
-      starting from step 4.</li>
-</ol>
-
-<p>To update your plugin once you've installed using the zip file, you will have
-to follow these steps again instead of the default update instructions.</p>
-
-<h4>Other install errors</h4>
-
-<p>Note that there are features of ADT that require some optional
-Eclipse packages (for example, WST). If you encounter an error when
-installing ADT, your Eclipse installion might not include these packages.
-For information about how to quickly add the necessary packages to your
-Eclipse installation, see the troubleshooting topic
-<a href="{@docRoot}resources/faq/troubleshooting.html#installeclipsecomponents">ADT
-Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>
-
-<h4>For Linux users</h4>
-<p>If you encounter this error when installing the ADT Plugin for Eclipse:
-<pre>
-An error occurred during provisioning.
-Cannot connect to keystore.
-JKS</pre>
-<p>
-...then your development machine lacks a suitable Java VM. Installing Sun
-Java 6 will resolve this issue and you can then reinstall the ADT
-Plugin.</p>
-
-
-<h2 id="updating">Updating the ADT Plugin</h2>
-
-<p>From time to time, a new revision of the ADT Plugin becomes available, with
-new features and bug fixes. Generally, when a new revision of ADT is available,
-you should update to it as soon as convenient. </p>
-
-<p>In some cases, a new revision of ADT will have a dependency on a specific
-revision of the Android SDK Tools. If such dependencies exist, you will need to
-update the SDK Tools package of the SDK after installing the new revision of
-ADT. To update the SDK Tools package, use the Android SDK Manager, as
-described in <a href="adding-components.html">Adding SDK Packages</a>.</p>
-
-<p>To learn about new features of each ADT revision and also any dependencies on
-the SDK Tools, see the listings in the <a href="#notes">Revisions</a>
-section. To determine the version currently installed, open the
-Eclipse Installed Software window using <strong>Help</strong>
-&gt; <strong>Software Updates</strong> and refer to the version listed for
-"Android Development Tools".</p>
-
-<p>Follow the steps below to check whether an update is available and, if so,
-to install it. </p>
-
-<ol>
-    <li>Select <strong>Help</strong> &gt; <strong>Check for Updates</strong>.
-      <p>If there are no updates available, a dialog will say so and you're done.</p></li>
-    <li>If there are updates available, select Android DDMS, Android Development Tools,
-      and Android Hierarchy Viewer, then click <strong>Next</strong>.</li>
-    <li>In the Update Details dialog, click <strong>Next</strong>.</li>
-    <li>Read and accept the license agreement and then click <strong>Finish</strong>.
-      This will download and install the latest version of Android DDMS and
-      Android Development Tools.</li>
-    <li>Restart Eclipse.</li>
-</ol>
-
-
-<p>If you encounter problems during the update, remove the existing ADT plugin from Eclipse, then
-perform a fresh installation, using the instructions for <a href="#installing">Installing the ADT
-Plugin</a>.</p>
-
diff --git a/docs/html/sdk/exploring.jd b/docs/html/sdk/exploring.jd
new file mode 100644
index 0000000..8272b06
--- /dev/null
+++ b/docs/html/sdk/exploring.jd
@@ -0,0 +1,166 @@
+page.title=Exploring the SDK
+walkthru=1
+
+@jd:body
+
+
+<p>The Android SDK is composed of modular packages that you can download separately using
+the Android SDK Manager. For example, when the SDK Tools are updated or a new version of
+the Android platform is released, you can use the SDK Manager to quickly download them to
+your environment. Simply follow the procedures described in <a
+href="{@docRoot}sdk/installing/adding-packages.html">Adding Platforms and Packages</a>.</p>
+
+<p>There are several different packages available for the Android SDK. The table below describes
+most of the available packages and where they're located once you download them.</p>
+
+
+<h2 id="Packages">Available Packages</h2>
+
+
+<table>
+  <tr><th>Package</th><th>Description</th><th>File Location</th></tr>
+  <tr>
+    <td><a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools</a></td>
+    <td>Contains tools for debugging and testing, plus other
+utilities that are required to develop an app. If you've just installed the SDK starter package,
+then you already have the latest version of this package. Make sure you keep this up to date.</td>
+    <td>{@code &lt;sdk>/tools/}</td></tr>
+  <tr><td>SDK Platform-tools</td>
+    <td>Contains platform-dependent tools for developing and debugging
+your application. These tools support the latest features of the Android platform and are typically
+updated only when a new platform becomes available. These tools are always backward compatible with
+older platforms, but you must be sure that you have the latest version of these tools when you
+install a new SDK platform.</td>
+    <td>{@code &lt;sdk>/platform-tools/}</td>
+  </tr>
+  
+  <tr>
+    <td>Documentation</td>
+    <td>An offline copy of the latest documentation for the Android
+platform APIs.</td>
+    <td>{@code &lt;sdk>/docs/}</td>
+  </tr>
+  <tr><td>SDK Platform</td>
+    <td>There's one SDK Platform available for each version of Android. It includes an {@code
+android.jar} file with a fully compliant Android library. In order to build an Android app, you must
+specify an SDK platform as your build target.</td>
+    <td>{@code &lt;sdk>/platforms/&lt;android-version>/}</td>
+  </tr>
+  <tr>
+    <td>System Images</td>
+    <td>Each platform version offers one or more different system images (such as for ARM
+and x86). The Android emulator requires a system image to operate. You should always test your
+app on the latest version of Android and using the emulator with the latest system image is a
+good way to do so.</td>
+    <td>{@code &lt;sdk>/platforms/&lt;android-version>/}</td>
+  </tr>
+  <tr>
+    <td>Sources for Android SDK</td>
+    <td>A copy of the Android platform source code that's useful for
+stepping through the code while debugging your app.</td>
+    <td>{@code &lt;sdk>/sources/}</td>
+  </tr>
+  <tr>
+    <td><a href="{@docRoot}tools/samples/index.html">Samples for SDK</a></td>
+    <td>A collection of sample apps that demonstrate a variety of the
+platform APIs. These are a great resource to browse Android app code. The API Demos app in
+particular provides a huge number of small demos you should explore.</td>
+    <td>{@code &lt;sdk>/platforms/&lt;android-version>/samples/}</td>
+  </tr>
+  <tr>
+    <td><a href="http://developers.google.com/android">Google APIs</a></td>
+    <td>An SDK add-on that provides both a platform you can use to develop an app
+using special Google APIs and a system image for the emulator so you can test your app using the
+Google APIs.</td>
+    <td>{@code &lt;sdk>/add-ons/}</td>
+  </tr>
+  
+  <tr>
+    <td><a href="{@docRoot}tools/extras/support-library.html">Android Support</a></td>
+    <td>A static library you can include in your app sources in order to use powerful
+APIs that aren't available in the standard platform. For example, the support library
+contains versions of the {@link android.support.v4.app.Fragment} class that's compatible with
+Android 1.6 and higher (the class was originally introduced in Android 3.0) and the {@link
+android.support.v4.view.ViewPager} APIs that allow you to easily build a side-swipeable UI.</td>
+    <td>{@code &lt;sdk>/extras/android/support/}</td>
+  </tr>
+  <tr>
+    <td><a href="{@docRoot}guide/google/play/billing/index.html">Google Play Billing</a></td>
+    <td>Provides the static libraries and samples that allow you to
+integrate billing services in your app with Google Play.</td>
+    <td>{@code &lt;sdk>/extras/google/}</td>
+  </tr>
+  <tr>
+    <td><a href="{@docRoot}guide/google/play/licensing/index.html">Google Play Licensing</a></td>
+    <td>Provides the static libraries and samples that allow you to perform license verification for
+your app when distributing with Google Play.</td>
+    <td>{@code &lt;sdk>/extras/google/}</td>
+  </tr>
+</table>
+
+<p>The above table is not comprehensive and you can <a
+href="#AddingSites">add new sites</a> to download additional packages from third-parties.</p>
+
+<p>In some cases, an SDK package may require a specific minimum revision of
+another package or SDK tool. For example, there may be a dependency between the ADT Plugin for
+Eclipse and
+the SDK Tools package. When you install the SDK Tools
+package, you should also upgrade to the required version of ADT (if you
+are developing in Eclipse). In this case,  the major version number for your ADT plugin should
+always match the revision number of your SDK Tools (for example, ADT 8.x requires SDK Tools r8).
+</p>
+
+<p>The development tools will notify you with debug warnings if there is dependency that you need to
+address. The Android SDK Manager also enforces dependencies by requiring that you download any
+packages that are needed by those you have selected.</p>
+
+
+
+
+
+<h2 id="AddingSites">Adding New Sites</h2>
+
+<p>By default, <strong>Available Packages</strong> displays packages available from the
+<em>Android Repository</em> and <em>Third party Add-ons</em>. You can add other sites that host
+their own Android SDK add-ons, then download the SDK add-ons
+from those sites.</p>
+
+<p>For example, a mobile carrier or device manufacturer might offer additional
+API libraries that are supported by their own Android-powered devices. In order
+to develop using their libraries, you must install their Android SDK add-on, if it's not already
+available under <em>Third party Add-ons</em>. </p>
+
+<p>If a carrier or device manufacturer has hosted an SDK add-on repository file
+on their web site, follow these steps to add their site to the Android SDK
+Manager:</p>
+
+<ol>
+  <li>Select <strong>Available Packages</strong> in the left panel.</li>
+  <li>Click <strong>Add Add-on Site</strong> and enter the URL of the
+<code>repository.xml</code> file. Click <strong>OK</strong>.</li>
+</ol>
+<p>Any SDK packages available from the site will now be listed under a new item named
+<strong>User Add-ons</strong>.</p>
+
+
+
+
+<h2 id="troubleshooting">Troubleshooting</h2>
+
+<p><strong>Problems connecting to the SDK repository</strong></p>
+
+<p>If you are using the Android SDK Manager to download packages and are encountering
+connection problems, try connecting over http, rather than https. To switch the
+protocol used by the Android SDK Manager, follow these steps: </p>
+
+<ol>
+  <li>With the Android SDK Manager window open, select "Settings" in the
+  left pane. </li>
+  <li>On the right, in the "Misc" section, check the checkbox labeled "Force
+  https://... sources to be fetched using http://..." </li>
+  <li>Click <strong>Save &amp; Apply</strong>.</li>
+</ol>
+
+
+
+
diff --git a/docs/html/sdk/index.jd b/docs/html/sdk/index.jd
index b56ccdb..e788ffe 100644
--- a/docs/html/sdk/index.jd
+++ b/docs/html/sdk/index.jd
@@ -1,6 +1,6 @@
 page.title=Android SDK
+header.hide=1
 page.metaDescription=Download the official Android SDK to develop apps for Android-powered devices.
-sdk.redirect=0
 
 sdk.win_installer=installer_r18-windows.exe
 sdk.win_installer_bytes=37456234
@@ -20,28 +20,119 @@
 
 @jd:body
 
-<div class="non-preview">
-<p>Here's an overview of the steps you must follow to set up the Android SDK:</p>
-
-<ol>
-  <li>Prepare your development computer and ensure it meets the system requirements.</li>
-  <li>Install the SDK starter package from the table above. (If you're on Windows, download the
-installer for help with the initial setup.)</li>
-  <li>Install the ADT Plugin for Eclipse (if you'll be developing in Eclipse).</li>
-  <li>Add Android platforms and other packages to your SDK.</li>
-  <li>Explore the contents of the Android SDK (optional).</li>
-</ol>
-
-<p class="online-message">To get started, download the appropriate package from the table above,
-then read the guide to <a href="installing.html">Installing the SDK</a>.</p>
-
-<!-- non-inline style and based on only one selector so that
-     it can be overriden by the sdkpage.cs template -->
 <style type="text/css">
-  .offline-message { display:none; }
+  .offline { display:none; }
 </style>
 
-<p class="offline-message">For more information about how to set up your
-development environment, read the guide to <a href="installing.html">Installing the SDK</a>.</p>
+<div class="wrap">
+
+<div class="col-13">&nbsp;</div><!-- provides top margin for content -->
+
+<div class="col-7" style="margin-left:0">
+  <img src="{@docRoot}images/sdk-cube.png" alt="" />
+</div>
+
+
+<div class="col-6" style="margin-right:0;">
+  
+<div id="intro" style="position:absolute;width:inherit">
+<h1 style="margin-top:0">Get the Android SDK</h1>
+
+  
+<p>The Android SDK provides you the API libraries and developer tools necessary to build, test,
+  and debug apps for Android.</p>
+
+<!-- this appears when viewing the offline docs -->
+<p class="offline">
+To get the latest Android SDK, please visit the web site at <a
+href="http://developer.android.com/sdk/index.html">developer.android.com/sdk/</a>
+</p>
+
+<!-- this appears when viewing the online docs -->
+<div class="online">
+<a class="big button disabled" id="download-button" href="" >Sorry, the SDK does not support
+your OS</a>
+
+<p style="margin-top:20px;font-size:12px"><a href='' onclick="
+  if ($('.pax').is(':visible')) {
+    $('.pax').slideUp();
+  } else {
+    $('.reqs').slideUp();
+    $('.pax').slideDown();
+  }return false;">Other platforms</a> | 
+  <a href='' onclick="
+  if ($('.reqs').is(':visible')) {
+    $('.reqs').slideUp();
+  } else {
+    $('.pax').slideUp();
+    $('.reqs').slideDown();
+  }return false;">System requirements</a></p>
+</div><!-- end online -->
+
+</div><!-- end intro -->
+
+
+
+<div id="next-steps" class="online" style="display:none;position:absolute;width:inherit">
+  <h1 style="margin-top:0">Get ready to code!</h1>
+  <p><em><span id="filename"></span></em> is now downloading...</p>
+  <p>You'll soon be developing apps for Android! Once the download completes,
+    you need to follow a few steps to set up your environment.</p>
+  <p>To continue, follow the guide to <a href="{@docRoot}sdk/installing/index.html">Installing
+the SDK</a>.</p>
+  
+</div><!-- end next-steps -->
+
+</div><!-- end col-6 -->
+
+
+<div class="col-13">&nbsp;</div><!-- provides padding -->
+ 
+
+<div class="col-6 reqs" style="margin-left:0;display:none;font-size:12px">
+<h3>Operating Systems</h3>
+<ul>
+  <li>Windows XP (32-bit), Vista (32- or 64-bit), or Windows 7 (32- or 64-bit)</li>
+  <li>Mac OS X 10.5.8 or later (x86 only)</li>
+  <li>Linux (tested on Ubuntu Linux, Lucid Lynx)
+    <ul>
+      <li>GNU C Library (glibc) 2.7 or later is required.</li>
+      <li>On Ubuntu Linux, version 8.04 or later is required.</li>
+      <li>64-bit distributions must be capable of running 32-bit applications.</li>
+    </ul>
+  </li>
+</ul>
+</div>
+
+<div class="col-7 reqs" style="margin-right:0;display:none;font-size:12px">
+<h3>Eclipse IDE</h3>
+    <ul>
+      <li>Eclipse 3.6.2 (Helios) or greater
+<p class="note"><strong>Note:</strong> Eclipse 3.5 (Galileo) is no longer
+supported with the latest version of ADT.</p></li>
+      <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included
+in most Eclipse IDE packages) </li>
+      <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 6</a>
+        (JRE alone is not sufficient)</li>
+      <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">Android Development Tools plugin</a>
+(recommended)</li>
+      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+    </ul>
+
+
+<h3>Other development environments</h3>
+    <ul>
+      <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 6</a>
+        (JRE alone is not sufficient)</li>
+      <li><a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later</li>
+      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
+    </ul>
+  </li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Some Linux distributions may include JDK 1.4 or Gnu Compiler
+for Java, both of which are <em>not</em> supported for Android development. </p>
+</div>
 
 </div>
+
diff --git a/docs/html/sdk/installing.jd b/docs/html/sdk/installing.jd
deleted file mode 100644
index 7461eb0..0000000
--- a/docs/html/sdk/installing.jd
+++ /dev/null
@@ -1,590 +0,0 @@
-page.title=Installing the SDK
-
-@jd:body
-
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot +
-"assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot +
-"assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-  padding: .25em 1em 0em 1em;
-  margin-bottom: 0;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div id="qv-wrapper">
-<div id="qv">
-
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#Preparing">1. Preparing Your Development Computer</a></li>
-    <li><a href="#Installing">2. Downloading the SDK Starter Package</a></li>
-    <li><a href="#InstallingADT">3. Installing the ADT Plugin for Eclipse</a></li>
-    <li><a href="#AddingComponents">4. Adding Platforms and Other Packages</a>
-      <ol>
-        <li><a href="#components">Available Packages</a></li>
-        <li><a href="#which">Recommended Packages</a></li>
-      </ol></li>
-    <li><a href="#sdkContents">5. Exploring the SDK (Optional)</a></li>
-    <li><a href="#NextSteps">Next Steps</a></li>
-    <li><a href="#troubleshooting">Troubleshooting</a></li>
-  </ol>
-
-<h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin for Eclipse</a></li>
-    <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a></li>
-  </ol>
-
-</div>
-</div>
-
-<p>This page describes how to install the Android SDK
-and set up your development environment for the first time.</p>
-
-<p>If you encounter any problems during installation, see the
-<a href="#troubleshooting">Troubleshooting</a> section at the bottom of
-this page.</p>
-
-<h4>Updating?</h4>
-
-<p>If you already have an Android SDK, use the Android SDK Manager tool to install
-updated tools and new Android platforms into your existing environment. For information about how to
-do that, see <a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a>.</p>
-
-
-<h2 id="Preparing">Step 1. Preparing Your Development Computer</h2>
-
-<p>Before getting started with the Android SDK, take a moment to confirm that
-your development computer meets the <a href="requirements.html">System
-Requirements</a>. In particular, you might need to install the <a
-href="http://java.sun.com/javase/downloads/index.jsp">JDK</a>, if you don't have it already. </p>
-
-<p>If you will be developing in Eclipse with the Android Development
-Tools (ADT) Plugin&mdash;the recommended path if you are new to
-Android&mdash;make sure that you have a suitable version of Eclipse
-installed on your computer as described in the
-<a href="requirements.html">System Requirements</a> document.
-If you need to install Eclipse, you can download it from this location: </p>
-
-<p style="margin-left:2em;"><a href=
-"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></p>
-
-<p>The "Eclipse Classic" version is recommended. Otherwise, a Java or
-RCP version of Eclipse is recommended.</p>
-
-
-<h2 id="Installing">Step 2. Downloading the SDK Starter Package</h2>
-
-<p>The SDK starter package is not a full
-development environment&mdash;it includes only the core SDK Tools, which you can
-use to download the rest of the SDK packages (such as the latest Android platform).</p>
-
-<p>If you haven't already, get the latest version of the SDK starter package from the <a
-href="{@docRoot}sdk/index.html">SDK download page</a>.</p>
-
-<p>If you downloaded a {@code .zip} or {@code .tgz} package (instead of the SDK installer), unpack
-it to a safe location on your machine. By default, the SDK files are unpacked
-into a directory named <code>android-sdk-&lt;machine-platform&gt;</code>.</p>
-
-<p>If you downloaded the Windows installer ({@code .exe} file), run it now and it will check
-whether the proper Java SE Development Kit (JDK) is installed (installing it, if necessary), then
-install the SDK Tools into a default location (which you can modify).</p>
-
-<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
-refer to the SDK directory later, when setting up the ADT plugin and when using
-the SDK tools from the command line.</p>
-
-
-<h2 id="InstallingADT">Step 3. Installing the ADT Plugin for Eclipse</h2>
-
-<p>Android offers a custom plugin for the Eclipse IDE, called Android
-Development Tools (ADT), that is designed to give you a powerful, integrated
-environment in which to build Android applications. It extends the capabilites
-of Eclipse to let you quickly set up new Android projects, create an application
-UI, debug your applications
-using the Android SDK tools, and even export signed (or unsigned) APKs in order
-to distribute your application. In general, developing in Eclipse with ADT is a
-highly recommended approach and is the fastest way to get started with Android.
-</p>
-
-<p>If you'd like to use ADT for developing Android applications, install it now.
-Read <a href="{@docRoot}sdk/eclipse-adt.html#installing">Installing the ADT Plugin</a> for
-step-by-step installation instructions, then return here to continue the
-last step in setting up your Android SDK.</p>
-
-<p>If you prefer to work in a different IDE, you do not need to
-install Eclipse or ADT. Instead, you can directly use the SDK tools to build and
-debug your application. The <a href="{@docRoot}guide/developing/index.html">Introduction</a>
-to Android application development outlines the major steps that you need to complete when
-developing in Eclipse or other IDEs.</p>
-
-
-
-<h2 id="AddingComponents">Step 4. Adding Platforms and Other Packages</h2>
-
-<p>The last step in setting up your SDK is using the Android SDK Manager (a
-tool included in the SDK starter package) to download essential SDK packages into your development
-environment.</p>
-
-<p>The SDK uses a modular structure that separates the major parts of the SDK&mdash;Android platform
-versions, add-ons, tools, samples, and documentation&mdash;into a set of separately installable
-packages. The SDK starter package, which you've already downloaded, includes only a single
-package: the latest version of the SDK Tools. To develop an Android application, you also need to
-download at least one Android platform and the associated platform tools. You can add other
-packages and platforms as well, which is highly recommended.</p>
-
-<p>If you used the Windows installer, when you complete the installation wizard, it will launch the
-Android SDK Manager with a default set of platforms and other packages selected
-for you to install. Simply click <strong>Install</strong> to accept the recommended set of
-packages and install them. You can then skip to <a href="#sdkContents">Step 5</a>, but we
-recommend you first read the section about the <a href="#components">Available Packages</a> to
-better understand the packages available from the Android SDK Manager.</p>
-
-<p>You can launch the Android SDK Manager in one of the following ways:</p>
-<ul>
-  <li>From within Eclipse, select <strong>Window &gt; Android SDK Manager</strong>.</li>
-  <li>On Windows, double-click the <code>SDK Manager.exe</code> file at the root of the Android
-SDK directory.</li>
-  <li>On Mac or Linux, open a terminal and navigate to the <code>tools/</code> directory in the
-Android SDK, then execute: <pre>android</pre> </li>
-</ul>
-
-<p>To download packages, use the graphical UI of the Android SDK
-Manager to browse the SDK repository and select new or updated
-packages (see figure 1). The Android SDK Manager installs the selected packages in
-your SDK environment. For information about which packages you should download, see <a
-href="#which">Recommended Packages</a>.</p>
-
-<img src="/images/sdk_manager_packages.png" />
-<p class="img-caption"><strong>Figure 1.</strong> The Android SDK Manager's
-<strong>Available Packages</strong> panel, which shows the SDK packages that are
-available for you to download into your environment.</p>
-
-
-<h3 id="components">Available Packages</h3>
-
-<p>By default, there are two repositories of packages for your SDK: <em>Android
-Repository</em> and <em>Third party Add-ons</em>.</p>
-
-<p>The <em>Android Repository</em> offers these types of packages:</p>
-
-<ul>
-<li><strong>SDK Tools</strong> &mdash; Contains tools for debugging and testing your application
-and other utility tools. These tools are installed with the Android SDK starter package and receive
-periodic updates. You can access these tools in the <code>&lt;sdk&gt;/tools/</code> directory of
-your SDK. To learn more about
-them, see <a href="{@docRoot}guide/developing/tools/index.html#tools-sdk">SDK Tools</a> in the
-developer guide.</li>
-
-<li><strong>SDK Platform-tools</strong> &mdash; Contains platform-dependent tools for developing
-and debugging your application. These tools support the latest features of the Android platform and
-are typically updated only when a new platform becomes available. You can access these tools in the
-<code>&lt;sdk&gt;/platform-tools/</code> directory. To learn more about them, see <a
-href="{@docRoot}guide/developing/tools/index.html#tools-platform">Platform Tools</a> in the
-developer guide.</li>
-
-<li><strong>Android platforms</strong> &mdash; An SDK platform is
-available for every production Android platform deployable to Android-powered devices. Each
-SDK platform package includes a fully compliant Android library, system image, sample code,
-and emulator skins. To learn more about a specific platform, see the list of platforms that appears
-under the section "Downloadable SDK Packages" on the left part of this page.</li>
-
-<li><strong>USB Driver for Windows</strong> (Windows only) &mdash; Contains driver files
-that you can install on your Windows computer, so that you can run and debug
-your applications on an actual device. You <em>do not</em> need the USB driver unless
-you plan to debug your application on an actual Android-powered device. If you
-develop on Mac OS X or Linux, you do not need a special driver to debug
-your application on an Android-powered device. See <a
-href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a> for more information
-about developing on a real device.</li>
-
-<li><strong>Samples</strong> &mdash; Contains the sample code and apps available
-for each Android development platform. If you are just getting started with
-Android development, make sure to download the samples to your SDK. <!--The download
-includes not only a set of very useful sample apps, but also the source for <a
-href="{@docRoot}resources/tutorials/hello-world.html">Hello World</a> and other
-tutorials. --></li>
-
-<li><strong>Documentation</strong> &mdash; Contains a local copy of the latest
-multiversion documentation for the Android framework API. </li>
-</ul>
-
-<p>The <em>Third party Add-ons</em> provide packages that allow you to create a development
-environment using a specific Android external library (such as the Google Maps library) or a
-customized (but fully compliant) Android system image. You can add additional Add-on repositories by
-clicking <strong>Add Add-on Site</strong>.</p>
-
-
-<h3 id="which">Recommended Packages</h3>
-
-<p>The SDK repository contains a range of packages that you can download.
-Use the table below to determine which packages you need, based on whether you
-want to set up a basic, recommended, or full development environment:
-</p>
-
-<table style="width:95%">
-
-<tr>
-<th>Environment</th>
-<th>SDK&nbsp;Package</th>
-<th>Comments</th>
-</tr>
-
-<tr>
-<td rowspan="3" style="font-size:.9em;background-color:#FFE;">Basic</td>
-<td style="font-size:.9em;background-color:#FFE;">SDK Tools</td>
-<td style="font-size:.9em;background-color:#FFE;">If you've just installed
-the SDK starter package, then you already have the latest version of this package. The
-SDK Tools package is required to develop an Android application. Make sure you keep this up to
-date.</td>
-</tr>
-
-<tr>
-<td style="font-size:.9em;background-color:#FFE;">SDK Platform-tools</td>
-<td style="font-size:.9em;background-color:#FFE;">This includes more tools that are required
-for application development. These tools are platform-dependent and typically update only when
-a new SDK platform is made available, in order to support new features in the platform. These
-tools are always backward compatible with older platforms, but you must be sure that you have
-the latest version of these tools when you install a new SDK platform.</td>
-</tr>
-
-<tr>
-<td style="font-size:.9em;background-color:#FFE;">SDK platform</td>
-<td style="font-size:.9em;background-color:#FFE;">You need to download <strong
-style="color:red">at least one platform</strong> into your environment, so that
-you will be able to compile your application and set up an Android Virtual
-Device (AVD) to run it on (in the emulator). To start with, just download the
-latest version of the platform. Later, if you plan to publish your application,
-you will want to download other platforms as well, so that you can test your
-application on the full range of Android platform versions that your application supports.</td>
-</tr>
-<tr>
-<td colspan="2"
-style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
-style="border:none"></td>
-</tr>
-<tr>
-<td rowspan="3">Recommended<br/>(plus Basic)</td>
-<td>Documentation</td>
-<td>The Documentation package is useful because it lets you work offline and
-also look up API reference information from inside Eclipse.</td>
-</tr>
-
-<tr>
-<td>Samples</td>
-<td>The Samples packages give you source code that you can use to learn about
-Android, load as a project and run, or reuse in your own app. Note that multiple
-samples packages are available &mdash; one for each Android platform version. When
-you are choosing a samples package to download, select the one whose API Level
-matches the API Level of the Android platform that you plan to use.</td>
-</tr>
-<tr>
-<td>Usb Driver</td>
-<td>The Usb Driver package is needed only if you are developing on Windows and
-have an Android-powered device on which you want to install your application for
-debugging and testing. For Mac OS X and Linux platforms, no
-special driver is needed.</td>
-</tr>
-<tr>
-<td colspan="2"
-style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
-style="border:none"></td>
-</tr>
-<tr>
-<td rowspan="3">Full<br/>(plus Recommended)</td>
-<td>Google APIs</td>
-<td>The Google APIs add-on gives your application access to the Maps external
-library, which makes it easy to display and manipulate Maps data in your
-application. </td>
-</tr>
-<tr>
-<td>Additional SDK Platforms</td>
-<td>If you plan to publish your application, you will want to download
-additional platforms corresponding to the Android platform versions on which you
-want the application to run. The recommended approach is to compile your
-application against the lowest version you want to support, but test it against
-higher versions that you intend the application to run on. You can test your
-applications on different platforms by running in an Android Virtual Device
-(AVD) on the Android emulator.</td>
-</tr>
-
-</table>
-
-<p>Once you've installed at least the basic configuration of SDK packages, you're ready to start
-developing Android apps. The next section describes the contents of the Android SDK to familiarize
-you with the packages you've just installed.</p>
-
-<p>For more information about using the Android SDK Manager, see the <a
-href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a> document. </p>
-
-
-<h2 id="sdkContents">Step 5. Exploring the SDK (Optional)</h2>
-
-<p>Once you've installed the SDK and downloaded the platforms, documentation,
-and add-ons that you need, we suggest that you open the SDK directory and take a look at what's
-inside.</p>
-
-<p>The table below describes the full SDK directory contents, with packages
-installed. </p>
-
-<table>
-<tr>
-<th colspan="3">Name</th><th>Description</th>
-</tr>
-<tr>
-<td colspan="3"><code>add-ons/</code></td>
-<td>Contains add-ons to the Android SDK development
-environment, which let you develop against external libraries that are available on some
-devices. </td>
-</tr>
-<tr>
-<td colspan="3"><code>docs/</code></td>
-<td>A full set of documentation in HTML format, including the Developer's Guide,
-API Reference, and other information. To read the documentation, load the
-file <code>offline.html</code> in a web browser.</td>
-</tr>
-<tr>
-<td colspan="3"><code>platform-tools/</code></td>
-<td>Contains platform-dependent development tools that may be updated with each platform release.
-The platform tools include the Android Debug Bridge ({@code adb}) as well as other tools that you
-don't typically use directly. These tools are separate from the development tools in the {@code
-tools/} directory because these tools may be updated in order to support new
-features in the latest Android platform.</td>
-</tr>
-<tr>
-<td colspan="3"><code>platforms/</code></td>
-<td>Contains a set of Android platform versions that you can develop
-applications against, each in a separate directory.  </td>
-</tr>
-<tr>
-<td style="width:2em;"></td>
-<td colspan="2"><code><em>&lt;platform&gt;</em>/</code></td>
-<td>Platform version directory, for example "android-11". All platform version directories contain
-a similar set of files and subdirectory structure. Each platform directory also includes the
-Android library (<code>android.jar</code>) that is used to compile applications against the
-platform version.</td>
-</tr>
-<tr>
-<td colspan="3"><code>samples/</code></td>
-<td>Sample code and apps that are specific to platform version.</td>
-</tr>
-<tr>
-<td colspan="3"><code>tools/</code></td>
-<td>Contains the set of development and profiling tools that are platform-independent, such
-as the emulator, the Android SDK Manager, the AVD Manager, <code>ddms</code>,
-<code>hierarchyviewer</code>
-and more. The tools in this directory may be updated at any time using the Android SDK
-Manager and are independent of platform releases.</td>
-</tr>
-<tr>
-<td colspan="3"><code>SDK Readme.txt</code></td>
-<td>A file that explains how to perform the initial setup of your SDK,
-including how to launch the Android SDK Manager tool on all
-platforms.</td>
-</tr>
-<tr>
-<td colspan="3"><code>SDK Manager.exe</code></td>
-<td>Windows SDK only. A shortcut that launches the Android SDK
-Manager tool, which you use to add packages to your SDK.</td>
-</tr>
-<!--<tr>
-<td colspan="3"><code>documentation.html</code></td>
-<td>A file that loads the entry page for the local Android SDK
-documentation.</td>
-</tr>-->
-
-</table>
-
-
-<p>Optionally, you might want to add the location of the SDK's <code>tools/</code> and
-<code>platform-tools</code> to your <code>PATH</code> environment variable, to provide easy
-access to the tools.</p>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-        How to update your PATH</a>
-  <div class="toggleme">
-
-<p>Adding both <code>tools/</code> and <code>platform-tools/</code> to your PATH lets you run
-command line <a href="{@docRoot}guide/developing/tools/index.html">tools</a> without needing to
-supply the full path to the tool directories. Depending on your operating system, you can
-include these directories in your PATH in the following way:</p>
-
-<ul>
-
-  <li>On Windows, right-click on My Computer, and select Properties.
-  Under the Advanced tab, hit the Environment Variables button, and in the
-  dialog that comes up, double-click on Path (under System Variables). Add the full path to the
-  <code>tools/</code> and <code>platform-tools/</code> directories to the path. </li>
-
-  <li>On Linux, edit your <code>~/.bash_profile</code> or <code>~/.bashrc</code> file. Look
-  for a line that sets the PATH environment variable and add the
-  full path to the <code>tools/</code> and <code>platform-tools/</code> directories to it. If you
-  don't see a line setting the path, you can add one:
-  <pre>export PATH=${PATH}:&lt;sdk&gt;/tools:&lt;sdk&gt;/platform-tools</pre>
-  </li>
-
-  <li>On a Mac OS X, look in your home directory for <code>.bash_profile</code> and
-  proceed as for Linux. You can create the <code>.bash_profile</code> if
-  you don't already have one. </li>
-</ul>
-
-</div><!-- end toggleme -->
-</div><!-- end toggleable -->
-
-
-<h2 id="NextSteps">Next Steps</h2>
-<p>Once you have completed installation, you are ready to
-begin developing applications. Here are a few ways you can get started: </p>
-
-<p><strong>Set up the Hello World application</strong></p>
-<ul>
-  <li>If you have just installed the SDK for the first time, go to the <a
-  href="{@docRoot}resources/tutorials/hello-world.html">Hello
-  World tutorial</a>. The tutorial takes you step-by-step through the process
-  of setting up your first Android project, including setting up an Android
-  Virtual Device (AVD) on which to run the application.
-</li>
-</ul>
-
-<p class="note">Following the Hello World tutorial is an essential
-first step in getting started with Android development. </p>
-
-<p><strong>Learn about Android</strong></p>
-<ul>
-  <li>Take a look at the <a href="{@docRoot}guide/index.html">Dev
-  Guide</a> and the types of information it provides.</li>
-  <li>Read an introduction to Android as a platform in <a
-  href="{@docRoot}guide/basics/what-is-android.html">What is
-  Android?</a></li>
-  <li>Learn about the Android framework and how applications run on it in
-  <a href="{@docRoot}guide/topics/fundamentals.html">Application
-  Fundamentals</a>.</li>
-  <li>Take a look at the Android framework API specification in the <a
-  href="{@docRoot}reference/packages.html">Reference</a> tab.</li>
-</ul>
-
-<p><strong>Explore the development tools</strong></p>
-<ul>
-  <li>Get an overview of the <a
-  href="{@docRoot}guide/developing/tools/index.html">development
-  tools</a> that are available to you.</li>
-  <li>Read the <a href="{@docRoot}guide/developing/index.html">Introduction</a> to Android
-application development.
-  </li>
-  <li>Read <a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a> to learn
-how to set up an Android-powered device so you can run and test your application.</li>
-</ul>
-
-<p><strong>Follow the Notepad tutorial</strong></p>
-
-<ul>
-  <li>The <a href="{@docRoot}resources/tutorials/notepad/index.html">
-  Notepad Tutorial</a> shows you how to build a full Android application
-  and provides  helpful commentary on the Android system and API. The
-  Notepad tutorial helps you bring together the important design
-  and architectural concepts in a moderately complex application.
-  </li>
-</ul>
-<p class="note">Following the Notepad tutorial is an excellent
-second step in getting started with Android development. </p>
-
-<p><strong>Explore some code</strong></p>
-
-<ul>
-  <li>The Android SDK includes sample code and applications for each platform
-version. You can browse the samples in the <a
-href="{@docRoot}resources/index.html">Resources</a> tab or download them
-into your SDK using the Android SDK Manager. Once you've downloaded the
-samples, you'll find them in
-<code><em>&lt;sdk&gt;</em>/samples/<em>&lt;platform&gt;/</em></code>. </li>
-</ul>
-
-<p><strong>Visit the Android developer groups</strong></p>
-<ul>
-  <li>Take a look at the <a
-  href="{@docRoot}resources/community-groups.html">Community</a> pages to see a list of
-  Android developers groups. In particular, you might want to look at the
-  <a href="http://groups.google.com/group/android-developers">Android
-  Developers</a> group to get a sense for what the Android developer
-  community is like.</li>
-</ul>
-
-<h2 id="troubleshooting">Troubleshooting</h2>
-
-<h3>Ubuntu Linux Notes</h3>
-
-<ul>
-  <li>If you need help installing and configuring Java on your
-    development machine, you might find these resources helpful:
-    <ul>
-      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li>
-      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation</a></li>
-    </ul>
-  </li>
-  <li>Here are the steps to install Java and Eclipse, prior to installing
-  the Android SDK and ADT Plugin.
-    <ol>
-      <li>If you are running a 64-bit distribution on your development
-      machine, you need to install the <code>ia32-libs</code> package using
-      <code>apt-get:</code>:
-      <pre>apt-get install ia32-libs</pre>
-      </li>
-      <li>Next, install Java: <pre>apt-get install sun-java6-jdk</pre></li>
-      <li>The Ubuntu package manager does not currently offer an Eclipse 3.3
-      version for download, so we recommend that you download Eclipse from
-      eclipse.org (<a
-      href="http://www.eclipse.org/downloads/">http://www.eclipse.org/
-      downloads/</a>). A Java or RCP version of Eclipse is recommended.</li>
-      <li>Follow the steps given in previous sections to install the SDK
-      and the ADT plugin. </li>
-    </ol>
-  </li>
-</ul>
-
-<h3>Other Linux Notes</h3>
-
-<ul>
-  <li>If JDK is already installed on your development computer, please
-  take a moment to make sure that it meets the version requirements listed
-  in the <a href="requirements.html">System Requirements</a>.
-  In particular, note that some Linux distributions may include JDK 1.4 or Gnu
-  Compiler for Java, both of which are not supported for Android development.</li>
-</ul>
diff --git a/docs/html/sdk/installing/adding-packages.jd b/docs/html/sdk/installing/adding-packages.jd
new file mode 100644
index 0000000..7765343
--- /dev/null
+++ b/docs/html/sdk/installing/adding-packages.jd
@@ -0,0 +1,78 @@
+page.title=Adding Platforms and Packages
+walkthru=1
+
+@jd:body
+
+
+<p>The Android SDK separates different parts of the SDK into separately downloadable packages. The
+SDK starter package that you've installed includes only the SDK Tools. To develop an Android app,
+you also need to download at least one Android platform and the latest SDK Platform-tools.</p>
+
+<p>You can update and install SDK packages at any time using the Android SDK Manager.</p>
+
+<p>If you've used the Windows installer to install the SDK tools, you should already have the
+Android SDK Manager open. Otherwise, you can launch the Android SDK Manager in one of the following
+ways:</p>
+<ul>
+  <li>On Windows, double-click the <code>SDK Manager.exe</code> file at the root of the Android
+SDK directory.</li>
+  <li>On Mac or Linux, open a terminal and navigate to the <code>tools/</code> directory in the
+Android SDK, then execute <code>android sdk</code>.</li>
+</ul>
+
+<p>When you open the Android SDK Manager, it automatically selects a set of recommended packages.
+Simply click <strong>Install</strong> to install the recommended packages. The Android SDK Manager
+installs the selected packages into
+your Android SDK environment. The following sections describe some of the available SDK
+packages and more about which ones we recommend you install.</p>
+
+<p>Once you have installed your packages, continue to the next page.</p>
+
+<img src="/images/sdk_manager_packages.png" alt="" />
+<p class="img-caption"><strong>Figure 1.</strong> The Android SDK Manager shows the
+SDK packages that are available, already installed, or for which an update is available.</p>
+
+
+
+
+<h2 id="Recommended">Recommended Packages</h2>
+
+<p>Here's an outlines of the packages required and those we recommend you use:
+</p>
+
+<dl>
+  <dt>SDK Tools</dt>
+  <dd><strong>Required.</strong> Your new SDK installation already has the latest version. Make sure
+you keep this up to date.</dd>
+  <dt>SDK Platform-tools</dt>
+  <dd><strong>Required.</strong> You must install this package when you install the SDK for
+the first time.</dd>
+  <dt>SDK Platform</dt>
+  <dd><strong>Required.</strong>You need to download <strong
+style="color:red">at least one platform</strong> into your environment so you're
+able to compile your application. In order to provide the best user experience on the latest
+devices, we recommend that you use the latest platform version as your build target. You'll
+still be able to run your app on older versions, but you must build against the latest version
+in order to use new features when running on devices with the latest version of Android.</dd>
+  <dt>System Image</dt>
+  <dd>Recommended. Although you might have one or more Android-powered devices on which to test
+ your app, it's unlikely you have a device for every version of Android your app supports. It's
+a good practice to download a system image for each version of Android you support and use them
+to test your app on the Android emulator.</dd>
+  <dt>SDK Samples</dt>
+  <dd>Recommended. The samples give you source code that you can use to learn about
+Android, load as a project and run, or reuse in your own app. Note that multiple
+samples packages are available &mdash; one for each Android platform version. When
+you are choosing a samples package to download, select the one whose API Level
+matches the API Level of the Android platform that you plan to use.</dd>
+  <dt>Android Support</dt>
+  <dd>Recommended. The APIs available in this static library allow you to use a variety of new
+framework features (including some not available in even the latest version) on devices running
+a platform version as old as Android 1.6. For more information, read <a
+href="{@docRoot}tools/extras/support-library.html">Support Library</a>.</dd>
+</dl>
+
+
+<p class="note"><strong>Tip:</strong> For easy access to the SDK tools from a command line, add the
+location of the SDK's <code>tools/</code> and
+<code>platform-tools</code> to your <code>PATH</code> environment variable.</p>
diff --git a/docs/html/sdk/installing/index.jd b/docs/html/sdk/installing/index.jd
new file mode 100644
index 0000000..2ae6bed
--- /dev/null
+++ b/docs/html/sdk/installing/index.jd
@@ -0,0 +1,133 @@
+page.title=Installing the SDK
+walkthru=1
+
+@jd:body
+
+
+<p>You should have already downloaded the <a href="{@docRoot}sdk/index.html">Android SDK</a>. Now
+you need to set up your development environment.</p>
+
+<p>The SDK you've downloaded is not the complete SDK environment. It includes only the core SDK tools, which you can
+use to download the rest of the SDK packages (such as the latest system image).</p>
+
+
+<div id="win" class="docs" style="display:none">
+  
+<h3>Getting started on Windows</h3>
+<p>Your download package is an executable file that starts an installer. The installer checks your machine
+  for required tools, such as the proper Java SE Development Kit (JDK) and installs it if necessary.
+  The installer then saves the Android SDK Tools into a default location (or you can specify the location).</p>
+
+<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
+refer to the SDK directory later, when setting up the ADT plugin and when using
+the SDK tools from the command line.</p>
+
+<p>Once the tools are installed, the installer offers to start the Android SDK Manager. Start it and
+continue with the installation guide by clicking the
+<strong>Next</strong> link on the right.</p>
+
+</div>
+
+  
+
+<div id="mac" class="docs" style="display:none">
+  
+<h3>Getting started on Mac</h3>
+
+<p>Your download package is {@code .zip}.
+  Unpack it to a safe location on your machine. By default, the SDK files are unpacked
+into a directory named <code>android-sdk-mac_x86</code>.</p>
+
+<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
+refer to the SDK directory later, when setting up the ADT plugin and when using
+the SDK tools from the command line.</p>
+
+<p>Now continue with the installation guide by clicking the
+<strong>Next</strong> link on the right.</p>
+
+</div>
+
+
+
+
+<div id="linux" class="docs" style="display:none">
+  
+<h3>Getting started on Linux</h3>
+
+<p>Your download package is a {@code .tgz}.
+  Unpack it to a safe location on your machine. By default, the SDK files are unpacked
+into a directory named <code>android-sdk-linux_x86</code>.</p>
+
+<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
+refer to the SDK directory later, when setting up the ADT plugin and when using
+the SDK tools from the command line.</p>
+
+<p>Now continue with the installation guide by clicking the
+<strong>Next</strong> link on the right.</p>
+
+
+<h4 id="Troubleshooting">Troubleshooting Ubuntu</h4>
+
+<ul>
+  <li>If you need help installing and configuring Java on your
+    development machine, you might find these resources helpful:
+    <ul>
+      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li>
+      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation</a></li>
+    </ul>
+  </li>
+  <li>Here are the steps to install Java and Eclipse, prior to installing
+  the Android SDK and ADT Plugin.
+    <ol>
+      <li>If you are running a 64-bit distribution on your development
+      machine, you need to install the <code>ia32-libs</code> package using
+      <code>apt-get:</code>:
+      <pre>apt-get install ia32-libs</pre>
+      </li>
+      <li>Next, install Java: <pre>apt-get install sun-java6-jdk</pre></li>
+      <li>The Ubuntu package manager does not currently offer an Eclipse 3.3
+      version for download, so we recommend that you download Eclipse from
+      eclipse.org (<a
+      href="http://www.eclipse.org/downloads/">http://www.eclipse.org/
+      downloads/</a>). A Java or RCP version of Eclipse is recommended.</li>
+      <li>Follow the steps given in previous sections to install the SDK
+      and the ADT plugin. </li>
+    </ol>
+  </li>
+</ul>
+
+</div>
+
+<p><a href='' onclick='showAll();return false;'>Other platforms</a></p>
+
+<script>
+  var $osDocs;
+  if (navigator.appVersion.indexOf("Win")!=-1) {
+    $osDocs = $('#win');
+  } else if (navigator.appVersion.indexOf("Mac")!=-1) {
+    $osDocs = $('#mac');
+  } else if (navigator.appVersion.indexOf("Linux")!=-1) {
+    $osDocs = $('#linux');
+  }
+
+  if ($osDocs.length) {
+    // reveal only the docs for this OS
+    $osDocs.show();
+  } else {
+    // not running a compatible OS, so just show all the docs
+    $('.docs').show();
+  }
+  
+  function showAll() {
+    $('.docs').each(function() {
+      if (!$(this).is(':visible')) {
+        console.log('show')
+        $(this).show();
+      } else {
+        console.log('hide')
+        $(this).hide();
+        $osDocs.show();
+      }
+    });
+  }
+</script>
diff --git a/docs/html/sdk/installing/installing-adt.jd b/docs/html/sdk/installing/installing-adt.jd
new file mode 100644
index 0000000..2925272
--- /dev/null
+++ b/docs/html/sdk/installing/installing-adt.jd
@@ -0,0 +1,206 @@
+page.title=Installing the Eclipse Plugin
+walkthru=1
+adt.zip.version=18.0.0
+adt.zip.download=ADT-18.0.0.zip
+adt.zip.bytes=12834793
+adt.zip.checksum=b446fa157ed97af79d1e21629201efbb
+
+@jd:body
+
+
+
+<p>Android offers a custom plugin for the Eclipse IDE, called Android
+Development Tools (ADT). This plugin is designed to give you a powerful, integrated
+environment in which to develop Android apps. It extends the capabilites
+of Eclipse to let you quickly set up new Android projects, build an app
+UI, debug your app, and export signed (or unsigned) app packages (APKs) for distribution.
+</p>
+
+<p>If you will be developing in Eclipse with the ADT Plugin, first make sure that you have a
+suitable version of Eclipse
+installed on your computer as described by the 
+<a href="{@docRoot}tools/sdk/index.html#Requirements">system requirements</a>.</p>
+
+<p>If you need to install Eclipse, you can download it from <a href=
+"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>.
+We recommend the "Eclipse Classic" version. Otherwise, you should use a Java or
+RCP version of Eclipse.</p>
+
+
+<p class="note"><strong>Note:</strong> If you prefer to work in a different IDE, you do not need to
+install Eclipse or ADT. Instead, you can directly use the SDK tools to build and
+debug your application. So if you're not using Eclipse, continue to the next page by clicking
+the <strong>Next</strong> link on the right.</p>
+
+
+
+<h2 id="Download">Download the ADT Plugin</h2>
+
+
+<ol>
+    <li>Start Eclipse, then select <strong>Help</strong> &gt; <strong>Install New
+Software...</strong>.</li>
+    <li>Click <strong>Add</strong>, in the top-right corner.</li>
+    <li>In the Add Repository dialog that appears, enter "ADT Plugin" for the <em>Name</em> and the
+following URL for the <em>Location</em>:
+      <pre>https://dl-ssl.google.com/android/eclipse/</pre>
+    </li>
+    <li>Click <strong>OK</strong>
+      <p>Note: If you have trouble acquiring the plugin, try using "http" in the Location URL,
+instead of "https" (https is preferred for security reasons).</p></li>
+    <li>In the Available Software dialog, select the checkbox next to Developer Tools and click
+<strong>Next</strong>.</li>
+    <li>In the next window, you'll see a list of the tools to be downloaded. Click
+<strong>Next</strong>. </li>
+    <li>Read and accept the license agreements, then click <strong>Finish</strong>.
+      <p>Note: If you get a security warning saying that the authenticity or validity of
+the software can't be established, click <strong>OK</strong>.</p></li>
+    <li>When the installation completes, restart Eclipse. </li>
+</ol>
+
+
+
+
+<h2 id="Configure">Configure the ADT Plugin</h2>
+
+<p>After you've installed ADT and restarted Eclipse, you
+  must specify the location of your Android SDK directory:</p>
+
+<ol>
+    <li>Select <strong>Window</strong> &gt; <strong>Preferences...</strong> to open the Preferences
+        panel (on Mac OS X, select <strong>Eclipse</strong> &gt; <strong>Preferences</strong>).</li>
+    <li>Select <strong>Android</strong> from the left panel.</li>
+      <p>You may see a dialog asking whether you want to send usage statistics to Google. If so,
+make your choice and click <strong>Proceed</strong>.</p>
+    <li>For the <em>SDK Location</em> in the main panel, click <strong>Browse...</strong> and
+        locate your downloaded Android SDK directory (such as <code>android-sdk-windows</code>).</li>
+    <li>Click <strong>Apply</strong>, then <strong>OK</strong>.</li>
+</ol>
+
+
+<p>If you haven't encountered any errors, you're done setting up ADT
+  and can continue to the next step of the SDK installation.</p>
+
+
+
+
+<h2 id="Updating">Updating the ADT Plugin</h2>
+
+<p>From time to time, a new revision of the ADT Plugin becomes available, with
+new features and bug fixes. Generally, when a new revision of ADT is available,
+you should update to it as soon as convenient. </p>
+
+<p>In some cases, a new revision of ADT will have a dependency on a specific
+revision of the Android SDK Tools. If such dependencies exist, you will need to
+update the SDK Tools package of the SDK after installing the new revision of
+ADT. To update the SDK Tools package, use the Android SDK Manager, as
+described in <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+
+<p>To learn about new features of each ADT revision and also any dependencies on
+the SDK Tools, see the listings in the <a href="#notes">Revisions</a>
+section. To determine the version currently installed, open the
+Eclipse Installed Software window using <strong>Help</strong>
+&gt; <strong>Software Updates</strong> and refer to the version listed for
+"Android Development Tools".</p>
+
+<p>Follow the steps below to check whether an update is available and, if so,
+to install it. </p>
+
+<ol>
+    <li>Select <strong>Help</strong> &gt; <strong>Check for Updates</strong>.
+      <p>If there are no updates available, a dialog will say so and you're done.</p></li>
+    <li>If there are updates available, select Android DDMS, Android Development Tools,
+      and Android Hierarchy Viewer, then click <strong>Next</strong>.</li>
+    <li>In the Update Details dialog, click <strong>Next</strong>.</li>
+    <li>Read and accept the license agreement and then click <strong>Finish</strong>.
+      This will download and install the latest version of Android DDMS and
+      Android Development Tools.</li>
+    <li>Restart Eclipse.</li>
+</ol>
+
+
+<p>If you encounter problems during the update, remove the existing ADT plugin from Eclipse, then
+perform a fresh installation, using the instructions for <a href="#installing">Installing the ADT
+Plugin</a>.</p>
+
+
+
+<h2 id="Troubleshooting">Troubleshooting</h2>
+
+<p> If you are having trouble downloading the ADT plugin after following the
+steps above, here are some suggestions: </p>
+
+<ul>
+  <li>If Eclipse can not find the remote update site containing the ADT plugin,
+try changing the remote site URL to use http, rather than https. That is, set
+the Location for the remote site to:
+<pre>http://dl-ssl.google.com/android/eclipse/</pre></li>
+<li>If you are behind a firewall (such as a corporate firewall), make sure that
+you have properly configured your proxy settings in Eclipse. In Eclipse,
+you can configure proxy information from the main Eclipse menu in
+<strong>Window</strong> (on Mac OS X, <strong>Eclipse</strong>) &gt;
+<strong>Preferences</strong> &gt; <strong>General</strong> &gt; <strong>Network
+Connections</strong>.</li>
+</ul>
+
+<p> If you are still unable to use Eclipse to download the ADT plugin as a
+remote update site, you can download the ADT zip file to your local machine and
+manually install it:</p>
+
+<ol>
+  <li>Download the current ADT Plugin zip file from the table below (do not unpack it).
+
+  <table class="download">
+    <tr>
+      <th>Name</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>ADT {@adtZipVersion}</td>
+    <td>
+      <a href="http://dl.google.com/android/{@adtZipDownload}">{@adtZipDownload}</a>
+    </td>
+    <td>{@adtZipBytes} bytes</td>
+    <td>{@adtZipChecksum}</td>
+  </tr>
+</table>
+</li>
+
+</li>
+  <li>Follow steps 1 and 2 in the <a href="#installing">default install
+      instructions</a> (above).</li>
+  <li>In the Add Site dialog, click <strong>Archive</strong>.</li>
+  <li>Browse and select the downloaded zip file.</li>
+  <li>Enter a name for the local update site (e.g.,
+      "Android Plugin") in the "Name" field.</li>
+  <li>Click <strong>OK</strong>.
+  <li>Follow the remaining procedures as listed for
+      <a href="#installing">default installation</a> above,
+      starting from step 4.</li>
+</ol>
+
+<p>To update your plugin once you've installed using the zip file, you will have
+to follow these steps again instead of the default update instructions.</p>
+
+<h4>Other install errors</h4>
+
+<p>Note that there are features of ADT that require some optional
+Eclipse packages (for example, WST). If you encounter an error when
+installing ADT, your Eclipse installion might not include these packages.
+For information about how to quickly add the necessary packages to your
+Eclipse installation, see the troubleshooting topic
+<a href="{@docRoot}resources/faq/troubleshooting.html#installeclipsecomponents">ADT
+Installation Error: "requires plug-in org.eclipse.wst.sse.ui"</a>.</p>
+
+<h4>For Linux users</h4>
+<p>If you encounter this error when installing the ADT Plugin for Eclipse:
+<pre>
+An error occurred during provisioning.
+Cannot connect to keystore.
+JKS</pre>
+<p>
+...then your development machine lacks a suitable Java VM. Installing Sun
+Java 6 will resolve this issue and you can then reinstall the ADT
+Plugin.</p>
diff --git a/docs/html/sdk/installing/next.jd b/docs/html/sdk/installing/next.jd
new file mode 100644
index 0000000..b1da7c6
--- /dev/null
+++ b/docs/html/sdk/installing/next.jd
@@ -0,0 +1,52 @@
+page.title=Next Steps
+walkthru=1
+
+@jd:body
+
+
+<p>Now that you've installed the Android SDK, here are are a few ways to learn Android
+and start developing: </p>
+
+<h3>Start coding</h3>
+<ul>
+  <li>Follow the training class for <a
+href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>.
+    <p>This class is an essential first step for new Android developers.</p>
+    <p>It gives you step by step instructions for building a simple app. You’ll learn how to
+create an Android project and run a debuggable version of the app. You'll also learn some
+fundamentals of Android app design, including how to build a simple user interface and handle user
+input.</p>
+</li>
+</ul>
+
+
+<h3>Learn how to design your app</h3>
+<ul>
+  <li>Learn the best practices for Android design and user experience by reading the Android <a
+href="{@docRoot}design/index.html">Design</a> guidelines.</li>
+</ul>
+
+
+<h3>Read up on the API framework</h3>
+<ul>
+  <li>Start reading about fundamental framework topics in the collection of <a
+href="{@docRoot}guide/components/index.html">API Guides</a>.</li>
+  <li>Browse the API specifications in the <a
+  href="{@docRoot}reference/packages.html">Reference</a>.</li>
+</ul>
+
+
+<h3>Explore the development tools</h3>
+<ul>
+  <li>Learn about developing an app with the Android Developer Tools plugin for Eclipse
+    and other tools from the <a
+  href="{@docRoot}tools/workflow/index.html">Workflow</a>.</li>
+</ul>
+
+
+<h3>Explore some code</h3>
+
+<ul>
+  <li>Browse the sample apps available from the Android SDK Manager. You'll find them in
+<code><em>&lt;sdk&gt;</em>/samples/<em>&lt;platform-version&gt;/</em></code>. </li>
+</ul>
diff --git a/docs/html/sdk/ndk/index.jd b/docs/html/sdk/ndk/index.jd
deleted file mode 100644
index fddbcc7..0000000
--- a/docs/html/sdk/ndk/index.jd
+++ /dev/null
@@ -1,1055 +0,0 @@
-ndk=true
-
-ndk.win_download=android-ndk-r7c-windows.zip
-ndk.win_bytes=80361003
-ndk.win_checksum=e86184cdc4bf71d32fa9185fad8544e2
-
-ndk.mac_download=android-ndk-r7c-darwin-x86.tar.bz2
-ndk.mac_bytes=73836512
-ndk.mac_checksum=025f57feb5f32ed993a5fa7f5996477d
-
-ndk.linux_download=android-ndk-r7c-linux-x86.tar.bz2
-ndk.linux_bytes=63432410
-ndk.linux_checksum=0bc21b78823dcf6f86b988203626b1fe
-
-page.title=Android NDK
-
-@jd:body
-
-<h2 id="notes">Revisions</h2>
-
-<p>The sections below provide information and notes about successive releases of
-the NDK, as denoted by revision number. </p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", "{@docRoot}assets/images/triangle-opened.png");
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", "/assets/images/triangle-closed.png");
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-padding: .25em 1em;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable open">
-  <a href="#" onclick="return toggleDiv(this)"><img src=
-  "{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px">
-  Android NDK, Revision 7c</a> <em>(April 2012)</em>
-
-  <div class="toggleme">
-    <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
-additional fixes and improvements:</p>
-
-    <dl>
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
-  devices. The files provided with NDK r7b were not configured properly,
-  resulting in crashes on Tegra2-based devices and others when trying to use
-  certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
-        </ul>
-      </dd>
-
-      <dt>Important changes:</dt>
-
-      <dd>
-        <ul>
-          <li>Added support for custom output directories through the {@code NDK_OUT}
-  environment variable. When defined, this variable is used to store all
-  intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
-  also recognized by {@code ndk-gdb}. </li>
-          <li>Added support for building modules with hundreds or even thousands of source
-  files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
-            <p>This change forces the NDK build system to put most linker or archiver options
-  into list files, as a work-around for command-line length limitations.
-  See {@code docs/ANDROID-MK.html} for details.</p>
-          </li>
-        </ul>
-      </dd>
-
-      <dt>Other bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
-helper library. On certain devices, where cores are enabled dynamically by the system, the previous
-implementation would report the total number of <em>active</em> cores the first time the function
-was called, rather than the total number of <em>physically available</em> cores.</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)"><img src=
-  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
-  Android NDK, Revision 7b</a> <em>(February 2012)</em>
-
-  <div class="toggleme">
-    <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
-      improvements:</p>
-
-    <dl>
-      <dt>Important bug fixes:</dt>
-
-      <dd>
-        <ul>
-          <li>Updated {@code sys/atomics.h} to avoid correctness issues
-            on some multi-core ARM-based devices. Rebuild your unmodified sources with this
-            version of the NDK and this problem should be completely eliminated.
-            For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
-          <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
-            appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
-          <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
-            of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
-          <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
-            affected. The fixes include:
-            <ul>
-              <li>Removed an infinite loop / stack overflow bug that happened when trying
-                to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
-                your project path (e.g., in any sub-directory of it).</li>
-              <li>Fixed a problem where the auto-generated dependency files were ignored. This
-                meant that updating a header didn't trigger recompilation of sources that included
-                it.</li>
-              <li>Fixed a problem where special characters in files or paths, other than spaces and
-                quotes, were not correctly handled.</li>
-            </ul>
-          </li>
-          <li>Fixed the standalone toolchain to generate proper binaries when using
-            {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
-            should use {@code -lgnustl_shared} if you want to link against the shared library
-            version or {@code -lstdc++} for the static version.
-
-            <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
-          </li>
-          <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
-            {@code libsupc++.a} even though the file was at the right location.</li>
-          <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
-            {@code APP_STL}.</li>
-        </ul>
-      </dd>
-    </dl>
-
-    <dl>
-      <dt>Other changes:</dt>
-
-      <dd>
-        <ul>
-          <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
-            no longer forcibly enable exceptions and RTTI. This change results in smaller code.
-            <p>If you need these features, you must do one of the following:</p>
-            <ul>
-              <li>Enable exceptions and/or RTTI explicitly in your modules or
-                {@code Application.mk}. (recommended)</li>
-              <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
-                {@code 'rtti'} or both in your {@code Application.mk}. See
-                {@code docs/APPLICATION-MK.html} for more details.</li>
-            </ul>
-          </li>
-          <li>{@code ndk-gdb} now works properly when your application has private services
-            running in independent processes. It debugs the main application process, instead of the
-            first process listed by {@code ps}, which is usually a service process.</li>
-          <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
-            and always compile certain source files (but not all) to 32-bit instructions.</li>
-          <li>{@code stlport}: Refresh the sources to match the Android platform version. This
-            update fixes a few minor bugs:
-            <ul>
-               <li>Fixed instantiation of an incomplete type</li>
-               <li>Fixed minor "==" versus "=" typo</li>
-               <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
-               <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
-                 etc.</li>
-             </ul>
-             <p>For complete details, see the commit log.</p>
-          </li>
-          <li>{@code stlport}: Removed 5 unnecessary static initializers from the library.</li>
-          <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
-            armeabi instead. This change had no impact on correctness, but using the right
-            ABI should provide slightly better performance.</li>
-          <li>The {@code cpu-features} helper library was updated to report three optional
-            x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
-            {@code docs/CPU-FEATURES.html} for more details.</li>
-          <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
-            of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
-          <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
-            directory when invoked.</li>
-          <li>Cygwin: Added better automatic dependency detection. In the previous version, it
-            didn't work properly in the following cases:
-            <ul>
-              <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
-              <li>When using drive-less mounts, for example, when Cygwin would translate
-                {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
-            </ul>
-          </li>
-          <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
-            {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)"><img src=
-  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
-  Android NDK, Revision 7</a> <em>(November 2011)</em>
-
-  <div class="toggleme">
-    <p>This release of the NDK includes new features to support the Android 4.0 platform as well
-    as many other additions and improvements:</p>
-
-    <dl>
-      <dt>New features</dt>
-
-      <dd>
-        <ul>
-          <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
-          native features to the platform:
-
-            <ul>
-              <li>Added native multimedia API based on the Khronos Group OpenMAX AL™ 1.0.1
-              standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
-              <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
-              API level 14 to perform multimedia output directly from native code by using a new
-              Android-specific buffer queue interface. For more details, see
-              <code>docs/openmaxal/index.html</code> and <a href=
-              "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>
-
-              <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1™
-              standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
-              Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
-              <a href=
-              "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
-            </ul>
-          </li>
-
-          <li>Added CCache support. To speed up large rebuilds, define the
-          <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
-          your <code>ccache</code> binary). When declared, the NDK build system automatically
-          uses CCache when compiling any source file. For example:
-            <pre>
-export NDK_CCACHE=ccache
-</pre>
-          <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
-          so you must have it installed prior to using it. For more information about CCache, see
-          <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
-          </li>
-
-          <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
-          you want to build your NDK modules for all the ABIs supported by your given NDK
-          release. This means that either one of the following two lines in your
-          <code>Application.mk</code> are equivalent with this release:
-            <pre>
-APP_ABI := all
-APP_ABI := armeabi armeabi-v7a x86
-</pre>
-
-            <p>This also works if you define <code>APP_ABI</code> when calling
-            <code>ndk-build</code> from the command-line, which is a quick way to check that your
-            project builds for all supported ABIs without changing the project's
-            <code>Application.mk file</code>. For example:</p>
-            <pre>
-ndk-build APP_ABI=all
-</pre>
-          </li>
-
-          <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
-          allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
-          ensures that the final linking works correctly if you have prebuilt modules that depend
-          on these features. See <code>docs/ANDROID-MK.html</code> and
-          <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>
-
-          <li>Shortened paths to source and object files that are used in build commands. When
-          invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
-          object, and binary files that are passed to the build commands are significantly
-          shorter now, because they are passed relative to the current directory. This is useful
-          when building projects with a lot of source files, to avoid limits on the maximum
-          command line length supported by your host operating system. The behavior is unchanged
-          if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
-          you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
-        </ul>
-      </dd>
-
-      <dt>Experimental features</dt>
-
-      <dd>
-        You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
-        <code>ndk-build.cmd</code> script from the command line from your project path. The
-        script takes exactly the same arguments as the original <code>ndk-build</code> script.
-        The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
-        tools required by the build. You should not need to install anything else to get a
-        working build system.
-
-        <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
-        Windows, so you still need Cygwin to debug.</p>
-
-        <p>This feature is still experimental, so feel free to try it and report issues on the
-        <a href="http://b.android.com">public bug database</a> or <a href=
-        "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
-        shipped with the NDK succesfully compile with this feature.</p>
-      </dd>
-
-      <dt>Important bug fixes</dt>
-
-      <dd>
-        <ul>
-          <li>Imported shared libraries are now installed by default to the target installation
-          location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
-          your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
-          imports a module <code>bar</code>, then both <code>libfoo.so</code> and
-          <code>libbar.so</code> are copied to the install location. Previously, only
-          <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
-          <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
-          behavior is unchanged.</li>
-
-          <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
-          their MAIN intent filters.</li>
-
-          <li>Static library imports are now properly transitive. For example, if a top-level
-          module <code>foo</code> imports static library <code>bar</code> that imports static
-          library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
-          <code>libbar.a</code> and <code>libzoo.a</code>.</li>
-        </ul>
-      </dd>
-
-      <dt>Other changes</dt>
-
-      <dd>
-        <ul>
-          <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
-          9, not 8 for native activities.</li>
-
-          <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
-          supported stable API, starting from API level 9.</li>
-
-          <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
-          sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
-          which is the new location for the AOSP servers.</li>
-
-          <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
-          are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>
-
-          <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
-          to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
-          <code>docs/CPLUSPLUS-SUPPORT.html</code></li>
-
-          <li>Added support for RTTI in the STLport C++ runtimes (no support for
-          exceptions).</li>
-
-          <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
-          example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
-          declare the following:
-            <pre>
-LOCAL_CPP_EXTENSION := .cpp .cxx
-</pre>
-          </li>
-
-          <li>Removed many unwanted exported symbols from the link-time shared system libraries
-          provided by the NDK. This ensures that code generated with the standalone toolchain
-          doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
-          symbol that changes each time the toolchain used to build the platform is changed)</li>
-
-          <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
-          that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
-          because each extension must be probed at runtime by the client application.
-
-            <p>The extensions that are available depend on your actual device and GPU drivers,
-            not the platform version the device runs on. The header changes simply add new
-            constants and types to make it easier to use the extensions when they have been
-            probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
-            following list describes the newly supported extensions:</p>
-
-            <dl>
-              <dt>GLES 1.x</dt>
-
-              <dd>
-                <ul>
-                  <li><code>GL_OES_vertex_array_object</code></li>
-
-                  <li><code>GL_OES_EGL_image_external</code></li>
-
-                  <li><code>GL_APPLE_texture_2D_limited_npot</code></li>
-
-                  <li><code>GL_EXT_blend_minmax</code></li>
-
-                  <li><code>GL_EXT_discard_framebuffer</code></li>
-
-                  <li><code>GL_EXT_multi_draw_arrays</code></li>
-
-                  <li><code>GL_EXT_read_format_bgra</code></li>
-
-                  <li><code>GL_EXT_texture_filter_anisotropic</code></li>
-
-                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
-
-                  <li><code>GL_EXT_texture_lod_bias</code></li>
-
-                  <li><code>GL_IMG_read_format</code></li>
-
-                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
-
-                  <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>
-
-                  <li><code>GL_IMG_user_clip_plane</code></li>
-
-                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
-
-                  <li><code>GL_NV_fence</code></li>
-
-                  <li><code>GL_QCOM_driver_control</code></li>
-
-                  <li><code>GL_QCOM_extended_get</code></li>
-
-                  <li><code>GL_QCOM_extended_get2</code></li>
-
-                  <li><code>GL_QCOM_perfmon_global_mode</code></li>
-
-                  <li><code>GL_QCOM_writeonly_rendering</code></li>
-
-                  <li><code>GL_QCOM_tiled_rendering</code></li>
-                </ul>
-              </dd>
-
-              <dt>GLES 2.0</dt>
-
-              <dd>
-                <ul>
-                  <li><code>GL_OES_element_index_uint</code></li>
-
-                  <li><code>GL_OES_get_program_binary</code></li>
-
-                  <li><code>GL_OES_mapbuffer</code></li>
-
-                  <li><code>GL_OES_packed_depth_stencil</code></li>
-
-                  <li><code>GL_OES_texture_3D</code></li>
-
-                  <li><code>GL_OES_texture_float</code></li>
-
-                  <li><code>GL_OES_texture_float_linear</code></li>
-
-                  <li><code>GL_OES_texture_half_float_linear</code></li>
-
-                  <li><code>GL_OES_texture_npot</code></li>
-
-                  <li><code>GL_OES_vertex_array_object</code></li>
-
-                  <li><code>GL_OES_EGL_image_external</code></li>
-
-                  <li><code>GL_AMD_program_binary_Z400</code></li>
-
-                  <li><code>GL_EXT_blend_minmax</code></li>
-
-                  <li><code>GL_EXT_discard_framebuffer</code></li>
-
-                  <li><code>GL_EXT_multi_draw_arrays</code></li>
-
-                  <li><code>GL_EXT_read_format_bgra</code></li>
-
-                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
-
-                  <li><code>GL_EXT_texture_compression_dxt1</code></li>
-
-                  <li><code>GL_IMG_program_binary</code></li>
-
-                  <li><code>GL_IMG_read_format</code></li>
-
-                  <li><code>GL_IMG_shader_binary</code></li>
-
-                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
-
-                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
-
-                  <li><code>GL_NV_coverage_sample</code></li>
-
-                  <li><code>GL_NV_depth_nonlinear</code></li>
-
-                  <li><code>GL_QCOM_extended_get</code></li>
-
-                  <li><code>GL_QCOM_extended_get2</code></li>
-
-                  <li><code>GL_QCOM_writeonly_rendering</code></li>
-
-                  <li><code>GL_QCOM_tiled_rendering</code></li>
-                </ul>
-              </dd>
-
-              <dt>EGL</dt>
-
-              <dd>
-                <ul>
-                  <li><code>EGL_ANDROID_recordable</code></li>
-
-                  <li><code>EGL_NV_system_time</code></li>
-                </ul>
-              </dd>
-            </dl>
-          </li>
-        </ul>
-      </dd>
-    </dl>
-  </div>
-</div>
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)"><img src=
-  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
-  Android NDK, Revision 6b</a> <em>(August 2011)</em>
-
-   <div class="toggleme">
-      <p>This release of the NDK does not include any new features compared to r6. The r6b release
-      addresses the following issues in the r6 release:</p>
-      <dl>
-        <dt>Important bug fixes</dt>
-        <dd>
-          <ul>
-            <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
-            multi-architecture builds.</li>
-            <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
-            A bug in the packaging script placed them in the wrong location.</li>
-            <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
-            toolchain.</li>
-            <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
-            to copy the proper GNU libstdc++ binaries to the right location.</li>
-            <li>Fixed the standalone toolchain linker warnings about missing the definition and
-            size for the <code>__dso_handle</code> symbol (ARM only).</li>
-            <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
-            See the <a href="http://code.google.com/p/android/issues/detail?id=18540">bug</a> for
-            more information.</li>
-            <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
-            x86-specific systems when they are used with the x86 standalone toolchain.</li>
-          </ul>
-        </dd>
-      </dl>
-  </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)"><img src=
-  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
-  Android NDK, Revision 6</a> <em>(July 2011)</em>
-
-   <div class="toggleme">
-      <p>This release of the NDK includes support for the x86 ABI and other minor changes.
-      For detailed information describing the changes in this release, read the
-      <code>CHANGES.HTML</code> document included in the NDK package.
-      </p>
-      <dl>
-        <dt>General notes:</dt>
-        <dd>
-          <ul>
-            <li>Adds support for the x86 ABI, which allows you to generate machine code
-            that runs on compatible x86-based Android devices. Major features for x86
-            include x86-specific toolchains, system headers, libraries and
-            debugging support. For all of the details regarding x86 support,
-            see <code>docs/CPU-X86.html</code> in the NDK package.
-
-              <p>By default, code is generated for ARM-based devices, but you can add x86 to your
-              <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
-              for x86 platforms. For example, the following line instructs <code>ndk-build</code>
-              to build your code for three distinct ABIs:</p>
-
-              <pre>APP_ABI := armeabi armeabi-v7a x86</pre>
-
-              <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
-              your <code>Android.mk</code> files to build x86 machine code.</p>
-
-            </li>
-
-            <li>You can build a standalone x86 toolchain using the <code>--toolchain=x86-4.4.3</code>
-            option when calling <code>make-standalone-toolchain.sh</code>. See
-            <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
-            </li>
-            <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
-            <code>logcat</code> that are generated by native code. The tool translates
-            instruction addresses into a readable format that contains things such
-            as the function, source file, and line number corresponding to each stack frame.
-            For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
-            </li>
-          </ul>
-        </dd>
-        <dt>Other changes:</dt>
-        <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
-        removed from the NDK distribution.</dd>
-
-      </dl>
-    </div>
-  </div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)"><img src=
-  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
-  Android NDK, Revision 5c</a> <em>(June 2011)</em>
-
-  <div class="toggleme">
-    <p>This release of the NDK does not include any new features compared to r5b. The r5c release
-    addresses the following problems in the r5b release:</p>
-    <dl>
-      <dt>Important bug fixes:</dt>
-      <dd>
-        <ul>
-          <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
-          builds of debuggable projects.</li>
-
-          <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
-          correctly with the new toolchain and added documentation for this in
-          <code>docs/ANDROID-MK.html</code>.</li>
-
-          <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
-          platform releases older than API level 8 (Android 2.2).</li>
-
-          <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging Android 3.0
-          or newer devices.</li>
-
-          <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
-          9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
-          binary interface to the system is unchanged. The incorrect functions were missing a
-          <code>history_index</code> parameter, and the correct definitions are shown below:
-<pre>
-float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
-                                           size_t pointer_index,
-                                           size_t history_index);
-
-float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
-                                           size_t pointer_index,
-                                           size_t history_index);
-</pre>
-          </li>
-
-          <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
-          link time new functions that were added in that API level (for example,
-          <code>pthread_rwlock_init</code>).</li>
-
-        </ul>
-      </dd>
-
-      <dt>Minor improvements and fixes:</dt>
-      <dd>
-        <ul>
-          <li>Object files are now always linked in the order they appear in
-          <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
-          grouped by source extensions instead.</li>
-
-          <li>When <code>import-module</code> fails, it now prints the list of directories that
-          were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
-          used by the build system is correct.</li>
-
-          <li>When <code>import-module</code> succeeds, it now prints the directory where the
-          module was found to the log (visible with <code>NDK_LOG=1</code>).</li>
-
-          <li>Increased the build speed of debuggable applications when there is a very large number
-          of include directories in the project.</li>
-
-          <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
-          error messages.</li>
-
-          <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
-          <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>
-
-          <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
-          GNU Make.</li>
-
-          <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
-          true (typo in <code>build/core/build-binary.mk</code>).</li>
-
-          <li>Fixed a bug that prevented the compilation of </code>.s</code> assembly files
-          (<code>.S</code> files were okay).</li>
-        </ul>
-      </dd>
-  </div>
-</div>
-
-<div class="toggleable closed">
-    <a href="#"
-         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
-         class="toggle-img"
-         height="9px"
-         width="9px" /> Android NDK, Revision 5b</a> <em>(January 2011)</em>
-
-    <div class="toggleme">
-      <p>This release of the NDK does not include any new features compared to r5. The r5b release addresses the
-      following problems in the r5 release:
-      </p>
-      <ul>
-    <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
-    toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on Ubuntu 8.04 or higher. </li>
-    <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
-    The previous binary generated invalid thumb instruction sequences when
-    dealing with signed chars.</li>
-    <li>Adds missing documentation for the
-    "gnustl_static" value for APP_STL, that allows you to link against
-    a static library version of GNU libstdc++. </li>
-    <li>The following <code>ndk-build</code> issues are fixed:
-      <ul>
-        <li>A bug that created inconsistent dependency files when a
-        compilation error occured on Windows. This prevented a proper build after
-        the error was fixed in the source code.</li>
-        <li>A Cygwin-specific bug where using very short paths for
-        the Android NDK installation or the project path led to the
-        generation of invalid dependency files. This made incremental builds
-        impossible.</li>
-        <li>A typo that prevented the cpufeatures library from working correctly
-        with the new NDK toolchain.</li>
-        <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
-        from GNU Make for every source or object file, which caused problems
-        with very large source trees. In case this doesn't work properly, define <code>NDK_USE_CYGPATH=1</code> in your
-        environment to use <code>cygpath -m</code> again.</li>
-        <li>The Cygwin installation now notifies the user of invalid installation paths that contain spaces. Previously, an invalid path
-        would output an error that complained about an incorrect version of GNU Make, even if the right one was installed.
-      </ul>
-    </li>
-  <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from working properly when
-  it contained multiple directories separated with a colon. </li>
-  <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
-  generated machine code, instead of relying on the host tag, which
-  allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts now also support
-  using a 32-bit host toolchain.</li>
-  <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to <code>&lt;netinet/in.h&gt;</code>.</li>
-  <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and <code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
-  <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow compilation with <code>-std=c99</code>.</li>
-  </ul>
-  </div>
-  </div>
-
-<div class="toggleable closed">
-    <a href="#"
-         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
-         class="toggle-img"
-         height="9px"
-         width="9px" /> Android NDK, Revision 5</a> <em>(December 2010)</em>
-
-    <div class="toggleme">
-      <p>This release of the NDK includes many new APIs, most of which are introduced to
-         support the development of games and similar applications that make extensive use
-         of native code. Using the APIs, developers have direct native access to events, audio,
-         graphics and window management, assets, and storage. Developers can also implement the
-         Android application lifecycle in native code with help from the new
-         {@link android.app.NativeActivity} class. For detailed information describing the changes in this
-         release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK package.
-      </p>
-      <dl>
-        <dt>General notes:</dt>
-        <dd>
-          <ul>
-            <li>Adds support for native activities, which allows you to implement the
-            Android application lifecycle in native code.</li>
-
-            <li>Adds native support for the following:
-
-              <ul>
-
-                <li>Input subsystem (such as the keyboard and touch screen)</li>
-
-                <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>
-
-                <li>Event loop APIs to wait for things such as input and sensor events.</li>
-
-                <li>Window and surface subsystem</li>
-
-                <li>Audio APIs based on the OpenSL ES standard that support playback and recording
-                as well as control over platform audio effects</li>
-
-                <li>Access to assets packaged in an <code>.apk</code> file.</li>
-                
-              </ul>
-            </li>
-
-            <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can also now
-            be used as a standalone cross-compiler, for people who want to build their stuff with
-            <code>./configure &amp;&amp; make</code>. See
-            docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still provided,
-            but the 4.2.1 binaries were removed.</li>
-
-            <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and module
-            exports and imports to make sharing and reuse of third-party modules much easier
-            (docs/IMPORT-MODULE.html explains why).</li>
-
-            <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It can be used either
-            as a static or shared library (details and usage examples are in sources/android/stlport/README). Prebuilt
-            binaries for STLport (static or shared) and GNU libstdc++ (static only) are also provided if you choose to
-            compile against those libraries instead of the default C++ STL implementation. 
-            C++ Exceptions and RTTI are not supported in the default STL implementation. For more information, see
-            docs/CPLUSPLUS-SUPPORT.HTML.</li>
-
-            <li>Includes improvements to the <code>cpufeatures</code> helper library that improves reporting
-            of the CPU type (some devices previously reported ARMv7 CPU when the device really was an ARMv6). We
-            recommend developers that use this library to rebuild their applications then
-            upload to Google Play to benefit from the improvements.</li>
-
-            <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
-              services.</li>
-                
-            <li>Adds new sample applications, <code>native-plasma</code> and <code>native-activity</code>, 
-            to demonstrate how to write a native activity.</li>
-
-            <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a more
-              detailed list of changes.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-  <div class="toggleable closed">
-    <a href="#"
-         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
-         class="toggle-img"
-         height="9px"
-         width="9px" /> Android NDK, Revision 4b</a> <em>(June 2010)</em>
-
-    <div class="toggleme">
-      <dl>
-        <dt>NDK r4b notes:</dt>
-
-        <dd>
-          <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
-          you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
-          information describing the changes in this release, read the CHANGES.TXT document
-          included in the downloaded NDK package.</p>
-        </dd>
-      </dl>
-
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Provides a simplified build system through the new <code>ndk-build</code> build
-            command.</li>
-
-            <li>Adds support for easy native debugging of generated machine code on production
-            devices through the new <code>ndk-gdb</code> command.</li>
-
-            <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
-            <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
-            include these CPU instruction set extensions:
-
-              <ul>
-                <li>Thumb-2 instructions</li>
-
-                <li>VFP hardware FPU instructions (VFPv3-D16)</li>
-
-                <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
-                Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
-                others.</li>
-              </ul>
-            </li>
-
-            <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
-            app detect the host device's CPU features at runtime. Specifically, applications can
-            check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
-            code paths as needed.</li>
-
-            <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
-            <code>cpufeatures</code> library to check CPU features and then provide an optimized
-            code path using NEON instrinsics, if supported by the CPU.</li>
-
-            <li>Lets you generate machine code for either or both of the instruction sets supported
-            by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
-            same time and have everything stored to your application's final
-            <code>.apk</code>.</li>
-
-            <li>To ensure that your applications are available to users only if their devices are
-            capable of running them, Google Play now filters applications based on the
-            instruction set information included in your application &mdash; no action is needed on
-            your part to enable the filtering. Additionally, the Android system itself also checks
-            your application at install time and allows the installation to continue only if the
-            application provides a library that is compiled for the device's CPU architecture.</li>
-
-            <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
-            buffers of {@link android.graphics.Bitmap} objects from native code.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-  <div class="toggleable closed">
-    <a href="#"
-         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
-         class="toggle-img"
-         height="9px"
-         width="9px" /> Android NDK, Revision 3</a> <em>(March 2010)</em>
-
-    <div class="toggleme">
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Adds OpenGL ES 2.0 native library support.</li>
-
-            <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
-            OpenGL ES 2.0 vertex and fragment shaders.</li>
-
-            <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
-            should generate slightly more compact and efficient machine code than the previous one
-            (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
-            to build your machine code.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-  <div class="toggleable closed">
-    <a href="#"
-         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
-         class="toggle-img"
-         height="9px"
-         width="9px" /> Android NDK, Revision 2</a> <em>(September 2009)</em>
-
-    <div class="toggleme">
-      <p>Originally released as "Android 1.6 NDK, Release 1".</p>
-
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Adds OpenGL ES 1.1 native library support.</li>
-
-            <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
-            through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
-            android.opengl.GLSurfaceView} object.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-
-  <div class="toggleable closed">
-    <a href="#"
-         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
-         class="toggle-img"
-         height="9px"
-         width="9px" /> Android NDK, Revision 1</a> <em>(June 2009)</em>
-
-    <div class="toggleme">
-      <p>Originally released as "Android 1.5 NDK, Release 1".</p>
-
-      <dl>
-        <dt>General notes:</dt>
-
-        <dd>
-          <ul>
-            <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
-            instructions.</li>
-
-            <li>Includes system headers for stable native APIs, documentation, and sample
-            applications.</li>
-          </ul>
-        </dd>
-      </dl>
-    </div>
-  </div>
-  
-  <h2 id="installing">Installing the NDK</h2>
-  <p>Installing the NDK on your development computer is straightforward and involves extracting the
-  NDK from its download package.</p>
-
-  <p>Before you get started make sure that you have downloaded the latest <a href=
-  "{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications and environment as
-  needed. The NDK is compatible with older platform versions but not older versions of the SDK tools.
-  Also, take a moment to review the <a href="{@docRoot}sdk/ndk/overview.html#reqs">System and
-Software Requirements</a>
-  for the NDK, if you haven't already.</p>
-
-  <p>To install the NDK, follow these steps:</p>
-
-  <ol>
-    <li>From the table at the top of this page, select the NDK package that is appropriate for your
-    development computer and download the package.</li>
-
-    <li>Uncompress the NDK download package using tools available on your computer. When
-    uncompressed, the NDK files are contained in a directory called
-    <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
-    can move it to any location on your computer. This documentation refers to the NDK directory as
-    <code>&lt;ndk&gt;</code>.</li>
-  </ol>
-
-  <p>You are now ready to start working with the NDK.</p>
-
-  <h2 id="gettingstarted">Getting Started with the NDK</h2>
-
-  <p>Once you've installed the NDK successfully, take a few minutes to read the documentation
-  included in the NDK. You can find the documentation in the <code>&lt;ndk&gt;/docs/</code>
-  directory. In particular, please read the OVERVIEW.HTML document completely, so that you
-  understand the intent of the NDK and how to use it.</p>
-
-  <p>If you used a previous version of the NDK, take a moment to review the list of NDK changes in
-  the CHANGES.HTML document.</p>
-
-  <p>Here's the general outline of how you work with the NDK tools:</p>
-
-  <ol>
-    <li>Place your native sources under <code>&lt;project&gt;/jni/...</code></li>
-
-    <li>Create <code>&lt;project&gt;/jni/Android.mk</code> to describe your native sources to the
-    NDK build system</li>
-
-    <li>Optional: Create <code>&lt;project&gt;/jni/Application.mk</code>.</li>
-
-    <li>Build your native code by running the 'ndk-build' script from your project's directory. It
-    is located in the top-level NDK directory:
-      <pre class="no-pretty-print">cd &lt;project&gt;
-&lt;ndk&gt;/ndk-build
-</pre>
-
-      <p>The build tools copy the stripped, shared libraries needed by your application to the
-      proper location in the application's project directory.</p>
-    </li>
-
-    <li>Finally, compile your application using the SDK tools in the usual way. The SDK build tools
-    will package the shared libraries in the application's deployable <code>.apk</code> file.</li>
-  </ol>
-
-  <p>For complete information on all of the steps listed above, please see the documentation
-  included with the NDK package.</p>
-
-  <h2 id="samples">Sample Applications</h2>
-
-  <p>The NDK includes sample Android applications that illustrate how to use native code in your
-  Android applications. For more information, see <a href=
-  "{@docRoot}sdk/ndk/overview.html#samples">Sample Applications</a>.</p>
-
-  <h2 id="forum">Discussion Forum and Mailing List</h2>
-
-  <p>If you have questions about the NDK or would like to read or contribute to discussions about
-  it, please visit the <a href="http://groups.google.com/group/android-ndk">android-ndk</a> group
-  and mailing list.</p>
diff --git a/docs/html/sdk/ndk/overview.jd b/docs/html/sdk/ndk/overview.jd
deleted file mode 100644
index d2a9746..0000000
--- a/docs/html/sdk/ndk/overview.jd
+++ /dev/null
@@ -1,559 +0,0 @@
-page.title=What is the NDK?
-@jd:body
-
- <div id="qv-wrapper">
-    <div id="qv">
-      <h2>In this document</h2>
-
-      <ol>
-        <li><a href="#choosing">When to Develop in Native Code</a></li>
-        <li>
-          <a href="#contents">Contents of the NDK</a>
-          <ol>
-            <li><a href="#tools">Development tools</a></li>
-
-            <li><a href="#docs">Documentation</a></li>
-
-            <li><a href="#samples">Sample applications</a></li>
-          </ol>
-        </li>
-        <li><a href="#reqs">System and Software Requirements</a></li>
-      </ol>
-    </div>
-  </div>
-
-  <p>The Android NDK is a toolset that lets you embed components that make use of native code in
-  your Android applications.</p>
-
-  <p>Android applications run in the Dalvik virtual machine. The NDK allows you to implement parts
-  of your applications using native-code languages such as C and C++. This can provide benefits to
-  certain classes of applications, in the form of reuse of existing code and in some cases
-  increased speed.</p>
-
-  <p>The NDK provides:</p>
-
-  <ul>
-    <li>A set of tools and build files used to generate native code libraries from C and C++
-    sources</li>
-
-    <li>A way to embed the corresponding native libraries into an application package file
-    (<code>.apk</code>) that can be deployed on Android devices</li>
-
-    <li>A set of native system headers and libraries that will be supported in all future versions
-    of the Android platform, starting from Android 1.5. Applications that use native activities
-    must be run on Android 2.3 or later.</li>
-
-    <li>Documentation, samples, and tutorials</li>
-  </ul>
-
-  <p>The latest release of the NDK supports the following instruction sets:</p>
-
-  <ul>
-    <li>ARMv5TE (including Thumb-1 instructions)</li>
-
-    <li>ARMv7-A (including Thumb-2 and VFPv3-D16 instructions, with optional support for
-    NEON/VFPv3-D32 instructions)</li>
-
-    <li>x86 instructions (see CPU-ARCH-ABIS.HTML for more information)</li>
-  </ul>
-
-  <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
-  devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
-  difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
-  NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
-  default, but switching to ARMv7-A is as easy as adding a single line to the application's
-  <code>Application.mk</code> file, without needing to change anything else in the file. You can also build for
-  both architectures at the same time and have everything stored in the final <code>.apk</code>.
-  Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>
-
-  <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
-  (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
-  "#tools">Development Tools</a> section.</p>
-
-  <h2 id="choosing">When to Develop in Native Code</h2>
-
-  <p>The NDK will not benefit most applications. As a developer, you need to balance its benefits
-  against its drawbacks; notably, using native code does not result in an automatic performance
-  increase, but always increases application complexity. In general, you should only use native
-  code if it is essential to your application, not just because you prefer to program in C/C++.</p>
-
-  <p>Typical good candidates for the NDK are self-contained, CPU-intensive operations that don't
-  allocate much memory, such as signal processing, physics simulation, and so on. Simply re-coding
-  a method to run in C usually does not result in a large performance increase. When examining
-  whether or not you should develop in native code, think about your requirements and see if the
-  Android framework APIs provide the functionality that you need. The NDK can, however, can be an
-  effective way to reuse a large corpus of existing C/C++ code.</p>
-
-  <p>The Android framework provides two ways to use native code:</p>
-
-  <ul>
-    <li>Write your application using the Android framework and use JNI to access the APIs provided
-    by the Android NDK. This technique allows you to take advantage of the convenience of the
-    Android framework, but still allows you to write native code when necessary. You can install
-    applications that use native code through the JNI on devices that run Android 1.5 or
-    later.</li>
-
-    <li>
-      <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
-      code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a convenience class that notifies your
-      native code of any activity lifecycle callbacks (<code>onCreate()</code>, <code>onPause()</code>,
-      <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
-      these events when they occur. Applications that use native activities must be run on Android
-      2.3 (API Level 9) or later.</p>
-
-      <p>You cannot access features such as Services and Content Providers natively, so if you want
-      to use them or any other framework API, you can still write JNI code to do so.</p>
-    </li>
-  </ul>
-
-  <h2 id="contents">Contents of the NDK</h2>The NDK contains the APIs, documentation, and sample
-  applications that help you write your native code.
-
-  <h3 id="tools">Development tools</h3>
-
-  <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc..) that can generate
-  native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>
-
-  <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
-  in all later releases of the platform:</p>
-
-  <ul>
-    <li>libc (C library) headers</li>
-
-    <li>libm (math library) headers</li>
-
-    <li>JNI interface headers</li>
-
-    <li>libz (Zlib compression) headers</li>
-
-    <li>liblog (Android logging) header</li>
-
-    <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>
-
-    <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>
-
-    <li>A Minimal set of headers for C++ support</li>
-    
-    <li>OpenSL ES native audio libraries</li>
-    
-    <li>Android native application APIS</li>
-  </ul>
-
-  <p>The NDK also provides a build system that lets you work efficiently with your sources, without
-  having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
-  describe which sources to compile and which Android application will use them &mdash; the build
-  system compiles the sources and places the shared libraries directly in your application
-  project.</p>
-
-  <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
-  native system libraries in the Android platform are <em>not</em> stable and may change in future
-  platform versions. Your applications should <em>only</em> make use of the stable native system
-  libraries provided in this NDK.</p>
-
-  <h3 id="docs">Documentation</h3>
-
-  <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
-  how to use it to create shared libraries for your Android applications. In this release, the
-  documentation is provided only in the downloadable NDK package. You can find the documentation in
-  the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files:</p>
-
-  <ul>
-    <li>
-    INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
-    system</li>
-
-    <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>
-    
-    <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
-    sources you want to compile</li>
-    
-    <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
-    the native sources required by your Android application</li>    
-    <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>    
-    <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
-    them.</li>
-
-    <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
-    lets your application code detect the target device's CPU family and the optional features at
-    runtime.</li>
-
-    <li>CPU-ARM-NEON.HTML &mdash; a description of how to build with optional ARM NEON / VFPv3-D32
-    instructions.</li>
-
-    <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>
-
-    <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for it</li>
-    
-    <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>
-    
-    <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>
-    
-    <li>LICENSES.HTML  &mdash; information about the various open source licenses that govern the Android NDK</li>
- 
-    <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>
-    
-    <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>
-
-    <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>
-
-    <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>
-
-    <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
-    compiler (still in beta).</li>
-    
-    <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
-    aware of, if you are developing using the NDK.</li>
-
-    <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
-    NDK.</li>
-    
-  </ul>
-
-  <p>Additionally, the package includes detailed information about the "bionic" C library provided
-  with the Android platform that you should be aware of, if you are developing using the NDK. You
-  can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>
-
-  <ul>
-    <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
-    offers.</li>
-  </ul>
-
-  <h3 id="samples">Sample applications</h3>
-
-<p>The NDK includes sample applications that illustrate how to use native code in your Android
-  applications:</p>
-
-  <ul>
-    <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
-    method implemented in a shared library and then displays it in the application UI.</li>
-
-    <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
-    and calls a native method provided by the library. In this case, the method is implemented in a
-    static library imported by the shared library.</li>
-
-    <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
-    native OpenGL ES APIs, while managing activity lifecycle with a {@link
-    android.opengl.GLSurfaceView} object.</li>
-
-    <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
-    2.0 vertex and fragment shaders.</li>
-
-    <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
-    <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
-    if supported by the CPU. Specifically, the application implements two versions of a tiny
-    benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
-    support it.</li>
-
-    <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
-    pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
-    this to generate an old-school "plasma" effect.</li>
-
-    <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
-    native-app-glue static library to create a native activity</li>
-
-    <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
-    activity.</li>
-  </ul>
-
-  <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
-  and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
-  and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>
-
-  <p>You can build the shared libraries for the sample apps by going into
-  <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
-  The generated shared libraries will be located under
-  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
-  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>
-
-  <p>Next, build the sample Android applications that use the shared libraries:</p>
-
-  <ul>
-    <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
-    Android project for each sample, using the "Import from Existing Source" option and importing
-    the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
-    if necessary, and build/run the application in the emulator.</li>
-
-    <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
-    for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
-    Then set up an AVD, if necessary, build your project in the usual way, and run it in the
-    emulator.</li>    
-    
-  </ul>
-  
-  <p>For more information about developing with the Android SDK tools and what
-  you need to do to create, build, and run your applications, see
-  the <a href="{@docRoot}guide/developing/index.html">Overview</a>
-  section for developing on Android.</p>
-
-  <h4 id="hello-jni">Exploring the hello-jni Sample</h4>
-
-  <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
-  The HelloJni activity receives a string from a simple C function and displays it in a
-  TextView.</p>
-
-  <p>The main components of the sample include:</p>
-
-  <ul>
-    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
-    file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>
-
-    <li>A <code>jni/</code> directory that includes the implemented source file for the native code
-    as well as the Android.mk file</li>
-
-    <li>A <code>tests/</code> directory that contains unit test code.</li>
-  </ul>
-
-  <ol>
-    <li>Create a new project in Eclipse from the existing sample source or use the
-    <code>android</code> tool to update the project so it generates a build.xml file that you can
-    use to build the sample.
-
-      <ul>
-        <li>In Eclipse:
-
-          <ol type="a">
-            <li>Click <strong>File &gt; New Android Project...</strong></li>
-
-            <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
-            <li>Select any API level above Android 1.5.</li>
-
-            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
-            the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
-            <li>Click <strong>Finish</strong>.</li>
-          </ol>
-        </li>
-
-        <li>On the command line:
-
-          <ol type="a">
-            <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
-
-            <li>Run the following command to generate a build.xml file:
-              <pre class="no-pretty-print">android update project -p . -s</pre>
-            </li>
-          </ol>
-        </li>
-      </ul>
-    </li>
-
-    <li>Compile the native code using the <code>ndk-build</code> command.
-      <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/samples/hello-jni
-&lt;ndk_root&gt;/ndk-build
-</pre>
-    </li>
-
-    <li>Build and install the application as you would a normal Android application. If you are
-    using Eclipse, run the application to build and install it on a device. If you are using Ant,
-    run the following commands from the project directory:
-      <pre class="no-pretty-print">
-ant debug
-adb install bin/HelloJni-debug.apk
-</pre>
-    </li>
-  </ol>
-
-  <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
-  your device. You can explore the rest of the samples that are located in the
-  <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>
-
-  <h4 id="native-activity">Exploring the native-activity Sample Application</h4>
-
-  <p>The native-activity sample provided with the Android NDK demonstrates how to use the
-  android_native_app_glue static library. This static library makes creating a native activity
-  easier by providing you with an implementation that handles your callbacks in another thread, so
-  you do not have to worry about them blocking your main UI thread. The main parts of the sample
-  are described below:</p>
-
-  <ul>
-    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
-    file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
-    that the application is native and specifies the .so file of the native activity. See {@link
-    android.app.NativeActivity} for the source or see the
-    <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>
-
-    <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
-    <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
-    describes the native module to the build system also exists here.</li>
-  </ul>
-
-  <p>To build this sample application:</p>
-
-  <ol>
-    <li>Create a new project in Eclipse from the existing sample source or use the
-    <code>android</code> tool to update the project so it generates a build.xml file that you can
-    use to build the sample.
-
-      <ul>
-        <li>In Eclipse:
-
-          <ol type="a">
-            <li>Click <strong>File &gt; New Android Project...</strong></li>
-
-            <li>Select the <strong>Create project from existing source</strong> radio button.</li>
-
-            <li>Select any API level above Android 2.3.</li>
-
-            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
-            the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
-            <li>Click <strong>Finish</strong>.</li>
-          </ol>
-        </li>
-
-        <li>On the command line:
-
-          <ol type="a">
-            <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
-
-            <li>Run the following command to generate a build.xml file:
-              <pre class="no-pretty-print">
-android update project -p . -s
-</pre>
-            </li>
-          </ol>
-        </li>
-      </ul>
-    </li>
-
-    <li>Compile the native code using the <code>ndk-build</code> command.
-      <pre class="no-pretty-print">
-cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
-&lt;ndk_root&gt;/ndk-build
-</pre>
-    </li>
-
-    <li>Build and install the application as you would a normal Android application. If you are
-    using Eclipse, run the application to build and install it on a device. If you are using Ant,
-    run the following commands in the project directory, then run the application on the device:
-      <pre class="no-pretty-print">
-ant debug
-adb install bin/NativeActivity-debug.apk
-</pre>
-    </li>
-  </ol>
-
-
-  <h2 id="reqs">System and Software Requirements</h2>
-
-  <p>The sections below describe the system and software requirements for using the Android NDK, as
-  well as platform compatibility considerations that affect appplications using libraries produced
-  with the NDK.</p>
-
-  <h4>The Android SDK</h4>
-
-  <ul>
-    <li>A complete Android SDK installation (including all dependencies) is required.</li>
-
-    <li>Android 1.5 SDK or later version is required.</li>
-  </ul>
-
-  <h4>Supported operating systems</h4>
-
-  <ul>
-    <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>
-
-    <li>Mac OS X 10.4.8 or later (x86 only)</li>
-
-    <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
-later)</li>
-  </ul>
-
-  <h4>Required development tools</h4>
-
-  <ul>
-    <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
-    Make might work but have not been tested.</li>
-
-    <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>
-
-    <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
-    will <em>not</em> work with Cygwin 1.5 installations.</li>
-  </ul>
-
-  <h4>Android platform compatibility</h4>
-
-  <ul>
-    <li>The native libraries created by the Android NDK can only be used on devices running the
-    Android 1.5 platform version or later. This is due to toolchain and ABI related changes that
-    make the native libraries incompatible with 1.0 and 1.1 system images.</li>
-
-    <li>For this reason, you should use native libraries produced with the NDK in applications that
-    are deployable to devices running the Android 1.5 platform version or later.</li>
-
-    <li>To ensure compatibility, an application using a native library produced with the NDK
-    <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
-      &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
-      <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:
-      <pre style="margin:1em;">
-&lt;manifest&gt;
-  &lt;uses-sdk android:minSdkVersion="3" /&gt;
-  ...
-&lt;/manifest&gt;
-</pre>
-    </li>
-
-    <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
-    application containing the library can be deployed only to devices running the minimum platform
-    versions described in the table below. To ensure compatibility, make sure that your application
-    declares the proper <code>android:minSdkVersion</code> attribute value, as given in the
-    table.</li>
-
-    <li style="list-style: none; display: inline">
-      <table style="margin:1em;">
-        <tr>
-          <th>OpenGL ES Version Used</th>
-
-          <th>Compatible Android Platform(s)</th>
-
-          <th>Required uses-sdk Attribute</th>
-        </tr>
-
-        <tr>
-          <td>OpenGL ES 1.1</td>
-
-          <td>Android 1.6 and higher</td>
-
-          <td><code>android:minSdkVersion="4"</code></td>
-        </tr>
-
-        <tr>
-          <td>OpenGL ES 2.0</td>
-
-          <td>Android 2.0 and higher</td>
-
-          <td><code>android:minSdkVersion="5"</code></td>
-        </tr>
-      </table>
-
-      <p>For more information about API Level and its relationship to Android platform versions,
-      see <a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a>.</p>
-    </li>
-
-    <li>Additionally, an application using the OpenGL ES APIs should declare a
-    <code>&lt;uses-feature&gt;</code> element in its manifest, with an
-    <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
-    required by the application. This ensures that Google Play will show your application only
-    to users whose devices are capable of supporting your application. For example:
-      <pre style="margin:1em;">
-&lt;manifest&gt;
-<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
-     to run only on devices that support OpenGL ES 2.0 or higher. -->
-  &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
-  ...
-&lt;/manifest&gt;
-</pre>
-
-      <p>For more information, see the <a href=
-      "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
-      documentation.</p>
-    </li>
-
-    <li>If you use this NDK to create a native library that uses the API to access Android {@link
-    android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
-    containing the library can be deployed only to devices running Android 2.2 (API level 8) or
-    higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
-    android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
-  </ul>
diff --git a/docs/html/sdk/oem-usb.jd b/docs/html/sdk/oem-usb.jd
deleted file mode 100644
index 88d66dd..0000000
--- a/docs/html/sdk/oem-usb.jd
+++ /dev/null
@@ -1,324 +0,0 @@
-page.title=OEM USB Drivers
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-  <h2>In this document</h2>
-  <ol>
-    <li><a href="#InstallingDriver">Installing a USB Driver</a>
-      <ol>
-        <li><a href="#Win7">Windows 7</a></li>
-        <li><a href="#WinXp">Windows XP</a></li>
-        <li><a href="#WinVista">Windows Vista</a></li>
-      </ol>
-    </li>
-    <li><a href="#Drivers">OEM Drivers</a></li>
-  </ol>
-
-  <h2>See also</h2>
-  <ol>
-    <li><a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a></li>
-    <li><a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a></li>
-  </ol>
-</div>
-</div>
-
-<p>If you are developing on Windows and would like to connect an Android-powered device
-to test your applications, then you need to install the appropriate USB driver. This document
-provides links to the web sites for several original equipment manufacturers (OEMs),
-where you can download the appropriate USB driver for your device. However, this list is
-not exhaustive for all available Android-powered devices.</p>
-
-<p>If you're developing on Mac OS X or Linux, then you probably don't need to install a USB driver.
-To start developing with your device, read <a
-href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a>.</p>
-
-<p class="note"><strong>Note:</strong> If your device is one of the Android Developer Phones
-(ADP), a Nexus One, or a Nexus S, then you need
-the <a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a>, instead of an OEM driver. The Galaxy
-Nexus driver, however, is distributed by <a
-href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
-(listed as model SCH-I515).</p>
-
-
-<h2 id="InstallingDriver">Installing a USB Driver</h2>
-
-<p>First, find the appropriate driver for your device from the <a href="#Drivers">OEM drivers</a>
-table below.</p>
-
-<p>Once you've downloaded your USB driver, follow the instructions below to install or upgrade the
-driver, based on your version of Windows and whether you're installing for the first time
-or upgrading an existing driver.</p>
-
-<p class="note"><strong>Tip:</strong> When you finish the USB driver installation,
-see <a
-href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a> for
-other important information about using an Android-powered device for
-development.</p>
-
-<ol class="nolist">
-  <li><a href="#Win7">Windows 7</a></li>
-  <li><a href="#WinXp">Windows XP</a></li>
-  <li><a href="#WinVista">Windows Vista</a></li>
-</ol>
-
-
-<p class="caution"><strong>Caution:</strong>
-You may make changes to <code>android_winusb.inf</code> file found inside
-<code>usb_driver\</code> (for example, to add support for other devices),
-however, this will lead to security warnings when you install or upgrade the
-driver. Making any other changes to the driver files may break the installation
-process.</p>
-
-
-<h3 id="Win7">Windows 7</h3>
-
-
-<p>To install the Android USB driver on Windows 7 for the first time:</p>
-<ol>
-  <li>Connect your Android-powered device to your computer's USB port.</li>
-  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
-    and select <strong>Manage</strong>.</li>
-  <li>Select <strong>Devices</strong> in the left pane.</li>
-  <li>Locate and expand <em>Other device</em> in the right pane.</li>
-  <li>Right-click the device name (such as <em>Nexus S</em>) and select <strong>Update
-  Driver Software</strong>.
-    This will launch the Hardware Update Wizard.</li>
-  <li>Select <strong>Browse my computer for driver software</strong> and click
-    <strong>Next</strong>.</li>
-  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
-  <li>Click <strong>Next</strong> to install the driver.</li>
-</ol>
-
-<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows 7 with the new
-driver:</p>
-
-<ol>
-  <li>Connect your Android-powered device to your computer's USB port.</li>
-  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
-    and select <strong>Manage</strong>.</li>
-  <li>Select <strong>Device Manager</strong> in the left pane of the Computer Management
-  window.</li>
-  <li>Locate and expand <em>Android Phone</em> in the right pane.</li>
-  <li>Right-click <em>Android Composite ADB Interface</em> and select <strong>Update
-  Driver</strong>.
-    This will launch the Hardware Update Wizard.</li>
-  <li>Select <strong>Install from a list or specific location</strong> and click
-    <strong>Next</strong>.</li>
-  <li>Select <strong>Search for the best driver in these locations</strong>; un-check
-<strong>Search removable media</strong>; and check <strong>Include this location in the
-search</strong>.</li>
-  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
-  <li>Click <strong>Next</strong> to upgrade the driver.</li>
-</ol>
-
-
-
-
-
-<h3 id="WinXp">Windows XP</h3>
-
-<p>To install the Android USB driver on Windows XP for the first time:</p>
-
-<ol>
-  <li>Connect your Android-powered device to your computer's USB port. Windows 
-    will detect the device and launch the Hardware Update Wizard.</li>
-  <li>Select <strong>Install from a list or specific location</strong> and click
-    <strong>Next</strong>.</li>
-  <li>Select <strong>Search for the best driver in these locations</strong>; un-check
-<strong>Search
-    removable media</strong>; and check <strong>Include
-this location in the search</strong>.</li>
-  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
-  <li>Click <strong>Next</strong> to install the driver.</li>
-</ol>
-
-<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows XP with the new
-driver:</p>
-
-<ol>
-  <li>Connect your Android-powered device to your computer's USB port.</li>
-  <li>Right-click on <em>My Computer</em> from your desktop or Windows Explorer,
-    and select <strong>Manage</strong>.</li>
-  <li>Select <strong>Device Manager</strong> in the left pane.</li>
-  <li>Locate and expand <em>Android Phone</em> in the right pane.</li>
-  <li>Right-click <em>Android Composite ADB Interface</em> and select <strong>Update
-  Driver</strong>.
-    This will launch the Hardware Update Wizard.</li>
-  <li>Select <strong>Install from a list or specific location</strong> and click
-    <strong>Next</strong>.</li>
-  <li>Select <strong>Search for the best driver in these locations</strong>; un-check <strong>Search
-    removable media</strong>; and check <strong>Include
-this location in the search</strong>.</li>
-  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
-  <li>Click <strong>Next</strong> to upgrade the driver.</li>
-</ol>
-
-
-
-<h3 id="WinVista">Windows Vista</h3>
-
-<p>To install the Android USB driver on Windows Vista for the first time:</p>
-
-<ol>
-  <li>Connect your Android-powered device to your computer's USB port. Windows
-  will detect the device and launch the Found New Hardware wizard.</li>
-  <li>Select <strong>Locate and install driver software</strong>.</li>
-  <li>Select <strong>Don't search online</strong>.</li>
-  <li>Select <strong>I don't have the disk. Show me other options</strong>.</li>
-  <li>Select <strong>Browse my computer for driver software</strong>.</li>
-  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.) As long as you specified the
-exact location of the 
-    installation package, you may leave <strong>Include subfolders</strong> checked or
-  unchecked&mdash;it doesn't matter.</li>
-  <li>Click <strong>Next</strong>. Vista may prompt you to confirm the privilege elevation
-  required for driver installation. Confirm it.</li>
-  <li>When Vista asks if you'd like to install the Google ADB Interface device,
-  click <strong>Install</strong> to install the driver.</li>
-</ol>
-
-<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows Vista with the new
-driver:</p>
-
-<ol>
-  <li>Connect your Android-powered device to your computer's USB port.</li>
-  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
-    and select <strong>Manage</strong>.</li>
-  <li>Select <strong>Device Manager</strong> in the left pane.</li>
-  <li>Locate and expand <em>ADB Interface</em> in the right pane.</li>
-  <li>Right-click on <em>HTC Dream Composite ADB Interface</em>, and select <strong>Update
-  Driver Software</strong>.</li>
-  <li>When Vista starts updating the driver, a prompt will ask how you want to
-  search for the driver
-    software. Select <strong>Browse my computer for driver software</strong>.</li>
-  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
-Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.) As long as you specified the
-exact location of the 
-    installation package, you may leave <strong>Include subfolders</strong> checked or
-    unchecked&mdash;it doesn't matter.</li>
-  <li>Click <strong>Next</strong>. Vista might prompt you to confirm the privilege elevation
-  required for driver installation. Confirm it.</li>
-  <li>When Vista asks if you'd like to install the Google ADB Interface device,
-  click <strong>Install</strong> to upgrade the driver.</li>
-</ol>
-  
-
-<h2 id="Drivers">OEM Drivers</h2>
-
-<p class="note"><strong>Note:</strong> If your device is one of the Android Developer Phones
-(purchased from the Google Play publisher site), a Nexus One, or a Nexus S, then you need
-the <a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a>, instead of an OEM driver. The Galaxy
-Nexus driver, however, is distributed by <a
-href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
-(listed as model SCH-I515).</p>
-
-
-<table><tr>
-    <th>OEM</th>
-    <th>Driver URL</th></tr>
-<tr><td>Acer</td>	<td><a
-href="http://www.acer.com/worldwide/support/mobile.html">http://www.acer.com/worldwide/support/mobile.html</a>
-    </td></tr>
-  <tr>
-    <td style="font-variant:small-caps">alcatel one touch</td>
-    <td><a
-href="http://www.alcatel-mobilephones.com/global/Android-Downloads">http://www.alcatel-mobilephones.com/global/Android-Downloads</a></td>
-  </tr>
-  <tr>
-    <td>Asus</td>
-    <td><a href="http://support.asus.com/download/">http://support.asus.com/download/</a></td>
-  </tr>
-  <tr><td>
-       Dell
-    </td>	<td>
-      <a
-href="http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml">http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml</a>  </td></tr>
-
-<tr><td>Foxconn</td>	<td><a
-href="http://drivers.cmcs.com.tw/">http://drivers.cmcs.com.tw/</a></td>
-</tr>
-  <tr>
-    <td>
-      Fujitsu
-    </td>
-    <td><a
-href="http://www.fmworld.net/product/phone/sp/android/develop/">http://www.fmworld.net/product/phone/sp/android/develop/</a>
-    </td>
-  </tr>
-  <tr>
-    <td>
-      Fujitsu Toshiba
-    </td>
-    <td><a
-href="http://www.fmworld.net/product/phone/sp/android/develop/">http://www.fmworld.net/product/phone/sp/android/develop/</a>
-    </td>
-  </tr>
-  <tr><td>
-       Garmin-Asus
-    </td>	<td><a
-href="https://www.garminasus.com/en_US/support/pcsync/">https://www.garminasus.com/en_US/support/pcsync/</a></td>
-</tr>
-
-<tr><td>Hisense</td>
-  <td><a
-href="http://app.hismarttv.com/dss/resourcecontent.do?method=viewResourceDetail&resourceId=16&type=5">http://app.hismarttv.com/dss/resourcecontent.do?method=viewResourceDetail&amp;resourceId=16&amp;type=5 </a></td>
-</tr>
-
-<tr><td>HTC</td>	<td><a href="http://www.htc.com">http://www.htc.com </a> <br>Click on the
-support tab to select your products/device.  Different regions will have different links.</td>
-</tr>
-
-<tr><td>Huawei</td>	<td><a
-href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index</a></td>
-</tr>
-
-<tr><td>KT Tech</td>	<td><a
-href="http://www.kttech.co.kr/cscenter/download05.asp">http://www.kttech.co.kr/cscenter/download05.asp</a> for EV-S100 (Take)</td>
-</tr>
-  <tr>
-    <td>
-      Kyocera
-    </td>
-    <td><a href="http://www.kyocera-wireless.com/support/phone_drivers.htm">http://www.kyocera-wireless.com/support/phone_drivers.htm</a>
-    </td>
-  </tr>
-  <tr>
-    <td>Lenevo</td>
-    <td><a href="http://developer.lenovomm.com/developer/download.jsp"
-        >http://developer.lenovomm.com/developer/download.jsp</a>
-    </td>
-  </tr>
-  <tr><td>LGE</td>	<td><a
-href="http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp">http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp</a></td>
-</tr><tr><td>Motorola</td>	<td><a
-href="http://developer.motorola.com/docstools/USB_Drivers/">http://developer.motorola.com/docstools/USB_Drivers/</a></td>
-</tr><tr><td>Pantech</td>	<td><a
-href="http://www.isky.co.kr/cs/software/software.sky?fromUrl=index">http://www.isky.co.kr/cs/software/software.sky?fromUrl=index</a></td>
-</tr><tr><td>Pegatron</td>	<td><a
-href="http://www.pegatroncorp.com/download/New_Duke_PC_Driver_0705.zip">http://www.pegatroncorp.com/download/New_Duke_PC_Driver_0705.zip</a> (ZIP download)</td>
-</tr><tr><td>Samsung</td>	<td><a
-href="http://www.samsung.com/us/support/downloads">http://www.samsung.com/us/support/downloads</a></td>
-</tr><tr><td>Sharp</td>	<td><a
-href="http://k-tai.sharp.co.jp/support/">http://k-tai.sharp.co.jp/support/</a></td>
-</tr><tr><td>SK Telesys</td>	<td><a
-href="http://www.sk-w.com/service/wDownload/wDownload.jsp">http://www.sk-w.com/service/wDownload/wDownload.jsp</a></td></tr><tr>
-<td>Sony Ericsson</td>	<td><a
-href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&lc=en">http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&amp;lc=en</a></td></tr>
-
-<tr><td>Teleepoch</td>	<td><a
-href="http://www.teleepoch.com/android.html">http://www.teleepoch.com/android.html</a></td>
-</tr>
-
-<tr><td>Yulong Coolpad</td>	<td><a
-href="http://www.yulong.com/product/product/product/downloadList.html#downListUL">http://www.yulong.com/product/product/product/downloadList.html#downListUL</a></td>
-</tr>
-
-<tr>
-<td>ZTE</td>	<td><a
-href="http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442">http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442</a></td></tr>
-</table>
diff --git a/docs/html/sdk/older_releases.jd b/docs/html/sdk/older_releases.jd
index 870ff04..bb274b6 100644
--- a/docs/html/sdk/older_releases.jd
+++ b/docs/html/sdk/older_releases.jd
@@ -15,7 +15,7 @@
 <p>If you already have an Android SDK for platform version 1.6 or newer, then
 you do not need to install a new SDK&mdash;especially not one from this page.
 You should install older platforms as components of your existing SDK.
-See <a href="adding-components.html">Adding SDK Components</a>.</p>
+See <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
 </div>
 
 
diff --git a/docs/html/sdk/preview/features.jd b/docs/html/sdk/preview/features.jd
deleted file mode 100644
index d7ecc47..0000000
--- a/docs/html/sdk/preview/features.jd
+++ /dev/null
@@ -1,8 +0,0 @@
-@jd:body
-
-<script type="text/javascript">
-  document.location=toRoot+"sdk/android-3.0.html"
-</script>
-
-<p>You should have already been redirected by your browser. Please go to the
-<a href="{@docRoot}sdk/android-3.0.html">Android 3.0 Platform</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/preview/installing.jd b/docs/html/sdk/preview/installing.jd
deleted file mode 100644
index 94c6f2f..0000000
--- a/docs/html/sdk/preview/installing.jd
+++ /dev/null
@@ -1,8 +0,0 @@
-@jd:body
-
-<script type="text/javascript">
-  document.location=toRoot+"sdk/installing.html"
-</script>
-
-<p>You should have already been redirected by your browser. Please go to
-<a href="{@docRoot}sdk/installing.html">Installing the SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/requirements.jd b/docs/html/sdk/requirements.jd
deleted file mode 100644
index c76e8c8..0000000
--- a/docs/html/sdk/requirements.jd
+++ /dev/null
@@ -1,114 +0,0 @@
-page.title=System Requirements
-@jd:body
-
-<p>The sections below describe the system and software requirements for developing 
-Android applications using the Android SDK. </p>
-
-<h3>Supported Operating Systems</h3>
-<ul>
-  <li>Windows XP (32-bit), Vista (32- or 64-bit), or Windows 7 (32- or 64-bit)</li>
-  <li>Mac OS X 10.5.8 or later (x86 only)</li>
-  <li>Linux (tested on Ubuntu Linux, Lucid Lynx)
-    <ul>
-      <li>GNU C Library (glibc) 2.7 or later is required.</li>
-      <li>On Ubuntu Linux, version 8.04 or later is required.</li>
-      <li>64-bit distributions must be capable of running 32-bit applications. 
-      For information about how to add support for 32-bit applications, see
-      the <a href="installing.html#troubleshooting">Ubuntu Linux
-      installation notes</a>.</li>
-    </ul>
-  </li>
-</ul>
-
-<h3>Supported Development Environments</h3>
-
-<h4 style="margin-top:.25em"><em>Eclipse IDE</em></h4>
-    <ul>
-      <li>Eclipse 3.6.2 (Helios) or greater
-<p class="note"><strong>Note:</strong> Eclipse 3.5 (Galileo) is no longer
-supported with the latest version of ADT.</p></li>
-      <li>Eclipse <a href="http://www.eclipse.org/jdt">JDT</a> plugin (included
-in most Eclipse IDE packages) </li>
-      <li>If you need to install or update Eclipse, you can download it from <a
-href="http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a>. 
-
-      <p>Several types of Eclipse packages are available for each platform. For
-developing Android applications, we recommend that you install one of these
-packages: </p>
-         <ul>
-           <li>Eclipse IDE for Java Developers</li>
-           <li>Eclipse Classic</li>
-           <li>Eclipse IDE for Java EE Developers</li>
-         </ul>
-      </li>
-      <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 6</a>
-        (JRE alone is not sufficient)</li>
-      <li><a href="eclipse-adt.html">Android Development Tools plugin</a>
-(recommended)</li>
-      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
-    </ul>
-
-
-<h4><em>Other development environments or IDEs</em></h4>
-    <ul>
-      <li><a href="http://www.oracle.com/technetwork/java/javase/downloads/index.html">JDK 6</a>
-        (JRE alone is not sufficient)</li>
-      <li><a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later</li>
-      <li><strong>Not</strong> compatible with Gnu Compiler for Java (gcj)</li>
-    </ul>
-  </li>
-</ul>
-
-<p class="note"><strong>Note:</strong> If JDK is already installed on your development computer, please take a moment to make sure that it meets the version requirements listed above. In
-particular, note that some Linux distributions may include JDK 1.4 or Gnu Compiler for Java, both of which are not supported for Android development. </p>
-
-<h3>Hardware requirements</h3>
-
-<p>The Android SDK requires disk storage for all of the components that you choose to install. The table below provides a rough idea of the disk-space requirements to expect, based on the components that you plan to use. </p>
-
-<table>
-<tr>
-<th>Component type</th>
-<th>Approximate size</th>
-<th>Comments</th>
-</tr>
-<tr>
-<td>SDK Tools</td>
-<td>35 MB</td>
-<td>Required.</td>
-</tr>
-<tr>
-<td>SDK Platform-tools</td>
-<td>6 MB</td>
-<td>Required.</td>
-</tr>
-<tr>
-<td>Android platform (each)</td>
-<td>150 MB</td>
-<td>At least one platform is required.</td>
-</tr>
-<tr>
-<td>SDK Add-on (each)</td>
-<td>100 MB</td>
-<td>Optional.</td>
-</tr>
-<tr>
-<td>USB Driver for Windows</td>
-<td>10 MB</td>
-<td>Optional. For Windows only.</td>
-</tr>
-<tr>
-<td>Samples (per platform)</td>
-<td>10M</td>
-<td>Optional.</td>
-</tr>
-<tr>
-<td>Offline documentation</td>
-<td>250 MB</td>
-<td>Optional.</td>
-</tr>
-</table>
-
-<p>Note that the disk-space requirements above are <em>in addition to</em> those of the Eclipse IDE, JDK, or other prerequisite tools that you may need to install on your development computer.</p>
-
-
diff --git a/docs/html/sdk/sdk_toc.cs b/docs/html/sdk/sdk_toc.cs
deleted file mode 100644
index e994d95..0000000
--- a/docs/html/sdk/sdk_toc.cs
+++ /dev/null
@@ -1,228 +0,0 @@
-<?cs if:!sdk.redirect ?>
-<ul>
-  <li>
-    <span class="heading">
-      <span class="en">Android SDK Starter Package</span>
-      <span style="display:none" class="de">Aktuelle SDK-Version</span>
-      <span style="display:none" class="es">Versión actual del SDK</span>
-      <span style="display:none" class="fr">Version actuelle du SDK</span>
-      <span style="display:none" class="it">Release SDK attuale</span>
-      <span style="display:none" class="ja">現在リリースされている SDK</span>
-      <span style="display:none" class="zh-CN">当前的 SDK 版本</span>
-      <span style="display:none" class="zh-TW">目前 SDK 發行版本</span>
-    </span>
-    <ul><?cs
-  if:android.whichdoc == "online" ?>
-      <li><a href="<?cs var:toroot ?>sdk/index.html">
-          <span class="en">Download</span>
-          <span style="display:none" class="de">Herunterladen</span>
-          <span style="display:none" class="es">Descargar</span>
-          <span style="display:none" class="fr">Téléchargement</span>
-          <span style="display:none" class="it">Download</span>
-          <span style="display:none" class="ja">ダウンロード</span>
-          <span style="display:none" class="zh-CN">下载</span>
-          <span style="display:none" class="zh-TW">下載</span>
-        </a></li><?cs
-  /if ?>
-      <li><a href="<?cs var:toroot ?>sdk/installing.html">
-          <span class="en">Installing the SDK</span>
-          <span style="display:none" class="de">Installieren</span>
-          <span style="display:none" class="es">Instalación</span>
-          <span style="display:none" class="fr">Installation</span>
-          <span style="display:none" class="it">Installazione</span>
-          <span style="display:none" class="ja">インストール</span>
-          <span style="display:none" class="zh-CN">安装</span>
-          <span style="display:none" class="zh-TW">安裝</span>
-        </a></li>
-    </ul>
-  </li><?cs
-  if:sdk.preview ?>
-  <li>
-    <span class="heading">Android 3.0 Preview SDK</span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>sdk/preview/start.html">Getting Started</a></li>
-    </ul>
-  </li><?cs
-  /if ?>
-  <?cs
-  if:sdk.preview ?>
-  <li>
-    <span class="heading">Android x.x Preview</span>
-    <ul>
-    </ul>
-  </li><?cs
-  /if ?>
-  <li>
-    <span class="heading">
-      <span class="en">Downloadable SDK Packages</span>
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es"></span>
-      <span style="display:none" class="fr"></span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja"></span>
-      <span style="display:none" class="zh-CN"></span>
-      <span style="display:none" class="zh-TW"></span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>sdk/adding-components.html">
-      <span class="en">Adding SDK Packages</span>
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es"></span>
-      <span style="display:none" class="fr"></span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja"></span>
-      <span style="display:none" class="zh-CN"></span>
-      <span style="display:none" class="zh-TW"></span></a>
-      </li>
-    </ul>
-    <ul>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>sdk/android-4.0-highlights.html">
-        <span class="en">Android 4.0.x Platform</span></a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>sdk/android-4.0.3.html">Android 4.0.3 Platform</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/android-4.0.html">Android 4.0 Platform</a> </li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>sdk/android-3.2.html">
-        <span class="en">Android 3.2 Platform</span></a></div>
-        <ul>
-          <!-- <li><a href="<?cs var:toroot ?>sdk/android-3.2-highlights.html">Platform Highlights</a></li> -->
-          <li><a href="<?cs var:toroot ?>sdk/api_diff/13/changes.html">API Differences Report &raquo;</a></li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>sdk/android-3.1.html">
-        <span class="en">Android 3.1 Platform</span></a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>sdk/android-3.1-highlights.html">Platform Highlights</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/api_diff/12/changes.html">API Differences Report &raquo;</a></li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>sdk/android-3.0.html">
-        <span class="en">Android 3.0 Platform</span></a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>sdk/android-3.0-highlights.html">Platform Highlights</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/api_diff/11/changes.html">API Differences Report &raquo;</a></li>
-        </ul>
-      </li>
-      <li><a href="<?cs var:toroot ?>sdk/android-2.3.4.html">Android 2.3.4 Platform</span></a></li>
-      <li class="toggle-list">
-      <div><a href="<?cs var:toroot ?>sdk/android-2.3.3.html">
-      <span class="en">Android 2.3.3 Platform</span></a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>sdk/api_diff/10/changes.html">API Differences Report &raquo;</a></li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>sdk/android-2.2.html">
-        <span class="en">Android 2.2 Platform</span></a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>sdk/android-2.2-highlights.html">Platform Highlights</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/api_diff/8/changes.html">API Differences Report &raquo;</a></li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="<?cs var:toroot ?>sdk/android-2.1.html">
-        <span class="en">Android 2.1 Platform</span></a></div>
-        <ul>
-          <li><a href="<?cs var:toroot ?>sdk/api_diff/7/changes.html">API Differences Report &raquo;</a></li>
-        </ul>
-      </li>
-      <li class="toggle-list">
-        <div><a href="#" onclick="toggle(this.parentNode.parentNode,true); return false;">Other Platforms</a></div>
-        <ul>
-          <li class="toggle-list">
-            <div><a href="<?cs var:toroot ?>sdk/android-2.3.html">
-            <span class="en">Android 2.3 Platform</span></a></div>
-              <ul>
-                <li><a href="<?cs var:toroot ?>sdk/android-2.3-highlights.html">Platform Highlights</a></li>
-                <li><a href="<?cs var:toroot ?>sdk/api_diff/9/changes.html">API Differences Report &raquo;</a></li>
-              </ul>
-          </li>
-          <li><a href="<?cs var:toroot ?>sdk/android-2.0.1.html">Android 2.0.1 Platform</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/android-2.0.html">Android 2.0 Platform</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/android-1.6.html">Android 1.6 Platform</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/android-1.5.html">Android 1.5 Platform</a></li>
-          <li><a href="<?cs var:toroot ?>sdk/android-1.1.html">Android 1.1 Platform</a></li>
-        </ul>
-      </li>
-    </ul>
-    <ul>
-      <li><a href="<?cs var:toroot ?>sdk/tools-notes.html">SDK Tools, r19</a></li>
-      <li><a href="<?cs var:toroot ?>sdk/win-usb.html">Google USB Driver, r4</a></li>
-      <li><a href="<?cs var:toroot ?>sdk/compatibility-library.html">Support Package, r7</a></li>
-    </ul>
-  </li>
-  <li>
-    <span class="heading">
-      <span class="en">ADT Plugin for Eclipse</span>
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es"></span>
-      <span style="display:none" class="fr"></span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja"></span>
-      <span style="display:none" class="zh-CN"></span>
-      <span style="display:none" class="zh-TW"></span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>sdk/eclipse-adt.html">ADT 18.0.0
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es"></span>
-      <span style="display:none" class="fr"></span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja"></span>
-      <span style="display:none" class="zh-CN"></span>
-      <span style="display:none" class="zh-TW"></span></a>
-      </li>
-    </ul>
-  </li>
-  <li>
-    <span class="heading">
-      <span class="en">Native Development Tools</span>
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es"></span>
-      <span style="display:none" class="fr"></span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja"></span>
-      <span style="display:none" class="zh-CN"></span>
-      <span style="display:none" class="zh-TW"></span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>sdk/ndk/index.html">Android NDK, r7c</a></li>
-      <li><a href="<?cs var:toroot ?>sdk/ndk/overview.html">What is the NDK?</a></li>
-    </ul>
-  </li>
-
-  <li>
-    <span class="heading">
-      <span class="en">More Information</span>
-      <span style="display:none" class="de"></span>
-      <span style="display:none" class="es"></span>
-      <span style="display:none" class="fr"></span>
-      <span style="display:none" class="it"></span>
-      <span style="display:none" class="ja"></span>
-      <span style="display:none" class="zh-CN"></span>
-      <span style="display:none" class="zh-TW"></span>
-    </span>
-    <ul>
-      <li><a href="<?cs var:toroot ?>sdk/oem-usb.html">
-        <span class="en">OEM USB Drivers</span>
-      </a></li>
-      <li><a href="<?cs var:toroot ?>sdk/requirements.html">SDK System Requirements</a></li>
-      <li><a href="<?cs var:toroot ?>sdk/older_releases.html">SDK Archives</a></li>
-
-    </ul>
-  </li>
-
-</ul>
-
-<script type="text/javascript">
-<!--
-    buildToggleLists();
-    changeNavLang(getLangPref());
-//-->
-</script>
-<?cs /if ?>
diff --git a/docs/html/sdk/terms.jd b/docs/html/sdk/terms.jd
deleted file mode 100644
index 614a438..0000000
--- a/docs/html/sdk/terms.jd
+++ /dev/null
@@ -1,207 +0,0 @@
-page.title=Terms and Conditions
-hide_license_footer=true
-@jd:body
-
-<p>This is the Android Software Development Kit License Agreement.</p>
-
-<h2>
-	1. Introduction
-</h2>
-<p>
-	1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK" and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is licensed to you subject to the terms of this License Agreement. This License Agreement forms a legally binding contract between you and Google in relation to your use of the SDK.
-
-</p>
-<p>
-	1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-</p>
-<h2>
-	2. Accepting this License Agreement
-</h2>
-<p>
-	2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use the SDK if you do not accept this License Agreement.
-</p>
-<p>
-	2.2 You can accept this License Agreement by:
-</p>
-<p>
-	(A) clicking to accept or agree to this License Agreement, where this option is made available to you; or
-</p>
-<p>
-	(B) by actually using the SDK. In this case, you agree that use of the SDK constitutes acceptance of the Licensing Agreement from that point onwards.
-</p>
-<p>
-	2.3 You may not use the SDK and may not accept the Licensing Agreement if you are a person barred from receiving the SDK under the laws of the United States or other countries including the country in which you are resident or from which you use the SDK.
-</p>
-<p>
-	2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or other entity, you represent and warrant that you have full legal authority to bind your employer or such entity to this License Agreement. If you do not have the requisite authority, you may not accept the Licensing Agreement or use the SDK on behalf of your employer or other entity.
-</p>
-<h2>
-	3. SDK License from Google
-</h2>
-<p>
-	3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide, royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop applications to run on the Android platform.
-</p>
-<p>
-	3.2 You agree that Google or third parties own all legal right, title and interest in and to the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law, and any and all other proprietary rights. Google reserves all rights not expressly granted to you. 
-
-</p>
-<p>
-	3.3 Except to the extent required by applicable third party licenses, you may not copy (except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble, or create derivative works of the SDK or any part of the SDK. Except to the extent required by applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any other hardware device except a personal computer, combine any part of the SDK with other software, or distribute any software or device incorporating a part of the SDK. 
-</p>
-<p>
-	3.4 Use, reproduction and distribution of components of the SDK licensed under an open source software license are governed solely by the terms of that open source software license and not this License Agreement.
-</p>
-<p>
-	3.5 You agree that the form and nature of the SDK that Google provides may change without prior notice to you and that future versions of the SDK may be incompatible with applications developed on previous versions of the SDK. You agree that Google may stop (permanently or temporarily) providing the SDK (or any features within the SDK) to you or to users generally at Google's sole discretion, without prior notice to you.
-</p>
-<p>
-	3.6 Nothing in this License Agreement gives you a right to use any of Google's trade names, trademarks, service marks, logos, domain names, or other distinctive brand features.
-</p>
-<p>
-	3.7 You agree that you will not remove, obscure, or alter any proprietary rights notices (including copyright and trademark notices) that may be affixed to or contained within the SDK.
-</p>
-<h2>
-	4. Use of the SDK by You
-</h2>
-<p>
-	4.1 Google agrees that it obtains no right, title or interest from you (or your licensors) under this License Agreement in or to any software applications that you develop using the SDK, including any intellectual property rights that subsist in those applications. 
-</p>
-<p>
-	4.2 You agree to use the SDK and write applications only for purposes that are permitted by (a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or guidelines in the relevant jurisdictions (including any laws regarding the export of data or software to and from the United States or other relevant countries).
-</p>
-<p>
-	4.3 You agree that if you use the SDK to develop applications for general public users, you will protect the privacy and legal rights of those users. If the users provide you with user names, passwords, or other login information or personal information, your must make the users aware that the information will be available to your application, and you must provide legally adequate privacy notice and protection for those users. If your application stores personal or sensitive information provided by users, it must do so securely. If the user provides your application with Google Account information, your application may only use that information to access the user's Google Account when, and for the limited purposes for which, the user has given you permission to do so.
-</p>
-<p>
-	4.4 You agree that you will not engage in any activity with the SDK, including the development or distribution of an application, that interferes with, disrupts, damages, or accesses in an unauthorized manner the servers, networks, or other properties or services of any third party including, but not limited to, Google or any mobile communications carrier.
-</p>
-<p>
-	4.5 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any data, content, or resources that you create, transmit or display through the Android platform and/or applications for the Android platform, and for the consequences of your actions (including any loss or damage which Google may suffer) by doing so.
-</p>
-<p>
-	4.6 You agree that you are solely responsible for (and that Google has no responsibility to you or to any third party for) any breach of your obligations under this License Agreement, any applicable third party contract or Terms of Service, or any applicable law or regulation, and for the consequences (including any loss or damage which Google or any third party may suffer) of any such breach.
-</p>
-<h2>
-	5. Your Developer Credentials
-</h2>
-<p>
-	5.1 You agree that you are responsible for maintaining the confidentiality of any developer credentials that may be issued to you by Google or which you may choose yourself and that you will be solely responsible for all applications that are developed under your developer credentials.
-</p>
-<h2>
-	6. Privacy and Information
-</h2>
-<p>
-	6.1 In order to continually innovate and improve the SDK, Google may collect certain usage statistics from the software including but not limited to a unique identifier, associated IP address, version number of the software, and information on which tools and/or services in the SDK are being used and how they are being used. Before any of this information is collected, the SDK will notify you and seek your consent. If you withhold consent, the information will not be collected.
-</p>
-<p>
-	6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in accordance with Google's Privacy Policy.
-</p>
-<h2>
-	7. Third Party Applications for the Android Platform
-</h2>
-<p>
-	7.1 If you use the SDK to run applications developed by a third party or that access data, content or resources provided by a third party, you agree that Google is not responsible for those applications, data, content, or resources. You understand that all data, content or resources which you may access through such third party applications are the sole responsibility of the person from which they originated and that Google is not liable for any loss or damage that you may experience as a result of the use or access of any of those third party applications, data, content, or resources.
-</p>
-<p>
-	7.2 You should be aware the data, content, and resources presented to you through such a third party application may be protected by intellectual property rights which are owned by the providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan, sell, distribute or create derivative works based on these data, content, or resources (either in whole or in part) unless you have been specifically given permission to do so by the relevant owners.
-</p>
-<p>
-	7.3 You acknowledge that your use of such third party applications, data, content, or resources may be subject to separate terms between you and the relevant third party. In that case, this License Agreement does not affect your legal relationship with these third parties.
-</p>
-<h2>
-	8. Using Android APIs
-</h2>
-<p>
-	8.1 Google Data APIs
-</p>
-<p>
-	8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be protected by intellectual property rights which are owned by Google or those parties that provide the data (or by other persons or companies on their behalf). Your use of any such API may be subject to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create derivative works based on this data (either in whole or in part) unless allowed by the relevant Terms of Service.
-</p>
-<p>
-	8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree that you shall retrieve data only with the user's explicit consent and only when, and for the limited purposes for which, the user has given you permission to do so. 
-
-</p>
-<h2>
-	9. Terminating this License Agreement
-</h2>
-<p>
-	9.1 This License Agreement will continue to apply until terminated by either you or Google as set out below.
-</p>
-<p>
-	9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of the SDK and any relevant developer credentials.
-</p>
-<p>
-	9.3 Google may at any time, terminate this License Agreement with you if:
-</p>
-<p>
-	(A) you have breached any provision of this License Agreement; or
-</p>
-<p>
-	(B) Google is required to do so by law; or
-</p>
-<p>
-	(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or
-</p>
-<p>
-	(D) Google decides to no longer providing the SDK or certain parts of the SDK to users in the country in which you are resident or from which you use the service, or the provision of the SDK or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially viable.
-</p>
-<p>
-	9.4 When this License Agreement comes to an end, all of the legal rights, obligations and liabilities that you and Google have benefited from, been subject to (or which have accrued over time whilst this License Agreement has been in force) or which are expressed to continue indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall continue to apply to such rights, obligations and liabilities indefinitely.
-</p>
-<h2>
-	10. DISCLAIMER OF WARRANTIES
-</h2>
-<p>
-	10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-</p>
-<p>
-	10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-</p>
-<p>
-	10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-</p>
-<h2>
-	11. LIMITATION OF LIABILITY
-</h2>
-<p>
-	11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-</p>
-<h2>
-	12. Indemnification
-</h2>
-<p>
-	12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold harmless Google, its affiliates and their respective directors, officers, employees and agents from and against any and all claims, actions, suits or proceedings, as well as any and all losses, liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any person or defames any person or violates their rights of publicity or privacy, and (c) any non-compliance by you with this License Agreement.
-</p>
-<h2>
-	13. Changes to the License Agreement
-</h2>
-<p>
-	13.1 Google may make changes to the License Agreement as it distributes new versions of the SDK. When these changes are made, Google will make a new version of the License Agreement available on the website where the SDK is made available.
-</p>
-<h2>
-	14. General Legal Terms
-</h2>
-<p>
-	14.1 This License Agreement constitute the whole legal agreement between you and Google and govern your use of the SDK (excluding any services which Google may provide to you under a separate written agreement), and completely replace any prior agreements between you and Google in relation to the SDK.
-</p>
-<p>
-	14.2 You agree that if Google does not exercise or enforce any legal right or remedy which is contained in this License Agreement (or which Google has the benefit of under any applicable law), this will not be taken to be a formal waiver of Google's rights and that those rights or remedies will still be available to Google.
-</p>
-<p>
-	14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any provision of this License Agreement is invalid, then that provision will be removed from this License Agreement without affecting the rest of this License Agreement. The remaining provisions of this License Agreement will continue to be valid and enforceable.
-</p>
-<p>
-	14.4 You acknowledge and agree that each member of the group of companies of which Google is the parent shall be third party beneficiaries to this License Agreement and that such other companies shall be entitled to directly enforce, and rely upon, any provision of this License Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person or company shall be third party beneficiaries to this License Agreement.
-</p>
-<p>
-	14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS. YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-</p>
-<p>
-	14.6 The rights granted in this License Agreement may not be assigned or transferred by either you or Google without the prior written approval of the other party. Neither you nor Google shall be permitted to delegate their responsibilities or obligations under this License Agreement without the prior written approval of the other party.
-</p>
-<p>
-	14.7 This License Agreement, and your relationship with Google under this License Agreement, shall be governed by the laws of the State of California without regard to its conflict of laws provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located within the county of Santa Clara, California to resolve any legal matter arising from this License Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-</p>
-<p>
-	<em>April 10, 2009</em>
-</p>
diff --git a/docs/html/sdk/terms_body.html b/docs/html/sdk/terms_body.html
deleted file mode 100644
index 8c55b37..0000000
--- a/docs/html/sdk/terms_body.html
+++ /dev/null
@@ -1,336 +0,0 @@
-
- 
-<p>This is the Android Software Development Kit License Agreement.</p> 
- 
-<h2> 
-	1. Introduction
-</h2> 
-<p> 
-	1.1 The Android Software Development Kit (referred to in this License Agreement as the "SDK"
-and specifically including the Android system files, packaged APIs, and Google APIs add-ons) is
-licensed to you subject to the terms of this License Agreement. This License Agreement forms a
-legally binding contract between you and Google in relation to your use of the SDK.
- 
-</p> 
-<p> 
-	1.2 "Google" means Google Inc., a Delaware corporation with principal place of business at
-1600 Amphitheatre Parkway, Mountain View, CA 94043, United States.
-</p> 
-<h2> 
-	2. Accepting this License Agreement
-</h2> 
-<p> 
-	2.1 In order to use the SDK, you must first agree to this License Agreement. You may not use
-the SDK if you do not accept this License Agreement.
-</p> 
-<p> 
-	2.2 You can accept this License Agreement by:
-</p> 
-<p> 
-	(A) clicking to accept or agree to this License Agreement, where this option is made
-available to you; or
-</p> 
-<p> 
-	(B) by actually using the SDK. In this case, you agree that use of the SDK constitutes
-acceptance of the Licensing Agreement from that point onwards.
-</p> 
-<p> 
-	2.3 You may not use the SDK and may not accept the Licensing Agreement if you are a person
-barred from receiving the SDK under the laws of the United States or other countries including the
-country in which you are resident or from which you use the SDK.
-</p> 
-<p> 
-	2.4 If you are agreeing to be bound by this License Agreement on behalf of your employer or
-other entity, you represent and warrant that you have full legal authority to bind your employer or
-such entity to this License Agreement. If you do not have the requisite authority, you may not
-accept the Licensing Agreement or use the SDK on behalf of your employer or other entity.
-</p> 
-<h2> 
-	3. SDK License from Google
-</h2> 
-<p> 
-	3.1 Subject to the terms of this License Agreement, Google grants you a limited, worldwide,
-royalty-free, non- assignable and non-exclusive license to use the SDK solely to develop
-applications to run on the Android platform.
-</p> 
-<p> 
-	3.2 You agree that Google or third parties own all legal right, title and interest in and to
-the SDK, including any Intellectual Property Rights that subsist in the SDK. "Intellectual Property
-Rights" means any and all rights under patent law, copyright law, trade secret law, trademark law,
-and any and all other proprietary rights. Google reserves all rights not expressly granted to you. 
- 
-</p> 
-<p> 
-	3.3 Except to the extent required by applicable third party licenses, you may not copy
-(except for backup purposes), modify, adapt, redistribute, decompile, reverse engineer, disassemble,
-or create derivative works of the SDK or any part of the SDK. Except to the extent required by
-applicable third party licenses, you may not load any part of the SDK onto a mobile handset or any
-other hardware device except a personal computer, combine any part of the SDK with other software,
-or distribute any software or device incorporating a part of the SDK. 
-</p> 
-<p> 
-	3.4 Use, reproduction and distribution of components of the SDK licensed under an open
-source software license are governed solely by the terms of that open source software license and
-not this License Agreement.
-</p> 
-<p> 
-	3.5 You agree that the form and nature of the SDK that Google provides may change without
-prior notice to you and that future versions of the SDK may be incompatible with applications
-developed on previous versions of the SDK. You agree that Google may stop (permanently or
-temporarily) providing the SDK (or any features within the SDK) to you or to users generally at
-Google's sole discretion, without prior notice to you.
-</p> 
-<p> 
-	3.6 Nothing in this License Agreement gives you a right to use any of Google's trade names,
-trademarks, service marks, logos, domain names, or other distinctive brand features.
-</p> 
-<p> 
-	3.7 You agree that you will not remove, obscure, or alter any proprietary rights notices
-(including copyright and trademark notices) that may be affixed to or contained within the SDK.
-</p> 
-<h2> 
-	4. Use of the SDK by You
-</h2> 
-<p> 
-	4.1 Google agrees that it obtains no right, title or interest from you (or your licensors)
-under this License Agreement in or to any software applications that you develop using the SDK,
-including any intellectual property rights that subsist in those applications. 
-</p> 
-<p> 
-	4.2 You agree to use the SDK and write applications only for purposes that are permitted by
-(a) this License Agreement and (b) any applicable law, regulation or generally accepted practices or
-guidelines in the relevant jurisdictions (including any laws regarding the export of data or
-software to and from the United States or other relevant countries).
-</p> 
-<p> 
-	4.3 You agree that if you use the SDK to develop applications for general public users, you
-will protect the privacy and legal rights of those users. If the users provide you with user names,
-passwords, or other login information or personal information, your must make the users aware that
-the information will be available to your application, and you must provide legally adequate privacy
-notice and protection for those users. If your application stores personal or sensitive information
-provided by users, it must do so securely. If the user provides your application with Google Account
-information, your application may only use that information to access the user's Google Account
-when, and for the limited purposes for which, the user has given you permission to do so.
-</p> 
-<p> 
-	4.4 You agree that you will not engage in any activity with the SDK, including the
-development or distribution of an application, that interferes with, disrupts, damages, or accesses
-in an unauthorized manner the servers, networks, or other properties or services of any third party
-including, but not limited to, Google or any mobile communications carrier.
-</p> 
-<p> 
-	4.5 You agree that you are solely responsible for (and that Google has no responsibility to
-you or to any third party for) any data, content, or resources that you create, transmit or display
-through the Android platform and/or applications for the Android platform, and for the consequences
-of your actions (including any loss or damage which Google may suffer) by doing so.
-</p> 
-<p> 
-	4.6 You agree that you are solely responsible for (and that Google has no responsibility to
-you or to any third party for) any breach of your obligations under this License Agreement, any
-applicable third party contract or Terms of Service, or any applicable law or regulation, and for
-the consequences (including any loss or damage which Google or any third party may suffer) of any
-such breach.
-</p> 
-<h2> 
-	5. Your Developer Credentials
-</h2> 
-<p> 
-	5.1 You agree that you are responsible for maintaining the confidentiality of any developer
-credentials that may be issued to you by Google or which you may choose yourself and that you will
-be solely responsible for all applications that are developed under your developer credentials.
-</p> 
-<h2> 
-	6. Privacy and Information
-</h2> 
-<p> 
-	6.1 In order to continually innovate and improve the SDK, Google may collect certain usage
-statistics from the software including but not limited to a unique identifier, associated IP
-address, version number of the software, and information on which tools and/or services in the SDK
-are being used and how they are being used. Before any of this information is collected, the SDK
-will notify you and seek your consent. If you withhold consent, the information will not be
-collected.
-</p> 
-<p> 
-	6.2 The data collected is examined in the aggregate to improve the SDK and is maintained in
-accordance with Google's Privacy Policy.
-</p> 
-<h2> 
-	7. Third Party Applications for the Android Platform
-</h2> 
-<p> 
-	7.1 If you use the SDK to run applications developed by a third party or that access data,
-content or resources provided by a third party, you agree that Google is not responsible for those
-applications, data, content, or resources. You understand that all data, content or resources which
-you may access through such third party applications are the sole responsibility of the person from
-which they originated and that Google is not liable for any loss or damage that you may experience
-as a result of the use or access of any of those third party applications, data, content, or
-resources.
-</p> 
-<p> 
-	7.2 You should be aware the data, content, and resources presented to you through such a
-third party application may be protected by intellectual property rights which are owned by the
-providers (or by other persons or companies on their behalf). You may not modify, rent, lease, loan,
-sell, distribute or create derivative works based on these data, content, or resources (either in
-whole or in part) unless you have been specifically given permission to do so by the relevant
-owners.
-</p> 
-<p> 
-	7.3 You acknowledge that your use of such third party applications, data, content, or
-resources may be subject to separate terms between you and the relevant third party. In that case,
-this License Agreement does not affect your legal relationship with these third parties.
-</p> 
-<h2> 
-	8. Using Android APIs
-</h2> 
-<p> 
-	8.1 Google Data APIs
-</p> 
-<p> 
-	8.1.1 If you use any API to retrieve data from Google, you acknowledge that the data may be
-protected by intellectual property rights which are owned by Google or those parties that provide
-the data (or by other persons or companies on their behalf). Your use of any such API may be subject
-to additional Terms of Service. You may not modify, rent, lease, loan, sell, distribute or create
-derivative works based on this data (either in whole or in part) unless allowed by the relevant
-Terms of Service.
-</p> 
-<p> 
-	8.1.2 If you use any API to retrieve a user's data from Google, you acknowledge and agree
-that you shall retrieve data only with the user's explicit consent and only when, and for the
-limited purposes for which, the user has given you permission to do so. 
- 
-</p> 
-<h2> 
-	9. Terminating this License Agreement
-</h2> 
-<p> 
-	9.1 This License Agreement will continue to apply until terminated by either you or Google
-as set out below.
-</p> 
-<p> 
-	9.2 If you want to terminate this License Agreement, you may do so by ceasing your use of
-the SDK and any relevant developer credentials.
-</p> 
-<p> 
-	9.3 Google may at any time, terminate this License Agreement with you if:
-</p> 
-<p> 
-	(A) you have breached any provision of this License Agreement; or
-</p> 
-<p> 
-	(B) Google is required to do so by law; or
-</p> 
-<p> 
-	(C) the partner with whom Google offered certain parts of SDK (such as APIs) to you has
-terminated its relationship with Google or ceased to offer certain parts of the SDK to you; or
-</p> 
-<p> 
-	(D) Google decides to no longer providing the SDK or certain parts of the SDK to users in
-the country in which you are resident or from which you use the service, or the provision of the SDK
-or certain SDK services to you by Google is, in Google's sole discretion, no longer commercially
-viable.
-</p> 
-<p> 
-	9.4 When this License Agreement comes to an end, all of the legal rights, obligations and
-liabilities that you and Google have benefited from, been subject to (or which have accrued over
-time whilst this License Agreement has been in force) or which are expressed to continue
-indefinitely, shall be unaffected by this cessation, and the provisions of paragraph 14.7 shall
-continue to apply to such rights, obligations and liabilities indefinitely.
-</p> 
-<h2> 
-	10. DISCLAIMER OF WARRANTIES
-</h2> 
-<p> 
-	10.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT YOUR USE OF THE SDK IS AT YOUR SOLE RISK AND
-THAT THE SDK IS PROVIDED "AS IS" AND "AS AVAILABLE" WITHOUT WARRANTY OF ANY KIND FROM GOOGLE.
-</p> 
-<p> 
-	10.2 YOUR USE OF THE SDK AND ANY MATERIAL DOWNLOADED OR OTHERWISE OBTAINED THROUGH THE USE
-OF THE SDK IS AT YOUR OWN DISCRETION AND RISK AND YOU ARE SOLELY RESPONSIBLE FOR ANY DAMAGE TO YOUR
-COMPUTER SYSTEM OR OTHER DEVICE OR LOSS OF DATA THAT RESULTS FROM SUCH USE.
-</p> 
-<p> 
-	10.3 GOOGLE FURTHER EXPRESSLY DISCLAIMS ALL WARRANTIES AND CONDITIONS OF ANY KIND, WHETHER
-EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO THE IMPLIED WARRANTIES AND CONDITIONS OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
-</p> 
-<h2> 
-	11. LIMITATION OF LIABILITY
-</h2> 
-<p> 
-	11.1 YOU EXPRESSLY UNDERSTAND AND AGREE THAT GOOGLE, ITS SUBSIDIARIES AND AFFILIATES, AND
-ITS LICENSORS SHALL NOT BE LIABLE TO YOU UNDER ANY THEORY OF LIABILITY FOR ANY DIRECT, INDIRECT,
-INCIDENTAL, SPECIAL CONSEQUENTIAL OR EXEMPLARY DAMAGES THAT MAY BE INCURRED BY YOU, INCLUDING ANY
-LOSS OF DATA, WHETHER OR NOT GOOGLE OR ITS REPRESENTATIVES HAVE BEEN ADVISED OF OR SHOULD HAVE BEEN
-AWARE OF THE POSSIBILITY OF ANY SUCH LOSSES ARISING.
-</p> 
-<h2> 
-	12. Indemnification
-</h2> 
-<p> 
-	12.1 To the maximum extent permitted by law, you agree to defend, indemnify and hold
-harmless Google, its affiliates and their respective directors, officers, employees and agents from
-and against any and all claims, actions, suits or proceedings, as well as any and all losses,
-liabilities, damages, costs and expenses (including reasonable attorneys fees) arising out of or
-accruing from (a) your use of the SDK, (b) any application you develop on the SDK that infringes any
-copyright, trademark, trade secret, trade dress, patent or other intellectual property right of any
-person or defames any person or violates their rights of publicity or privacy, and (c) any
-non-compliance by you with this License Agreement.
-</p> 
-<h2> 
-	13. Changes to the License Agreement
-</h2> 
-<p> 
-	13.1 Google may make changes to the License Agreement as it distributes new versions of the
-SDK. When these changes are made, Google will make a new version of the License Agreement available
-on the website where the SDK is made available.
-</p> 
-<h2> 
-	14. General Legal Terms
-</h2> 
-<p> 
-	14.1 This License Agreement constitute the whole legal agreement between you and Google and
-govern your use of the SDK (excluding any services which Google may provide to you under a separate
-written agreement), and completely replace any prior agreements between you and Google in relation
-to the SDK.
-</p> 
-<p> 
-	14.2 You agree that if Google does not exercise or enforce any legal right or remedy which
-is contained in this License Agreement (or which Google has the benefit of under any applicable
-law), this will not be taken to be a formal waiver of Google's rights and that those rights or
-remedies will still be available to Google.
-</p> 
-<p> 
-	14.3 If any court of law, having the jurisdiction to decide on this matter, rules that any
-provision of this License Agreement is invalid, then that provision will be removed from this
-License Agreement without affecting the rest of this License Agreement. The remaining provisions of
-this License Agreement will continue to be valid and enforceable.
-</p> 
-<p> 
-	14.4 You acknowledge and agree that each member of the group of companies of which Google is
-the parent shall be third party beneficiaries to this License Agreement and that such other
-companies shall be entitled to directly enforce, and rely upon, any provision of this License
-Agreement that confers a benefit on (or rights in favor of) them. Other than this, no other person
-or company shall be third party beneficiaries to this License Agreement.
-</p> 
-<p> 
-	14.5 EXPORT RESTRICTIONS. THE SDK IS SUBJECT TO UNITED STATES EXPORT LAWS AND REGULATIONS.
-YOU MUST COMPLY WITH ALL DOMESTIC AND INTERNATIONAL EXPORT LAWS AND REGULATIONS THAT APPLY TO THE
-SDK. THESE LAWS INCLUDE RESTRICTIONS ON DESTINATIONS, END USERS AND END USE.
-</p> 
-<p> 
-	14.6 The rights granted in this License Agreement may not be assigned or transferred by
-either you or Google without the prior written approval of the other party. Neither you nor Google
-shall be permitted to delegate their responsibilities or obligations under this License Agreement
-without the prior written approval of the other party.
-</p> 
-<p> 
-	14.7 This License Agreement, and your relationship with Google under this License Agreement,
-shall be governed by the laws of the State of California without regard to its conflict of laws
-provisions. You and Google agree to submit to the exclusive jurisdiction of the courts located
-within the county of Santa Clara, California to resolve any legal matter arising from this License
-Agreement. Notwithstanding this, you agree that Google shall still be allowed to apply for
-injunctive remedies (or an equivalent type of urgent legal relief) in any jurisdiction.
-</p> 
-<p> 
-	<em>April 10, 2009</em> 
-</p> 
\ No newline at end of file
diff --git a/docs/html/sdk/tools-notes.jd b/docs/html/sdk/tools-notes.jd
deleted file mode 100644
index 062f8f1..0000000
--- a/docs/html/sdk/tools-notes.jd
+++ /dev/null
@@ -1,857 +0,0 @@
-page.title=SDK Tools
-@jd:body
-
-<p>SDK Tools is a downloadable component for the Android SDK. It includes the
-complete set of development and debugging tools for the Android SDK.</p>
-
-<p>If you are new to the Android SDK, the <a
-href="{@docRoot}sdk/index.html">SDK starter package</a> installs the
-latest revision of the SDK Tools in the <code>&lt;sdk&gt;/tools</code> directory.</p>
-
-<p>If you are already using the SDK and you want to update to the latest version
-of the SDK Tools, use the <em>Android SDK Manager</em> to get the
-update, rather than downloading a new SDK starter package. For more information
-about how to update, see <a
-href="{@docRoot}sdk/adding-components.html#UpdatingComponents">Updating SDK
-Components</a>.</p>
-
-
-<h2 id="notes">Revisions</h2>
-
-<p>The sections below provide notes about successive releases of
-the SDK Tools, as denoted by revision number. To determine what revision of the SDK
-Tools you are using, refer to the "Installed Packages" listing in the Android SDK Manager. </p>
-
-<p>For a summary of all known issues in SDK Tools, see <a
-href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</p>
-
-<script type="text/javascript">
-function toggleDiv(link) {
-  var toggleable = $(link).parent();
-  if (toggleable.hasClass("closed")) {
-    //$(".toggleme", toggleable).slideDown("fast");
-    toggleable.removeClass("closed");
-    toggleable.addClass("open");
-    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
-  } else {
-    //$(".toggleme", toggleable).slideUp("fast");
-    toggleable.removeClass("open");
-    toggleable.addClass("closed");
-    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
-  }
-  return false;
-}
-</script>
-<style>
-.toggleable {
-padding: .25em 1em;
-}
-.toggleme {
-  padding: 1em 1em 0 2em;
-  line-height:1em;
-}
-.toggleable a {
-  text-decoration:none;
-}
-.toggleme a {
-  text-decoration:underline;
-}
-.toggleable.closed .toggleme {
-  display:none;
-}
-#jd-content .toggle-img {
-  margin:0;
-}
-</style>
-
-<div class="toggleable opened">
-  <a href="#" onclick="return toggleDiv(this)">
-    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
-    width="9px" />
-    SDK Tools, Revision 19</a> <em>(April 2012)</em>
-
-  <div class="toggleme">
-    <p class="note"><strong>Note:</strong> This update of SDK Tools is only available through
-the <a href="{@docRoot}sdk/adding-components.html">Android SDK Manager</a>. Use this tool to
-download and install this update.</p>
-
-    <dl>
-    <dt>Dependencies:</dt>
-    <dd>
-      <ul>
-        <li>Android SDK Platform-tools revision 9 or later.</li>
-        <li>If you are developing in Eclipse with ADT, note that the SDK Tools r19 is designed for
-        use with ADT 18.0.0 and later. If you haven't already, we highly recommend updating your
-        <a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 18.0.0.</li>
-        <li>If you are developing outside Eclipse, you must have
-          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
-    </ul>
-    </dd>
-    <dt>Bug fixes:</dt>
-    <dd>
-      <ul>
-        <li>Fixed an issue that prevented some developers from running the emulator with GPU
-acceleration.</li>
-      </ul>
-    </dd>
-    </dl>
-  </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-    width="9px" />
-    SDK Tools, Revision 18</a> <em>(April 2012)</em>
-
-  <div class="toggleme">
-    <p class="caution"><strong>Important:</strong> To download the new Android
-    4.0 system components from the Android SDK Manager, you must first update the
-    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
-    the Android 4.0 system components will not be available for download.</p>
-
-    <dl>
-    <dt>Dependencies:</dt>
-    <dd>
-      <ul>
-        <li>Android SDK Platform-tools revision 9 or later.</li>
-        <li>If you are developing in Eclipse with ADT, note that the SDK Tools r18 is designed for
-        use with ADT 18.0.0 and later. If you haven't already, we highly recommend updating your
-        <a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 18.0.0.</li>
-        <li>If you are developing outside Eclipse, you must have
-          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
-    </ul>
-    </dd>
-    <dt>General notes:</dt>
-    <dd>
-      <ul>
-        <li>Updated the SdkController app to encapsulate both sensor and multitouch emulation
-          functionality.</li>
-      </ul>
-    </dd>
-    <dt>Bug fixes:</dt>
-    <dd>
-      <ul>
-        <li>Fixed Ant issues where some jar libraries in the {@code libs/} folder are not picked up
-in some cases.</li>
-      </ul>
-    </dd>
-    </dl>
-  </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-    width="9px" />
-    SDK Tools, Revision 17</a> <em>(March 2012)</em>
-
-  <div class="toggleme">
-    <p class="caution"><strong>Important:</strong> To download the new Android
-    4.0 system components from the Android SDK Manager, you must first update the
-    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
-    the Android 4.0 system components will not be available for download.</p>
-
-    <dl>
-    <dt>Dependencies:</dt>
-    <dd>
-      <ul>
-        <li>Android SDK Platform-tools revision 9 or later.</li>
-        <li>If you are developing in Eclipse with ADT, note that the SDK Tools r17 is designed for
-        use with ADT 17.0.0 and later. If you haven't already, we highly recommend updating your
-        <a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 17.0.0.</li>
-        <li>If you are developing outside Eclipse, you must have
-          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
-    </ul>
-    </dd>
-    <dt>General notes:</dt>
-    <dd>
-      <ul>
-        <li>Emulator
-          <ul>
-            <li>Added support for hardware accelerated graphics rendering. This feature requires an
-API Level 15, Revision 3 or later system image.
-(<a href="{@docRoot}guide/developing/devices/emulator.html#accel-graphics">more info</a>)
-            </li>
-            <li>Added support for running Android x86 system images in virtualization mode on
-Windows and Mac OS X.
-(<a href="{@docRoot}guide/developing/devices/emulator.html#accel-vm">more info</a>)
-              <p class="note"><strong>Note:</strong> Use the Android SDK Manager to download and
-install x86 system images. Android x86 system images are not available for all API levels.</p>
-            </li>
-            <li>Added experimental support for multi-touch input by enabing the emulator to receive
-              touch input from a USB-tethered physical Android device.
-              (<a href="http://tools.android.com/tips/hardware-emulation">more info</a>)</li>
-          </ul>
-        </li>
-        <li>Added viewing of live detailed network usage of an app in DDMS. (<a
-    href="http://tools.android.com/recent/detailednetworkusageinddms">more info</a>)</li>
-        <li>ProGuard
-          <ul>
-            <li>Updated the bundled ProGuard tool to version 4.7. In addition to many new features,
-this update fixes the {@code Conversion to Dalvik format failed with error 1} error some users have
-experienced.</li>
-            <li>Updated the default {@code proguard.cfg} file with better default flags for
-              Android.</li>
-            <li>Split the ProGuard configuration file has been in half, with project specific flags
-kept in project and the generic Android flags distributed (and updated) with the tools
-themselves.</li>
-          </ul>
-        </li>
-        <li>Build
-          <ul>
-            <li>Added a feature that allows you to run some code only in debug mode. Builds now
-generate a class called {@code BuildConfig} containing a {@code DEBUG} constant that is
-automatically set according to your build type. You can check the ({@code BuildConfig.DEBUG})
-constant in your code to run debug-only functions.</li>
-            <li>Fixed issue when a project and its libraries include the same jar file in their libs
-              folder. (<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">more
-              info</a>)</li>
-            <li>Added support for custom views with custom attributes in libraries. Layouts using
-custom attributes must use the namespace URI {@code http://schemas.android.com/apk/res-auto} instead
-of the URI that includes the app package name. This URI is replaced with the app specific one at
-build time.</li>
-          </ul>
-        </li>
-        <li>Lint
-          <ul>
-            <li>Updated Lint to check Android application code. Lint rules which previously
-performed pattern based searches in the application code (such as the unused resource check) have
-been rewritten to use the more accurate Java-style parse trees.</li>
-            <li>Added support for checking library projects. This change means that rules such as
-the unused resource check properly handle resources declared in a library project and referenced in
-a downstream project.</li>
-            <li>Added ability to suppress Lint warnings in Java code with the new
-{@code @SuppressLint} annotation, and in XML files with the new tools: namespace and
-ignore attribute. (<a
-    href="http://tools.android.com/recent/ignoringlintwarnings">more info</a>)</li>
-            <li>New Lint checks:
-              <ul>
-                <li>Added check for Android API calls that require a version of Android higher than
-                  the minimum supported version. You can use the new {@code @TargetApi} annotation
-                  to suppress warnings when the code is wrapped in a system version condition.
-                  (<a href="http://tools.android.com/recent/lintapicheck">more info</a>)</li>
-                <li>Added over 20 new Lint rules, including checks for
-                  <a href="http://tools.android.com/recent/lintperformancechecks">performance</a>,
-                  XML layouts, manifest and file handling.</li>
-              </ul>
-            </li>
-          </ul>
-        </li>
-      </ul>
-    </dd>
-    </dl>
-  </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-    width="9px" />
-    SDK Tools, Revision 16</a> <em>(December 2011)</em>
-
-  <div class="toggleme">
-    <p class="caution"><strong>Important:</strong> To download the new Android
-    4.0 system components from the Android SDK Manager, you must first update the
-    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
-    the Android 4.0 system components will not be available for download.</p>
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-  <ul>
-    <li>Android SDK Platform-tools revision 9 or later.</li>
-    <li>If you are developing in Eclipse with ADT, note that the SDK Tools r16 is designed for use
-    with ADT 16.0.0 and later. If you haven't already, we highly recommend updating your
-    <a href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 16.0.0.</li>
-    <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-    Ant</a> 1.8 or later.</li>
-</ul>
-</dd>
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>Added Lint tools to detect common errors in Android projects.
-      (<a href="http://tools.android.com/recent/lint">more info</a>)</li>
-    <li>Added sensor emulation support, which allows the emulator to read sensor data from a
-      physical Android device.
-      (<a href="http://tools.android.com/recent/sensoremulation">more info</a>)</li>
-    <li>Added support for using a webcam to emulate a camera on Mac OS X.</li>
-  </ul>
-</dd>
-<dt>Bug fixes:</dt>
-<dd>
-  <ul>
-    <li>Snapshots now work for Android 4.0 system images.</li>
-    <li>Fixed several small issues for the build file.
-    (<a href="http://code.google.com/p/android/issues/detail?id=21023">Issue 21023</a>,
-    <a href="http://code.google.com/p/android/issues/detail?id=21267">Issue 21267</a>,
-    <a href="http://code.google.com/p/android/issues/detail?id=21465">Issue 21465</a>,
-    <a href="http://code.google.com/p/android/issues/detail?id=21525">Issue 21525</a>).</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-    width="9px" />
-    SDK Tools, Revision 15</a> <em>(October 2011)</em>
-
-  <div class="toggleme">
-    <p class="caution"><strong>Important:</strong> To download the new Android
-    4.0 system components from the Android SDK Manager, you must first update the
-    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
-    the Android 4.0 system components will not be available for download.</p>
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-  <ul><li>Android SDK Platform-tools revision 9 or later.</li>
-  <li>If you are developing in Eclipse with ADT, note that the SDK Tools r15 is designed for use
-  with ADT 15.0.0 and later. If you haven't already, we highly recommend updating your <a
-  href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 15.0.0.</li>
-  <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-  Ant</a> 1.8 or later.</li>
-</ul>
-
-<dt>Bug fixes:</dt>
-<dd>
-  <ul>
-    <li>Fixed emulator crash on Linux due to improper webcam detection
-    (<a href="http://code.google.com/p/android/issues/detail?id=20952">Issue 20952</a>).</li>
-    <li>Fixed emulator issue when using the <code>-wipe-data</code> argument.</li>
-    <li>Fixed build issue when using Renderscript in projects that target API levels 11-13
-    (<a href="http://code.google.com/p/android/issues/detail?id=21006">Issue 21006</a>).</li>
-    <li>Fixed issue when creating an AVD using the GoogleTV addon
-    (<a href="http://code.google.com/p/android/issues/detail?id=20963">Issue 20963</a>).</li>
-    <li>Fixed <code>ant test</code>
-    (<a href="http://code.google.com/p/android/issues/detail?id=20979">Issue 20979</a>).</li>
-    <li>Fixed <code>android update project</code>
-    (<a href="http://code.google.com/p/android/issues/detail?id=20535">Issue 20535</a>).</li>
-    <li>Fixed scrolling issue in the new Logcat panel of DDMS.</li>
-    <li>Fixed issue with MonkeyRunner
-    (<a href="http://code.google.com/p/android/issues/detail?id=20964">Issue 20964</a>).</li>
-    <li>Fixed issues in the SDK Manager
-    (<a href="http://code.google.com/p/android/issues/detail?id=20939">Issue 20939</a>,
-    <a href="http://code.google.com/p/android/issues/detail?id=20607">Issue 20607</a>).</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-    width="9px" />
-    SDK Tools, Revision 14</a> <em>(October 2011)</em>
-
-  <div class="toggleme">
-    <p class="note"><strong>Important:</strong> To download the new Android
-    4.0 system components from the Android SDK Manager, you must first update the
-    SDK tools to revision 14 and restart the Android SDK Manager. If you do not,
-    the Android 4.0 system components will not be available for download.</p>
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-  <ul><li>Android SDK Platform-tools revision 8 or later.</li>
-  <li>If you are developing in Eclipse with ADT, note that the SDK Tools r14 is designed for use
-  with ADT 14.0.0 and later. If you haven't already, we highly recommend updating your <a
-  href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 14.0.0.</li>
-  <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-  Ant</a> 1.8 or later.</li>
-</ul>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>Added webcam support to Android 4.0 or later platforms to emulate rear-facing cameras when
-    one webcam is present, and to emulate both rear-facing and front-facing cameras when two
-    webcams are present. Webcam support is for Windows and Linux only.
-    Mac support will come in a later release.</li>
-    <li>Changed <code>default.properties</code> to <code>project.properties</code> and
-    <code>build.properties</code> to <code>ant.properties</code>. Any existing
-    projects that you build with Ant must be updated with the <code>android update project</code>
-    command.</li>
-    <li>Changed Ant <code>build.xml</code> file to support improvements to the
-    build system and added and modified Ant commands to support these changes. For a list of Ant
-commands, see the
-<a href="{@docRoot}guide/developing/building/building-cmdline.html#AntReference">Ant Command
-Reference</a>.</li>
-    <li>Changed how library projects are built.</li>
-    <li>Improved incremental builds, so that resource compilation runs less frequently. Builds no
-    longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
-    run once for each library project.</li>
-    <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
-    crunching all existing PNG files, all the time.</li>
-    <li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
-info</a>).</li>
-  </ul>
-  <p>For a complete overview of the build system changes and what you need to do to support them,
-see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
-site</a>.</p>
-</dd>
-</dl>
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-        width="9px" />
-SDK Tools, Revision 13</a> <em>(September 2011)</em>
-  <div class="toggleme">
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that the SDK Tools r13 is designed for use with
-ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
-href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>
-
-<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-Ant</a> 1.8 or later.</p>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>Fix compilation issue in Ant (<code>dex</code> step) when paths have spaces.</li>
-    <li>Fix issue in emulator installation when paths have spaces.</li>
-    <li>Fix issue when AVD paths have spaces.</li>
-    <li>Fix rendering issue when using emulator scaling (<a href="http://code.google.com/p/android/issues/detail?id=18299">see more</a>).</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 12</a> <em>(July 2011)</em>
-  <div class="toggleme">
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that the SDK Tools r12 is designed for use with
-ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
-href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>
-
-<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-Ant</a> 1.8 or later.</p>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>The AVD manager and emulator can now use system images
-    compiled for ARM v7 and x86 CPUs.</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 11</a> <em>(May 2011)</em>
-  <div class="toggleme">
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that the SDK Tools r11 is designed for use with
-ADT 10.0.1 and later. If you haven't already, we highly recommend updating your <a
-href="{@docRoot}sdk/eclipse-adt.html">ADT Plugin</a> to 10.0.1.</p>
-
-<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-Ant</a> 1.8 or later.</p>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>Miscellaneous emulator changes to support Android 3.1.</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
-width="9px" />
-SDK Tools, Revision 10</a> <em>(February 2011)</em>
-  <div class="toggleme">
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that the SDK Tools r10 is
-designed for use with ADT 10.0.0 and later. After installing SDK Tools r10, we
-highly recommend updating your ADT Plugin to 10.0.0.</p>
-
-<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-Ant</a> 1.8 or later.</p>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>The tools now automatically generate Java Programming Language source files (in the
-<code>gen</code> directory) and
-    bytecode (in the <code>res/raw</code> directory) from your native <code>.rs</code> files</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 9</a> <em>(January 2011)</em>
-  <div class="toggleme">
-  <dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that the SDK Tools r9 is
-designed for use with ADT 9.0.0 and later. After installing SDK Tools r9, we
-highly recommend updating your ADT Plugin to 9.0.0.</p>
-
-<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-Ant</a> 1.8 or later.</p>
-
-<dt>Upgrading to SDK Tools r9:</dt>
-<dd>
-<p>If you are upgrading to SDK Tools r9 from SDK Tools r7 or earlier, the default installed location
-for the <code>adb</code> tool has changed from <code>&lt;<em>SDK</em>&gt;/tools/adb</code> to
-<code>&lt;<em>SDK</em>&gt;/platform-tools/adb</code>. This means that you should
-add the new location to your PATH and modify any custom build scripts to
-reference the new location. Copying the <code>adb</code> executable from the new
-location to the old is not recommended, since subsequent updates to the SDK
-Tools will delete the file.</p>
-</dd>
-
-<dt>General notes:</dt>
-<dd>
-  <ul>
-    <li>The default ProGuard configuration, <code>proguard.cfg</code>, now ignores the following classes:
-      <ul>
-        <li>classes that extend {@link android.preference.Preference}</li>
-        <li>classes that extend {@link android.app.backup.BackupAgentHelper}</li>
-      </ul>
-    </li>
-    <li>Ant lib rules now allow you to override <code>java.encoding</code>, <code>java.source</code>,
-    and <code>java.target</code> properties.</li>
-    <li>The default encoding for the <code>javac</code> Ant task is now UTF-8.</li>
-    <li>The LogCat view in DDMS now properly displays UTF-8 characters.</li>
-    <li>The SDK Manager is more reliable on Windows. For details on the improvements, see the
-    <a href="http://tools.android.com/recent/sdkmanagerfixes">Android Tools Project Site</a>. </li>
-    <li>Early look at the new snapshot feature: To improve startup time for the emulator, you can
-enable snapshots for the system state. The emulator will then restore to the state when it last
-closed almost instantly. <strong>Note:</strong> The snapshot feature is still under active
-development and might not always perform as expected.</li>
-    <li>Fixed the missing JAR file error that prevented <code>draw9patch</code> from running.</li>
-    <li>Fixed the Windows launch scripts <code>hierarchyviewer</code> and <code>ddms</code> to support
-    the new location of <code>adb</code>.</li>
-    <li>Known issues with emulator performance: Because the Android emulator must simulate the ARM
-instruction set architecture on your computer, emulator performance is  slow. We're working hard to
-resolve the performance issues and it will improve in future releases.</li>
-  </ul>
-</dd>
-</dl>
-</div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 8</a> <em>(December 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that SDK Tools r8 is
-designed for use with ADT 8.0.0 and later. After installing SDK Tools r8, we
-highly recommend updating your ADT Plugin to 8.0.0.</p>
-
-<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
-Ant</a> 1.8 or later.</p>
-
-<p>Also note that SDK Tools r8 requires a new SDK component called
-<em>Platform-tools</em>. The new Platform-tools component lets all SDK platforms
-(Android 2.1, Android 2.2, and so on) use the same (latest) version of build
-tools such as <code>adb</code>, <code>aapt</code>, <code>aidl</code>, and
-<code>dx</code>. To download the Platform-tools component, use the Android SDK
-Manager, as described in <a href="adding-components.html">Adding SDK
-Components</a></p>
-
-<dt>Upgrading from SDK Tools r7:</dt>
-<dd>
-<p>If you are upgrading to SDK Tools r8 from an earlier version, note that the
-the default installed location for the <code>adb</code> tool has changed from
-<code>&lt;<em>SDK</em>&gt;/tools/adb</code> to
-<code>&lt;<em>SDK</em>&gt;/platform-tools/adb</code>. This means that you should
-add the new location to your PATH and modify any custom build scripts to
-reference the new location. Copying the <code>adb</code> executable from the new
-location to the old is not recommended, since subsequent updates to the SDK
-Tools will delete the file.</p>
-</dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-<li>All SDK platforms now support Library Projects.</li>
-<li>Support for a true debug build. Developers no longer need to add the
-<code>android:debuggable</code> attribute to the
-<code>&lt;application&gt;</code> tag in the manifest &mdash; the build tools add
-the attribute automatically. In Eclipse/ADT, all incremental builds are assumed
-to be debug builds, so the tools insert <code>android:debuggable="true"</code>.
-When exporting a signed release build, the tools do not add the attribute. In
-Ant, a <code>ant debug</code> command automatically inserts the
-<code>android:debuggable="true"</code> attribute, while <code>ant release</code>
-does not. If <code>android:debuggable="true"</code> is manually set, then
-<code>ant release</code> will actually do a debug build, rather than a release
-build.</li>
-<li>Automatic ProGuard support in release builds. Developers generate a ProGuard
-configuration file using the <code>android</code> tool &mdash; the build tools
-then automatically run ProGuard against the project sources during the build.
-For more information, see the <a
-href="{@docRoot}guide/developing/tools/proguard.html">ProGuard</a>
-documentation. </li>
-<li>New overridable Ant javac properties: <code>java.encoding</code>,
-<code>java.source</code>, and <code>java.target</code> (default values are
-"ascii", "1.5", and "1.5", respectively).</li>
-<li>New UI for the HierarchyViewer tool.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 7</a> <em>(September 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that SDK Tools r7 is
-designed for use with ADT 0.9.8 and later. After installing SDK Tools r7, we
-highly recommend updating your ADT Plugin to 0.9.8.</p>
-</dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-<li>Added support for library projects that depend on other library projects.</li>
-<li>Adds support for aidl files in library projects.</li>
-<li>Adds support for extension targets in Ant build to perform tasks between the
-normal tasks: <code>-pre-build</code>, <code>-pre-compile</code>, and
-<code>-post-compile</code>.</li>
-<li>Adds support for "headless" SDK update. See <code>android -h update sdk</code>
-for more information.</li>
-<li>Fixes location control in DDMS to work in any locale not using '.' as a
-decimal point.</li>
-</ul>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 6</a> <em>(May 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd>
-<p>If you are developing in Eclipse with ADT, note that SDK Tools r6 is
-designed for use with ADT 0.9.7 and later. After installing SDK Tools r6, we
-highly recommend updating your ADT Plugin to 0.9.7.</p>
-</dd>
-
-<dt>Library projects:</dt>
-<dd>
-<p>The SDK Tools now support the use of <em>library projects</em> during
-development, a capability that lets you store shared Android application
-code and resources in a separate development project. You can then reference the
-library project from other Android projects and, at build time, the tools
-compile the shared code and resources as part of the dependent applications.
-More information about this feature is available in the <a
-href="{@docRoot}guide/developing/projects/index.html#LibraryProjects">Creating and Managing Projects</a> document.</p>
-<p>If you are developing in Eclipse, <a href="eclipse-adt.html">ADT</a>
-provides the equivalent library project support.</p>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 5</a> <em>(March 2010)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd><ul>
-<li>If you are developing in Eclipse with ADT, note that SDK Tools r5 is
-designed for use with ADT 0.9.6 and later. After installing SDK Tools r5, we
-highly recommend updating your ADT Plugin to 0.9.6.</li>
-<li>For Mac OS platforms, OS X 10.4.x (Tiger) is no longer
-officially supported. </li>
-</ul>
-</dd>
-
-<dt>SDK and AVD Manager:</dt>
-<dd>
-<ul>
-<li>Fixes SSL download for the standalone version of the SDK Updater.</li>
-<li>Fixes issue with 64-bit JVM on Windows.</li>
-<li>Adds support for platform samples components.</li>
-<li>Improves support for dependency between components.</li>
-<li>AVDs now sorted by API level.</li>
-<li>The AVD creation dialog now enforces a minimum SD card size of 9MB.</li>
-<li>Prevents deletion of running AVDs.</li>
-<li>Settings are now automatically saved, no need to click "Apply".</li>
-</ul>
-</dd>
-
-<dt>Emulator:</dt>
-<dd>
-<ul>
-<li>Emulator now requires SD card to be 9MB or more.</li>
-</ul>
-</dd>
-
-<dt>Layoutopt:</dt>
-<dd>
-<ul>
-<li>Fixes <code>layoutopt.bat</code> to execute correctly on Windows.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 4</a> <em>(December 2009)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd><p>SDK Tools r4 is compatible with ADT 0.9.5 and later, but not
-compatible with earlier versions. If you are developing in Eclipse with ADT, you
-<strong>must</strong> update your ADT plugin to version 0.9.5 or higher if you
-install SDK Tools r4 in your SDK. </p></dd>
-
-<dt>General notes:</dt>
-<dd>
-<ul>
-<li>Launcher script now forces GDK_NATIVE_WINDOW=true (linux only), to fix a
-compatibility issue between GTK and SWT.</li>
-</ul>
-</dd>
-
-<dt>Android SDK and AVD Manager:</dt>
-<dd>
-<ul>
-<li>AVD Launch dialog now shows scale value.</li>
-<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no
-skin name specified.</li>
-<li>Fixes XML validation issue in on older Java versions.</li>
-<li>No longer forces the use of Java 1.5 on Mac OS X.</li>
-</ul>
-</dd>
-
-<dt>Emulator:</dt>
-<dd>
-<ul>
-<li>No longer limits the size of the system partition.</li>
-</ul>
-</dd>
-
-<dt>Ant build tools:</dt>
-<dd>
-<ul>
-<li>.apk packaging now properly ignores vi swap files as well as hidden files.</li>
-</ul>
-</dd>
-</dl>
- </div>
-</div>
-
-<div class="toggleable closed">
-  <a href="#" onclick="return toggleDiv(this)">
-        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
-SDK Tools, Revision 3</a> <em>(October 2009)</em>
-  <div class="toggleme">
-
-<dl>
-<dt>Dependencies:</dt>
-<dd><p>SDK Tools r3 is compatible with ADT 0.9.4 and later, but not
-compatible with earlier versions. If you are developing in Eclipse with ADT, you
-<strong>must</strong> update your ADT plugin to version 0.9.4 or higher if you
-install SDK Tools r3 in your SDK.</p>
-</dd>
-
-<dt>Android tool:</dt>
-<dd>
-<ul>
-<li>Adds new <code>android create test-project</code> and <code>android update
-test-project</code> commands to allow for greater flexibility in the location of the
-main and test projects.</li>
-</ul>
-</dd>
-
-<dt>DDMS:</dt>
-<dd>
-<ul>
-<li>Adds a button to dump HPROF file for running applications (app must be able
-to write to the sdcard).</li>
-<li>Button to start/stop profiling of a running application (app must be able to
-write to the sdcard). Upon stop, Traceview will automatically be launched to
-display the trace.</li>
-<li>Fixed DDMS, Traceview, and the AVD Mananger/SDK Updater to run on Mac OS X
-10.6.</li>
-<li>Fixed screenshot support for devices running 32-bit framebuffer.</li>
-</ul>
-</dd>
-
-<dt>Android SDK and AVD Manager:</dt>
-<dd>
-<ul>
-<li>Provides a new UI that lets you set options for controlling
-the emulator skin, screen size/density, and scale factor used when launching
-an AVD.</li>
-<li>Provides improved AVD creation UI, which lets you customize the hardware
-properties of your AVDs.</li>
-<li>Now enforces dependencies between platforms and tools components, and
-between SDK add-ons and platforms.</li>
-</ul>
-</dd>
-
-<dt>Layoutopt, a new tool for optimizing layouts:</dt>
-
-<dd><p>The SDK Tools r3 package includes <code>layoutopt</code>, a new command-line
-tool that helps you optimize your layout hierarchies. When run against your
-layout files, the tool analyzes their hierarchies and notifies you of
-inefficiencies and other potential issues. The tool also provides simple
-solutions for the issues it finds. For usage, see <a
-href="/guide/developing/tools/layoutopt.html">layoutopt</a>.</p>
-</dd>
-</dl>
- </div>
-</div>
diff --git a/docs/html/sdk/win-usb.jd b/docs/html/sdk/win-usb.jd
index 3be0faf..802615e 100644
--- a/docs/html/sdk/win-usb.jd
+++ b/docs/html/sdk/win-usb.jd
@@ -10,7 +10,7 @@
   </ol>
   <h2>See also</h2>
   <ol>
-    <li><a href="{@docRoot}sdk/oem-usb.html#InstallingDriver">Installing a USB Driver</a></li>
+    <li><a href="{@docRoot}tools/extras/oem-usb.html#InstallingDriver">Installing a USB Driver</a></li>
     <li><a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a></li>
     <li><a href="{@docRoot}sdk/adding-components.html">Adding SDK Packages</a></li>
   </ol>
@@ -30,7 +30,7 @@
   <p>* <em>Or similar hardware on other carriers</em></p>
   
   <p>All other devices require Windows drivers provided by the hardware manufacturer, as listed in
-the <a href="{@docRoot}sdk/oem-usb.html">OEM USB Drivers</a> document. The Galaxy Nexus
+the <a href="{@docRoot}tools/extras/oem-usb.html">OEM USB Drivers</a> document. The Galaxy Nexus
 driver is also distributed by <a
 href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
 (listed as model SCH-I515).</p>
@@ -169,4 +169,4 @@
 downloaded into the <code>&lt;sdk&gt;\extras\google\usb_driver\</code> directory.</li>
 </ol>
 
-<p>For installation information, read <a href="{@docRoot}sdk/oem-usb.html#InstallingDriver">Installing a USB Driver</a>.</p>
+<p>For installation information, read <a href="{@docRoot}tools/extras/oem-usb.html#InstallingDriver">Installing a USB Driver</a>.</p>
diff --git a/docs/html/search.jd b/docs/html/search.jd
deleted file mode 100644
index 407bc86..0000000
--- a/docs/html/search.jd
+++ /dev/null
@@ -1,148 +0,0 @@
-page.title=Search Results
-@jd:body
-
-<script src="http://www.google.com/jsapi" type="text/javascript"></script>
-<script src="{@docRoot}assets/jquery-history.js" type="text/javascript"></script>
-<script type="text/javascript">      
-      var tabIndex = 0;
-            
-      google.load('search', '1');
-
-      function OnLoad() {
-        document.getElementById("search_autocomplete").style.color = "#000";
-
-        // create search control
-        searchControl = new google.search.SearchControl();
-
-        // use our existing search form and use tabs when multiple searchers are used
-        drawOptions = new google.search.DrawOptions();
-        drawOptions.setDrawMode(google.search.SearchControl.DRAW_MODE_TABBED);
-        drawOptions.setInput(document.getElementById("search_autocomplete"));
-
-        // configure search result options
-        searchOptions = new google.search.SearcherOptions();
-        searchOptions.setExpandMode(GSearchControl.EXPAND_MODE_OPEN);
-
-        // configure each of the searchers, for each tab
-        devSiteSearcher = new google.search.WebSearch();
-        devSiteSearcher.setUserDefinedLabel("All");
-        devSiteSearcher.setSiteRestriction("001482626316274216503:zu90b7s047u");
-
-        devGuideSearcher = new google.search.WebSearch();
-        devGuideSearcher.setUserDefinedLabel("Dev Guide");
-        devGuideSearcher.setSiteRestriction("http://developer.android.com/guide/");
-
-        referenceSearcher = new google.search.WebSearch();
-        referenceSearcher.setUserDefinedLabel("Reference");
-        referenceSearcher.setSiteRestriction("http://developer.android.com/reference/");
-
-        blogSearcher = new google.search.WebSearch();
-        blogSearcher.setUserDefinedLabel("Blog");
-        blogSearcher.setSiteRestriction("http://android-developers.blogspot.com");
-
-        groupsSearcher = new google.search.WebSearch();
-        groupsSearcher.setUserDefinedLabel("Developer Groups");
-        groupsSearcher.setSiteRestriction("001283715400630100512:ggqrtvkztwm");
-
-        sourceSiteSearcher = new google.search.WebSearch();
-        sourceSiteSearcher.setUserDefinedLabel("Android Source");
-        sourceSiteSearcher.setSiteRestriction("http://source.android.com");
- 
-        // add each searcher to the search control
-        searchControl.addSearcher(devSiteSearcher, searchOptions);
-        searchControl.addSearcher(devGuideSearcher, searchOptions);
-        searchControl.addSearcher(referenceSearcher, searchOptions);
-        searchControl.addSearcher(groupsSearcher, searchOptions);
-        searchControl.addSearcher(sourceSiteSearcher, searchOptions);
-        searchControl.addSearcher(blogSearcher, searchOptions);
-
-        // configure result options
-        searchControl.setResultSetSize(google.search.Search.LARGE_RESULTSET);
-        searchControl.setLinkTarget(google.search.Search.LINK_TARGET_SELF);
-        searchControl.setTimeoutInterval(google.search.SearchControl.TIMEOUT_LONG);
-        searchControl.setNoResultsString(google.search.SearchControl.NO_RESULTS_DEFAULT_STRING);
-
-        // upon ajax search, refresh the url and search title
-        searchControl.setSearchStartingCallback(this, function(control, searcher, query) {
-            $("#searchTitle").html("search results for <em>" + escapeHTML(query) + "</em>");
-
-            // save the tab index from the hash
-            tabIndex = location.hash.split("&t=")[1];
-            $.history.add('q=' + query + '&t=' + tabIndex);
-        });
-
-        searchControl.setSearchCompleteCallback(this, function(control, searcher) {
-            openTab();
-        });
-
-        // draw the search results box
-        searchControl.draw(document.getElementById("leftSearchControl"), drawOptions);
-
-        // get query and execute the search
-        if (location.hash.indexOf("&t=") != -1) {
-          searchControl.execute(decodeURI(getQuery(location.hash)));
-        }
-
-        document.getElementById("search_autocomplete").focus();
-        addTabListeners();
-      }
-      // End of OnLoad
-
-
-      google.setOnLoadCallback(OnLoad, true);
-
-      // when an event on the browser history occurs (back, forward, load) perform a search
-      $(window).history(function(e, hash) {
-        var query = decodeURI(getQuery(hash));
-        searchControl.execute(query);
-
-        $("#searchTitle").html("search results for <em>" + escapeHTML(query) + "</em>");
-      });
-
-      // forcefully regain key-up event control (previously jacked by search api)
-      $("#search_autocomplete").keyup(function(event) {
-        return search_changed(event, false, '/');
-      });
-
-      // open a tab, specified by its array position
-      function openTab() {
-        tabIndex = location.hash.split("&t=")[1];
-
-        // show the appropriate tab
-        var tabHeaders = $(".gsc-tabHeader");
-        $(tabHeaders[tabIndex]).click();
-      }
-
-      // add event listeners to each tab so we can track the browser history
-      function addTabListeners() {
-        var tabHeaders = $(".gsc-tabHeader");
-        for (var i = 0; i < tabHeaders.length; i++) {
-          $(tabHeaders[i]).attr("id",i).click(function() {
-            var tabHeaders = $(".gsc-tabHeader");
-            var tabIndex = $(this).attr("id");
-            $.history.add('q=' + getQuery(location.hash) + '&t=' + tabIndex); // update the hash with the new tab
-          });
-        }
-      }
-
-      function getQuery(hash) {
-        var hashParts = hash.split('&t=');
-        var queryParts = hashParts[0].split('=');
-        return queryParts[1];
-      }
-
-      /* returns the given string with all HTML brackets converted to entities
-         TODO: move this to the site's JS library */
-      function escapeHTML(string) {
-        return string.replace(/</g,"&lt;")
-                     .replace(/>/g,"&gt;");
-      }
-
-</script>
-
-  <div id="mainBodyFixed" style="width:auto; margin:20px">
-          <h2 id="searchTitle">search results</h2>
-          <img src="{@docRoot}assets/images/hr_gray_main.jpg" />
-          <div><br /></div>
-          <div id="leftSearchControl" class="search-control">Loading...</div>
-  </div>
diff --git a/docs/html/shareables/training/CustomView.zip b/docs/html/shareables/training/CustomView.zip
new file mode 100644
index 0000000..f8c1c7a
--- /dev/null
+++ b/docs/html/shareables/training/CustomView.zip
Binary files differ
diff --git a/docs/html/shareables/training/FragmentBasics.zip b/docs/html/shareables/training/FragmentBasics.zip
index ff5b7f1..b5b19d0 100644
--- a/docs/html/shareables/training/FragmentBasics.zip
+++ b/docs/html/shareables/training/FragmentBasics.zip
Binary files differ
diff --git a/docs/html/shareables/training/NetworkUsage.zip b/docs/html/shareables/training/NetworkUsage.zip
new file mode 100644
index 0000000..8c7fbef
--- /dev/null
+++ b/docs/html/shareables/training/NetworkUsage.zip
Binary files differ
diff --git a/docs/html/shareables/training/OpenGLES.zip b/docs/html/shareables/training/OpenGLES.zip
new file mode 100644
index 0000000..862ae1f
--- /dev/null
+++ b/docs/html/shareables/training/OpenGLES.zip
Binary files differ
diff --git a/docs/html/sitemap-intl.txt b/docs/html/sitemap-intl.txt
index ded0554..9041581 100644
--- a/docs/html/sitemap-intl.txt
+++ b/docs/html/sitemap-intl.txt
@@ -1,11 +1,11 @@
 http://developer.android.com/ja/sdk/1.5_r3/installing.html
 http://developer.android.com/ja/community/index.html
 http://developer.android.com/ja/index.html
-http://developer.android.com/ja/guide/publishing/versioning.html
-http://developer.android.com/ja/guide/publishing/app-signing.html
-http://developer.android.com/ja/guide/publishing/preparing.html
+http://developer.android.com/ja/tools/publishing/versioning.html
+http://developer.android.com/ja/tools/publishing/app-signing.html
+http://developer.android.com/ja/tools/publishing/preparing.html
 http://developer.android.com/ja/guide/tutorials/hello-world.html
-http://developer.android.com/ja/guide/topics/fundamentals.html
+http://developer.android.com/ja/guide/components/fundamentals.html
 http://developer.android.com/ja/guide/index.html
 http://developer.android.com/ja/guide/basics/what-is-android.html
 http://developer.android.com/ja/guide/developing/other-ide.html
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
index 3f26dd0..ee85bd4 100644
--- a/docs/html/sitemap.txt
+++ b/docs/html/sitemap.txt
@@ -5,32 +5,32 @@
 http://developer.android.com/reference/packages.html
 http://developer.android.com/resources/index.html
 http://developer.android.com/videos/index.html
-http://developer.android.com/resources/dashboard/platform-versions.html
+http://developer.android.com/about/dashboards/index.html
 http://developer.android.com/license.html
-http://developer.android.com/sdk/installing.html
-http://developer.android.com/sdk/android-3.0-highlights.html
+http://developer.android.com/sdk/installing/index.html
+http://developer.android.com/about/versions/android-3.0-highlights.html
 http://developer.android.com/sdk/preview/index.html
-http://developer.android.com/sdk/adding-components.html
-http://developer.android.com/sdk/android-2.3.html
-http://developer.android.com/sdk/android-2.3-highlights.html
+http://developer.android.com/sdk/exploring.html
+http://developer.android.com/about/versions/android-2.3.html
+http://developer.android.com/about/versions/android-2.3-highlights.html
 http://developer.android.com/sdk/api_diff/9/changes.html
-http://developer.android.com/sdk/android-2.2.html
-http://developer.android.com/sdk/android-2.1.html
-http://developer.android.com/sdk/android-1.6.html
-http://developer.android.com/sdk/android-1.5.html
-http://developer.android.com/sdk/android-2.0.1.html
-http://developer.android.com/sdk/android-2.0.html
-http://developer.android.com/sdk/android-1.1.html
-http://developer.android.com/sdk/tools-notes.html
+http://developer.android.com/about/versions/android-2.2.html
+http://developer.android.com/about/versions/android-2.1.html
+http://developer.android.com/about/versions/android-1.6.html
+http://developer.android.com/about/versions/android-1.5.html
+http://developer.android.com/about/versions/android-2.0.1.html
+http://developer.android.com/about/versions/android-2.0.html
+http://developer.android.com/about/versions/android-1.1.html
+http://developer.android.com/tools/sdk/tools-notes.html
 http://developer.android.com/sdk/win-usb.html
 http://developer.android.com/sdk/eclipse-adt.html
 http://developer.android.com/sdk/ndk/index.html
 http://developer.android.com/sdk/ndk/overview.html
-http://developer.android.com/sdk/oem-usb.html
+http://developer.android.com/tools/extras/oem-usb.html
 http://developer.android.com/sdk/requirements.html
 http://developer.android.com/sdk/older_releases.html
 http://developer.android.com/guide/basics/what-is-android.html
-http://developer.android.com/guide/topics/fundamentals.html
+http://developer.android.com/guide/components/fundamentals.html
 http://developer.android.com/guide/topics/ui/index.html
 http://developer.android.com/guide/topics/ui/declaring-layout.html
 http://developer.android.com/guide/topics/ui/menus.html
@@ -58,7 +58,7 @@
 http://developer.android.com/guide/topics/resources/string-resource.html
 http://developer.android.com/guide/topics/resources/style-resource.html
 http://developer.android.com/guide/topics/resources/more-resources.html
-http://developer.android.com/guide/topics/intents/intents-filters.html
+http://developer.android.com/guide/components/intents-filters.html
 http://developer.android.com/guide/topics/data/data-storage.html
 http://developer.android.com/guide/topics/data/backup.html
 http://developer.android.com/guide/topics/providers/content-providers.html
@@ -93,62 +93,62 @@
 http://developer.android.com/guide/topics/graphics/opengl.html
 http://developer.android.com/guide/topics/media/index.html
 http://developer.android.com/guide/topics/location/index.html
-http://developer.android.com/guide/topics/location/obtaining-user-location.html
+http://developer.android.com/guide/topics/location/strategies.html
 http://developer.android.com/guide/topics/appwidgets/index.html
-http://developer.android.com/guide/topics/wireless/bluetooth.html
+http://developer.android.com/guide/topics/connectivity/bluetooth.html
 http://developer.android.com/guide/topics/search/index.html
 http://developer.android.com/guide/topics/search/search-dialog.html
 http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html
 http://developer.android.com/guide/topics/search/adding-custom-suggestions.html
 http://developer.android.com/guide/topics/search/searchable-config.html
 http://developer.android.com/guide/topics/admin/device-admin.html
-http://developer.android.com/guide/topics/testing/index.html
-http://developer.android.com/guide/topics/testing/testing_android.html
-http://developer.android.com/guide/topics/testing/activity_testing.html
-http://developer.android.com/guide/topics/testing/contentprovider_testing.html
-http://developer.android.com/guide/topics/testing/service_testing.html
-http://developer.android.com/guide/topics/testing/what_to_test.html
-http://developer.android.com/guide/market/licensing/index.html
-http://developer.android.com/guide/market/billing/index.html
-http://developer.android.com/guide/market/billing/billing_about.html
-http://developer.android.com/guide/market/billing/billing_overview.html
-http://developer.android.com/guide/market/billing/billing_integrate.html
-http://developer.android.com/guide/market/billing/billing_best_practices.html
-http://developer.android.com/guide/market/billing/billing_testing.html
-http://developer.android.com/guide/market/billing/billing_admin.html
-http://developer.android.com/guide/market/billing/billing_reference.html
-http://developer.android.com/guide/appendix/market-filters.html
+http://developer.android.com/tools/testing/index.html
+http://developer.android.com/tools/testing/testing_android.html
+http://developer.android.com/tools/testing/activity_testing.html
+http://developer.android.com/tools/testing/contentprovider_testing.html
+http://developer.android.com/tools/testing/service_testing.html
+http://developer.android.com/tools/testing/what_to_test.html
+http://developer.android.com/guide/google/play/licensing/index.html
+http://developer.android.com/guide/google/play/billing/index.html
+http://developer.android.com/guide/google/play/billing/billing_about.html
+http://developer.android.com/guide/google/play/billing/billing_overview.html
+http://developer.android.com/guide/google/play/billing/billing_integrate.html
+http://developer.android.com/guide/google/play/billing/billing_best_practices.html
+http://developer.android.com/guide/google/play/billing/billing_testing.html
+http://developer.android.com/guide/google/play/billing/billing_admin.html
+http://developer.android.com/guide/google/play/billing/billing_reference.html
+http://developer.android.com/guide/google/play/filters.html
 http://developer.android.com/guide/developing/eclipse-adt.html
 http://developer.android.com/guide/developing/other-ide.html
-http://developer.android.com/guide/developing/device.html
+http://developer.android.com/tools/device.html
 http://developer.android.com/guide/developing/debug-tasks.html
-http://developer.android.com/guide/developing/testing/index.html
-http://developer.android.com/guide/developing/testing/testing_eclipse.html
-http://developer.android.com/guide/developing/testing/testing_otheride.html
-http://developer.android.com/guide/developing/tools/index.html
-http://developer.android.com/guide/developing/tools/aapt.html
-http://developer.android.com/guide/developing/tools/adb.html
-http://developer.android.com/guide/developing/tools/othertools.html
-http://developer.android.com/guide/developing/tools/aidl.html
-http://developer.android.com/guide/developing/tools/avd.html
-http://developer.android.com/guide/developing/tools/bmgr.html
-http://developer.android.com/guide/developing/tools/ddms.html
-http://developer.android.com/guide/developing/tools/draw9patch.html
-http://developer.android.com/guide/developing/tools/emulator.html
-http://developer.android.com/guide/developing/tools/hierarchy-viewer.html
-http://developer.android.com/guide/developing/tools/layoutopt.html
-http://developer.android.com/guide/developing/tools/monkey.html
-http://developer.android.com/guide/developing/tools/monkeyrunner_concepts.html
-http://developer.android.com/guide/developing/tools/MonkeyDevice.html
-http://developer.android.com/guide/developing/tools/MonkeyImage.html
-http://developer.android.com/guide/developing/tools/MonkeyRunner.html
-http://developer.android.com/guide/developing/tools/proguard.html
-http://developer.android.com/guide/developing/tools/traceview.html
-http://developer.android.com/guide/developing/tools/zipalign.html
-http://developer.android.com/guide/publishing/app-signing.html
-http://developer.android.com/guide/publishing/versioning.html
-http://developer.android.com/guide/publishing/preparing.html
-http://developer.android.com/guide/publishing/publishing.html
+http://developer.android.com/tools/testing/index.html
+http://developer.android.com/tools/testing/testing_eclipse.html
+http://developer.android.com/tools/testing/testing_otheride.html
+http://developer.android.com/tools/index.html
+http://developer.android.com/tools/aapt.html
+http://developer.android.com/tools/help/adb.html
+http://developer.android.com/tools/othertools.html
+http://developer.android.com/tools/aidl.html
+http://developer.android.com/tools/avd.html
+http://developer.android.com/tools/bmgr.html
+http://developer.android.com/tools/ddms.html
+http://developer.android.com/tools/draw9patch.html
+http://developer.android.com/tools/help/emulator.html
+http://developer.android.com/tools/hierarchy-viewer.html
+http://developer.android.com/tools/help/layoutopt.html
+http://developer.android.com/tools/monkey.html
+http://developer.android.com/tools/monkeyrunner_concepts.html
+http://developer.android.com/tools/MonkeyDevice.html
+http://developer.android.com/tools/MonkeyImage.html
+http://developer.android.com/tools/MonkeyRunner.html
+http://developer.android.com/tools/proguard.html
+http://developer.android.com/tools/traceview.html
+http://developer.android.com/tools/zipalign.html
+http://developer.android.com/tools/publishing/app-signing.html
+http://developer.android.com/tools/publishing/versioning.html
+http://developer.android.com/tools/publishing/preparing.html
+http://developer.android.com/tools/publishing/publishing.html
 http://developer.android.com/guide/practices/compatibility.html
 http://developer.android.com/guide/practices/screens_support.html
 http://developer.android.com/guide/practices/ui_guidelines/index.html
@@ -160,15 +160,15 @@
 http://developer.android.com/guide/practices/ui_guidelines/icon_design_dialog.html
 http://developer.android.com/guide/practices/ui_guidelines/icon_design_list.html
 http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
-http://developer.android.com/guide/practices/design/performance.html
-http://developer.android.com/guide/practices/design/responsiveness.html
-http://developer.android.com/guide/practices/design/seamlessness.html
+http://developer.android.com/guide/practices/performance.html
+http://developer.android.com/guide/practices/responsiveness.html
+http://developer.android.com/guide/practices/seamlessness.html
 http://developer.android.com/guide/webapps/index.html
 http://developer.android.com/guide/webapps/targeting.html
 http://developer.android.com/guide/webapps/webview.html
 http://developer.android.com/guide/webapps/debugging.html
 http://developer.android.com/guide/webapps/best-practices.html
-http://developer.android.com/guide/appendix/api-levels.html
+http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels
 http://developer.android.com/guide/appendix/install-location.html
 http://developer.android.com/guide/appendix/media-formats.html
 http://developer.android.com/guide/appendix/g-app-intents.html
@@ -209,12 +209,12 @@
 http://developer.android.com/resources/articles/wikinotes-intents.html
 http://developer.android.com/resources/articles/window-bg-speed.html
 http://developer.android.com/resources/articles/zipalign.html
-http://developer.android.com/resources/tutorials/hello-world.html
+http://developer.android.com/training/basics/firstapp/index.html
 http://developer.android.com/resources/tutorials/views/index.html
 http://developer.android.com/resources/tutorials/localization/index.html
 http://developer.android.com/resources/tutorials/testing/helloandroid_test.html
 http://developer.android.com/resources/tutorials/notepad/index.html
-http://developer.android.com/resources/tutorials/testing/activity_test.html
+http://developer.android.com/tools/testing/activity_test.html
 http://developer.android.com/resources/samples/get.html
 http://developer.android.com/resources/samples/index.html
 http://developer.android.com/resources/samples/AccelerometerPlay/index.html
@@ -404,7 +404,7 @@
 http://developer.android.com/reference/android/opengl/GLSurfaceView.html
 http://developer.android.com/reference/android/graphics/Bitmap.html
 http://developer.android.com/sdk/api_diff/3/changes.html
-http://developer.android.com/sdk/android-1.5-highlights.html
+http://developer.android.com/about/versions/android-1.5-highlights.html
 http://developer.android.com/reference/android/widget/SlidingDrawer.html
 http://developer.android.com/reference/android/widget/HorizontalScrollView.html
 http://developer.android.com/reference/android/provider/LiveFolders.html
@@ -412,7 +412,7 @@
 http://developer.android.com/reference/android/speech/RecognizerIntent.html
 http://developer.android.com/reference/android/hardware/SensorManager.html
 http://developer.android.com/sdk/api_diff/6/changes.html
-http://developer.android.com/sdk/android-2.0-highlights.html
+http://developer.android.com/about/versions/android-2.0-highlights.html
 http://developer.android.com/reference/android/widget/QuickContactBadge.html
 http://developer.android.com/reference/android/content/Intent.html
 http://developer.android.com/reference/android/content/Context.html
@@ -503,7 +503,7 @@
 http://developer.android.com/reference/java/text/Normalizer.html
 http://developer.android.com/reference/java/text/Normalizer.Form.html
 http://developer.android.com/sdk/api_diff/8/changes.html
-http://developer.android.com/sdk/android-2.2-highlights.html
+http://developer.android.com/about/versions/android-2.2-highlights.html
 http://developer.android.com/reference/android/opengl/ETC1.html
 http://developer.android.com/reference/android/opengl/ETC1Util.html
 http://developer.android.com/reference/android/opengl/ETC1Util.ETC1Texture.html
@@ -540,7 +540,7 @@
 http://developer.android.com/reference/android/widget/TextView.html
 http://developer.android.com/reference/android/Manifest.permission.html
 http://developer.android.com/sdk/api_diff/4/changes.html
-http://developer.android.com/sdk/android-1.6-highlights.html
+http://developer.android.com/about/versions/android-1.6-highlights.html
 http://developer.android.com/reference/android/view/View.OnClickListener.html
 http://developer.android.com/reference/android/app/SearchManager.html
 http://developer.android.com/reference/android/telephony/SmsManager.html
@@ -942,7 +942,7 @@
 http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
 http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
 http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
-http://developer.android.com/guide/developing/tools/adt.html
+http://developer.android.com/tools/adt.html
 http://developer.android.com/reference/android/graphics/NinePatch.html
 http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
 http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
@@ -5020,7 +5020,7 @@
 http://developer.android.com/resources/samples/MultiResolution/res/drawable-ldpi-v6/ic_launcher.html
 http://developer.android.com/reference/android/app/package-descr.html
 http://developer.android.com/resources/samples/TicTacToeLib/res/layout/lib_game.html
-http://developer.android.com/guide/market/billing/billing-intents
+http://developer.android.com/guide/google/play/billing/billing-intents
 http://developer.android.com/resources/samples/TicTacToeLib/res/values/strings.html
 http://developer.android.com/resources/samples/ApiDemos/res/values-normal-notlong/strings.html
 http://developer.android.com/resources/samples/TicTacToeMain/src/com/example/android/index.html
diff --git a/docs/html/support.jd b/docs/html/support.jd
new file mode 100644
index 0000000..89acd5d
--- /dev/null
+++ b/docs/html/support.jd
@@ -0,0 +1,74 @@
+page.title=Developer Support
+fullpage=1
+@jd:body
+
+<div class="wrap" style="width:940px;">
+
+  <h1>Developer Support Resources</h1>
+<!--
+<p>A variety of support resources are available to help you report and resolve issues while you are developing apps for Android. </p>
+-->
+    <div style="margin: 20px 0 0;">
+
+  <div class="col-8" style="margin-left:0">
+    <h3 style="font-size: 14px;line-height: 21px;color: #555;text-transform: uppercase;border-bottom: 1px solid #CCC;margin: 0 0 20px;">Code-Level Support</h3>
+    
+<h5>Community and Office Hours</h5>
+<p style="color:#888">
+
+<a href="http://groups.google.com/group/android-developers">android-developers</a> support forum<br />
+<a href="http://groups.google.com/group/android-ndk">android-ndk</a> support forum<br />
+<a href="http://groups.google.com/group/android-security-discuss">android-security-discuss</a> support forum<br />
+
+  <a href="http://webchat.freenode.net/?channels=android">#android</a>, <a href="http://webchat.freenode.net/?channels=android-dev">#android-dev</a> <span style="color:#888">(IRC via irc.freenode.net)</span><br />
+  <a href="https://plus.google.com/108967384991768947849/posts">+Android Developers Office Hours</a> <span style="color:#888">(Wednesdays 2 PM PST (UTC-7))</span><br />
+</p>
+
+
+<h5>Send Feedback</h5>
+<p>
+  <a href="http://code.google.com/p/android/issues/entry?template=Developer%20Documentation">Report documentation bug</a><br />
+  <a href="https://code.google.com/p/android/issues/entry?template=User%20bug%20report">Report device bug</a><br />
+  <a href="https://code.google.com/p/android/issues/entry?template=Developer%20bug%20report">Report platform bug</a><br />
+  
+  </div>
+
+  
+  
+  <div class="col-8" style="margin-right:0">
+    <h3 style="font-size: 14px;line-height: 21px;color: #555;text-transform:
+uppercase;border-bottom: 1px solid #CCC;margin: 0 0 20px;">Google Play Support</h3>
+<h5>Help center</h5>
+<p style="color:#888">
+  <a href="http://support.google.com/googleplay/android-developer/">Help&nbsp;Center&nbsp;Home</a><br />
+  <a href="http://support.google.com/googleplay/android-developer/bin/static.py?hl=en&page=known_issues.cs">Known Issues</a><br />
+</p>
+
+<h5 id="contact">Direct support contacts for developers</h5>
+<p style="color:#888">
+  <a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=dev_registration">Registration, account issues</a><br />
+  <a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=publishing">Publishing, app distribution issues</a><br />
+  <a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=bugs">Developer Console issues</a><br />
+  <a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=takedown">Inappropriate apps</a><br />
+  <a href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1085703&topic=15868&ctx=topic">Report a Google Play policy violation</a>
+</p>
+
+<h5>End-user support</h5>
+<p style="color:#888">
+  <a href="http://support.google.com/googleplay/bin/request.py?contact_type=contact_policy&policy=apps">Click-to-call and email support for Google Play end users</a><br />
+</p>  
+
+
+
+  <h5>Payment and Merchant Issues</h5>
+
+<p style="color:#888;margin-bottom:1.5em;">
+  <a href="http://support.google.com/checkout/sell/">Merchant&nbsp;Help&nbsp;Center&nbsp;Home<br />
+  <a href="http://support.google.com/checkout/sell/bin/static.py?hl=en&page=ts.cs&ts=2472700">Issue reporting tool<br />
+  <a href="https://productforums.google.com/forum/#!forum/checkout-merchant">checkout-merchant</a> support forum<br />
+  <a href="http://support.google.com/googleplay/android-developer/bin/request.py?contact_type=survey">Feedback survey</a>
+</p>
+
+
+</div>
+</div>
\ No newline at end of file
diff --git a/docs/html/tools/aidl.jd b/docs/html/tools/aidl.jd
new file mode 100644
index 0000000..805b7ec
--- /dev/null
+++ b/docs/html/tools/aidl.jd
@@ -0,0 +1,465 @@
+page.title=Android Interface Definition Language (AIDL)
+@jd:body
+
+
+<div id="qv-wrapper">
+<div id="qv">
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Defining">Defining an AIDL Interface</a>
+    <ol>
+      <li><a href="#Create">Create the .aidl file</a></li>
+      <li><a href="#Implement">Implement the interface</a></li>
+      <li><a href="#Expose">Expose the interface to clients</a></li>
+    </ol>
+  </li>
+  <li><a href="#PassingObjects">Passing Objects over IPC</a></li>
+  <li><a href="#Calling">Calling an IPC Method</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+  <li><a href="{@docRoot}guide/components/bound-services.html">Bound Services</a></li>
+</ol>
+
+</div>
+</div>
+
+
+<p>AIDL (Android Interface Definition Language) is similar to other IDLs you might have
+worked with. It allows you to define the programming interface that both
+the client and service agree upon in order to communicate with each other using
+interprocess communication (IPC). On Android, one process cannot normally access the
+memory of another process. So to talk, they need to decompose their objects into primitives that the
+operating system can understand, and marshall the objects across that boundary for you. The code to
+do that marshalling is tedious to write, so Android handles it for you with AIDL.</p>
+
+<p class="note"><strong>Note:</strong> Using AIDL is necessary only if you allow clients from
+different applications to access your service for IPC and want to handle multithreading in your
+service. If you do not need to perform concurrent IPC across
+different applications, you should create your interface by <a
+href="{@docRoot}guide/components/bound-services.html#Binder">implementing a
+Binder</a> or, if you want to perform IPC, but do <em>not</em> need to handle multithreading,
+implement your interface <a
+href="{@docRoot}guide/components/bound-services.html#Messenger">using a Messenger</a>.
+Regardless, be sure that you understand <a
+href="{@docRoot}guide/components/bound-services.html">Bound Services</a> before
+implementing an AIDL.</p>
+
+<p>Before you begin designing your AIDL interface, be aware that calls to an AIDL interface are
+direct function calls.  You should not make assumptions about the thread in which the call
+occurs.  What happens is different depending on whether the call is from a thread in the
+local process or a remote process. Specifically:</p>
+
+<ul>
+<li>Calls made from the local process are executed in the same thread that is making the call. If
+this is your main UI thread, that thread continues to execute in the AIDL interface.  If it is
+another thread, that is the one that executes your code in the service.  Thus, if only local
+threads are accessing the service, you can completely control which threads are executing in it (but
+if that is the case, then you shouldn't be using AIDL at all, but should instead create the
+interface by <a href="{@docRoot}guide/components/bound-services.html#Binder">implementing a
+Binder</a>).</li>
+
+<li>Calls from a remote process are dispatched from a thread pool the platform maintains inside of
+your own process.  You must be prepared for incoming calls from unknown threads, with multiple calls
+happening at the same time.  In other words, an implementation of an AIDL interface must be
+completely thread-safe.</li>
+
+<li>The {@code oneway} keyword modifies the behavior of remote calls.  When used, a remote call does
+not block; it simply sends the transaction data and immediately returns.
+The implementation of the interface eventually receives this as a regular call from the {@link
+android.os.Binder} thread pool as a normal remote call. If {@code oneway} is used with a local call,
+there is no impact and the call is still synchronous.</li>
+</ul>
+
+
+<h2 id="Defining">Defining an AIDL Interface</h2>
+
+<p>You must define your AIDL interface in an {@code .aidl} file using the Java
+programming language syntax, then save it in the source code (in the {@code src/} directory) of both
+the application hosting the service and any other application that binds to the service.</p>
+
+<p>When you build each application that contains the {@code .aidl} file, the Android SDK tools
+generate an {@link android.os.IBinder} interface based on the {@code .aidl} file and save it in
+the project's {@code gen/} directory. The service must implement the {@link android.os.IBinder}
+interface as appropriate. The client applications can then bind to the service and call methods from
+the {@link android.os.IBinder} to perform IPC.</p>
+
+<p>To create a bounded service using AIDL, follow these steps:</p>
+<ol>
+    <li><a href="#CreateAidl">Create the .aidl file</a>
+      <p>This file defines the programming interface with method signatures.</p>
+    </li>
+    <li><a href="#ImplementTheInterface">Implement the interface</a>
+      <p>The Android SDK tools generate an interface in the Java programming language, based on your
+{@code .aidl} file. This interface has an inner abstract class named {@code Stub} that extends
+{@link android.os.Binder} and implements methods from your AIDL interface. You must extend the
+{@code Stub} class and implement the methods.</p>
+    </li>
+    <li><a href="#ExposeTheInterface">Expose the interface to clients</a>
+      <p>Implement a {@link android.app.Service Service} and override {@link
+android.app.Service#onBind onBind()} to return your implementation of the {@code Stub}
+class.</p>
+    </li>
+</ol>
+
+<p class="caution"><strong>Caution:</strong> Any changes that you make to your AIDL interface after
+your first release must remain backward compatible in order to avoid breaking other applications
+that use your service. That is, because your {@code .aidl} file must be copied to other applications
+in order for them to access your service's interface, you must maintain support for the original
+interface.</p>
+
+
+<h3 id="Create">1. Create the .aidl file</h3>
+
+<p>AIDL uses a simple syntax that lets you declare an interface with one or more methods that can
+take parameters and return values. The parameters and return values can be of any type, even other
+AIDL-generated interfaces.</p>
+
+<p>You must construct the {@code .aidl} file using the Java programming language. Each {@code .aidl}
+file must define a single interface and requires only the interface declaration and method
+signatures.</p>
+
+<p>By default, AIDL supports the following data types:</p>
+
+<ul>
+  <li>All primitive types in the Java programming language (such as {@code int}, {@code long},
+{@code char}, {@code boolean}, and so on)</li>
+  <li>{@link java.lang.String}</li>
+  <li>{@link java.lang.CharSequence}</li>
+  <li>{@link java.util.List}
+    <p>All elements in the {@link java.util.List} must be one of the supported data types in this
+list or one of the other AIDL-generated interfaces or parcelables you've declared. A {@link
+java.util.List} may optionally be used as a "generic" class (for example,
+<code>List&lt;String&gt;</code>).
+The actual concrete class that the other side receives is always an {@link
+java.util.ArrayList}, although the method is generated to use the {@link
+java.util.List} interface.</p>
+  </li>
+  <li>{@link java.util.Map}
+    <p>All elements in the {@link java.util.Map} must be one of the supported data types in this
+list or one of the other AIDL-generated interfaces or parcelables you've declared.  Generic maps,
+(such as those of the form
+{@code Map&lt;String,Integer&gt;} are not supported. The actual concrete class that the other side
+receives is always a {@link java.util.HashMap}, although the method is generated to
+use the {@link java.util.Map} interface.</p>
+  </li>
+</ul>
+
+<p>You must include an {@code import} statement for each additional type not listed above, even if
+they are defined in the same package as your interface.</p>
+
+<p>When defining your service interface, be aware that:</p>
+<ul>
+  <li>Methods can take zero or more parameters, and return a value or void.</li>
+  <li>All non-primitive parameters require a directional tag indicating which way the data goes.
+Either <code>in</code>, <code>out</code>, or <code>inout</code> (see the example below).
+    <p>Primitives are <code>in</code> by default, and cannot be otherwise.</p>
+    <p class="caution"><strong>Caution:</strong> You should limit the direction to what is truly
+needed, because marshalling parameters is expensive.</p></li>
+  <li>All code comments included in the {@code .aidl} file are included in the generated {@link
+android.os.IBinder} interface (except for comments before the import and package
+statements).</li>
+    <li>Only methods are supported; you cannot expose static fields in AIDL.</li>
+</ul>
+
+<p>Here is an example {@code .aidl} file:</p>
+
+<pre>
+// IRemoteService.aidl
+package com.example.android;
+
+// Declare any non-default types here with import statements
+
+/** Example service interface */
+interface IRemoteService {
+    /** Request the process ID of this service, to do evil things with it. */
+    int getPid();
+
+    /** Demonstrates some basic types that you can use as parameters
+     * and return values in AIDL.
+     */
+    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
+            double aDouble, String aString);
+}
+</pre>
+
+<p>Simply save your {@code .aidl} file in your project's {@code src/} directory and when you
+build your application, the SDK tools generate the {@link android.os.IBinder} interface file in your
+project's {@code gen/} directory. The generated file name matches the {@code .aidl} file name, but
+with a {@code .java} extension (for example, {@code IRemoteService.aidl} results in {@code
+IRemoteService.java}).</p>
+
+<p>If you use Eclipse, the incremental build generates the binder class almost immediately. If you
+do not use Eclipse, then the Ant tool generates the binder class next time you build your
+application&mdash;you should build your project with <code>ant debug</code> (or <code>ant
+release</code>) as soon as you're finished writing the {@code .aidl} file, so that your code can
+link against the generated class.</p>
+
+
+<h3 id="Implement">2. Implement the interface</h3>
+
+<p>When you build your application, the Android SDK tools generate a {@code .java} interface file
+named after your {@code .aidl} file. The generated interface includes a subclass named {@code Stub}
+that is an abstract implementation of its parent interface (for example, {@code
+YourInterface.Stub}) and declares all the methods from the {@code .aidl} file.</p>
+
+<p class="note"><strong>Note:</strong> {@code Stub} also
+defines a few helper methods, most notably {@code asInterface()}, which takes an {@link
+android.os.IBinder} (usually the one passed to a client's {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback method) and
+returns an instance of the stub interface. See the section <a href="#calling">Calling an IPC
+Method</a> for more details on how to make this cast.</p>
+
+<p>To implement the interface generated from the {@code .aidl}, extend the generated {@link
+android.os.Binder} interface (for example, {@code YourInterface.Stub}) and implement the methods
+inherited from the {@code .aidl} file.</p>
+
+<p>Here is an example implementation of an interface called {@code IRemoteService} (defined by the
+{@code IRemoteService.aidl} example, above) using an anonymous instance:</p>
+  
+<pre>
+private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
+    public int getPid(){
+        return Process.myPid();
+    }
+    public void basicTypes(int anInt, long aLong, boolean aBoolean,
+        float aFloat, double aDouble, String aString) {
+        // Does nothing
+    }
+};
+</pre>
+
+<p>Now the {@code mBinder} is an instance of the {@code Stub} class (a {@link android.os.Binder}),
+which defines the RPC interface for the service. In the next step, this instance is exposed to
+clients so they can interact with the service.</p>
+
+<p>There are a few rules you should be aware of when implementing your AIDL interface: </p>
+<ul>
+    <li>Incoming calls are not guaranteed to be executed on the main thread, so you need to think
+about multithreading from the start and properly build your service to be thread-safe.</li>
+    <li>By default, RPC calls are synchronous. If you know that the service takes more than a few
+milliseconds to complete a request, you should not call it from the activity's main thread, because
+it might hang the application (Android might display an &quot;Application is Not Responding&quot;
+dialog)&mdash;you should usually call them from a separate thread in the client. </li>
+    <li>No exceptions that you throw are sent back to the caller.</li>
+</ul>
+
+
+<h3 id="Expose">3. Expose the interface to clients</h3>
+
+<p>Once you've implemented the interface for your service, you need to expose it to
+clients so they can bind to it. To expose the interface
+for your service, extend {@link android.app.Service Service} and implement {@link
+android.app.Service#onBind onBind()} to return an instance of your class that implements
+the generated {@code Stub} (as discussed in the previous section). Here's an example
+service that exposes the {@code IRemoteService} example interface to clients. </p>
+
+<pre>
+public class RemoteService extends Service {
+    &#64;Override
+    public void onCreate() {
+        super.onCreate();
+    }
+
+    &#64;Override
+    public IBinder onBind(Intent intent) {
+        // Return the interface
+        return mBinder;
+    }
+
+    private final IRemoteService.Stub mBinder = new IRemoteService.Stub() {
+        public int getPid(){
+            return Process.myPid();
+        }
+        public void basicTypes(int anInt, long aLong, boolean aBoolean,
+            float aFloat, double aDouble, String aString) {
+            // Does nothing
+        }
+    };
+}
+</pre>
+
+<p>Now, when a client (such as an activity) calls {@link android.content.Context#bindService
+bindService()} to connect to this service, the client's {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback receives the
+{@code mBinder} instance returned by the service's {@link android.app.Service#onBind onBind()}
+method.</p>
+
+<p>The client must also have access to the interface class, so if the client and service are in
+separate applications, then the client's application must have a copy of the {@code .aidl} file
+in its {@code src/} directory (which generates the {@code android.os.Binder}
+interface&mdash;providing the client access to the AIDL methods).</p>
+
+<p>When the client receives the {@link android.os.IBinder} in the {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()} callback, it must call
+<code><em>YourServiceInterface</em>.Stub.asInterface(service)</code> to cast the returned
+parameter to <code><em>YourServiceInterface</em></code> type. For example:</p>
+
+<pre>
+IRemoteService mIRemoteService;
+private ServiceConnection mConnection = new ServiceConnection() {
+    // Called when the connection with the service is established
+    public void onServiceConnected(ComponentName className, IBinder service) {
+        // Following the example above for an AIDL interface,
+        // this gets an instance of the IRemoteInterface, which we can use to call on the service
+        mIRemoteService = IRemoteService.Stub.asInterface(service);
+    }
+
+    // Called when the connection with the service disconnects unexpectedly
+    public void onServiceDisconnected(ComponentName className) {
+        Log.e(TAG, "Service has unexpectedly disconnected");
+        mIRemoteService = null;
+    }
+};
+</pre>
+
+<p>For more sample code, see the <a
+href="{@docRoot}resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html">{@code
+RemoteService.java}</a> class in <a
+href="{@docRoot}resources/samples/ApiDemos/index.html">ApiDemos</a>.</p>
+
+
+
+
+
+
+  
+
+<h2 id="PassingObjects">Passing Objects over IPC</h2>
+
+<p>If you have a class that you would like to send from one process to another through
+an IPC interface, you can do that. However, you must ensure that the code for your class is
+available to the other side of the IPC channel and your class must support the {@link
+android.os.Parcelable} interface. Supporting the {@link android.os.Parcelable} interface is
+important because it allows the Android system to decompose objects into primitives that can be
+marshalled across processes.</p>
+
+<p>To create a class that supports the {@link android.os.Parcelable} protocol, you must do the
+following:</b>
+<ol>
+<li>Make your class implement the {@link android.os.Parcelable} interface.</li>
+<li>Implement {@link android.os.Parcelable#writeToParcel writeToParcel}, which takes the
+current state of the object and writes it to a {@link android.os.Parcel}.</li>
+<li>Add a static field called <code>CREATOR</code> to your class which is an object implementing
+the {@link android.os.Parcelable.Creator Parcelable.Creator} interface.</li>
+<li>Finally, create an {@code .aidl} file that declares your parcelable class (as shown for the
+{@code Rect.aidl} file, below).
+  <p>If you are using a custom build process, do <em>not</em> add the {@code .aidl} file to your
+build. Similar to a header file in the C language, this {@code .aidl} file isn't compiled.</p></li>
+</ol>
+
+<p>AIDL uses these methods and fields in the code it generates to marshall and unmarshall
+your objects.</p>
+
+<p>For example, here is a {@code Rect.aidl} file to create a {@code Rect} class that's
+parcelable:</p>
+
+<pre>
+package android.graphics;
+
+// Declare Rect so AIDL can find it and knows that it implements
+// the parcelable protocol.
+parcelable Rect;
+</pre>
+
+<p>And here is an example of how the {@link android.graphics.Rect} class implements the
+{@link android.os.Parcelable} protocol.</p>
+
+<pre>
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public final class Rect implements Parcelable {
+    public int left;
+    public int top;
+    public int right;
+    public int bottom;
+
+    public static final Parcelable.Creator&lt;Rect&gt; CREATOR = new
+Parcelable.Creator&lt;Rect&gt;() {
+        public Rect createFromParcel(Parcel in) {
+            return new Rect(in);
+        }
+
+        public Rect[] newArray(int size) {
+            return new Rect[size];
+        }
+    };
+
+    public Rect() {
+    }
+
+    private Rect(Parcel in) {
+        readFromParcel(in);
+    }
+
+    public void writeToParcel(Parcel out) {
+        out.writeInt(left);
+        out.writeInt(top);
+        out.writeInt(right);
+        out.writeInt(bottom);
+    }
+
+    public void readFromParcel(Parcel in) {
+        left = in.readInt();
+        top = in.readInt();
+        right = in.readInt();
+        bottom = in.readInt();
+    }
+}
+</pre>
+
+<p>The marshalling in the {@code Rect} class is pretty simple.  Take a look at the other
+methods on {@link android.os.Parcel} to see the other kinds of values you can write
+to a Parcel.</p>
+
+<p class="warning"><strong>Warning:</strong> Don't forget the security implications of receiving
+data from other processes.  In this case, the {@code Rect} reads four numbers from the {@link
+android.os.Parcel}, but it is up to you to ensure that these are within the acceptable range of
+values for whatever the caller is trying to do.  See <a
+href="{@docRoot}guide/topics/security/security.html">Security and Permissions</a> for more
+information about how to keep your application secure from malware.</p>
+
+
+
+<h2 id="Calling">Calling an IPC Method</h2>
+
+<p>Here are the steps a calling class must take to call a remote interface defined with AIDL: </p>
+<ol>
+    <li>Include the {@code .aidl} file in the project {@code src/} directory.</li>
+    <li>Declare an instance of the {@link android.os.IBinder} interface (generated based on the
+AIDL). </li>
+    <li>Implement {@link android.content.ServiceConnection ServiceConnection}. </li>
+    <li>Call {@link
+android.content.Context#bindService(android.content.Intent,android.content.ServiceConnection,int)
+        Context.bindService()}, passing in your {@link
+android.content.ServiceConnection} implementation. </li>
+    <li>In your implementation of {@link
+android.content.ServiceConnection#onServiceConnected onServiceConnected()},
+you will receive an {@link android.os.IBinder} instance (called <code>service</code>). Call
+<code><em>YourInterfaceName</em>.Stub.asInterface((IBinder)<em>service</em>)</code> to
+        cast the returned parameter to <em>YourInterface</em> type.</li>
+    <li>Call the methods that you defined on your interface. You should always trap
+        {@link android.os.DeadObjectException} exceptions, which are thrown when
+        the connection has broken; this will be the only exception thrown by remote
+        methods.</li>
+    <li>To disconnect, call {@link
+android.content.Context#unbindService(android.content.ServiceConnection)
+        Context.unbindService()} with the instance of your interface. </li>
+</ol>
+<p>A few comments on calling an IPC service:</p>
+<ul>
+    <li>Objects are reference counted across processes. </li>
+    <li>You can send anonymous objects
+        as method arguments. </li>
+</ul>
+
+<p>For more information about binding to a service, read the <a
+href="{@docRoot}guide/components/bound-services.html#Binding">Bound Services</a>
+document.</p>
+
+<p>Here is some sample code demonstrating calling an AIDL-created service, taken
+    from the Remote Service sample in the ApiDemos project.</p>
+<p>{@sample development/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.java
+    calling_a_service}</p>
diff --git a/docs/html/tools/avd.html b/docs/html/tools/avd.html
new file mode 100644
index 0000000..1d314a1
--- /dev/null
+++ b/docs/html/tools/avd.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/devices/index.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/devices/index.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/building/building-cmdline.jd b/docs/html/tools/building/building-cmdline.jd
new file mode 100644
index 0000000..6154d96
--- /dev/null
+++ b/docs/html/tools/building/building-cmdline.jd
@@ -0,0 +1,371 @@
+page.title=Building and Running from the Command Line
+parent.title=Building and Running
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+      <ol>
+        <li><a href="#DebugMode">Building in Debug Mode</a></li>
+        <li><a href="#ReleaseMode">Building in Release Mode</a>
+          <ol>
+            <li><a href="#ManualReleaseMode">Build unsigned</a></li>
+            <li><a href="#AutoReleaseMode">Build signed and aligned</a></li>
+            <li><a href="#OnceBuilt">Once built and signed in release mode</a></li>
+          </ol>
+        </li>
+        <li><a href="#RunningOnEmulator">Running on the Emulator</a></li>
+        <li><a href="#RunningOnDevice">Running on a Device</a></li>
+        <li><a href="#Signing">Application Signing</a></li>
+        <li><a href="#AntReference">Ant Command Reference</a></li>
+      </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/devices/managing-avds-cmdline.html">Managing AVDs from
+the Command Line</a></li>
+    <li><a href="{@docRoot}tools/devices/emulator.html">Using the Android
+Emulator</a></li>
+    <li><a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a></li>
+  </ol>
+    </div>
+  </div>
+
+  <p>There are two ways to build your application using the Ant build script: one for
+  testing/debugging your application &mdash; <em>debug mode</em> &mdash; and one for building your
+  final package for release &mdash; <em>release mode</em>. Regardless of which way you build your application,
+  it must be signed before it can install on an emulator or device&mdash;with a debug key when building
+  in debug mode and with your own private key when building in release mode.</p>
+
+  <p>Whether you're building in debug mode or release mode, you need to use the Ant tool to compile
+  and build your project. This will create the .apk file that you can install on an emulator or device.
+  When you build in debug mode, the .apk file is automatically signed by the SDK tools with
+  a debug key, so it's instantly ready for installation onto an emulator or attached
+  development device. You cannot distribute an application that is signed with a debug key.
+  When you build in release mode, the .apk file is <em>unsigned</em>, so you
+  must manually sign it with your own private key, using Keytool and Jarsigner.</p>
+
+  <p>It's important that you read and understand <a href=
+  "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>, particularly once
+  you're ready to release your application and share it with end-users. That document describes the
+  procedure for generating a private key and then using it to sign your .apk file. If you're just
+  getting started, however, you can quickly run your applications on an emulator or your own
+  development device by building in debug mode.</p>
+
+  <p>If you don't have Ant, you can obtain it from the <a href="http://ant.apache.org/">Apache Ant
+  home page</a>. Install it and make sure it is in your executable PATH. Before calling Ant, you
+  need to declare the JAVA_HOME environment variable to specify the path to where the JDK is
+  installed.</p>
+
+  <p class="note"><strong>Note:</strong> When installing JDK on Windows, the default is to install
+  in the "Program Files" directory. This location will cause <code>ant</code> to fail, because of
+  the space. To fix the problem, you can specify the JAVA_HOME variable like this:
+  <pre>set JAVA_HOME=c:\Progra~1\Java\&lt;jdkdir&gt;</pre>
+
+  <p>The easiest solution, however, is to install JDK in a non-space directory, for example:</p>
+
+  <pre>c:\java\jdk1.6.0_02</pre>
+
+  <h2 id="DebugMode">Building in Debug Mode</h2>
+
+  <p>For immediate application testing and debugging, you can build your application in debug mode
+  and immediately install it on an emulator. In debug mode, the build tools automatically sign your
+  application with a debug key and optimize the package with {@code zipalign}.</p>
+
+  <p>To build in debug mode:</p>
+
+  <ol>
+    <li>Open a command-line and navigate to the root of your project directory.</li>
+    <li>Use Ant to compile your project in debug mode:
+      <pre>
+ant debug
+</pre>
+
+      <p>This creates your debug <code>.apk</code> file inside the project <code>bin/</code> directory, named
+      <code>&lt;your_project_name&gt;-debug.apk</code>. The file is already signed with
+      the debug key and has been aligned with
+      <a href="{@docRoot}tools/help/zipalign.html"><code>zipalign</code></a>.
+      </p>
+    </li>
+  </ol>
+
+  <p>Each time you change a source file or resource, you must run Ant again in order to package up
+  the latest version of the application.</p>
+
+  <p>To install and run your application on an emulator, see the following section about <a href=
+  "#RunningOnEmulator">Running on the Emulator</a>.</p>
+
+  <h2 id="ReleaseMode">Building in Release Mode</h2>
+
+  <p>When you're ready to release and distribute your application to end-users, you must build your
+  application in release mode. Once you have built in release mode, it's a good idea to perform
+  additional testing and debugging with the final .apk.</p>
+
+  <p>Before you start building your application in release mode, be aware that you must sign the
+  resulting application package with your private key, and should then align it using the {@code
+  zipalign} tool. There are two approaches to building in release mode: build an unsigned package
+  in release mode and then manually sign and align the package, or allow the build script to sign
+  and align the package for you.</p>
+
+  <h3 id="ManualReleaseMode">Build unsigned</h3>
+
+  <p>If you build your application <em>unsigned</em>, then you will need to manually sign and align
+  the package.</p>
+
+  <p>To build an <em>unsigned</em> .apk in release mode:</p>
+
+  <ol>
+    <li>Open a command-line and navigate to the root of your project directory.</li>
+
+    <li>Use Ant to compile your project in release mode:
+      <pre>
+ant release
+</pre>
+    </li>
+  </ol>
+
+  <p>This creates your Android application .apk file inside the project <code>bin/</code>
+  directory, named <code><em>&lt;your_project_name&gt;</em>-unsigned.apk</code>.</p>
+
+  <p class="note"><strong>Note:</strong> The .apk file is <em>unsigned</em> at this point and can't
+  be installed until signed with your private key.</p>
+
+  <p>Once you have created the unsigned .apk, your next step is to sign the .apk with your private
+  key and then align it with {@code zipalign}. To complete this procedure, read <a href=
+  "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>
+
+  <p>When your <code>.apk</code> has been signed and aligned, it's ready to be distributed to end-users.
+  You should test the final build on different devices or AVDs to ensure that it
+  runs properly on different platforms.</p>
+
+  <h3 id="AutoReleaseMode">Build signed and aligned</h3>
+
+  <p>If you would like, you can configure the Android build script to automatically sign and align
+  your application package. To do so, you must provide the path to your keystore and the name of
+  your key alias in your project's {@code ant.properties} file. With this information provided,
+  the build script will prompt you for your keystore and alias password when you build in release
+  mode and produce your final application package, which will be ready for distribution.</p>
+
+  <p class="caution"><strong>Caution:</strong> Due to the way Ant handles input, the password that
+  you enter during the build process <strong>will be visible</strong>. If you are concerned about
+  your keystore and alias password being visible on screen, then you may prefer to perform the
+  application signing manually, via Jarsigner (or a similar tool). To instead perform the signing
+  procedure manually, <a href="#ManualReleaseMode">build unsigned</a> and then continue with
+  <a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>
+
+  <p>To specify your keystore and alias, open the project {@code ant.properties} file (found in
+  the root of the project directory) and add entries for {@code key.store} and {@code key.alias}.
+  For example:</p>
+  <pre>
+key.store=path/to/my.keystore
+key.alias=mykeystore
+</pre>
+
+  <p>Save your changes. Now you can build a <em>signed</em> .apk in release mode:</p>
+
+  <ol>
+    <li>Open a command-line and navigate to the root of your project directory.</li>
+
+    <li>Use Ant to compile your project in release mode:
+      <pre>
+ant release
+</pre>
+    </li>
+
+    <li>When prompted, enter you keystore and alias passwords.
+
+      <p class="caution"><strong>Caution:</strong> As described above, your password will be
+      visible on the screen.</p>
+    </li>
+  </ol>
+
+  <p>This creates your Android application .apk file inside the project <code>bin/</code>
+  directory, named <code><em>&lt;your_project_name&gt;</em>-release.apk</code>. This .apk file has
+  been signed with the private key specified in {@code ant.properties} and aligned with {@code
+  zipalign}. It's ready for installation and distribution.</p>
+
+  <h3 id="OnceBuilt">Once built and signed in release mode</h3>
+
+  <p>Once you have signed your application with a private key, you can install and run it on an
+  <a href="#RunningOnEmulator">emulator</a> or <a href="#RunningOnDevice">device</a>. You can
+  also try installing it onto a device from a web server. Simply upload the signed .apk to a web
+  site, then load the .apk URL in your Android web browser to download the application and begin
+  installation. (On your device, be sure you have enabled
+  <em>Settings &gt; Applications &gt; Unknown sources</em>.)</p>
+
+  <h2 id="RunningOnEmulator">Running on the Emulator</h2>
+
+  <p>Before you can run your application on the Android Emulator, you must <a href=
+  "{@docRoot}tools/devices/managing-avds.html">create an AVD</a>.</p>
+
+  <p>To run your application:</p>
+
+  <ol>
+    <li>
+      <strong>Open the AVD Manager and launch a virtual device</strong>
+
+      <p>From your SDK's <code>platform-tools/</code> directory, execute the {@code android} tool
+with the <code>avd</code> options:</p>
+      <pre>
+android avd
+</pre>
+
+      <p>In the <em>Virtual Devices</em> view, select an AVD and click <strong>Start</strong>.</p>
+    </li>
+
+    <li>
+      <strong>Install your application</strong>
+
+      <p>From your SDK's <code>tools/</code> directory, install the {@code .apk} on the
+      emulator:</p>
+      <pre>
+adb install <em>&lt;path_to_your_bin&gt;</em>.apk
+</pre>
+
+      <p>Your .apk file (signed with either a release or debug key) is in your project {@code bin/}
+      directory after you build your application.</p>
+
+      <p>If there is more than one emulator running, you must specify the emulator upon which to
+      install the application, by its serial number, with the <code>-s</code> option. For
+      example:</p>
+      <pre>
+adb -s emulator-5554 install <em>path/to/your/app</em>.apk
+</pre>
+
+      <p>To see a list of available device serial numbers, execute {@code adb devices}.</p>
+    </li>
+  </ol>
+
+  <p>If you don't see your application on the emulator, try closing the emulator and launching the
+  virtual device again from the AVD Manager. Sometimes when you install an application for the
+  first time, it won't show up in the application launcher or be accessible by other applications.
+  This is because the package manager usually examines manifests completely only on emulator
+  startup.</p>
+
+  <p>Be certain to create multiple AVDs upon which to test your application. You should have one
+  AVD for each platform and screen type with which your application is compatible. For instance, if
+  your application compiles against the Android 1.5 (API Level 3) platform, you should create an
+  AVD for each platform equal to and greater than 1.5 and an AVD for each <a href=
+  "{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test your
+  application on each one.</p>
+
+  <p class="note"><strong>Tip:</strong> If you have <em>only one</em> emulator running, you can
+  build your application and install it on the emulator in one simple step. Navigate to the root of
+  your project directory and use Ant to compile the project with <em>install mode</em>: <code>ant
+  install</code>. This will build your application, sign it with the debug key, and install it on
+  the currently running emulator.</p>
+
+  <h2 id="RunningOnDevice">Running on a Device</h2>
+
+  <p>Before you can run your application on a device, you must perform some basic setup for your
+  device:</p>
+
+  <ul>
+    <li>Enable USB Debugging on your device. You can find the setting on most Android devices by
+    going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
+
+    <li>Ensure that your development computer can detect your device when connected via USB</li>
+  </ul>
+
+  <p>Read <a href="{@docRoot}tools/device.html#setting-up">Setting up a Device for
+  Development</a> for more information.</p>
+
+  <p>Once your device is set up and connected via USB, navigate to your SDK's <code>platform-tools/</code>
+  directory and install the <code>.apk</code> on the device:</p>
+  <pre>
+adb -d install <em>path/to/your/app</em>.apk
+</pre>
+
+  <p>The {@code -d} flag specifies that you want to use the attached device (in case you also have
+  an emulator running).</p>
+
+  <p>For more information on the tools used above, please see the following documents:</p>
+
+  <ul>
+    <li><a href="{@docRoot}tools/help/android.html">android Tool</a></li>
+
+    <li><a href="{@docRoot}tools/devices/emulator.html">Android Emulator</a></li>
+
+    <li><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a> (ADB)</li>
+  </ul>
+
+  <h2 id="Signing">Application Signing</h2>
+
+  <p>As you begin developing Android applications, understand that all Android applications must be
+  digitally signed before the system will install them on an emulator or device. There are two ways
+  to do this: with a <em>debug key</em> (for immediate testing on an emulator or development
+  device) or with a <em>private key</em> (for application distribution).</p>
+
+  <p>The Android build tools help you get started by automatically signing your .apk files with a
+  debug key at build time. This means that you can compile your application and install it on the
+  emulator without having to generate your own private key. However, please note that if you intend
+  to publish your application, you <strong>must</strong> sign the application with your own private
+  key, rather than the debug key generated by the SDK tools.</p>
+
+  <p>The ADT plugin helps you get started quickly by signing your .apk files with a debug key,
+  prior to installing them on an emulator or development device. This means that you can quickly
+  run your application from Eclipse without having to generate your own private key. No specific
+  action on your part is needed, provided ADT has access to Keytool. However, please note that if
+  you intend to publish your application, you <strong>must</strong> sign the application with your
+  own private key, rather than the debug key generated by the SDK tools.</p>
+
+  <p>Please read <a href="{@docRoot}tools/publishing/app-signing.html">Signing Your
+  Applications</a>, which provides a thorough guide to application signing on Android and what it
+  means to you as an Android application developer. The document also includes a guide to exporting
+  and signing your application with the ADT's Export Wizard.</p>
+
+  <h2 id="AntReference">Ant Command Reference</h2>
+  <dt><code>ant clean</code></dt>
+  <dd>Cleans the project. If you include the <code>all</code> target before <code>clean</code>
+(<code>ant all clean</code>), other projects are also cleaned. For instance if you clean a
+test project, the tested project is also cleaned.</dd>
+
+  <dt><code>ant debug</code></dt>
+  <dd>Builds a debug package. Works on application, library, and test projects and compiles
+  dependencies as  needed.</dd>
+
+  <dt id="emma"><code>ant emma debug</code></dt>
+  <dd>Builds a test project while building the tested project with instrumentation turned on.
+  This is used to run tests with code coverage enabled.</dd>
+
+  <dt><code>ant release</code></dt>
+  <dd>Builds a release package.</dd>
+
+  <dt><code>ant instrument</code>
+  </dt>
+  <dd>Builds an instrumented debug package. This is generally called automatically when building a
+  test project with code coverage enabled (with the <code>emma</code>
+  target)</dd>
+
+  <dt><code>ant &lt;build_target&gt; install</code></dt>
+  <dd>Builds and installs a package. Using <code>install</code> by itself fails.</dd>
+
+  <dt><code>ant installd</code></dt>
+  <dd>Installs an already compiled debug package. This fails if the <code>.apk</code> is not
+  already built.</dd>
+
+  <dt><code>ant installr</code></dt>
+  <dd>Installs an already compiled release package. This fails if the <code>.apk</code> is not
+  already built.</dd>
+
+  <dt><code>ant installt</code></dt>
+  <dd>Installs an already compiled test package. Also installs the <code>.apk</code> of the
+  tested application. This fails if the <code>.apk</code> is not already built.</dd>
+
+  <dt><code>ant installi</code></dt>
+  <dd>Installs an already compiled instrumented package. This is generally not used manually as
+  it's called when installing a test package. This fails if the <code>.apk</code> is not already
+  built.</dd>
+
+   <dt><code>ant test</code></dt>
+   <dd>Runs the tests (for test projects). The tested and test <code>.apk</code> files must be
+   previously installed.</dd>
+
+  <dt><code>ant debug installt test</code></dt>
+  <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
+  runs the tests.</dd>
+
+  <dt><code>ant emma debug install test</code></dt>
+  <dd>Builds a test project and the tested project, installs both <code>.apk</code> files, and
+  runs the tests with code coverage enabled.</dd>
+
diff --git a/docs/html/tools/building/building-eclipse.jd b/docs/html/tools/building/building-eclipse.jd
new file mode 100644
index 0000000..c73fe97
--- /dev/null
+++ b/docs/html/tools/building/building-eclipse.jd
@@ -0,0 +1,165 @@
+page.title=Building and Running from Eclipse with ADT
+parent.title=Building and Running
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#RunningOnEmulatorEclipse">Running on an Emulator</a></li>
+
+        <li><a href="#RunningOnDeviceEclipse">Running on a Device</a></li>
+
+        <li><a href="#RunConfig">Creating a Run Configuration</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Eclipse and ADT provide an environment where most of the details of the build process are
+  hidden from you. By default, the build process constantly runs in the background as you make
+  changes to your project.</p>
+
+  <p>When Eclipse automatically builds your application, it enables debugging and signs the
+  <code>.apk</code> with a debug key, by default. When you run the application,
+  Eclipse invokes ADB and installs your application to a device or emulator, so you do not have to
+  manually perform these tasks. Since most of the build process is taken care of by Eclipse, the
+  following topics show you how to run an application, which will automatically build your
+  application as well.</p>
+
+  <p>To distribute your application, however, you must build your application in release mode and sign the
+  <code>.apk</code> file with your own private key.</p>
+  
+   <p>This document shows you how to run your application on an emulator or a real device 
+   from Eclipse&mdash;all of which is done using the debug version of your application. 
+   For more information about how to sign your application with a private key for release, see <a href=
+  "{@docRoot}tools/publishing/app-signing.html#ExportWizard">Signing Your Applications</a></p>
+
+  <h2 id="RunningOnEmulatorEclipse">Running on the emulator</h2>
+
+  <p>Before you can run your application on the Android Emulator, you must <a href=
+  "{@docRoot}tools/devices/managing-avds.html">create an AVD</a>.</p>
+
+  <p>To run (or debug) your application, select <strong>Run</strong> &gt; <strong>Run</strong> (or
+  <strong>Run</strong> &gt; <strong>Debug</strong>) from the Eclipse menu bar. The ADT plugin will
+  automatically create a default run configuration for the project. Eclipse will then perform the
+  following:</p>
+
+  <ol>
+    <li>Compile the project (if there have been changes since the last build).</li>
+
+    <li>Create a default run configuration (if one does not already exist for the project).</li>
+
+    <li>Install and start the application on an emulator (or device), based on the Deployment
+    Target defined by the run configuration.
+
+      <p>By default, Android run configurations use an "automatic target" mode for selecting a
+      device target. For information on how automatic target mode selects a deployment target, see
+      <a href="#AutoAndManualTargetModes">Automatic and manual target modes</a> below.</p>
+    </li>
+  </ol>
+
+  <p>If you run the application with the Debug option, the application will start in the "Waiting For Debugger" mode. Once the debugger
+  is attached, Eclipse opens the Debug perspective and starts the application's main activity. Otherwise, if you run the
+  application with the normal Run option, Eclipse installs the application on the device and launches the main activity.</p>
+
+  <p>To set or change the run configuration used for your project, use the run configuration
+  manager. See the section below about <a href="#RunConfig">Creating a Run Configuration</a> for more information.</p>
+
+  <p>Be certain to create multiple AVDs upon which to test your application. You should have one
+  AVD for each platform and screen type with which your application is compatible. For instance, if
+  your application compiles against the Android 1.5 (API Level 3) platform, you should create an
+  AVD for each platform equal to and greater than 1.5 and an AVD for each <a href=
+  "{@docRoot}guide/practices/screens_support.html">screen type</a> you support, then test your
+  application on each one.</p>
+
+  <h2 id="RunningOnDeviceEclipse">Running on a device</h2>
+
+  <p>Before you can run your application on a device, you must perform some basic setup for your
+  device:</p>
+
+  <ul>
+    <li>Ensure that your application is debuggable by setting the
+    <code>android:debuggable</code> attribute of the <code>&lt;application&gt;</code>
+    element to <code>true</code>. As of ADT 8.0, this is done by default when you build in debug mode.</li>
+
+    <li>Enable USB Debugging on your device. You can find the setting on most Android devices by
+    going to <strong>Settings > Applications > Development > USB debugging</strong>.</li>
+
+    <li>Ensure that your development computer can detect your device when connected via USB</li>
+  </ul>
+
+  <p>Read <a href="{@docRoot}tools/device.html">Using Hardware Devices</a>
+  for more information.</p>
+
+  <p>Once set up and your device is connected via USB, install your application on the device by
+  selecting <strong>Run</strong> &gt; <strong>Run</strong> (or <strong>Run</strong> &gt;
+  <strong>Debug</strong>) from the Eclipse menu bar.</p>
+
+  <h2 id="RunConfig">Creating a Run Configuration</h2>
+
+  <p>The run configuration specifies the project to run, the Activity to start, the emulator or
+  connected device to use, and so on. When you first run a project as an <em>Android
+  Application</em>, ADT will automatically create a run configuration. The default run
+  configuration will launch the default project Activity and use automatic target mode for device
+  selection (with no preferred AVD). If the default settings don't suit your project, you can
+  customize the run configuration or even create a new one.</p>
+
+  <p>To create or modify a run configuration, refer to the Eclipse documentation on how to create Run configurations.
+  The following steps highlight the important things you need to do for an Android project:</p>
+
+  <ol>
+    <li>Open the run configuration manager from the Run Menu.</li>
+
+    <li>Expand the <strong>Android Application</strong> item and create a new configuration or open
+    an existing one.
+    </li>
+
+    <li>With the Run Configuration selected, adjust your desired run configuration settings:
+      <ul>
+      <li>In the Android tab, specify the Project and Activity to launch.
+      </li>
+      <li><p>In the Target tab, consider whether you'd like to use Manual or Automatic mode when
+      selecting an AVD to run your application. See the following section on <a href=
+      "#AutoAndManualTargetModes">Automatic and manual target modes</a>).</p>
+
+      <p>You can specify any emulator options to the Additional Emulator Command Line Options
+      field. For example, you could add <code>-scale 96dpi</code> to scale the AVD's screen to an
+      accurate size, based on the dpi of your computer monitor. For a full list of emulator
+      options, see the <a href="{@docRoot}tools/help/emulator.html">Android
+      Emulator</a> document.</p>
+      </li>
+      </ul>
+    </li>
+  </ol>
+
+  <h4 id="AutoAndManualTargetModes">Automatic and manual target modes</h4>
+
+  <p>By default, a run configuration uses the <strong>automatic</strong> target mode in order to
+  select an AVD. In this mode, ADT will select an AVD for the application in the following
+  manner:</p>
+
+  <ol>
+    <li>If there's a device or emulator already running and its AVD configuration meets the
+    requirements of the application's build target, the application is installed and run upon
+    it.</li>
+
+    <li>If there's more than one device or emulator running, each of which meets the requirements
+    of the build target, a "device chooser" is shown to let you select which device to use.</li>
+
+    <li>If there are no devices or emulators running that meet the requirements of the build
+    target, ADT looks at the available AVDs. If there is an AVD that matches the build target of the project,
+    ADT chooses that AVD. If the AVD versions are newer than the build target of the project, ADT chooses
+    the oldest possible version of an AVD that meets the project's build target requirement.</li>
+
+    <li>If there are no suitable AVDs, the application is not installed a console error warning tells
+    you that there is no existing AVD that meets the build target requirements.</li>
+  </ol>
+
+  <p>However, if a "preferred AVD" is selected in the run configuration, then the application will
+  <em>always</em> be deployed to that AVD. If it's not already running, then a new emulator will be
+  launched.</p>
+
+  <p>If your run configuration uses <strong>manual</strong> mode, then the "device chooser" is
+  presented every time that your application is run, so that you can select which AVD to use.</p>
\ No newline at end of file
diff --git a/docs/html/tools/building/index.jd b/docs/html/tools/building/index.jd
new file mode 100644
index 0000000..c64942f
--- /dev/null
+++ b/docs/html/tools/building/index.jd
@@ -0,0 +1,81 @@
+page.title=Building and Running
+@jd:body
+
+<div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+      <ol>
+        <li><a href="#detailed-build">A Detailed Look at the Build Process</a></li>
+      </ol>
+    </div>
+  </div>
+  
+ <p>During the build process, your Android projects are compiled and packaged into an .apk file,
+  the container for your application binary. It contains all of the information necessary to run
+  your application on a device or emulator, such as compiled <code>.dex</code> files (<code>.class</code> files
+  converted to Dalvik byte code), a binary version of the <code>AndroidManifest.xml</code> file, compiled
+  resources (<code>resources.arsc</code>) and uncompiled resource files for your application.</p>
+
+  <p>If you are developing in Eclipse, the ADT plugin incrementally builds your project as you
+  make changes to the source code. Eclipse outputs an <code>.apk</code> file automatically to the bin folder of
+  the project, so you do not have to do anything extra to generate the <code>.apk</code>.</p>
+
+  <p>If you are developing in a non-Eclipse environment, you can build your project with the
+  generated <code>build.xml</code> Ant file that is in the project directory. The Ant file calls targets that
+  automatically call the build tools for you.</p>
+
+  <p>To run an application on an emulator or device, the application must be signed using debug or
+  release mode. You typically want to sign your application in debug mode when you develop and test
+  your application, because the build tools use a debug key with a known password so you do not have
+  to enter it every time you build. When you are ready to release the application to Google
+  Play, you must sign the application in release mode, using your own private key.</p>
+
+  <p>Fortunately, Eclipse or your Ant build script signs the application for you in debug mode
+  when you build your application. You can also easily setup Eclipse or your Ant build to sign your
+  application in release mode as well. For more information on signing applications, see <a href=
+  "{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a>.</p>
+  
+  <p>The following diagram depicts the components involved in building and running an application:</p>
+
+  <img src="{@docRoot}images/build-simplified.png" />
+
+  <h2 id="detailed-build">A Detailed Look at the Build Process</h2>
+
+  <p>The build process involves many tools and processes that generate intermediate files on the
+  way to producing an <code>.apk</code>. If you are developing in Eclipse, the complete build process is
+  automatically done periodically as you develop and save your code changes. If you are using other
+  IDEs, this build process is done every time you run the generated Ant build script for your
+  project. It is useful, however, to understand what is happening under the hood since much of the
+  tools and processes are masked from you. The following diagram depicts the different tools and
+  processes that are involved in a build:</p>
+
+  <img src="{@docRoot}images/build.png" />
+
+  <p>The general process for a typical build is outlined below:</p>
+
+  <ul>
+  
+    <li>The Android Asset Packaging Tool (aapt) takes your application resource files, such as the
+    <code>AndroidManifest.xml</code> file and the XML files for your Activities, and compiles them. An <code>R.java</code> is
+    also produced so you can reference your resources from your Java code.</li>
+
+    <li>The aidl tool converts any <code>.aidl</code> interfaces that you have into Java interfaces.</li>
+
+    <li>All of your Java code, including the <code>R.java</code> and <code>.aidl</code> files, are compiled by the Java
+    compiler and .class files are output.</li>
+
+    <li>The dex tool converts the .class files to Dalvik byte code. Any 3rd party libraries and
+    .class files that you have included in your project are also converted into <code>.dex</code> files so that
+    they can be packaged into the final <code>.apk</code> file.</li>
+
+    <li>All non-compiled resources (such as images), compiled resources, and the .dex files are
+    sent to the apkbuilder tool to be packaged into an <code>.apk</code> file.</li>
+
+    <li>Once the <code>.apk</code> is built, it must be signed with either a debug or release key before it can
+    be installed to a device.</li>
+
+    <li>Finally, if the application is being signed in release mode, you must align the <code>.apk</code> with
+    the zipalign tool. Aligning the final <code>.apk</code> decreases memory usage when the application is
+    running on a device.</li>
+  </ul>
+
diff --git a/docs/html/tools/debug-tasks.html b/docs/html/tools/debug-tasks.html
new file mode 100644
index 0000000..2a5bc51
--- /dev/null
+++ b/docs/html/tools/debug-tasks.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/debugging/index.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/debugging/index.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/debugging/ddms.jd b/docs/html/tools/debugging/ddms.jd
new file mode 100644
index 0000000..3d6324b
--- /dev/null
+++ b/docs/html/tools/debugging/ddms.jd
@@ -0,0 +1,357 @@
+page.title=Using DDMS
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+      <li><a href="#running">Running DDMS</a></li>
+        <li><a href="#how-ddms-works">How DDMS Interacts with a Debugger</a></li>
+
+        <li><a href="#using-ddms">Using DDMS</a>
+        <ol>
+                <li><a href="#heap">Viewing heap usage for a process</a></li>
+                <li><a href="#alloc">Tracking memory allocation of objects</a></li>
+                <li><a href="#emulator">Working with an emulator or device's file system</a></li>
+                <li><a href="#thread">Examining thread information</a></li>
+                <li><a href="#profiling">Starting method profiling</a></li>
+                <li><a href="#network">Using the Network Traffic tool</a></li>
+                <li><a href="#logcat">Using LogCat</a></li>
+                <li><a href="#ops-location">Emulating phone operations and location</a></li>
+            </ol>
+        
+        </li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Android ships with a debugging tool called the Dalvik Debug Monitor Server (DDMS), which
+  provides port-forwarding services, screen capture on the device, thread and heap information on
+  the device, logcat, process, and radio state information, incoming call and SMS spoofing,
+  location data spoofing, and more. This page provides a modest discussion of DDMS features; it is
+  not an exhaustive exploration of all the features and capabilities.</p>
+  
+  <h2 id="running">Running DDMS</h2>
+  <p>DDMS is integrated into Eclipse and is also shipped in the <code>tools/</code> directory of the
+  SDK. DDMS works with both the emulator and a connected device. If both are connected and running simultaneously, 
+  DDMS defaults to the emulator.</p>
+  
+  <ul>
+    <li>From Eclipse: Click <strong>Window > Open Perspective > Other... > DDMS</strong>.</li>
+    <li>From the command line: Type <code>ddms</code> (or <code>./ddms</code> on Mac/Linux) from the <code>tools/</code>
+    directory. </li>
+  </ul>
+
+
+  <h2 id="how-ddms-works">How DDMS Interacts with a Debugger</h2>
+
+  <p>On Android, every application runs in its own process, each of which runs in its own virtual machine
+  (VM). Each VM exposes a unique port that a debugger can attach to.</p>
+
+  <p>When DDMS starts, it connects to <a href="{@docRoot}tools/help/adb.html">adb</a>.
+  When a device is connected, a VM monitoring service is created between
+  <code>adb</code> and DDMS, which notifies DDMS when a VM on the device is started or terminated. Once a VM
+  is running, DDMS retrieves the the VM's process ID (pid), via <code>adb</code>, and opens a connection to the
+  VM's debugger, through the adb daemon (adbd) on the device. DDMS can now talk to the VM using a
+  custom wire protocol.</p>
+
+  <p>DDMS assigns a debugging port to each VM on the device. Typically,
+  DDMS assigns port 8600 for the first debuggable VM, the next on 8601, and so on. When a debugger
+  connects to one of these ports, all traffic is forwarded to the debugger from the associated
+  VM. You can only attach a single debugger to a single port, but DDMS can handle multiple, attached
+  debuggers.</p>
+
+  <p>By default, DDMS also listens on another debugging port, the DDMS "base port" (8700, by default).
+  The base port is a port forwarder, which can accept VM traffic from any debugging port and forward
+  it to the debugger on port 8700. This allows you to attach one debugger to port 8700, and debug
+  all the VMs on a device. The traffic that is forwarded is determined by the currently selected process
+  in the DDMS Devices view.</p>
+
+  <p>The following screenshot shows a typical DDMS screen in Eclipse. If you are starting DDMS from
+  the command line, the screen is slightly different, but much of the functionality is identical.
+  Notice that the highlighted process, <code>com.android.email</code>, that is running in the emulator
+  has the debugging port 8700 assigned to it as well as 8606. This signifies that DDMS is currently
+  forwarding port 8606 to the static debugging port of 8700.</p>
+
+  <img src="{@docRoot}images/debug-ddms.png"
+       width="1024" />
+  <p class="img-caption"><strong>Figure 1.</strong> 
+  Screenshot of DDMS</p> 
+
+  <p>If you are not using Eclipse and ADT, read <a href=
+  "{@docRoot}tools/debugging/debugging-projects-cmdline.html#debuggingPort">Configuring
+  your IDE to attach to the debugging port</a>, for more information on attaching your
+  debugger.</p>
+
+  <p class="note"><strong>Tip:</strong> You can set a number of DDMS preferences in
+  <strong>File</strong> &gt; <strong>Preferences</strong>. Preferences are saved to
+  <code>$HOME/.android/ddms.cfg</code>.</p>
+
+  <p class="warning"><strong>Known debugging issues with Dalvik</strong><br />
+  Debugging an application in the Dalvik VM should work the same as it does in other VMs. However,
+  when single-stepping out of synchronized code, the "current line" cursor may jump to the last
+  line in the method for one step.</p>
+
+  <h2 id="using-ddms">Using DDMS</h2>
+  The following sections describe how to use DDMS and the various tabs and panes that are part of the
+  DDMS GUI. The Eclipse version and the command line version have minor UI differences, but the 
+  same functionality. For information on running DDMS, see the previous section in this document,
+  <a href="#running">Running DDMS</a>.
+  
+  
+  <h3 id="heap">Viewing heap usage for a process</h3>
+
+  <p>DDMS allows you to view how much heap memory a process is using. This information is useful in
+  tracking heap usage at a certain point of time during the execution of your application.</p>
+  <p>To view heap usage for a process:</p>
+  <ol>
+    <li>In the Devices tab, select the process that you want to see the heap information for.</li>
+
+    <li>Click the <strong>Update Heap</strong> button to enable heap information for the
+    process.</li>
+
+    <li>In the Heap tab, click <strong>Cause GC</strong> to invoke garbage collection, which
+    enables the collection of heap data. When the operation completes, you will see a group of
+    object types and the memory that has been allocated for each type. You can click <strong>Cause
+    GC</strong> again to refresh the data.</li>
+
+    <li>Click on an object type in the list to see a bar graph that shows the number of objects
+    allocated for a particular memory size in bytes.</li>
+  </ol>
+
+  <h3 id="alloc">Tracking memory allocation of objects</h3>
+
+  <p>DDMS provides a feature to track objects that are being allocated to memory and to see which
+  classes and threads are allocating the objects. This allows you to track, in real time, where
+  objects are being allocated when you perform certain actions in your application. This
+  information is valuable for assessing memory usage that can affect application performance.
+  </p>
+  
+  <p>To track memory allocation of objects:</p>
+  <ol>
+    <li>In the Devices tab, select the process that you want to enable allocation tracking
+    for.</li>
+
+    <li>In the Allocation Tracker tab, click the <strong>Start Tracking</strong> button to begin
+    allocation tracking. At this point, anything you do in your application will be tracked.</li>
+
+    <li>Click <strong>Get Allocations</strong> to see a list of objects that have been allocated
+    since you clicked on the <strong>Start Tracking</strong> button. You can click on <strong>Get
+    Allocations</strong> again to append to the list new objects that that have been
+    allocated.</li>
+
+    <li>To stop tracking or to clear the data and start over, click the <strong>Stop Tracking
+    button</strong>.</li>
+
+    <li>Click on a specific row in the list to see more detailed information such as the method and
+    line number of the code that allocated the object.</li>
+  </ol>
+
+  <h3 id="emulator">Working with an emulator or device's file system</h3>
+
+  <p>DDMS provides a File Explorer tab that allows you to view, copy, and delete files on the
+  device. This feature is useful in examining files that are created by your application or if you
+  want to transfer files to and from the device.</p>
+  
+  <p>To work with an emulator or device's file system:</p>
+  <ol>
+    <li>In the Devices tab, select the emulator that you want to view the file system for.</li>
+
+    <li>To copy a file from the device, locate the file in the File Explorer and click the
+    <strong>Pull file</strong> button.</li>
+
+    <li>To copy a file to the device, click the <strong>Push file</strong> button on the File
+    Explorer tab.</li>
+  </ol>
+  
+  <!-- Need to elaborate more on where things are stored in the file system,
+   databases, apks, user info, files that are important to look at -->
+
+  <h3 id="thread">Examining thread information</h3>
+
+  <p>The Threads tab in DDMS shows you the currently running threads for a selected process.</p>
+
+  <ol>
+    <li>In the Devices tab, select the process that you want to examine the threads for.</li>
+
+    <li>Click the <strong>Update Threads</strong> button.</li>
+
+    <li>In the Threads tab, you can view the thread information for the selected process.</li>
+  </ol>
+
+  <h3 id="profiling">Starting method profiling</h3>
+
+  <p>Method profiling is a means to track certain metrics about a method, such as number of calls,
+  execution time, and time spent executing the method. If you want more granular control over 
+  where profiling data is collected, use the {@link android.os.Debug#startMethodTracing()} and 
+  {@link android.os.Debug#stopMethodTracing()} methods. For more information about generating trace logs, see 
+  <a href="debugging-tracing.html">Profiling and Debugging UIs</a>.</p>
+  
+  <p>Before you start method profiling in DDMS, be aware of the following restrictions:</p>
+    <ul>
+      <li>Android 1.5 devices are not supported.</li>
+      <li>Android 2.1 and earlier devices must
+      have an SD card present and your application must have permission to write to the SD card.
+      <li>Android 2.2 and later devices do not need an SD card. The trace log files are 
+      streamed directly to your development machine.</li>
+    </ul>
+  
+  <p>To start method profiling:</p>
+  <ol>
+    <li>On the Devices tab, select the process that you want to enable method profiling for.</li>
+
+    <li>Click the <strong>Start Method Profiling</strong> button.</li>
+
+    <li>Interact with your application to start the methods that you want to profile.</li>
+
+    <li>Click the <strong>Stop Method Profiling</strong> button. DDMS stops profiling your
+    application and opens <a href="{@docRoot}tools/debugging/debugging-ui.html">Traceview</a>
+    with the method profiling information that was collected
+    between the time you clicked on <strong>Start Method Profiling</strong> and <strong>Stop Method
+    Profiling</strong>.</li>
+  </ol>
+
+   <h3 id="network">Using the Network Traffic tool</h3>
+   
+   <p>In Android 4.0, the DDMS (Dalvik Debug Monitor Server) includes a Detailed
+Network Usage tab that makes it possible to track when your application is
+making network requests. Using this tool, you can monitor how and when your app
+transfers data and optimize the underlying code appropriately. You can also
+distinguish between different traffic types by applying a “tag” to network
+sockets before use.</p>
+
+<p>These tags are shown in a stack area chart in DDMS, as shown in figure 2:</p>
+
+<img src="{@docRoot}images/developing/ddms-network.png" />
+<p class="img-caption"><strong>Figure 2.</strong> Network Usage tab.</p>
+
+<p>By monitoring the frequency of your data transfers, and the amount of data
+transferred during each connection, you can identify areas of your application
+that can be made more battery-efficient. Generally, you should look for
+short spikes that can be delayed, or that should cause a later transfer to be
+pre-empted. </p>
+
+<p>To better identify the cause of transfer spikes, the
+{@link android.net.TrafficStats} API allows you
+to tag the data transfers occurring within a thread using {@link
+android.net.TrafficStats#setThreadStatsTag setThreadStatsTag()}, followed
+by manually tagging (and untagging) individual sockets using {@link
+android.net.TrafficStats#tagSocket tagSocket()} and {@link
+android.net.TrafficStats#untagSocket untagSocket()}. For example:</p>
+
+<pre>TrafficStats.setThreadStatsTag(0xF00D);
+TrafficStats.tagSocket(outputSocket);
+// Transfer data using socket
+TrafficStats.untagSocket(outputSocket);</pre>
+
+<p>Alternatively, the Apache {@link org.apache.http.client.HttpClient} and 
+{@link java.net.URLConnection} APIs included in the platform
+automatically tag sockets internally based on the active tag (as 
+identified by 
+{@link android.net.TrafficStats#getThreadStatsTag getThreadStatsTag()}).
+These APIs correctly tag/untag sockets when recycled through
+keep-alive pools. In the following example,  
+{@link android.net.TrafficStats#setThreadStatsTag setThreadStatsTag()} 
+sets the active tag to be {@code 0xF00D}. 
+There can only be one active tag per thread. 
+That is the value that will 
+be returned by {@link android.net.TrafficStats#getThreadStatsTag getThreadStatsTag()}
+and thus used by {@link org.apache.http.client.HttpClient}  
+ to tag sockets. The {@code finally} statement 
+invokes 
+{@link android.net.TrafficStats#clearThreadStatsTag clearThreadStatsTag()} 
+to clear the tag.</p>
+
+<pre>TrafficStats.setThreadStatsTag(0xF00D);
+    try {
+        // Make network request using HttpClient.execute()
+    } finally {
+        TrafficStats.clearThreadStatsTag();
+}</pre>
+
+<p>Socket tagging is supported in Android 4.0, but real-time stats will only be
+displayed on devices running Android 4.0.3 or higher.</p>
+   
+  <h3 id="logcat">Using LogCat</h3>
+
+  <p>LogCat is integrated into DDMS, and outputs the messages that you print out using the {@link android.util.Log}
+  class along with other system messages such as stack traces when exceptions are thrown. View the
+  <a href="{@docRoot}tools/debugging/debugging-log.html">Reading and
+  Writing Log Messages.</a> topic for more information on how to log messages to the LogCat.</p>
+
+  <p>When you have set up your logging, you can use the LogCat feature of DDMS to filter certain
+  messages with the following buttons:</p>
+
+  <ul>
+    <li>Verbose</li>
+
+    <li>Debug</li>
+
+    <li>Info</li>
+
+    <li>Warn</li>
+
+    <li>Error</li>
+  </ul>
+  
+  <p>You can also setup your own custom filter to specify more details such as filtering messages
+  with the log tags or with the process id that generated the log message. The add filter,
+  edit filter, and delete filter buttons let you manage your custom filters.</p>
+
+  <h3 id="ops-location">Emulating phone operations and location</h3>
+  <p>The Emulator control tab lets you simulate a
+  phone's voice and data network status. This is useful when you want to test your application's
+  robustness in differing network environments.</p>
+
+  <h4>Changing network state, speed, and latency</h4>
+  <p>The Telephony Status section of the Emulator
+  controls tab lets you change different aspects of the phone's networks status, speed and latency.
+  The following options are available to you and are effective immediately after you set them:</p>
+
+  <ul>
+    <li>Voice - unregistered, home, roaming, searching, denied</li>
+
+    <li>Data - unregistered, home, roaming, searching, denied</li>
+
+    <li>Speed - Full, GSM, HSCSD, GPRS, EDGE, UMTS, HSDPA</li>
+
+    <li>Latency - GPRS, EDGE, UMTS</li>
+  </ul>
+
+  <h4>Spoofing calls or SMS text messages</h4>
+  <p>The Telephony Actions section of the Emulator
+  controls tab lets you spoof calls and messages. This is useful when you want to to test your
+  application's robustness in responding to incoming calls and messages that are sent to the phone.
+  The following actions are available to you:</p>
+
+  <ul>
+    <li>Voice - Enter a number in the <strong>Incoming number</strong> field and click 
+    <strong>Call</strong> to send a simulated call to the emulator or phone. Click the
+    <strong>Hang up</strong> button to terminate the call.</li>
+
+    <li>SMS - Enter a number in the <strong>Incoming number</strong> field and a message in the
+    <strong>Message:</strong> field and click the <strong>Send</strong> button to send the
+    message.</li>
+  </ul>
+
+  <h4>Setting the location of the phone</h4>
+  <p>If your application depends on the location of the phone, you can have DDMS send your
+  device or AVD a mock location. This is useful if you
+  want to test different aspects of your application's location specific features without
+  physically moving. The following geolocation data types are available to you:</p>
+
+  <ul>
+    <li>Manual - set the location by manually specifying decimal or sexagesimal longitude and
+    latitude values.</li>
+
+    <li>GPX - GPS eXchange file</li>
+
+    <li>KML - Keyhole Markup Language file</li>
+  </ul>
+  
+  For more information about providing mock location data, see 
+  <a href="{@docRoot}guide/topics/location/strategies.html#MockData">Location Strategies</a>.
+  
diff --git a/docs/html/tools/debugging/debugging-devtools.jd b/docs/html/tools/debugging/debugging-devtools.jd
new file mode 100644
index 0000000..3a05120
--- /dev/null
+++ b/docs/html/tools/debugging/debugging-devtools.jd
@@ -0,0 +1,77 @@
+page.title=Using the Dev Tools App
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+<p>The Dev Tools application is installed by default on all system images included with the SDK,
+  so you can use it with the Android Emulator. With the Dev Tools application, you can enable a
+  number of settings on your device that will make it easier to test and debug your applications.</p>
+
+  <p> The Dev Tools application relies on a number of permissions that are not available for
+  third party applications. If you'd like to install the Dev Tools application
+  on a real development device, you'd have to build a system image for that device and sign
+  the Dev Tools application with the same key as used for the system image.</p>
+
+  <p>To get started, launch the Dev Tools application and select <strong>Development Settings</strong>. This will
+  open the Development Settings page with the following options (among others):</p>
+
+  <dl>
+    <dt><strong>Debug app</strong></dt>
+
+    <dd>
+      Lets you select the application to debug. You do not need to set this to attach a debugger,
+      but setting this value has two effects:
+
+      <ul>
+        <li>It will prevent Android from throwing an error if you pause on a breakpoint for a long
+        time while debugging.</li>
+
+        <li>It will enable you to select the <em>Wait for Debugger</em> option to pause application
+        startup until your debugger attaches (described next).</li>
+      </ul>
+    </dd>
+
+    <dt><strong>Wait for debugger</strong></dt>
+
+    <dd>Blocks the selected application from loading until a debugger attaches. This way you can
+    set a breakpoint in {@link android.app.Activity#onCreate onCreate()}, 
+    which is important to debug the startup process of an Activity.
+    When you change this option, any currently running instances of the selected application will
+    be killed. In order to check this box, you must have selected a debug application as described
+    in the previous option. You can do the same thing by adding {@link
+    android.os.Debug#waitForDebugger()} to your code.</dd>
+
+    <dt><strong>Show screen updates</strong></dt>
+
+    <dd>Flashes a momentary pink rectangle on any screen sections that are being redrawn. This is
+    very useful for discovering unnecessary screen drawing.</dd>
+
+    <dt><strong>Immediately destroy activities</strong></dt>
+
+    <dd>Tells the system to destroy an activity as soon as it is stopped (as if Android had to
+    reclaim memory).&nbsp; This is very useful for testing the {@link
+    android.app.Activity#onSaveInstanceState} / {@link
+    android.app.Activity#onCreate(android.os.Bundle)} code path, which would otherwise be difficult
+    to force. Choosing this option will probably reveal a number of problems in your application
+    due to not saving state. For more information about saving an activity's state, see the
+    <a href="{@docRoot}guide/components/activities.html#SavingActivityState">Activities</a>
+document.</dd>
+
+    <dt><strong>Show CPU usage</strong></dt>
+
+    <dd>Displays CPU meters at the top of the screen, showing how much the CPU is being used. The
+    top red bar shows overall CPU usage, and the green bar underneath it shows the CPU time spent
+    in compositing the screen. 
+    <p class="note">Note: You cannot turn this feature off once it is on, without
+    restarting the emulator.</p></dd>
+
+    <dt><strong>Show background</strong></dt>
+
+    <dd>Displays a background pattern when no activity screens are visible. This typically does not
+    happen, but can happen during debugging.</dd>
+  </dl>
+
+  <p>These settings will be remembered across emulator restarts.</p>
+
+
+
diff --git a/docs/html/tools/debugging/debugging-log.jd b/docs/html/tools/debugging/debugging-log.jd
new file mode 100644
index 0000000..d2baaf2
--- /dev/null
+++ b/docs/html/tools/debugging/debugging-log.jd
@@ -0,0 +1,308 @@
+page.title=Reading and Writing Logs
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#logClass">The Log class</a></li>
+
+        <li><a href="#startingLogcat">Starting LogCat</a></li>
+
+        <li><a href="#filteringOutput">Filtering Log Output</a></li>
+
+        <li><a href="#outputFormat">Controlling Log Output Format</a></li>
+
+        <li><a href="#alternativeBuffers">Viewing Alternative Log Output Buffers</a></li>
+
+        <li><a href="#viewingStd">Viewing stdout and stderr</a></li>
+
+        <li><a href="#DebuggingWebPages">Debugging Web Pages</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>The Android logging system provides a mechanism for collecting and viewing system debug
+  output. Logcat dumps a log of system messages, which include things such as stack traces when the
+  emulator throws an error and messages that you have written from your application by using the
+  {@link android.util.Log} class. You can run LogCat through ADB or from DDMS, which allows you to
+  read the messages in real time.</p>
+
+  <h2 id="logClass">The <code>Log</code> class</h2>
+
+  <p>{@link android.util.Log} is a logging class that you can utilize in your code to print out
+  messages to the LogCat. Common logging methods include:</p>
+
+  <ul>
+    <li>{@link android.util.Log#v(String,String)} (verbose)</li>
+
+    <li>{@link android.util.Log#d(String,String)} (debug)</li>
+
+    <li>{@link android.util.Log#i(String,String)} (information)</li>
+
+    <li>{@link android.util.Log#w(String,String)} (warning)</li>
+
+    <li>{@link android.util.Log#e(String,String)} (error)</li>
+  </ul>For example:
+  <pre class="no-pretty-print">
+Log.i("MyActivity", "MyClass.getView() &mdash; get item number " + position);
+</pre>
+
+  <p>The LogCat will then output something like:</p>
+  <pre class="no-pretty-print">
+I/MyActivity( 1557): MyClass.getView() &mdash; get item number 1
+</pre>
+
+  <h2 id="startingLogcat">Using LogCat</h2>
+
+  <p>You can use LogCat from within DDMS or call it on an ADB shell. For more information on how to
+  use LogCat within DDMS, see <a href="{@docRoot}tools/debugging/ddms.html#logcat">Using
+  DDMS</a>. To run LogCat, through the ADB shell, the general usage is:</p>
+  <pre>
+[adb] logcat [&lt;option&gt;] ... [&lt;filter-spec&gt;] ...
+</pre>
+
+  <p>You can use the <code>logcat</code> command from your development computer or from a remote
+  adb shell in an emulator/device instance. To view log output in your development computer, you
+  use</p>
+  <pre>
+$ adb logcat
+</pre>
+
+  <p>and from a remote adb shell you use</p>
+  <pre>
+# logcat
+</pre>
+
+  <p>The following table describes the <code>logcat</code> command line options:</p>
+
+  <table>
+    <tr>
+      <td><code>-c</code></td>
+
+      <td>Clears (flushes) the entire log and exits.</td>
+    </tr>
+
+    <tr>
+      <td><code>-d</code></td>
+
+      <td>Dumps the log to the screen and exits.</td>
+    </tr>
+
+    <tr>
+      <td><code>-f&nbsp;&lt;filename&gt;</code></td>
+
+      <td>Writes log message output to <code>&lt;filename&gt;</code>. The default is
+      <code>stdout</code>.</td>
+    </tr>
+
+    <tr>
+      <td><code>-g</code></td>
+      <td>Prints the size of the specified log buffer and exits.</td>
+    </tr>
+
+    <tr>
+      <td><code>-n&nbsp;&lt;count&gt;</code></td>
+
+      <td>Sets the maximum number of rotated logs to <code>&lt;count&gt;</code>. The default value
+      is 4. Requires the <code>-r</code> option.</td>
+    </tr>
+
+    <tr>
+      <td><code>-r&nbsp;&lt;kbytes&gt;</code></td>
+
+      <td>Rotates the log file every <code>&lt;kbytes&gt;</code> of output. The default value is
+      16. Requires the <code>-f</code> option.</td>
+    </tr>
+
+    <tr>
+      <td><code>-s</code></td>
+
+      <td>Sets the default filter spec to silent.</td>
+    </tr>
+
+    <tr>
+      <td><code>-v&nbsp;&lt;format&gt;</code></td>
+
+      <td>Sets the output format for log messages. The default is <code>brief</code> format. For a
+      list of supported formats, see <a href="#outputFormat">Controlling Log Output
+      Format</a>.</td>
+    </tr>
+  </table>
+
+  <h3 id="filteringOutput">Filtering Log Output</h3>
+
+  <p>Every Android log message has a <em>tag</em> and a <em>priority</em> associated with it.</p>
+
+  <ul>
+    <li>The tag of a log message is a short string indicating the system component from which the
+    message originates (for example, "View" for the view system).</li>
+
+    <li>The priority is one of the following character values, ordered from lowest to highest
+    priority:</li>
+
+    <li style="list-style: none; display: inline">
+      <ul>
+        <li><code>V</code> &mdash; Verbose (lowest priority)</li>
+
+        <li><code>D</code> &mdash; Debug</li>
+
+        <li><code>I</code> &mdash; Info</li>
+
+        <li><code>W</code> &mdash; Warning</li>
+
+        <li><code>E</code> &mdash; Error</li>
+
+        <li><code>F</code> &mdash; Fatal</li>
+
+        <li><code>S</code> &mdash; Silent (highest priority, on which nothing is ever printed)</li>
+      </ul>
+    </li>
+  </ul>
+
+  <p>You can obtain a list of tags used in the system, together with priorities, by running
+  LogCat and observing the first two columns of each message, given as
+  <code>&lt;priority&gt;/&lt;tag&gt;</code>.</p>
+
+  <p>Here's an example of logcat output that shows that the message relates to priority level "I"
+  and tag "ActivityManager":</p>
+  <pre>
+I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}
+</pre>
+
+  <p>To reduce the log output to a manageable level, you can restrict log output using <em>filter
+  expressions</em>. Filter expressions let you indicate to the system the tags-priority
+  combinations that you are interested in &mdash; the system suppresses other messages for the
+  specified tags.</p>
+
+  <p>A filter expression follows this format <code>tag:priority ...</code>, where <code>tag</code>
+  indicates the tag of interest and <code>priority</code> indicates the <em>minimum</em> level of
+  priority to report for that tag. Messages for that tag at or above the specified priority are
+  written to the log. You can supply any number of <code>tag:priority</code> specifications in a
+  single filter expression. The series of specifications is whitespace-delimited.</p>
+
+  <p>Here's an example of a filter expression that suppresses all log messages except those with
+  the tag "ActivityManager", at priority "Info" or above, and all log messages with tag "MyApp",
+  with priority "Debug" or above:</p>
+  <pre>
+adb logcat ActivityManager:I MyApp:D *:S
+</pre>
+
+  <p>The final element in the above expression, <code>*:S</code>, sets the priority level for all
+  tags to "silent", thus ensuring only log messages with "View" and "MyApp" are displayed. Using
+  <code>*:S</code> is an excellent way to ensure that log output is restricted to the filters that
+  you have explicitly specified &mdash; it lets your filters serve as a "whitelist" for log
+  output.</p>
+
+  <p>The following filter expression displays all log messages with priority level "warning" and higher, on all tags:</p>
+  <pre>
+adb logcat *:W
+</pre>
+
+  <p>If you're running LogCat from your development computer (versus running it on a
+  remote adb shell), you can also set a default filter expression by exporting a value for the
+  environment variable <code>ANDROID_LOG_TAGS</code>:</p>
+  <pre>
+export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"
+</pre>
+
+  <p>Note that <code>ANDROID_LOG_TAGS</code> filter is not exported to the emulator/device
+  instance, if you are running LogCat from a remote shell or using <code>adb shell
+  logcat</code>.</p>
+
+  <h3 id="outputFormat">Controlling Log Output Format</h3>
+
+  <p>Log messages contain a number of metadata fields, in addition to the tag and priority. You can
+  modify the output format for messages so that they display a specific metadata field. To do so,
+  you use the <code>-v</code> option and specify one of the supported output formats listed
+  below.</p>
+
+  <ul>
+    <li><code>brief</code> &mdash; Display priority/tag and PID of the process issuing the
+    message (the default format).</li>
+
+    <li><code>process</code> &mdash; Display PID only.</li>
+
+    <li><code>tag</code> &mdash; Display the priority/tag only.</li>
+
+    <li><code>raw</code> &mdash; Display the raw log message, with no other metadata fields.</li>
+
+    <li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the
+    process issuing the message.</li>
+
+    <li><code>threadtime</code> &mdash; Display the date, invocation time, priority, tag, and
+    the PID and TID of the thread issuing the message.</li>
+
+    <li><code>long</code> &mdash; Display all metadata fields and separate messages with blank
+    lines.</li>
+  </ul>
+
+  <p>When starting LogCat, you can specify the output format you want by using the
+  <code>-v</code> option:</p>
+  <pre>
+[adb] logcat [-v &lt;format&gt;]
+</pre>
+
+  <p>Here's an example that shows how to generate messages in <code>thread</code> output
+  format:</p>
+  <pre>
+adb logcat -v thread
+</pre>
+
+  <p>Note that you can only specify one output format with the <code>-v</code> option.</p>
+
+  <h3 id="alternativeBuffers">Viewing Alternative Log Buffers</h3>
+
+  <p>The Android logging system keeps multiple circular buffers for log messages, and not all of
+  the log messages are sent to the default circular buffer. To see additional log messages, you can
+  run the <code>logcat</code> command with the <code>-b</code> option, to request viewing of an alternate
+  circular buffer. You can view any of these alternate buffers:</p>
+
+  <ul>
+    <li><code>radio</code> &mdash; View the buffer that contains radio/telephony related
+    messages.</li>
+
+    <li><code>events</code> &mdash; View the buffer containing events-related messages.</li>
+
+    <li><code>main</code> &mdash; View the main log buffer (default)</li>
+  </ul>
+
+  <p>The usage of the <code>-b</code> option is:</p>
+  <pre>
+[adb] logcat [-b &lt;buffer&gt;]
+</pre>
+
+  <p>Here's an example of how to view a log buffer containing radio and telephony messages:</p>
+  <pre>
+adb logcat -b radio
+</pre><a name="stdout"
+        id="stdout"></a>
+
+  <h2 id="viewingStd">Viewing stdout and stderr</h2>
+
+  <p>By default, the Android system sends <code>stdout</code> and <code>stderr</code>
+  (<code>System.out</code> and <code>System.err</code>) output to <code>/dev/null</code>. In
+  processes that run the Dalvik VM, you can have the system write a copy of the output to the log
+  file. In this case, the system writes the messages to the log using the log tags
+  <code>stdout</code> and <code>stderr</code>, both with priority <code>I</code>.</p>
+
+  <p>To route the output in this way, you stop a running emulator/device instance and then use the
+  shell command <code>setprop</code> to enable the redirection of output. Here's how you do it:</p>
+  <pre>
+$ adb shell stop
+$ adb shell setprop log.redirect-stdio true
+$ adb shell start
+</pre>
+
+  <p>The system retains this setting until you terminate the emulator/device instance. To use the
+  setting as a default on the emulator/device instance, you can add an entry to
+  <code>/data/local.prop</code> on the device.</p>
+
+  <h2 id="DebuggingWebPages">Debugging Web Apps</h2>
+  <p>
+  If you're developing a web application for Android, you can debug your JavaScript using the console JavaScript APIs,
+  which output messages to LogCat. For more information, see
+  <a href="{@docRoot}guide/webapps/debugging.html">Debugging Web Apps</a>.</p>
diff --git a/docs/html/tools/debugging/debugging-projects-cmdline.jd b/docs/html/tools/debugging/debugging-projects-cmdline.jd
new file mode 100644
index 0000000..0b79575
--- /dev/null
+++ b/docs/html/tools/debugging/debugging-projects-cmdline.jd
@@ -0,0 +1,78 @@
+page.title=Debugging from Other IDEs
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#start-debugging">Starting a Debugging Environment</a>
+        <ul>
+          <li><a href="#debuggingPort">Configuring Your IDE to Attach to the Debugging Port</a></li>
+        </ul>
+        </li>
+      </ol>
+    </div>
+  </div>
+ 
+  <p>If you are not using Eclipse to develop, you can still take advantage of all the tools that
+  the Android SDK provides for debugging. A basic debugging environment consists of:</p>
+
+  <ul>
+    <li><a href="{@docRoot}tools/help/adb.html">ADB</a></li>
+
+    <li><a href="{@docRoot}tools/debugging/ddms.html">DDMS</a></li>
+
+    <li>Java Debugger</li>
+  </ul>
+  
+  <p>You need to obtain a JDWP-compliant Java debugger to properly debug your application.
+  Most Java IDEs will already have one included, or you can use a command line debugger,
+  such as JDB, if you are using a simple text editor to develop applications.</p>
+
+  <h2 id="start-debugging">Starting a debugging environment</h2>
+  <p>A Java Debugger assists you in finding problems with
+  your code by letting you set breakpoints, step through execution of your application, and examine
+  variable values. Since you are not using Eclipse, you have to manually start up the debugging
+  environment yourself by running a few tools that are provided in the Android SDK. To begin
+  debugging your application, follow these general steps:</p>
+
+  <ol>
+    <li>Load an AVD with the Android emulator or connect a device to your computer.</li>
+    
+    <li>Start DDMS from the sdk <code>/tools</code> directory. This also starts ADB if it is 
+    not already started. You should see your device appear in DDMS.</li>
+
+    <li>Install and run your <code>.apk</code> file on the device or emulator. In DDMS, you should see your
+    application running under the device that you installed it to.</li>
+
+    <li>Attach your debugger to the debugging port 8700, or to the specific port shown for the
+    application in DDMS.</li>
+  </ol>
+
+  <h3 id="debuggingPort">Configuring Your IDE to Attach to the Debugging Port</h3>
+
+  <p>DDMS assigns a specific debugging port to every virtual machine that it finds on the
+  emulator. You must either attach your IDE to that port (listed on the Info tab for that VM), or
+  you can use a default port 8700 to connect to whatever application is currently selected on the
+  list of discovered virtual machines.</p>
+
+  <p>Your IDE should attach to your application running on the emulator, showing you its threads
+  and allowing you to suspend them, inspect their state, and set breakpoints. If you selected "Wait
+  for debugger" in the Development settings panel the application will run when Eclipse connects,
+  so you will need to set any breakpoints you want before connecting.</p>
+
+  <p>Changing either the application being debugged or the "Wait for debugger" option causes the
+  system to kill the selected application if it is currently running. You can use this to kill your
+  application if it is in a bad state by simply going to the settings and toggling the
+  checkbox.</p>
+
+
+
+
+
+
+
diff --git a/docs/html/guide/developing/debugging/debugging-projects.jd b/docs/html/tools/debugging/debugging-projects.jd
similarity index 100%
rename from docs/html/guide/developing/debugging/debugging-projects.jd
rename to docs/html/tools/debugging/debugging-projects.jd
diff --git a/docs/html/tools/debugging/debugging-tracing.jd b/docs/html/tools/debugging/debugging-tracing.jd
new file mode 100644
index 0000000..f0d0c0b
--- /dev/null
+++ b/docs/html/tools/debugging/debugging-tracing.jd
@@ -0,0 +1,402 @@
+page.title=Profiling with Traceview and dmtracedump
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li>
+          <a href="#traceviewLayout">Traceview Layout</a>
+
+          <ol>
+            <li><a href="#timelinepanel">Timeline Panel</a></li>
+
+            <li><a href="#profilepanel">Profile Panel</a></li>
+          </ol>
+        </li>
+
+        <li>
+          <a href="#format">Traceview File Format</a>
+          <ol>
+            <li><a href="#datafileformat">Data File Format</a></li>
+
+            <li><a href="#keyfileformat">Key File Format</a></li>
+          </ol>
+        </li>
+
+        <li><a href="#creatingtracefiles">Creating Trace Files</a></li>
+
+        <li><a href="#copyingfiles">Copying Trace Files to a Host Machine</a></li>
+
+        <li><a href="#runningtraceview">Viewing Trace Files in Traceview</a></li>
+
+        <li><a href="#dmtracedump">Using dmtracedump</a></li>
+        
+        <li><a href="#knownissues">Traceview Known Issues</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Traceview is a graphical viewer for execution logs that you create by using the {@link
+  android.os.Debug} class to log tracing information in your code. Traceview can help you debug
+  your application and profile its performance.</p>
+
+  <h2 id="traceviewLayout">Traceview Layout</h2>
+
+  <p>When you have a trace log file (generated by adding tracing code to your application or by DDMS),
+  you can have Traceview load the log files and display their data in a window visualizes your application
+  in two panels:</p>
+
+  <ul>
+    <li>A <a href="#timelinepanel">timeline panel</a> -- describes when each thread and method
+    started and stopped</li>
+
+    <li>A <a href="#timelinepanel">profile panel</a> -- provides a summary of what happened inside
+    a method</li>
+  </ul>
+
+  <p>The sections below provide addition information about the traceview output panes.</p>
+  
+  <h3 id="timelinepanel">Timeline Panel</h3>
+
+  <p>The image below shows a close up of the timeline panel. Each thread&rsquo;s execution is shown
+  in its own row, with time increasing to the right. Each method is shown in another color (colors
+  are reused in a round-robin fashion starting with the methods that have the most inclusive time).
+  The thin lines underneath the first row show the extent (entry to exit) of all the calls to the
+  selected method. The method in this case is <code>LoadListener.nativeFinished()</code> and it was selected in
+  the profile view.</p>
+
+  <img src="{@docRoot}images/traceview_timeline.png"
+       alt="Traceview timeline panel"
+       width="893"
+       height="284" />
+       <p class="img-caption"><strong>Figure 1.</strong> The Traceview Timeline Panel</p>
+
+  <h3 id="profilepanel">Profile Panel</h3>
+
+  <p>Figure 2 shows the profile pane, a summary of all the time spent
+  in a method. The table shows both the inclusive and exclusive times (as well as the percentage of
+  the total time). Exclusive time is the time spent in the method. Inclusive time is the time spent
+  in the method plus the time spent in any called functions. We refer to calling methods as
+  "parents" and called methods as "children." When a method is selected (by clicking on it), it
+  expands to show the parents and children. Parents are shown with a purple background and children
+  with a yellow background. The last column in the table shows the number of calls to this method
+  plus the number of recursive calls. The last column shows the number of calls out of the total
+  number of calls made to that method. In this view, we can see that there were 14 calls to
+  <code>LoadListener.nativeFinished();</code> looking at the timeline panel shows that one of those calls took
+  an unusually long time.</p>
+
+  <img src="{@docRoot}images/traceview_profile.png"
+       alt="Traceview profile panel."
+       width="892"
+       height="630" />
+  <p class="img-caption"><strong>Figure 2.</strong> The Traceview Profile Panel</p>
+
+  <h2 id="format">Traceview File Format</h2>
+
+  <p>Tracing creates two distinct pieces of output: a <em>data</em> file, which holds the trace
+  data, and a <em>key</em> file, which provides a mapping from binary identifiers to thread and
+  method names. The files are concatenated when tracing completes, into a single <em>.trace</em>
+  file.</p>
+
+  <p class="note"><strong>Note:</strong> The previous version of Traceview did not concatenate
+  these files for you. If you have old key and data files that you'd still like to trace, you can
+  concatenate them yourself with <code>cat mytrace.key mytrace.data &gt;
+  mytrace.trace</code>.</p>
+
+  <h3 id="datafileformat">Data File Format</h3>
+
+  <p>The data file is binary, structured as follows (all values are stored in little-endian
+  order):</p>
+  <pre>
+* File format:
+* header
+* record 0
+* record 1
+* ...
+*
+* Header format:
+* u4 magic 0x574f4c53 ('SLOW')
+* u2 version
+* u2 offset to data
+* u8 start date/time in usec
+*
+* Record format:
+* u1 thread ID
+* u4 method ID | method action
+* u4 time delta since start, in usec
+</pre>
+
+  <p>The application is expected to parse all of the header fields, then seek to "offset to data"
+  from the start of the file. From there it just reads 9-byte records until EOF is reached.</p>
+
+  <p><em>u8 start date/time in usec</em> is the output from <code>gettimeofday()</code>. It's mainly there so
+  that you can tell if the output was generated yesterday or three months ago.</p>
+
+  <p><em>method action</em> sits in the two least-significant bits of the <em>method</em> word. The
+  currently defined meanings are:</p>
+
+  <ul>
+    <li>0 - method entry</li>
+
+    <li>1 - method exit</li>
+
+    <li>2 - method "exited" when unrolled by exception handling</li>
+
+    <li>3 - (reserved)</li>
+  </ul>
+
+  <p>An unsigned 32-bit integer can hold about 70 minutes of time in microseconds.</p>
+
+  <h3 id="keyfileformat">Key File Format</h3>
+
+  <p>The key file is a plain text file divided into three sections. Each section starts with a
+  keyword that begins with '*'. If you see a '*' at the start of a line, you have found the start
+  of a new section.</p>
+
+  <p>An example file might look like this:</p>
+  <pre>
+*version
+1
+clock=global
+*threads
+1 main
+6 JDWP Handler
+5 Async GC
+4 Reference Handler
+3 Finalizer
+2 Signal Handler
+*methods
+0x080f23f8 java/io/PrintStream write ([BII)V
+0x080f25d4 java/io/PrintStream print (Ljava/lang/String;)V
+0x080f27f4 java/io/PrintStream println (Ljava/lang/String;)V
+0x080da620 java/lang/RuntimeException   &lt;init&gt;    ()V
+[...]
+0x080f630c android/os/Debug startMethodTracing ()V
+0x080f6350 android/os/Debug startMethodTracing (Ljava/lang/String;Ljava/lang/String;I)V
+*end
+</pre>
+<p>The following list describes the major sections of a key file:</p>
+  <dl>
+    <dt><em>version section</em></dt>
+
+    <dd>The first line is the file version number, currently 1. The second line,
+    <code>clock=global</code>, indicates that we use a common clock across all threads. A future
+    version may use per-thread CPU time counters that are independent for every thread.</dd>
+
+    <dt><em>threads section</em></dt>
+
+    <dd>One line per thread. Each line consists of two parts: the thread ID, followed by a tab,
+    followed by the thread name. There are few restrictions on what a valid thread name is, so
+    include everything to the end of the line.</dd>
+
+    <dt><em>methods section</em></dt>
+
+    <dd>One line per method entry or exit. A line consists of four pieces, separated by tab marks:
+    <em>method-ID</em> [TAB] <em>class-name</em> [TAB] <em>method-name</em> [TAB]
+    <em>signature</em> . Only the methods that were actually entered or exited are included in the
+    list. Note that all three identifiers are required to uniquely identify a method.</dd>
+  </dl>
+
+  <p>Neither the threads nor methods sections are sorted.</p>
+
+  <h2 id="creatingtracefiles">Creating Trace Files</h2>
+
+  <p>To use Traceview, you need to generate log files containing the trace information you want to
+  analyze.</p>
+  
+  <p>There are two ways to generate trace logs:</p>
+  <ul>
+    <li>Include the {@link android.os.Debug} class in your code and call its
+  methods to start and stop logging of trace information to disk. This method is very precise because
+  you can specify in your code exactly where to start and stop logging trace data.</li>
+    <li>Use the method profiling feature of DDMS to generate trace logs. This method is less
+    precise since you do not modify code, but rather specify when to start and stop logging with
+    a DDMS. Although you have less control on exactly where the data is logged, this method is useful 
+    if you don't have access to the application's code, or if you do not need the precision of the first method.
+    </li>
+  </ul>
+  
+  <p>Before you start generating trace logs, be aware of the following restrictions:</p>
+  <ul>
+    <li>If you are using the {@link android.os.Debug} class, your device or emulator must have an SD card
+     and your application must have permission to write to the SD card. </li>
+    <li>If you are using DDMS, Android 1.5 devices are not supported.</li>
+    <li>If you are using DDMS, Android 2.1 and earlier devices must
+    have an SD card present and your application must have permission to write to the SD card.
+    <li>If you are using DDMS, Android 2.2 and later devices do not need an SD card. The trace log files are 
+    streamed directly to your development machine.</li>
+  </ul>
+  
+  <p>This document focuses on using the {@link android.os.Debug} class to generate trace data.  For more information on using DDMS
+  to generate trace data, see <a href="ddms.html#profiling">Using the Dalvik Debug Monitor Server.</a>
+  </p>
+  
+  <p>To create the trace files, include the {@link android.os.Debug} class and call one of the
+  {@link android.os.Debug#startMethodTracing() startMethodTracing()} methods. In the call, you
+  specify a base name for the trace files that the system generates. To stop tracing, call {@link
+  android.os.Debug#stopMethodTracing() stopMethodTracing()}. These methods start and stop method
+  tracing across the entire virtual machine. For example, you could call 
+  {@link android.os.Debug#startMethodTracing() startMethodTracing()} in
+  your activity's {@link android.app.Activity#onCreate onCreate()} method, and call
+  {@link android.os.Debug#stopMethodTracing() stopMethodTracing()} in that activity's
+  {@link android.app.Activity#onDestroy()} method.</p>
+  <pre>
+    // start tracing to "/sdcard/calc.trace"
+    Debug.startMethodTracing("calc");
+    // ...
+    // stop tracing
+    Debug.stopMethodTracing();
+</pre>
+
+  <p>When your application calls startMethodTracing(), the system creates a file called
+  <code>&lt;trace-base-name&gt;.trace</code>. This contains the binary method trace data and a
+  mapping table with thread and method names.</p>
+
+  <p>The system then begins buffering the generated trace data, until your application calls
+  stopMethodTracing(), at which time it writes the buffered data to the output file. If the system
+  reaches the maximum buffer size before stopMethodTracing() is called, the system stops tracing
+  and sends a notification to the console.</p>
+
+  <p>Interpreted code will run more slowly when profiling is enabled. Don't try to generate
+  absolute timings from the profiler results (i.e. "function X takes 2.5 seconds to run"). The
+  times are only useful in relation to other profile output, so you can see if changes have made
+  the code faster or slower.</p>
+
+  <p>When using the Android emulator, you must specify an SD card when you create your AVD because the trace files
+  are written to the SD card. Your application must have permission to write to the SD card as well.
+
+  <p>The format of the trace files is previously described <a href="#format">in this
+  document</a>.</p>
+
+  <h2 id="copyingfiles">Copying Trace Files to a Host Machine</h2>
+
+  <p>After your application has run and the system has created your trace files
+  <code>&lt;trace-base-name&gt;.trace</code> on a device or emulator, you must copy those files to
+  your development computer. You can use <code>adb pull</code> to copy the files. Here's an example
+  that shows how to copy an example file, calc.trace, from the default location on the emulator to
+  the /tmp directory on the emulator host machine:</p>
+  <pre>
+adb pull /sdcard/calc.trace /tmp
+</pre>
+
+  <h2 id="runningtraceview">Viewing Trace Files in Traceview</h2>
+
+  <p>To run Traceview and view the trace files, enter <code>traceview
+  &lt;trace-base-name&gt;</code>. For example, to run Traceview on the example files copied in the
+  previous section, use:</p>
+  <pre>
+traceview /tmp/calc
+</pre>
+
+  <p class="note"><strong>Note:</strong> If you are trying to view the trace logs of an application 
+  that is built with ProGuard enabled (release mode build), some method and member names might be obfuscated.
+  You can use the Proguard <code>mapping.txt</code> file to figure out the original unobfuscated names. For more information
+  on this file, see the <a href="{@docRoot}tools/help/proguard.html">Proguard</a> documentation.</p>
+
+      <h2 id="dmtracedump">Using dmtracdedump</h2>
+
+      <p><code>dmtracedump</code> is a tool that gives you an alternate way of generating
+      graphical call-stack diagrams from trace log files. The tool uses the Graphviz Dot utility to
+      create the graphical output, so you need to install Graphviz before running dmtracedump.</p>
+
+      <p>The dmtracedump tool generates the call stack data as a tree diagram, with each call
+      represented as a node. It shows call flow (from parent node to child nodes) using arrows. The
+      diagram below shows an example of dmtracedump output.</p>
+      <img src=
+      "{@docRoot}images/tracedump.png"
+          width="485"
+          height="401" />
+       <p class="image-caption"><strong>Figure 3.</strong> Screenshot of dmtracedump</p>
+
+      <p>For each node, dmtracedump shows <code>&lt;ref&gt;
+      <em>callname</em> (&lt;inc-ms&gt;, &lt;exc-ms&gt;,&lt;numcalls&gt;)</code>, where</p>
+
+      <ul>
+        <li><code>&lt;ref&gt;</code> -- Call reference number, as used in trace logs</li>
+
+        <li><code>&lt;inc-ms&gt;</code> -- Inclusive elapsed time (milliseconds spent in method,
+        including all child methods)</li>
+
+        <li><code>&lt;exc-ms&gt;</code> -- Exclusive elapsed time (milliseconds spent in method,
+        not including any child methods)</li>
+
+        <li><code>&lt;numcalls&gt;</code> -- Number of calls</li>
+      </ul>
+
+      <p>The usage for dmtracedump is:</p>
+      <pre>
+dmtracedump [-ho] [-s sortable] [-d trace-base-name] [-g outfile] &lt;trace-base-name&gt;
+</pre>
+
+      <p>The tool then loads trace log data from <code>&lt;trace-base-name&gt;.data</code> and
+      <code>&lt;trace-base-name&gt;.key</code>. The table below lists the options for dmtracedump.</p>
+
+      <table>
+        <tr>
+          <th>Option</th>
+
+          <th>Description</th>
+        </tr>
+
+        <tr>
+          <td><code>-d&nbsp;&lt;trace-base-name&gt;</code></td>
+
+          <td>Diff with this trace name</td>
+        </tr>
+
+        <tr>
+          <td><code>-g&nbsp;&lt;outfile&gt;</code></td>
+
+          <td>Generate output to &lt;outfile&gt;</td>
+        </tr>
+
+        <tr>
+          <td><code>-h</code></td>
+
+          <td>Turn on HTML output</td>
+        </tr>
+
+        <tr>
+          <td><code>-o</code></td>
+
+          <td>Dump the trace file instead of profiling</td>
+        </tr>
+
+        <tr>
+          <td><code>-d&nbsp;&lt;trace-base-name&gt;</code></td>
+
+          <td>URL base to the location of the sortable javascript file</td>
+        </tr>
+
+        <tr>
+          <td><code>-t&nbsp;&lt;percent&gt;</code></td>
+
+          <td>Minimum threshold for including child nodes in the graph (child's inclusive time as a
+          percentage of parent inclusive time). If this option is not used, the default threshold
+          is 20%.</td>
+        </tr>
+      </table>
+  
+  
+    
+  <h2 id="knownissues">Traceview Known Issues</h2>
+
+  <dl>
+    <dt>Threads</dt>
+
+    <dd>
+      Traceview logging does not handle threads well, resulting in these two problems:
+
+      <ol>
+        <li>If a thread exits during profiling, the thread name is not emitted;</li>
+
+        <li>The VM reuses thread IDs. If a thread stops and another starts, they may get the same
+        ID.</li>
+      </ol>
+    </dd>
+
+    </dl>
\ No newline at end of file
diff --git a/docs/html/tools/debugging/debugging-ui.jd b/docs/html/tools/debugging/debugging-ui.jd
new file mode 100644
index 0000000..c1976b8
--- /dev/null
+++ b/docs/html/tools/debugging/debugging-ui.jd
@@ -0,0 +1,547 @@
+page.title=Optimizing Your UI
+parent.title=Debugging
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li>
+            <a href="#HierarchyViewer">
+                Using Hierarchy Viewer
+            </a>
+            <ol>
+                <li><a href="#runhv">Running Hierarchy Viewer and choosing a window</a></li>
+                <li><a href="#viewhierarchy">About the View Hierarchy window</a></li>
+                <li><a href="#indiView">Working with an individual View in Tree View</a></li>
+                <li><a href="#hvdebugging">Debugging with View Hierarchy</a></li>
+                <li><a href="#hvoptimize">Optimizing with View Hierarchy</a></li>
+            </ol>
+        </li>
+        <li>
+            <a href="#pixelperfect">
+                Using Pixel Perfect
+            </a>
+            <ol>
+                <li><a href="#aboutpixelperfect">About the Pixel Perfect window</a></li>
+                <li><a href="#overlays">Working with Pixel Perfect overlays</a></li>
+            </ol>
+        </li>
+        <li><a href="#layoutopt">Using layoutopt</a></li>
+      </ol>
+      <h2>Related videos</h2>
+          <ol>
+              <li>
+<iframe title="Hierarchyviewer" 
+    width="210" height="160" 
+    src="http://www.youtube.com/embed/PAgE7saQUUY?rel=0&amp;hd=1" 
+    frameborder="0" allowfullscreen>
+</iframe>
+              </li>
+              <li>
+<iframe title="Pixel Perfect" 
+    width="210" height="160" 
+    src="http://www.youtube.com/embed/C45bMZGdN7Y?rel=0&amp;hd=1" 
+    frameborder="0" 
+    allowfullscreen>
+</iframe>
+              </li>
+          </ol>
+    </div>
+  </div>
+
+  <p>
+Sometimes your application's layout can slow down your application.
+  To help debug issues in your layout, the Android SDK provides the Hierarchy Viewer and
+  <code>layoutopt</code> tools.
+  </p>
+
+  <p>The Hierarchy Viewer application allows you to debug and optimize your user interface. It
+  provides a visual representation of the layout's View hierarchy (the View Hierarchy window)
+  and a magnified view of the display (the Pixel Perfect window).</p>
+
+  <p><code>layoutopt</code> is a command-line tool that helps you optimize the layouts and layout
+  hierarchies of your applications. You can run it against your layout files or resource
+  directories to quickly check for inefficiencies or other types of problems that could be
+  affecting the performance of your application.</p>
+
+<h2 id="HierarchyViewer">Using Hierarchy Viewer</h2>
+
+<h3 id="runhv">Running Hierarchy Viewer and choosing a window</h3>
+<p>
+    To run Hierarchy Viewer, follow these steps:</p>
+<ol>
+    <li>
+        Connect your device or launch an emulator.
+        <p>
+            To preserve security, Hierarchy Viewer can only connect to devices running a
+            developer version of the Android system.
+        </p>
+    </li>
+    <li>
+        If you have not done so already, install the application you want to work with.
+    </li>
+    <li>
+        Run the application, and ensure that its UI is visible.
+    </li>
+    <li>
+        From a terminal, launch <code>hierarchyviewer</code> from the
+        <code>&lt;sdk&gt;/tools/</code>
+        directory.
+    </li>
+    <li>
+        The first window you see displays a list of devices and emulators. To expand the list
+        of Activity objects for a device or emulator, click the arrow on the left. This displays a
+        list of the Activity objects whose UI is currently visible on the device or emulator. The
+        objects are listed by their Android component name. The list includes both your application
+        Activity and system Activity objects. A screenshot of this window appears in
+        figure 1.
+    </li>
+    <li>
+        Select the name of your Activity from the list. You can now look at its view
+        hierarchy using the View Hierarchy window, or look at a magnified image of the UI using
+        the Pixel Perfect window.
+    </li>
+</ol>
+<p>
+    To learn how to use the View Hierarchy window, go to
+    <a href="#viewhierarchy">About the View Hierarchy window</a>. To learn how to use the
+    Pixel Perfect window, go to <a href="#pixelperfect">About the Pixel Perfect window</a>.
+</p>
+<img id="Fig1" src="{@docRoot}images/developing/hv_device_window.png" alt="" height="600"/>
+<p class="img-caption"><strong>Figure 1.</strong> Hierarchy Viewer device window</p>
+<h3 id="viewhierarchy">About the View Hierarchy window</h3>
+<p>
+    The View Hierarchy window displays the View objects that form the UI of the
+    Activity that is running on your device or emulator. You use it to look at individual
+    View objects within the context of the entire View tree. For each View object, the View
+    Hierarchy window also displays rendering performance data.
+</p>
+<p>
+    To see the View Hierarchy window, run Hierarchy Viewer as described in
+    the section <a href="#runhv">Running Hierarchy Viewer and choosing a window</a>. Next, click
+    <strong>View Hierarchy</strong> at the top of the device window.
+</p>
+<p>
+    You should see four panes:
+</p>
+<ul>
+    <li>
+        <strong>Tree View</strong>: The left-hand pane displays the Tree View,
+        a diagram of the Activity object's hierarchy of views. Use Tree View to examine individual
+        View objects and see the relationships between View objects in your UI.
+        <p>
+            To zoom in on the pane, use the slider at the bottom of the pane, or use your mouse
+            scroll wheel. To move around in the pane or reveal View objects that are not currently
+            visible, click and drag the pane.
+        </p>
+        <p>
+            To highlight the nodes in the tree whose class or ID match a search string, enter the
+            string in the <strong>Filter by class or id:</strong> edit box at the bottom of the
+            window. The background of nodes that match the search string will change from gray to
+            bright blue.
+        </p>
+        <p>
+            To save a screenshot of Tree View to a PNG file, click <strong>Save As PNG</strong> at
+            the top of the View Hierarchy window. This displays a dialog in which you can choose
+            a directory and file name.
+        </p>
+        <p>
+            To save a layered screenshot of your device or emulator to an Adobe Photoshop (PSD)
+            file, click <strong>Capture Layers</strong> at the top of the View Hierarchy window.
+            This displays a dialog in which you can choose a directory or file name.
+            Each View in the UI is saved as a separate Photoshop layer.
+        </p>
+        <p>
+            In Photoshop (or similar program that accepts .psd files), you can hide, show or edit a
+            layer independently of others. When you save a layered screenshot, you can examine and
+            modify the image of an individual View object. This helps you experiment with design
+            changes.
+        </p>
+    </li>
+    <li>
+        The upper right-hand pane displays the <strong>Tree Overview</strong>, a smaller map
+        representation of the entire Tree View window. Use Tree Overview to identify the part of the
+        view tree that is being displayed in Tree View.
+        <p>
+            You can also use Tree Overview to move around in the Tree View pane. Click and drag
+            the shaded rectangle over an area to reveal it in Tree View.
+        </p>
+    </li>
+    <li>
+        The middle right-hand pane displays the <strong>Properties View</strong>,
+        a list of the properties for a selected View object. With Properties View, you can
+        examine all the properties without having to look at your application source.
+        <p>
+            The properties are organized by category. To find an individual property, expand
+            a category name by clicking the arrow on its left. This reveals all the properties
+            in that category.
+        </p>
+    </li>
+    <li>
+        The lower right-hand pane displays the <strong>Layout View</strong>,
+        a block representation of the UI. Layout View is another way to navigate through your UI.
+        When you click on a View object in Tree View, its position in the UI is highlighted.
+        Conversely, when you click in an area of Layout View, the View object for that area is
+        highlighted in Tree View.
+        <p>
+            The outline colors of blocks in Layout View provide additional information:
+        </p>
+            <ul>
+                <li>
+                    Bold red: The block represents the the View that is currently selected in
+                    Tree View.
+                </li>
+                <li>
+                    Light red: The block represents the parent of the block outlined in bold red.
+                </li>
+                <li>
+                    White: The block represents a visible View that is not a parent or child of the
+                    View that is currently selected in Tree View.
+                </li>
+            </ul>
+    </li>
+</ul>
+<p>
+    When the UI of the current Activity changes, the View Hierarchy window is not automatically
+    updated. To update it, click <strong>Load View Hierarchy</strong> at the top of the window.
+</p>
+<p>
+    Also, the window is not updated if you switch to a new Activity. To update it, start by
+    clicking the window selection icon in the bottom left-hand corner of the window. This
+    navigates back to the Window Selection window. From this window, click the Android
+    component name of the new Activity and then click <strong>Load View Hierarchy</strong>
+    at the top of the window.
+</p>
+<p>
+    A screenshot of the View Hierarchy window appears in figure 2.
+</p>
+<img id="Fig2" src="{@docRoot}images/developing/hv_view_hierarchy_window.png" alt="" height="600"/>
+<p class="img-caption"><strong>Figure 2.</strong> The View Hierarchy window</p>
+<h3 id="indiView">Working with an individual View in Tree View</h3>
+<p>
+    Each node in Tree View represents a single View. Some information is always visible. Starting
+    at the top of the node, you see the following:
+</p>
+<ol>
+    <li>
+        View class: The View object's class.
+    </li>
+    <li>
+        View object address: A pointer to View object.
+    </li>
+    <li>
+        View object ID: The value of the
+        <code><a href="{@docRoot}guide/topics/resources/layout-resource.html#idvalue">android:id</a>
+        </code> attribute.
+    </li>
+    <li>
+        Performance indicators: A set of three colored dots that indicate the rendering
+        speed of this View relative to other View objects in the tree. The three dots
+        represent (from left to right) the measure, layout, and draw times of the rendering.
+        <p>
+            The colors indicate the following relative performance:
+        </p>
+        <ul>
+            <li>
+                Green: For this part of the render time, this View is in the faster 50% of all
+                the View objects in the tree. For example, a green dot for the measure time means
+                that this View has a faster measure time than 50% of the View objects in the tree.
+            </li>
+            <li>
+                Yellow: For this part of the render time, this View is in the slower 50% of all
+                the View objects in the tree. For example, a yellow dot for the layout time means
+                that this View has a slower layout time than 50% of the View objects in the tree.
+            </li>
+            <li>
+                Red: For this part of the render time, this View is the slowest one in the tree.
+                For example, a red dot for the draw time means that this View takes the most
+                time to draw of all the View objects in the tree.
+            </li>
+        </ul>
+    </li>
+    <li>
+        View index: The zero-based index of the View in its parent View. If it is the only child,
+        this is 0.
+    </li>
+</ol>
+<p>
+    When you select a node, additional information for the View appears in a small window above
+    the node. When you click one of the nodes, you see the following:
+</p>
+<ul>
+    <li>
+        Image: The actual image of the View, as it would appear in the emulator. If the View has
+        children, these are also displayed.
+    </li>
+    <li>
+        View count: The number of View objects represented by this node. This includes the View
+        itself and a count of its children. For example, this value is 4 for a View that has 3
+        children.
+    </li>
+    <li>
+        Render times: The actual measure, layout, and draw times for the View rendering, in
+        milliseconds. These represent the same values as the performance indicators mentioned in
+        the preceding section.
+    </li>
+</ul>
+<p>
+    An annotated screenshot of an individual node in the Tree View window appears in figure 3.
+</p>
+<img id="Fig3" src="{@docRoot}images/developing/hv_treeview_screenshot.png" alt="" height="600"/>
+<p class="img-caption"><strong>Figure 3.</strong> An annotated node in Tree View</p>
+<h3 id="hvdebugging">Debugging with View Hierarchy</h3>
+<p>
+    The View Hierarchy window helps you debug an application by providing a static display
+    of the UI. The display starts with your application's opening screen. As you step through
+    your application, the display remains unchanged until you redraw it by invalidating and
+    then requesting layout for a View.
+</p>
+<p>
+    To redraw a View in the display:
+</p>
+    <ul>
+        <li>
+            Select a View in Tree View. As you move up towards the root of the tree (to the
+            left in the Tree View), you see the highest-level View objects. Redrawing a high-level
+            object usually forces the lower-level objects to redraw as well.
+        </li>
+        <li>
+            Click <strong>Invalidate</strong> at the top of the window. This marks the View as
+            invalid, and schedules it for a redraw at the next point that a layout is requested.
+        </li>
+        <li>
+            Click <strong>Request Layout</strong> to request a layout. The View and its children
+            are redrawn, as well as any other View objects that need to be redrawn.
+        </li>
+    </ul>
+<p>
+    Manually redrawing a View allows you to watch the View object tree and examine the properties of
+    individual View objects one step at a time as you go through breakpoints in your code.
+</p>
+<h3 id="hvoptimize">Optimizing with View Hierarchy</h3>
+<p>
+    View Hierarchy also helps you identify slow render performance. You start by looking at the
+    View nodes with red or yellow performance indicators to identify the slower View objects. As you
+    step through your application, you can judge if a View is consistently slow or slow only in
+    certain circumstances.
+</p>
+<p>
+    Remember that slow performance is not necessarily evidence of a problem, especially for
+    ViewGroup objects. View objects that have more children and more complex View objects render
+    more slowly.
+</p>
+<p>
+    The View Hierarchy window also helps you find performance issues. Just by looking at the
+    performance indicators (the dots) for each View node, you can see which View objects are the
+    slowest to measure, layout, and draw. From that, you can quickly identify the problems you
+    should look at first.
+</p>
+<h2 id="pixelperfect">Using Pixel Perfect</h2>
+<p>
+    Pixel Perfect is a tool for examining pixel properties and laying out UIs from a design drawing.
+</p>
+<h3 id="aboutpixelperfect">About the Pixel Perfect window</h3>
+<p>
+    The Pixel Perfect window displays a magnified image of the screen that is currently
+    visible on the emulator or device. In it, you can examine the properties
+    of individual pixels in the screen image. You can also use the Pixel Perfect window
+    to help you lay out your application UI based on a bitmap design.
+</p>
+<p>
+    To see the Pixel Perfect window, run Hierarchy Viewer, as described in
+    the section <a href="#runhv">Running Hierarchy Viewer and choosing a window</a>. Next, click
+    <strong>Inspect Screenshot</strong> at the top of the device window. The Pixel Perfect window
+    appears.
+</p>
+<p>
+    In it, you see three panes:
+</p>
+<ul>
+    <li>
+        View Object pane: This is a hierarchical list of the View objects that are currently
+        visible on the device or emulator screen, including both the ones in your application and
+        the ones generated by the system. The objects are listed by their View class.
+        To see the class names of a View object's children, expand the View by clicking the
+        arrow to its left. When you click a View, its position is highlighted in the Pixel Perfect
+        pane on the right.
+    </li>
+    <li>
+        Pixel Perfect Loupe pane: This is the magnified screen image. It is overlaid by a grid in
+        which each square represents one pixel. To look at the information for a pixel, click in its
+        square. Its color and X,Y coordinates appear at the bottom of the pane.
+        <p>
+            The magenta crosshair in the pane corresponds to the positioning
+            crosshair in the next pane. It only moves when you move the crosshair in the next pane.
+        </p>
+        <p>
+            To zoom in or out on the image, use the <strong>Zoom</strong> slider at the bottom of
+            the pane, or use your mouse's scroll wheel.
+        </p>
+        <p>
+            When you select a pixel in the Loupe pane, you see the following information at the
+            bottom of the pane:
+        </p>
+        <ul>
+            <li>
+                Pixel swatch: A rectangle filled with the same color as the pixel.
+            </li>
+            <li>
+                HTML color code: The hexadecimal RGB code corresponding to the pixel color
+            </li>
+            <li>
+                RGB color values: A list of the (R), green (G), and blue (B) color values of the
+                pixel color. Each value is in the range 0-255.
+            </li>
+            <li>
+                X and Y coordinates: The pixel's coordinates, in device-specific pixel units.
+                The values are 0-based, with X=0 at the left of the screen and Y=0 at the top.
+            </li>
+        </ul>
+    </li>
+    <li>
+        Pixel Perfect pane: This displays the currently visible screen as it would appear in the
+        emulator.
+        <p>
+            You use the cyan crosshair to do coarse positioning. Drag the crosshair in the image,
+            and the Loupe crosshair will move accordingly. You can also click on a point in the
+            Pixel Perfect pane, and the crosshair will move to that point.
+        </p>
+        <p>
+            The image corresponding to the View object selected in the View Object pane is
+            outlined in a box that indicates the View object's position on the screen. For the
+            selected object, the box is bold red. Sibling and parent View objects have a light
+            red box. View objects that are neither parents nor siblings are in white.
+        </p>
+        <p>
+            The layout box may have other rectangles either inside or outside it, each of which
+            indicates part of the View. A purple or green rectangle indicates the View bounding box.
+            A white or black box inside the layout box represents the <strong>padding</strong>, the
+            defined distance between the View object's content and its bounding box. An outer white
+            or black rectangle represents the <strong>margins</strong>, the distance between the
+            View bounding box and adjacent View objects. The padding and margin boxes are white if
+            the layout background is black, and vice versa.
+        </p>
+        <p>
+            You can save the screen image being displayed in the Pixel Perfect pane as a PNG file.
+            This produces a screenshot of the current screen. To do this, click
+            <strong>Save as PNG</strong> at the top of the window. This displays a dialog,
+            in which you can choose a directory and filename for the file.
+        </p>
+    </li>
+</ul>
+<p>
+    The panes are not automatically refreshed when you change one of the View objects or go to
+    another Activity. To refresh the Pixel Perfect pane and the Loupe pane, click
+    <strong>Refresh Screenshot</strong> at the top of the window. This will change the panes
+    to reflect the current screen image. You still may need to refresh the View Object pane;
+    to do this, click <strong>Refresh Tree</strong> at the top of the window.
+</p>
+<p>
+    To automatically refresh the panes while you are debugging, set
+    <strong>Auto Refresh</strong> at the top of the window, and then set a refresh rate
+    with the <strong>Refresh Rate</strong> slider at the bottom of the Loupe pane.
+</p>
+<h3 id="overlays">Working with Pixel Perfect overlays</h3>
+<p>
+    You often construct a UI based on a design done as a bitmap image. The Pixel Perfect window
+    helps you match up your View layout to a bitmap image by allowing you to load the bitmap as an
+    <strong>overlay</strong> on the screen image.
+</p>
+<p>
+    To use a bitmap image as an overlay:
+</p>
+<ul>
+    <li>
+        Start your application in a device or emulator and navigate to the Activity whose UI you
+        want to work with.
+    </li>
+    <li>
+        Start Hierarchy Viewer and navigate to the Pixel Perfect window.
+    </li>
+    <li>
+        At the top of the window, click <strong>Load Overlay</strong>. A dialog opens, prompting
+        for the image file to load. Load the image file.
+    </li>
+    <li>
+        Pixel Perfect displays the overlay over the screen image in the Pixel Perfect pane. The
+        lower left corner of the bitmap image (X=0, Y=<em>max value</em>) is anchored on the lower
+        leftmost pixel (X=0, Y=<em>max screen</em>) of the screen.
+        <p>
+            By default, the overlay has a 50% transparency, which allows you to see the screen
+            image underneath. You can adjust this with the <strong>Overlay:</strong> slider at the
+            bottom of the Loupe pane.
+        </p>
+        <p>
+            Also by default, the overlay is not displayed in the Loupe pane. To display it,
+            set <strong>Show in Loupe</strong> at the top of the window.
+        </p>
+    </li>
+</ul>
+<p>
+    The overlay is not saved as part of the screenshot when you save the screen image as a PNG
+    file.
+</p>
+<p>
+    A screenshot of the Pixel Perfect window appears in figure 4.
+</p>
+<img id="Fig4" src="{@docRoot}images/developing/hv_pixelperfect.png"
+        alt=""
+        height="600"/>
+<p class="img-caption"><strong>Figure 4.</strong> The Pixel Perfect window</p>
+<h2 id="layoutopt">Using layoutopt</h2>
+<p>
+    The <code>layoutopt</code> tool lets you analyze the XML files that define your
+    application's UI to find inefficiencies in the view hierarchy.</p>
+
+<p>
+    To run the tool, open a terminal and launch <code>layoutopt &lt;xmlfiles&gt;</code>
+    from your SDK <code>tools/</code> directory. The &lt;xmlfiles&gt; argument is a space-
+    delimited list of resources you want to analyze, either uncompiled resource xml files or
+    directories of such files.
+</p>
+<p>
+    The tool loads the specified XML files and analyzes their definitions and
+    hierarchies according to a set of predefined rules. For every issue it detects, it
+    displays the following information:
+</p>
+<ul>
+    <li>
+        The filename in which the issue was detected.
+    </li>
+    <li>
+        The line number for the issue.
+    </li>
+    <li>
+        A description of the issue, and for some types of issues it also suggests a resolution.
+    </li>
+</ul>
+<p>The following is a sample of the output from the tool:</p>
+<pre>
+$ layoutopt samples/
+samples/compound.xml
+   7:23 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
+   11:21 This LinearLayout layout or its FrameLayout parent is useless
+samples/simple.xml
+   7:7 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
+samples/too_deep.xml
+   -1:-1 This layout has too many nested layouts: 13 levels, it should have &lt;= 10!
+   20:81 This LinearLayout layout or its LinearLayout parent is useless
+   24:79 This LinearLayout layout or its LinearLayout parent is useless
+   28:77 This LinearLayout layout or its LinearLayout parent is useless
+   32:75 This LinearLayout layout or its LinearLayout parent is useless
+   36:73 This LinearLayout layout or its LinearLayout parent is useless
+   40:71 This LinearLayout layout or its LinearLayout parent is useless
+   44:69 This LinearLayout layout or its LinearLayout parent is useless
+   48:67 This LinearLayout layout or its LinearLayout parent is useless
+   52:65 This LinearLayout layout or its LinearLayout parent is useless
+   56:63 This LinearLayout layout or its LinearLayout parent is useless
+samples/too_many.xml
+   7:413 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
+   -1:-1 This layout has too many views: 81 views, it should have &lt;= 80!
+samples/useless.xml
+   7:19 The root-level &lt;FrameLayout/&gt; can be replaced with &lt;merge/&gt;
+   11:17 This LinearLayout layout or its FrameLayout parent is useless
+</pre>
diff --git a/docs/html/tools/debugging/index.jd b/docs/html/tools/debugging/index.jd
new file mode 100644
index 0000000..45fbc9e
--- /dev/null
+++ b/docs/html/tools/debugging/index.jd
@@ -0,0 +1,186 @@
+page.title=Debugging
+@jd:body
+
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#stack">Debugging Environment</a></li>
+
+        <li><a href="#addltools">Additional Debugging Tools</a></li>
+
+        <li><a href="#tips">Debugging Tips</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>The Android SDK provides most of the tools that you need to debug your applications. You need
+  a JDWP-compliant debugger if you want to be able to do things such as step through code,
+  view variable values, and pause execution of an application. If you are using Eclipse, a
+  JDWP-compliant debugger is already included and there is no setup required. If you are using
+  another IDE, you can use the debugger that comes with it and attach the debugger to a special
+  port so it can communicate with the application VMs on your devices. The main components that
+  comprise a typical Android debugging environment are:</p>
+
+  <dl>
+    <dt><a href="{@docRoot}tools/help/adb.html"><strong>adb</strong></a></dt>
+
+    <dd><code>adb</code> acts as a middleman between a device and your development system. It provides various
+    device management capabilities, including moving and syncing files to the emulator, running a
+    UNIX shell on the device or emulator, and providing a general means to communicate with
+    connected emulators and devices.</dd>
+
+    <dt><a href="{@docRoot}tools/debugging/ddms.html"><strong>Dalvik Debug Monitor
+    Server</strong></a></dt>
+
+    <dd>DDMS is a graphical program that communicates with your devices through <code>adb</code>. DDMS can
+    capture screenshots, gather thread and stack information, spoof incoming calls and SMS
+    messages, and has many other features.</dd>
+
+    <dt><strong><a href="{@docRoot}tools/device.html">Device</a> or
+    <a href="{@docRoot}tools/devices/index.html">Android Virtual Device</a></strong></dt>
+
+    <dd>Your application must run in a device or in an AVD so that it can be debugged. An <code>adb</code> device
+    daemon runs on the device or emulator and provides a means for the <code>adb</code> host daemon to
+    communicate with the device or emulator.</dd>
+
+    <dt><strong>JDWP debugger</strong></dt>
+
+    <dd>The Dalvik VM (Virtual Machine) supports the JDWP protocol to allow debuggers to attach to
+    a VM. Each application runs in a VM and exposes a unique port that you can attach a debugger to
+    via DDMS. If you want to debug multiple applications, attaching to each port might become
+    tedious, so DDMS provides a port forwarding feature that can forward a specific VM's debugging
+    port to port 8700. You can switch freely from application to application by highlighting it in the
+    Devices tab of DDMS. DDMS forwards the appropriate port to port 8700. Most modern Java IDEs include a JDWP debugger,
+    or you can use a command line debugger such as <a href="http://download.oracle.com/javase/6/docs/technotes/tools/">
+    <code>jdb</code></a>.</dd>
+  </dl>
+
+  <h2>Debugging Environment</h2>
+
+  <p>Figure 1 shows how the various debugging tools work together in a typical
+  debugging environment.</p>
+  <img src="{@docRoot}images/debugging.png"
+        alt="Debugging workflow" />
+  <p class="img-caption><strong>Figure 1. </strong> Debugging Workflow</p>
+
+  <p>On your emulator or device, each application runs in its own instance of a Dalvik VM. The <code>adb</code>
+  device daemon allows communication with the VMs from an outside party.</p>
+
+  <p>On your development machine, the <code>adb</code> host daemon communicates with the <code>adb</code> device daemon and
+  allows tools such as DDMS to communicate with the device or emulator. The <code>adb</code> host daemon also
+  allows you to access shell commands on the device as well as providing capabilities such as
+  application installation and file transferring.</p>
+
+  <p>Each application VM on the device or emulator exposes a debugging port that you can attach to
+  via DDMS. DDMS can forward any of these ports to a static debugging port (typically port 8700) by
+  selecting the application that you want to debug in the DDMS user interface. A JDWP debugger can
+  attach to this static debugging port and debug all the applications that are running on the
+  device or emulator without having to attach to multiple ports.</p>
+
+  <p>If you are using Eclipse, much of these interconnections are hidden from you. DDMS, <code>adb</code>, and a
+  JDWP debugger are all setup for you and you can access them through the Debug and DDMS
+  perspectives in Eclipse. If you are developing in a non-Eclipse environment, you have to invoke
+  these tools manually.</p>
+
+  <h2 id="addltools">Additional Debugging Tools</h2>
+
+  <p>In addition to the main debugging tools, the Android SDK provides additional tools to help you
+  debug and profile your applications:</p>
+
+  <dl>
+    <dt><strong><a href="{@docRoot}tools/debugging/debugging-ui.html">Heirarchy Viewer
+    and layoutopt</a></strong></dt>
+
+    <dd>Graphical programs that let you debug and profile user interfaces.</dd>
+
+    <dt><strong><a href=
+    "{@docRoot}tools/debugging/debugging-tracing.html">Traceview</a></strong></dt>
+
+    <dd>A graphical viewer that displays trace file data for method calls and times saved by your
+    application, which can help you profile the performance of your application.</dd>
+
+    <dt><strong><a href="{@docRoot}tools/debugging/debugging-devtools.html">Dev Tools
+    Android application</a></strong></dt>
+
+    <dd>The Dev Tools application included in the emulator system image exposes several settings
+    that provide useful information such as CPU usage and frame rate. You can also transfer the
+    application to a hardware device.</dd>
+  </dl>
+
+
+  <h2 id="tips">Debugging Tips</h2>
+
+<p>While debugging, keep these helpful tips in mind to help you figure out common problems with your
+applications:</p>
+
+<dl>
+<dt><strong>Dump the stack trace</strong></dt>
+<dd>To obtain a stack dump from emulator, you can log
+in with <code>adb shell</code>, use <code>ps</code> to find the process you
+want, and then <code>kill -3</code>. The stack trace appears in the log file.
+</dd>
+
+<dt><strong>Display useful info on the emulator screen</strong></dt>
+<dd>The device can display useful information such as CPU usage or highlights
+around redrawn areas. Turn these features on and off in the developer settings
+window as described in <a href="{@docRoot}tools/debugging/debugging-devtools.html">
+Debugging with the Dev Tools App</a>.
+</dd>
+
+<dt><strong>Get application and system state information from the emulator</strong></dt>
+<dd>You can access dumpstate information from the <code>adb shell</code> commands. See
+<a href="{@docRoot}tools/help/adb.html#dumpsys">dumpsys and
+dumpstate</a> on the adb topic page.</dd>
+
+
+
+<dt><strong>Get wireless connectivity information</strong></dt>
+<dd>You can get information about wireless connectivity using DDMS.
+From the <strong>Device</strong> menu, select <strong>Dump
+radio state</strong>.</dd>
+
+<dt><strong>Log trace data</strong></dt>
+<dd>You can log method calls and other tracing data in an activity by calling
+{@link android.os.Debug#startMethodTracing(String) startMethodTracing()}. See <a
+href="{@docRoot}tools/debugging/debugging-tracing.html">Profiling with Traceview and
+dmtracedump</a> for details. </dd>
+
+<dt><strong>Log radio data</strong></dt>
+<dd>By default, radio information is not logged to the system (it is a lot of
+data). However, you can enable radio logging using the following commands:
+
+<pre class="no-pretty-print">
+adb shell
+logcat -b radio
+</pre>
+</dd>
+
+<dt><strong>Capture screenshots</strong></dt>
+<dd>The Dalvik Debug Monitor Server (DDMS) can capture screenshots from the emulator. Select
+<strong>Device > Screen capture</strong>.</dd>
+
+<dt><strong>Use debugging helper classes</strong></dt>
+<dd>Android provides debug helper classes such as {@link android.util.Log
+    util.Log} and {@link android.os.Debug} for your convenience. </dd>
+
+<dt><strong>Garbage collection</strong></dt>
+<dd>
+The debugger and garbage collector are currently loosely integrated. The VM guarantees that any
+object the debugger is aware of is not garbage collected until after the debugger disconnects.
+This can result in a buildup of objects over time while the debugger is connected. For example,
+if the debugger sees a running thread, the associated {@link java.lang.Thread} object is not
+garbage collected even after the thread terminates.
+</dd>
+
+</dl>
+
+
+
+
+
+
+
+
diff --git a/docs/html/tools/device.jd b/docs/html/tools/device.jd
new file mode 100644
index 0000000..d5fd581
--- /dev/null
+++ b/docs/html/tools/device.jd
@@ -0,0 +1,267 @@
+page.title=Using Hardware Devices
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#setting-up">Setting up a Device for Development</a>
+      <ol>
+        <li><a href="#VendorIds">USB Vendor IDs</a></li>
+      </ol>
+    </li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a></li>
+    <li><a href="{@docRoot}tools/extras/oem-usb.html">OEM USB Drivers</a></li>
+  </ol>
+</div>
+</div>
+
+<p>When building a mobile application, it's important that you always test your application on a
+real device before releasing it to users. This page describes how to set up your development
+environment and Android-powered device for testing and debugging on the device.</p>
+
+<p>You can use any Android-powered device as an environment for running,
+debugging, and testing your applications. The tools included in the SDK make it easy to install and
+run your application on the device each time you compile. You can install your application on the
+device directly from Eclipse or from the command line with ADB. If
+you don't yet have a device, check with the service providers in your area to determine which
+Android-powered devices are available.</p>
+
+<p>If you want a SIM-unlocked phone, then you might consider the Google Nexus S. To find a place
+to purchase the Nexus S and other Android-powered devices, visit <a
+href="http://www.google.com/phone/detail/nexus-s">google.com/phone</a>.</p>
+
+<p class="note"><strong>Note:</strong> When developing on a device, keep in mind that you should
+still use the <a
+href="{@docRoot}tools/devices/emulator.html">Android emulator</a> to test your
+application
+on configurations that are not equivalent to those of your real device. Although the emulator
+does not allow you to test every device feature (such as the accelerometer), it does
+allow you to verify that your application functions properly on different versions of the Android
+platform, in different screen sizes and orientations, and more.</p>
+
+
+<h2 id="setting-up">Setting up a Device for Development</h2>
+
+<p>With an Android-powered device, you can develop and debug your Android applications just as you
+would on the emulator. Before you can start, there are just a few things to do:</p>
+
+<ol>
+  <li>Declare your application as "debuggable" in your Android Manifest.
+    <p>When using Eclipse, you can skip this step, because running your app directly from
+the Eclipse IDE automatically enables debugging.</p>
+    <p>In the <code>AndroidManifest.xml</code> file, add <code>android:debuggable="true"</code> to
+the <code>&lt;application></code> element.</p>
+    <p class="note"><strong>Note:</strong> If you manually enable debugging in the manifest
+ file, be sure to disable it before you build for release (your published application
+should usually <em>not</em> be debuggable).</p></li>
+  <li>Turn on "USB Debugging" on your device.
+    <p>On the device, go to <strong>Settings > Applications > Development</strong> 
+    and enable <strong>USB debugging</strong> 
+    (on an Android 4.0 device, the setting is 
+located in <strong>Settings > Developer options</strong>).</p>
+  </li>
+  <li>Set up your system to detect your device.
+    <ul>
+      <li>If you're developing on Windows, you need to install a USB driver for adb. For an
+installation guide and links to OEM drivers, see the <a href="{@docRoot}tools/extras/oem-usb.html">OEM USB
+Drivers</a> document.</li>
+      <li>If you're developing on Mac OS X, it just works. Skip this step.</li>
+      <li>If you're developing on Ubuntu Linux, you need to add a
+<code>udev</code> rules file that contains a USB configuration for each type of device
+you want to use for development. In the rules file, each device manufacturer
+is identified by a unique vendor ID, as specified by the
+<code>ATTR{idVendor}</code> property. For a list of vendor IDs, see  <a
+href="#VendorIds">USB Vendor IDs</a>, below. To set up device detection on
+Ubuntu Linux:
+
+        <ol type="a">
+          <li>Log in as root and create this file:
+            <code>/etc/udev/rules.d/51-android.rules</code></span>.
+            <p>Use this format to add each vendor to the file:<br/>
+              <code>SUBSYSTEM==&quot;usb&quot;, ATTR{idVendor}==&quot;0bb4&quot;, MODE=&quot;0666&quot;, GROUP=&quot;plugdev&quot;</code>
+              <br /><br />
+              
+              In this example, the vendor ID is for HTC. The <code>MODE</code>
+assignment specifies read/write permissions, and <code>GROUP</code> defines
+which Unix group  owns the device node. </p>
+            
+            <p class="note"><strong>Note:</strong> The rule syntax
+may vary slightly depending on your  environment. Consult the <code>udev</code>
+documentation for your system as needed. For an overview of rule syntax, see
+this guide to <a
+href="http://www.reactivated.net/writing_udev_rules.html">writing udev
+rules</a>.</p>
+          </li>
+          <li>Now execute:<br/>
+            <code>chmod a+r /etc/udev/rules.d/51-android.rules</code>
+          </li>
+        </ol>
+      </li>
+    </ul>
+  </li>
+</ol>
+
+<p>When plugged in over USB, can verify that your device is connected by executing <code>adb
+devices</code> from your SDK {@code platform-tools/} directory. If connected,
+you'll see the device name listed as a "device."</p>
+
+<p>If using Eclipse, run or debug your application as usual. You will be
+presented with a <b>Device Chooser</b> dialog that lists the available
+emulator(s) and connected device(s). Select the device upon which you want to
+install and run the application.</p>
+
+<p>If using the <a href="{@docRoot}tools/help/adb.html">Android
+Debug Bridge</a> (adb), you can issue commands with the <code>-d</code> flag to
+target your connected device.</p>
+
+<h3 id="VendorIds">USB Vendor IDs</h3>
+
+<p>This table provides a reference to the vendor IDs needed in order to add USB
+device support on Linux. The USB Vendor ID is the value given to the
+<code>ATTR{idVendor}</code> property in the rules file, as described 
+above.</p>
+
+<table>
+  <tr>
+    <th>Company</th><th>USB Vendor ID</th></tr>
+  <tr>
+    <td>Acer</td>
+    <td><code>0502</code></td>
+  </tr>
+  <tr>
+    <td>ASUS</td>
+    <td><code>0b05</code></td>
+  </tr>
+  <tr>
+    <td>Dell</td>
+    <td><code>413c</code></td>
+  </tr>
+  <tr>
+    <td>Foxconn</td>
+    <td><code>0489</code></td>
+  </tr>
+  <tr>
+    <td>Fujitsu</td>
+    <td><code>04c5</code></td>
+  </tr>
+  <tr>
+    <td>Fujitsu Toshiba</td>
+    <td><code>04c5</code></td>
+  </tr>
+  <tr>
+    <td>Garmin-Asus</td>
+    <td><code>091e</code></td>
+  </tr>
+  <tr>
+    <td>Google</td>
+    <td><code>18d1</code></td>
+  </tr>
+  <tr>
+    <td>Hisense</td>
+    <td><code>109b</code></td>
+  </tr>
+  <tr>
+    <td>HTC</td>
+    <td><code>0bb4</code></td>
+  </tr>
+  <tr>
+    <td>Huawei</td>
+    <td><code>12d1</code></td>
+  </tr>
+  <tr>
+    <td>K-Touch</td>
+    <td><code>24e3</code></td>
+  </tr>
+  <tr>
+    <td>KT Tech</td>
+    <td><code>2116</code></td>
+  </tr>
+  <tr>
+    <td>Kyocera</td>
+    <td><code>0482</code></td>
+  </tr>
+  <tr>
+    <td>Lenovo</td>
+    <td><code>17ef</code></td>
+  </tr>
+  <tr>
+    <td>LG</td>
+    <td><code>1004</code></td>
+  </tr>
+  <tr>
+    <td>Motorola</td>
+    <td><code>22b8</code></td>
+  </tr>
+  <tr>
+    <td>NEC</td>
+    <td><code>0409</code></td>
+  </tr>
+  <tr>
+    <td>Nook</td>
+    <td><code>2080</code></td>
+  </tr>
+  <tr>
+    <td>Nvidia</td>
+    <td><code>0955</code></td>
+  </tr>
+  <tr>
+    <td>OTGV</td>
+    <td><code>2257</code></td>
+  </tr>
+  <tr>
+    <td>Pantech</td>
+    <td><code>10a9</code></td>
+  </tr>
+  <tr>
+    <td>Pegatron</td>
+    <td><code>1d4d</code></td>
+  </tr>
+  <tr>
+    <td>Philips</td>
+    <td><code>0471</code></td>
+  </tr>
+  <tr>
+    <td>PMC-Sierra</td>
+    <td><code>04da</code></td>
+  </tr>
+  <tr>
+    <td>Qualcomm</td>
+    <td><code>05c6</code></td>
+  </tr>
+  <tr>
+    <td>SK Telesys</td>
+    <td><code>1f53</code></td>
+  </tr>
+  <tr>
+    <td>Samsung</td>
+    <td><code>04e8</code></td>
+  </tr>
+  <tr>
+    <td>Sharp</td>
+    <td><code>04dd</code></td>
+  </tr>
+  <tr>
+    <td>Sony</td>
+    <td><code>054c</code></td>
+  </tr>
+  <tr>
+    <td>Sony Ericsson</td>
+    <td><code>0fce</code></td>
+  </tr>
+  <tr>
+    <td>Teleepoch</td>
+    <td><code>2340</code></td>
+  </tr>
+  <tr>
+    <td>Toshiba</td>
+    <td><code>0930</code></td>
+  </tr>
+  <tr>
+    <td>ZTE</td>
+    <td><code>19d2</code></td>
+  </tr>
+</table>
diff --git a/docs/html/tools/devices/emulator.jd b/docs/html/tools/devices/emulator.jd
new file mode 100644
index 0000000..cee6473
--- /dev/null
+++ b/docs/html/tools/devices/emulator.jd
@@ -0,0 +1,1571 @@
+page.title=Using the Android Emulator
+parent.title=Managing Virtual Devices
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>In this document</h2>
+    <ol>
+      <li><a href="#overview">Overview</a></li>
+      <li><a href="#avds">Android Virtual Devices and the Emulator</a></li>
+      <li><a href="#starting">Starting and Stopping the Emulator</a></li>
+      <li><a href="#apps">Installing Applications on the Emulator</a></li>
+      <li><a href="#acceleration">Using Hardware Acceleration</a>
+        <ol>
+          <li><a href="#accel-graphics">Configuring Graphics Acceleration</a></li>
+          <li><a href="#accel-vm">Configuring Virtual Machine Acceleration</a></li>
+        </ol>
+      </li>
+      <li><a href="#sdcard">SD Card Emulation</a>
+        <ol>
+          <li><a href="#sdcard-creating">Creating an SD card image</a></li>
+          <li><a href="#sdcard-files">Copying files to an SD card image</a></li>
+          <li><a href="#sdcard-loading">Loading an SD card image</a></li>
+        </ol>
+      </li>
+      <li><a href="#diskimages">Working with Emulator Disk Images</a>
+	      <ol>
+	        <li><a href="#defaultimages">Default image files</a></li>
+	        <li><a href="#runtimeimages">Runtime images: user data and SD card</a></li>
+	        <li><a href="#temporaryimages">Temporary images</a></li>
+	      </ol>
+	    </li>
+      <li><a href="#emulatornetworking">Emulator Networking</a>
+	      <ol>
+          <li><a href="#networkaddresses">Network Address Space</a></li>
+          <li><a href="#networkinglimitations">Local Networking Limitations</a></li>
+          <li><a href="#redirection">Using Network Redirection</a></li>
+          <li><a href="#dns">Configuring the Emulator's DNS Settings</a></li>
+          <li><a href="#proxy">Using the Emulator with a Proxy</a></li>
+          <li><a href="#connecting">Interconnecting Emulator Instances</a></li>
+          <li><a href="#calling">Sending a Voice Call or SMS to Another Emulator Instance</a></li>
+        </ol>
+      </li>
+      <li><a href="#console">Using the Emulator Console</a>
+        <ol>
+          <li><a href="#portredirection">Port Redirection</a></li>
+          <li><a href="#geo">Geo Location Provider Emulation</a></li>
+          <li><a href="#events">Hardware Events Emulation</a></li>
+          <li><a href="#power">Device Power Characteristics</a></li>
+          <li><a href="#netstatus">Network Status</a></li>
+          <li><a href="#netdelay">Network Delay Emulation</a></li>
+          <li><a href="#netspeed">Network Speed Emulation</a></li>
+          <li><a href="#telephony">Telephony Emulation</a></li>
+          <li><a href="#sms">SMS Emulation</a></li>
+          <li><a href="#vm">VM State</a></li>
+          <li><a href="#window">Emulator Window</a></li>
+          <li><a href="#terminating">Terminating an Emulator Instance</a></li>
+        </ol>
+      </li>
+      <li><a href="#limitations">Emulator Limitations</a></li>
+      <li><a href="#troubleshooting">Troubleshooting Emulator Problems</a></li>
+    </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/help/emulator.html">Android Emulator</a></li>
+    <li><a href="{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD Manager</a></li>
+  </ol>
+</div>
+</div>
+
+<p>The Android SDK includes a virtual mobile device emulator
+that runs on your computer. The emulator lets you prototype, develop and test
+Android applications without using a physical device. </p>
+
+<p>The Android emulator mimics all of the hardware and software features
+of a typical mobile device, except that it cannot place actual phone
+calls. It provides a variety of navigation and control keys, which you can "press"
+using your mouse or keyboard to generate events for your application. It also
+provides a screen in which your application is displayed, together with any other
+active Android applications. </p>
+
+<img src="{@docRoot}images/emulator-wvga800l.png" width="367" height="349" />
+
+<p>To let you model and test your application more easily, the emulator utilizes
+Android Virtual Device (AVD) configurations. AVDs let you define certain hardware
+aspects of your emulated phone and allow you to create many configurations to test
+many Android platforms and hardware permutations. Once your application is running on
+the emulator, it can use the services of the Android platform to invoke other
+applications, access the network, play audio and video, store and retrieve data,
+notify the user, and render graphical transitions and themes. </p>
+
+<p>The emulator also includes a variety of debug capabilities, such as a console
+from which you can log kernel output, simulate application interrupts (such as
+arriving SMS messages or phone calls), and simulate latency effects and dropouts
+on the data network.</p>
+
+
+
+<h2 id="overview">Overview</h2>
+
+<p>The Android emulator is an application that provides a virtual
+mobile device on which you can run your Android applications. It runs a full
+Android system stack, down to the kernel level, that includes a set of
+preinstalled applications (such as the dialer) that you can access from your
+applications. You can choose what version of the Android system you want to
+run in the emulator by configuring AVDs, and you can also customize the
+mobile device skin and key mappings. When launching the emulator and at runtime,
+you can use a variety of commands and options to control its behavior.
+</p>
+
+<p>The Android system images available through the Android SDK Manager contain
+code for the Android Linux kernel, the native libraries, the Dalvik VM, and the
+various Android packages (such as the Android framework and preinstalled
+applications). The emulator provides dynamic binary translation of device
+machine code to the OS and processor architecture of your development
+machine.</p>
+
+<p>The Android emulator supports many hardware features likely to be found on
+mobile devices, including: </p>
+
+<ul>
+  <li>An ARMv5 CPU and the corresponding memory-management unit (MMU)</li>
+  <li>A 16-bit LCD display</li>
+  <li>One or more keyboards (a Qwerty-based keyboard and associated Dpad/Phone
+buttons)</li>
+  <li>A sound chip with output and input capabilities</li>
+  <li>Flash memory partitions (emulated through disk image files on the
+development machine)</li>
+  <li>A GSM modem, including a simulated SIM Card</li>
+  <li>A camera, using a webcam connected to your development computer.</li>
+  <li>Sensors like an accelerometer, using data from a USB-connected Android device.</li>
+</ul>
+
+<p>The following sections describe the emulator and its use for development of Android
+applications in more detail.</p>
+
+
+<h2 id="avds">Android Virtual Devices and the Emulator</h2>
+
+<p>To use the emulator, you first must create one or more AVD configurations. In each
+configuration, you specify an Android platform to run in the emulator and the set of hardware
+options and emulator skin you want to use. Then, when you launch the emulator, you specify
+the AVD configuration that you want to load. </p>
+
+<p>Each AVD functions as an independent device, with its own private storage for
+user data, SD card, and so on. When you launch the emulator with an AVD configuration,
+it automatically loads the user data and SD card data from the AVD directory. By default,
+the emulator stores the user data, SD card data, and cache in the AVD directory.</p>
+
+<p>To create and manage AVDs you use the AVD Manager UI or the <code>android</code> tool
+that is included in the SDK.
+For complete information about how to set up AVDs, see <a
+href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>.</p>
+
+
+<h2 id="starting">Starting and Stopping the Emulator</h2>
+
+<p>During development and testing of your application, you install and run your
+application in the Android emulator. You can launch the emulator as a standalone
+application from a command line, or you can run it from within your Eclipse
+development environment. In either case, you specify the AVD configuration to
+load and any startup options you want to use, as described in this document.
+</p>
+
+<p>You can run your application on a single instance of the emulator or,
+depending on your needs, you can start multiple emulator instances and run your
+application in more than one emulated device. You can use the emulator's
+built-in commands to simulate GSM phone calling or SMS between emulator
+instances, and you can set up network redirection that allows emulators to send
+data to one another. For more information, see <a href="#telephony">Telephony
+Emulation</a>, <a href="#sms">SMS Emulation</a>, and
+<a href="#emulatornetworking">Emulator Networking</a></p>
+
+<p>To start an instance of the emulator from the command line, navigate to the
+<code>tools/</code> folder of the SDK. Enter <code>emulator</code> command
+like this: </p>
+
+<pre>emulator -avd &lt;avd_name&gt; [&lt;options&gt;]</pre>
+
+<p>This initializes the emulator, loads an AVD configuration and displays the emulator
+window. For more information about command line options for the emulator, see the
+<a href="{@docRoot}tools/help/emulator.html">Android Emulator</a> tool reference.</p>
+
+<p class="note"><strong>Note:</strong> You can run multiple
+instances of the emulator concurrently, each with its own AVD configuration and
+storage area for user data, SD card, and so on.</p>
+
+<p>If you are working in Eclipse, the ADT plugin for Eclipse installs your
+application and starts the emulator automatically, when you run or debug
+the application. You can specify emulator startup options in the Run/Debug
+dialog, in the Target tab. When the emulator is running, you can issue
+console commands as described later in this document.</p>
+
+<p>If you are not working in Eclipse, see <a href="#apps">Installing Applications
+on the Emulator</a> for information about how to install your application.</p>
+
+<p>To stop an emulator instance, just close the emulator's window.</p>
+
+<p>For a reference of the emulator's startup commands and keyboard mapping, see
+the <a href="{@docRoot}tools/help/emulator.html">Android Emulator</a> tool
+reference.</p>
+
+
+<h2 id="apps">Installing Applications on the Emulator</h2>
+
+<p>If you don't have access to Eclipse or the ADT Plugin, you can install your application on the
+emulator using the <a href="{@docRoot}tools/help/adb.html#move">adb</a> utility. Before
+installing the application, you need to build and package it into an <code>.apk</code> as described
+in <a href="{@docRoot}tools/building/index.html">Building and
+Running Apps</a>. Once the application is installed, you can start the emulator from the command
+line as described previously, using any startup options necessary.
+When the emulator is running, you can also connect to the emulator instance's
+<a href="#console">console</a> to issue commands as needed.</p>
+
+<p>As you update your code, you periodically package and install it on the emulator.
+The emulator preserves the application and its state data across restarts,
+in a user-data disk partition. To ensure that the application runs properly
+as you update it, you may need to delete the emulator's user-data partition.
+To do so, start the emulator with the <code>-wipe-data</code> option.
+For more information about the user-data partition and other emulator storage,
+see <a href="#diskimages">Working with Emulator Disk Images</a>.</p>
+
+
+<h2 id="acceleration">Using Hardware Acceleration</h2>
+
+<p>In order to make the Android emulator run faster and be more responsive, you can configure it to
+take advantage of hardware acceleration, using a combination of configuration options, specific
+Android system images and hardware drivers.</p>
+
+
+<h3 id="accel-graphics">Configuring Graphics Acceleration</h3>
+
+<p class="caution"><strong>Caution:</strong> As of SDK Tools Revision 17, the graphics
+acceleration feature for the emulator is experimental; be alert for incompatibilities and
+errors when using this feature. </p>
+
+<p>Graphics acceleration for the emulator takes advantage of your development computer's graphics
+hardware, specifically its graphics processing unit (GPU), to make screen drawing faster. To use
+the graphics acceleration feature, you must have the following versions of the Android development
+tools installed:</p>
+
+<ul>
+  <li>Android SDK Tools, Revision 17 or higher</li>
+  <li>Android SDK Platform API 15, Revision 3 or higher</li>
+</ul>
+
+<p>Use the <a href="{@docRoot}sdk/installing/index.html#AddingComponents">Android SDK
+Manager</a> to install these components:</p>
+
+<p class="note"><strong>Note:</strong> Not all applications are compatible with graphics hardware
+acceleration. In particular, the Browser application and applications using the {@link
+android.webkit.WebView} component are not compatible with graphics acceleration.</p>
+
+<p>To configure an AVD to use graphics acceleration:</p>
+
+<ol>
+  <li>Make sure you have the required SDK components installed (listed above).</li>
+  <li>Start the AVD Manager and create a new AVD with the <strong>Target</strong> value of
+<strong>Android 4.0.3 (API Level 15)</strong>, revision 3 or higher.</li>
+  <li>If you want to have graphics acceleration enabled by default for this AVD, in the
+<strong>Hardware</strong> section, click <strong>New</strong>, select <strong>GPU emulation</strong>
+and set the value to <strong>Yes</strong>.
+  <p class="note"><strong>Note:</strong> You can also enable graphics acceleration when you
+start an emulator using command line options as describe in the next section.</p>
+  </li>
+  <li>Name the AVD instance and select any other configuration options.
+  <p class="caution"><strong>Caution:</strong> Do not select the <strong>Snapshot: Enabled</strong>
+option. Snapshots are not supported for emulators with graphics acceleration enabled.</p>
+  </li>
+  <li>Click <strong>Create AVD</strong> to save the emulator configuration.</li>
+</ol>
+
+<p>If you set <strong>GPU emulation</strong> to <strong>Yes</strong> for your AVD, then graphics
+acceleration is automatically enabled when you run it. If you did not enable <strong>GPU
+emulation</strong> when you created the AVD, you can still enable it at runtime.</p>
+
+<p>To enable graphics acceleration at runtime for an AVD:</p>
+
+<ul>
+  <li>If you are running the emulator from the command line, just include the {@code -gpu on}
+option:
+<pre>emulator -avd &lt;avd_name&gt; -gpu on</pre>
+    <p class="note"><strong>Note:</strong> You must specify an AVD configuration that uses
+Android 4.0.3 (API Level 15, revision 3) or higher system image target. Graphics acceleration is not
+available for earlier system images.</p>
+  </li>
+  <li>If you are running the emulator from Eclipse, run your Android application using an AVD with
+the {@code -gpu on} option enabled:
+    <ol>
+      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
+Configurations...</strong></li>
+      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
+project run configuration or create a new configuration.</li>
+      <li>Click the <strong>Target</strong> tab.</li>
+      <li>Select the AVD you created in the previous procedure.</li>
+      <li>In the <strong>Additional Emulator Command Line Options</strong> field, enter:<br>
+        {@code -gpu on}</li>
+      <li>Run your Android project using this run configuration.</li>
+    </ol>
+  </li>
+</ul>
+
+
+<h3 id="accel-vm">Configuring Virtual Machine Acceleration</h2>
+
+<p class="caution"><strong>Caution:</strong> As of SDK Tools Revision 17, the virtual machine
+acceleration feature for the emulator is experimental; be alert for incompatibilities and errors
+when using this feature.</p>
+
+<p>Many modern CPUs provide extensions for running virtual machines (VMs) more efficiently. Taking
+advantage of these extensions with the Android emulator requires some additional configuration of
+your development system, but can significantly improve the execution speed. Before attempting to use
+this type of acceleration, you should first determine if your development system’s CPU supports one
+of the following virtualization extensions technologies:</p>
+
+<ul>
+  <li>Intel Virtualization Technology (VT, VT-x, vmx) extensions</li>
+  <li>AMD Virtualization (AMD-V, SVM) extensions (only supported for Linux)</li>
+</ul>
+
+<p>The specifications from the manufacturer of your CPU should indicate if it supports
+virtualization extensions. If your CPU does not support one of these virtualization technologies,
+then you cannot use virtual machine acceleration.</p>
+
+<p class="note"><strong>Note:</strong> Virtualization extensions are typically enabled through
+your computer's BIOS and are frequently turned off by default. Check the documentation for your
+system's motherboard to find out how to enable virtualization extensions.</p>
+
+<p>Once you have determined that your CPU supports virtualization extensions, make sure you can work
+within these additional requirements of running an emulator inside an accelerated virtual
+machine:</p>
+
+<ul>
+  <li><strong>x86 AVD Only</strong> - You must use an AVD that is uses an x86 system image target.
+AVDs that use ARM-based system images cannot be accelerated using the emulator configurations
+described here.</li>
+  <li><strong>Not Inside a VM</strong> - You cannot run a VM-accelerated emulator inside another
+virtual machine, such as a VirtualBox or VMWare-hosted virtual machine. You must run the emulator
+directly on your system hardware.</li>
+  <li><strong>Other VM Drivers</strong> - If you are running another virtualization technology on
+your system such as VirtualBox or VMWare, you may need to unload the driver for that virtual machine
+hosting software before running an accelerated emulator.</li>
+  <li><strong>OpenGL&reg; Graphics</strong> - Emulation of OpenGL ES graphics may not perform at the
+same level as an actual device.</li>
+</ul>
+
+<p>To use virtual machine acceleration with the emulator, you need the following version of Android
+development tools. Use the <a href="{@docRoot}sdk/installing/index.html#AddingComponents">Android SDK
+Manager</a> to install these components:</p>
+
+<ul>
+  <li>Android SDK Tools, Revision 17 or higher</li>
+  <li>Android x86-based system image</li>
+</ul>
+
+<p>If your development environment meets all of the requirements for running a VM-accelerated
+emulator, you can use the AVD Manager to create an x86-based AVD configuration:</p>
+
+<ol>
+  <li>In the Android SDK Manager, make sure you have an x86-based <strong>System Image</strong>
+    installed for your target Android version. If you do not have an x86 <strong>System
+    Image</strong> installed, select one in the Android SDK Manager and install it.
+    <p class="note"><strong>Tip:</strong> System images are listed under each API Level in the SDK
+    Manager. An x86 system image may not be available for all API levels.</p>
+  </li>
+  <li>Start the AVD Manager and create a new AVD with an x86 value for the
+<strong>CPU/ABI</strong> field. You may need to select a specific <strong>Target</strong> value, or
+select a <strong>Target</strong> value and then select a specific <strong>CPU/ABI</strong>
+option.</li>
+  <li>Name the emulator instance and select any other configuration options.</li>
+  <li>Click <strong>Create AVD</strong> to save the emulator configuration.</li>
+</ol>
+
+<h4 id="vm-windows">Configuring VM Acceleration on Windows</h4>
+
+<p>Virtual machine acceleration for Windows requires the installation of the Intel Hardware
+Accelerated Execution Manager (Intel HAXM). The software requires an Intel CPU with
+Virtualization Technology (VT) support and one of the following operating systems:</p>
+
+<ul>
+  <li>Windows 7 (32/64-bit)</li>
+  <li>Windows Vista (32/64-bit)</li>
+  <li>Windows XP (32-bit only)</li>
+</ul>
+
+<p>To install the virtualization driver:</p>
+
+<ol>
+  <li>Start the Android SDK Manager, select <strong>Extras</strong> and then select <strong>Intel
+Hardware Accelerated Execution Manager</strong>.</li>
+  <li>After the download completes, execute {@code
+&lt;sdk&gt;/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.exe}.</li>
+  <li>Follow the on-screen instructions to complete installation.</li>
+  <li>After installation completes, confirm that the virtualization driver is operating correctly by
+opening a command prompt window and running the following command:
+    <pre>sc query intelhaxm</pre>
+    <p>You should see a status message including the following information:</p>
+<pre>
+SERVICE_NAME: intelhaxm
+       ...
+       STATE              : 4  RUNNING
+       ...
+</pre>
+  </li>
+</ol>
+
+<p>To run an x86-based emulator with VM acceleration:</p>
+<ul>
+  <li>If you are running the emulator from the command line, just specify an x86-based AVD:
+<pre>emulator -avd &lt;avd_name&gt;</pre>
+    <p class="note"><strong>Note:</strong> You must provide an x86-based AVD configuration
+name, otherwise VM acceleration will not be enabled.</p>
+  </li>
+  <li>If you are running the emulator from Eclipse, run your Android application with an x86-based
+AVD:
+    <ol>
+      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
+Configurations...</strong></li>
+      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
+project run configuration or create a new configuration.</li>
+      <li>Click the <strong>Target</strong> tab.</li>
+      <li>Select the x86-based AVD you created previously.</li>
+      <li>Run your Android project using this run configuration.</li>
+    </ol>
+  </li>
+</ul>
+
+<p>You can adjust the amount of memory available to the Intel HAXM kernel extension by re-running
+its installer.</p>
+
+<p>You can stop using the virtualization driver by uninstalling it. Re-run the installer or use
+the Control Panel to remove the software.</p>
+
+
+<h4 id="vm-mac">Configuring VM Acceleration on Mac</h4>
+
+<p>Virtual machine acceleration on a Mac requires the installation of the Intel Hardware Accelerated
+Execution Manager (Intel HAXM) kernel extension to allow the Android emulator to make use of CPU
+virtualization extensions. The kernel extension is compatible with Mac OS X Snow Leopard (version
+10.6.0) and higher.</p>
+
+<p>To install the Intel HAXM kernel extension:</p>
+
+<ol>
+  <li>Start the Android SDK Manager, select <strong>Extras</strong> and then select <strong>Intel
+Hardware Accelerated Execution Manager</strong>.
+  <li>After the download completes, execute
+    {@code &lt;sdk&gt;/extras/intel/Hardware_Accelerated_Execution_Manager/IntelHAXM.dmg}.</li>
+  <li>Double click the <strong>IntelHAXM.mpkg</strong> icon to begin installation.</li>
+  <li>Follow the on-screen instructions to complete installation.</li>
+  <li>After installation completes, confirm that the new kernel extension is operating correctly by
+opening a terminal window and running the following command:
+    <pre>kextstat | grep intel</pre>
+    <p>You should see a status message containing the following extension name, indicating that the
+      kernel extension is loaded:</p>
+    <pre>com.intel.kext.intelhaxm</pre>
+  </li>
+</ol>
+
+<p>To run an x86-based emulator with VM acceleration:</p>
+<ul>
+  <li>If you are running the emulator from the command line, just specify an x86-based AVD:
+<pre>emulator -avd &lt;avd_name&gt;</pre>
+    <p class="note"><strong>Note:</strong> You must provide an x86-based AVD configuration
+name, otherwise VM acceleration will not be enabled.</p>
+  </li>
+  <li>If you are running the emulator from Eclipse, run your Android application with an x86-based
+AVD:
+    <ol>
+      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
+Configurations...</strong></li>
+      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
+project run configuration or create a new configuration.</li>
+      <li>Click the <strong>Target</strong> tab.</li>
+      <li>Select the x86-based AVD you created previously.</li>
+      <li>Run your Android project using this run configuration.</li>
+    </ol>
+  </li>
+</ul>
+
+<p>You can adjust the amount of memory available to the Intel HAXM kernel extension by re-running
+the installer.</p>
+
+<p>You can stop using the virtualization kernel driver by uninstalling it. Before removing it, shut
+down any running x86 emulators. To unload the virtualization kernel driver, run the following
+command in a terminal window:</p>
+
+<pre>sudo /System/Library/Extensions/intelhaxm.kext/Contents/Resources/uninstall.sh</pre>
+
+<h4 id="vm-linux">Configuring VM Acceleration on Linux</h4>
+
+<p>Linux-based systems support virtual machine acceleration through the KVM software package. Follow
+<a href="https://www.google.com/?q=kvm+installation">instructions for installing KVM</a> on your
+Linux system, and verify that KVM is enabled. In addition to following the installation
+instructions, be aware of these configuration requirements:</p>
+
+<ul>
+  <li>Running KVM requires specific user permissions, make sure you have sufficient permissions
+according to the KVM installation instructions.</li>
+  <li>If you use another virtualization technology in your Linux platform, unload its kernel driver
+before running the x86 emulator. For example, the VirtualBox driver program is {@code vboxdrv}.</li>
+</ul>
+
+<p>To run an x86-based emulator with VM acceleration:</p>
+
+<ul>
+  <li>If you are running the emulator from the command line, start the emulator with an x86-based
+AVD and include the KVM options:
+<pre>emulator -avd &lt;avd_name&gt; -qemu -m 512 -enable-kvm</pre>
+    <p class="note"><strong>Note:</strong> You must provide an x86-based AVD configuration
+name, otherwise VM acceleration will not be enabled.</p>
+  </li>
+  <li>If you are running the emulator from Eclipse, run your Android application with an x86-based
+AVD and include the KVM options:
+    <ol>
+      <li>In Eclipse, click your Android project folder and then select <strong>Run > Run
+Configurations...</strong></li>
+      <li>In the left panel of the <strong>Run Configurations</strong> dialog, select your Android
+project run configuration or create a new configuration.</li>
+      <li>Click the <strong>Target</strong> tab.</li>
+      <li>Select the x86-based AVD you created previously.</li>
+      <li>In the <strong>Additional Emulator Command Line Options</strong> field, enter:
+        <pre>-qemu -m 512 -enable-kvm</pre>
+      </li>
+      <li>Run your Android project using this run configuration.</li>
+    </ol>
+  </li>
+</ul>
+
+<p class="note"><strong>Important:</strong> When using the {@code -qemu} command line option, make sure
+it is the last parameter in your command. All subsequent options are interpreted as qemu-specific
+parameters.</p>
+
+
+<h2 id="sdcard">SD Card Emulation</h2>
+
+<p>You can create a disk image and then load it to the emulator at startup, to
+simulate the presence of a user's SD card in the device. To do this, you can specify
+an SD card image when you create an AVD, or you can use the mksdcard utility included
+in the SDK.</p>
+
+<p>The following sections describe how to create an SD card disk image, how to copy
+files to it, and how to load it in the emulator at startup. </p>
+
+<p>Note that you can only load a disk image at emulator startup. Similarly, you
+can not remove a simulated SD card from a running emulator. However, you can
+browse, send files to, and copy/remove files from a simulated SD card either
+with adb or the emulator. </p>
+
+<p>The emulator supports emulated SDHC cards, so you can create an SD card image
+of any size up to 128 gigabytes.</p>
+
+
+<h3 id="sdcard-creating">Creating an SD card image</h3>
+
+<p>There are several ways of creating an SD card image. The easiest way is to use the
+<strong>AVD Manager</strong> to create a new SD card by specifying a size when you create an AVD.
+You can also use the {@code android} command line tool when creating an AVD. Just add the
+<code>-c</code> option to your command: </p>
+
+<pre>android create avd -n &lt;avd_name&gt; -t &lt;targetID&gt; -c &lt;size&gt;[K|M]</pre>
+
+<p>The <code>-c</code> option can also be used to to specify a path to an SD card
+image for the new AVD. For more information, see <a
+href="{@docRoot}tools/devices/managing-avds-cmdline.html">Managing Virtual Devices
+from the Command Line</a>.
+</p>
+
+<p>You can also use the mksdcard tool, included in the SDK, to create a FAT32 disk
+image that you can load in the emulator at startup. You can access mksdcard in
+the tools/ directory of the SDK and create a disk image like this: </p>
+
+<pre>mksdcard &lt;size&gt; &lt;file&gt;</pre>
+
+<p>For example:</p>
+
+<pre>mksdcard 1024M sdcard1.iso</pre>
+
+<p>For more information, see <a
+href="{@docRoot}tools/help/mksdcard.html"><code>mksdcard</code></a>.</p>
+
+
+<h3 id="sdcard-files">Copying files to an SD card image</h3>
+
+<p>Once you have created the disk image, you can copy files to it prior to
+loading it in the emulator. To copy files, you can mount the image as a loop
+device and then copy the files to it, or you can use a utility such as {@code mtools} to
+copy the files directly to the image. The {@code mtools} package is available for Linux,
+Mac, and Windows.</p>
+
+<p>Alternatively, you can use the {@code adb push} command to move files onto an SD card image
+while it is loaded in an emulator. For more information see the <a
+href="{@docRoot}tools/help/adb.html#copyfiles">{@code adb push}</a> documentation.</p>
+
+<h3 id="sdcard-loading">Loading an SD card image</h3>
+
+<p>By default, the emulator loads the SD card image that is stored with the active
+AVD (see the <code>-avd</code> startup option).</p>
+
+<p>Alternatively, you can start the emulator with the
+<code>-sdcard</code> flag and specify the name and path of your image (relative
+to the current working directory): </p>
+
+<pre>emulator -sdcard &lt;filepath&gt;</pre>
+
+
+<h2 id="diskimages">Working with Emulator Disk Images</h2>
+
+<p>The emulator uses mountable disk images stored on your development machine to
+simulate flash (or similar) partitions on an actual device. For example, it uses a
+disk image containing an emulator-specific kernel, the Android system, a
+ramdisk image, and writeable images for user data and simulated SD card.</p>
+
+<p>To run properly, the emulator requires access to a specific set of disk image
+files. By default, the Emulator always looks for the disk images in the
+private storage area of the AVD in use. If no images exist there when
+the Emulator is launched, it creates the images in the AVD directory based on
+default versions stored in the SDK. </p>
+
+<p class="note"><strong>Note:</strong> The default storage location for
+AVDs is in <code>~/.android/avd</code> on OS X and Linux, <code>C:\Documents and
+Settings\&lt;user&gt;\.android\</code> on Windows XP, and
+<code>C:\Users\&lt;user&gt;\.android\</code>
+on Windows Vista.</p>
+
+<p>To let you use alternate or custom versions of the image files, the emulator
+provides startup options that override the default locations and filenames of
+the image files. When you use one of these options, the emulator searches for the image
+file under the image name or location that you specify; if it can not locate the
+image, it reverts to using the default names and location.</p>
+
+<p>The emulator uses three types of image files: default image files, runtime
+image files, and temporary image files. The sections below describe how to
+override the location/name of each type of file. </p>
+
+<h3 id="defaultimages">Default image files</h3>
+
+<p>When the emulator launches, but does not find an existing user data image in
+the active AVD's storage area, it creates a new one from a default version
+included in the SDK. The default user data image is read-only. The image
+files are read-only.</p>
+
+<p>The emulator provides the <code>-system &lt;dir&gt;</code> startup option to
+let you override the location where the emulator looks for the default
+user data image. </p>
+
+<p>The emulator also provides a startup option that lets you override the name
+of the default user data image, as described in the following table. When you use the
+option, the emulator looks in the default directory, or in a custom location
+(if you specified <code>-system &lt;dir&gt;</code>). </p>
+
+
+<table>
+<tr>
+  <th width="10%" >Name</th>
+    <th width="30%" >Description</th>
+    <th width="40%" >Comments</th>
+</tr>
+
+<!--
+<tr>
+  <td><code>kernel-qemu.img</code></td>
+  <td>The emulator-specific Linux kernel image</td>
+  <td>Override using <code>-kernel &lt;file&gt;</code></td>
+</tr>
+
+<tr>
+  <td><code>ramdisk.img</code></td>
+  <td>The ramdisk image used to boot the system.</td>
+  <td>Override using <code>-ramdisk &lt;file&gt;</code></td>
+</tr>
+
+<tr>
+  <td><code>system.img</code></td>
+  <td>The <em>initial</em> Android system image.</td>
+  <td>Override using <code>-image &lt;file&gt;</code></td>
+</tr>
+-->
+<tr>
+  <td><code>userdata.img</code></td>
+  <td>The <em>initial</em> user-data disk image</td>
+  <td>Override using <code>-initdata &lt;file&gt;</code>. Also see
+<code>-data &lt;file&gt;</code>, below.</td>
+</tr>
+
+</table>
+
+<h3 id="runtimeimages">Runtime images: user data and SD card</h3>
+
+<p>At runtime, the emulator reads and writes data to two disk images: a
+user-data image and (optionally) an SD card image. These images emulate the user-data
+partition and removable storage media on actual device. </p>
+
+<p>The emulator provides a default user-data disk image. At startup, the emulator
+creates the default image as a copy of the system user-data image (user-data.img),
+described above. The emulator stores the new image with the files of the active AVD.</p>
+
+<!--
+<p>The emulator provides a startup option, <code>-datadir &lt;dir&gt;</code>,
+that you can use to override the location under which the emulator looks for the runtime
+image files. </p>
+-->
+
+<p>The emulator provides startup options to let you override the actual names and storage
+locations of the runtime images to load, as described in the following table. When you use one
+of these options, the emulator looks for the specified file(s) in the current working directory,
+in the AVD directory, or in a custom location (if you specified a path with the filename). </p>
+
+<table>
+<tr>
+  <th width="10%" >Name</th>
+    <th width="30%" >Description</th>
+    <th width="40%" >Comments</th>
+</tr>
+<tr>
+  <td><code>userdata-qemu.img</code></td>
+  <td>An image to which the emulator writes runtime user-data for a unique user.</td>
+  <td>Override using <code>-data &lt;filepath&gt;</code>, where <code>&lt;filepath&gt;</code> is the
+path the image, relative to the current working directory. If you supply a filename only,
+the emulator looks for the file in the current working directory. If the file at <code>&lt;filepath&gt;</code> does
+not exist, the emulator creates an image from the default userdata.img, stores it under the name you
+specified, and persists user data to it at shutdown. </td>
+</tr>
+
+<tr>
+  <td><code>sdcard.img</code></td>
+  <td>An image representing an SD card inserted into the emulated device.</td>
+  <td>Override using <code>-sdcard &lt;filepath&gt;</code>, where <code>&lt;filepath&gt;</code> is the
+path the image, relative to the current working directory. If you supply a filename only,
+the emulator looks for the file in the current working directory. </td>
+</tr>
+
+</table>
+
+<h4>User-Data Image</h4>
+
+<p>Each emulator instance uses a writeable user-data image to store user- and
+session-specific data. For example, it uses the image to store a unique user's
+installed application data, settings, databases, and files. </p>
+
+<p>At startup, the emulator attempts to load a user-data image stored during
+a previous session. It looks for the file in the current working directory,
+in the AVD directory described in a previous section and at the custom location/name
+that you specified at startup. </p>
+
+<ul>
+<li>If it finds a user-data image, it mounts the image and makes it available
+to the system for reading and writing of user data. </li>
+<li>If it does not find one, it creates an image by copying the system user-data
+image (userdata.img), described above. At device power-off, the system persists
+the user data to the image, so that it will be available in the next session.
+Note that the emulator stores the new disk image at the location/name that you
+specify in <code>-data</code> startup option.</li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Because of the AVD configurations used in the emulator,
+each emulator instance gets its own dedicated storage. There is no longer a need
+to use the <code>-d</code> option to specify an instance-specific storage area.</p>
+
+<h4>SD Card</h4>
+
+<P>Optionally, you can create a writeable disk image that the emulator can use
+to simulate removeable storage in an actual device. For information about how to create an
+emulated SD card and load it in the emulator, see <a href="#sdcard">SD Card Emulation</a></p>
+
+<p>You can also use the android tool to automatically create an SD Card image
+for you, when creating an AVD. For more information, see <a
+href="{@docRoot}tools/devices/managing-avds.html">Managing Virtual Devices with AVD
+Manager</a>.
+
+
+<h3 id="temporaryimages">Temporary Images</h3>
+
+<p>The emulator creates two writeable images at startup that it deletes at
+device power-off. The images are: </p>
+
+<ul>
+  <li>A writable copy of the Android system image</li>
+  <li>The <code>/cache</code> partition image</li>
+</ul>
+
+<p>The emulator does not permit renaming the temporary system image or
+persisting it at device power-off. </p>
+
+<p>The <code>/cache</code> partition image is initially empty, and is used by
+the browser to cache downloaded web pages and images. The emulator provides an
+<code>-cache &lt;file&gt;</code>, which specifies the name of the file in which
+to persist the <code>/cache</code> image at device power-off. If <code>&lt;file&gt;
+</code> does not exist, the emulator creates it as an empty file. </p>
+
+<p>You can also disable the use of the cache partition by specifying the
+<code>-nocache</code> option at startup. </p>
+
+
+<h2 id="emulatornetworking">Emulator Networking</h2>
+
+<p>The emulator provides versatile networking capabilities that you can use to
+set up complex modeling and testing environments for your application. The
+sections below introduce the emulator's network architecture and capabilities.
+</p>
+
+<h3 id="networkaddresses">Network Address Space</h3>
+
+<p>Each instance of the emulator runs behind a virtual router/firewall service
+that isolates it from your development machine's network interfaces and settings
+and from the internet. An emulated device can not see your development machine
+or other emulator instances on the network. Instead, it sees only that it is
+connected through Ethernet to a router/firewall.</p>
+
+<p>The virtual router for each instance manages the 10.0.2/24 network address
+space &mdash; all addresses managed by the router are in the form of
+10.0.2.&lt;xx&gt;, where &lt;xx&gt; is a number. Addresses within this space are
+pre-allocated by the emulator/router as follows:</p>
+
+<table>
+  <tr>
+    <th>Network Address</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td>10.0.2.1</td>
+    <td>Router/gateway address </td>
+  </tr>
+  <tr>
+    <td>10.0.2.2</td>
+    <td>Special alias to your host loopback interface (i.e., 127.0.0.1 on your
+development machine)</td>
+  </tr>
+  <tr>
+    <td>10.0.2.3</td>
+    <td>First DNS server</td>
+  </tr>
+  <tr>
+    <td>10.0.2.4 / 10.0.2.5 / 10.0.2.6</td>
+    <td>Optional second, third and fourth DNS server (if any) </td>
+  </tr>
+  <tr>
+    <td>10.0.2.15</td>
+    <td>The emulated device's own network/ethernet interface</td>
+  </tr>
+  <tr>
+    <td>127.0.0.1</td>
+    <td>The emulated device's own loopback interface </td>
+  </tr>
+</table>
+
+<p>Note that the same address assignments are used by all running emulator
+instances. That means that if you have two instances running concurrently on
+your machine, each will have its own router and, behind that, each will have an
+IP address of 10.0.2.15. The instances are isolated by a router and can
+<em>not</em> see each other on the same network. For information about how to
+let emulator instances communicate over TCP/UDP, see <a
+href="#connecting">Connecting Emulator Instances</a>.</p>
+
+<p>Also note that the address 127.0.0.1 on your development machine corresponds
+to the emulator's own loopback interface. If you want to access services running
+on your development machine's loopback interface (a.k.a. 127.0.0.1 on your
+machine), you should use the special address 10.0.2.2 instead.</p>
+
+<p>Finally, note that each emulated device's pre-allocated addresses are
+specific to the Android emulator and will probably be very different on real
+devices (which are also very likely to be NAT-ed, i.e., behind a
+router/firewall)</p>
+
+
+<h3 id="networkinglimitations">Local Networking Limitations</h3>
+
+<p>Android applications running in an emulator can connect to the network available on your
+workstation. However, they connect through the emulator, not directly to hardware, and the emulator
+acts like a normal application on your workstation. This means that the emulator, and thus your
+Android applications, are subject to some limitations:</p>
+
+<ul>
+  <li>Communication with the emulated device may be blocked by a firewall
+program running on your machine.</li>
+  <li>Communication with the emulated device may be blocked by another
+(physical) firewall/router to which your machine is connected.</li>
+</ul>
+
+<p>The emulator's virtual router should be able to handle all outbound TCP and
+UDP connections/messages on behalf of the emulated device, provided your
+development machine's network environment allows it to do so. There are no
+built-in limitations on port numbers or ranges except the one imposed by your
+host operating system and network.</p>
+
+<p>Depending on the environment, the emulator may not be able to support other
+protocols (such as ICMP, used for "ping") might not be supported. Currently, the
+emulator does not support IGMP or multicast. </p>
+
+<h3 id="redirection">Using Network Redirection</h3>
+
+<p>To communicate with an emulator instance behind its virtual router, you need
+to set up network redirection on the virtual router. Clients can then connect
+to a specified guest port on the router, while the router directs traffic
+to/from that port to the emulated device's host port. </p>
+
+<p>To set up the network redirection, you create a mapping of host and guest
+ports/addresses on the the emulator instance. There are two ways to set up
+network redirection: using emulator console commands and using the ADB tool, as
+described below. </p>
+
+
+<h4 id="consoleredir">Setting up Redirection through the Emulator Console</h4>
+
+<p>Each emulator instance provides a control console the you can connect to, to
+issue commands that are specific to that instance. You can use the
+<code>redir</code> console command to set up redirection as needed for an
+emulator instance. </p>
+
+<p>First, determine the console port number for the target emulator instance.
+For example, the console port number for the first emulator instance launched is
+5554. Next, connect to the console of the target emulator instance, specifying
+its console port number, as follows: </p>
+
+<pre><code>telnet localhost 5554</code></pre>
+
+<p>Once connected, use the <code>redir</code> command to work with redirection.
+To add a redirection, use:</p>
+
+<pre><code>add&nbsp;&lt;protocol&gt;:&lt;host-port&gt;:&lt;guest-port&gt;</code>
+</pre>
+
+<p>where <code>&lt;protocol&gt;</code> is either <code>tcp</code> or <code>udp</code>,
+and <code>&lt;host-port&gt;</code> and <code>&lt;guest-port&gt;</code> sets the
+mapping between your own machine and the emulated system, respectively. </p>
+
+<p>For example, the following command sets up a redirection that handles all
+incoming TCP connections to your host (development) machine on 127.0.0.1:5000
+and will pass them through to the emulated system's 10.0.2.15:6000.:</p>
+
+<pre>redir add tcp:5000:6000</pre>
+
+<p>To delete a redirection, you can use the <code>redir del</code> command. To
+list all redirection for a specific instance, you can use <code>redir
+list</code>. For more information about these and other console commands, see
+<a href="#console">Using the Emulator Console</a>. </p>
+
+<p>Note that port numbers are restricted by your local environment. this typically
+means that you cannot use host port numbers under 1024 without special
+administrator privileges.  Also, you won't be able to set up a redirection for a
+host port that is already in use by another process on your machine. In that
+case, <code>redir</code> generates an error message to that effect. </p>
+
+<h4 id="adbredir">Setting Up Redirection through ADB</h4>
+
+<p>The Android Debug Bridge (ADB) tool provides port forwarding, an alternate
+way for you to set up network redirection. For more information, see <a
+href="{@docRoot}tools/help/adb.html#forwardports">Forwarding Ports</a> in the ADB
+documentation.</p>
+
+<p>Note that ADB does not currently offer any way to remove a redirection,
+except by killing the ADB server.</p>
+
+
+<h3 id="dns">Configuring the Emulator's DNS Settings</h3>
+
+<p>At startup, the emulator reads the list of DNS servers that your system is
+currently using. It then stores the IP addresses of up to four servers on this
+list and sets up aliases to them on the emulated addresses 10.0.2.3, 10.0.2.4,
+10.0.2.5 and 10.0.2.6 as needed.  </p>
+
+<p>On Linux and OS X, the emulator obtains the DNS server addresses by parsing
+the file <code>/etc/resolv.conf</code>. On Windows, the emulator obtains the
+addresses by calling the <code>GetNetworkParams()</code> API. Note that this
+usually means that the emulator ignores the content of your "hosts" file
+(<code>/etc/hosts</code> on Linux/OS X, <code>%WINDOWS%/system32/HOSTS</code>
+ on Windows).</P>
+
+<p>When starting the emulator at the command line, you can also use the
+<code>-dns-server &lt;serverList&gt;</code> option to manually specify the
+addresses of DNS servers to use, where &lt;serverList&gt; is a comma-separated
+list of server names or IP addresses. You might find this option useful if you
+encounter DNS resolution problems in the emulated network (for example, an
+"Unknown Host error" message that appears when using the web browser).</p>
+
+
+<h3 id="proxy">Using the Emulator with a Proxy</h3>
+
+<p>If your emulator must access the Internet through a proxy server, you can use
+the <code>-http-proxy &lt;proxy&gt;</code> option when starting the emulator, to
+set up the appropriate redirection. In this case, you specify proxy information
+in <code>&lt;proxy&gt;</code> in one of these formats:</p>
+
+<pre>http://&lt;machineName&gt;:&lt;port&gt;</pre>
+
+<p>or</p>
+
+<pre>http://&lt;username&gt;:&lt;password&gt;@&lt;machineName&gt;:&lt;port&gt;</pre>
+
+<p>The <code>-http-proxy</code> option forces the emulator to use the specified
+HTTP/HTTPS proxy for all outgoing TCP connections. Redirection for UDP is not
+currently supported.</p>
+
+<p>Alternatively, you can define the environment variable
+<code>http_proxy</code> to the value you want to use for
+<code>&lt;proxy&gt;</code>. In this case, you do not need to specify a value for
+<code>&lt;proxy&gt;</code> in the <code>-http-proxy</code> command &mdash; the
+emulator checks the value of the <code>http_proxy</code> environment variable at
+startup and uses its value automatically, if defined. </p>
+
+<p>You can use the <code>-verbose-proxy</code> option to diagnose proxy
+connection problems.</p>
+
+
+<h3 id="connecting">Interconnecting Emulator Instances</h3>
+
+<p>To allow one emulator instance to communicate with another, you must set up
+the necessary network redirection as illustrated below. </p>
+
+<p>Assume that your environment is</p>
+
+<ul>
+  <li>A is you development machine</li>
+  <li>B is your first emulator instance, running on A</li>
+  <li>C is your second emulator instance, also running on A</li>
+</ul>
+
+<p>and you want to run a server on B, to which C will connect, here is how you
+could set it up: </p>
+
+<ol>
+  <li>Set up the server on B, listening to
+<code>10.0.2.15:&lt;serverPort&gt;</code></li>
+  <li>On B's console, set up a redirection from
+<code>A:localhost:&lt;localPort&gt;</code> to <code>
+B:10.0.2.15:&lt;serverPort&gt;</code></li>
+  <li>On C, have the client connect to <code>10.0.2.2:&lt;localPort&gt;</code></li>
+</ol>
+
+<p>For example, if you wanted to run an HTTP server, you can select
+<code>&lt;serverPort&gt;</code> as 80 and <code>&lt;localPort&gt;</code> as
+8080:</p>
+
+<ul>
+  <li>B listens on 10.0.2.15:80</li>
+  <li>On B's console, issue <code>redir add tcp:8080:80</code></li>
+  <li>C connects to 10.0.2.2:8080</li>
+</ul>
+
+<h3 id="calling">Sending a Voice Call or SMS to Another Emulator Instance</h3>
+
+<p>The emulator automatically forwards simulated voice calls and SMS messages from one instance to
+another. To send a voice call or SMS, use the dialer application or SMS application, respectively,
+from one of the emulators.</p>
+
+<p>To initiate a simulated voice call to another emulator instance:</p>
+<ol>
+<li>Launch the dialer application on the originating emulator instance.</li>
+<li>As the number to dial, enter the console port number of the instance you'd like to call. You can determine
+  the console port number of the target instance by checking its window title, where the
+  console port number is reported as "Android Emulator (&lt;port&gt;). </li>
+<li>Press "Dial". A new inbound call appears in the target emulator instance. </li>
+</ol>
+
+<p>To send an SMS message to another emulator instance, launch the SMS application (if available). Specify the console port number of the target emulator instance as as the SMS address, enter the message text, and send the message. The message is delivered to the target emulator instance. </p>
+
+<p>You can also connect to an emulator instance's console to simulate an incoming voice call or SMS. For more information, see <a href="#telephony">Telephony Emulation</a> and <a href="#sms">SMS Emulation</a>.
+
+
+<h2 id="console">Using the Emulator Console</h2>
+
+<p>Each running emulator instance provides a console that lets you query and control the emulated
+device environment. For example, you can use the console to manage port redirection, network
+characteristics, and telephony events while your application is running on the emulator. To
+access the console and enter commands, use telnet to connect to the console's port number.</p>
+
+<p>To connect to the console of any running emulator instance at any time, use this command: </p>
+
+<pre>telnet localhost &lt;console-port&gt;</pre>
+
+<p>An emulator instance occupies a pair of adjacent ports: a console port and an  {@code adb} port.
+The port numbers differ by 1, with the  {@code adb} port having the higher port number. The console
+of the first emulator instance running on a given machine uses console port 5554 and  {@code adb}
+port 5555. Subsequent instances use port numbers increasing by two &mdash; for example, 5556/5557,
+5558/5559, and so on. Up to 16 concurrent emulator instances can run a console facility. </p>
+
+<p>To connect to the emulator console, you must specify a valid console port. If multiple emulator instances are running, you need to determine the console port of the emulator instance you want to connect to. You can find the instance's console port listed in the title of the instance window. For example, here's the window title for an instance whose console port is 5554:</p>
+
+<p><code>Android Emulator (5554)</code></p>
+
+<p>Alternatively, you can use the <code>adb devices</code> command, which prints a list of running emulator instances and their console port numbers. For more information, see <a href="{@docRoot}tools/help/adb.html#devicestatus">Querying for Emulator/Device Instances</a> in the adb documentation.</p>
+
+<p class="note">Note: The emulator listens for connections on ports 5554-5587 and accepts connections only from localhost.</p>
+
+<p>Once you are connected to the console, you can then enter <code>help [command]</code> to see a list of console commands and learn about specific commands. </p>
+
+<p>To exit the console session, use <code>quit</code> or <code>exit</code>.</p>
+
+<p>The following sections below describe the major functional areas of the console.</p>
+
+
+<h3 id="portredirection">Port Redirection</h3>
+
+<p>You can use the console to add and remove port redirection while the emulator is running. After
+you connect to the console, manage port redirection by entering the following command:</p>
+
+<pre>redir &lt;list|add|del&gt; </pre>
+
+<p>The <code>redir</code> command supports the subcommands listed in the table below. </p>
+
+<table>
+<tr>
+  <th width="25%" >Subcommand
+  <th width="30%" >Description</th>
+  <th width="35%">Comments</th>
+</tr>
+
+  <tr>
+    <td><code>list</code></td>
+    <td>List the current port redirection.</td>
+  <td>&nbsp;</td>
+  </tr>
+
+
+<tr>
+ <td><code>add&nbsp;&lt;protocol&gt;:&lt;host-port&gt;:&lt;guest-port&gt;</code></td>
+  <td>Add a new port redirection.</td>
+<td><ul><li>&lt;protocol&gt; must be either &quot;tcp&quot; or &quot;udp&quot;</li>
+<li>&lt;host-port&gt; is the port number to open on the host</li>
+<li>&lt;guest-port&gt; is the port number to route data to on the emulator/device</li>
+</ul></td>
+</tr>
+<tr>
+  <td><code>del &lt;protocol&gt;:&lt;host-port&gt;</code></td>
+  <td>Delete a port redirection.</td>
+<td>The meanings of &lt;protocol&gt; and &lt;host-port&gt; are listed in the previous row.</td>
+</tr>
+</table>
+
+
+<h3 id="geo">Geo Location Provider Emulation</h3>
+
+<p>You can use the console to set the geographic location reported to the applications running
+inside an emulator. Use the <code>geo</code> command to send a simple GPS fix to the
+emulator, with or without NMEA 1083 formatting:</p>
+
+<pre>geo &lt;fix|nmea&gt;</pre>
+
+<p>The <code>geo</code> command supports the subcommands listed in the table below.</p>
+
+<table>
+<tr>
+  <th width="25%">Subcommand</th>
+  <th width="30%">Description</th>
+  <th width="35%">Comments</th>
+</tr>
+
+  <tr>
+    <td><code>fix &lt;longitude&gt; &lt;latitude&gt; [&lt;altitude&gt;]</code></td>
+    <td>Send a simple GPS fix to the emulator instance.</td>
+  <td>Specify longitude and latitude in decimal degrees. Specify altitude in meters.</td>
+  </tr>
+<tr>
+  <td><code>nmea &lt;sentence&gt;</code></td>
+  <td>Send an NMEA 0183 sentence to the emulated device, as if it were sent from an emulated GPS modem.</td>
+<td><code>&lt;sentence&gt;</code> must begin with '$GP'. Only '$GPGGA' and '$GPRCM' sentences are currently supported.</td>
+</tr>
+</table>
+
+<p>You can issue the <code>geo</code> command as soon as an emulator instance is running. The
+emulator sets the location you enter by creating a mock location provider. This provider responds to
+location listeners set by applications, and also supplies the location to the {@link
+android.location.LocationManager}. Any application can query the location manager to obtain the
+current GPS fix for the emulated device by calling:
+
+<pre>LocationManager.getLastKnownLocation("gps")</pre>
+
+<p>For more information about the Location Manager, see {@link android.location.LocationManager}.
+</p>
+
+<h3 id="events">Hardware Events Emulation</h3>
+
+<p>The {@code event} console commands sends hardware events to the emulator. The syntax for this
+command is as follows:</p>
+
+<pre>event &lt;send|types|codes|text&gt;</pre>
+
+<p>The <code>event</code> command supports the subcommands listed in the table below. </p>
+
+<table>
+<tr>
+  <th width="25%" >Subcommand
+  <th width="30%" >Description</th>
+  <th width="35%">Comments</th>
+</tr>
+
+  <tr>
+    <td><code>send &lt;type&gt;:&lt;code&gt;:&lt;value&gt; [...]</code></td>
+    <td>Send one or more events to the Android kernel. </td>
+  <td>You can use text names or integers for <code>&lt;type&gt;</code> and <code>&lt;value&gt;</code>.</td>
+  </tr>
+<tr>
+  <td><code>types</code></td>
+  <td>List all <code>&lt;type&gt;</code> string aliases supported by the <code>event</code> subcommands.</td>
+<td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>codes &lt;type&gt;</code></td>
+  <td>List all <code>&lt;codes&gt;</code> string aliases supported by the <code>event</code>
+   subcommands for the specified <code>&lt;type&gt;</code>.</td>
+<td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>event text &lt;message&gt;</code></td>
+  <td>Simulate keypresses to send the specified string of characters as a message,</td>
+<td>The message must be a UTF-8 string. Unicode posts will be reverse-mapped according to the current device keyboard. Unsupported characters will be discarded silently.</td>
+</tr>
+</table>
+
+
+<h3 id="power">Device Power Characteristics</h3>
+
+<p>The {@code power} command controls the power state reported by the emulator to applications. The
+syntax for this command is as follows: </p>
+
+<pre>power &lt;display|ac|status|present|health|capacity&gt;</pre>
+
+<p>The <code>event</code> command supports the subcommands listed in the table below. </p>
+
+<table>
+<tr>
+  <th width="25%" >Subcommand </th>
+  <th width="30%" >Description</th>
+  <th width="35%">Comments</th>
+</tr>
+
+  <tr>
+    <td><code>display</code></td>
+    <td>Display battery and charger state.</td>
+  <td>&nbsp;</td>
+  </tr>
+<tr>
+  <td><code>ac &lt;on|off&gt;</code></td>
+  <td>Set AC charging state to on or off. </td>
+<td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>status &lt;unknown|charging|discharging|not-charging|full&gt;</code></td>
+  <td>Change battery status as specified.</td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+  <td><code>present &lt;true|false&gt;</code></td>
+  <td>Set battery presence state.</td>
+<td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>health &lt;unknown|good|overheat|dead|overvoltage|failure&gt;</code></td>
+  <td>Set battery health state.</td>
+<td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>power health &lt;percent&gt;</code></td>
+  <td>Set remaining battery capacity state (0-100).</td>
+<td>&nbsp;</td>
+</tr>
+</table>
+
+
+<h3 id="netstatus">Network Status</h3>
+
+<p>You can use the console to check the network status and current delay and speed characteristics. To do so, connect to the console and use the <code>netstatus</code> command. Here's an example of the command and its output. </p>
+
+<pre>network status
+</pre>
+
+
+<h3 id="netdelay">Network Delay Emulation</h3>
+
+<p>The emulator lets you simulate various network latency levels, so that you can test your
+application in an environment more typical of the actual conditions in which it will run. You can
+set a latency level or range at emulator startup or you can use the console to change the latency,
+while the application is running in the emulator. </p>
+
+<p>To set latency at emulator startup, use the  <code>-netdelay</code> emulator option with a
+supported <code>&lt;delay&gt;</code> value, as listed in the table below. Here are some
+examples:</p>
+
+<pre>emulator -netdelay gprs
+emulator -netdelay 40 100</pre>
+
+<p>To make changes to  network delay while the emulator is running, connect to the console and use
+the <code>netdelay</code> command with a supported <code>&lt;delay&gt;</code> value from the table
+below.</p>
+
+<pre>network delay gprs</pre>
+
+<p>The format of network &lt;delay&gt; is one of the following (numbers are milliseconds):</p>
+
+<table style="clear:right;width:100%;">
+<tr>
+  <th width="30%" >Value</th>
+  <th width="35%" >Description</th><th width="35%">Comments</th></tr>
+
+  <tr><td><code>gprs</code></td><td>GPRS</td>
+  <td>(min 150, max 550)</td>
+  </tr>
+
+<tr><td><code>edge</code></td><td>EDGE/EGPRS</td>
+<td>(min 80, max 400)</td>
+</tr>
+<tr><td><code>umts</code></td><td>UMTS/3G</td>
+<td>(min 35, max 200)</td>
+</tr>
+<tr><td><code>none</code></td><td>No latency</td><td>(min 0, max 0)</td></tr>
+<tr><td><code>&lt;num&gt;</code></td>
+<td>Emulate an exact latency  (milliseconds).</td>
+<td>&nbsp;</td></tr>
+<tr><td><code>&lt;min&gt;:&lt;max&gt;</code></td>
+<td>Emulate an specified latency range (min, max milliseconds).</td>
+<td>&nbsp;</td></tr>
+</table>
+
+
+<h3 id="netspeed">Network Speed Emulation</h3>
+
+<p>The emulator also lets you simulate various network transfer rates.
+You can set a transfer rate or range at emulator startup or you can use the console to change the
+rate, while the application is running in the emulator.</p>
+
+<p>To set the network speed at emulator startup, use the  <code>-netspeed</code> emulator option with a supported
+<code>&lt;speed&gt;</code> value, as listed in the table below. Here are some examples:</p>
+
+<pre>emulator -netspeed gsm
+emulator -netspeed 14.4 80</pre>
+
+<p>To make changes to network speed while the emulator is running, connect to the console and use
+the <code>netspeed</code> command with a supported <code>&lt;speed&gt;</code> value from the table
+below.</p>
+
+<pre>network speed 14.4 80</pre>
+
+<p>The format of network <code>&lt;speed&gt;</code> is one of the following (numbers are
+kilobits/sec):</p>
+<table style="clear:right;width:100%;">
+<tbody>
+<tr>
+  <th width="30%">Value</th>
+  <th width="35%">Description</th><th width="35%">Comments</th></tr>
+
+  <tr>
+  <td><code>gsm</code></td>
+  <td>GSM/CSD</td><td>(Up: 14.4, down: 14.4)</td></tr>
+<tr>
+  <td><code>hscsd</code></td>
+  <td>HSCSD</td><td>(Up: 14.4, down: 43.2)</td></tr>
+<tr>
+  <td><code>gprs</code></td>
+  <td>GPRS</td><td>(Up: 40.0, down: 80.0)</td></tr>
+<tr>
+  <td><code>edge</code></td>
+  <td>EDGE/EGPRS</td>
+  <td>(Up: 118.4, down: 236.8)</td>
+</tr>
+<tr>
+  <td><code>umts</code></td>
+  <td>UMTS/3G</td><td>(Up: 128.0, down: 1920.0)</td></tr>
+<tr>
+  <td><code>hsdpa</code></td>
+  <td>HSDPA</td><td>(Up: 348.0, down: 14400.0)</td></tr>
+<tr>
+  <td><code>full</code></td>
+  <td>no limit</td><td>(Up: 0.0, down: 0.0)</td></tr>
+<tr>
+  <td><code>&lt;num&gt;</code></td>
+  <td>Set an exact rate used for both upload and download.</td><td></td></tr>
+<tr>
+  <td><code>&lt;up&gt;:&lt;down&gt;</code></td>
+  <td>Set exact rates for upload and download separately.</td><td></td></tr>
+</table>
+
+
+<h3 id="telephony">Telephony Emulation</h3>
+
+<p>The Android emulator includes its own GSM emulated modem that lets you simulate telephony
+functions in the emulator. For example, you can simulate inbound phone calls, establish data
+connections and terminate them. The Android system handles simulated calls exactly as it would
+actual calls. The emulator does not support call audio.</p>
+
+<p>You can use the {@code gsm} command to access the emulator's telephony functions after connecting
+to the console. The syntax for this command is as follows:</p>
+
+<pre>gsm &lt;call|accept|busy|cancel|data|hold|list|voice|status&gt; </pre>
+
+<p>The <code>gsm</code> command supports the subcommands listed in the table below. </p>
+<table>
+  <tr>
+    <th>Subcommand </th>
+    <th width="25%">Description</th>
+    <th>Comments</th>
+  </tr>
+  <tr>
+    <td><code>call &lt;phonenumber&gt;</code></td>
+    <td>Simulate an inbound phone call from &lt;phonenumber&gt;.</td>
+    <td>&nbsp;</td>
+  </tr>
+  <tr>
+    <td><code>accept &lt;phonenumber&gt;</code></td>
+    <td>Accept an inbound call from &lt;phonenumber&gt; and change the call's state "active".</td>
+    <td>You can change a call's state to "active" only if its current state is "waiting" or "held".</td>
+  </tr>
+  <tr>
+    <td><code>busy &lt;phonenumber&gt;</code></td>
+    <td>Close an outbound call to &lt;phonenumber&gt; and change the call's state to "busy".</td>
+    <td>You can change a call's state to "busy" only if its current state is "waiting".</td>
+  </tr>
+  <tr>
+    <td><code>cancel &lt;phonenumber&gt;</code></td>
+    <td>Terminate an inbound or outbound phone call to/from &lt;phonenumber&gt;.</td>
+    <td>&nbsp;</td>
+  </tr>
+  <tr>
+    <td><code>data &lt;state&gt;</code></td>
+    <td>Change the state of the GPRS data connection to &lt;state&gt;.</td>
+    <td>Supported &lt;state&gt; values are:<br />
+    <ul>
+          <li><code>unregistered</code> -- No network available</li>
+          <li><code>home</code> -- On local network, non-roaming</li>
+          <li><code>roaming</code> -- On roaming network</li>
+          <li><code>searching</code> -- Searching networks</li>
+          <li><code>denied</code> -- Emergency calls only</li>
+          <li><code>off</code> -- Same as 'unregistered'</li>
+      <li><code>on</code> -- same as 'home'</li>
+    </ul>
+          </td>
+  </tr>
+  <tr>
+    <td><code>hold</code></td>
+    <td>Change the state of a call to "held". </td>
+    <td>You can change a call's state to "held" only if its current state is	 "active" or "waiting". </td>
+  </tr>
+  <tr>
+    <td><code>list</code></td>
+    <td>List all inbound and outbound calls and their states.</td>
+    <td>&nbsp;</td>
+  </tr>
+  <tr>
+    <td><code>voice &lt;state&gt;</code></td>
+    <td>Change the state of the GPRS voice connection to &lt;state&gt;.</td>
+    <td>Supported &lt;state&gt; values are:<br />
+    <ul>
+    <li><code>unregistered</code> -- No network available</li>
+    <li><code>home</code> -- On local network, non-roaming</li>
+    <li><code>roaming</code> -- On roaming network</li>
+    <li><code>searching</code> -- Searching networks</li>
+    <li><code>denied</code> -- Emergency calls only</li>
+    <li><code>off</code> -- Same as 'unregistered'</li>
+    <li><code>on</code> -- Same as 'home'</li>
+    </ul>
+    </td>
+  </tr>
+
+  <tr>
+    <td><code>status</code></td>
+    <td>Report the current GSM voice/data state.</td>
+    <td>Values are those described for the <code>voice</code> and <code>data</code> commands.</td>
+  </tr>
+</table>
+
+
+<h3 id="sms">SMS Emulation</h3>
+
+<p>The Android emulator console lets you generate an SMS message and direct it to an emulator
+instance. Once you connect to an emulator instance, you can generate an emulated incoming SMS using
+the following command:</p>
+
+<pre>sms send &lt;senderPhoneNumber&gt; &lt;textmessage&gt;</pre>
+
+<p>where <code>&lt;senderPhoneNumber&gt;</code> contains an arbitrary numeric string. </p>
+
+<p>The console forwards the SMS message to the Android framework, which passes it through to an application that handles that message type. </p>
+
+
+<h3 id="vm">VM State</h3>
+
+<p>You can use the <code>vm</code> command to control the VM on an emulator instance. The syntax for
+this command is as follows: </p>
+
+<pre>vm &lt;start|stop|status&gt;</pre>
+
+<p>The <code>vm</code> command supports the subcommands listed in the table below. </p>
+
+<table>
+<tr>
+  <th width="25%">Subcommand</th>
+  <th width="30%">Description</th>
+  <th width="35%">Comments</th>
+</tr>
+<tr>
+    <td><code>start</code></td>
+    <td>Start the VM on the instance. </td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+    <td><code>stop</code></td>
+    <td>Stop the VM on the instance. </td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+    <td><code>start</code></td>
+    <td>Display the current status of the VM (running or stopped). </td>
+  <td>&nbsp;</td>
+</tr>
+</table>
+
+
+<h3 id="window">Emulator Window</h3>
+
+<p>You can use the <code>window</code> command to manage the emulator window. The syntax for this
+command is as follows: </p>
+
+<pre>window &lt;scale&gt;</pre>
+
+<p>The <code>vm</code> command supports the subcommands listed in the table below. </p>
+
+<table>
+<tr>
+  <th width="25%">Subcommand</th>
+  <th width="30%">Description</th>
+  <th width="35%">Comments</th>
+</tr>
+<tr>
+    <td><code>scale &lt;scale&gt;</code></td>
+    <td>Scale the emulator window.</td>
+  <td>A number between 0.1 and 3 that sets the scaling factor. You can
+  also specify scale as a DPI value if you add the suffix "dpi" to the scale value. A value of "auto"
+  tells the emulator to select the best window size.</td>
+</tr>
+</table>
+
+
+<h3 id="terminating">Terminating an Emulator Instance</h3>
+
+<p>You can terminate an emulator instance through the console, using the <code>kill</code> command.</p>
+
+
+<h2 id="limitations">Emulator Limitations</h2>
+
+<p>The functional limitations of the emulator include: </p>
+<ul>
+  <li>No support for placing or receiving actual phone calls. You can simulate phone calls (placed
+    and received) through the emulator console, however. </li>
+  <li>No support for USB connections</li>
+  <li>No support for device-attached headphones</li>
+  <li>No support for determining network connected state</li>
+  <li>No support for determining battery charge level and AC charging state</li>
+  <li>No support for determining SD card insert/eject</li>
+  <li>No support for Bluetooth</li>
+</ul>
+
+
+<h2 id="troubleshooting">Troubleshooting Emulator Problems</h2>
+
+<p>The {@code adb} utility sees the emulator as an actual physical device. For this reason, you
+might have to use the {@code -d} flag with some common {@code adb} commands, such as
+<code>install</code>. The {@code -d} flag lets you specify which of several connected devices to use
+as the target of a command. If you don't specify {@code -d}, the emulator targets the first
+device in its list. For more information about {@code adb}, see <a
+href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>.</p>
+
+<p>For emulators running on Mac OS X, if you see an error {@code Warning: No DNS servers found}
+when starting the emulator, check to see whether you have an <code>/etc/resolv.conf</code> file. If
+not, please run the following line in a command window:</p>
+    <pre>ln -s /private/var/run/resolv.conf /etc/resolv.conf</pre>
+
+<p>See <a href="{@docRoot}resources/faq/index.html">Frequently Asked Questions</a> for more
+troubleshooting information. </p>
diff --git a/docs/html/tools/devices/index.jd b/docs/html/tools/devices/index.jd
new file mode 100644
index 0000000..bec2268
--- /dev/null
+++ b/docs/html/tools/devices/index.jd
@@ -0,0 +1,78 @@
+page.title=Managing Virtual Devices
+@jd:body
+
+
+ <p>An Android Virtual Device (AVD) is an emulator configuration that lets you model an actual
+  device by defining hardware and software options to be emulated by the Android Emulator.</p>
+
+  <p>The easiest way to create an AVD is to use the graphical <a href= 
+  "{@docRoot}tools/devices/managing-avds.html">AVD Manager</a>, which you launch
+  from Eclipse by clicking <strong>Window &gt; AVD Manager</strong>. You can also start the AVD
+Manager from the command line by calling the <code>android</code> tool with the <code>avd</code>
+options, from the <strong>&lt;sdk>/tools/</strong> directory.</p>
+
+  <p>You can also create AVDs on the command line by passing the <code>android</code> tool options.
+  For more information on how to create AVDs in this manner, see <a href= 
+  "{@docRoot}tools/devices/managing-avds-cmdline.html">Managing Virtual
+  Devices from the Command Line</a>.</p>
+
+  <p>An AVD consists of:</p>
+
+  <ul>
+    <li>A hardware profile: Defines the hardware features of the virtual
+    device. For example, you can define whether the device has a camera, whether it uses a physical
+    QWERTY keyboard or a dialing pad, how much memory it has, and so on.</li>
+
+    <li>A mapping to a system image: You can define what version of the Android platform will run
+    on the virtual device. You can choose a version of the standard Android platform or the system
+    image packaged with an SDK add-on.</li>
+
+    <li>Other options: You can specify the emulator skin you want to use with the AVD, which lets
+    you control the screen dimensions, appearance, and so on. You can also specify the emulated SD
+    card to use with the AVD.</li>
+
+    <li>A dedicated storage area on your development machine: the device's user data (installed
+    applications, settings, and so on) and emulated SD card are stored in this area.</li>
+  </ul>
+
+  <p>You can create as many AVDs as you need, based on the types of device you want to model. 
+  To thoroughly test your application, you should create an AVD for each general device configuration
+  (for example, different screen sizes and platform versions) with which your application is compatible
+  and test your application on each one.</p>
+
+  <p>Keep these points in mind when you are selecting a system image target for your AVD:</p>
+
+  <ul>
+    <li>The API Level of the target is important, because your application will not be able to run
+    on a system image whose API Level is less than that required by your application, as specified
+    in the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html">
+    <code>minSdkVersion</code></a> attribute of the application's manifest file. For more
+    information about the relationship between system API Level and application
+    <code>minSdkVersion</code>, see <a href=
+    "{@docRoot}tools/publishing/versioning.html">Specifying Minimum System API Version</a>.</li>
+
+    <li>You should create at least one AVD that uses a target whose API Level is greater than that required
+    by your application, because it allows you to test the
+    forward-compatibility of your application. Forward-compatibility testing ensures that, when
+    users who have downloaded your application receive a system update, your application will
+    continue to function normally.</li>
+
+    <li>If your application declares a 
+    <a href="{@docRoot}guide/topics/manifest/uses-library-element.html"><code>uses-library</code></a>
+    element in its manifest file, the application can only run on a system image in which that external
+    library is present. If you want to run your application on an emulator, create an AVD that
+    includes the required library. Usually, you must create such an AVD using an Add-on component for the
+    AVD's platform (for example, the Google APIs Add-on contains the Google Maps library).</li>
+  </ul>
+
+  <p>To learn how to manage AVDs using a graphical tool, read <a href=
+  "{@docRoot}tools/devices/managing-avds.html">Managing AVDs with AVD Manager</a>. To
+learn how to manage AVDs on the command line, read
+  <a href="{@docRoot}tools/devices/managing-avds-cmdline.html">Managing AVDs
+  from the Command Line</a>.</p>
+
+
+
+
+
+
diff --git a/docs/html/tools/devices/managing-avds-cmdline.jd b/docs/html/tools/devices/managing-avds-cmdline.jd
new file mode 100644
index 0000000..ba353c1
--- /dev/null
+++ b/docs/html/tools/devices/managing-avds-cmdline.jd
@@ -0,0 +1,369 @@
+page.title=Managing AVDs from the Command Line
+parent.title=Managing Virtual Devices
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#listingtargets">Listing Targets</a></li>
+    <li><a href="#AVDCmdLine">Creating AVDs</a>
+      <ol>
+        <li><a href="#CustomDensity">Customize the device resolution or density</a></li>
+        <li><a href="#DefaultLocation">Default location of AVD files</a></li>
+        <li><a href="#hardwareopts">Setting hardware emulation options</a></li>
+      </ol>
+    </li>
+    <li><a href="#moving">Moving an AVD</a></li>
+    <li><a href="#updating">Updating an AVD</a></li>
+    <li><a href="#deleting">Deleting an AVD</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/building/building-cmdline.html">Building and Running
+from the Command Line</a></li>
+    <li><a href="{@docRoot}tools/devices/emulator.html">Using the Android
+Emulator</a></li>
+  </ol>
+  </div>
+</div>
+
+
+<p>The <code>android</code> tool lets you manage AVDs on the command line. For a complete reference 
+of the command line options that you can use, see the reference for the 
+<a href="{@docRoot}tools/help/android.html"><code>android</code></a> tool.</p>
+
+
+
+<h2 id="listingtargets">Listing Targets</h2>
+
+<p>To generate a list of system image targets, use this command: </p>
+
+<pre>android list targets</pre>
+
+<p>The <code>android</code> tool scans the <code>&lt;sdk&gt;/platforms/</code> and
+<code>&lt;sdk&gt;/add-ons/</code> directories looking for valid system images and
+then generates the list of targets. Here's an example of the command output:
+</p>
+
+<pre>Available Android targets:
+id: 1 or "android-3"
+     Name: Android 1.5
+     Type: Platform
+     API level: 3
+     Revision: 4
+     Skins: QVGA-L, HVGA-L, HVGA (default), HVGA-P, QVGA-P
+id: 2 or "android-4"
+     Name: Android 1.6
+     Type: Platform
+     API level: 4
+     Revision: 3
+     Skins: QVGA, HVGA (default), WVGA800, WVGA854
+id: 3 or "android-7"
+     Name: Android 2.1-update1
+     Type: Platform
+     API level: 7
+     Revision: 2
+     Skins: QVGA, WQVGA400, HVGA (default), WVGA854, WQVGA432, WVGA800
+id: 4 or "android-8"
+     Name: Android 2.2
+     Type: Platform
+     API level: 8
+     Revision: 2
+     Skins: WQVGA400, QVGA, WVGA854, HVGA (default), WVGA800, WQVGA432
+id: 5 or "android-9"
+     Name: Android 2.3
+     Type: Platform
+     API level: 9
+     Revision: 1
+     Skins: HVGA (default), WVGA800, WQVGA432, QVGA, WVGA854, WQVGA400
+</pre>
+
+
+
+<h2 id="AVDCmdLine">Creating AVDs</h2>
+
+<p>In addition to creating AVDs with the 
+<a href="{@docRoot}tools/devices/managing-avds-cmdline.html">AVD Manager user interface</a>,
+you can also create them by passing in command line arguments to the <code>android</code> tool.
+</p>
+
+<p>Open a terminal window and change to
+the <code>&lt;sdk&gt;/tools/</code> directory, if needed.</p>
+
+<p>To create each AVD, you issue the command <code>android create avd</code>,
+with options that specify a name for the new AVD and the system image you want
+to run on the emulator when the AVD is invoked. You can specify other options on
+the command line also, such as the emulated SD card size, the emulator skin, or a custom
+location for the user data files.</p> 
+
+<p>Here's the command-line usage for creating an AVD: </p>
+
+<pre>android create avd -n &lt;name&gt; -t &lt;targetID&gt; [-&lt;option&gt; &lt;value&gt;] ... </pre>
+
+<p>You can use any name you want for the AVD, but since you are likely to be
+creating multiple AVDs, you should choose a name that lets you recognize the
+general characteristics offered by the AVD. The target ID is an integer assigned by the
+<code>android</code> tool. The target ID is not derived from the system image name, 
+version, or API Level, or other attribute, so you need to run the <code>android list targets</code>
+command to list the target ID of each system image. You should do this <em>before</em> you run
+the <code>android create avd</code> command. See the <a
+href="{@docRoot}tools/help/android.html">android</a>
+tool documentation for more information on the command line options.</p>
+
+
+<p>When you've selected the target you want to use and made a note of its ID,
+use the <code>android create avd</code> command to create the AVD, supplying the
+target ID as the <code>-t</code> argument. Here's an example that creates an
+AVD with name "my_android1.5" and target ID "2" (the standard Android 1.5 
+system image in the list above): </p>
+
+<pre>android create avd -n my_android1.5 -t 2</pre>
+
+<p>If the target you selected was a standard Android system image ("Type:
+platform"), the <code>android</code> tool next asks you whether you want to
+create a custom hardware profile. </p>
+<pre>Android 1.5 is a basic Android platform.
+Do you wish to create a custom hardware profile [no]</pre>
+
+<p>If you want to set custom hardware emulation options for the AVD, enter
+"yes" and set values as needed. If you want to use the default hardware
+emulation options for the AVD, just press the return key (the default is "no").
+The <code>android</code> tool creates the AVD with name and system image mapping you
+requested, with the options you specified. For more information, see <a href="#hardwareopts">
+Setting Hardware Emulation Options</a>.
+
+<p class="note"><strong>Note:</strong> If you are creating an AVD whose target is an SDK add-on, the
+<code>android</code> tool does not allow you to set hardware emulation options.
+It assumes that the provider of the add-on has set emulation options
+appropriately for the device that the add-on is modeling, and so prevents you
+from resetting the options. </p>
+
+
+<h3 id="CustomDensity">Customize the device resolution or density</h3>
+
+<p>When testing your application, we recommend that you test your application in several different
+AVDs, using different screen configurations (different combinations of size and density). In
+addition, you should set up the AVDs to run at a physical size that closely matches an actual
+device.</p>
+
+<p>To set up your AVDs for a specific resolution or density, follow these steps:</p>
+
+<ol>
+  <li>Use the <code>create avd</code> command to create a new AVD, specifying
+the <code>--skin</code> option with a value that references either a default
+skin name (such as "WVGA800") or a custom skin resolution (such as 240x432).
+Here's an example:
+     <pre>android create avd -n &lt;name&gt; -t &lt;targetID&gt; --skin WVGA800</pre>
+  </li>
+  <li>To specify a custom density for the skin, answer "yes" when asked whether
+you want to create a custom hardware profile for the new AVD.</li>
+  <li>Continue through the various profile settings until the tool asks you to
+specify "Abstracted LCD density" (<em>hw.lcd.density</em>). Enter an appropriate
+value, such as "120" for a low-density screen, "160" for a medium density screen,
+or "240" for a high-density screen.</li>
+  <li>Set any other hardware options and complete the AVD creation.</li>
+</ol>
+
+<p>In the example above (WVGA medium density), the new AVD will emulate a 5.8"
+WVGA screen.</p>
+
+<p>As an alternative to adjusting the emulator skin configuration, you can use
+the emulator skin's default density and add the <code>-dpi-device</code> option
+to the <a href="{@docRoot}tools/help/emulator.html">emulator</a> command line when
+starting the AVD. For example:</p>
+
+<pre>emulator -avd WVGA800 -scale 96dpi -dpi-device 160</pre>
+
+
+
+<h3 id="DefaultLocation">Default location of AVD files</h3>
+
+<p>When you create an AVD, the <code>android</code> tool creates a dedicated directory for it
+on your development computer. The directory contains the AVD configuration file,
+the user data image and SD card image (if available), and any other files
+associated with the device. Note that the directory does not contain a system
+image &mdash; instead, the AVD configuration file contains a mapping to the
+system image, which it loads when the AVD is launched. </p>
+
+<p>The <code>android</code> tool also creates an <code>&lt;AVD_name&gt;.ini</code> file for the AVD at the
+root of the <code>.android/avd/</code> directory on your computer. The file specifies the
+location of the AVD directory and always remains at the root the .android 
+directory.</p>
+
+<p>By default, the <code>android</code> tool creates the AVD directory inside
+<code>~/.android/avd/</code> (on Linux/Mac), <code>C:\Documents and
+Settings\&lt;user&gt;\.android\</code> on Windows XP, and 
+<code>C:\Users\&lt;user&gt;\.android\</code> on Windows 7 and Vista. 
+If you want to use a custom location for the AVD directory, you 
+can do so by using the <code>-p &lt;path&gt;</code> option when 
+you create the AVD: </p>
+
+<pre>android create avd -n my_android1.5 -t 2 -p path/to/my/avd</pre>
+
+<p>If the .android directory is hosted on a network drive, we recommend using
+the <code>-p</code> option to place the AVD directory in another location. 
+The  AVD's .ini file remains in the .android directory on the network
+drive, regardless of the location of the AVD directory. 
+
+
+<h3 id="hardwareopts">Setting hardware emulation options</h3>
+
+<p>When you are creating a new AVD that uses a standard Android system image ("Type:
+platform"), the <code>android</code> tool lets you set hardware emulation
+options for virtual device. The table below lists the options available and the
+default values, as well as the names of properties that store the emulated
+hardware options in the AVD's configuration file (the config.ini file in the
+AVD's local directory). </p>
+
+<p class="table-caption"><strong>Table 1.</strong> Available hardware profile options for AVDs and
+the default values </p>
+
+<table>
+<tr>
+<th>Characteristic</th>
+<th>Description</th>
+<th>Property</th>
+</tr>
+
+<tr>
+<td>Device ram size</td>
+<td>The amount of physical RAM on the device, in megabytes. Default value is "96".
+<td>hw.ramSize</td>
+</tr>
+
+<tr>
+<td>Touch-screen support</td>
+<td>Whether there is a touch screen or not on the device. Default value is "yes".</td>
+<td>hw.touchScreen
+
+<tr>
+<td>Trackball support </td>
+<td>Whether there is a trackball on the device. Default value is "yes".</td>
+<td>hw.trackBall</td>
+</tr>
+
+<tr>
+<td>Keyboard support</td>
+<td>Whether the device has a QWERTY keyboard. Default value is "yes".</td>
+<td>hw.keyboard</td>
+</tr>
+
+<tr>
+<td>DPad support</td>
+<td>Whether the device has DPad keys. Default value is "yes".</td>
+<td>hw.dPad</td>
+</tr>
+
+<tr>
+<td>GSM modem support</td>
+<td>Whether there is a GSM modem in the device. Default value is "yes".</td>
+<td>hw.gsmModem</td>
+</tr>
+
+<tr>
+<td>Camera support</td>
+<td>Whether the device has a camera. Default value is "no".</td>
+<td>hw.camera</td>
+</tr>
+
+<tr>
+<td>Maximum horizontal camera pixels</td>
+<td>Default value is "640".</td>
+<td>hw.camera.maxHorizontalPixels</td>
+</tr>
+
+<tr>
+<td>Maximum vertical camera pixels</td>
+<td>Default value is "480".</td>
+<td>hw.camera.maxVerticalPixels</td>
+</tr>
+
+<tr>
+<td>GPS support</td>
+<td>Whether there is a GPS in the device. Default value is "yes".</td>
+<td>hw.gps</td>
+</tr>
+
+<tr>
+<td>Battery support</td>
+<td>Whether the device can run on a battery. Default value is "yes".</td>
+<td>hw.battery</td>
+</tr>
+
+<tr>
+<td>Accelerometer</td>
+<td>Whether there is an accelerometer in the device. Default value is "yes".</td>
+<td>hw.accelerometer</td>
+</tr>
+
+<tr>
+<td>Audio recording support</td>
+<td>Whether the device can record audio. Default value is "yes".</td>
+<td>hw.audioInput</td>
+</tr>
+
+<tr>
+<td>Audio playback support</td>
+<td>Whether the device can play audio. Default value is "yes".</td>
+<td>hw.audioOutput</td>
+</tr>
+
+<tr>
+<td>SD Card support</td>
+<td>Whether the device supports insertion/removal of virtual SD Cards. Default value is "yes".</td>
+<td>hw.sdCard</td>
+</tr>
+
+<tr>
+<td>Cache partition support</td>
+<td>Whether we use a /cache partition on the device. Default value is "yes".</td>
+<td>disk.cachePartition</td>
+</tr>
+
+<tr>
+<td>Cache partition size</td>
+<td>Default value is "66MB".</td>
+<td>disk.cachePartition.size </td>
+</tr>
+
+<tr>
+<td>Abstracted LCD density</td>
+<td>Sets the generalized density characteristic used by the AVD's screen. Default value is "160".</td>
+<td>hw.lcd.density </td>
+</tr>
+
+<tr>
+<td>Trackball support</td>
+<td>Whether there is a trackball present.</td>
+<td>hw.trackBall </td>
+</tr>
+</table>
+
+
+<h2 id="moving">Moving an AVD</h2>
+
+<p>If you want to move or rename an AVD, you can do so using this command:</p>
+
+<pre>android move avd -n &lt;name&gt; [-&lt;option&gt; &lt;value&gt;] ...</pre>
+
+<h2 id="updating">Updating an AVD</h2>
+
+<p>If, for any reason, the platform/add-on root folder has its name changed (maybe because the user has installed an update of the platform/add-on) then the AVD will not be able to load the system image that it is mapped to. In this case, the <code>android list targets</code> command will produce this output: 
+
+<pre>The following Android Virtual Devices could not be loaded: 
+Name: foo 
+Path: &lt;path&gt;/.android/avd/foo.avd 
+Error: Invalid value in image.sysdir. Run 'android update avd -n foo' </pre>
+
+<p>To fix this error, use the <code>android update avd</code> command to recompute the path to the system images.</p>
+
+<h2 id="deleting">Deleting an AVD</h2>
+
+<p>You can use the <code>android</code> tool to delete an AVD. Here is the command usage:</p>
+
+<pre>android delete avd -n &lt;name&gt; </pre>
+
+<p>When you issue the command, the <code>android</code> tool looks for an AVD matching the 
+specified name deletes the AVD's directory and files. </p>
diff --git a/docs/html/guide/developing/devices/managing-avds.jd b/docs/html/tools/devices/managing-avds.jd
similarity index 100%
rename from docs/html/guide/developing/devices/managing-avds.jd
rename to docs/html/tools/devices/managing-avds.jd
diff --git a/docs/html/tools/eclipse-adt.html b/docs/html/tools/eclipse-adt.html
new file mode 100644
index 0000000..0d59d49
--- /dev/null
+++ b/docs/html/tools/eclipse-adt.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/projects/projects-eclipse.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/projects/projects-eclipse.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/extras/index.jd b/docs/html/tools/extras/index.jd
new file mode 100644
index 0000000..8da26dc
--- /dev/null
+++ b/docs/html/tools/extras/index.jd
@@ -0,0 +1,5 @@
+page.title=Extras
+page.noplus=1
+@jd:body
+
+<p>SDK extras add functionality to your development environment. You can download all of the SDK extras into your development environment using the SDK Manager. </p>
diff --git a/docs/html/tools/extras/oem-usb.jd b/docs/html/tools/extras/oem-usb.jd
new file mode 100644
index 0000000..f7aa192
--- /dev/null
+++ b/docs/html/tools/extras/oem-usb.jd
@@ -0,0 +1,328 @@
+page.title=OEM USB Drivers
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#InstallingDriver">Installing a USB Driver</a>
+      <ol>
+        <li><a href="#Win7">Windows 7</a></li>
+        <li><a href="#WinXp">Windows XP</a></li>
+        <li><a href="#WinVista">Windows Vista</a></li>
+      </ol>
+    </li>
+    <li><a href="#Drivers">OEM Drivers</a></li>
+  </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/device.html">Using Hardware Devices</a></li>
+    <li><a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a></li>
+  </ol>
+</div>
+</div>
+
+<p>If you are developing on Windows and would like to connect an Android-powered device
+to test your applications, then you need to install the appropriate USB driver. This document
+provides links to the web sites for several original equipment manufacturers (OEMs),
+where you can download the appropriate USB driver for your device. However, this list is
+not exhaustive for all available Android-powered devices.</p>
+
+<p>If you're developing on Mac OS X or Linux, then you probably don't need to install a USB driver.
+To start developing with your device, read <a
+href="{@docRoot}tools/device.html">Using Hardware Devices</a>.</p>
+
+<p class="note"><strong>Note:</strong> If your device is one of the Android Developer Phones
+(ADP), a Nexus One, or a Nexus S, then you need
+the <a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a>, instead of an OEM driver. The Galaxy
+Nexus driver, however, is distributed by <a
+href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
+(listed as model SCH-I515).</p>
+
+
+<h2 id="InstallingDriver">Installing a USB Driver</h2>
+
+<p>First, find the appropriate driver for your device from the <a href="#Drivers">OEM drivers</a>
+table below.</p>
+
+<p>Once you've downloaded your USB driver, follow the instructions below to install or upgrade the
+driver, based on your version of Windows and whether you're installing for the first time
+or upgrading an existing driver.</p>
+
+<p class="note"><strong>Tip:</strong> When you finish the USB driver installation,
+see <a
+href="{@docRoot}tools/device.html">Using Hardware Devices</a> for
+other important information about using an Android-powered device for
+development.</p>
+
+<ol class="nolist">
+  <li><a href="#Win7">Windows 7</a></li>
+  <li><a href="#WinXp">Windows XP</a></li>
+  <li><a href="#WinVista">Windows Vista</a></li>
+</ol>
+
+
+<p class="caution"><strong>Caution:</strong>
+You may make changes to <code>android_winusb.inf</code> file found inside
+<code>usb_driver\</code> (for example, to add support for other devices),
+however, this will lead to security warnings when you install or upgrade the
+driver. Making any other changes to the driver files may break the installation
+process.</p>
+
+
+<h3 id="Win7">Windows 7</h3>
+
+
+<p>To install the Android USB driver on Windows 7 for the first time:</p>
+<ol>
+  <li>Connect your Android-powered device to your computer's USB port.</li>
+  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
+    and select <strong>Manage</strong>.</li>
+  <li>Select <strong>Devices</strong> in the left pane.</li>
+  <li>Locate and expand <em>Other device</em> in the right pane.</li>
+  <li>Right-click the device name (such as <em>Nexus S</em>) and select <strong>Update
+  Driver Software</strong>.
+    This will launch the Hardware Update Wizard.</li>
+  <li>Select <strong>Browse my computer for driver software</strong> and click
+    <strong>Next</strong>.</li>
+  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
+Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
+  <li>Click <strong>Next</strong> to install the driver.</li>
+</ol>
+
+<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows 7 with the new
+driver:</p>
+
+<ol>
+  <li>Connect your Android-powered device to your computer's USB port.</li>
+  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
+    and select <strong>Manage</strong>.</li>
+  <li>Select <strong>Device Manager</strong> in the left pane of the Computer Management
+  window.</li>
+  <li>Locate and expand <em>Android Phone</em> in the right pane.</li>
+  <li>Right-click <em>Android Composite ADB Interface</em> and select <strong>Update
+  Driver</strong>.
+    This will launch the Hardware Update Wizard.</li>
+  <li>Select <strong>Install from a list or specific location</strong> and click
+    <strong>Next</strong>.</li>
+  <li>Select <strong>Search for the best driver in these locations</strong>; un-check
+<strong>Search removable media</strong>; and check <strong>Include this location in the
+search</strong>.</li>
+  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
+Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
+  <li>Click <strong>Next</strong> to upgrade the driver.</li>
+</ol>
+
+
+
+
+
+<h3 id="WinXp">Windows XP</h3>
+
+<p>To install the Android USB driver on Windows XP for the first time:</p>
+
+<ol>
+  <li>Connect your Android-powered device to your computer's USB port. Windows 
+    will detect the device and launch the Hardware Update Wizard.</li>
+  <li>Select <strong>Install from a list or specific location</strong> and click
+    <strong>Next</strong>.</li>
+  <li>Select <strong>Search for the best driver in these locations</strong>; un-check
+<strong>Search
+    removable media</strong>; and check <strong>Include
+this location in the search</strong>.</li>
+  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
+Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
+  <li>Click <strong>Next</strong> to install the driver.</li>
+</ol>
+
+<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows XP with the new
+driver:</p>
+
+<ol>
+  <li>Connect your Android-powered device to your computer's USB port.</li>
+  <li>Right-click on <em>My Computer</em> from your desktop or Windows Explorer,
+    and select <strong>Manage</strong>.</li>
+  <li>Select <strong>Device Manager</strong> in the left pane.</li>
+  <li>Locate and expand <em>Android Phone</em> in the right pane.</li>
+  <li>Right-click <em>Android Composite ADB Interface</em> and select <strong>Update
+  Driver</strong>.
+    This will launch the Hardware Update Wizard.</li>
+  <li>Select <strong>Install from a list or specific location</strong> and click
+    <strong>Next</strong>.</li>
+  <li>Select <strong>Search for the best driver in these locations</strong>; un-check <strong>Search
+    removable media</strong>; and check <strong>Include
+this location in the search</strong>.</li>
+  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
+Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.)</li>
+  <li>Click <strong>Next</strong> to upgrade the driver.</li>
+</ol>
+
+
+
+<h3 id="WinVista">Windows Vista</h3>
+
+<p>To install the Android USB driver on Windows Vista for the first time:</p>
+
+<ol>
+  <li>Connect your Android-powered device to your computer's USB port. Windows
+  will detect the device and launch the Found New Hardware wizard.</li>
+  <li>Select <strong>Locate and install driver software</strong>.</li>
+  <li>Select <strong>Don't search online</strong>.</li>
+  <li>Select <strong>I don't have the disk. Show me other options</strong>.</li>
+  <li>Select <strong>Browse my computer for driver software</strong>.</li>
+  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
+Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.) As long as you specified the
+exact location of the 
+    installation package, you may leave <strong>Include subfolders</strong> checked or
+  unchecked&mdash;it doesn't matter.</li>
+  <li>Click <strong>Next</strong>. Vista may prompt you to confirm the privilege elevation
+  required for driver installation. Confirm it.</li>
+  <li>When Vista asks if you'd like to install the Google ADB Interface device,
+  click <strong>Install</strong> to install the driver.</li>
+</ol>
+
+<p>Or, to <em>upgrade</em> an existing Android USB driver on Windows Vista with the new
+driver:</p>
+
+<ol>
+  <li>Connect your Android-powered device to your computer's USB port.</li>
+  <li>Right-click on <em>Computer</em> from your desktop or Windows Explorer,
+    and select <strong>Manage</strong>.</li>
+  <li>Select <strong>Device Manager</strong> in the left pane.</li>
+  <li>Locate and expand <em>ADB Interface</em> in the right pane.</li>
+  <li>Right-click on <em>HTC Dream Composite ADB Interface</em>, and select <strong>Update
+  Driver Software</strong>.</li>
+  <li>When Vista starts updating the driver, a prompt will ask how you want to
+  search for the driver
+    software. Select <strong>Browse my computer for driver software</strong>.</li>
+  <li>Click <strong>Browse</strong> and locate the USB driver folder. (The Google USB
+Driver is located in {@code &lt;sdk&gt;\extras\google\usb_driver\}.) As long as you specified the
+exact location of the 
+    installation package, you may leave <strong>Include subfolders</strong> checked or
+    unchecked&mdash;it doesn't matter.</li>
+  <li>Click <strong>Next</strong>. Vista might prompt you to confirm the privilege elevation
+  required for driver installation. Confirm it.</li>
+  <li>When Vista asks if you'd like to install the Google ADB Interface device,
+  click <strong>Install</strong> to upgrade the driver.</li>
+</ol>
+  
+
+<h2 id="Drivers">OEM Drivers</h2>
+
+<p class="note"><strong>Note:</strong> If your device is one of the Android Developer Phones
+(purchased from the Google Play publisher site), a Nexus One, or a Nexus S, then you need
+the <a href="{@docRoot}sdk/win-usb.html">Google USB Driver</a>, instead of an OEM driver. The Galaxy
+Nexus driver, however, is distributed by <a
+href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
+(listed as model SCH-I515).</p>
+
+
+<table><tr>
+    <th>OEM</th>
+    <th>Driver URL</th></tr>
+<tr><td>Acer</td>	<td><a
+href="http://www.acer.com/worldwide/support/mobile.html">http://www.acer.com/worldwide/support/mobile.html</a>
+    </td></tr>
+  <tr>
+    <td style="font-variant:small-caps">alcatel one touch</td>
+    <td><a
+href="http://www.alcatel-mobilephones.com/global/Android-Downloads">http://www.alcatel-mobilephones.com/global/Android-Downloads</a></td>
+  </tr>
+  <tr>
+    <td>Asus</td>
+    <td><a href="http://support.asus.com/download/">http://support.asus.com/download/</a></td>
+  </tr>
+  <tr><td>
+       Dell
+    </td>	<td>
+      <a
+href="http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml">http://support.dell.com/support/downloads/index.aspx?c=us&cs=19&l=en&s=dhs&~ck=anavml</a>  </td></tr>
+
+<tr><td>Foxconn</td>	<td><a
+href="http://drivers.cmcs.com.tw/">http://drivers.cmcs.com.tw/</a></td>
+</tr>
+  <tr>
+    <td>
+      Fujitsu
+    </td>
+    <td><a
+href="http://www.fmworld.net/product/phone/sp/android/develop/">http://www.fmworld.net/product/phone/sp/android/develop/</a>
+    </td>
+  </tr>
+  <tr>
+    <td>
+      Fujitsu Toshiba
+    </td>
+    <td><a
+href="http://www.fmworld.net/product/phone/sp/android/develop/">http://www.fmworld.net/product/phone/sp/android/develop/</a>
+    </td>
+  </tr>
+  <tr><td>
+       Garmin-Asus
+    </td>	<td><a
+href="https://www.garminasus.com/en_US/support/pcsync/">https://www.garminasus.com/en_US/support/pcsync/</a></td>
+</tr>
+
+<tr><td>Hisense</td>
+  <td><a
+href="http://app.hismarttv.com/dss/resourcecontent.do?method=viewResourceDetail&resourceId=16&type=5">http://app.hismarttv.com/dss/resourcecontent.do?method=viewResourceDetail&amp;resourceId=16&amp;type=5 </a></td>
+</tr>
+
+<tr><td>HTC</td>	<td><a href="http://www.htc.com">http://www.htc.com </a> <br>Click on the
+support tab to select your products/device.  Different regions will have different links.</td>
+</tr>
+
+<tr><td>Huawei</td>	<td><a
+href="http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index">http://www.huaweidevice.com/worldwide/downloadCenter.do?method=index</a></td>
+</tr>
+
+<tr><td>Intel</td>	<td><a
+href="http://www.intel.com/software/android">http://www.intel.com/software/android</a></td>
+</tr>
+
+<tr><td>KT Tech</td>	<td><a
+href="http://www.kttech.co.kr/cscenter/download05.asp">http://www.kttech.co.kr/cscenter/download05.asp</a> for EV-S100 (Take)</td>
+</tr>
+  <tr>
+    <td>
+      Kyocera
+    </td>
+    <td><a href="http://www.kyocera-wireless.com/support/phone_drivers.htm">http://www.kyocera-wireless.com/support/phone_drivers.htm</a>
+    </td>
+  </tr>
+  <tr>
+    <td>Lenevo</td>
+    <td><a href="http://developer.lenovomm.com/developer/download.jsp"
+        >http://developer.lenovomm.com/developer/download.jsp</a>
+    </td>
+  </tr>
+  <tr><td>LGE</td>	<td><a
+href="http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp">http://www.lg.com/us/mobile-phones/mobile-support/mobile-lg-mobile-phone-support.jsp</a></td>
+</tr><tr><td>Motorola</td>	<td><a
+href="http://developer.motorola.com/docstools/USB_Drivers/">http://developer.motorola.com/docstools/USB_Drivers/</a></td>
+</tr><tr><td>Pantech</td>	<td><a
+href="http://www.isky.co.kr/cs/software/software.sky?fromUrl=index">http://www.isky.co.kr/cs/software/software.sky?fromUrl=index</a></td>
+</tr><tr><td>Pegatron</td>	<td><a
+href="http://www.pegatroncorp.com/download/New_Duke_PC_Driver_0705.zip">http://www.pegatroncorp.com/download/New_Duke_PC_Driver_0705.zip</a> (ZIP download)</td>
+</tr><tr><td>Samsung</td>	<td><a
+href="http://www.samsung.com/us/support/downloads">http://www.samsung.com/us/support/downloads</a></td>
+</tr><tr><td>Sharp</td>	<td><a
+href="http://k-tai.sharp.co.jp/support/">http://k-tai.sharp.co.jp/support/</a></td>
+</tr><tr><td>SK Telesys</td>	<td><a
+href="http://www.sk-w.com/service/wDownload/wDownload.jsp">http://www.sk-w.com/service/wDownload/wDownload.jsp</a></td></tr><tr>
+<td>Sony Ericsson</td>	<td><a
+href="http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&lc=en">http://developer.sonyericsson.com/wportal/devworld/search-downloads/driver?cc=gb&amp;lc=en</a></td></tr>
+
+<tr><td>Teleepoch</td>	<td><a
+href="http://www.teleepoch.com/android.html">http://www.teleepoch.com/android.html</a></td>
+</tr>
+
+<tr><td>Yulong Coolpad</td>	<td><a
+href="http://www.yulong.com/product/product/product/downloadList.html#downListUL">http://www.yulong.com/product/product/product/downloadList.html#downListUL</a></td>
+</tr>
+
+<tr>
+<td>ZTE</td>	<td><a
+href="http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442">http://support.zte.com.cn/support/news/NewsDetail.aspx?newsId=1000442</a></td></tr>
+</table>
diff --git a/docs/html/tools/extras/support-library.jd b/docs/html/tools/extras/support-library.jd
new file mode 100644
index 0000000..7258c77
--- /dev/null
+++ b/docs/html/tools/extras/support-library.jd
@@ -0,0 +1,507 @@
+page.title=Support Library
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+<ol>
+  <li><a href="#Notes">Revisions</a></li>
+  <li><a href="#Downloading">Downloading the Support Package</a></li>
+  <li><a href="#SettingUp">Setting Up a Project to Use a Library</a></li>
+  <li><a href="#Using">Using the v4 Library APIs</a></li>
+  <li><a href="#Docs">Reference Docs</a></li>
+  <li><a href="#Samples">Samples</a></li>
+</ol>
+
+<h2>See also</h2>
+<ol>
+  <li><a
+href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0</a></li>
+  <li><a href="http://code.google.com/p/iosched/">Google I/O App source code</a></li>
+</ol>
+
+</div>
+</div>
+
+<p><em>Minimum API level supported:</em> <b>4</b></p>
+
+<p>The Support Package includes static "support libraries" that you can add to your Android
+application in order to use APIs that are either not available for older platform versions or that
+offer "utility" APIs that aren't a part of the framework APIs. The goal is to simplify your
+development by offering more APIs that you can bundle with your application so you can
+worry less about platform versions.</p>
+
+<p class="note"><strong>Note:</strong> The Support Package includes more than one support
+library. Each one has a different <em>minimum API level</em>. For example, one library requires API
+level 4 or higher, while another requires API level 13 or higher (v13 is a superset of v4 and
+includes additional
+support classes to work with v13 APIs). The minimum version is indicated
+by the directory name, such as {@code v4/} and {@code v13/}.</p>
+
+
+<h2 id="Notes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the Support Package, as denoted by revision number.</p>
+
+<div class="toggle-content open">
+
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-content-img" />
+    Support Package, revision 8 (April 2012)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <dl>
+      <dt>Changes for v4 support library:</dt>
+      <dd>
+        <ul>
+          <li>Fixed intent flags for {@link android.app.PendingIntent} objects generated
+            by {@link android.support.v4.app.TaskStackBuilder}.</li>
+          <li>Removed unused attributes from the gridlayout library projects to make sure
+            the library can be built with API Level 7 and higher.</li>
+          <li>Added {@code .classpath} and {@code .project} files for the gridlayout
+            library project.</li>
+        </ul>
+      </dd>
+    </dl>
+</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" />
+    Support Package, revision 7 (March 2012)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <dl>
+      <dt>Changes for v4 support library:</dt>
+      <dd>
+        <ul>
+          <li>Added {@link android.support.v4.app.ShareCompat}, which provides helper classes
+for sending and receiving content for social sharing applications, including new metadata for
+attributing shared data to the source app. This class also provides compatible integration with the
+new {@link android.widget.ShareActionProvider} in Android 4.0.</li>
+          <li>Added {@link android.support.v4.app.NavUtils} and {@link
+android.support.v4.app.TaskStackBuilder} to provide support for implementing the
+<a href="{@docRoot}design/index.html">Android Design</a> guidelines for navigation. These 
+additions include a way to implement the action bar's <em>Up</em> button across versions.
+For an example implementation of this pattern, see the AppNavigation sample in
+({@code <em>&lt;sdk&gt;</em>/samples/<em>&lt;platform&gt;</em>/AppNavigation}).</li>
+          <li>Added {@link android.support.v4.app.NotificationCompat.Builder} to provide a
+compatibility implementation of Android 3.0's {@link android.app.Notification.Builder} helper class
+for creating standardized system notifications.</li>
+        </ul>
+      </dd>
+    </dl>
+  </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" />
+    Support Package, revision 6 (December 2011)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <p class="note"><strong>Note:</strong> Reference for support library APIs are now available with
+    the framework references, for example: {@link android.support.v4.app}.</p>
+<dl>
+      <dt>Changes for v4 support library:</dt>
+      <dd>
+        <ul>
+          <li>Changes to ViewPager:
+            <ul>
+              <li>Added extra decorative view support for {@link android.support.v4.view.ViewPager}.
+                Decorative views may be supplied as child views of a pager in XML layout.</li>
+              <li>Added {@link android.support.v4.view.PagerAdapter#getPageTitle
+                PagerAdapter.getPageTitle()} to supply title strings for pages, which defaults to no
+                title for each page.</li>
+              <li>Added {@link android.support.v4.view.PagerTitleStrip}, a non-interactive title
+                strip, that can be added as a child of ViewPager. Developers can supply text
+                appearance and color, as well as layout sizing and gravity information.</li>
+              <li>Updated {@link android.support.v4.view.PagerAdapter} methods to take ViewGroup
+                objects, rather than View to avoid class casting in adapter implementations.</li>
+              <li>Updated {@link android.support.v4.view.ViewPager} to use Launcher-style
+                fling behavior.</li>
+              <li>Bug fixes for user interface interaction and test automation.</li>
+            </ul>
+          </li>
+
+          <li>Support for Fragments:
+            <ul>
+              <li>Changed {@code setStartDeferred()} method to {@link
+                android.support.v4.app.Fragment#setUserVisibleHint}.</li>
+              <li>Added deferred start for off-screen pages to improve performance.</li>
+            </ul>
+          </li>
+
+          <li>Support for Accessiblity APIs:
+            <ul>
+              <li>Updated {@link android.support.v4.view.AccessibilityDelegateCompat} methods
+                to return empty lists instead of null.</li>
+              <li>Added new APIs needed by the v4 samples.</li>
+            </ul>
+          </li>
+
+        </ul>
+      </dd>
+    </dl>
+  </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" />
+    Support Package, revision 5 (December 2011)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <dl>
+      <dt>Changes for v4 support library:</dt>
+      <dd>
+        <ul>
+          <li>Support for Accessiblity APIs:
+            <ul>
+              <li>Added {@link android.support.v4.view.AccessibilityDelegateCompat}
+              to support {@link android.view.View.AccessibilityDelegate}.</li>
+
+              <li>Added {@link android.support.v4.view.accessibility.AccessibilityEventCompat}
+              to support {@link android.view.accessibility.AccessibilityEvent}.</li>
+
+              <li>Added {@link android.support.v4.view.accessibility.AccessibilityManagerCompat}
+              to support {@link android.view.accessibility.AccessibilityManager}.</li>
+
+              <li>Added {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
+              to support {@link android.view.accessibility.AccessibilityNodeInfo}.</li>
+
+              <li>Added {@link android.support.v4.view.accessibility.AccessibilityRecordCompat}
+              to support {@link android.view.accessibility.AccessibilityRecord}.</li>
+
+              <li>Added {@link
+              android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat}
+              to support {@link android.accessibilityservice.AccessibilityServiceInfo}.</li>
+
+              <li>Added {@link android.support.v4.view.ViewGroupCompat}
+              to support accessibility features in {@link android.view.ViewGroup}.
+              </li>
+
+              <li>Modified {@link android.support.v4.view.ViewCompat}
+              to support accessibility features in {@link android.view.View}.</li>
+            </ul>
+          </li>
+
+          <li>Changes to ViewPager:
+            <ul>
+              <li>Added support for margins between pages.
+              An optional {@link android.graphics.drawable.Drawable} can be provided
+              to fill the margins.</li>
+              <li>Added support for {@link android.widget.EdgeEffect}.</li>
+              <li>Added support for keyboard navigation</li>
+              <li>Added support to control how many pages are kept to either side
+              of the current page.</li>
+              <li>Improved touch physics.</li>
+              <li>Bug fixes for user interface behavior.</li>
+            </ul>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+  </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" />
+    Support Package, revision 4 (October 2011)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <dl>
+      <dt>Changes for v4 support library:</dt>
+      <dd>
+        <ul>
+          <li>Added <code>EdgeEffectCompat</code> to
+          support {@link android.widget.EdgeEffect}.</li>
+
+          <li>Added <code>LocalBroadcastManager</code> to allow applications to easily
+            register for and receive intents within a single application without
+            broadcasting them globally.</li>
+
+          <li>Added support in <code>ViewCompat</code> to check for and set overscroll
+          modes for {@link android.view.View}s on Android 2.3 and later.</li>
+          <li>Changes to Fragment APIs:
+            <ul>
+              <li>Added new APIs to control the visibility of new menus.</li>
+              <li>Added custom animation APIs.</li>
+              <li>Added APIs in <code>FragmentActivity</code> to retain custom,
+              non-configuration instance data.</li>
+              <li>Various bug fixes.</li>
+            </ul>
+          </li>
+
+          <li>Fixed a {@link android.content.Loader} bug that caused issues in
+          canceling {@link android.os.AsyncTask}s when running on Froyo and older
+          versions of the platform. The support
+          code now uses its own version of {@link android.os.AsyncTask} to keep the same
+          behavior on all platform versions.</li>
+
+        </ul>
+      </dd>
+    </dl>
+  </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" />
+    Compatibility Package, revision 3 (July 2011)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <dl>
+      <dt>Changes for v4 support library:</dt>
+      <dd>
+        <ul>
+          <li>Adds support for {@link android.app.Fragment.SavedState}</li>
+          <li>Adds {@code MotionEventCompat} to support newer {@link
+android.view.MotionEvent} APIs</li>
+          <li>Adds {@code VelocityTrackerCompat} to support a newer {@link
+android.view.VelocityTracker} APIs</li>
+          <li>Adds {@code ViewConfigurationCompat} to support a newer {@link
+android.view.ViewConfiguration} APIs</li>
+          <li>All new APIs (available only in the support library) that allow you to create UIs
+with horizontal paging, allowing users to swipe left and right between content views. Classes to
+support this include:
+            <ul>
+              <li>{@code ViewPager}: A {@link android.view.ViewGroup} that manages the
+layout for the child views, which the user can swipe between.</li>
+              <li>{@code PagerAdapter}: An adapter that populates the {@code ViewPager} with the
+views that represent each page.</li>
+              <li>{@code FragmentPagerAdapter}: An extension of {@code PagerAdapter} for flipping
+between fragments.</li>
+              <li>{@code FragmentStatePagerAdapter}: An extension of {@code PagerAdapter} for
+flipping between fragments that uses the library's support for {@link
+android.app.Fragment.SavedState}.</li>
+            </ul>
+          </li>
+        </ul>
+      </dd>
+      <dt>New v13 support library:</dt>
+      <dd>
+        <ul>
+          <li>Includes the {@code FragmentPagerAdapter} and {@code FragmentStatePagerAdapter}
+to support the horizontal paging.
+          <p>These are exactly the same as the APIs added to the v4 support library, but rely on
+other platform components in Android 3.2. Use this library instead of v4 if you're developing for
+Android 3.2 and higher (all other APIs in the v4 library are already available with API level
+13).</p>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+  </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" />
+    Compatibility Package, revision 2 (May 2011)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+    <dl>
+    <dt>Changes for v4 library:</dt>
+    <dd>
+      <ul>
+        <li>Support for fragment animations</li>
+        <li>Fix {@code android.support.v4.app.Fragment#onActivityResult Fragment.onActivityResult()}
+          bug</li>
+      </ul>
+    </dd>
+    </dl>
+  </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" />
+    Compatibility Package, revision 1 (March 2011)
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em">
+      <p>Initial release with the v4 library.</p>
+  </div>
+
+</div>
+
+
+
+<h2 id="Downloading">Downloading the Support Package</h2>
+
+<p>The Support Package is provided as a downloadable package from the Android SDK
+Manager. To install:</p>
+
+<ol>
+  <li>Launch the Android SDK Manager.
+    <p>From Eclipse, you can select <strong>Window</strong>
+&gt; <strong>Android SDK Manager</strong>. Or, launch {@code SDK Manager.exe} from
+the {@code &lt;sdk&gt;/} directory (on Windows only) or {@code android} from the {@code
+&lt;sdk&gt;/tools/} directory.</p></li>
+  <li>Expand the Android Repository, check <strong>Android Support package</strong>
+and click <strong>Install selected</strong>.</li>
+  <li>Proceed to install the package.</li>
+</ol>
+
+<p>When done, all files (including source code, samples, and the {@code .jar} files) are saved
+into the <code>&lt;sdk&gt;/extras/android/support/</code> directory. This directory contains
+each of the different support libraries, such as the library for API level 4 and up and the library
+for API level 13 and up, each named with the respective version (such as {@code v4/}).</p>
+
+
+<h2 id="SettingUp">Setting Up a Project to Use a Library</h2>
+
+<p>To add one of the libraries to your Android project:</p>
+<ol>
+  <li>In your Android project, create a directory named {@code libs} at the root of your
+project (next to {@code src/}, {@code res/}, etc.)</li>
+  <li>Locate the JAR file for the library you want to use and copy it into the {@code
+libs/} directory.
+    <p>For example, the library that supports API level 4 and up is located at {@code
+&lt;sdk&gt;/extras/android/support/v4/android-support-v4.jar}.</p>
+  </li>
+  <li>Add the JAR to your project build path.
+    <p>In Eclipse, right-click the JAR file in the Package Explorer, select <strong>Build
+Path</strong> &gt; <strong>Add to Build Path</strong>.</p>
+  </li>
+</ol>
+
+<p>Your application is now ready to use the library APIs. All the
+provided APIs are available in the {@code android.support} package (for
+example, {@code android.support.v4}).</p>
+
+<p class="note"><strong>Tip:</strong> To see the library APIs in action, take a look at the sample
+apps in {@code &lt;sdk&gt;/extras/android/support/&lt;version&gt;/samples/}.</p>
+
+<p class="warning"><strong>Warning:</strong> Be certain that you not confuse the standard
+{@code android} packages with those in {@code android.support} library. Some code completion tools
+might
+get this wrong, especially if you're building against recent versions of the platform. To be safe,
+keep your build target set to the same version as you have defined for your <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#min">{@code android:minSdkVersion}</a>
+and double check the import statements for classes that also exist in the support library, such as
+{@code SimpleCursorAdapter}.</p>
+
+
+<h2 id="Using">Using the v4 Library APIs</h2>
+
+<p>The support library for v4 provides access to several classes introduced with Android 3.0 and
+beyond, plus some updated version of existing classes, and even some APIs that currently don't
+exist in the Android platform. Some of the most useful and notable classes that have
+counterparts in the v4 support library are:</p>
+
+<ul>
+  <li>{@link android.app.Fragment}</li>
+  <li>{@link android.app.FragmentManager}</li>
+  <li>{@link android.app.FragmentTransaction}</li>
+  <li>{@link android.app.ListFragment}</li>
+  <li>{@link android.app.DialogFragment}</li>
+  <li>{@link android.app.LoaderManager}</li>
+  <li>{@link android.content.Loader}</li>
+  <li>{@link android.content.AsyncTaskLoader}</li>
+  <li>{@link android.content.CursorLoader}</li>
+</ul>
+
+<p>For each of the classes above (and others not listed), the APIs work almost exactly the same
+as the counterparts in the latest Android platform. Thus, you can usually refer to
+the online documentation for information about the supported APIs. There are some
+differences, however. Most notably:</p>
+
+<ul>
+  <li>When creating an activity to use fragments, you must declare your activity to extend the
+{@link android.support.v4.app.FragmentActivity} class (instead of the traditional
+{@link android.app.Activity} class).</li>
+  <li>To manage your fragments and loaders, you must use the methods
+  {@link android.support.v4.app.FragmentActivity#getSupportFragmentManager
+  FragmentActivity.getSupportFragmentManager()} and
+  {@link android.support.v4.app.FragmentActivity#getSupportLoaderManager
+  FragmentActivity.getSupportLoaderManager()} (instead of the
+  {@link android.app.Activity#getFragmentManager()} and
+  {@link android.app.Activity#getLoaderManager()} methods).</li>
+  <li>The {@link android.app.ActionBar} is <strong>not supported</strong> by the library.
+However, when creating your <a href="{@docRoot}guide/topics/ui/menus.html#options-menu">Options
+Menu</a>, you can declare which items should be added to the Action Bar when it's available (on
+Android 3.0 or later). You can do so with the
+{@link android.support.v4.view.MenuCompat#setShowAsAction MenuCompat.setShowAsAction()} method, for
+example:
+<pre>
+public boolean onCreateOptionsMenu(Menu menu) {
+    MenuInflater inflater = getMenuInflater();
+    inflater.inflate(R.menu.options, menu);
+    MenuCompat.setShowAsAction(menu.findItem(R.id.action_search), 1);
+    return true;
+}
+</pre>
+<p>Also see the <a href="{@docRoot}resources/samples/ActionBarCompat/index.html">Action Bar
+Compatibility</a> sample for a demonstration of how to use {@link android.app.ActionBar} on Android
+3.0+ and also support action bar functionality on older versions.</p>
+</li>
+</ul>
+
+<div class="note"><p><strong>Tip:</strong> To enable the Holographic theme on devices
+running Android 3.0 or higher, declare in your manifest file that your application targets
+API level 11, for example:</p>
+<pre>
+&lt;uses-sdk android:minSdkVersion="4" android:targetSdkVersion="11" /&gt;
+</pre>
+<p>This way, your application automatically receives the Holographic theme and the Action Bar for
+each activity when running on Android 3.0 and higher.</p>
+</div>
+
+<p>For more information about how you can optimize your application for the latest
+Android-powered devices, read <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing
+Apps for Android 3.0</a>.</p>
+
+
+<h2 id="Docs">Reference Docs</h2>
+
+<p>The reference documentation for the Support Packages is included as part of the Android
+online developer documentation:</p>
+
+<ul>
+  <li><a href="{@docRoot}reference/android/support/v4/app/package-summary.html">Support Package
+    API 4 Reference</a></li>
+  <li><a href="{@docRoot}reference/android/support/v13/app/package-summary.html">Support Package
+    API 13 Reference</a></li>
+</ul>
+
+
+<h2 id="Samples">Samples</h2>
+
+<p>If you want to see some code that uses the support libraries, samples are included with the
+Support Package, inside each support library directory, for example; {@code
+&lt;sdk&gt;/extras/android/support/v4/samples/}. You can also view these samples as part of the
+Android online developer documentation:</p>
+
+<ul>
+  <li><a href="{@docRoot}resources/samples/Support4Demos/index.html">Support API 4 Demos</a></li>
+  <li><a href="{@docRoot}resources/samples/Support13Demos/index.html">Support API 13 Demos</a></li>
+</ul>
+
+<p>Additionally, the <a href="http://code.google.com/p/iosched/">Google I/O App</a> is a complete
+application that uses the v4 support library to provide a single APK for both handsets and tablets
+and also demonstrates some of Android's best practices in Android UI design.</p>
diff --git a/docs/html/tools/help/MonkeyDevice.jd b/docs/html/tools/help/MonkeyDevice.jd
new file mode 100644
index 0000000..e7612e6
--- /dev/null
+++ b/docs/html/tools/help/MonkeyDevice.jd
@@ -0,0 +1,1355 @@
+page.title=MonkeyDevice
+parent.title=monkeyrunner
+parent.link=index.html
+@jd:body
+<style>
+    h4.jd-details-title {background-color: #DEE8F1;}
+</style>
+<p>
+    A monkeyrunner class that represents a device or emulator accessible by the workstation running
+<code><a href="{@docRoot}tools/help/monkeyrunner_concepts.html">monkeyrunner</a></code>.
+</p>
+<p>
+    This class is used to control an Android device or emulator. The methods send UI events,
+    retrieve information, install and remove applications, and run applications.
+</p>
+<p>
+    You normally do not have to create an instance of <code>MonkeyDevice</code>. Instead, you
+    use
+<code><a href="{@docRoot}tools/help/MonkeyRunner.html#waitForConnection">
+MonkeyRunner.waitForConnection()</a></code> to create a new object from a connection to a device or
+emulator. For example, instead of
+using:</p>
+<pre>
+newdevice = MonkeyDevice()
+</pre>
+<p>
+    you would use:
+</p>
+<pre>
+newdevice = MonkeyRunner.waitForConnection()
+</pre>
+<h2>Summary</h2>
+    <table id="constants" class="jd-sumtable" style="background-color: white;">
+       <tr>
+            <th colspan="12" style="background-color: #E2E2E2">Constants</th>
+       </tr>
+        <tr class="api" style="background-color: white;">
+            <td class="jd-typecol"><em>string</em></td>
+            <td class="jd-linkcol"><a href="#ACTION_DOWN">DOWN</a></td>
+            <td class="jd-descrcol" width="100%">
+                Use this with the <code>type</code> argument of
+                <code><a href="#press">press()</a></code> or <code><a href="#touch">touch()</a>
+                </code>
+                to send a DOWN event.
+            </td>
+        </tr>
+        <tr class="api" style="background-color: white;">
+            <td class="jd-typecol"><em>string</em></td>
+            <td class="jd-linkcol"><a href="#ACTION_UP">UP</a></td>
+            <td class="jd-descrcol" width="100%">
+                Use this with the <code>type</code> argument of
+                <code><a href="#press">press()</a></code> or <code><a href="#touch">touch()</a>
+                </code>
+                to send an UP event.
+            </td>
+        </tr>
+        <tr class="api" style="background-color: white;">
+            <td class="jd-typecol"><em>string</em></td>
+            <td class="jd-linkcol"><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></td>
+            <td class="jd-descrcol" width="100%">
+                Use this with the <code>type</code> argument of
+                <code><a href="#press">press()</a></code> or <code><a href="#touch">touch()</a>
+                </code>
+                to send a DOWN event immediately followed by an UP event.
+            </td>
+        </tr>
+    </table>
+<table id="pubmethods" class="jd-sumtable">
+    <tr>
+        <th colspan="12" style="background-color: #E2E2E2">Methods</th>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#broadcastIntent">broadcastIntent</a>
+                </span>
+                (<em>string</em> uri,
+                <em>string</em> action,
+                <em>string</em> data,
+                <em>string</em> mimetype,
+                <em>iterable</em> categories
+                <em>dictionary</em> extras,
+                <em>component</em> component,
+                <em>iterable</em> flags)
+            </nobr>
+            <div class="jd-descrdiv">
+                Broadcasts an Intent to this device, as if the Intent were coming from an
+                application.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#drag">drag</a>
+                </span>
+                (<em>tuple</em> start,
+                <em>tuple</em> end,
+                <em>float</em> duration,
+                <em>integer</em> steps)
+            </nobr>
+            <div class="jd-descrdiv">
+                Simulates a drag gesture (touch, hold, and move) on this device's screen.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>object</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#getProperty">getProperty</a>
+                </span>
+                (<em>string</em> key)
+            </nobr>
+            <div class="jd-descrdiv">
+                Given the name of a system environment variable, returns its value for this device.
+                The available variable names are listed in the <a href="#getProperty">
+                detailed description</a> of this method.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>object</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#getSystemProperty">getSystemProperty</a>
+                </span>
+                (<em>string</em> key)
+            </nobr>
+            <div class="jd-descrdiv">
+.               The API equivalent of <code>adb shell getprop &lt;key&gt;. This is provided for use
+                by platform developers.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#installPackage">installPackage</a>
+                </span>
+                (<em>string</em> path)
+            </nobr>
+            <div class="jd-descrdiv">
+                Installs the Android application or test package contained in packageFile onto this
+                device. If the application or test package is already installed, it is replaced.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>dictionary</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#instrument">instrument</a>
+                </span>
+                (<em>string</em> className,
+                <em>dictionary</em> args)
+            </nobr>
+            <div class="jd-descrdiv">
+                Runs the specified component under Android instrumentation, and returns the results
+                in a dictionary whose exact format is dictated by the component being run. The
+                component must already be present on this device.
+            </div>
+        </td>
+    </tr>
+    <tr class="api">
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#press">press</a>
+                </span>
+                (<em>string</em> name,
+                <em>dictionary</em> type)
+            </nobr>
+            <div class="jd-descrdiv">
+                Sends the key event specified by type to the key specified by
+                keycode.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#reboot">reboot</a>
+                </span>
+                (<em>string</em> into)
+            </nobr>
+            <div class="jd-descrdiv">
+                Reboots this device into the bootloader specified by bootloadType.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#removePackage">removePackage</a>
+                </span>
+                (<em>string</em> package)
+            </nobr>
+            <div class="jd-descrdiv">
+                Deletes the specified package from this device, including its data and cache.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>object</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#shell">shell</a>
+                </span>
+                (<em>string</em> cmd)
+            </nobr>
+            <div class="jd-descrdiv">
+                Executes an <code>adb</code> shell command and returns the result, if any.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#startActivity">startActivity</a>
+                </span>
+                (<em>string</em> uri,
+                <em>string</em> action,
+                <em>string</em> data,
+                <em>string</em> mimetype,
+                <em>iterable</em> categories
+                <em>dictionary</em> extras,
+                <em>component</em> component,
+                <em>flags</em>)
+            </nobr>
+            <div class="jd-descrdiv">
+                Starts an Activity on this device by sending an Intent constructed from the
+                supplied arguments.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <code>
+                <a href="{@docRoot}tools/help/MonkeyImage.html">
+                        MonkeyImage
+                    </a>
+                </code>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#takeSnapshot">takeSnapshot</a>()
+                </span>
+            </nobr>
+            <div class="jd-descrdiv">
+                Captures the entire screen buffer of this device, yielding a
+                <code>
+                <a href="{@docRoot}tools/help/MonkeyImage.html">
+                        MonkeyImage
+                </a>
+                </code> object containing a screen capture of the current display.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#touch">touch</a>
+                </span>
+               (<em>integer</em> x,
+                 <em>integer</em> y,
+                 <em>integer</em> type)
+            </nobr>
+            <div class="jd-descrdiv">
+                Sends a touch event specified by type to the screen location specified
+                by x and y.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#touch">type</a>
+                </span>
+                   (<em>string</em> message)
+            </nobr>
+            <div class="jd-descrdiv">
+                Sends the characters contained in message to this device, as if they
+                had been typed on the device's keyboard. This is equivalent to calling
+                <code><a href="#press">press()</a></code> for each keycode in <code>message</code>
+                using the key event type <code><a href="#ACTION_DOWN_AND_UP"></a>DOWN_AND_UP</code>.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#touch">wake</a>
+                </span>
+                   ()
+            </nobr>
+            <div class="jd-descrdiv">
+                Wakes the screen of this device.
+            </div>
+        </td>
+    </tr>
+</table>
+<!-- ========= ENUM CONSTANTS DETAIL ======== -->
+<h2>Constants</h2>
+<A NAME="ACTION_DOWN"></a>
+<div class="jd-details api">
+    <h4 class="jd-details-title">
+        <span class="normal">
+            <em>string</em>
+        </span>
+            DOWN
+    </h4>
+    <div class="jd-details-descr">
+        <div class="jd-tagdata jd-tagdescr">
+            <p>
+                <code><a href="#press">press()</a></code> or
+                <code><a href="#press">touch()</a></code> value.
+                Specifies that a DOWN event type should be sent to the device, corresponding to
+                pressing down on a key or touching the screen.
+            </p>
+        </div>
+    </div>
+</div>
+<A NAME="ACTION_UP"></A>
+<div class="jd-details api">
+    <h4 class="jd-details-title">
+        <span class="normal">
+            <em>string</em>
+        </span>
+            UP
+    </h4>
+    <div class="jd-details-descr">
+        <div class="jd-tagdata jd-tagdescr">
+            <p>
+                <code><a href="#press">press()</a></code> or
+                <code><a href="#press">touch()</a></code> value.
+                Specifies that an UP event type should be sent to the device, corresponding to
+                releasing a key or lifting up from the screen.
+            </p>
+        </div>
+    </div>
+</div>
+<A NAME="ACTION_DOWN_AND_UP"></A>
+
+<div class="jd-details api">
+    <h4 class="jd-details-title">
+        <span class="normal">
+            <em>string</em>
+        </span>
+            DOWN_AND_UP
+    </h4>
+    <div class="jd-details-descr">
+        <div class="jd-tagdata jd-tagdescr">
+            <p>
+                <code><a href="#press">press()</a></code>,
+                <code><a href="#press">touch()</a></code> or
+                <code><a href="#type">type()</a></code> value.
+                Specifies that a DOWN event type followed by an UP event type should be sent to the
+                device, corresponding to typing a key or clicking the screen.
+            </p>
+        </div>
+    </div>
+</div>
+<!-- ========= METHOD DETAIL ======== -->
+<!-- Public methods -->
+<h2>Public Methods</h2>
+<A NAME="broadcastIntent"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">broadcastIntent</span>
+      <span class="normal">
+      (
+            <em>string</em> uri,
+            <em>string</em> action,
+            <em>string</em> data,
+            <em>string</em> mimetype,
+            <em>iterable</em> categories
+            <em>dictionary</em> extras,
+            <em>component</em> component,
+            <em>iterable</em> flags)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Broadcasts an Intent to this device, as if the Intent were coming from an
+            application. See {@link android.content.Intent Intent} for more information about the
+            arguments.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>uri</th>
+            <td>
+                The URI for the Intent.
+                (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
+            </td>
+        </tr>
+        <tr>
+            <th>action</th>
+            <td>
+                The action for this Intent
+                (see {@link android.content.Intent#setAction(java.lang.String) Intent.setAction()}).
+            </td>
+        </tr>
+        <tr>
+            <th>data</th>
+            <td>
+                The data URI for this Intent
+                (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
+            </td>
+        </tr>
+        <tr>
+            <th>mimetype</th>
+            <td>
+                The MIME type for the Intent
+                (see {@link android.content.Intent#setType(java.lang.String) Intent.setType()}).
+            </td>
+        </tr>
+        <tr>
+            <th>categories</th>
+            <td>
+                An iterable data structure containing strings that define categories for this
+                Intent
+                (see
+                {@link android.content.Intent#addCategory(java.lang.String) Intent.addCategory()}).
+            </td>
+        </tr>
+        <tr>
+            <th>extras</th>
+            <td>
+                A dictionary of extra data for this Intent
+                (see {@link android.content.Intent#putExtra(java.lang.String,java.lang.String)
+                Intent.putExtra()}
+                for an example).
+                <p>
+                    The key for each dictionary item should be a <em>string</em>. The item's value
+                    can be any simple or structured data type.
+                </p>
+            </td>
+        </tr>
+        <tr>
+            <th>component</th>
+            <td>
+                The component for this Intent (see {@link android.content.ComponentName}).
+                Using this argument will direct the Intent to a specific class within a specific
+                Android package.
+            </td>
+        </tr>
+        <tr>
+            <th>flags</th>
+            <td>
+                An iterable data structure containing flags that control how the Intent is handled
+                (see {@link android.content.Intent#setFlags(int) Intent.setFlags()}).
+            </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="drag"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">drag</span>
+      <span class="normal">
+      (
+            <em>tuple</em> start,
+            <em>tuple</em> end,
+            <em>float</em> duration,
+            <em>integer</em> steps)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Simulates a drag gesture (touch, hold, and move) on this device's screen.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>start</th>
+          <td>
+            The starting point of the drag gesture, in the form of a <em>tuple</em>
+            (x,y) where x and y are <em>integers</em>.
+          </td>
+        </tr>
+        <tr>
+          <th>end</th>
+          <td>
+            The end point of the drag gesture, in the form of a <em>tuple</em> (x,y)
+            where x and y are <em>integers</em>.
+          </td>
+        </tr>
+        <tr>
+            <th>duration</th>
+            <td>The duration of the drag gesture in seconds. The default is 1.0 seconds.</td>
+        </tr>
+        <tr>
+            <th>steps</th>
+            <td>The number of steps to take when interpolating points. The default is 10.</td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="getProperty"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>object</em>
+      </span>
+      <span class="sympad">getProperty</span>
+      <span class="normal">
+        (<em>string</em> key)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Given the name of a system environment variable, returns its value for this device.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>key</th>
+          <td>
+            The name of the system environment variable. The available variable names are listed in
+            <a href="#table1">Table 1. Property variable names</a> at the end of this topic.
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            The value of the variable. The data format varies according to the variable requested.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="getSystemProperty"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>object</em>
+      </span>
+      <span class="sympad">getSystemProperty</span>
+      <span class="normal">
+      (<em>string</em> key)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Synonym for <code><a href="#getProperty">getProperty()</a></code>.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>key</th>
+          <td>
+            The name of the system environment variable. The available variable names are listed in
+            <a href="#table1">Table 1. Property Variable Names</a>.
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            The value of the variable. The data format varies according to the variable requested.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="installPackage"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">installPackage</span>
+      <span class="normal">
+      (<em>string</em> path)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Installs the Android application or test package contained in packageFile
+            onto this device. If the application or test package is already installed, it is
+            replaced.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>path</th>
+          <td>
+            The fully-qualified path and filename of the <code>.apk</code> file to install.
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="instrument"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>dictionary</em>
+      </span>
+      <span class="sympad">instrument</span>
+      <span class="normal">
+      (
+            <em>string</em> className,
+            <em>dictionary</em> args)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Runs the specified component with Android instrumentation, and returns the results
+            in a dictionary whose exact format is dictated by the component being run. The
+            component must already be present on this device.
+        </p>
+        <p>
+            Use this method to start a test case that uses one of Android's test case classes.
+            See <a href="{@docRoot}tools/testing/testing_android.html">Testing
+            Fundamentals</a> to learn more about unit testing with the Android testing
+            framework.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>className</th>
+          <td>
+            The name of an Android component that is already installed on this device, in the
+            standard form packagename/classname, where packagename is the
+            Android package name of a <code>.apk</code> file on this device, and
+            classname is the class name of an Android component (Activity,
+            ContentProvider, Service, or BroadcastReceiver) in that file. Both
+            packagename and classname must be fully qualified. See
+            {@link android.content.ComponentName} for more details.
+          </td>
+        </tr>
+        <tr>
+          <th>args</th>
+          <td>
+            A dictionary containing flags and their values. These are passed to the component as it
+            is started. If the flag does not take a value, set its dictionary value to an empty
+            string.
+          </td>
+        </tr>
+      </table>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+        <ul class="nolist">
+            <li>
+                <p>
+                    A dictionary containing the component's output. The contents of the dictionary
+                    are defined by the component itself.
+                </p>
+                <p>
+                    If you use {@link android.test.InstrumentationTestRunner} as the class name in
+                    the componentName argument, then the result dictionary contains
+                    the single key "stream". The value of "stream" is a <em>string</em> containing
+                    the test output, as if <code>InstrumentationTestRunner</code> was run from the
+                    command line. The format of this output is described in
+                    <a href="{@docRoot}tools/testing/testing_otheride.html">
+                    Testing in Other IDEs</a>.
+                </p>
+            </li>
+        </ul>
+    </div>
+    </div>
+  </div>
+</div>
+<A NAME="press"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">press</span>
+      <span class="normal">
+      (<em>string</em> name,
+      <em>integer</em> type)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Sends the key event specified by <code>type</code> to the key specified by
+            <code>keycode</code>.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>name</th>
+          <td>
+            The name of the keycode to send. See {@link android.view.KeyEvent} for a list of
+            keycode names. Use the keycode name, not its integer value.
+          </td>
+        </tr>
+        <tr>
+          <th>type</th>
+          <td>
+            The type of key event to send. The allowed values are <code><a href="#ACTION_DOWN">
+            DOWN</a></code>, <code><a href="#ACTION_UP">UP</a></code>, and
+            <code><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></code>.
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="reboot"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">reboot</span>
+      <span class="normal">
+      (<em>string</em> bootloadType)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+                Reboots this device into the bootloader specified by <code>bootloadType</code>.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>into</th>
+          <td>
+            The type of bootloader to reboot into. The allowed values are
+            "bootloader", "recovery", or "None".
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="removePackage"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">removePackage</span>
+      <span class="normal">
+      (<em>string</em> package)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Deletes the specified package from this device, including its data and cache.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>package</th>
+          <td>
+            The Android package name of an <code>.apk</code> file on this device.
+          </td>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="shell"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>object</em>
+      </span>
+      <span class="sympad">shell</span>
+      <span class="normal">
+      (<em>string</em> cmd)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Executes an <code>adb</code> shell command and returns the result, if any.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>cmd</th>
+          <td>
+            The command to execute in the <code>adb</code> shell. The form of these commands is
+            described in the topic <a href="{@docRoot}tools/help/adb.html">Android
+            Debug Bridge</a>.
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            The results of the command, if any. The format of the results is determined by the
+            command.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="startActivity"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">startActivity</span>
+      <span class="normal">
+      (
+            <em>string</em> uri,
+            <em>string</em> action,
+            <em>string</em> data,
+            <em>string</em> mimetype,
+            <em>iterable</em> categories
+            <em>dictionary</em> extras,
+            <em>component</em> component,
+            <em>iterable</em> flags)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+           Starts an Activity on this device by sending an Intent constructed from the
+           supplied arguments.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>uri</th>
+          <td>
+            The URI for the Intent.
+            (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
+          </td>
+        </tr>
+        <tr>
+            <th>action</th>
+            <td>
+                The action for the Intent
+                (see {@link android.content.Intent#setAction(java.lang.String) Intent.setAction()}).
+            </td>
+        </tr>
+        <tr>
+            <th>data</th>
+            <td>
+                The data URI for the Intent
+                (see {@link android.content.Intent#setData(android.net.Uri) Intent.setData()}).
+            </td>
+        </tr>
+        <tr>
+            <th>mimetype</th>
+            <td>
+                The MIME type for the Intent
+                (see {@link android.content.Intent#setType(java.lang.String) Intent.setType()}).
+            </td>
+        </tr>
+        <tr>
+            <th>categories</th>
+            <td>
+                An iterable data structure containing strings that define categories for the
+                Intent
+                (see
+                {@link android.content.Intent#addCategory(java.lang.String) Intent.addCategory()}).
+            </td>
+        </tr>
+        <tr>
+            <th>extras</th>
+            <td>
+                A dictionary of extra data for the Intent
+                (see
+                {@link android.content.Intent#putExtra(java.lang.String,java.lang.String)
+                Intent.putExtra()}
+                for an example).
+                <p>
+                    The key for each dictionary item should be a <em>string</em>. The item's value
+                    can be any simple or structured data type.
+                </p>
+            </td>
+        </tr>
+        <tr>
+            <th>component</th>
+            <td>
+                The component for the Intent
+                (see {@link android.content.ComponentName}). Using this argument will direct the
+                Intent to a specific class within a specific Android package.
+            </td>
+        </tr>
+        <tr>
+            <th>flags</th>
+            <td>
+                An iterable data structure containing flags that control how the Intent is handled
+                (see {@link android.content.Intent#setFlags(int) Intent.setFlags()}).
+            </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="takeSnapshot"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <code>
+            <a href="{@docRoot}tools/help/MonkeyImage.html">
+                MonkeyImage
+            </a>
+        </code>
+      </span>
+      <span class="sympad">takeSnapshot</span>
+      <span class="normal">
+      ()
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Captures the entire screen buffer of this device, yielding a
+            screen capture of the current display.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            A <a href="{@docRoot}tools/help/MonkeyImage.html">
+            MonkeyImage</a> object containing the image of the current display.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="touch"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">touch</span>
+      <span class="normal">
+      (
+            <em>integer</em> x,
+            <em>integer</em> y,
+            <em>string</em> type)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Sends a touch event specified by type to the screen location specified
+            by x and y.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>x</th>
+          <td>
+            The horizontal position of the touch in actual device pixels, starting from the left of
+            the screen in its current orientation.
+          </td>
+        </tr>
+        <tr>
+          <th>y</th>
+          <td>
+            The vertical position of the touch in actual device pixels, starting from the top of
+            the screen in its current orientation.
+          </td>
+        </tr>
+        <tr>
+            <th>type</th>
+            <td>
+                The type of key event to send. The allowed values are <code><a href="#ACTION_DOWN">
+                DOWN</a></code>, <code><a href="#ACTION_UP">UP</a></code>, and
+                <code><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></code>.
+            </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="type"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">type</span>
+      <span class="normal">
+      (<em>string</em> message)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Sends the characters contained in message to this device, as if they
+            had been typed on the device's keyboard. This is equivalent to calling
+            <code><a href="#press">press()</a></code> for each keycode in <code>message</code>
+            using the key event type <code><a href="#ACTION_DOWN_AND_UP">DOWN_AND_UP</a></code>.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>message</th>
+          <td>
+              A string containing the characters to send.
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="wake"></A>
+<div class="jd-details api">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">wake</span>
+      <span class="normal">
+      ()
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Wakes the screen of this device.
+        </p>
+    </div>
+  </div>
+</div>
+<hr></hr>
+<h2>Appendix</h2>
+    <p class="table-caption" id="table1">
+        <strong>Table 1.</strong>Property variable names used with
+        <span class="sympad"><a href="#getProperty">getProperty()</a></span> and
+        <span class="sympad"><a href="#getSystemProperty">getSystemProperty()</a></span>.
+    </p>
+    <table>
+        <tr>
+            <th>
+                Property Group
+            </th>
+            <th>
+                Property
+            </th>
+            <th>
+                Description
+            </th>
+            <th>
+                Notes
+            </th>
+        </tr>
+        <tr>
+            <td rowspan="17"><code>build</code></td>
+            <td><code>board</code></td>
+            <td>Code name for the device's system board</td>
+            <td rowspan="17">
+                See {@link android.os.Build}
+            </td>
+        </tr>
+        <tr>
+            <td><code>brand</code></td>
+            <td>The carrier or provider for which the OS is customized.</td>
+        </tr>
+            <tr>
+            <td><code>device</code></td>
+            <td>The device design name.</td>
+        </tr>
+            <tr>
+            <td><code>fingerprint</code></td>
+            <td>A unique identifier for the currently-running build.</td>
+        </tr>
+            <tr>
+            <td><code>host</code></td>
+            <td></td>
+        </tr>
+            <tr>
+            <td><code>ID</code></td>
+            <td>A changelist number or label.</td>
+        </tr>
+            <tr>
+            <td><code>model</code></td>
+            <td>The end-user-visible name for the device.</td>
+        </tr>
+            <tr>
+            <td><code>product</code></td>
+            <td>The overall product name.</td>
+        </tr>
+            <tr>
+            <td><code>tags</code></td>
+            <td>Comma-separated tags that describe the build, such as "unsigned" and "debug".</td>
+        </tr>
+            <tr>
+            <td><code>type</code></td>
+            <td>The build type, such as "user" or "eng".</td>
+        </tr>
+        <tr>
+            <td><code>user</code></td>
+            <td></td>
+        </tr>
+        <tr>
+            <td><code>CPU_ABI</code></td>
+            <td>
+                The name of the native code instruction set, in the form CPU type plus
+                ABI convention.
+            </td>
+        </tr>
+        <tr>
+            <td><code>manufacturer</code></td>
+            <td>The product/hardware manufacturer.</td>
+        </tr>
+        <tr>
+            <td><code>version.incremental</code></td>
+            <td>
+                The internal code used by the source control system to represent this version
+                of the software.
+            </td>
+        </tr>
+        <tr>
+            <td><code>version.release</code></td>
+            <td>The user-visible name of this version of the software.</td>
+        </tr>
+        <tr>
+            <td><code>version.sdk</code></td>
+            <td>The user-visible SDK version associated with this version of the OS.</td>
+        </tr>
+        <tr>
+            <td><code>version.codename</code></td>
+            <td>
+                The current development codename, or "REL" if this version of the software has been
+                released.
+            </td>
+        </tr>
+        <tr>
+            <td rowspan="3"><code>display</code></td>
+            <td><code>width</code></td>
+            <td>The device's display width in pixels.</td>
+            <td rowspan="3">
+                See
+                {@link android.util.DisplayMetrics} for details.
+            </td>
+        </tr>
+        <tr>
+            <td><code>height</code></td>
+            <td>The device's display height in pixels.</td>
+        </tr>
+        <tr>
+            <td><code>density</code></td>
+            <td>
+                The logical density of the display. This is a factor that scales
+                DIP (Density-Independent Pixel) units to the device's resolution. DIP is adjusted so
+                that 1 DIP is equivalent to one pixel on a 160 pixel-per-inch display. For example,
+                on a 160-dpi screen, density = 1.0, while on a 120-dpi screen, density = .75.
+                <p>
+                    The value does not exactly follow the real screen size, but is adjusted to
+                    conform to large changes in the display DPI. See
+                    {@link android.util.DisplayMetrics#density} for more details.
+                </p>
+            </td>
+        </tr>
+        <tr>
+            <td rowspan="6"><code>am.current</code></td>
+            <td><code>package</code></td>
+            <td>The Android package name of the currently running package.</td>
+            <td rowspan="6">
+                The <code>am.current</code> keys return information about the currently-running
+                Activity.
+            </td>
+        </tr>
+        <tr>
+            <td><code>action</code></td>
+            <td>
+                The current activity's action. This has the same format as the <code>name</code>
+                attribute of the <code>action</code> element in a package manifest.
+            </td>
+        </tr>
+        <tr>
+            <td><code>comp.class</code></td>
+            <td>
+                The class name of the component that started the current Activity. See
+                <code><a href="#comppackage">comp.package</a></code> for more details.</td>
+        </tr>
+        <tr>
+            <td><a name="comppackage"><code>comp.package</code></a></td>
+            <td>
+                The package name of the component that started the current Activity. A component
+                is specified by a package name and the name of class that the package contains.
+            </td>
+        </tr>
+        <tr>
+            <td><code>data</code></td>
+            <td>The data (if any) contained in the Intent that started the current Activity.</td>
+        </tr>
+        <tr>
+            <td><code>categories</code></td>
+            <td>The categories specified by the Intent that started the current Activity.</td>
+        </tr>
+        <tr>
+            <td rowspan="3"><code>clock</code></td>
+            <td><code>realtime</code></td>
+            <td>
+                The number of milliseconds since the device rebooted, including deep-sleep
+                time.
+            </td>
+            <td rowspan="3">
+                See {@link android.os.SystemClock} for more information.
+            </td>
+        </tr>
+        <tr>
+            <td><code>uptime</code></td>
+            <td>
+                The number of milliseconds since the device rebooted, <em>not</em> including
+                deep-sleep time
+            </td>
+        </tr>
+        <tr>
+            <td><code>millis</code></td>
+            <td>current time since the UNIX epoch, in milliseconds.</td>
+        </tr>
+    </table>
diff --git a/docs/html/tools/help/MonkeyImage.jd b/docs/html/tools/help/MonkeyImage.jd
new file mode 100644
index 0000000..79f4948
--- /dev/null
+++ b/docs/html/tools/help/MonkeyImage.jd
@@ -0,0 +1,437 @@
+page.title=MonkeyImage
+parent.title=monkeyrunner
+parent.link=index.html
+@jd:body
+<style>
+    h4.jd-details-title {background-color: #DEE8F1;}
+</style>
+
+<p>
+    A monkeyrunner class to hold an image of the device or emulator's screen. The image is
+    copied from the screen buffer during a screenshot. This object's methods allow you to
+    convert the image into various storage formats, write the image to a file, copy parts of
+    the image, and compare this object to other <code>MonkeyImage</code> objects.
+</p>
+<p>
+    You do not need to create new instances of <code>MonkeyImage</code>. Instead, use
+<code><a href="{@docRoot}tools/help/MonkeyDevice.html#takeSnapshot">
+MonkeyDevice.takeSnapshot()</a></code> to create a new instance from a screenshot. For example, use:
+</p>
+<pre>
+newimage = MonkeyDevice.takeSnapshot()
+</pre>
+<h2>Summary</h2>
+<table id="pubmethods" class="jd-sumtable">
+    <tr>
+        <th colspan="12" style="background-color: #E2E2E2">Methods</th>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>string</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#convertToBytes">convertToBytes</a>
+                </span>
+                (<em>string</em> format)
+            </nobr>
+            <div class="jd-descrdiv">
+                Converts the current image to a particular format and returns it as a
+                <em>string</em> that you can then access as an <em>iterable</em> of binary bytes.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>tuple</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#getRawPixel">getRawPixel</a>
+                </span>
+                (<em>integer</em> x,
+                <em>integer</em> y)
+            </nobr>
+            <div class="jd-descrdiv">
+                Returns the single pixel at the image location (x,y), as an
+                a <em>tuple</em> of <em>integer</em>, in the form (a,r,g,b).
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>integer</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#getRawPixelInt">getRawPixelInt</a>
+                </span>
+                (<em>integer</em> x,
+                 <em>integer</em> y)
+            </nobr>
+            <div class="jd-descrdiv">
+                Returns the single pixel at the image location (x,y), as
+                a 32-bit <em>integer</em>.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <code>
+                    <a href="{@docRoot}tools/help/MonkeyImage.html">MonkeyImage</a>
+                </code>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#getSubImage">getSubImage</a>
+                </span>
+                (<em>tuple</em> rect)
+            </nobr>
+            <div class="jd-descrdiv">
+                Creates a new <code>MonkeyImage</code> object from a rectangular selection of the
+                current image.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>boolean</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#sameAs">sameAs</a>
+                </span>
+         (<code><a href="{@docRoot}tools/help/MonkeyImage.html">MonkeyImage</a></code>
+            other,
+            <em>float</em> percent)
+            </nobr>
+            <div class="jd-descrdiv">
+                Compares this <code>MonkeyImage</code> object to another and returns the result of
+                the comparison. The <code>percent</code> argument specifies the percentage
+                difference that is allowed for the two images to be "equal".
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>void</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#writeToFile">writeToFile</a>
+                </span>
+                (<em>string</em> path,
+                <em>string</em> format)
+            </nobr>
+            <div class="jd-descrdiv">
+                Writes the current image to the file specified by <code>filename</code>, in the
+                format specified by <code>format</code>.
+            </div>
+        </td>
+    </tr>
+</table>
+<!-- ========= METHOD DETAIL ======== -->
+<!-- Public methods -->
+<h2>Public Methods</h2>
+<A NAME="convertToBytes"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>string</em>
+      </span>
+      <span class="sympad">convertToBytes</span>
+      <span class="normal">
+      (
+            <em>string</em> format)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Converts the current image to a particular format and returns it as a <em>string</em>
+            that you can then access as an <em>iterable</em> of binary bytes.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>format</th>
+            <td>
+                The desired output format. All of the common raster output formats are supported.
+                The default value is "png" (Portable Network Graphics).
+            </td>
+        </tr>
+        </table>
+    </div>
+</div>
+</div>
+<A NAME="getRawPixel"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>tuple</em>
+      </span>
+      <span class="sympad">getRawPixel</span>
+      <span class="normal">
+        (<em>integer</em> x,
+         <em>integer</em> y)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Returns the single pixel at the image location (x,y), as an
+            a <em>tuple</em> of <em>integer</em>, in the form (a,r,g,b).
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>x</th>
+          <td>
+            The horizontal position of the pixel, starting with 0 at the left of the screen in the
+            orientation it had when the screenshot was taken.
+          </td>
+        </tr>
+        <tr>
+          <th>y</th>
+          <td>
+            The vertical position of the pixel, starting with 0 at the top of the screen in the
+            orientation it had when the screenshot was taken.
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            A tuple of integers representing the pixel, in the form (a,r,g,b) where
+            a is the alpha channel value, and r, g, and b are the red, green, and blue values,
+            respectively.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="getRawPixelInt"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>tuple</em>
+      </span>
+      <span class="sympad">getRawPixelInt</span>
+      <span class="normal">
+        (<em>integer</em> x,
+         <em>integer</em> y)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Returns the single pixel at the image location (x,y), as an
+            an <em>integer</em>. Use this method to economize on memory.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>x</th>
+          <td>
+            The horizontal position of the pixel, starting with 0 at the left of the screen in the
+            orientation it had when the screenshot was taken.
+          </td>
+        </tr>
+        <tr>
+          <th>y</th>
+          <td>
+            The vertical position of the pixel, starting with 0 at the top of the screen in the
+            orientation it had when the screenshot was taken.
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            The a,r,g, and b values of the pixel as 8-bit values combined into a 32-bit
+            integer, with a as the leftmost 8 bits, r the next rightmost, and so forth.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="getSubImage"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+          <code>
+              <a href="{@docRoot}tools/help/MonkeyImage.html">MonkeyImage</a>
+          </code>
+      </span>
+      <span class="sympad">getSubImage</span>
+      <span class="normal">
+        (<em>tuple</em> rect)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+           Creates a new <code>MonkeyImage</code> object from a rectangular selection of the
+           current image.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>rect</th>
+          <td>
+            A tuple (x, y, w, h) specifying the selection. x and y specify the 0-based pixel
+            position of the upper left-hand corner of the selection. w specifies the width of the
+            region, and h specifies its height, both in units of pixels.
+            <p>
+                The image's orientation is the same as the screen orientation at the time the
+                screenshot was made.
+            </p>
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            A new <code>MonkeyImage</code> object containing the selection.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="sameAs"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>boolean</em>
+      </span>
+      <span class="sympad">sameAs</span>
+      <span class="normal">
+      (
+       <code>
+           <a href="{@docRoot}tools/help/MonkeyImage.html">MonkeyImage</a>
+       </code> otherImage,
+       <em>float</em> percent
+      )
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+           Compares this <code>MonkeyImage</code> object to another and returns the result of
+           the comparison. The <code>percent</code> argument specifies the percentage
+           difference that is allowed for the two images to be "equal".
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>other</th>
+          <td>
+            Another <code>MonkeyImage</code> object to compare to this one.
+          </td>
+        </tr>
+        <tr>
+          <th>
+            percent
+          </th>
+          <td>
+            A float in the range 0.0 to 1.0, inclusive, indicating
+            the percentage of pixels that need to be the same for the method to return
+            <code>true</code>. The default is 1.0, indicating that all the pixels
+            must match.
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            Boolean <code>true</code> if the images match, or boolean <code>false</code> otherwise.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="writeToFile"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">writeToFile</span>
+      <span class="normal">
+      (<em>string</em> filename,
+       <em>string</em> format)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+           Writes the current image to the file specified by <code>filename</code>, in the
+           format specified by <code>format</code>.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>path</th>
+          <td>
+            The fully-qualified filename and extension of the output file.
+          </td>
+        </tr>
+        <tr>
+            <th>
+                format
+            </th>
+            <td>
+                The output format to use for the file. If no format is provided, then the
+                method tries to guess the format from the filename's extension. If no
+                extension is provided and no format is specified, then the default format of
+                "png" (Portable Network Graphics) is used.
+            </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
diff --git a/docs/html/tools/help/MonkeyRunner.jd b/docs/html/tools/help/MonkeyRunner.jd
new file mode 100644
index 0000000..a924d2d
--- /dev/null
+++ b/docs/html/tools/help/MonkeyRunner.jd
@@ -0,0 +1,448 @@
+page.title=MonkeyRunner
+parent.title=monkeyrunner
+parent.link=index.html
+@jd:body
+
+<style>
+    h4.jd-details-title {background-color: #DEE8F1;}
+</style>
+<p>
+    A monkeyrunner class that contains static utility methods.
+</p>
+<h2>Summary</h2>
+<table id="pubmethods" class="jd-sumtable">
+    <tr>
+        <th colspan="12" style="background-color: #E2E2E2">Methods</th>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#alert">alert</a>
+                </span>
+                (<em>string</em> message,
+                 <em>string</em> title,
+                 <em>string</em> okTitle)
+            </nobr>
+            <div class="jd-descrdiv">
+                Displays an alert dialog to the process running the current
+                program.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>integer</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#choice">choice</a>
+                </span>
+                (<em>string</em> message,
+                 <em>iterable</em> choices,
+                 <em>string</em> title)
+            </nobr>
+            <div class="jd-descrdiv">
+                Displays a dialog with a list of choices to the process running the current program.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#help">help</a>
+                </span>
+                (<em>string</em> format)
+            </nobr>
+            <div class="jd-descrdiv">
+                Displays the monkeyrunner API reference in a style similar to that of Python's
+                <code>pydoc</code> tool, using the specified format.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <em>string</em>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#input">input</a>
+                </span>
+                (<em>string</em> message,
+                 <em>string</em> initialValue,
+                 <em>string</em> title,
+                 <em>string</em> okTitle,
+                 <em>string</em> cancelTitle)
+            </nobr>
+            <div class="jd-descrdiv">
+                Displays a dialog that accepts input.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                void
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#sleep">sleep</a>
+                </span>
+                (<em>float</em> seconds)
+            </nobr>
+            <div class="jd-descrdiv">
+                Pauses the current program for the specified number of seconds.
+            </div>
+        </td>
+    </tr>
+    <tr class="api" >
+        <td class="jd-typecol">
+            <nobr>
+                <code>
+                    <a href="{@docRoot}tools/help/MonkeyDevice.html">MonkeyDevice</a>
+                </code>
+            </nobr>
+        </td>
+        <td class="jd-linkcol" width="100%">
+            <nobr>
+                <span class="sympad">
+                    <a href="#waitForConnection">waitForConnection</a>
+                </span>
+                (<em>float</em> timeout,
+                <em>string</em> deviceId)
+            </nobr>
+            <div class="jd-descrdiv">
+                Tries to make a connection between the <code>monkeyrunner</code> backend and the
+                specified device or emulator.
+            </div>
+        </td>
+    </tr>
+</table>
+<!-- ========= METHOD DETAIL ======== -->
+<!-- Public methods -->
+<h2>Public Methods</h2>
+<A NAME="alert"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>string</em>
+      </span>
+      <span class="sympad">alert</span>
+      <span class="normal">
+      (
+            <em>string</em> message,
+            <em>string</em> title,
+            <em>string</em> okTitle)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Displays an alert dialog to the process running the current
+            program. The dialog is modal, so the program pauses until the user clicks the dialog's
+            button.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>message</th>
+            <td>
+                The message to display in the dialog.
+            </td>
+        </tr>
+        <tr>
+            <th>title</th>
+            <td>
+                The dialog's title. The default value is "Alert".
+            </td>
+        </tr>
+        <tr>
+            <th>okTitle</th>
+            <td>
+                The text displayed in the dialog button. The default value is "OK".
+            </td>
+        </tr>
+        </table>
+    </div>
+</div>
+</div>
+<A NAME="choice"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>integer</em>
+      </span>
+      <span class="sympad">choice</span>
+      <span class="normal">
+        (<em>string</em> message,
+         <em>iterable</em> choices,
+         <em>string</em> title)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Displays a dialog with a list of choices to the process running the current program. The
+            dialog is modal, so the program pauses until the user clicks one of the dialog's
+            buttons.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>message</th>
+          <td>
+            The prompt message displayed in the dialog.
+          </td>
+        </tr>
+        <tr>
+          <th>choices</th>
+          <td>
+            A Python iterable containing one or more objects that are displayed as strings. The
+            recommended form is an array of strings.
+          </td>
+        </tr>
+        <tr>
+            <th>
+                title
+            </th>
+            <td>
+               The dialog's title. The default is "Input".
+            </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            If the user makes a selection and clicks the "OK" button, the method returns
+            the 0-based index of the selection within the iterable.
+            If the user clicks the "Cancel" button, the method returns -1.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="help"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">help</span>
+      <span class="normal">
+        (<em>string</em> format)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Displays the monkeyrunner API reference in a style similar to that of Python's
+            <code>pydoc</code> tool, using the specified format.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>format</th>
+          <td>
+            The markup format to use in the output. The possible values are "text" for plain text
+            or "html" for HTML.
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="input"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        <em>string</em>
+      </span>
+      <span class="sympad">input</span>
+      <span class="normal">
+        (<em>string</em> message
+         <em>string</em> initialValue,
+         <em>string</em> title,
+         <em>string</em> okTitle,
+         <em>string</em> cancelTitle)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Displays a dialog that accepts input and returns it to the program. The dialog is
+            modal, so the program pauses until the user clicks one of the dialog's buttons.
+        </p>
+        <p>
+            The dialog contains two buttons, one of which displays the okTitle value
+            and the other the cancelTitle value. If the user clicks the okTitle button,
+            the current value of the input box is returned. If the user clicks the cancelTitle
+            button, an empty string is returned.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>message</th>
+          <td>
+            The prompt message displayed in the dialog.
+          </td>
+        </tr>
+        <tr>
+          <th>initialValue</th>
+          <td>
+            The initial value to display in the dialog. The default is an empty string.
+          </td>
+        </tr>
+        <tr>
+          <th>title</th>
+          <td>
+            The dialog's title. The default is "Input".
+          </td>
+        </tr>
+        <tr>
+          <th>okTitle</th>
+          <td>
+            The text displayed in the okTitle button. The default is "OK".
+          </td>
+        </tr>
+        <tr>
+          <th>cancelTitle</th>
+          <td>
+            The text displayed in the cancelTitle button. The default is "Cancel".
+          </td>
+        </tr>
+      </table>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+            If the user clicks the okTitle button, then the method returns the current value of
+            the dialog's input box. If the user clicks the cancelTitle button, the method returns
+            an empty string.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
+<A NAME="sleep"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+        void
+      </span>
+      <span class="sympad">sleep</span>
+      <span class="normal">
+      (
+       <em>float</em> seconds
+      )
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Pauses the current program for the specified number of seconds.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>seconds</th>
+          <td>
+            The number of seconds to pause.
+          </td>
+        </tr>
+      </table>
+    </div>
+  </div>
+</div>
+<A NAME="waitForConnection"></A>
+<div class="jd-details api ">
+    <h4 class="jd-details-title">
+      <span class="normal">
+          <code>
+              <a href="{@docRoot}tools/help/MonkeyDevice.html">MonkeyDevice</a>
+          </code>
+      </span>
+      <span class="sympad">waitForConnection</span>
+      <span class="normal">
+      (<em>float</em> timeout,
+       <em>string</em> deviceId)
+      </span>
+    </h4>
+  <div class="jd-details-descr">
+
+    <div class="jd-tagdata jd-tagdescr">
+        <p>
+            Tries to make a connection between the <code>monkeyrunner</code> backend and the
+            specified device or emulator.
+        </p>
+    </div>
+    <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Arguments</h5>
+      <table class="jd-tagtable">
+        <tr>
+          <th>timeout</th>
+          <td>
+            The number of seconds to wait for a connection. The default is to wait forever.
+          </td>
+        </tr>
+        <tr>
+            <th>
+                deviceId
+            </th>
+            <td>
+                A regular expression that specifies the serial number of the device or emulator. See
+                the topic
+                <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>
+                for a description of device and emulator serial numbers.
+            </td>
+        </tr>
+      </table>
+    </div>
+        <div class="jd-tagdata">
+      <h5 class="jd-tagtitle">Returns</h5>
+      <ul class="nolist">
+        <li>
+          A <code><a href="{@docRoot}tools/help/MonkeyDevice.html">MonkeyDevice</a></code>
+          instance for the device or emulator. Use this object to control and communicate with the
+          device or emulator.
+        </li>
+      </ul>
+    </div>
+  </div>
+</div>
diff --git a/docs/html/tools/help/aapt.html b/docs/html/tools/help/aapt.html
new file mode 100644
index 0000000..ebd375d
--- /dev/null
+++ b/docs/html/tools/help/aapt.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/building/index.html#detailed-build">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/building/index.html#detailed-build">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/help/adb.jd b/docs/html/tools/help/adb.jd
new file mode 100644
index 0000000..ddebed6
--- /dev/null
+++ b/docs/html/tools/help/adb.jd
@@ -0,0 +1,669 @@
+page.title=Android Debug Bridge
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>ADB quickview</h2>
+  <ul>
+<li>Manage the state of an emulator or device</li>
+<li>Run shell commands on a device</li>
+<li>Manage port forwarding on an emulator or device</li>
+<li>Copy files to/from an emulator or device</li>
+  </ul>
+
+  <h2>In this document</h2>
+  <ol>
+<li><a href="#issuingcommands">Issuing ADB Commands</a></li>
+<li><a href="#devicestatus">Querying for Emulator/Device Instances</a></li>
+<li><a href="#directingcommands">Directing Commands to a Specific Emulator/Device Instance</a></li>
+<li><a href="#move">Installing an Application</a></li>
+<li><a href="#forwardports">Forwarding Ports</a></li>
+<li><a href="#copyfiles">Copying Files to or from an Emulator/Device Instance</a></li>
+<li><a href="#commandsummary">Listing of adb Commands </a></li>
+<li><a href="#shellcommands">Issuing Shell Commands</a></li>
+<li><a href="#logcat">Enabling logcat Logging</a></li>
+<li><a href="#stopping">Stopping the adb Server</a></li>
+  </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="emulator.html">Emulator</a></li>
+  </ol>
+
+</div>
+</div>
+
+<p>Android Debug Bridge (adb) is a versatile command line tool that lets you communicate with an
+emulator instance or connected Android-powered device. It is a client-server program that includes
+three components: </p>
+
+<ul>
+  <li>A client, which runs on your development machine. You can invoke a client from a shell by issuing an adb command. Other Android tools such as the ADT plugin and DDMS also create adb clients. </li>
+  <li>A server, which runs as a background process on your development machine. The server manages communication between the client and the adb daemon running on an emulator or device. </li>
+  <li>A daemon, which runs as a background process on each emulator or device instance. </li>
+</ul>
+
+<p>You can find the {@code adb} tool in {@code &lt;sdk&gt;/platform-tools/}.</p>
+
+<p>When you start an adb client, the client first checks whether there is an adb server process already running. If there isn't, it starts the server process. When the server starts, it binds to local TCP port 5037 and listens for commands sent from adb clients&mdash;all adb clients use port 5037 to communicate with the adb server. </p>
+
+<p>The server then sets up connections to all running emulator/device instances. It locates emulator/device instances by scanning odd-numbered ports in the range 5555 to 5585, the range used by emulators/devices. Where the server finds an adb daemon, it sets up a connection to that port. Note that each emulator/device instance acquires a pair of sequential ports &mdash; an even-numbered port for console connections and an odd-numbered port for adb connections. For example: </p>
+
+<p style="margin-left:2em">
+Emulator 1, console: 5554<br/>
+Emulator 1, adb: 5555<br>
+Emulator 2, console: 5556<br>
+Emulator 2, adb: 5557 ...
+</p>
+
+<p>As shown, the emulator instance connected to adb on port 5555 is the same as the instance whose console listens on port 5554. </p>
+
+<p>Once the server has set up connections to all emulator instances, you can use adb commands to control and access those instances. Because the server manages connections to emulator/device instances and handles commands from multiple adb clients, you can control any emulator/device instance from any client (or from a script).</p>
+
+<p>The sections below describe the commands that you can use to access adb capabilities and manage the state of an emulator/device. Note that if you are developing Android applications in Eclipse and have installed the ADT plugin, you do not need to access adb from the command line. The ADT plugin provides a transparent integration of adb into the Eclipse IDE. However, you can still use adb directly as necessary, such as for debugging.</p>
+
+<a name="issuingcommands"></a>
+
+<h2>Issuing adb Commands</h2>
+
+<p>You can issue adb commands from a command line on your development machine or from a script. The usage is: </p>
+
+    <pre>adb [-d|-e|-s &lt;serialNumber&gt;] &lt;command&gt; </pre>
+
+<p>When you issue a command, the program invokes an adb client. The client is not specifically associated with any emulator instance, so if multiple emulators/devices are running, you need to use the <code>-d</code> option to specify the target instance to which the command should be directed. For more information about using this option, see <a href="#directingcommands">Directing Commands to a Specific Emulator/Device Instance</a>. </p>
+
+<a name="devicestatus"></a>
+
+<h2>Querying for Emulator/Device Instances</h2>
+
+<p>Before issuing adb commands, it is helpful to know what emulator/device instances are connected to the adb server. You can generate a list of attached emulators/devices using the <code>devices</code> command: </p>
+
+	<pre>adb devices</pre>
+
+<p>In response, adb prints this status information for each instance:</p>
+
+<ul>
+	<li>Serial number &mdash; A string created by adb to uniquely identify an emulator/device instance by its 
+        console port number. The format of the serial number is <code>&lt;type&gt;-&lt;consolePort&gt;</code>. 
+        Here's an example serial number: <code>emulator-5554</code></li>
+	<li>State &mdash; The connection state of the instance. Three states are supported: 
+		<ul>
+		<li><code>offline</code> &mdash; the instance is not connected to adb or is not responding.</li>
+		<li><code>device</code> &mdash; the instance is now connected to the adb server. Note that this state does not 
+                    imply that the Android system is fully booted and operational, since the instance connects to adb 
+                    while the system is still booting. However, after boot-up, this is the normal operational state of 
+                    an emulator/device instance.</li>
+		</ul>
+	</li>
+</ul>
+
+<p>The output for each instance is formatted like this: </p>
+
+	<pre>[serialNumber] [state]</pre>
+
+<p>Here's an example showing the <code>devices</code> command and its output:</p>
+
+	<pre>$ adb devices
+List of devices attached 
+emulator-5554&nbsp;&nbsp;device
+emulator-5556&nbsp;&nbsp;device
+emulator-5558&nbsp;&nbsp;device</pre>
+
+<p>If there is no emulator/device running, adb returns <code>no device</code>.</p>
+
+
+<a name="directingcommands"></a>
+
+<h2>Directing Commands to a Specific Emulator/Device Instance</h2>
+
+<p>If multiple emulator/device instances are running, you need to specify a target instance when issuing adb commands. To so so, use the <code>-s</code> option in the commands. The usage for the <code>-s</code> option is:</p>
+
+    <pre>adb -s &lt;serialNumber&gt; &lt;command&gt; </pre>
+	
+<p>As shown, you specify the target instance for a command using its adb-assigned serial number. You can use the <code>devices</code> command to obtain the serial numbers of running emulator/device instances. </p>
+
+<p>Here is an example: </p>
+
+	<pre>adb -s emulator-5556 install helloWorld.apk</pre>
+
+<p>Note that, if you issue a command without specifying a target emulator/device instance using <code>-s</code>, adb generates an error. 
+
+<a name="move"></a>
+
+<h2>Installing an Application</h2>
+<p>You can use adb to copy an application from your development computer and install it on an emulator/device instance. To do so, use the <code>install</code> command. With the command, you must specify the path to the .apk file that you want to install:</p>
+
+<pre>adb install &lt;path_to_apk&gt;</pre>
+
+<p>For more information about how to create an .apk file that you can install on an emulator/device
+instance, see <a href="{@docRoot}tools/building/index.html">Building and Running</a></p>
+
+<p>Note that, if you are using the Eclipse IDE and have the ADT plugin installed, you do not need to use adb (or aapt) directly to install your application on the emulator/device. Instead, the ADT plugin handles the packaging and installation of the application for you. </p>
+
+
+<a name="forwardports"></a>
+
+<h2>Forwarding Ports</h2>
+
+    <p>You can use the <code>forward</code> command to set up arbitrary port forwarding &mdash; forwarding of requests on a specific host port to a different port on an emulator/device instance. Here's how you would set up forwarding of host port 6100 to emulator/device port 7100:</p>
+<pre>adb forward tcp:6100 tcp:7100</pre>
+    <p>You can also use adb to set up forwarding to named abstract UNIX domain sockets, as illustrated here:</p>
+<pre>adb forward tcp:6100 local:logd </pre>
+
+<a name="copyfiles"></a>
+
+<h2>Copying Files to or from an Emulator/Device Instance</h2>
+
+<p>You can use the adb commands <code>pull</code> and <code>push</code> to copy files to and from an emulator/device instance's data file. Unlike the <code>install</code> command, which only copies an .apk file to a specific location, the <code>pull</code> and <code>push</code> commands let you copy arbitrary directories and files to any location in an emulator/device instance. </p>
+
+<p>To copy a file or directory (recursively) <em>from</em> the emulator or device, use</p>
+<pre>adb pull &lt;remote&gt; &lt;local&gt;</pre> 
+
+<p>To copy a file or directory (recursively) <em>to</em> the emulator or device, use</p>
+    <pre>adb push &lt;local&gt; &lt;remote&gt;</pre> 
+
+<p>In the commands, <code>&lt;local&gt;</code> and <code>&lt;remote&gt;</code> refer to the paths to the target files/directory on your development machine (local) and on the emulator/device instance (remote).</p>
+
+<p>Here's an example: </p>
+<pre>adb push foo.txt /sdcard/foo.txt</pre>
+
+<a name="commandsummary"></a>
+
+<h2>Listing of adb Commands</h2>
+
+<p>The table below lists all of the supported adb commands and explains their meaning and usage. </p>
+
+
+<table>
+<tr>
+	<th>Category</th>
+	<th>Command</th>
+	<th>Description</th>
+	<th>Comments</th>
+</tr>
+
+<tr>
+<td rowspan="3">Options</td>
+<td><code>-d</code></td>
+<td>Direct an adb command to the only attached USB device.</td>
+<td>Returns an error if more than one USB device is attached.</td>
+</tr>
+
+<tr>
+<td><code>-e</code></td>
+<td>Direct an adb command to the only running emulator instance.</td>
+<td>Returns an error if more than one emulator instance is running. </td>
+</tr>
+
+<tr>
+<td><code>-s&nbsp;&lt;serialNumber&gt;</code></td>
+<td>Direct an adb command a specific emulator/device instance, referred to by its adb-assigned serial number (such as "emulator-5556").</td>
+<td>If not specified, adb generates an error.</td>
+</tr>
+
+<tr>
+<td rowspan="3">General</td>
+<td><code>devices</code></td>
+<td>Prints a list of all attached emulator/device instances.</td>
+<td>See <a href="#devicestatus">Querying for Emulator/Device Instances</a> for more information.</td>
+</tr>
+
+<tr>
+<td><code>help</code></td>
+<td>Prints a list of supported adb commands.</td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>version</code></td>
+<td>Prints the adb version number. </td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td rowspan="3">Debug</td>
+<td ><code>logcat&nbsp;[&lt;option&gt;] [&lt;filter-specs&gt;]</code></td>
+<td>Prints log data to the screen. </td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>bugreport</code></td>
+<td>Prints <code>dumpsys</code>, <code>dumpstate</code>, and <code>logcat</code> data to the screen, for the purposes of bug reporting. </td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>jdwp</code></td>
+<td>Prints a list of available JDWP processes on a given device. </td>
+<td>You can use the <code>forward jdwp:&lt;pid&gt;</code> port-forwarding specification to connect to a specific JDWP process. For example: <br>
+    <code>adb forward tcp:8000 jdwp:472</code><br>
+    <code>jdb -attach localhost:8000</code></p>
+ </td>
+</tr>
+
+<tr>
+<td rowspan=3">Data</td>
+<td><code>install&nbsp;&lt;path-to-apk&gt;</code></td>
+<td>Pushes an Android application (specified as a full path to an .apk file) to the data file of an emulator/device. </td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>pull&nbsp;&lt;remote&gt;&nbsp;&lt;local&gt;</code></td>
+<td>Copies a specified file from an emulator/device instance to your development computer. </td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>push&nbsp;&lt;local&gt;&nbsp;&lt;remote&gt;</code></td>
+<td>Copies a specified file from your development computer to an emulator/device instance. </td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td rowspan="2">Ports and Networking</td>
+<td><code>forward&nbsp;&lt;local&gt;&nbsp;&lt;remote&gt;</code></td>
+<td>Forwards socket connections from a specified local port to a specified remote port on the emulator/device instance. </td>
+<td>Port specifications can use these schemes: 
+<ul><li><code>tcp:&lt;portnum&gt;</code></li>
+<li><code>local:&lt;UNIX domain socket name&gt;</code></li>
+<li><code>dev:&lt;character device name&gt;</code></li>
+<li><code>jdwp:&lt;pid&gt;</code></li></ul>
+</td>
+</tr>
+
+<tr>
+<td><code>ppp&nbsp;&lt;tty&gt;&nbsp;[parm]...</code></td>
+<td>Run PPP over USB.
+<ul>
+<li><code>&lt;tty&gt;</code> &mdash; the tty for PPP stream. For example <code>dev:/dev/omap_csmi_ttyl</code>. </li>
+<li><code>[parm]... </code> &mdash; zero or more PPP/PPPD options, such as <code>defaultroute</code>, <code>local</code>, <code>notty</code>, etc.</li></ul>
+
+<p>Note that you should not automatically start a PPP connection. </p></td>
+<td></td>
+</tr>
+
+<tr>
+<td rowspan="3">Scripting</td>
+<td><code>get-serialno</code></td>
+<td>Prints the adb instance serial number string.</td>
+<td rowspan="2">See <a href="#devicestatus">Querying for Emulator/Device Instances</a> for more information. </td>
+</tr>
+
+<tr>
+<td><code>get-state</code></td>
+<td>Prints the adb state of an emulator/device instance.</td>
+</td>
+</tr>
+
+<tr>
+<td><code>wait-for-device</code></td>
+<td>Blocks execution until the device is online &mdash; that is, until the instance state is <code>device</code>.</td>
+<td>You can prepend this command to other adb commands, in which case adb will wait until the emulator/device instance is connected before issuing the other commands. Here's an example: 
+<pre>adb wait-for-device shell getprop</pre>
+
+Note that this command does <em>not</em> cause adb to wait until the entire system is fully booted. For that reason, you should not prepend it to other commands that require a fully booted system. As an example, the <code>install</code> requires the Android package manager, which is available only after the system is fully booted. A command such as 
+
+<pre>adb wait-for-device install &lt;app&gt;.apk</pre>
+
+would issue the <code>install</code> command as soon as the emulator or device instance connected to the adb server, but before the Android system was fully booted, so it would result in an error. </td>
+</tr>
+
+
+
+<tr>
+<td rowspan="2">Server</td>
+<td><code>start-server</code></td>
+<td>Checks whether the adb server process is running and starts it, if not.</td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>kill-server</code></td>
+<td>Terminates the adb server process.</td>
+<td>&nbsp;</td>
+</tr>
+
+
+
+<tr>
+<td rowspan="2">Shell</td>
+<td><code>shell</code></td>
+<td>Starts a remote shell in the target emulator/device instance.</td>
+<td rowspan="2">See <a href="#shellcommands">Issuing Shell Commands</a> for more information. </td>
+</tr>
+
+<tr>
+<td><code>shell&nbsp;[&lt;shellCommand&gt;]</code></td>
+<td>Issues a shell command in the target emulator/device instance and then exits the remote shell.</td>
+</tr>
+
+</table>
+
+
+<a name="shellcommands"></a>
+
+<h2>Issuing Shell Commands</h2>
+
+<p>Adb provides an ash shell that you can use to run a variety of commands on an emulator 
+or device. The command binaries are stored in the file system of the emulator or device, 
+in this location: </p>
+
+<pre>/system/bin/...</pre>
+
+<p>You can use the <code>shell</code> command to issue commands, with or without entering the adb remote shell on the emulator/device. </p>
+
+<p>To issue a single command without entering a remote shell, use the <code>shell</code> command like this: </p>
+
+	<pre>adb [-d|-e|-s {&lt;serialNumber&gt;}] shell &lt;shellCommand&gt;</pre>
+	
+<p>To drop into a remote shell on a emulator/device instance, use the <code>shell</code> command like this:</p>
+
+	<pre>adb [-d|-e|-s {&lt;serialNumber&gt;}] shell</pre>
+
+<p>When you are ready to exit the remote shell, use <code>CTRL+D</code> or <code>exit</code> to end the shell session. </p>
+
+<p>The sections below provide more information about shell commands that you can use.</p>
+      
+<a name="sqlite" id="sqlite"></a>
+
+<h3>Examining sqlite3 Databases from a Remote Shell</h3>
+
+<p>From an adb remote shell, you can use the 
+<a href="http://www.sqlite.org/sqlite.html">sqlite3</a> command-line program to 
+manage SQLite databases created by Android applications. The 
+<code>sqlite3</code> tool includes many useful commands, such as 
+<code>.dump</code> to print out the contents of a table and 
+<code>.schema</code> to print the SQL CREATE statement for an existing table. 
+The tool also gives you the ability to execute SQLite commands on the fly.</p>
+
+<p>To use <code>sqlite3</code>, enter a remote shell on the emulator instance, as described above, then invoke the tool using the <code>sqlite3</code> command. Optionally, when invoking <code>sqlite3</code> you can specify the full path to the database you want to explore. Emulator/device instances store SQLite3 databases in the folder <code><span chatdir="1"><span chatindex="259474B4B070F261">/data/data/<em>&lt;package_name&gt;</em>/databases</span></span>/</code>. </p>
+
+<p>Here's an example: </p>
+
+<pre>$ adb -s emulator-5554 shell
+# sqlite3 /data/data/com.example.google.rss.rssexample/databases/rssitems.db
+SQLite version 3.3.12
+Enter &quot;.help&quot; for instructions
+<em>.... enter commands, then quit...</em>
+sqlite&gt; .exit </pre>
+
+<p>Once you've invoked <code>sqlite3</code>, you can issue <code>sqlite3</code> commands in the shell. To exit and return to the adb remote shell, use <code>exit</code> or <code>CTRL+D</code>.
+
+
+<a name="monkey"></a>
+
+<h3>UI/Application Exerciser Monkey</h3>
+
+<p>The Monkey is a program that runs on your emulator or device and generates pseudo-random
+streams of user events such as clicks, touches, or gestures, as well as a number of system-level 
+events.  You can use the Monkey to stress-test applications that you are developing,
+in a random yet repeatable manner.</p>
+
+<p>The simplest way to use the monkey is with the following command, which will launch your
+application and send 500 pseudo-random events to it.</p>
+
+<pre>$ adb shell monkey -v -p your.package.name 500</pre>
+
+<p>For more information about command options for Monkey, see the complete 
+<a href="{@docRoot}tools/help/monkey.html" title="monkey">UI/Application Exerciser Monkey</a> documentation page.</p>
+
+
+<a name="othershellcommands"></a>
+
+<h3>Other Shell Commands</h3>
+
+<p>The table below lists several of the adb shell commands available. For a complete list of commands and programs, start an emulator instance and use the <code>adb -help</code> command. </p>
+
+<pre>adb shell ls /system/bin</pre>
+
+<p>Help is available for most of the commands. </p>
+
+<table>
+<tr>
+	<th>Shell Command</th>
+	<th>Description</th>
+	<th>Comments</th>
+</tr>
+
+<tr>
+<td><code>dumpsys</code></td>
+<td>Dumps system data to the screen.</td>
+<td rowspan=4">The <a href="{@docRoot}tools/debugging/ddms.html">Dalvik Debug Monitor Server</a> 
+(DDMS) tool offers integrated debug environment that you may find easier to use.</td>
+</tr>
+
+<tr>
+<td><code>dumpstate</code></td>
+<td>Dumps state to a file.</td>
+</tr>
+
+<tr>
+<td><code>logcat&nbsp;[&lt;option&gt;]...&nbsp;[&lt;filter-spec&gt;]...</code></td>
+<td>Enables radio logging and prints output to the screen. </td>
+</tr>
+
+<tr>
+<td><code>dmesg</code></td>
+<td>Prints kernel debugging messages to the screen. </td>
+</tr>
+
+<tr>
+<td><code>start</code></td>
+<td>Starts (restarts) an emulator/device instance.</td>
+<td>&nbsp;</td>
+</tr>
+
+<tr>
+<td><code>stop</code></td>
+<td>Stops execution of an emulator/device instance.</td>
+<td>&nbsp;</td>
+</tr>
+
+</table>
+
+<a name="logcat"></a>
+
+<h2>Enabling logcat Logging</h2>
+
+<p>The Android logging system provides a mechanism for collecting and viewing system debug output. Logs from various applications and portions of the system are collected in a series of circular buffers, which then can be viewed and filtered by the <code>logcat</code> command.</p>
+
+<a name="usinglogcat"></a>
+
+<h3>Using logcat Commands</h3>
+
+<p>You can use the <code>logcat</code> command to view and follow the contents of the system's log buffers. The general usage is:</p>
+
+<pre>[adb] logcat [&lt;option&gt;] ... [&lt;filter-spec&gt;] ...</pre>
+
+<p>The sections below explain filter specifications and the command options. See <a href="#logcatoptions">Listing of logcat Command Options</a> for a summary of options. </p>
+
+<p>You can use the <code>logcat</code> command from your development computer  or from a remote adb shell in an emulator/device instance. To view log output in your development computer, you use</p>
+
+<pre>$ adb logcat</pre>
+
+<p>and from a remote adb shell you use</p>
+
+<pre># logcat</pre>
+
+<a name="filteringoutput"></a>
+
+<h3>Filtering Log Output</h3>
+
+<p>Every Android log message has a <em>tag</em> and a <em>priority</em> associated with it. </p>
+
+<ul>
+<li>The tag of a log message is a short string indicating the system component from which the message originates (for example, "View" for the view system). </li>
+
+<li>The priority is one of the following character values, ordered from lowest to highest priority:</li>
+
+<ul>
+    <li><code>V</code> &mdash; Verbose (lowest priority)</li>
+	<li><code>D</code> &mdash; Debug</li>
+	<li><code>I</code> &mdash; Info (default priority)</li>
+	<li><code>W</code> &mdash; Warning</li>
+	<li><code>E</code> &mdash; Error</li>
+	<li><code>F</code> &mdash; Fatal</li>
+	<li><code>S</code> &mdash; Silent (highest priority, on which nothing is ever printed)</li>
+</ul>
+</ul>
+
+<p>You can obtain a list of tags used in the system, together with priorities, by running <code>logcat</code> and observing the first two columns 
+of each message, given as <code>&lt;priority&gt;/&lt;tag&gt;</code>. </p>
+
+<p>Here's an example of logcat output that shows that the message relates to priority level "I" and tag "ActivityManager":</p>
+
+<pre>I/ActivityManager(  585): Starting activity: Intent { action=android.intent.action...}</pre>
+
+<p>To reduce the log output to a manageable level, you can restrict log output using <em>filter expressions</em>. Filter expressions let you indicate to the system the tags-priority combinations that you are interested in &mdash; the system suppresses other messages for the specified tags. </p>
+
+<p>A filter expression follows this format <code>tag:priority ...</code>, where <code>tag</code> indicates the tag of interest and <code>priority</code> indicates the <em>minimum</em> level of priority to report for that tag.  Messages for that tag at or above the specified priority are written to the log. You can supply any number of <code>tag:priority</code> specifications in a single filter expression. The series of specifications is whitespace-delimited. The default output is to show all log messages with the Info priority (*:I).</p>
+
+<p>Here's an example of a filter expression that suppresses all log messages except those with the tag "ActivityManager", at priority "Info" or above, and all log messages with tag "MyApp", with priority "Debug" or above:</p>
+
+<pre>adb logcat ActivityManager:I MyApp:D *:S</pre>
+
+<p>The final element in the above expression, <code>*:S</code>, sets the priority level for all tags to "silent", thus ensuring only log messages with "View" and "MyApp" are displayed. Using <code>*:S</code> is an excellent way to ensure that log output is restricted to the filters that you have explicitly specified &mdash; it lets your filters serve as a "whitelist" for log output.</p>
+
+<p>The following filter expression displays all log messages with priority level "warning" and higher, on all tags:</p>
+
+<pre>adb logcat *:W</pre>
+
+<p>If you're running <code>logcat</code> from your development computer (versus running it on a remote adb shell), you can also set a default filter expression by exporting a value for the environment variable <code>ANDROID_LOG_TAGS</code>:</p>
+
+<pre>export ANDROID_LOG_TAGS="ActivityManager:I MyApp:D *:S"</pre>
+
+<p>Note that <code>ANDROID_LOG_TAGS</code> filter is not exported to the emulator/device instance, if you are running <code>logcat</code> from a remote shell or using <code>adb shell logcat</code>.</p>
+
+
+<a name="outputformat"></a>
+
+<h3>Controlling Log Output Format</h3>
+
+<p>Log messages contain a number of metadata fields, in addition to the tag and priority. You can modify the output format for messages so that they display a specific metadata field. To do so, you use the <code>-v</code> option and specify one of the supported output formats listed below. </p>
+
+<ul>
+    <li><code>brief</code> &mdash; Display priority/tag and the PID of process issuing the message (the default format).</li>
+	<li><code>process</code> &mdash; Display PID only.</li>
+	<li><code>tag</code> &mdash; Display the priority/tag only. </li>
+	<li><code>raw</code> &mdash; Display the raw log message, with no other metadata fields.</li>
+	<li><code>time</code> &mdash; Display the date, invocation time, priority/tag, and PID of the process issuing the message.</li>
+	<li><code>threadtime</code> &mdash; Display the date, invocation time, priority, tag, and the PID and TID of the thread issuing the message.</li>
+	<li><code>long</code> &mdash; Display all metadata fields and separate messages with a blank lines.</li>
+</ul>
+
+<p>When starting <code>logcat</code>, you can specify the output format you want by using the <code>-v</code> option:</p>
+
+<pre>[adb] logcat [-v &lt;format&gt;]</pre>
+
+<p>Here's an example that shows how to generate messages in <code>thread</code> output format: </p>
+
+<pre>adb logcat -v thread</pre>
+
+<p>Note that you can only specify one output format with the <code>-v</code> option. </p>
+
+<a name="alternativebuffers"></a>
+
+<h3>Viewing Alternative Log Buffers </h3>
+
+<p>The Android logging system keeps multiple circular buffers for log messages, and not all of the log messages are sent to the default circular buffer. To see additional log messages, you can start <code>logcat</code> with the <code>-b</code> option, to request viewing of an alternate circular buffer. You can view any of these alternate buffers: </p>
+
+<ul>
+<li><code>radio</code> &mdash; View the buffer that contains radio/telephony related messages.</li>
+<li><code>events</code> &mdash; View the buffer containing events-related messages.</li>
+<li><code>main</code> &mdash; View the main log buffer (default)</li>
+</ul>
+
+<p>The usage of the <code>-b</code> option is:</p>
+
+<pre>[adb] logcat [-b &lt;buffer&gt;]</pre>
+
+<p>Here's an example of how to view a log buffer containing radio and telephony messages: </p>
+
+<pre>adb logcat -b radio</b></pre>
+
+<a name="stdout"></a>
+
+<h3>Viewing stdout and stderr</h3>
+
+<p>By default, the Android system sends <code>stdout</code> and <code>stderr</code> (<code>System.out</code> and <code>System.err</code>) output to <code>/dev/null</code>. In
+processes that run the Dalvik VM, you can have the system write a copy of the output to the log file. In this case, the system writes the messages to the log using the log tags <code>stdout</code> and <code>stderr</code>, both with priority <code>I</code>. </p>
+
+<p>To route the output in this way, you stop a running emulator/device instance and then use the shell command <code>setprop</code> to enable the redirection of output. Here's how you do it: </p>
+
+<pre>$ adb shell stop
+$ adb shell setprop log.redirect-stdio true
+$ adb shell start</pre>
+
+<p>The system retains this setting until you terminate the emulator/device instance. To use the setting as a default on the emulator/device instance, you can add an entry to <code>/data/local.prop</code>
+on the device.</p>
+
+<a name="logcatoptions"></a>
+
+<h3>Listing of logcat Command Options</h3>
+
+<table>
+<tr>
+	<th>Option</th>
+	<th>Description</th>
+</tr>
+
+<tr>
+<td><code>-b&nbsp;&lt;buffer&gt;</code></td>
+<td>Loads an alternate log buffer for viewing, such as <code>event</code> or <code>radio</code>. The <code>main</code> buffer is used by default. See <a href="#alternativebuffers">Viewing Alternative Log Buffers</a>.</td>
+</tr>
+
+<tr>
+<td><code>-c</code></td>
+<td>Clears (flushes) the entire log and exits. </td>
+</tr>
+
+<tr>
+<td><code>-d</code></td>
+<td>Dumps the log to the screen and exits.</td>
+</tr>
+
+<tr>
+<td><code>-f&nbsp;&lt;filename&gt;</code></td>
+<td>Writes log message output to <code>&lt;filename&gt;</code>. The default is <code>stdout</code>.</td>
+</tr>
+
+<tr>
+<td><code>-g</code></td>
+<td>Prints the size of the specified log buffer and exits. </td>
+</tr>
+
+<tr>
+<td><code>-n&nbsp;&lt;count&gt;</code></td>
+<td>Sets the maximum number of rotated logs to <code>&lt;count&gt;</code>. The default value is 4.  Requires the <code>-r</code> option.  </td>
+</tr>
+
+<tr>
+<td><code>-r&nbsp;&lt;kbytes&gt;</code></td>
+<td>Rotates the log file every <code>&lt;kbytes&gt;</code> of output. The default value is 16.  Requires the <code>-f</code> option.  </td>
+</tr>
+
+<tr>
+<td><code>-s</code></td>
+<td>Sets the default filter spec to silent. </td>
+</tr>
+
+<tr>
+<td><code>-v&nbsp;&lt;format&gt;</code></td>
+<td>Sets the output format for log messages. The default is <code>brief</code> format. For a list of supported formats, see <a href="#outputformat">Controlling Log Output Format</a>.</td>
+</tr>
+
+</table>
+
+<a name="stopping"></a>
+
+<h2>Stopping the adb Server</h2>
+
+<p>In some cases, you might need to terminate the adb server process and then restart it. For example, if adb does not respond to a command, you can terminate the server and restart it and that may resolve the problem. </p>
+
+<p>To stop the adb server, use the <code>kill-server</code>. You can then restart the server by issuing any adb command. </p>
+
+
diff --git a/docs/html/tools/help/adt.jd b/docs/html/tools/help/adt.jd
new file mode 100644
index 0000000..cd5bc67
--- /dev/null
+++ b/docs/html/tools/help/adt.jd
@@ -0,0 +1,527 @@
+page.title=Android Developer Tools
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#tools">SDK Tools Integration</a></li>
+
+        <li><a href="#editors">Code Editors</a>
+          <ol>
+            <li><a href="#resource-linking">Resource linking enhancements</a></li>
+          </ol>
+        </li>
+
+        <li><a href="#graphical-editor">Graphical Layout Editor</a>
+          <ol>
+            <li><a href="#canvas">Canvas and outline view</a></li>
+            <li><a href="#palette">Palette</a></li>
+            <li><a href="#config-chooser">Configuration chooser</a></li>
+          </ol>
+        </li>
+
+        <li><a href="#refactoring">Layout Factoring Support</a></li>
+
+      </ol>
+
+      <h2>Related videos</h2>
+
+      <ol>
+        <li><a href="{@docRoot}videos/index.html#v=Oq05KqjXTvs">Android Developer Tools
+            Google I/O Session</a>
+        </li>
+      </ol>
+
+      <h2>See also</h2>
+
+      <ol>
+        <li><a href="http://tools.android.com/recent">Android Tools change blog</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>ADT (Android Developer Tools) is a plugin for Eclipse that provides a suite of
+  tools that are integrated with the Eclipse IDE. It offers you access to many features that help
+  you develop Android applications quickly. ADT
+  provides GUI access to many of the command line SDK tools as well as a UI design tool for rapid
+  prototyping, designing, and building of your application's user interface.</p>
+
+  <p>Because ADT is a plugin for Eclipse, you get the functionality of a well-established IDE,
+  along with Android-specific features that are bundled with ADT. The following
+  describes important features of Eclipse and ADT:</p>
+
+  <dl>
+    <dt><strong>Integrated Android project creation, building, packaging, installation, and
+    debugging</strong></dt>
+
+    <dd>ADT integrates many development workflow tasks into Eclipse, making it easy for you to
+    rapidly develop and test your Android applications.</dd>
+
+    <dt><strong>SDK Tools integration</strong></dt>
+
+    <dd>Many of the <a href="#tools">SDK tools</a> are integrated into Eclipse's menus,
+    perspectives, or as a part of background processes ran by ADT.</dd>
+
+    <dt><strong>Java programming language and XML editors</strong></dt>
+
+    <dd>The Java programming language editor contains common IDE features such as compile time
+    syntax checking, auto-completion, and integrated documentation for the Android framework APIs.
+    ADT also provides custom XML editors that let you
+    edit Android-specific XML files in a form-based UI. A graphical layout editor lets you design
+    user interfaces with a drag and drop interface.</dd>
+
+    <dt><strong>Integrated documentation for Android framework APIs</strong></dt>
+    <dd>You can access documentation by hovering over classes, methods, or variables.</dd>
+  </dl>
+
+  <p>You can find the most up-to-date and more detailed information about changes and new features
+on the <a  href="http://tools.android.com/recent">Recent Changes</a> page at the Android  Tools
+Project site.</p>
+
+  <h2 id="tools">SDK Tools Integration</h2>
+
+  <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Need help designing icons?</h2>
+  <p>The <a href="http://android-ui-utils.googlecode.com/hg/asset-studio/dist/index.html">Android
+      Asset Studio</a> is a web-based tool that lets you generate icons from existing images,
+    clipart, or text. It also generates the icons with different DPIs for different screen sizes and
+    types.</p>
+
+    </div>
+  </div>
+
+  <p>Many of the tools that you can start or run from the command line are integrated into ADT.
+  They include:</p>
+
+  <ul>
+    <li><a href="{@docRoot}tools/debugging/debugging-tracing.html">Traceview</a>:
+    Allows you to profile your program's execution
+    (<strong>Window &gt; Open Perspective &gt; Traceview</strong>). </li>
+
+    <li><a href="{@docRoot}tools/help/android.html">android</a>: Provides access to
+    the Android SDK Manager and AVD Manager. Other <code>android</code> features such as creating or
+    updating projects (application and library) are integrated throughout the Eclipse IDE. </li>
+
+    <li><a href="{@docRoot}tools/debugging/debugging-ui.html#HierarchyViewer">Hierarchy
+    Viewer</a>: Allows you to visualize your application's view hierarchy to find inefficiencies
+    (<strong>Window &gt; Open Perspective &gt; Hierarchy Viewer</strong>).</li>
+
+    <li><a href="{@docRoot}tools/debugging/debugging-ui.html#pixelperfect">Pixel
+    Perfect</a>: Allows you to closely examine your UI to help with designing and building.
+    (<strong>Window &gt; Open Perspective &gt; Pixel Perfect</strong>).</li>
+
+    <li><a href="{@docRoot}tools/debugging/ddms.html">DDMS</a>: Provides
+    debugging features including: screen capturing, thread and heap information, and logcat
+    (<strong>Window &gt; Open Perspective &gt; DDMS</strong>).</li>
+
+    <li><a href="{@docRoot}tools/help/adb.html">adb</a>: Provides access to
+      a device from your development system. Some features of
+    <code>adb</code> are integrated into ADT such as project installation (Eclipse run menu),
+    file transfer, device enumeration, and logcat (DDMS). You must access the more advanced
+    features of <code>adb</code>, such as shell commands, from the command line.</li>
+
+    <li><a href="{@docRoot}tools/help/proguard.html">ProGuard</a>: Allows code obfuscation,
+    shrinking, and optimization. ADT integrates ProGuard as part of the build, if you <a href=
+    "{@docRoot}tools/help/proguard.html#enabling">enable it</a>.</li>
+  </ul>
+
+<h2 id="editors">Code Editors</h2>
+
+  <p>In addition to Eclipse's standard editor features, ADT provides custom XML editors to help
+  you create and edit Android manifests, resources, menus, and layouts in a form-based or graphical
+  mode. Double-clicking on an XML file in Eclipse's package explorer opens the
+  appropriate XML editor.
+
+    <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Google I/O Session Video</h2>
+      <p>View the segment on the <a href=
+      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=30m50s">XML editors</a> for more
+      information.</p>
+    </div>
+  </div>
+
+  <p class="note"><strong>Note:</strong> You can edit Android-specific XML files (such as a layout
+or manifest) in both a graphical mode and also an XML markup mode. You can switch between
+these modes with the pair of tabs at the bottom of each custom XML editor.</p>
+
+  <p>In addition, some special file types that don't have custom editors, such as drawables, animations,
+  and color files offer editing enhancements such as XML tag completion.</p>
+
+<p>ADT provides the following custom, form-based XML editors:</p>
+
+  <dl>
+
+    <dt><strong>Graphical Layout Editor</strong></dt>
+
+    <dd>Edit and design your XML layout files with a drag and drop interface. The layout editor
+    renders your interface as well, offering you a preview as you design your layouts. This editor
+    is invoked when you open an XML file with a view declared (usually declared in
+    <code>res/layout</code>. For more information, see <a href="#graphical-editor">Graphical Layout
+    Editor</a>.</dd>
+
+    <dt><strong>Android Manifest Editor</strong></dt>
+
+    <dd>Edit Android manifests with a simple graphical interface. This editor is invoked
+    when you open an <code>AndroidManifest.xml</code> file.</dd>
+
+    <dt><strong>Menu Editor</strong></dt>
+
+    <dd>Edit menu groups and items with a simple graphical interface. This editor is
+    invoked when you open an XML file with a <code>&lt;menu&gt;</code> declared (usually located in
+    the <code>res/menu</code> folder).</dd>
+
+    <dt><strong>Resources Editor</strong></dt>
+
+    <dd>Edit resources with a simple graphical interface. This editor is invoked when
+    you open an XML file with a <code>&lt;resources&gt;</code> tag declared.</dd>
+
+    <dt><strong>XML Resources Editor</strong></dt>
+
+    <dd>Edit XML resources with a simple graphical interface. This editor is invoked
+    when you open an XML file.</dd>
+  </dl>
+
+
+  <h3 id="resource-linking">Resource linking enhancements</h3>
+  <p>In addition to the normal code editing features of Eclipse, ADT provides enhancements to the Android
+  development experience that allow you to quickly jump to declarations of various types of resources such
+  as strings or layout files. You can access these enhancements by holding down the control key and
+  clicking on the following items:
+
+      <ul>
+
+        <li>A resource identifier, such as <code>R.id.button1</code>, jumps
+        to the XML definition of the view.</li>
+
+        <li>A declaration in the <code>R.java</code> file, such as <code>public
+        static final int Button01=0x7f050000"</code>, jumps to the corresponding XML definition.</li>
+
+        <li>An activity or service definition in your manifest, such as
+        <code>&lt;activity android:name=".TestActivity"&gt;</code>, jumps to the corresponding Java class. You can
+        jump from an activity definition (or service definition) into the corresponding Java class.</li>
+
+        <li>You can jump to any value definition (e.g. <code>@string:foo</code>), regardless of
+which XML file
+        "foo" is defined in.</li>
+
+        <li>Any file-based declaration, such as <code>@layout/bar</code>, opens the file.</li>
+
+        <li>Non-XML resources, such as <code>@drawable/icon</code>, launches
+        Eclipse's default application for the given file type, which in this case is an
+        image.</li>
+
+        <li><code>@android</code> namespace resources opens the resources found in
+        the SDK install area.</li>
+
+        <li>Custom views in XML layouts, such as <code>&lt;foo.bar.MyView&gt;&lt;/foo.bar.MyView&gt;</code>,
+        or <code>&lt;view class="foo.bar.MyView"&gt;</code>) jump to the corresponding custom view classes.</li>
+
+        <li>An XML attribute such as <code>@android:string/ok</code> or <code>android.R.string.id</code> in Java code
+        opens the file that declares the strings. The XML tab opens when doing this, not
+        the form-based editor.</li>
+
+      </ul>
+
+  <h2 id="graphical-editor">Graphical Layout Editor</h2>
+
+  <p>ADT provides many features to allow you to design and build your application's user interface.
+  Many of these features are in the graphical layout editor, which you can access by opening one of
+  your application's XML layout files in Eclipse.
+  </p>
+
+  <p>The graphical layout editor is the main screen that you use to visually design and build your
+  UI. It is split up into the following parts:</p>
+
+  <dl>
+    <dt><strong>Canvas</strong></dt>
+
+    <dd>In the middle of the editor is the canvas. It provides the rendered view of your
+    layout and supports dragging and dropping of UI widgets
+    directly from the palette. You can select the platform version used to render the items in
+    the canvas. Each platform version has its own look and feel, which might be the similar to or
+    radically different from another platform version. The canvas renders the appropriate look
+    and feel for the currently selected platform version.
+    This platform version does not need to be the same as the version that your
+    application targets.
+
+    <p>The canvas also provides
+    context-sensitive actions in the layout actions bar, such as adjusting layout margins and
+orientation.
+    The layout actions bar displays available actions depending on the selected UI element in the
+    canvas.</p>
+    </dd>
+
+    <dt><strong>Outline</strong></dt>
+
+    <dd>On the right side of the editor is the outline view. It displays a hierarchical
+    view of your layout where you can do things such as reorder of views. The outline
+    view exposes similar functionality as the canvas but displays your layout in an ordered
+    list instead of a rendered preview.</dd>
+
+    <dt><strong>Palette</strong></dt>
+
+    <dd>On the left side of the editor is the palette. It provides a set of widgets that
+    you can drag onto the canvas. The palette shows rendered previews of the
+    widgets for easy lookup of desired UI widgets.</dd>
+
+    <dt><strong>Configuration Chooser</strong></dt>
+
+    <dd>At the top of the editor is the configuration chooser.
+    It provides options to change a layout's rendering mode or screen type.</dd>
+  </dl>
+
+  <img src="{@docRoot}images/layout_editor.png" alt="graphical layout editor screenshot"
+  height="500" id="layout-editor" name="layout-editor">
+
+  <p class="img-caption"><strong>Figure 1.</strong> Graphical layout editor</p>
+
+  <h3 id="canvas">Canvas and outline view</h3>
+
+  <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Google I/O Session Video</h2>
+
+      <p>View the segment on the <a href=
+      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=7m16s">canvas and outline view</a> and the
+      <a href="http://www.youtube.com/watch?v=Oq05KqjXTvs#t=11m43s">layout actions bar</a>
+      for more information.
+      </p>
+    </div>
+  </div>
+
+  <p>The canvas is the area where you can drag and drop UI widgets from the palette to design your
+  layout. The canvas offers a rendered preview of your layout depending on factors such as the
+  selected platform version, screen orientation, and currently selected theme that you specify in
+  the <a href="#configuration-chooser">configuration chooser</a>. You can also drag and drop
+  items into the outline view, which displays your layout in a hierarchical list. The outline view
+  exposes much of the same functionality as the canvas but offers another method of organization
+  that is beneficial for ordering and quickly selecting items. When you right-click a specific item
+  in the canvas or outline view, you can access a context-sensitive menu that lets you modify the
+  following attributes of the layout or view:</p>
+
+  <dl>
+    <dt><strong>View and layout properties</strong></dt>
+
+    <dd>
+      When you right-click a view or layout in the canvas or outline view, it brings up a
+      context-sensitive menu that lets you set things such as:
+
+      <ul>
+        <li>ID of the view or layout</li>
+
+        <li>Text of the view</li>
+
+        <li>Layout width</li>
+
+        <li>Layout height</li>
+
+        <li>Properties such as alpha or clickable</li>
+      </ul>
+    </dd>
+
+    <dt><strong>Animation preview and creation</strong></dt>
+
+    <dd>
+      If your layout or view is animated, you can preview the animation directly in the canvas
+      (when you select Android 3.0 or later as the platform version in the configuration chooser).
+      Right-click an item in the canvas and select <strong>Play Animation</strong>. If
+      animation is not associated with item, an option is available in the menu to create one.
+
+      <p>View the segment on the <a href=
+      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=28m30s">animation features</a> for more
+      information.</p>
+    </dd>
+
+    <dt><strong>Extract as Include</strong></dt>
+
+    <dd>You can extract parts of a current layout into its own layout file,
+    which you can then include in any layout with a single line of XML. See <a href=
+    "#extract-as-include">Layout Refactoring Support</a> for more information.</dd>
+  </dl>
+
+  <h4>Other canvas features</h4>
+
+  <p>The canvas has additional features not available in the outline view:</p>
+
+  <ul>
+
+    <li>Edit views with the layout actions bar: The context-sensitive layout actions bar allows you to
+    edit how a view is laid out in your UI. The available actions depend on the currently
+    selected view and its parent layout. Some common actions include
+    toggling the fill mode of the view and specifying margins. For instance, if you select a
+    {@link android.widget.Button}
+    in a {@link android.widget.LinearLayout}, you see actions related to the {@link
+android.widget.LinearLayout}, such as a toggle to switch
+    between horizontal and vertical layout, and a toggle to control whether its children are
+    aligned along their text baseline. You will also see toolbar actions to control the individual
+    layout attributes of the child, such as whether the child should stretch out to match its
+    parent's width and height, a dropdown action to set the child's layout gravity, a button to open
+    a margin editor, and a layout weight editor.</li>
+
+    <li>Edit a nested layout in its current context: If you are editing a layout
+    that includes another layout, you can edit the included layout in the layout that included
+    it.</li>
+
+    <li>Preview drag and drop location: When you drag and drop a UI widget onto the canvas, ruler
+    markers appear showing you the approximate location of the UI widget depending on the
+    type of layout, such as {@link android.widget.RelativeLayout} or {@link
+    android.widget.LinearLayout}.</li>
+
+    <li>Preview animations: You can preview view and layout animations when you select Android 2.1
+    or later for the platform version in the configuration bar.</li>
+
+    <li>Render layouts in real-time: Layouts are rendered as accurately as possible according to
+    the platform version, including the appropriate system and action bars.</li>
+
+    <li>Support for fragments: Fragments can be rendered in the same screen as the layout that
+    includes the fragments.</li>
+
+  </ul>
+
+  <img src="{@docRoot}images/canvas.png" alt="screenshot of the canvas" height="553">
+
+  <p class="img-caption"><strong>Figure 2.</strong> Canvas portion of the layout editor showing
+  a rendered preview of an application</p>
+
+  <img src=
+  "{@docRoot}images/layout_outline.png" alt="screenshot of the outline view" height="185">
+
+  <p class="img-caption"><strong>Figure 3.</strong> Outline view showing current layout's structure</p>
+
+  <h3 id="palette">Palette</h3>
+
+  <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Google I/O Session Video</h2>
+
+      <p>View the segment on the <a href=
+      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=7m53s">palette</a> for more information.</p>
+    </div>
+  </div>
+
+  <p>The palette contains the UI widgets that you can drag and drop onto the canvas and add to your
+  layout. The pallete categorizes the widgets and shows rendered previews
+  for easier lookup. The main features of the palette include:</p>
+
+  <ul>
+    <li>Different modes of rendered previews include: icons only, icons and text, tiny previews,
+    small previews, and previews (rendered in real size). Previews are only available for layouts
+    rendered with the latest revisions of Android 2.1 (API Level 7) or later.</li>
+
+    <li>Custom views in your project or library projects are added under custom views
+    category.</li>
+
+    <li>Arrange UI widgets alphabetically or by category.</li>
+  </ul>
+  <img src="{@docRoot}images/palette.png" alt="palette screenshot" height="566">
+
+  <p class="img-caption"><strong>Figure 4.</strong> Palette showing available UI widgets</p>
+
+  <h3 id="config-chooser">Configuration chooser</h3>
+
+  <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Google I/O Session Video</h2>
+
+      <p>View the segment on the <a href=
+      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=12m51s">configuration chooser</a> for more
+      information.</p>
+    </div>
+  </div>
+
+
+  <p>The configuration chooser allows you to create and configure different configurations of
+  a layout for different situations, such as one for landscape and one for portrait mode. You can
+  set the following options for each configuration of a layout:
+  </p>
+      <ul>
+        <li>Screen type combo box: Predefined screen settings for common device configurations. You
+        can also create your own by selecting <strong>Custom...</strong>.</li>
+
+        <li>Screen orientation combo box: Portrait or Landscape screen orientation.</li>
+
+        <li>Theme combo box: Predefined themes or a custom theme that you have created.</li>
+
+        <li>Platform combo box: Platform version used to render the canvas and palette as well as
+        displaying appropriate themes.</li>
+
+        <li>Custom layout combo boxes: The locale, dock, and time of day combo boxes let you select
+        different versions of the same layout depending on the device's current state. You can
+        create a new version of a layout with the <strong>Create</strong> button.</li>
+      </ul>
+
+      <img src="{@docRoot}images/layout_bar.png" alt=
+  "configuration chooser screenshot" height="50" id="configuration-chooser" name="configuration chooser">
+
+  <p class="img-caption"><strong>Figure 5.</strong> Configuration chooser</p>
+
+  <h2 id="refactoring">Layout Refactoring Support</h2>
+
+  <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Google I/O Session Video</h2>
+
+      <p>View the segment on <a href=
+      "http://www.youtube.com/watch?v=Oq05KqjXTvs#t=18m00s">refactoring features</a> for a rundown
+of the more important refactoring features.</p>
+
+    </div>
+  </div>
+
+  <p>In both the graphical and XML layout editor, there are many features that help you quickly
+  refactor your layouts. The following list describes the major refactoring support:</p>
+
+  <dl>
+
+    <dt><strong>Change layout</strong></dt>
+    <dd>This lets you change the layout on the fly and re-renders the canvas for you.
+    You can apply this refactoring to any layout and the layout is converted to the new type if
+    possible. In many cases, the opening and closing tags of the layout's XML element are changed
+    along with things such as ID attributes and their references. However, for some supported
+    types, ADT attempts to preserve the layout, such as changing a {@link
+    android.widget.LinearLayout} to a {@link android.widget.RelativeLayout}.</dd>
+
+    <dt><strong>Change widget</strong></dt>
+    <dd>This lets you select one or more widgets and converts them to a new widget type. In
+    addition to changing the element name, it also removes any
+    attributes that are not supported by the new widget type and adds in any mandatory attributes
+    required by the new widget type. If the current ID of a widget includes the
+    current widget type in its ID (such as a <code>&lt;Button&gt;</code> widget named
+    <code>"button1"</code>), then the ID is changed to match the new widget type and all
+    references are updated.</dd>
+
+    <dt id="extract-as-include"><strong>Extract as include</strong></dt>
+    <dd>This lets you extract views inside of an existing layout into their own separate layout
+    file. An <code>include</code> tag that points to the newly created layout file is inserted
+    into the existing layout file. Right-click the view or layout and select <strong>Extract as
+    Include...</strong>.</dd>
+
+    <dt><strong>Extract string</strong></dt>
+    <dd>Extract strings from either XML or Java files into their own separate resource file.</dd>
+
+    <dt><strong>Extract style</strong></dt>
+    <dd>Extract style-related attributes from a layout and define them in a new
+    <code>styles.xml</code> file. You can select multiple views and this refactoring extracts all
+    of the same styles into one style and assigns that style to all the views that use it.</dd>
+
+    <dt><strong>Wrap-in container</strong></dt>
+    <dd>This lets you select one or more sibling elements and wrap them in a new container. This
+    can be applied to the root element as well, in which case the namespace declaration attributes
+    will be transferred to the new root. This refactoring also transfers <code>layout_</code>
+    attribute references to the new root, For example, suppose you have a {@link android.widget.RelativeLayout}.
+    If other widgets have layout constraints pointing to your widget, wrapping the widget causes
+    these constraints to point to the parent instead.</dd>
+
+    <dt><strong>Quick Assistant</strong></dt>
+    <dd>Provides refactoring suggestions depending on the current context. Press
+    <strong>Ctrl-1</strong> (or <strong>Cmd-1</strong> on
+    Mac) in an editor, and Eclipse provides a list of possible refactorings depending on the
+    context. The Quick Assistant provides fast access to all of the above refactorings, where applicable.
+    For example, if you are editing an XML value and decide you want to extract it out
+    as a string, place the text cursor in the string and press Ctrl-1 to see the refactoring context
+    menu.</dd>
+  </dl>
diff --git a/docs/html/tools/help/android.jd b/docs/html/tools/help/android.jd
new file mode 100644
index 0000000..282c791
--- /dev/null
+++ b/docs/html/tools/help/android.jd
@@ -0,0 +1,393 @@
+page.title=android
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<p>{@code android} is an important development tool that lets you:</p>
+
+  <ul>
+    <li>Create, delete, and view Android Virtual Devices (AVDs). See <a href= 
+    "{@docRoot}tools/devices/managing-avds-cmdline.html">Managing AVDs from the Command
+Line</a>.</li>
+
+    <li>Create and update Android projects. See <a href= 
+    "{@docRoot}tools/projects/projects-cmdline.html">Managing Projects from
+    the Command Line</a>.</li>
+
+    <li>Update your Android SDK with new platforms, add-ons, and documentation. See <a href= 
+    "{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</li>
+  </ul>If you are using Eclipse, the <code>android</code> tool's features are integrated
+  into ADT, so you should not need to use this tool directly.
+  
+  <p class="note"><strong>Note:</strong> The documentation of options below is not exhaustive
+and may be out of date. For the most current list of options, execute <code>android
+--help</code>.</p>
+  
+  
+  
+
+  <h2>Syntax</h2>
+  <pre>android [global options] action [action options]</pre>
+
+  <h3>Global Options</h3>
+
+  <dl>
+    <dt><code>-s</code></dt>
+
+    <dd>Silent mode: only errors are printed out</dd>
+
+    <dt><code>-h</code></dt>
+
+    <dd>Usage help</dd>
+
+    <dt><code>-v</code></dt>
+
+    <dd>Verbose mode: errors, warnings and informational messages are printed.</dd>
+  </dl>
+
+  <h3>AVD actions and options</h3>
+
+  <table>
+    <tr>
+      <th width="15%">Action</th>
+
+      <th width="20%">Option</th>
+
+      <th width="30%">Description</th>
+
+      <th>Comments</th>
+    </tr>
+
+    <tr>
+      <td><code>avd</code></td>
+
+      <td>None</td>
+
+      <td>Launch the AVD Manager</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>sdk</code></td>
+
+      <td>None</td>
+
+      <td>Launch the Android SDK Manager</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td rowspan="6"><code>create avd</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name for the AVD.</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-t &lt;targetID&gt;</code></td>
+
+      <td>Target ID of the system image to use with the new AVD. To obtain a list of available
+      targets, use <code>android list targets</code></td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-c &lt;path&gt;|&lt;size&gt;[K|M]</code></td>
+
+      <td>The path to the SD card image to use with this AVD or the size of a new SD card image to
+      create for this AVD. For example, <code>-c path/to/sdcard</code> or <code>-c
+      1000M</code>.</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-f</code></td>
+
+      <td>Force creation of the AVD</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Path to the location at which to create the directory for this AVD's files.</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-s &lt;name&gt;|&lt;width&gt;-&lt;height&gt;</code></td>
+
+      <td>The skin to use for this AVD, identified by name or dimensions. The <code>android</code>
+      tool scans for a matching skin by name or dimension in the <code>skins/</code> directory of
+      the target referenced in the <code>-t &lt;targetID&gt;</code> argument. For example, <code>-s
+      HVGA-L</code></td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>delete avd</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name of the AVD to delete</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td rowspan="3"><code>move avd</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name of the AVD to move</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Path to the location at which to create the directory for this AVD's files.</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-r &lt;new-name&gt;</code></td>
+
+      <td>New name of the AVD if you want to rename it</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>update avd</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name of the AVD to move</td>
+
+      <td>Required</td>
+    </tr>
+  </table>
+
+  <h3>Project actions and options</h3>
+
+  <table>
+    <tr>
+      <th width="15%">Action</th>
+
+      <th width="20%">Option</th>
+
+      <th width="30%">Description</th>
+
+      <th>Comments</th>
+    </tr>
+
+    <tr>
+      <td rowspan="5"><code>create project</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name for the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-t &lt;targetID&gt;</code></td>
+
+      <td>Target ID of the system image to use with the new AVD. To obtain a list of available
+      targets, use <code>android list targets</code></td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-k &lt;path&gt;|&lt;size&gt;[K|M]</code></td>
+
+      <td>Package namespace</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-a</code></td>
+
+      <td>Name for the default Activity class</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Location of your project directory</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td rowspan="5"><code>update project</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name of the project to update</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Location path of the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-l &lt;library path&gt;</code></td>
+
+      <td>Location path of an Android Library to add, relative to the main project</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-s &lt;subprojects&gt;</code></td>
+
+      <td>Update any projects in subfolders such as test projects</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-t &lt;targetID&gt;</code></td>
+
+      <td>Target id to set for the project</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td rowspan="3"><code>create-test-project</code></td>
+
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name of the project</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Location path of the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-m &lt;main&gt;</code></td>
+
+      <td>The name of the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td rowspan="2"><code>update-test-project</code></td>
+
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Location path of the project to test, relative to the new project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-m &lt;main&gt;</code></td>
+
+      <td>The main class of the project to test</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td rowspan="4"><code>create-lib-project</code></td>
+
+      <td><code>-k &lt;packageName&gt;</code></td>
+
+      <td>(Required) Package name of the library project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Location path of the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-t &lt;targetID&gt;</code></td>
+
+      <td>Target ID of the library project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-n &lt;name&gt;</code></td>
+
+      <td>The name of the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td rowspan="3"><code>update-lib-project</code></td>
+
+      <td><code>-p &lt;path&gt;</code></td>
+
+      <td>Location path of the project</td>
+
+      <td>Required</td>
+    </tr>
+
+    <tr>
+      <td><code>-l &lt;libraryPath&gt;</code></td>
+
+      <td>Location path of an Android Library to add, relative to the main project</td>
+
+      <td></td>
+    </tr>
+
+    <tr>
+      <td><code>-t &lt;name&gt;</code></td>
+
+      <td>Target ID of the library project</td>
+
+      <td></td>
+    </tr>
+  </table>
+
+  <h3>Update actions</h3>
+  <dl>
+  <dt><code>update adb</code></dt>
+  <dd>Updates adb to support the USB devices declared in the SDK add-ons.</dd>
+   
+  <dt><code>update sdk</code></dt>
+  <dd>Updates the SDK by suggesting new platforms to install if available.</dd>
diff --git a/docs/html/tools/help/bmgr.jd b/docs/html/tools/help/bmgr.jd
new file mode 100644
index 0000000..2248fa6
--- /dev/null
+++ b/docs/html/tools/help/bmgr.jd
@@ -0,0 +1,193 @@
+page.title=bmgr
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<!-- quickview box content here -->
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>bmgr quickview</h2>
+<p><code>bmgr</code> lets you control the backup/restore system on an Android device.
+
+  <h2>In this document</h2>
+  <ol>
+<li><a href="#backup">Forcing a Backup Operation</a></li>
+<li><a href="#restore">Forcing a Restore Operation</a></li>
+<li><a href="#other">Other Commands</a></li>
+  </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}guide/topics/data/backup.html">Data Backup</a></li>
+  </ol>
+
+</div>
+</div>
+
+<!-- normal page content here -->
+
+<p><code>bmgr</code> is a shell tool you can use to interact with the Backup Manager
+on Android devices supporting API Level 8 or greater.  It provides commands to induce backup
+and restore operations so that you don't need to repeatedly wipe data or take similar
+intrusive steps in order to test your application's backup agent.  These commands are
+accessed via the <a href="{@docRoot}tools/help/adb.html">adb</a> shell.
+
+<p>For information about adding support for backup in your application, read <a
+href="{@docRoot}guide/topics/data/backup.html">Data Backup</a>, which includes a guide to testing
+your application using {@code bmgr}.</p>
+
+
+<h2 id="backup">Forcing a Backup Operation</h2>
+
+<p>Normally, your application must notify the Backup Manager when its data has changed, via {@link
+android.app.backup.BackupManager#dataChanged()}. The Backup Manager will then invoke your
+backup agent's {@link
+android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor,BackupDataOutput,ParcelFileDescriptor)
+onBackup()} implementation at some time in the future. However, instead of calling {@link
+android.app.backup.BackupManager#dataChanged()}, you can invoke a backup request from the command
+line by running the <code>bmgr backup</code> command:
+
+    <pre class="no-pretty-print">adb shell bmgr backup <em>&lt;package&gt;</em></pre>
+
+<p><code><em>&lt;package&gt;</em></code> is the formal package name of the application you wish to
+schedule for
+backup. When you execute this backup command, your application's backup agent will be invoked to
+perform a backup operation at some time in the future (via your {@link
+android.app.backup.BackupAgent#onBackup(ParcelFileDescriptor,BackupDataOutput,ParcelFileDescriptor)
+onBackup()} method), though there is no guarantee when it will occur. However, you can force all
+pending backup operations to run immediately by using the <code>bmgr run</code> command:
+
+    <pre class="no-pretty-print">adb shell bmgr run</pre>
+
+<p>This causes a backup pass to execute immediately, invoking the backup agents of all applications
+that had previously called {@link android.app.backup.BackupManager#dataChanged()} since the
+last backup operation, plus any applications which had been manually scheduled for
+backup via <code>bmgr backup</code>.
+
+
+
+<h2 id="restore">Forcing a Restore Operation</h2>
+
+<p>Unlike backup operations, which are batched together and run on an occasional basis, restore
+operations execute immediately.  The Backup Manager currently provides two kinds of restore
+operations.  The first kind restores an entire device with the data that has been backed up.  This
+is typically performed only when a device is first provisioned (to replicate settings and other
+saved state from the user's previous device) and is an operation that only the system can
+perform. The second kind of restore operation restores
+a single application to its "active" data set; that is, the application will abandon its current
+data and revert to the last-known-good data that is held in the current backup image. You can
+invoke this second restore operation with the {@link
+android.app.backup.BackupManager#requestRestore(RestoreObserver) requestRestore()} method. The
+Backup Manager will then invoke your backup agent's {@link
+android.app.backup.BackupAgent#onRestore(BackupDataInput,int,ParcelFileDescriptor)
+onRestore()} implementation.
+
+<p>While testing your application, you can immediately invoke the restore operation (bypassing the
+{@link android.app.backup.BackupManager#requestRestore(RestoreObserver) requestRestore()} method)
+for your application by using the <code>bmgr restore</code> command:
+
+    <pre class="no-pretty-print">adb shell bmgr restore <em>&lt;package&gt;</em></pre>
+
+<p><code><em>&lt;package&gt;</em></code> is the formal Java-style package name of the application
+participating in the backup/restore mechanism, which you would like to restore. The Backup
+Manager will immediately instantiate the application's backup agent and invoke it for restore. This
+will happen even if your application is not currently running.
+
+
+
+
+
+<h2 id="other">Other Commands</h2>
+
+<h3>Wiping data</h3>
+
+<p>The data for a single application can be erased from the active data set on demand.  This is
+very useful while you're developing a backup agent, in case bugs lead you to write corrupt data
+or saved state information. You can wipe an application's data with the <code>bmgr wipe</code>
+command:
+
+    <pre class="no-pretty-print">adb shell bmgr wipe <em>&lt;package&gt;</em></pre>
+
+<p><code><em>&lt;package&gt;</em></code> is the formal package name of the application whose data
+you wish to
+erase.  The next backup operation that the application's agent processes will look as
+though the application had never backed anything up before.
+
+
+<h3>Enabling and disabling backup</h3>
+
+<p>You can see whether the Backup Manager is operational at all with the <code>bmgr
+enabled</code> command:
+
+    <pre class="no-pretty-print">adb shell bmgr enabled</pre>
+
+<p>This might be useful if your application's backup agent is never being invoked for backup, to
+verify whether the operating system thinks it should be performing such operations at all.</p>
+
+<p>You can also directly disable or enable the Backup Manager with this command:
+
+    <pre class="no-pretty-print">adb shell bmgr enable <em>&lt;boolean&gt;</em></pre>
+
+<p><code><em>&lt;boolean&gt;</em></code> is either <code>true</code> or <code>false</code>.
+This is equivalent to disabling or enabling backup in the device's main Settings UI.</p>
+
+<p class="warning"><strong>Warning!</strong>  When backup is disabled, the current backup transport
+will explicitly wipe
+the entire active data set from its backend storage.  This is so that when a user says
+they do <em>not</em> want their data backed up, the Backup Manager respects that wish.  No further
+data will be saved from the device, and no restore operations will be possible, unless the Backup
+Manager is re-enabled (either through Settings or through the above <code>bmgr</code> command).
+
+
+
+
+<!-- The following is not useful to applications, but may be some useful information some day...
+
+
+<h2 id="transports">Applying a Backup Transport</h2>
+
+<p>A "backup transport" is the code module responsible for moving backup and restore data
+to and from some storage location.  A device can have multipe transports installed, though only
+one is active at any given time.  Transports are identified by name.  You can see what
+transports are available on your device or emulator by running the
+<code>bmgr list transports</code> command:
+
+    <pre class="no-pretty-print">adb shell bmgr list transports</pre>
+
+<p>The output of this command is a list of the transports available on the device.  The currently
+active transport is flagged with a <code>*</code> character.  Transport names may look like
+component names (for example, <code>android/com.android.internal.backup.LocalTransport</code>),
+but they need not be, and the strings are never used as direct class references.  The use of
+a component-like naming scheme is simply for purposes of preventing name collisions.
+
+<p>You can change which transport is currently active from the command line as well:
+
+    <pre class="no-pretty-print">adb shell bmgr transport <em>&lt;name&gt;</em></pre>
+
+<p><code><em>&lt;name&gt;</em></code> is one of the names as printed by the <code>bmgr list
+transports</code>
+command.  From this point forward, backup and restore operations will be directed through the
+newly-selected transport.  Backup state tracking is managed separately for each transport, so
+switching back and forth between them will not corrupt the saved state.
+
+
+
+
+<h2 id="restoresets">Viewing Restore Sets</h2>
+
+<p>All of the application data that a device has written to its backup transport is tracked
+as a group that is collectively called a "restore set," because each data set is
+most often manipulated during a restore operation. When a device is provisioned for the first
+time, a new restore set is established.  You can get a listing of all the restore sets available to
+the current transport by running the <code>bmgr list sets</code> command:
+
+    <pre class="no-pretty-print">adb shell bmgr list sets</pre>
+
+<p>The output is a listing of available restore sets, one per line.  The first item on each line is
+a token (a hexadecimal value that identifies the restore set to the transport).  Following
+the token is a string that briefly identifies the restore set.
+Only the token is used within the backup and restore mechanism.
+
+
+-->
diff --git a/docs/html/tools/help/ddms.html b/docs/html/tools/help/ddms.html
new file mode 100644
index 0000000..d885d56
--- /dev/null
+++ b/docs/html/tools/help/ddms.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/debugging/ddms.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/debugging/ddms.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/help/dmtracedump.jd b/docs/html/tools/help/dmtracedump.jd
new file mode 100644
index 0000000..bdc820d
--- /dev/null
+++ b/docs/html/tools/help/dmtracedump.jd
@@ -0,0 +1,66 @@
+page.title=dmtracedump
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+
+ <p><code>dmtracedump</code> is a tool that gives you an alternate way of generating
+  graphical call-stack diagrams from trace log files (instead of using Traceview).</p>
+  
+  <p>This document is a reference to the available command line options. For more information on generating trace
+  logs, see <a href="{@docRoot}tools/debugging/debugging-tracing.html">Profiling with
+  Traceview and dmtracedump</a>.</p>
+
+  <p>The usage for <code>dmtracedump</code> is:</p>
+  <pre>
+dmtracedump [-ho] [-s sortable] [-d trace-base-name] [-g outfile] &lt;trace-base-name&gt;
+</pre>
+
+  <p>The tool then loads trace log data from <code>&lt;trace-base-name&gt;.data</code> and
+  &lt;trace-base-name&gt;.key. The table below lists the options for dmtracedump.</p>
+
+  <table>
+    <tr>
+      <th>Option</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td><nobr><code>-d&nbsp;<em>&lt;trace-base-name&gt;</em></code></nobr></td>
+
+      <td>Diff with this trace name</td>
+    </tr>
+
+    <tr>
+      <td><code>-g&nbsp;<em>&lt;outfile&gt;</em></code></td>
+
+      <td>Generate output to &lt;outfile&gt;</td>
+    </tr>
+
+    <tr>
+      <td><code>-h</code></td>
+
+      <td>Turn on HTML output</td>
+    </tr>
+
+    <tr>
+      <td><code>-o</code></td>
+
+      <td>Dump the trace file instead of profiling</td>
+    </tr>
+
+    <tr>
+      <td><code>-d&nbsp;<em>&lt;trace-base-name&gt;</em></code></td>
+
+      <td>URL base to the location of the sortable javascript file</td>
+    </tr>
+
+    <tr>
+      <td><code>-t&nbsp;&lt;percent&gt;</code></td>
+
+      <td>Minimum threshold for including child nodes in the graph (child's inclusive time as a
+      percentage of parent inclusive time). If this option is not used, the default threshold is
+      20%.</td>
+    </tr>
+  </table>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/draw9patch.jd b/docs/html/tools/help/draw9patch.jd
similarity index 100%
rename from docs/html/guide/developing/tools/draw9patch.jd
rename to docs/html/tools/help/draw9patch.jd
diff --git a/docs/html/tools/help/emulator.jd b/docs/html/tools/help/emulator.jd
new file mode 100644
index 0000000..fa101e1
--- /dev/null
+++ b/docs/html/tools/help/emulator.jd
@@ -0,0 +1,581 @@
+page.title=Android Emulator
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#KeyMapping">Keyboard Commands</a></li>
+    <li><a href="#startup-options">Command Line Parameters</a></li>
+  </ol>
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/devices/emulator.html">Using the Android Emulator</a></li>
+    <li><a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a></li>
+  </ol>
+
+</div>
+</div>
+
+
+<p>The Android SDK includes a mobile device emulator &mdash; a virtual mobile device
+that runs on your computer. The emulator lets you develop and test
+Android applications without using a physical device.</p>
+
+<p>This document is a reference to the available command line options and the keyboard mapping to
+device keys.
+For a complete guide to using the Android Emulator, see
+<a href="{@docRoot}tools/devices/emulator.html">Using the Android Emulator</a>.
+
+
+<h2 id="KeyMapping">Keyboard Commands</h2>
+
+<p>Table 1 summarizes the mappings between the emulator keys and the keys of your keyboard.</p>
+
+<p class="table-caption"><strong>Table 1.</strong> Emulator keyboard mapping</p>
+<table  border="0" style="clear:left;">
+  <tr>
+    <th>Emulated Device Key </th>
+    <th>Keyboard Key </th>
+  </tr>
+  <tr>
+    <td>Home</td>
+    <td>HOME</td>
+  </tr>
+  <tr>
+    <td>Menu (left softkey)</td>
+    <td>F2 <em>or</em> Page-up button</td>
+  </tr>
+  <tr>
+    <td>Star (right softkey)</td>
+    <td>Shift-F2 <em>or </em>Page Down</td>
+  </tr>
+  <tr>
+    <td>Back</td>
+    <td>ESC</td>
+  </tr>
+  <tr>
+    <td>Call/dial button </td>
+    <td>F3</td>
+  </tr>
+  <tr>
+    <td>Hangup/end call button</td>
+    <td>F4</td>
+  </tr>
+  <tr>
+    <td>Search</td>
+    <td>F5 </td>
+  </tr>
+  <tr>
+    <td>Power button</td>
+    <td>F7 </td>
+  </tr>
+  <tr>
+    <td>Audio volume up button</td>
+    <td>KEYPAD_PLUS, Ctrl-F5</td>
+  </tr>
+
+  <tr>
+    <td>Audio volume down button</td>
+    <td>KEYPAD_MINUS, Ctrl-F6</td>
+  </tr>
+  <tr>
+    <td>Camera button</td>
+    <td>Ctrl-KEYPAD_5, Ctrl-F3</td>
+  </tr>
+  <tr>
+    <td>Switch to previous layout orientation (for example, portrait, landscape)</td>
+    <td>KEYPAD_7, Ctrl-F11</td>
+  </tr>
+  <tr>
+    <td>Switch to next layout orientation (for example, portrait, landscape)</td>
+    <td>KEYPAD_9, Ctrl-F12</td>
+  </tr>
+  <tr>
+    <td>Toggle cell networking on/off</td>
+    <td>F8</td>
+  </tr>
+  <tr>
+    <td>Toggle code profiling</td>
+    <td>F9 (only with <code>-trace</code> startup option)</td>
+  </tr>
+  <tr>
+    <td>Toggle fullscreen mode</td>
+    <td>Alt-Enter</td>
+  </tr>
+  <tr>
+    <td>Toggle trackball mode</td>
+    <td>F6</td>
+  </tr>
+  <tr>
+    <td>Enter trackball mode temporarily (while key is pressed)</td>
+    <td>Delete</td>
+  </tr>
+  <tr>
+    <td>DPad left/up/right/down</td>
+    <td>KEYPAD_4/8/6/2</td>
+  </tr>
+  <tr>
+    <td>DPad center click</td>
+    <td>KEYPAD_5</td>
+  </tr>
+  <tr>
+    <td>Onion alpha increase/decrease</td>
+    <td>KEYPAD_MULTIPLY(*) / KEYPAD_DIVIDE(/)</td>
+  </tr>
+</table>
+
+
+<h2 id="startup-options">Command Line Parameters</h2>
+
+<p>The emulator supports a variety of options that you can specify
+when launching the emulator, to control its appearance or behavior.
+Here's the command-line syntax of the options available to the {@code emulator} program:</p>
+
+<pre>emulator -avd &lt;avd_name&gt; [-&lt;option&gt; [&lt;value&gt;]] ... [-&lt;qemu args&gt;]</pre>
+
+<p class="table-caption"><strong>Table 2.</strong> Emulator command line parameters</p>
+<table>
+<tr>
+  <th width="10%" >Category</th>
+  <th width="20%" >Option</th>
+    <th width="30%" >Description</th>
+    <th width="40%" >Comments</th>
+</tr>
+
+<tr>
+  <td>AVD</td>
+  <td><code>-avd &lt;avd_name&gt;</code> or <br>
+      <code>@&lt;avd_name&gt;</code></td>
+  <td><strong>Required</strong>. Specifies the AVD to load for this emulator
+      instance.</td>
+  <td>You must create an AVD configuration before launching the emulator. For
+      information, see <a href="{@docRoot}tools/devices/managing-avds.html">Managing
+      AVDs with AVD Manager</a>.</td>
+<tr>
+  <td rowspan="7">Disk Images</td>
+  <td><code>-cache&nbsp;&lt;filepath&gt;</code></td>
+  <td>Use &lt;filepath&gt; as the working cache partition image. </td>
+  <td>An absolute or relative path to the current working directory.
+  If no cache file is specified, the emulator's default behavior is to use a temporary file instead.
+  <p>For more information on disk images, use <code>-help-disk-images</code>.</p>
+</td></tr>
+<tr>
+  <td><code>-data&nbsp;&lt;filepath&gt;</code></td>
+  <td>Use {@code &lt;filepath&gt;} as the working user-data disk image. </td>
+  <td>Optionally, you can specify a path relative to the current working directory.
+  If <code>-data</code> is not used, the emulator looks for a file named {@code userdata-qemu.img}
+  in the storage area of the AVD being used (see <code>-avd</code>).
+</td></tr>
+<!--
+<tr>
+  <td><code>-datadir &lt;dir&gt;</code></td>
+  <td>Search for the user-data disk image specified in <code>-data</code> in &lt;dir&gt;</td>
+  <td><code>&lt;dir&gt;</code> is a path relative to the current working directory.
+
+<p>If you do not specify <code>-datadir</code>, the emulator looks for the user-data image
+in the storage area of the AVD being used (see <code>-avd</code>)</p><p>For more information
+on disk images, use <code>-help-disk-images</code>.</p>
+</td></tr>
+-->
+<!--
+<tr>
+  <td><code>-image&nbsp;&lt;filepath&gt;</code></td>
+  <td>Use &lt;filepath&gt; as the system image.</td>
+  <td>Optionally, you can specify a path relative to the current working directory.
+   Default is &lt;system&gt;/system.img.</td>
+</tr>
+-->
+<tr>
+  <td><code>-initdata&nbsp;&lt;filepath&gt;</code></td>
+  <td>When resetting the user-data image (through <code>-wipe-data</code>), copy the contents
+  of this file to the new user-data disk image. By default, the emulator copies the <code>&lt;system&gt;/userdata.img</code>.</td>
+  <td>Optionally, you can specify a path relative to the current working directory. See also <code>-wipe-data</code>.
+  <p>For more information on disk images, use <code>-help-disk-images</code>.</p></td>
+</tr>
+<tr>
+  <td><code>-nocache</code></td>
+  <td>Start the emulator without a cache partition.</td>
+  <td>See also <code>-cache &lt;file&gt;</code>.</td>
+</tr>
+<tr>
+  <td><code>-ramdisk&nbsp;&lt;filepath&gt;</code></td>
+  <td>Use &lt;filepath&gt; as the ramdisk image.</td>
+  <td>Default value is <code>&lt;system&gt;/ramdisk.img</code>.
+  <p>Optionally, you can specify a path relative to the current working directory.
+  For more information on disk images, use <code>-help-disk-images</code>.</p>
+</td>
+</tr>
+<tr>
+  <td><code>-sdcard&nbsp;&lt;filepath&gt;</code></td>
+  <td>Use &lt;file&gt; as the SD card image.</td>
+  <td>Default value is <code>&lt;system&gt;/sdcard.img</code>.
+  <p>Optionally, you can specify a path relative to the current working directory. For more information on disk images, use <code>-help-disk-images</code>.</p>
+</td>
+</tr>
+<!--
+<tr>
+ <td><code>-system&nbsp;&lt;dirpath&gt;</code></td>
+ <td>Search for system, ramdisk and user data images in &lt;dir&gt;.</td>
+ <td><code>&lt;dir&gt;</code> is a directory path relative to the current
+  working directory.</td>
+</tr>
+-->
+<tr>
+  <td><code>-wipe-data</code></td>
+  <td>Reset the current user-data disk image (that is, the file specified by <code>-datadir</code> and
+  <code>-data</code>, or the default file). The emulator deletes all data from the user data image file,
+  then copies the contents of the file at <code>-inidata</code> data to the image file before starting.
+  </td>
+  <td>See also <code>-initdata</code>.
+  <p>For more information on disk images, use <code>-help-disk-images</code>.</p>
+</td>
+</tr>
+<tr>
+  <td rowspan="9">Debug</td>
+  <td><code>-debug &lt;tags&gt;</code></td>
+  <td>Enable/disable debug messages for the specified debug tags.</td>
+  <td><code>&lt;tags&gt;</code> is a space/comma/column-separated list of debug component names.
+  Use <code>-help-debug-tags</code> to print a list of debug component names that you can use. </td>
+</tr>
+<tr>
+  <td><code>-debug-&lt;tag&gt;</code></td>
+  <td>Enable/disable debug messages for the specified debug tag.</td>
+  <td rowspan="2">Use <code>-help-debug-tags</code> to print a list of debug component names that you can use in <code>&lt;tag&gt;</code>. </td>
+</tr>
+<tr>
+  <td><code>-debug-no-&lt;tag&gt;</code></td>
+  <td>Disable debug messages for the specified debug tag.</td>
+</tr>
+<tr>
+  <td><code>-logcat &lt;logtags&gt;</code></td>
+  <td>Enable logcat output with given tags.</td>
+  <td>If the environment variable ANDROID_LOG_TAGS is defined and not
+    empty, its value will be used to enable logcat output by default.</td>
+</tr>
+<tr>
+  <td><code>-shell</code></td>
+  <td>Create a root shell console on the current terminal.</td>
+  <td>You can use this command even if the adb daemon in the emulated system is broken.
+  Pressing Ctrl-c from the shell stops the emulator instead of the shell.</td>
+</tr>
+<tr>
+  <td><code>-shell-serial&nbsp;&lt;device&gt;</code></td>
+  <td>Enable the root shell (as in <code>-shell</code> and specify the QEMU character
+  device to use for communication with the shell.</td>
+  <td>&lt;device&gt; must be a QEMU device type. See the documentation for '-serial <em>dev</em>' at
+  <a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>
+  for a list of device types.
+
+<p>Here are some examples: </p>
+<ul>
+  <li><code>-shell-serial stdio</code> is identical to <code>-shell</code></li>
+  <li><code>-shell-serial tcp::4444,server,nowait</code> lets you communicate with the shell over TCP port 4444</li>
+  <li><code>-shell-serial fdpair:3:6</code> lets a parent process communicate with the shell using fds 3 (in) and 6 (out)</li>
+  <li><code>-shell-serial fdpair:0:1</code> uses the normal stdin and stdout fds, except that QEMU won't tty-cook the data.</li>
+  </ul>
+</td>
+</tr>
+<tr>
+  <td><code>-show-kernel &lt;name&gt;</code></td>
+  <td>Display kernel messages.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-trace &lt;name&gt;</code></td>
+  <td>Enable code profiling (press F9 to start), written to a specified file.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-verbose</code></td>
+  <td>Enable verbose output.</td>
+  <td>Equivalent to <code>-debug-init</code>.
+<p>You can define the default verbose output options used by emulator instances in the Android environment variable
+ANDROID_VERBOSE. Define the options you want to use in a comma-delimited list, specifying only the stem of each option:
+<code>-debug-&lt;tags&gt;.</code> </p>
+<p>Here's an example showing ANDROID_VERBOSE defined with the <code>-debug-init</code> and <code>-debug-modem</code> options:
+<p><code>ANDROID_VERBOSE=init,modem</code></p>
+<p>For more information about debug tags, use <code>&lt;-help-debug-tags&gt;</code>.</p>
+</td>
+</tr>
+<tr>
+  <td rowspan="6">Media</td>
+  <td><code>-audio &lt;backend&gt;</code></td>
+  <td>Use the specified audio backend.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-audio-in &lt;backend&gt;</code></td>
+  <td>Use the specified audio-input backend.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-audio-out &lt;backend&gt;</code></td>
+  <td>Use the specified audio-output backend.</td>
+  <td>&nbsp;</td>
+</tr>
+<!--<tr>
+  <td><code>-mic &lt;device or file&gt;</code></td>
+  <td>Use device or WAV file for audio input.</td>
+  <td>&nbsp;</td>
+</tr>
+-->
+<tr>
+  <td><code>-noaudio</code></td>
+  <td>Disable audio support in the current emulator instance.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-radio &lt;device&gt;</code></td>
+  <td>Redirect radio modem interface to a host character device.</td>
+  <td>&nbsp;</td></tr>
+<tr>
+  <td><code>-useaudio</code></td>
+  <td>Enable audio support in the current emulator instance.</td>
+  <td>Enabled by default. </td>
+</tr>
+
+<tr>
+  <td rowspan="7">Network</td>
+  <td><code>-dns-server &lt;servers&gt;</code></td>
+  <td>Use the specified DNS server(s). </td>
+  <td>The value of <code>&lt;servers&gt;</code> must be a comma-separated list of up to 4 DNS server names or
+  IP addresses.</td>
+</tr>
+<tr>
+  <td><code>-http-proxy &lt;proxy&gt;</code></td>
+  <td>Make all TCP connections through a specified HTTP/HTTPS proxy</td>
+  <td>The value of <code>&lt;proxy&gt;</code> can be one of the following:<br>
+     <code>http://&lt;server&gt;:&lt;port&gt;</code><br>
+     <code>http://&lt;username&gt;:&lt;password&gt;@&lt;server&gt;:&lt;port&gt;</code>
+  <p>The <code>http://</code> prefix can be omitted. If the <code>-http-proxy &lt;proxy&gt;</code> command is not supplied,
+  the emulator looks up the <code>http_proxy</code> environment variable and automatically uses any value matching
+  the <code>&lt;proxy&gt;</code> format described above.</p></td>
+</tr>
+<tr>
+  <td><code>-netdelay &lt;delay&gt;</code></td>
+  <td>Set network latency emulation to &lt;delay&gt;.</td>
+  <td>Default value is <code>none</code>. See the table in
+    <a href="{@docRoot}tools/devices/emulator.html#netdelay">Network Delay Emulation</a>
+    for supported <code>&lt;delay&gt;</code> values. </td>
+</tr>
+<tr>
+  <td><code>-netfast</code></td>
+  <td>Shortcut for <code>-netspeed full -netdelay none</code></td>
+  <td>&nbsp;</td></tr>
+<tr>
+  <td><code>-netspeed &lt;speed&gt;</code></td>
+  <td>Set network speed emulation to &lt;speed&gt;.</td>
+  <td>Default value is <code>full</code>. See the table in
+    <a href="{@docRoot}tools/devices/emulator.html#netspeed">Network Speed Emulation</a> for
+  supported <code>&lt;speed&gt;</code> values. </td>
+</tr>
+<tr>
+  <td><code>-port &lt;port&gt;</code></td>
+  <td>Set the console port number for this emulator instance to <code>&lt;port&gt;</code>.</td>
+  <td>The console port number must be an even integer between 5554 and 5584, inclusive. <code>&lt;port&gt;</code>+1
+  must also be free and will be reserved for ADB.</td>
+</tr>
+<tr>
+  <td><code>-report-console &lt;socket&gt;</code></td>
+  <td>Report the assigned console port for this emulator instance to a remote third party
+  before starting the emulation. </td>
+  <td><code>&lt;socket&gt;</code> must use one of these formats:
+
+<p><code>tcp:&lt;port&gt;[,server][,max=&lt;seconds&gt;]</code></br>
+<code>unix:&lt;port&gt;[,server][,max=&lt;seconds&gt;]</code></p>
+
+<p>Use <code>-help-report-console</code></p> to view more information about this topic. </td>
+</tr>
+<tr>
+  <td rowspan="10">System</td>
+  <td><code>-cpu-delay &lt;delay&gt;</code></td>
+  <td>Slow down emulated CPU speed by &lt;delay&gt; </td>
+  <td>Supported values for &lt;delay&gt; are integers between 0 and 1000.
+
+<p>Note that the &lt;delay&gt; does not correlate to clock speed or other absolute metrics
+&mdash; it simply represents an abstract, relative delay factor applied non-deterministically
+in the emulator. Effective performance does not always
+scale in direct relationship with &lt;delay&gt; values.</p>
+</td>
+</tr>
+<tr>
+  <td><code>-gps &lt;device&gt;</code></td>
+  <td>Redirect NMEA GPS to character device.</td>
+  <td>Use this command to emulate an NMEA-compatible GPS unit connected to
+  an external character device or socket. The format of <code>&lt;device&gt;</code> must be QEMU-specific
+  serial device specification. See the documentation for 'serial -dev' at
+  <a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>.
+</td>
+</tr>
+<tr>
+  <td><code>-nojni</code></td>
+  <td>Disable JNI checks in the Dalvik runtime.</td><td>&nbsp;</td></tr>
+<tr>
+  <td><code>-qemu</code></td>
+  <td>Pass arguments to the qemu emulator software.</td>
+  <td><p class="caution"><strong>Important:</strong> When using this option, make sure it is the
+  <em>last option</em> specified, since all options after it are interpretted as qemu-specific
+  options.</p></td></tr>
+<tr>
+  <td><code>-qemu -enable-kvm</code></td>
+  <td>Enable KVM acceleration of the emulator virtual machine.</td>
+  <td>This option is only effective when your system is set up to use
+  <a href="{@docRoot}tools/devices/emulator.html#vm-linux">KVM-based VM acceleration</a>.
+  You can optionally specify a memory size ({@code -m &lt;size&gt;}) for the VM, which should match
+  your emulator's memory size:</p>
+  {@code -qemu -m 512 -enable-kvm}<br>
+  {@code -qemu -m 1024 -enable-kvm}
+  </td></tr>
+<tr>
+  <td><code>-qemu -h</code></td>
+  <td>Display qemu help.</td>
+  <td></td></tr>
+<tr>
+  <td><code>-gpu on</code></td>
+  <td>Turn on graphics acceleration for the emulator.</td>
+  <td>This option is only available for emulators using a system image with API Level 15, revision 3
+  and higher. For more information, see
+  <a href="{@docRoot}tools/devices/emulator.html#accel-graphics">Using the Android
+  Emulator</a>.</td></tr>
+<tr>
+  <td><code>-radio &lt;device&gt;</code></td>
+  <td>Redirect radio mode to the specified character device.</td>
+  <td>The format of <code>&lt;device&gt;</code> must be QEMU-specific
+  serial device specification. See the documentation for 'serial -dev' at
+<a href="http://wiki.qemu.org/download/qemu-doc.html">http://wiki.qemu.org/download/qemu-doc.html</a>.
+</td>
+</tr>
+<tr>
+ <td><code>-timezone &lt;timezone&gt;</code></td>
+ <td>Set the timezone for the emulated device to &lt;timezone&gt;, instead of the host's timezone.</td>
+ <td><code>&lt;timezone&gt;</code> must be specified in zoneinfo format. For example:
+<p>"America/Los_Angeles"<br>
+"Europe/Paris"</p>
+</td>
+</tr>
+<tr>
+ <td><code>-version</code></td>
+ <td>Display the emulator's version number.</td>
+ <td>&nbsp;</td>
+</tr>
+<tr>
+  <td rowspan="12">UI</td>
+  <td><code>-dpi-device &lt;dpi&gt;</code></td>
+  <td>Scale the resolution of the emulator to match the screen size
+  of a physical device.</td>
+  <td>The default value is 165. See also <code>-scale</code>.</td>
+</tr>
+<tr>
+  <td><code>-no-boot-anim</code></td>
+  <td>Disable the boot animation during emulator startup.</td>
+  <td>Disabling the boot animation can speed the startup time for the emulator.</td>
+</tr>
+<tr>
+  <td><code>-no-window</code></td>
+  <td>Disable the emulator's graphical window display.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-scale &lt;scale&gt;</code></td>
+  <td>Scale the emulator window. </td>
+  <td><code>&lt;scale&gt;</code> is a number between 0.1 and 3 that represents the desired scaling factor. You can
+  also specify scale as a DPI value if you add the suffix "dpi" to the scale value. A value of "auto"
+  tells the emulator to select the best window size.</td>
+</tr>
+<tr>
+  <td><code>-raw-keys</code></td>
+  <td>Disable Unicode keyboard reverse-mapping.</td>
+  <td>&nbsp;</td></tr>
+<tr>
+  <td><code>-noskin</code></td>
+  <td>Don't use any emulator skin.</td>
+  <td>&nbsp;</td></tr>
+<tr>
+  <td><code>-keyset &lt;file&gt;</code></td>
+  <td>Use the specified keyset file instead of the default.</td>
+  <td>The keyset file defines the list of key bindings between the emulator and the host keyboard.
+  For more information, use <code>-help-keyset</code> to print information about this topic.
+</td>
+</tr>
+<tr>
+  <td><code>-onion &lt;image&gt;</code></td>
+  <td>Use overlay image over screen.</td>
+  <td>No support for JPEG. Only PNG is supported.</td></tr>
+<tr>
+  <td><code>-onion-alpha &lt;percent&gt;</code></td>
+  <td>Specify onion skin translucency  value (as percent).
+  <td>Default is 50.</td>
+</tr>
+<tr>
+  <td><code>-onion-rotation &lt;position&gt;</code></td>
+  <td>Specify onion skin rotation.
+  <td><code>&lt;position&gt;</code> must be one of the values 0, 1, 2, 3.</td>
+</tr>
+<tr>
+  <td><code>-skin &lt;skinID&gt;</code></td>
+  <td>This emulator option is deprecated. </td>
+  <td>Please set skin options using AVDs, rather than by using this emulator
+option. Using this option may yield unexpected and in some cases misleading
+results, since the density with which to render the skin may not be defined.
+AVDs let you associate each skin with a default density and override the default
+as needed. For more information, see <a
+href="{@docRoot}tools/devices/managing-avds.html">Managing Virtual Devices
+with AVD Manager</a>.
+</td>
+</tr>
+<tr>
+  <td><code>-skindir &lt;dir&gt;</code></td>
+  <td>This emulator option is deprecated. </td>
+  <td>See comments for <code>-skin</code>, above.</td>
+</tr>
+<tr>
+  <td rowspan="9">Help</td>
+  <td><code>-help</code></td>
+  <td>Print a list of all emulator options.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-help-all</code></td>
+  <td>Print help for all startup options.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-help-&lt;option&gt;</code></td>
+  <td>Print help for a specific startup option.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-help-debug-tags</code></td>
+  <td>Print a list of all tags for <code>-debug &lt;tags&gt;</code>.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-help-disk-images</code></td>
+  <td>Print help for using emulator disk images.</td>
+  <td>&nbsp;</td>
+ </tr>
+<tr>
+  <td><code>-help-environment</code></td>
+  <td>Print help for emulator environment variables.</td>
+  <td>&nbsp;</td>s
+</tr><tr>
+  <td><code>-help-keys</code></td>
+  <td>Print the current mapping of keys.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-help-keyset-file</code></td>
+  <td>Print help for defining a custom key mappings file.</td>
+  <td>&nbsp;</td>
+</tr>
+<tr>
+  <td><code>-help-virtual-device</code></td>
+  <td>Print help for Android Virtual Device usage.</td>
+  <td>&nbsp;</td>
+</tr>
+</table>
diff --git a/docs/html/guide/developing/tools/etc1tool.jd b/docs/html/tools/help/etc1tool.jd
similarity index 100%
rename from docs/html/guide/developing/tools/etc1tool.jd
rename to docs/html/tools/help/etc1tool.jd
diff --git a/docs/html/tools/help/hierarchy-viewer.jd b/docs/html/tools/help/hierarchy-viewer.jd
new file mode 100644
index 0000000..4a346e0
--- /dev/null
+++ b/docs/html/tools/help/hierarchy-viewer.jd
@@ -0,0 +1,18 @@
+page.title=Hierarchy Viewer
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<p>Hierarchy Viewer allows you to debug and optimize your user 
+interface. It provides a visual representation of the layout's View hierarchy 
+(the Layout View) and a magnified inspector of the display (the Pixel Perfect View). 
+</p>
+
+<p>To start Hierarchy Viewer, enter the following command from the SDK <code>tools/</code> directory:</p>
+  <pre>hierarchyviewer</pre>
+</ol>
+
+<p>For more information on how to use Hierarchy Viewer, see 
+<a href="{@docRoot}tools/debugging/debugging-ui.html">Debugging and Profiling UIs</a>
+</p>
+
diff --git a/docs/html/guide/developing/tools/hprof-conv.jd b/docs/html/tools/help/hprof-conv.jd
similarity index 100%
rename from docs/html/guide/developing/tools/hprof-conv.jd
rename to docs/html/tools/help/hprof-conv.jd
diff --git a/docs/html/tools/help/index.jd b/docs/html/tools/help/index.jd
new file mode 100644
index 0000000..aa95de2
--- /dev/null
+++ b/docs/html/tools/help/index.jd
@@ -0,0 +1,84 @@
+page.title=Tools
+@jd:body
+
+
+<p>The Android SDK includes a variety of tools that help you develop mobile
+applications for the Android platform. The tools are classified into two groups: SDK tools
+and platform tools. SDK tools are platform independent and are required no matter which
+Android platform you are developing on. Platform tools are customized to support the features of the
+latest Android platform.</p>
+
+<h2 id="tools-sdk">SDK Tools</h2>
+<p>The SDK tools are installed with the SDK starter package and are periodically updated.
+The SDK tools are required if you are developing Android applications. The most important SDK tools
+include the Android SDK Manager (<code>android sdk</code>), the AVD Manager (<code>android
+avd</code>) the emulator (<code>emulator</code>), and the Dalvik Debug Monitor Server
+(<code>ddms</code>). A short summary of some frequently-used SDK tools is provided below.</p>
+
+<dl>
+  <dt><a href="android.html">android</a></dt>
+    <dd>Lets you manage AVDs, projects, and the installed components of the SDK.</dd>
+  <dt><a href="{@docRoot}tools/debugging/ddms.html">Dalvik Debug Monitor
+Server (ddms)</a></dt>
+    <dd>Lets you debug Android applications.</dd>
+  <dt><a href="dmtracedump.html">dmtracedump</a></dt>
+    <dd>Generates graphical call-stack diagrams from trace log files. The tool uses the
+Graphviz Dot utility to create the graphical output, so you need to install Graphviz before
+running <code>dmtracedump</code>. For more information on using <code>dmtracedump</code>, see <a
+href="{@docRoot}tools/debugging/debugging-tracing.html#dmtracedump">Profiling
+with Traceview and dmtracedump</a></dd>
+  <dt><a href="draw9patch.html">Draw 9-patch</a></dt>
+    <dd>Allows you to easily create a {@link android.graphics.NinePatch} graphic using a
+WYSIWYG editor. It also previews stretched versions of the image, and highlights the area in which
+content is allowed.</dd>
+  <dt><a href="emulator.html">Android Emulator (emulator)</a></dt>
+    <dd>A QEMU-based device-emulation tool that you can use to design, debug, and test
+your applications in an actual Android run-time environment.</dd>
+  <dt><a href="hierarchy-viewer.html">Hierarchy Viewer (hierarchyviewer)</a></dt>
+    <dd>Lets you debug and optimize an Android application's user interface.</dd>
+  <dt><a href="hprof-conv.html">hprof-conv</a></dt>
+    <dd>Converts the HPROF file that is generated by the Android SDK tools to a standard format so
+you can view the file in a profiling tool of your choice.</dd>
+  <dt><a href="layoutopt.html">layoutopt</a></dt>
+    <dd>Lets you quickly analyze your application's layouts in order to optimize them for
+efficiency.</dd>
+  <dt><a href="mksdcard.html">mksdcard</a></dt>
+    <dd>Helps you create a disk image that you can use with the emulator, to simulate the presence
+of an external storage card (such as an SD card).</dd>
+  <dt><a href="monkey.html">Monkey</a></dt>
+    <dd>Runs on your emulator or device and generates pseudo-random streams of user events such
+as clicks, touches, or gestures, as well as a number of  system-level events. You can use the Monkey
+to stress-test applications that you are developing, in a random yet repeatable manner.</dd>
+  <dt><a href="monkeyrunner_concepts.html">monkeyrunner</a></dt>
+    <dd>Provides an API for writing programs that control an Android device or emulator from
+outside of Android code.</dd>
+  <dt><a href="proguard.html">ProGuard</a></dt>
+    <dd>Shrinks, optimizes, and obfuscates your code by removing unused code and renaming
+classes, fields, and methods with semantically obscure names.</dd>
+  <dt><a href="sqlite3.html">sqlite3</a></dt>
+    <dd>Lets you access the SQLite data files created and used by Android applications.</dd>
+  <dt><a href="traceview.html">traceview</a></dt>
+    <dd>Provides a graphical viewer for execution logs saved by your application.</dd>
+  <dt><a href="zipalign.html">zipalign</a></dt>
+    <dd>Optimizes <code>.apk</code> files by ensuring that all uncompressed data starts with a
+particular alignment relative to the start of the file. This should always be used to align .apk
+files after they have been signed.</dd>
+ </dl>
+
+<h2 id="tools-platform">Platform Tools</h2>
+
+<p>The platform tools are typically updated every time you install a new SDK platform. Each update
+of the platform tools is backward compatible with older platforms. Usually, you directly use only
+one of the platform tools&mdash;the <a href="adb.html">Android Debug Bridge (<code>adb</code>)</a>.
+Android Debug Bridge is a versatile tool that lets you manage the state of an emulator instance or
+Android-powered device. You can also use it to install an Android application (.apk) file on a
+device.</p>
+
+<p>The other platform tools, such as <a href="{@docRoot}tools/aidl.html">aidl</a>,
+<code>aapt</code>, <code>dexdump</code>, and <code>dx</code>, are typically called by the Android
+build tools or Android Development Tools (ADT), so you rarely need to invoke these tools directly.
+As a general rule, you should rely on the build tools or the ADT plugin to call them as needed.</p>
+
+<p class="note"><strong>Note:</strong> The Android SDK provides additional shell tools that can
+be accessed through <code>adb</code>, such as <a href="bmgr.html">bmgr</a> and
+<a href="logcat.html">logcat</a>.</p>
\ No newline at end of file
diff --git a/docs/html/tools/help/layoutopt.jd b/docs/html/tools/help/layoutopt.jd
new file mode 100644
index 0000000..1308b1e
--- /dev/null
+++ b/docs/html/tools/help/layoutopt.jd
@@ -0,0 +1,24 @@
+page.title=layoutopt
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<p><code>layoutopt</code> is a command-line tool that helps you optimize the
+layouts and layout hierarchies of your applications.<p>
+
+<p>This document is a reference to the available command line options. For more information and sample
+output of the tool, see <a
+href="{@docRoot}tools/debugging/debugging-ui.html#layoutopt">Optimizing layouts with
+layoutopt</a>.</p>
+
+<h3>Usage</h3>
+
+<p>To run <code>layoutopt</code> against a given list of layout resources:</p>
+
+<pre>layoutopt &lt;file_or_directory&gt; ...</pre>
+
+<p>For example:</p>
+
+<pre>$ layoutopt res/layout-land</pre>
+<pre>$ layoutopt res/layout/main.xml res/layout-land/main.xml</pre>
+
diff --git a/docs/html/tools/help/logcat.jd b/docs/html/tools/help/logcat.jd
new file mode 100644
index 0000000..d504b22
--- /dev/null
+++ b/docs/html/tools/help/logcat.jd
@@ -0,0 +1,106 @@
+page.title=logcat
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+  <p>The Android logging system provides a mechanism for collecting and viewing system debug
+  output. Logs from various applications and portions of the system are collected in a series of
+  circular buffers, which then can be viewed and filtered by the <code>logcat</code> command. You can use 
+  <code>logcat</code> from an ADB shell to view the log messages.</p>
+
+  <p>This document is a reference to the available command line options. For more information on <code>logcat</code>, see
+  <a href="{@docRoot}tools/debugging/debugging-log.html">Reading and Writing Logs</a>.
+For more
+  information on accessing <code>logcat</code> from DDMS, instead of the command line, see the documentation for the
+  <a href="{@docRoot}tools/debugging/ddms.html">Dalvik Debug Monitor Server</a>.
+  </p>
+
+  <h3>Syntax</h3>
+  <pre>
+[adb] logcat [&lt;option&gt;] ... [&lt;filter-spec&gt;] ...
+</pre>
+
+  <p>You can run <code>logcat</code> as an adb command or directly in a shell prompt
+  of your emulator or connected device. To view log output using adb, navigate to your SDK
+  <code>platform-tools/</code> directory and execute:</p>
+  <pre>
+$ adb logcat
+</pre>
+
+  <p>You can create a shell connection to a device and execute:</p>
+  <pre>
+$ adb shell
+# logcat
+</pre>
+
+  <h3>Options</h3>
+  <p>The following table describes the command line options of <code>logcat</code>.</p>
+  
+  <table>
+    <tr>
+      <th>Option</th>
+
+      <th>Description</th>
+    </tr>
+
+    <tr>
+      <td><code>-b&nbsp;&lt;buffer&gt;</code></td>
+
+      <td>Loads an alternate log buffer for viewing, such as <code>event</code> or
+      <code>radio</code>. The <code>main</code> buffer is used by default. See <a href= 
+      "#alternativebuffers">Viewing Alternative Log Buffers</a>.</td>
+    </tr>
+
+    <tr>
+      <td><code>-c</code></td>
+
+      <td>Clears (flushes) the entire log and exits.</td>
+    </tr>
+
+    <tr>
+      <td><code>-d</code></td>
+
+      <td>Dumps the log to the screen and exits.</td>
+    </tr>
+
+    <tr>
+      <td><code>-f&nbsp;&lt;filename&gt;</code></td>
+
+      <td>Writes log message output to <code>&lt;filename&gt;</code>. The default is
+      <code>stdout</code>.</td>
+    </tr>
+
+    <tr>
+      <td><code>-g</code></td>
+
+      <td>Prints the size of the specified log buffer and exits.</td>
+    </tr>
+
+    <tr>
+      <td><code>-n&nbsp;&lt;count&gt;</code></td>
+
+      <td>Sets the maximum number of rotated logs to <code>&lt;count&gt;</code>. The default value
+      is 4. Requires the <code>-r</code> option.</td>
+    </tr>
+
+    <tr>
+      <td><code>-r&nbsp;&lt;kbytes&gt;</code></td>
+
+      <td>Rotates the log file every <code>&lt;kbytes&gt;</code> of output. The default value is
+      16. Requires the <code>-f</code> option.</td>
+    </tr>
+
+    <tr>
+      <td><code>-s</code></td>
+
+      <td>Sets the default filter spec to silent.</td>
+    </tr>
+
+    <tr>
+      <td><code>-v&nbsp;&lt;format&gt;</code></td>
+
+      <td>Sets the output format for log messages. The default is <code>brief</code> format. For a
+      list of supported formats, see <a href="#outputformat">Controlling Log Output
+      Format</a>.</td>
+    </tr>
+  </table>
diff --git a/docs/html/tools/help/mksdcard.jd b/docs/html/tools/help/mksdcard.jd
new file mode 100644
index 0000000..38c4356
--- /dev/null
+++ b/docs/html/tools/help/mksdcard.jd
@@ -0,0 +1,55 @@
+page.title=mksdcard
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+ <p>The <code>mksdcard</code> tool lets you quickly create a FAT32 disk image that you can load in the
+  emulator, to simulate the presence of an SD card in the device. Because you can specify an SD
+  card while creating an AVD in the AVD Manager, you usually use that feature to create an SD card.
+  This tool creates an SD card that is not bundled with an AVD, so it is useful for situations
+  where you need to share a virtual SD card between multiple emulators.</p>
+
+  <h3>Usage</h3>
+  <pre>
+mksdcard -l &lt;label&gt; &lt;size&gt; &lt;file&gt;
+</pre>
+
+  <h3>Options</h3>
+  <p>The following table describes the command-line options of <code>mksdcard</code></p>
+  <table>
+    <tr>
+      <th>Option</th>
+      
+      <th>Description</th>
+    </tr>
+    
+    <tr>
+      <td><code>-l</code></td>
+
+      <td>A volume label for the disk image to create.</td>
+    </tr>
+
+    <tr>
+      <td><code>size</code></td>
+
+      <td>An integer that specifies the size (in bytes) of disk image to create. You can also
+      specify size in kilobytes or megabytes, by appending a "K" or "M" to &lt;size&gt;. For
+      example, <code>1048576K</code>, <code>1024M</code>.</td>
+    </tr>
+
+    <tr>
+      <td><code>file</code></td>
+
+      <td>The path/filename of the disk image to create.</td>
+    </tr>
+  </table>
+
+  <p>Once you have created the disk image file, you can load it in the emulator at startup using
+  the emulator's <code>-sdcard</code> option. For more information, see <a href= 
+  "{@docRoot}tools/help/emulator.html">Android Emulator</a>.</p>
+  
+  <p>The usage for the <code>-sdcard</code> option is as follows:</p>
+  <pre>emulator -sdcard &lt;file&gt;</pre>
+
+<h3>Example</h3>
+<pre>mksdcard -l mySdCard 1024M mySdCardFile.img</pre>
\ No newline at end of file
diff --git a/docs/html/tools/help/monkey.jd b/docs/html/tools/help/monkey.jd
new file mode 100644
index 0000000..b6300a7
--- /dev/null
+++ b/docs/html/tools/help/monkey.jd
@@ -0,0 +1,242 @@
+page.title=UI/Application Exerciser Monkey
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<p>The Monkey is a program that runs on your 
+<a href="{@docRoot}tools/help/emulator.html">emulator</a> or device and generates pseudo-random
+streams of user events such as clicks, touches, or gestures, as well as a number of system-level 
+events.  You can use the Monkey to stress-test applications that you are developing, in a random 
+yet repeatable manner.</p>
+
+<a name="overview"></a>
+<h2>Overview</h2>
+
+<p>The Monkey is a command-line tool that that you can run on any emulator
+instance or on a device.  It sends a pseudo-random stream of 
+user events into the system, which acts as a stress test on the application software you are 
+developing.</p>
+
+<p>The Monkey includes a number of options, but they break down into four primary
+categories:</p>
+
+<ul>
+  <li>Basic configuration options, such as setting the number of events to attempt.</li>
+  <li>Operational constraints, such as restricting the test to a single package.</li>
+  <li>Event types and frequencies.</li>
+  <li>Debugging options.</li>
+</ul>
+
+<p>When the Monkey runs, it generates events and sends them to the system.  It also <i>watches</i>
+the system under test and looks for three conditions, which it treats specially:</p>
+
+<ul>
+  <li>If you have constrained the Monkey to run in one or more specific packages, it 
+  watches for attempts to navigate to any other packages, and blocks them.</li>
+  <li>If your application crashes or receives any sort of unhandled exception, the Monkey
+  will stop and report the error.</li>
+  <li>If your application generates an <i>application not responding</i> error, the Monkey
+  will stop and report the error.</li>
+</ul>
+
+<p>Depending on the verbosity level you have selected, you will also see reports on the progress
+of the Monkey and the events being generated.</p>
+
+<a name="basics"></a>
+<h2>Basic Use of the Monkey</h2>
+
+<p>You can launch the Monkey using a command line on your development machine or from a script. 
+Because the Monkey runs in the emulator/device environment, you must launch it from a shell in 
+that environment.  You can do this by prefacing <code>adb shell</code> to each command, 
+or by entering the shell and entering Monkey commands directly.</p>
+<p>The basic syntax is: </p>
+
+<pre>$ adb shell monkey [options] &lt;event-count&gt;</pre>
+    
+<p>With no options specified, the Monkey will launch in a quiet (non-verbose) mode, and will send 
+events to any (and all) packages installed on your target.  Here is a more typical command line,
+which will launch your application and send 500 pseudo-random events to it:</p>
+
+<pre>$ adb shell monkey -p your.package.name -v 500</pre>
+
+<a name="reference"></a>
+<h2>Command Options Reference</h2>
+
+<p>The table below lists all options you can include on the Monkey command line.</p>
+
+<table>
+<tr>
+  <th>Category</th>
+  <th>Option</th>
+  <th>Description</th>
+</tr>
+
+<tr>
+<td rowspan="2">General</td>
+<td><code>--help</code></td>
+<td>Prints a simple usage guide.</td>
+</tr>
+
+<tr>
+<td><code>-v</code></td>
+<td>Each -v on the command line will increment the verbosity level.  
+Level 0 (the default) provides little information beyond startup notification, test completion, and
+final results.  
+Level 1 provides more details about the test as it runs, such as individual events being sent to 
+your activities.  
+Level 2 provides more detailed setup information such as activities selected or not selected for 
+testing.</td>
+</tr>
+
+<tr>
+<td rowspan="10">Events</td>
+<td><code>-s &lt;seed&gt;</code></td>
+<td>Seed value for pseudo-random number generator.  If you re-run the Monkey with the same seed 
+value, it will generate the same sequence of events.</td>
+</tr>
+
+<tr>
+<td><code>--throttle &lt;milliseconds&gt;</code></td>
+<td>Inserts a fixed delay between events.  You can use this option to slow down the Monkey.  
+If not specified, there is no delay and the events are generated as rapidly as possible.</td>
+</tr>
+
+<tr>
+<td><code>--pct-touch &lt;percent&gt;</code></td>
+<td>Adjust percentage of touch events.  
+(Touch events are a down-up event in a single place on the screen.)</td>
+</tr>
+
+<tr>
+<td><code>--pct-motion &lt;percent&gt;</code></td>
+<td>Adjust percentage of motion events.
+(Motion events consist of a down event somewhere on the screen, a series of pseudo-random
+movements, and an up event.)</td>
+</tr>
+
+<tr>
+<td><code>--pct-trackball &lt;percent&gt;</code></td>
+<td>Adjust percentage of trackball events.
+(Trackball events consist of one or more random movements, sometimes followed by a click.)</td>
+</tr>
+
+<tr>
+<td><code>--pct-nav &lt;percent&gt;</code></td>
+<td>Adjust percentage of "basic" navigation events.
+(Navigation events consist of up/down/left/right, as input from a directional input device.)</td>
+</tr>
+
+<tr>
+<td><code>--pct-majornav &lt;percent&gt;</code></td>
+<td>Adjust percentage of "major" navigation events.
+(These are navigation events that will typically cause actions within your UI, such as
+the center button in a 5-way pad, the back key, or the menu key.)</td>
+</tr>
+
+<tr>
+<td><code>--pct-syskeys &lt;percent&gt;</code></td>
+<td>Adjust percentage of "system" key events.
+(These are keys that are generally reserved for use by the system, such as Home, Back, Start Call,
+End Call, or Volume controls.)</td>
+</tr>
+
+<tr>
+<td><code>--pct-appswitch &lt;percent&gt;</code></td>
+<td>Adjust percentage of activity launches.  At random intervals, the Monkey will issue a startActivity() call, as a way of maximizing
+coverage of all activities within your package.</td>
+</tr>
+
+<tr>
+<td><code>--pct-anyevent &lt;percent&gt;</code></td>
+<td>Adjust percentage of other types of events.  This is a catch-all for all other types of events such as keypresses, other less-used
+buttons on the device, and so forth.</td>
+</tr>
+
+<tr>
+<td rowspan="2">Constraints</td>
+<td><code>-p &lt;allowed-package-name&gt;</code></td>
+<td>If you specify one or more packages this way, the Monkey will <i>only</i> allow the system
+to visit activities within those packages.  If your application requires access to activities in
+other packages (e.g. to select a contact) you'll need to specify those packages as well.
+If you don't specify any packages, the Monkey will allow the system to launch activities
+in all packages.  To specify multiple packages, use the -p option multiple times &mdash; one -p 
+option per package.</td>
+</tr>
+
+<tr>
+<td><code>-c &lt;main-category&gt;</code></td>
+<td>If you specify one or more categories this way, the Monkey will <i>only</i> allow the 
+system to visit activities that are listed with one of the specified categories.  
+If you don't specify any categories, the Monkey will select activities listed with the category
+Intent.CATEGORY_LAUNCHER or Intent.CATEGORY_MONKEY.  To specify multiple categories, use the -c
+option multiple times &mdash; one -c option per category.</td>
+</tr>
+
+<tr>
+<td rowspan="8">Debugging</td>
+<td><code>--dbg-no-events</code></td>
+<td>When specified, the Monkey will perform the initial launch into a test activity, but
+will not generate any further events.
+For best results, combine with -v, one or more package constraints, and a non-zero throttle to keep the Monkey
+running for 30 seconds or more.  This provides an environment in which you can monitor package
+transitions invoked by your application.</td>
+</tr>
+
+<tr>
+<td><code>--hprof</code></td>
+<td>If set, this option will generate profiling reports immediately before and after
+the Monkey event sequence.
+This will generate large (~5Mb) files in data/misc, so use with care.  See 
+<a href="{@docRoot}tools/debugging/debugging-tracing.html" title="traceview">Traceview</a> for more information
+on trace files.</td>
+</tr>
+
+<tr>
+<td><code>--ignore-crashes</code></td>
+<td>Normally, the Monkey will stop when the application crashes or experiences any type of 
+unhandled exception.  If you specify this option, the Monkey will continue to send events to
+the system, until the count is completed.</td>
+</tr>
+
+<tr>
+<td><code>--ignore-timeouts</code></td>
+<td>Normally, the Monkey will stop when the application experiences any type of timeout error such
+as a "Application Not Responding" dialog.  If you specify this option, the Monkey will continue to 
+send events to the system, until the count is completed.</td>
+</tr>
+
+<tr>
+<td><code>--ignore-security-exceptions</code></td>
+<td>Normally, the Monkey will stop when the application experiences any type of permissions error,
+for example if it attempts to launch an activity that requires certain permissions.  If you specify
+this option, the Monkey will continue to send events to the system, until the count is 
+completed.</td>
+</tr>
+
+<tr>
+<td><code>--kill-process-after-error</code></td>
+<td>Normally, when the Monkey stops due to an error, the application that failed will be left
+running.  When this option is set, it will signal the system to stop the process in which the error
+occurred.
+Note, under a normal (successful) completion, the launched process(es) are not stopped, and
+the device is simply left in the last state after the final event.</td>
+</tr>
+
+<tr>
+<td><code>--monitor-native-crashes</code></td>
+<td>Watches for and reports crashes occurring in the Android system native code. If --kill-process-after-error is set, the system will stop.</td>
+</tr>
+
+<tr>
+<td><code>--wait-dbg</code></td>
+<td>Stops the Monkey from executing until a debugger is attached to it.</td>
+</tr>
+
+</table>
+
+<!-- TODO: add a section called "debugging" that covers ways to use it, 
+need to clear data, use of the seed, etc. -->
+
+<!-- TODO: add a section that lays down a contract for Monkey output so it can be
+scripted safely. -->
+
diff --git a/docs/html/tools/help/monkeyrunner_concepts.jd b/docs/html/tools/help/monkeyrunner_concepts.jd
new file mode 100644
index 0000000..c37e64d
--- /dev/null
+++ b/docs/html/tools/help/monkeyrunner_concepts.jd
@@ -0,0 +1,319 @@
+page.title=monkeyrunner
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li>
+        <a href="#SampleProgram">A Simple monkeyrunner Program</a>
+    </li>
+    <li>
+        <a href="#APIClasses">The monkeyrunner API</a>
+    </li>
+    <li>
+        <a href="#RunningMonkeyRunner">Running monkeyrunner</a>
+    </li>
+    <li>
+        <a href="#Help">monkeyrunner Built-in Help</a>
+    </li>
+    <li>
+        <a href="#Plugins">Extending monkeyrunner with Plugins</a>
+    </li>
+  </ol>
+  <h2>See Also</h2>
+      <ol>
+        <li>
+            <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>
+        </li>
+      </ol>
+  </div>
+</div>
+<p>
+    The monkeyrunner tool provides an API for writing programs that control an Android device
+    or emulator from outside of Android code. With monkeyrunner, you can write a Python program
+    that installs an Android application or test package, runs it, sends keystrokes to it,
+    takes screenshots of its user interface, and stores screenshots on the workstation. The
+    monkeyrunner tool is primarily designed to test applications and devices at the
+    functional/framework level and for running unit test suites, but you are free to use it for
+    other purposes.
+</p>
+<p>
+    The monkeyrunner tool is not related to the
+    <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a>,
+    also known as the <code>monkey</code> tool. The <code>monkey</code> tool runs in an
+    <code><a href="{@docRoot}tools/help/adb.html">adb</a></code> shell directly on the
+    device or emulator and generates pseudo-random streams of user and system events. In comparison,
+    the monkeyrunner tool controls devices and emulators from a workstation by sending specific
+    commands and events from an API.
+</p>
+<p>
+    The monkeyrunner tool provides these unique features for Android testing:
+</p>
+<ul>
+    <li>
+        Multiple device control: The monkeyrunner API can apply one or more
+        test suites across multiple devices or emulators. You can physically attach all the devices
+        or start up all the emulators (or both) at once, connect to each one in turn
+        programmatically, and then run one or more tests. You can also start up an emulator
+        configuration programmatically, run one or more tests, and then shut down the emulator.
+    </li>
+    <li>
+        Functional testing: monkeyrunner can run an automated start-to-finish test of an Android
+        application. You provide input values with keystrokes or touch events, and view the results
+        as screenshots.
+    </li>
+    <li>
+        Regression testing - monkeyrunner can test application stability by running an application
+        and comparing its output screenshots to a set of screenshots that are known to be correct.
+    </li>
+    <li>
+        Extensible automation - Since monkeyrunner is an API toolkit, you can develop an entire
+        system of Python-based modules and programs for controlling Android devices. Besides using
+        the monkeyrunner API itself, you can use the standard Python
+        <code><a href="http://docs.python.org/library/os.html">os</a></code> and
+        <code><a href="http://docs.python.org/library/subprocess.html">subprocess</a></code>
+        modules to call Android tools such as
+        <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>.
+        <p>
+            You can also add your own classes to the monkeyrunner API. This is described
+            in more detail in the section
+            <a href="#Plugins">Extending monkeyrunner with plugins</a>.
+        </p>
+    </li>
+</ul>
+<p>
+    The monkeyrunner tool uses <a href="http://www.jython.org/">Jython</a>, a
+    implementation of Python that uses the Java programming language. Jython allows the
+    monkeyrunner API to interact easily with the Android framework. With Jython you can
+    use Python syntax to access the constants, classes, and methods of the API.
+</p>
+
+<h2 id="SampleProgram">A Simple monkeyrunner Program</h2>
+<p>
+    Here is a simple monkeyrunner program that connects to a device, creating a
+    <code><a href="{@docRoot}tools/help/MonkeyDevice.html">MonkeyDevice</a></code>
+    object. Using the <code>MonkeyDevice</code> object, the program installs an Android application
+    package, runs one of its activities, and sends key events to the activity.
+    The program then takes a screenshot of the result, creating a
+    <code><a href="{@docRoot}tools/help/MonkeyImage.html">MonkeyImage</a></code> object.
+    From this object, the program writes out a <code>.png</code> file containing the screenshot.
+</p>
+<pre>
+# Imports the monkeyrunner modules used by this program
+from com.android.monkeyrunner import MonkeyRunner, MonkeyDevice
+
+# Connects to the current device, returning a MonkeyDevice object
+device = MonkeyRunner.waitForConnection()
+
+# Installs the Android package. Notice that this method returns a boolean, so you can test
+# to see if the installation worked.
+device.installPackage('myproject/bin/MyApplication.apk')
+
+# sets a variable with the package's internal name
+package = 'com.example.android.myapplication'
+
+# sets a variable with the name of an Activity in the package
+activity = 'com.example.android.myapplication.MainActivity'
+
+# sets the name of the component to start
+runComponent = package + '/' + activity
+
+# Runs the component
+device.startActivity(component=runComponent)
+
+# Presses the Menu button
+device.press('KEYCODE_MENU', MonkeyDevice.DOWN_AND_UP)
+
+# Takes a screenshot
+result = device.takeSnapshot()
+
+# Writes the screenshot to a file
+result.writeToFile('myproject/shot1.png','png')
+</pre>
+
+<h2 id="APIClasses">The monkeyrunner API</h2>
+<p>
+    The monkeyrunner API is contained in three modules in the package
+    <code>com.android.monkeyrunner</code>:
+</p>
+<ul>
+    <li>
+        <code><a href="{@docRoot}tools/help/MonkeyRunner.html">MonkeyRunner</a></code>:
+        A class of utility methods for monkeyrunner programs. This class provides a method for
+        connecting monkeyrunner to a device or emulator. It also provides methods for
+        creating UIs for a monkeyrunner program and for displaying the built-in help.
+    </li>
+    <li>
+        <code><a href="{@docRoot}tools/help/MonkeyDevice.html">MonkeyDevice</a></code>:
+        Represents a device or emulator. This class provides methods for installing and
+        uninstalling packages, starting an Activity, and sending keyboard or touch events to an
+        application. You also use this class to run test packages.
+    </li>
+    <li>
+        <code><a href="{@docRoot}tools/help/MonkeyImage.html">MonkeyImage</a></code>:
+        Represents a screen capture image. This class provides methods for capturing screens,
+        converting bitmap images to various formats, comparing two MonkeyImage objects, and
+        writing an image to a file.
+    </li>
+</ul>
+<p>
+    In a Python program, you access each class as a Python module. The monkeyrunner tool
+    does not import these modules automatically. To import a module, use the
+    Python <code>from</code> statement:
+</p>
+<pre>
+from com.android.monkeyrunner import &lt;module&gt;
+</pre>
+<p>
+    where <code>&lt;module&gt;</code> is the class name you want to import. You can import more
+    than one module in the same <code>from</code> statement by separating the module names with
+    commas.
+</p>
+<h2 id="RunningMonkeyRunner">Running monkeyrunner</h2>
+<p>
+    You can either run monkeyrunner programs from a file, or enter monkeyrunner statements in
+    an interactive session. You do both by invoking the <code>monkeyrunner</code> command
+    which is found in the <code>tools/</code> subdirectory of your SDK directory.
+    If you provide a filename as an argument, the <code>monkeyrunner</code> command
+    runs the file's contents as a Python program; otherwise, it starts an interactive session.
+</p>
+<p>
+    The syntax of the <code>monkeyrunner</code> command is
+</p>
+<pre>
+monkeyrunner -plugin &lt;plugin_jar&gt; &lt;program_filename&gt; &lt;program_options&gt;
+</pre>
+<p>
+Table 1 explains the flags and arguments.
+</p>
+<p class="table-caption" id="table1">
+  <strong>Table 1.</strong> <code>monkeyrunner</code> flags and arguments.</p>
+
+<table>
+    <tr>
+        <th>Argument</th>
+        <th>Description</th>
+    </tr>
+    <tr>
+        <td>
+            <nobr>
+                <code>-plugin &lt;plugin_jar&gt;</code>
+            </nobr>
+        </td>
+        <td>
+            (Optional) Specifies a <code>.jar</code> file containing a plugin for monkeyrunner.
+            To learn more about monkeyrunner plugins, see
+            <a href="#Plugins">Extending monkeyrunner with plugins</a>. To specify more than one
+            file, include the argument multiple times.
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <nobr>
+                <code>&lt;program_filename&gt;</code>
+            </nobr>
+        </td>
+        <td>
+            If you provide this argument, the <code>monkeyrunner</code> command runs the contents
+            of the file as a Python program. If the argument is not provided, the command starts an
+            interactive session.
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <code>&lt;program_options&gt;</code>
+        </td>
+        <td>
+            (Optional) Flags and arguments for the program in &lt;program_file&gt;.
+        </td>
+    </tr>
+</table>
+<h2 id="Help">monkeyrunner Built-in Help</h2>
+<p>
+    You can generate an API reference for monkeyrunner by running:
+</p>
+<pre>
+monkeyrunner help.py &lt;format&gt; &lt;outfile&gt;
+</pre>
+<p>
+The arguments are:
+</p>
+    <ul>
+        <li>
+            <code>&lt;format&gt;</code> is either <code>text</code> for plain text output
+            or <code>html</code> for HTML output.
+        </li>
+        <li>
+            <code>&lt;outfile&gt;</code> is a path-qualified name for the output file.
+        </li>
+    </ul>
+<h2 id="Plugins">Extending monkeyrunner with Plugins</h2>
+<p>
+    You can extend the monkeyrunner API with classes you write in the Java programming language
+    and build into one or more <code>.jar</code> files. You can use this feature to extend the
+    monkeyrunner API with your own classes or to extend the existing classes. You can also use this
+    feature to initialize the monkeyrunner environment.
+</p>
+<p>
+    To provide a plugin to monkeyrunner, invoke the <code>monkeyrunner</code> command with the
+    <code>-plugin &lt;plugin_jar&gt;</code> argument described in
+    <a href="#table1">table 1</a>.
+</p>
+<p>
+    In your plugin code, you can import and extend the the main monkeyrunner classes
+    <code>MonkeyDevice</code>, <code>MonkeyImage</code>, and <code>MonkeyRunner</code> in
+    <code>com.android.monkeyrunner</code> (see <a href="#APIClasses">The monkeyrunner API</a>).
+</p>
+<p>
+    Note that plugins do not give you access to the Android SDK. You can't import packages
+    such as <code>com.android.app</code>. This is because monkeyrunner interacts with the
+    device or emulator below the level of the framework APIs.
+</p>
+<h3>The plugin startup class</h3>
+<p>
+    The <code>.jar</code> file for a plugin can specify a class that is instantiated before
+    script processing starts. To specify this class, add the key
+    <code>MonkeyRunnerStartupRunner</code> to the <code>.jar</code> file's
+    manifest. The value should be the name of the class to run at startup. The following
+    snippet shows how you would do this within an <code>ant</code> build script:
+</p>
+<pre>
+&lt;jar jarfile=&quot;myplugin&quot; basedir="&#36;&#123;build.dir&#125;&quot;&gt;
+&lt;manifest&gt;
+&lt;attribute name=&quot;MonkeyRunnerStartupRunner&quot; value=&quot;com.myapp.myplugin&quot;/&gt;
+&lt;/manifest&gt;
+&lt;/jar&gt;
+
+
+</pre>
+<p>
+    To get access to monkeyrunner's runtime environment, the startup class can implement
+    <code>com.google.common.base.Predicate&lt;PythonInterpreter&gt;</code>. For example, this
+    class sets up some variables in the default namespace:
+</p>
+<pre>
+package com.android.example;
+
+import com.google.common.base.Predicate;
+import org.python.util.PythonInterpreter;
+
+public class Main implements Predicate&lt;PythonInterpreter&gt; {
+    &#64;Override
+    public boolean apply(PythonInterpreter anInterpreter) {
+
+        /*
+        * Examples of creating and initializing variables in the monkeyrunner environment's
+        * namespace. During execution, the monkeyrunner program can refer to the variables "newtest"
+        * and "use_emulator"
+        *
+        */
+        anInterpreter.set("newtest", "enabled");
+        anInterpreter.set("use_emulator", 1);
+
+        return true;
+    }
+}
+</pre>
diff --git a/docs/html/tools/help/proguard.jd b/docs/html/tools/help/proguard.jd
new file mode 100644
index 0000000..1da94ba
--- /dev/null
+++ b/docs/html/tools/help/proguard.jd
@@ -0,0 +1,189 @@
+page.title=ProGuard
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#enabling">Enabling ProGuard</a></li>
+
+        <li><a href="#configuring">Configuring ProGuard</a></li>
+
+        <li>
+          <a href="#decoding">Decoding Obfuscated Stack Traces</a>
+
+          <ol>
+            <li><a href="#considerations">Debugging considerations for published
+            applications</a></li>
+          </ol>
+        </li>
+      </ol>
+
+      <h2>See also</h2>
+
+      <ol>
+        <li><a href="http://proguard.sourceforge.net/manual/introduction.html">ProGuard
+        Manual &raquo;</a></li>
+
+        <li><a href="http://proguard.sourceforge.net/manual/retrace/introduction.html">ProGuard
+        ReTrace Manual &raquo;</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>The ProGuard tool shrinks, optimizes, and obfuscates your code by removing unused code and
+  renaming classes, fields, and methods with semantically obscure names. The result is a smaller
+  sized <code>.apk</code> file that is more difficult to reverse engineer. Because ProGuard makes your
+  application harder to reverse engineer, it is important that you use it
+  when your application utilizes features that are sensitive to security like when you are
+  <a href="{@docRoot}guide/google/play/licensing/index.html">Licensing Your Applications</a>.</p>
+
+  <p>ProGuard is integrated into the Android build system, so you do not have to invoke it
+  manually. ProGuard runs only when you build your application in release mode, so you do not 
+  have to deal with obfuscated code when you build your application in debug mode. 
+  Having ProGuard run is completely optional, but highly recommended.</p>
+  
+  <p>This document describes how to enable and configure ProGuard as well as use the
+  <code>retrace</code> tool to decode obfuscated stack traces.</p>
+
+  <h2 id="enabling">Enabling ProGuard</h2>
+
+  <p>When you create an Android project, a <code>proguard.cfg</code> file is automatically
+  generated in the root directory of the project. This file defines how ProGuard optimizes and
+  obfuscates your code, so it is very important that you understand how to customize it for your
+  needs. The default configuration file only covers general cases, so you most likely have to edit
+  it for your own needs. See the following section about <a href="#configuring">Configuring ProGuard</a> for information on 
+  customizing the ProGuard configuration file.</p>
+
+  <p>To enable ProGuard so that it runs as part of an Ant or Eclipse build, set the
+  <code>proguard.config</code> property in the <code>&lt;project_root&gt;/project.properties</code>
+  file. The path can be an absolute path or a path relative to the project's root.</p>
+<p>If you left the <code>proguard.cfg</code> file in its default location (the project's root directory),
+you can specify its location like this:</p>
+<pre class="no-pretty-print">
+proguard.config=proguard.cfg
+</pre>
+<p>
+You can also move the the file to anywhere you want, and specify the absolute path to it:
+</p>
+<pre class="no-pretty-print">
+proguard.config=/path/to/proguard.cfg
+</pre>
+
+
+  <p>When you build your application in release mode, either by running <code>ant release</code> or
+  by using the <em>Export Wizard</em> in Eclipse, the build system automatically checks to see if
+  the <code>proguard.config</code> property is set. If it is, ProGuard automatically processes
+  the application's bytecode before packaging everything into an <code>.apk</code> file. Building in debug mode
+  does not invoke ProGuard, because it makes debugging more cumbersome.</p>
+
+  <p>ProGuard outputs the following files after it runs:</p>
+
+  <dl>
+    <dt><code>dump.txt</code></dt>
+    <dd>Describes the internal structure of all the class files in the <code>.apk</code> file</dd>
+
+    <dt><code>mapping.txt</code></dt>
+    <dd>Lists the mapping between the original and obfuscated class, method, and field names. 
+    This file is important when you receive a bug report from a release build, because it 
+    translates the obfuscated stack trace back to the original class, method, and member names.
+    See <a href="#decoding">Decoding Obfuscated Stack Traces</a> for more information.</dd>
+
+    <dt><code>seeds.txt</code></dt>
+    <dd>Lists the classes and members that are not obfuscated</dd>
+
+    <dt><code>usage.txt</code></dt>
+    <dd>Lists the code that was stripped from the <code>.apk</code></dd>
+  </ul>
+
+  <p>These files are located in the following directories:</p>
+
+  <ul>
+    <li><code>&lt;project_root&gt;/bin/proguard</code> if you are using Ant.</li>
+
+    <li><code>&lt;project_root&gt;/proguard</code> if you are using Eclipse.</li>
+  </ul>
+
+  
+  <p class="caution"><strong>Caution:</strong> Every time you run a build in release mode, these files are
+  overwritten with the latest files generated by ProGuard. Save a copy of them each time you release your
+  application in order to de-obfuscate bug reports from your release builds. 
+  For more information on why saving these files is important, see 
+  <a href="#considerations">Debugging considerations for published applications</a>.
+  </p>
+
+  <h2 id="configuring">Configuring ProGuard</h2>
+
+  <p>For some situations, the default configurations in the <code>proguard.cfg</code> file will
+  suffice. However, many situations are hard for ProGuard to analyze correctly and it might remove code
+  that it thinks is not used, but your application actually needs. Some examples include:</p>
+
+  <ul>
+    <li>a class that is referenced only in the <code>AndroidManifest.xml</code> file</li>
+
+    <li>a method called from JNI</li>
+
+    <li>dynamically referenced fields and methods</li>
+  </ul>
+
+  <p>The default <code>proguard.cfg</code> file tries to cover general cases, but you might
+  encounter exceptions such as <code>ClassNotFoundException</code>, which happens when ProGuard
+  strips away an entire class that your application calls.</p>
+
+  <p>You can fix errors when ProGuard strips away your code by adding a <code>-keep</code> line in
+  the <code>proguard.cfg</code> file. For example:</p>
+  <pre>
+-keep public class &lt;MyClass&gt;
+</pre>
+
+  <p>There are many options and considerations when using the <code>-keep</code> option, so it is
+  highly recommended that you read the <a href="http://proguard.sourceforge.net/manual/introduction.html">ProGuard
+  Manual</a> for more information about customizing your configuration file. The <a href=
+  "http://proguard.sourceforge.net/manual/usage.html#keepoverview">Overview of Keep options</a> and
+  <a href="http://proguard.sourceforge.net/index.html#/manual/examples.html">Examples section</a>
+  are particularly helpful. The <a href=
+  "http://proguard.sourceforge.net/manual/troubleshooting.html">Troubleshooting</a> section of the
+  ProGuard Manual outlines other common problems you might encounter when your code gets stripped
+  away.</p>
+
+  <h2 id="decoding">Decoding Obfuscated Stack Traces</h2>
+
+  <p>When your obfuscated code outputs a stack trace, the method names are obfuscated, which makes
+  debugging hard, if not impossible. Fortunately, whenever ProGuard runs, it outputs a
+  <code>&lt;project_root&gt;/bin/proguard/mapping.txt</code> file, which shows you the original
+  class, method, and field names mapped to their obfuscated names.</p>
+
+  <p>The <code>retrace.bat</code> script on Windows or the <code>retrace.sh</code> script on Linux
+  or Mac OS X can convert an obfuscated stack trace to a readable one. It is located in the
+  <code>&lt;sdk_root&gt;/tools/proguard/</code> directory. The syntax for executing the 
+  <code>retrace</code> tool is:</p>
+  <pre>retrace.bat|retrace.sh [-verbose] mapping.txt [&lt;stacktrace_file&gt;]</pre>
+  <p>For example:</p>
+  
+  <pre>retrace.bat -verbose mapping.txt obfuscated_trace.txt</pre>
+  
+  <p>If you do not specify a value for <em>&lt;stacktrace_file&gt;</em>, the <code>retrace</code> tool reads
+  from standard input.</p>
+
+  <h3 id="considerations">Debugging considerations for published applications</h3>
+
+  <p>Save the <code>mapping.txt</code> file for every release that you publish to your users. 
+  By retaining a copy of the <code>mapping.txt</code> file for each release build, 
+  you ensure that you can debug a problem if a user encounters a bug and submits an obfuscated stack trace.
+  A project's <code>mapping.txt</code> file is overwritten every time you do a release build, so you must be
+  careful about saving the versions that you need.</p>
+
+  <p>For example, say you publish an application and continue developing new features of
+  the application for a new version. You then do a release build using ProGuard soon after. The
+  build overwrites the previous <code>mapping.txt</code> file. A user submits a bug report
+  containing a stack trace from the application that is currently published. You no longer have a way 
+  of debugging the user's stack trace, because the <code>mapping.txt</code> file associated with the version
+  on the user's device is gone. There are other situations where your <code>mapping.txt</code> file can be overwritten, so
+  ensure that you save a copy for every release that you anticipate you have to debug.</p>
+
+  <p>How you save the <code>mapping.txt</code> file is your decision. For example, you can rename them to
+  include a version or build number, or you can version control them along with your source
+  code.</p>
\ No newline at end of file
diff --git a/docs/html/guide/developing/tools/sqlite3.jd b/docs/html/tools/help/sqlite3.jd
similarity index 100%
rename from docs/html/guide/developing/tools/sqlite3.jd
rename to docs/html/tools/help/sqlite3.jd
diff --git a/docs/html/tools/help/traceview.jd b/docs/html/tools/help/traceview.jd
new file mode 100644
index 0000000..6555ac0
--- /dev/null
+++ b/docs/html/tools/help/traceview.jd
@@ -0,0 +1,16 @@
+page.title=Traceview
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<p>Traceview is a graphical viewer for execution logs saved by your application. 
+Traceview can help you debug your application and profile its performance.</p>
+
+<p>To start Traceview, enter the following command from the SDK <code>tools/</code> directory:</p>
+  <pre>traceview</pre>
+</ol>
+
+<p>For more information on how to use Traceview, see 
+<a href="{@docRoot}tools/debugging/debugging-tracing.html">Profiling with Traceview and dmtracedump</a>
+</p>
+
diff --git a/docs/html/tools/help/zipalign.jd b/docs/html/tools/help/zipalign.jd
new file mode 100644
index 0000000..184cdcb
--- /dev/null
+++ b/docs/html/tools/help/zipalign.jd
@@ -0,0 +1,67 @@
+page.title=zipalign
+parent.title=Tools
+parent.link=index.html
+@jd:body
+
+<p>zipalign is an archive alignment tool that provides important
+optimization to Android application (.apk) files. 
+The purpose is to ensure that all uncompressed data starts
+with a particular alignment relative to the start of the file.  Specifically,
+it causes all uncompressed data within the .apk, such as images or raw files,
+to be aligned on 4-byte boundaries. This
+allows all portions to be accessed directly with {@code mmap()} even if they
+contain binary data with alignment restrictions. 
+The benefit is a reduction in the amount of RAM consumed 
+when running the application.</p>
+
+<p>This tool should always be used to align your .apk file before 
+distributing it to end-users. The Android build tools can handle
+this for you. When using Eclipse with the ADT plugin, the Export Wizard
+will automatically zipalign your .apk after it signs it with your private key. 
+The build scripts used
+when compiling your application with Ant will also zipalign your .apk,
+as long as you have provided the path to your keystore and the key alias in
+your project {@code ant.properties} file, so that the build tools 
+can sign the package first.</p>
+
+<p class="caution"><strong>Caution:</strong> zipalign must only be performed
+<strong>after</strong> the .apk file has been signed with your private key.
+If you perform zipalign before signing, then the signing procedure will undo
+the alignment. Also, do not make alterations to the aligned package.
+Alterations to the archive, such as renaming or deleting entries, will
+potentially disrupt the alignment of the modified entry and all later
+entries. And any files added to an "aligned" archive will not be aligned.</p>
+
+<p>The adjustment is made by altering the size of
+the "extra" field in the zip Local File Header sections.  Existing data
+in the "extra" fields may be altered by this process.</p>
+
+<p>For more information about how to use zipalign when building your 
+application, please read <a href="{@docRoot}tools/publishing/app-signing.html">Signing
+Your Application</a>.</p>
+
+
+<h3>Usage</h3>
+
+<p>To align {@code infile.apk} and save it as {@code outfile.apk}:</p>
+
+<pre>zipalign [-f] [-v] &lt;alignment> infile.apk outfile.apk</pre>
+
+<p>To confirm the alignment of {@code existing.apk}:</p>
+
+<pre>zipalign -c -v &lt;alignment> existing.apk</pre>
+
+<p>The {@code &lt;alignment>} is an integer that defines the byte-alignment boundaries. 
+This must always be 4 (which provides 32-bit alignment) or else it effectively 
+does nothing.</p>
+
+<p>Flags:</p>
+
+<ul>
+  <li>{@code -f} : overwrite existing outfile.zip</li>
+  <li>{@code -v} : verbose output</li>
+  <li>{@code -c} : confirm the alignment of the given file</li>
+</ul>
+
+
+
diff --git a/docs/html/tools/index.jd b/docs/html/tools/index.jd
new file mode 100644
index 0000000..929f849
--- /dev/null
+++ b/docs/html/tools/index.jd
@@ -0,0 +1,96 @@
+page.title=Developer Tools
+@jd:body
+
+    
+<img src="{@docRoot}images/tools-home.png" style="float:right;" height="415" width="763" />
+
+<div style="position:relative;height:0">
+<div style="position:absolute;width:420px"> 
+  <p>The Android Developer Tools (ADT) plugin for Eclipse provides
+    a professional-grade development environment for building
+  Android apps. It's a full Java IDE with advanced features to help you build, test, debug,
+  and package your Android apps. </p>
+  <p>Free, open-source, and runs on most major OS platforms.<br>To get started, 
+  <a href="{@docRoot}sdk/index.html">download the Android SDK.</a></p>
+</div>
+</div>
+
+<div style="margin-top:20px;"></div>
+
+<div class="col-6">
+<h3>Full Java IDE</h3>
+
+  <ul>
+    <li>Android-specific refactoring, quick fixes, integrated navigation between Java and Android XML resources.</li> 
+    <li>Enhanced XML editors for Android XML resources</li> 
+    <li>Static analysis tools to catch performance, usability, and correctness problems</li> 
+    <li>Build support for complex projects, command-line support for CI through Ant. Includes ProGuard and app-signing. </li> 
+  </ul>
+</div>
+
+<div class="col-6">
+<h3>Graphical UI Builders</h3>
+    
+  <ul>
+    <li>Build rich Android UI with drag and drop. 
+    <li>Vsualize your UI on tablets, phones, and other devices. Switch themes, locales, even plaform versions instantly, without building.</li>
+    <li>Visual refactoring lets you extracts layout for inclusion, convert layouts, extract styles</li>
+    <li>Editor support for working with custom UI components</li>
+  </ul>
+</div>
+
+<div class="col-6" style="clear:both">
+<h3>Develop on Hardware Devices</h3>
+
+  <ul>
+    <li>Use any commercial Android hardware device or multiple devices.</li> 
+    <li>Deploy your app to connected devices directy from the IDE</li> 
+    <li>Live, on-device debugging, testing, and profiling</li> 
+  </ul>
+</div>
+
+<div class="col-6">
+<h3>Develop on Virtual Devices</h3>
+  <ul>
+    <li>Emulate any device. Use custom screen sizes, keyboards, and other hardware components. </li>
+    <li>Advanced hardware emulation, including camera, sensors, multitouch, telephony.</li>
+    <li>Develop and test for broadest compatibility at lowest cost.</li>
+  </ul>
+
+</div>
+
+<div style="margin-top:20px;"></div>
+
+<div class="col-5">
+<h3>Powerful Debugging</h3>
+
+  <ul>
+    <li>Full Java debugger with on-device debugging and Android-specidic tools</li>
+    <li>Built-in memory analysis, performance/CPU profiling.</li>
+    <li>Graphical tools for debugging and optimizing UI, runtime inspecton of UI structure and performance.</li>
+    <li>Runtime graphical analysis of your app's network bandwidth usage.</li> 
+  </ul>
+</div>
+
+<div style="float:right;width:360px;padding-top:1em;">
+  <img src="{@docRoot}images/debugging-tall.png" align="left">
+</div>
+
+
+<div class="col-6">
+<h3>Testing</h3>
+    
+  <ul>
+    <li>Fully instrumentated, scriptable test environment.</li>
+    <li>Integrated reports using standard test UI.</li>
+    <li>Create and run unit tests on hardware devices or emulator.</li>
+  </ul>
+
+<h3>Native Development</h3>
+    
+  <ul>
+    <li>Support for compiling and packaging existing code written in C or C++.</li>
+    <li>Support for packaging multiple architectures in a single binary, for broad compatibility.</li>
+  </ul>
+</div>
+
diff --git a/docs/html/tools/other-ide.html b/docs/html/tools/other-ide.html
new file mode 100644
index 0000000..2bfe876
--- /dev/null
+++ b/docs/html/tools/other-ide.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/projects/projects-cmdline.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/projects/projects-cmdline.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/othertools.html b/docs/html/tools/othertools.html
new file mode 100644
index 0000000..ed45ccd
--- /dev/null
+++ b/docs/html/tools/othertools.html
@@ -0,0 +1,10 @@
+<html>
+<head>
+<meta http-equiv="refresh" content="0;url=http://developer.android.com/tools/index.html">
+<title>Redirecting...</title>
+</head>
+<body>
+<p>You should be redirected. Please <a
+href="http://developer.android.com/tools/index.html">click here</a>.</p>
+</body>
+</html>
\ No newline at end of file
diff --git a/docs/html/tools/projects/index.jd b/docs/html/tools/projects/index.jd
new file mode 100644
index 0000000..6a49ac9
--- /dev/null
+++ b/docs/html/tools/projects/index.jd
@@ -0,0 +1,446 @@
+page.title=Managing Projects
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#ApplicationProjects">Android Projects</a></li>
+
+        <li><a href="#LibraryProjects">Library Projects</a>
+          <ol>
+            <li><a href="#considerations">Development considerations</a></li>
+          </ol>
+        </li>
+
+        <li><a href="#TestProjects">Test Projects</a></li>
+
+        <li><a href="#testing">Testing a Library Project</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Projects act as containers for storing things such as code and resource files. The SDK tools
+  expect your projects to follow a specific structure so it can compile and package your
+  application correctly, so it is highly recommended that you create them with Eclipse and ADT or
+  with the <code>android</code> tool on the command line. There are three types of projects, and
+  they all share the same general structure but differ in function:</p>
+
+  <dl>
+    <dt><strong>Android Projects</strong></dt>
+
+    <dd>An Android project is the container for your application's source code, resource files, and
+    files such as the Ant build and Android Manifest file. An application project is the main type
+    of project and the contents are eventually built into an <code>.apk</code> file that you install on a
+    device.</dd>
+
+    <dt><strong>Test Projects</strong></dt>
+
+    <dd>These projects contain code to test your application projects and are built into
+    applications that run on a device.</dd>
+
+    <dt><strong>Library Projects</strong></dt>
+
+    <dd>These projects contain shareable Android source code and resources that you can reference
+    in Android projects. This is useful when you have common code that you want to reuse.
+    Library projects cannot be installed onto a device, however, they are
+    pulled into the <code>.apk</code> file at build time.</dd>
+  </dl>
+
+  <p>When you use the Android development tools to create a new project, the essential files and
+  folders will be created for you. There are only a handful of files and folders generated for you,
+  and some of them depend on whether you use the Eclipse plugin or the {@code android} tool to
+  generate your project. As your application grows in complexity, you might require new kinds of
+  resources, directories, and files.</p>
+
+  <h2 id="ApplicationProjects">Android Projects</h2>
+
+  <p>Android projects are the projects that eventually get built into an <code>.apk</code> file that you install
+  onto a device. They contain things such as application source code and resource files.
+  Some are generated for you by default, while others should be created if
+  required. The following directories and files comprise an Android project:</p>
+
+  <dl>
+    <dt><code>src/</code></dt>
+
+    <dd>Contains your stub Activity file, which is stored at
+    <code>src<em>/your/package/namespace/ActivityName</em>.java</code>. All other source code
+     files (such as <code>.java</code> or <code>.aidl</code> files) go here as well.</dd>
+
+    <dt><code>bin</code></dt>
+
+    <dd>Output directory of the build. This is where you can find the final <code>.apk</code> file and other
+    compiled resources.</dd>
+
+    <dt><code>jni</code></dt>
+
+    <dd>Contains native code sources developed using the Android NDK. For more information, see the
+    <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK documentation</a>.</dd>
+
+    <dt><code>gen/</code></dt>
+
+    <dd>Contains the Java files generated by ADT, such as your <code>R.java</code> file and
+    interfaces created from AIDL files.</dd>
+
+    <dt><code>assets/</code></dt>
+
+    <dd>This is empty. You can use it to store raw asset files. Files that you save here are
+    compiled into an <code>.apk</code> file as-is, and the original filename is preserved. You can navigate this
+    directory in the same way as a typical file system using URIs and read files as a stream of
+    bytes using the the {@link android.content.res.AssetManager}. For example, this is a good
+    location for textures and game data.</dd>
+
+    <dt><code>res/</code></dt>
+
+    <dd>
+      Contains application resources, such as drawable files, layout files, and string values. See
+      <a href="{@docRoot}guide/topics/resources/index.html">Application Resources</a> for more
+      information.
+
+      <dl>
+        <dt><code>anim/</code></dt>
+
+        <dd>For XML files that are compiled into animation objects. See the <a href=
+        "{@docRoot}guide/topics/resources/animation-resource.html">Animation</a> resource
+        type.</dd>
+
+        <dt><code>color/</code></dt>
+
+        <dd>For XML files that describe colors. See the <a href=
+        "{@docRoot}guide/topics/resources/color-list-resource.html">Color Values</a> resource
+        type.</dd>
+
+        <dt><code>drawable/</code></dt>
+
+        <dd>For bitmap files (PNG, JPEG, or GIF), 9-Patch image files, and XML files that describe
+        Drawable shapes or a Drawable objects that contain multiple states (normal, pressed, or
+        focused). See the <a href=
+        "{@docRoot}guide/topics/resources/drawable-resource.html">Drawable</a> resource type.</dd>
+
+        <dt><code>layout/</code></dt>
+
+        <dd>XML files that are compiled into screen layouts (or part of a screen). See the <a href=
+        "{@docRoot}guide/topics/resources/layout-resource.html">Layout</a> resource type.</dd>
+
+        <dt><code>menu/</code></dt>
+
+        <dd>For XML files that define application menus.
+        See the <a href="{@docRoot}guide/topics/resources/menu-resource.html">Menus</a>
+        resource type.</dd>
+
+        <dt><code>raw/</code></dt>
+
+        <dd>For arbitrary raw asset files. Saving asset files here instead of in the
+        <code>assets/</code> directory only differs in the way that you access them. These files
+        are processed by aapt and must be referenced from the application using a resource
+        identifier in the {@code R} class. For example, this is a good place for media, such as MP3
+        or Ogg files.</dd>
+
+        <dt><code>values/</code></dt>
+
+        <dd>For XML files that are compiled into many kinds of resource. Unlike other resources in
+        the <code>res/</code> directory, resources written to XML files in this folder are not
+        referenced by the file name. Instead, the XML element type controls how the resources is
+        defined within them are placed into the {@code R} class.</dd>
+
+        <dt><code>xml/</code></dt>
+
+        <dd>For miscellaneous XML files that configure application components. For example, an XML
+        file that defines a {@link android.preference.PreferenceScreen}, {@link
+        android.appwidget.AppWidgetProviderInfo}, or <a href=
+        "{@docRoot}reference/android/app/SearchManager.html#SearchabilityMetadata">Searchability
+        Metadata</a>. See <a href="{@docRoot}guide/topics/resources/index.html">Application Resources</a>
+        for more information about configuring these application components.</dd>
+      </dl>
+    </dd>
+
+    <dt><code>libs/</code></dt>
+
+    <dd>Contains private libraries.</dd>
+
+    <dt><code>AndroidManifest.xml</code></dt>
+
+    <dd>The control file that describes the nature of the application and each of its components.
+    For instance, it describes: certain qualities about the activities, services, intent receivers,
+    and content providers; what permissions are requested; what external libraries are needed; what
+    device features are required, what API Levels are supported or required; and others. See the
+    <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>
+    documentation for more information</dd>
+
+    <dt><code>project.properties</code></dt>
+
+    <dd>This file contains project settings, such as the build target. This file is integral to
+    the project, so maintain it in a source revision control system. To edit project
+    properties in Eclipse, right-click the project folder and select
+    <strong>Properties</strong>.</dd>
+
+    <dt><code>local.properties</code></dt>
+
+    <dd>Customizable computer-specific properties for the build system. If you use Ant to build
+    the project, this contains the path to the SDK installation. Because the content of the file
+    is specific to the local installation of the SDK, the <code>local.properties</code> should not
+be maintained in a source revision control system. If you use Eclipse, this file is not
+used.</dd>
+
+    <dt><code>ant.properties</code></dt>
+
+    <dd>Customizable properties for the build system. You can edit this file to override default
+    build settings used by Ant and also provide the location of your keystore and key alias so that
+    the build tools can sign your application when building in release mode. This file is integral
+    to the project, so maintain it in a source revision control system. If you use Eclipse, this
+    file is not used.</dd>
+
+    <dt><code>build.xml</code></dt>
+
+    <dd>The Ant build file for your project. This is only applicable for projects that
+    you build with Ant.</dd>
+
+  </dl>
+
+  <h2 id="LibraryProjects">Library Projects</h2>
+
+  <div class="sidebox-wrapper">
+    <div class="sidebox">
+      <h2>Library project example code</h2>
+
+      <p>The SDK includes an example application called <code>TicTacToeMain</code> that shows how a dependent
+      application can use code and resources from an Android Library project. The TicTacToeMain
+      application uses code and resources from an example library project called TicTacToeLib.</p>
+
+      <p>To download the sample applications and run them as projects in
+      your environment, use the <em>Android SDK Manager</em> to download the "Samples for
+      SDK API 8" (or later) package into your SDK.</p>
+
+      <p>For more information and to browse the code of the samples, see
+      the <a href="{@docRoot}resources/samples/TicTacToeMain/index.html">TicTacToeMain
+      application</a>.</p>
+    </div>
+  </div>
+
+    <p>An Android <em>library project</em> is a development project that holds shared Android
+    source code and resources. Other Android application projects can reference the library project
+    and, at build time, include its compiled sources in their <code>.apk</code> files. Multiple
+    application projects can reference the same library project and any single application project
+    can reference multiple library projects.</p>
+
+    <p class="note"><strong>Note:</strong> You need SDK Tools r14 or newer to use the new library
+    project feature that generates each library project into its own JAR file.
+    You can download the tools and platforms using the
+    <em>Android SDK Manager</em>, as described in
+    <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+
+    <p>If you have source code and resources that are common to multiple Android projects, you
+    can move them to a library project so that it is easier to maintain across applications and
+    versions. Here are some common scenarios in which you could make use of library projects:</p>
+
+    <ul>
+      <li>If you are developing multiple related applications that use some of the same components,
+      you move the redundant components out of their respective application projects and create a
+      single, reuseable set of the same components in a library project.</li>
+
+      <li>If you are creating an application that exists in both free and paid versions. You move
+      the part of the application that is common to both versions into a library project. The two
+      dependent projects, with their different package names, will reference the library project
+      and provide only the difference between the two application versions.</li>
+    </ul>
+
+    <p>Structurally, a library project is similar to a standard Android application project. For
+    example, it includes a manifest file at the project root, as well as <code>src/</code>,
+    <code>res/</code> and similar directories. The project can contain the same types of source
+    code and resources as a standard Android project, stored in the same way. For example, source
+    code in the library project can access its own resources through its <code>R</code> class.</p>
+
+    <p>However, a library project differs from an standard Android application project in that you
+    cannot compile it directly to its own <code>.apk</code> and run it on an Android device.
+    Similarly, you cannot export the library project to a self-contained JAR file, as you would do
+    for a true library. Instead, you must compile the library indirectly, by referencing the
+    library in the dependent application and building that application.</p>
+
+    <p>When you build an application that depends on a library project, the SDK tools compile the
+    library into a temporary JAR file and uses it in the main project, then uses the
+    result to generate the <code>.apk</code>. In cases where a resource ID is defined in both the
+    application and the library, the tools ensure that the resource declared in the application gets
+    priority and that the resource in the library project is not compiled into the application
+    <code>.apk</code>. This gives your application the flexibility to either use or redefine any
+    resource behaviors or values that are defined in any library.</p>
+
+    <p>To organize your code further, your application can add references to multiple library
+    projects, then specify the relative priority of the resources in each library. This lets you
+    build up the resources actually used in your application in a cumulative manner. When two
+    libraries referenced from an application define the same resource ID, the tools select the
+    resource from the library with higher priority and discard the other.</p>
+
+    <p>Once you have added references to library projects to your Android project,
+    you can set their relative priority. At build time, the
+    libraries are merged with the application one at a time, starting from the lowest priority to
+    the highest.</p>
+
+    <p>Library projects can reference other library projects and can import an external library
+    (JAR) in the  normal way.</p>
+
+  <h3 id="considerations">Development considerations</h3>
+
+  <p>As you develop your library project and dependent applications, keep the points listed below
+  in mind:</p>
+
+  <ul>
+  <li><p><strong>Resource conflicts</strong></p>
+  <p>Since the tools merge the resources of a library project with those of a dependent application
+  project, a given resource ID might be defined in both projects. In this case, the tools select
+  the resource from the application, or the library with highest priority, and discard the other
+  resource. As you develop your applications, be aware that common resource IDs are likely to be
+  defined in more than one project and will be merged, with the resource from the application or
+  highest-priority library taking precedence.</p>
+  </li>
+
+  <li><p><strong>Use prefixes to avoid resource conflicts</strong></p>
+
+  <p>To avoid resource conflicts for common resource IDs, consider using a prefix or other
+  consistent naming scheme that is unique to the project (or is unique across all projects).</p></li>
+
+  <li><p><strong>You cannot export a library project to a JAR file</strong></p>
+
+  <p>A library cannot be distributed as a binary file (such as a JAR file). This will
+be added in a future
+  version of the SDK Tools.</p></li>
+
+  <li><p><strong>A library project can include a JAR library</strong></p>
+
+  <p>You can develop a library project that itself includes a JAR library, however you need to
+  manually edit the dependent application project's build path and add a path to the JAR file.</p></li>
+
+  <li><p><strong>A library project can depend on an external JAR library</strong></p>
+
+  <p>You can develop a library project that depends on an external library (for example, the Maps
+  external library). In this case, the dependent application must build against a target that
+  includes the external library (for example, the Google APIs Add-On). Note also that both the
+  library project and the dependent application must declare the external library in their manifest
+  files, in a <a href=
+  "{@docRoot}guide/topics/manifest/uses-library-element.html"><code>&lt;uses-library&gt;</code></a>
+  element.</p></li>
+
+  <li> <p><strong>Library projects cannot include raw assets</strong></p>
+
+  <p>The tools do not support the use of raw asset files (saved in the <code>assets/</code> directory)
+  in a library project. Any asset resources
+  used by an application must be stored in the <code>assets/</code> directory of the application
+  project itself. However, resource files saved in the
+  <code>res/</code> directory are supported.</p></li>
+
+  <li><p><strong>Platform version must be lower than or equal to the Android project</strong></p>
+
+  <p>A library is compiled as part of the dependent application project, so the API used in the
+  library project must be compatible with the version of the Android library used to compile the
+  application project. In general, the library project should use an <a href=
+  "{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level</a> that is the same as &mdash; or lower
+  than &mdash; that used by the application. If the library project uses an API level that is
+  higher than that of the application, the application project will not compile. It is
+  perfectly acceptable to have a library that uses the Android 1.5 API (API level 3) and that is
+  used in an Android 1.6 (API level 4) or Android 2.1 (API level 7) project, for instance.</p></li>
+
+  <li> <p><strong>No restriction on library package names</strong></p>
+
+  <p>There is no requirement for the package name of a library to be the same as that of
+  applications that use it.</p></li>
+
+  <li><p><strong>Each library project creates its own R class </strong></p>
+
+  <p>When you build the dependent application project, library projects are compiled and
+  merged with the application project. Each library has its own <code>R</code> class, named according
+  to the library's package name. The <code>R</code> class generated from main
+  project and the library project is created in all the packages that are needed including the main
+  project's package and the libraries' packages.</p></li>
+
+  <li><p><strong>Library project storage location</strong></p>
+
+  <p>There are no specific requirements on where you should store a library project, relative to a
+  dependent application project, as long as the application project can reference the library
+  project by a relative link. What is important is that the main
+  project can reference the library project through a relative link.</p></li>
+  </ul>
+
+  <h2 id="TestProjects">Test Projects</h2>
+
+  <p>Test projects contain Android applications that you write using the
+  <a href="{@docRoot}tools/testing/index.html">Testing and
+  Instrumentation framework</a>. The framework is an extension of the JUnit test framework and adds
+  access to Android system objects. The file structure of a test project is the same as an
+  Android project.</p>
+
+  <dl>
+    <dt><code>src/</code></dt>
+
+    <dd>Includes your test source files. Test projects do not require an Activity <code>.java</code>
+    file, but can include one.</dd>
+
+    <dt><code>gen/</code></dt>
+
+    <dd>This contains the Java files generated by ADT, such as your <code>R.java</code> file and
+    interfaces created from AIDL files.</dd>
+
+    <dt><code>assets/</code></dt>
+
+    <dd>This is empty. You can use it to store raw asset files.</dd>
+
+    <dt><code>res/</code></dt>
+
+    <dd>A folder for your application resources, such as drawable files, layout files, string
+    values, etc. See <a href="{@docRoot}guide/topics/resources/index.html">Application
+    Resources</a>.</dd>
+
+    <dt><code>AndroidManifest.xml</code></dt>
+
+    <dd>The Android Manifest for your project. See <a href=
+    "{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a>. Test
+    Projects have a special <a href=
+    "{@docRoot}guide/topics/manifest/instrumentation-element.html">
+    <code>&lt;instrumentation&gt;</code></a>
+    element that connects the test project with the application project.</dd>
+
+    <dt><code>project.properties</code></dt>
+
+    <dd>This file contains project settings, such as the build target and links to the project being
+tested. This file is integral to the project, so maintain it in a source
+revision control system. To edit project properties in Eclipse, right-click the project folder
+and select <strong>Properties</strong>.</dd>
+
+    <dt><code>local.properties</code></dt>
+
+    <dd>Customizable computer-specific properties for the build system. If you use Ant to build
+    the project, this contains the path to the SDK installation. Because the content of the file
+    is specific to the local installation of the SDK, it should not be maintained in a Source
+    Revision Control system. If you use Eclipse, this file is not used.</dd>
+
+    <dt><code>ant.properties</code></dt>
+
+    <dd>Customizable properties for the build system. You can edit this file to override default
+    build settings used by Ant and provide the location to your keystore and key alias, so that the
+    build tools can sign your application when building in release mode. This file is integral to
+    the project, so maintain it in a source revision control system.
+    If you use Eclipse, this file is not used.</dd>
+
+    <dt><code>build.xml</code></dt>
+
+    <dd>The Ant build file for your project. This is only applicable for projects that
+    you build with Ant.</dd>
+  </dl>
+
+  <p>For more information, see the <a href=
+  "{@docRoot}tools/testing/index.html">Testing</a> section.</p>
+
+
+  <h2 id="testing">Testing a Library Project</h2>
+
+  <p>There are two recommended ways of setting up testing on code and resources in a library
+  project:</p>
+
+  <ul>
+    <li>You can set up a <a href="{@docRoot}tools/testing/testing_otheride.html">test
+    project</a> that instruments an application project that depends on the library project. You
+    can then add tests to the project for library-specific features.</li>
+
+    <li>You can set up a standard application project that depends on the library and put
+    the instrumentation in that project. This lets you create a self-contained project that
+    contains both the tests/instrumentations and the code to test.</li>
+  </ul>
diff --git a/docs/html/tools/projects/projects-cmdline.jd b/docs/html/tools/projects/projects-cmdline.jd
new file mode 100644
index 0000000..29d0e57
--- /dev/null
+++ b/docs/html/tools/projects/projects-cmdline.jd
@@ -0,0 +1,295 @@
+page.title=Managing Projects from the Command Line
+parent.title=Managing Projects
+parent.link=index.html
+@jd:body
+
+  <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#CreatingAProject">Creating an Android Project</a></li>
+        <li><a href="#UpdatingAProject">Updating a Project</a></li>
+        <li><a href="#SettingUpLibraryProject">Setting up a Library Project</a>
+          <ol>
+            <li><a href="#CreatingManifestFile">Creating the manifest file</a></li>
+            <li><a href="#UpdatingLibraryProject">Updating a library project</a></li>
+          </ol>
+        </li>
+        <li><a href="#ReferencingLibraryProject">Referencing a Library Project</a>
+          <ol>
+            <li><a href="#DeclaringLibrary">Declaring library components in the manifest
+file</a></li>
+            <li><a href="#depAppBuild">Building a dependent application</a></li>
+          </ol>
+        </li>
+      </ol>
+
+      <h2>See also</h2>
+
+      <ol>
+        <li><a href=
+        "{@docRoot}tools/testing/testing_otheride.html#CreateTestProjectCommand">Testing
+        from Other IDEs</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>The <code>android</code> tool provides you with commands to create all three types of
+  projects. An Android project contains all of the files and resources that are needed to build a
+  project into an .apk file for installation.
+
+  <ul>
+    <li>An Android project contains all of the files and resources that are needed to build a project into
+  an .apk file for installation. You need to create an Android project for any application that you
+  want to eventually install on a device.</li>
+
+  <li>You can also designate an Android project as a library project, which allows it to be shared
+  with other projects that depend on it. Once an Android project is designated as a library
+  project, it cannot be installed onto a device.</li>
+
+  <li>Test projects extend JUnit test functionality to include Android specific functionality. For
+  more information on creating a test project, see <a href=
+  "{@docRoot}tools/testing/testing_otheride.html">Testing from other IDEs</a>.</li>
+  </ul>
+
+
+  <h2 id="CreatingAProject">Creating an Android Project</h2>
+
+  <p>To create an Android project, you must use the <code>android</code> tool. When you create a
+  new project with <code>android</code>, it will generate a project directory with some default
+  application files, stub files, configuration files and a build file.</p>
+
+  <p>To create a new Android project, open a command-line, navigate to the <code>tools/</code>
+  directory of your SDK and run:</p>
+  <pre>
+android create project \
+--target &lt;target_ID&gt; \
+--name &lt;your_project_name&gt; \
+--path path/to/your/project \
+--activity &lt;your_activity_name&gt; \
+--package &lt;your_package_namespace&gt;
+</pre>
+
+  <ul>
+    <li><code>target</code> is the "build target" for your application. It corresponds to an
+    Android platform library (including any add-ons, such as Google APIs) that you would like to
+    build your project against. To see a list of available targets and their corresponding IDs,
+    execute: <code>android list targets</code>.</li>
+
+    <li><code>name</code> is the name for your project. This is optional. If provided, this name
+    will be used for your .apk filename when you build your application.</li>
+
+    <li><code>path</code> is the location of your project directory. If the directory does not
+    exist, it will be created for you.</li>
+
+    <li><code>activity</code> is the name for your default {@link android.app.Activity} class. This
+    class file will be created for you inside
+    <code><em>&lt;path_to_your_project&gt;</em>/src/<em>&lt;your_package_namespace_path&gt;</em>/</code>
+    . This will also be used for your .apk filename unless you provide a <code>name</code>.</li>
+
+    <li><code>package</code> is the package namespace for your project, following the same rules as
+    for packages in the Java programming language.</li>
+  </ul>
+
+  <p>Here's an example:</p>
+  <pre>
+android create project \
+--target 1 \
+--name MyAndroidApp \
+--path ./MyAndroidAppProject \
+--activity MyAndroidAppActivity \
+--package com.example.myandroid
+</pre>
+
+  <p>Once you've created your project, you're ready to begin development. You can move your project
+  folder wherever you want for development, but keep in mind that you must use the <a href=
+  "{@docRoot}tools/help/adb.html">Android Debug Bridge</a> (adb) &mdash; located in the
+  SDK <code>platform-tools/</code> directory &mdash; to send your application to the emulator (discussed
+  later). So you need access between your project solution and the <code>platform-tools/</code> folder.</p>
+
+  <p class="note"><strong>Tip:</strong> Add the <code>platform-tools/</code> as well as the <code>tools/</code> directory
+  to your <code>PATH</code> environment variable.</p>
+
+  <p class="caution"><strong>Caution:</strong> You should refrain from moving the location of the
+  SDK directory, because this will break the SDK location property located in <code>local.properties</code>.
+  If you need to update the SDK location, use the <code>android update project</code> command.
+  See <a href="#UpdatingAProject">Updating a Project</a> for more information.</p>
+
+  <h2 id="UpdatingAProject">Updating a Project</h2>
+
+  <p>If you're upgrading a project from an older version of the Android SDK or want to create a new
+  project from existing code, use the <code>android update project</code> command to update the
+  project to the new development environment. You can also use this command to revise the build
+  target of an existing project (with the <code>--target</code> option) and the project name (with
+  the <code>--name</code> option). The <code>android</code> tool will generate any files and
+  folders (listed in the previous section) that are either missing or need to be updated, as needed
+  for the Android project.</p>
+
+  <p>To update an existing Android project, open a command-line and navigate to the
+  <code>tools/</code> directory of your SDK. Now run:</p>
+  <pre>
+android update project --name &lt;project_name&gt; --target &lt;target_ID&gt;
+--path &lt;path_to_your_project&gt;
+</pre>
+
+  <ul>
+    <li><code>target</code> is the "build target" for your application. It corresponds to an
+    Android platform library (including any add-ons, such as Google APIs) that you would like to
+    build your project against. To see a list of available targets and their corresponding IDs,
+    execute: <code>android list targets</code>.</li>
+
+    <li><code>path</code> is the location of your project directory.</li>
+
+    <li><code>name</code> is the name for the project. This is optional&mdash;if you're not
+    changing the project name, you don't need this.</li>
+  </ul>
+
+  <p>Here's an example:</p>
+  <pre>
+android update project --name MyApp --target 2 --path ./MyAppProject
+</pre>
+
+  <h2 id="SettingUpLibraryProject">Setting up a Library Project</h2>
+
+  <p>A library project is a standard Android project, so you can create a new one in the same way
+  as you would a new application project. Specifically, you can use the <code>android</code> tool
+  to generate a new library project with all of the necessary files and folders.</p>
+
+  <p>To create a new library project, navigate to the <code>&lt;sdk&gt;/tools/</code> directory and
+  use this command:</p>
+  <pre class="no-pretty-print">
+android create lib-project --name &lt;your_project_name&gt; \
+--target &lt;target_ID&gt; \
+--path path/to/your/project \
+--package &lt;your_library_package_namespace&gt;
+</pre>
+
+  <p>The <code>create lib-project</code> command creates a standard project structure that includes
+  preset property that indicates to the build system that the project is a library. It does this by
+  adding this line to the project's <code>project.properties</code> file:</p>
+  <pre class="no-pretty-print">
+android.library=true
+</pre>
+
+  <p>Once the command completes, the library project is created and you can begin moving source
+  code and resources into it, as described in the sections below.</p>
+
+  <p>If you want to convert an existing application project to a library project, so that other
+  applications can use it, you can do so by adding a the <code>android.library=true</code> property
+  to the application's <code>project.properties</code> file.</p>
+
+  <h3 id="CreatingManifestFile">Creating the manifest file</h3>
+
+  <p>A library project's manifest file must declare all of the shared components that it includes,
+  just as would a standard Android application. For more information, see the documentation for
+  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
+
+  <p>For example, the <a href=
+  "{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a> example library
+  project declares the Activity <code>GameActivity</code>:</p>
+  <pre>
+&lt;manifest&gt;
+  ...
+  &lt;application&gt;
+    ...
+    &lt;activity android:name="GameActivity" /&gt;
+    ...
+  &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+  <h3 id="UpdatingLibraryProject">Updating a library project</h3>
+
+  <p>If you want to update the build properties (build target, location) of the library project,
+  use this command:</p>
+  <pre>
+android update lib-project \
+--target <em>&lt;target_ID&gt;</em> \
+--path <em>path/to/your/project</em>
+</pre>
+
+  <h2 id="ReferencingLibraryProject">Referencing a Library Project</h2>
+
+  <p>If you are developing an application and want to include the shared code or resources from a
+  library project, you can do so easily by adding a reference to the library project in the
+  application project's build properties.</p>
+
+  <p>To add a reference to a library project, navigate to the <code>&lt;sdk&gt;/tools/</code>
+  directory and use this command:</p>
+  <pre>
+android update project \
+--target <em>&lt;target_ID&gt;</em> \
+--path <em>path/to/your/project</em>
+--library <em>path/to/library_projectA</em>
+</pre>
+
+  <p>This command updates the application project's build properties to include a reference to the
+  library project. Specifically, it adds an <code>android.library.reference.<em>n</em></code>
+  property to the project's <code>project.properties</code> file. For example:</p>
+  <pre class="no-pretty-print">
+android.library.reference.1=path/to/library_projectA
+</pre>
+
+  <p>If you are adding references to multiple libraries, note that you can set their relative
+  priority (and merge order) by manually editing the <code>project.properties</code> file and
+  adjusting the each reference's <code>.<em>n</em></code> index as appropriate. For example, assume
+  these references:</p>
+  <pre class="no-pretty-print">
+android.library.reference.1=path/to/library_projectA
+android.library.reference.2=path/to/library_projectB
+android.library.reference.3=path/to/library_projectC
+</pre>
+
+  <p>You can reorder the references to give highest priority to <code>library_projectC</code> in
+  this way:</p>
+  <pre class="no-pretty-print">
+android.library.reference.2=path/to/library_projectA
+android.library.reference.3=path/to/library_projectB
+android.library.reference.1=path/to/library_projectC
+</pre>
+
+  <p>Note that the <code>.<em>n</em></code> index in the references must begin at "1" and increase
+  uniformly without "holes". References appearing in the index after a hole are ignored.</p>
+
+  <p>At build time, the libraries are merged with the application one at a time, starting from the
+  lowest priority to the highest. Note that a library cannot itself reference another library and
+  that, at build time, libraries are not merged with each other before being merged with the
+  application.</p>
+
+  <h3 id="DeclaringLibrary">Declaring library components in the manifest file</h3>
+
+  <p>In the manifest file of the application project, you must add declarations of all components
+  that the application will use that are imported from a library project. For example, you must
+  declare any <code>&lt;activity&gt;</code>, <code>&lt;service&gt;</code>,
+  <code>&lt;receiver&gt;</code>, <code>&lt;provider&gt;</code>, and so on, as well as
+  <code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar elements.</p>
+
+  <p>Declarations should reference the library components by their fully-qualified package names,
+  where appropriate.</p>
+
+  <p>For example, the <a href=
+  "{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a> example
+  application declares the library Activity <code>GameActivity</code> like this:</p>
+  <pre>
+&lt;manifest&gt;
+  ...
+  &lt;application&gt;
+    ...
+    &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
+    ...
+  &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+  <p>For more information about the manifest file, see the documentation for
+  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
+
+  <h3 id="depAppBuild">Building a dependent application</h3>
+
+  <p>To build an application project that depends on one or more library projects, you can use the
+  standard Ant build commands and compile modes, as described in <a href=
+  "{@docRoot}tools/building/index.html">Building and Running</a>. The tools
+compile and merge all libraries referenced by the application as part of
+  compiling the dependent application project. No additional commands or steps are necessary.</p>
+
diff --git a/docs/html/tools/projects/projects-eclipse.jd b/docs/html/tools/projects/projects-eclipse.jd
new file mode 100644
index 0000000..f1972bc
--- /dev/null
+++ b/docs/html/tools/projects/projects-eclipse.jd
@@ -0,0 +1,237 @@
+page.title=Managing Projects from Eclipse with ADT
+parent.title=Managing Projects
+parent.link=index.html
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#CreatingAProject">Creating an Android Project</a></li>
+
+        <li><a href="#SettingUpLibraryProject">Setting up a Library Project</a></li>
+
+        <li><a href="#ReferencingLibraryProject">Referencing a Library Project</a></li>
+      </ol>
+
+      <h2>See also</h2>
+
+      <ol>
+        <li><a href=
+        "{@docRoot}tools/testing/testing_eclipse.html#CreateTestProjectEclipse">Testing
+        from Eclipse with ADT</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>Eclipse and the ADT plugin provide GUIs and wizards to create all three types of projects
+  (Android project, Library project, and Test project):
+  
+  <ul>
+    <li>An Android project contains all of the files and resources that are needed to build a project into
+  an .apk file for installation. You need to create an Android project for any application that you
+  want to eventually install on a device.</li>
+
+  <li>You can also designate an Android project as a library project, which allows it to be shared
+  with other projects that depend on it. Once an Android project is designated as a library
+  project, it cannot be installed onto a device.</li>
+
+  <li>Test projects extend JUnit test functionality to include Android specific functionality. For
+  more information on creating a test project, see <a href=
+  "{@docRoot}tools/testing/testing_eclipse.html">Testing from Eclipse with ADT</a>.</li>
+  </ul>
+
+  <h2 id="CreatingAProject">Creating an Android Project</h2>
+
+  <p>The ADT plugin provides a <em>New Project Wizard</em> that you can use to quickly create a new Android
+  project (or a project from existing code). To create a new project:</p>
+
+  <ol>
+    <li>Select <strong>File</strong> &gt; <strong>New</strong> &gt; <strong>Project</strong>.</li>
+
+    <li>Select <strong>Android</strong> &gt; <strong>Android Project</strong>, and click
+    <strong>Next</strong>.</li>
+
+    <li>Select the contents for the project:
+
+      <ul>
+        <li>Enter a <em>Project Name</em>. This will be the name of the folder where your project
+        is created.</li>
+
+        <li>Under Contents, select <strong>Create new project in workspace</strong>. Select your
+        project workspace location.</li>
+
+        <li>Under Target, select an Android target to be used as the project's Build Target. The
+        Build Target specifies which Android platform you'd like your application built against.
+
+          <p>Select the lowest platform with which your application is compatible.</p>
+
+          <p class="note"><strong>Note:</strong> You can change your the Build Target for your
+          project at any time: Right-click the project in the Package Explorer, select
+          <strong>Properties</strong>, select <strong>Android</strong> and then check the desired
+          Project Target.</p>
+        </li>
+
+        <li>Under Properties, fill in all necessary fields.
+
+          <ul>
+            <li>Enter an <em>Application name</em>. This is the human-readable title for your
+            application &mdash; the name that will appear on the Android device.</li>
+
+            <li>Enter a <em>Package name</em>. This is the package namespace (following the same
+            rules as for packages in the Java programming language) where all your source code will
+            reside.</li>
+
+            <li>Select <em>Create Activity</em> (optional, of course, but common) and enter a name
+            for your main Activity class.</li>
+
+            <li>Enter a <em>Min SDK Version</em>. This is an integer that indicates the minimum API
+            Level required to properly run your application. Entering this here automatically sets
+            the <code>minSdkVersion</code> attribute in the <a href=
+            "{@docRoot}guide/topics/manifest/uses-sdk-element.html">&lt;uses-sdk&gt;</a> of your
+            Android Manifest file. If you're unsure of the appropriate <a href=
+            "{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Level</a> to use, copy the API Level
+            listed for the Build Target you selected in the Target tab.</li>
+          </ul>
+        </li>
+      </ul>
+    </li>
+
+    <li>Click <strong>Finish</strong>.</li>
+  </ol>
+
+  <p class="note"><strong>Tip:</strong> You can also start the New Project Wizard from the
+  <em>New</em> icon in the toolbar.</p>
+
+  <h2 id="SettingUpLibraryProject">Setting up a Library Project</h2>
+
+  <p>A library project is a standard Android project, so you can create a new one in the same way
+  as you would a new application project.</p>
+
+  <p>When you are creating the library project, you can select any application name, package, and
+  set other fields as needed, as shown in figure 1.</p>
+
+  <p>Next, set the project's properties to indicate that it is a library project:</p>
+
+  <ol>
+    <li>In the <strong>Package Explorer</strong>, right-click the library project and select
+    <strong>Properties</strong>.</li>
+
+    <li>In the <strong>Properties</strong> window, select the "Android" properties group at left
+    and locate the <strong>Library</strong> properties at right.</li>
+
+    <li>Select the "is Library" checkbox and click <strong>Apply</strong>.</li>
+
+    <li>Click <strong>OK</strong> to close the <em>Properties</em> window.</li>
+  </ol>
+
+  <p>The new project is now marked as a library project. You can begin moving source code and
+  resources into it, as described in the sections below.</p>
+
+  <p>You can also convert an existing application project into a library. To do so, simply open the
+  Properties for the project and select the "is Library" checkbox. Other application projects can
+  now reference the existing project as a library project.</p>
+  
+  <img src= "{@docRoot}images/developing/adt-props-isLib.png">
+
+  <p class="img-caption"><strong>Figure 1.</strong> Marking a project as an
+     Android library project.</p>
+
+  <h3>Creating the manifest file</h3>
+
+  <p>A library project's manifest file must declare all of the shared components that it includes,
+  just as would a standard Android application. For more information, see the documentation for
+  <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
+
+  <p>For example, the <a href=
+  "{@docRoot}resources/samples/TicTacToeLib/AndroidManifest.html">TicTacToeLib</a> example library
+  project declares the Activity <code>GameActivity</code>:</p>
+  <pre>
+&lt;manifest&gt;
+  ...
+  &lt;application&gt;
+    ...
+    &lt;activity android:name="GameActivity" /&gt;
+    ...
+  &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+  <h2 id="ReferencingLibraryProject">Referencing a library project</h2>
+
+  <p>If you are developing an application and want to include the shared code or resources from a
+  library project, you can do so easily by adding a reference to the library project in the
+  application project's Properties.</p>
+
+  <p>To add a reference to a library project, follow these steps:</p>
+
+  <ol>
+    <li>In the <strong>Package Explorer</strong>, right-click the dependent project and select
+    <strong>Properties</strong>.</li>
+
+    <li>In the <strong>Properties</strong> window, select the "Android" properties group at left
+    and locate the <strong>Library</strong> properties at right.</li>
+
+    <li>Click <strong>Add</strong> to open the <strong>Project Selection</strong> dialog.</li>
+
+    <li>From the list of available library projects, select a project and click
+    <strong>OK</strong>.</li>
+
+    <li>When the dialog closes, click <strong>Apply</strong> in the <strong>Properties</strong>
+    window.</li>
+
+    <li>Click <strong>OK</strong> to close the <strong>Properties</strong> window.</li>
+  </ol>
+
+  <p>As soon as the Properties dialog closes, Eclipse rebuilds the project, including the contents
+  of the library project.</p>
+
+  <p>Figure 2 shows the Properties dialog that lets you add library references and move
+  them up and down in priority.</p><img src="{@docRoot}images/developing/adt-props-libRef.png">
+
+  <p class="img-caption"><strong>Figure 2.</strong> Adding a reference to a
+     library project in the properties of an application project.</p>
+
+  <p>If you are adding references to multiple libraries, note that you can set their relative
+  priority (and merge order) by selecting a library and using the <strong>Up</strong> and
+  <strong>Down</strong> controls. The tools merge the referenced libraries with your application
+  starting from lowest priority (bottom of the list) to highest (top of the list). If more than one
+  library defines the same resource ID, the tools select the resource from the library with higher
+  priority. The application itself has highest priority and its resources are always used in
+  preference to identical resource IDs defined in libraries.</p>
+
+  <h3>Declaring library components in the manifest file</h3>
+
+  <p>In the manifest file of the application project, you must add declarations of all components
+  that the application will use that are imported from a library project. For example, you must
+  declare any <code>&lt;activity&gt;</code>, <code>&lt;service&gt;</code>,
+  <code>&lt;receiver&gt;</code>, <code>&lt;provider&gt;</code>, and so on, as well as
+  <code>&lt;permission&gt;</code>, <code>&lt;uses-library&gt;</code>, and similar elements.</p>
+
+  <p>Declarations should reference the library components by their fully-qualified package names,
+  where appropriate.</p>
+
+  <p>For example, the <a href=
+  "{@docRoot}resources/samples/TicTacToeMain/AndroidManifest.html">TicTacToeMain</a> example
+  application declares the library Activity <code>GameActivity</code> like this:</p>
+  <pre>
+&lt;manifest&gt;
+  ...
+  &lt;application&gt;
+    ...
+    &lt;activity android:name="com.example.android.tictactoe.library.GameActivity" /&gt;
+    ...
+  &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+  <p>For more information about the manifest file, see the documentation for <a href=
+  "{@docRoot}guide/topics/manifest/manifest-intro.html">AndroidManifest.xml</a>.</p>
+
+
+
+
+
+
+
diff --git a/docs/html/tools/publishing/app-signing.jd b/docs/html/tools/publishing/app-signing.jd
new file mode 100644
index 0000000..ac45242
--- /dev/null
+++ b/docs/html/tools/publishing/app-signing.jd
@@ -0,0 +1,618 @@
+page.title=Signing Your Applications
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>All Android apps <em>must</em> be signed</li>
+<li>You can sign with a self-signed key</li>
+<li>How you sign your apps is critical &mdash; read this document carefully</li>
+<li>Determine your signing strategy early in the development process</li>
+</ul>
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#signing">Signing Process</a></li>
+<li><a href="#strategies">Signing Strategies</a></li>
+<li><a href="#setup">Basic Setup for Signing</a></li>
+<li><a href="#debugmode">Signing in Debug Mode</a></li>
+<li><a href="#releasemode">Signing Release Mode</a>
+    <ol>
+    <li><a href="#cert">Obtain a suitable private key</a></li>
+    <li><a href="#releasecompile">Compile the application in release mode</a></li>
+    <li><a href="#signapp">Sign your application with your private key</a></li>
+    <li><a href="#align">Align the final APK package</a></li>
+    <li><a href="#ExportWizard">Compile and sign with Eclipse ADT</a></li>
+    </ol>
+</li>
+<li><a href="#secure-key">Securing Your Private Key</a></li>
+
+</ol>
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>The Android system requires that all installed applications be digitally signed with a
+certificate whose private key is held by the application's developer. The Android system uses the
+certificate as a means of identifying the author of an application and establishing trust
+relationships between applications. The certificate is not used to control which applications the
+user can install. The certificate does not need to be signed by a certificate authority: it is
+perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
+
+<p>The important points to understand about signing Android applications are:</p>
+
+<ul>
+  <li>All applications <em>must</em> be signed. The system will not install an application
+on an emulator or a device if it is not signed.</li>
+  <li>To test and debug your application, the build tools sign your application with a special debug
+    key that is created by the Android SDK build tools.</li>
+  <li>When you are ready to release your application for end-users, you must sign it with a suitable
+    private key. You cannot publish an application that is signed with the debug key generated
+    by the SDK tools.</li>
+  <li>You can use self-signed certificates to sign your applications. No certificate authority is
+    needed.</li>
+  <li>The system tests a signer certificate's expiration date only at install time. If an
+application's signer certificate expires after the application is installed, the application
+will continue to function normally.</li>
+  <li>You can use standard tools &mdash; Keytool and Jarsigner &mdash; to generate keys and
+sign your application {@code .apk} files.</li>
+  <li>After you sign your application for release, we recommend that you use the
+    <code>zipalign</code> tool to optimize the final APK package.</li>
+</ul>
+
+<p>The Android system will not install or run an application that is not signed appropriately. This
+applies wherever the Android system is run, whether on an actual device or on the emulator.
+For this reason, you must <a href="#setup">set up signing</a> for your application before you can
+run it or debug it on an emulator or device.</p>
+
+<h2 id="signing">Signing Process</h3>
+
+<p>The Android build process signs your application differently depending on which build mode you
+use to build your application. There are two build modes: <em>debug mode</em> and <em>release
+mode</em>. You use debug mode when you are developing and testing your application. You use
+release mode when you want to build a release version of your application that you can
+distribute directly to users or publish on an application marketplace such as Google Play.</p>
+
+<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
+(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
+they know the debug key's alias and password. Each time you compile your application in debug mode,
+the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
+sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
+build tools, the tools don't need to prompt you for the debug key's alias and password each time
+you compile.</p>
+
+<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
+you don't have a private key, you can use the Keytool utility to create one for you. When you
+compile your application in release mode, the build tools use your private key along with the
+Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
+private key you use are your own, you will have to provide the password for the keystore and key
+alias.</p>
+
+<p>The debug signing process happens automatically when you run or debug your application using
+Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
+script with the <code>debug</code> option. You can automate the release signing process by using the
+Eclipse Export Wizard or by modifying the Ant build script and building with the
+<code>release</code> option.</p>
+
+<h2 id="strategies">Signing Strategies</h2>
+
+<p>Some aspects of application signing may affect how you approach the development
+of your application, especially if you are planning to release multiple
+applications. </p>
+
+<p>In general, the recommended strategy for all developers is to sign
+all of your applications with the same certificate, throughout the expected
+lifespan of your applications. There are several reasons why you should do so: </p>
+
+<ul>
+<li>Application upgrade &ndash; As you release updates to your application, you
+will want to continue to sign the updates with the same certificate or set of
+certificates, if you want users to upgrade seamlessly to the new version. When
+the system is installing an update to an application, it compares the
+certificate(s) in the new version with those in the existing version. If the
+certificates match exactly, including both the certificate data and order, then
+the system allows the update. If you sign the new version without using matching
+certificates, you will also need to assign a different package name to the
+application &mdash; in this case, the user installs the new version as a
+completely new application. </li>
+
+<li>Application modularity &ndash; The Android system allows applications that
+are signed by the same certificate to run in the same process, if the
+applications so requests, so that the system treats them as a single application.
+In this way you can deploy your application in modules, and users can update
+each of the modules independently if needed.</li>
+
+<li>Code/data sharing through permissions &ndash; The Android system provides
+signature-based permissions enforcement, so that an application can expose
+functionality to another application that is signed with a specified
+certificate. By signing multiple applications with the same certificate and
+using signature-based permissions checks, your applications can share code and
+data in a secure manner. </li>
+
+</ul>
+
+<p>Another important consideration in determining your signing strategy is
+how to set the validity period of the key that you will use to sign your
+applications.</p>
+
+<ul>
+<li>If you plan to support upgrades for a single application, you should ensure
+that your key has a validity period that exceeds the expected lifespan of
+that application. A validity period of 25 years or more is recommended.
+When your key's validity period expires, users will no longer be
+able to seamlessly upgrade to new versions of your application.</li>
+
+<li>If you will sign multiple distinct applications with the same key,
+you should ensure that your key's validity period exceeds the expected
+lifespan of <em>all versions of all of the applications</em>, including
+dependent applications that may be added to the suite in the future. </li>
+
+<li>If you plan to publish your application(s) on Google Play, the
+key you use to sign the application(s) must have a validity period
+ending after 22 October 2033. Google Play enforces this requirement
+to ensure that users can seamlessly upgrade applications when
+new versions are available. </li>
+</ul>
+
+<p>As you design your application, keep these points in mind and make sure to
+use a <a href="#cert">suitable certificate</a> to sign your applications. </p>
+
+<h2 id="setup">Basic Setup for Signing</h2>
+
+<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
+the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
+the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
+variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
+Jarsigner to your <code>PATH</code> variable.</p>
+
+<p>If you are developing on a version of Linux that originally came with GNU Compiler for
+Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
+version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
+<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
+to the Keytool in the JDK.</p>
+
+<h2 id="debugmode">Signing in Debug Mode</h2>
+
+<p>The Android build tools provide a debug signing mode that makes it easier for you
+to develop and debug your application, while still meeting the Android system
+requirement for signing your APK.
+When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
+a debug keystore and key. This debug key is then used to automatically sign the APK, so
+you do not need to sign the package with your own key.</p>
+
+<p>The SDK tools create the debug keystore/key with predetermined names/passwords:</p>
+<ul>
+<li>Keystore name: "debug.keystore"</li>
+<li>Keystore password: "android"</li>
+<li>Key alias: "androiddebugkey"</li>
+<li>Key password: "android"</li>
+<li>CN: "CN=Android Debug,O=Android,C=US"</li>
+</ul>
+
+<p>If necessary, you can change the location/name of the debug keystore/key or
+supply a custom debug keystore/key to use. However, any custom debug
+keystore/key must use the same keystore/key names and passwords as the default
+debug key (as described above). (To do so in Eclipse/ADT, go to
+<strong>Windows</strong> &gt; <strong>Preferences</strong> &gt;
+<strong>Android</strong> &gt; <strong>Build</strong>.) </p>
+
+<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
+to the public when signed with the debug certificate.</p>
+
+<h3>Eclipse Users</h3>
+
+<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
+<a href="#setup">Basic Setup for Signing</a>),
+signing in debug mode is enabled by default. When you run or debug your
+application, ADT signs the {@code .apk} file with the debug certificate, runs {@code zipalign} on
+the package, then installs it on
+the selected emulator or connected device. No specific action on your part is needed,
+provided ADT has access to Keytool.</p>
+
+<h3>Ant Users</h3>
+
+<p>If you are using Ant to build your {@code .apk} file, debug signing mode
+is enabled by using the <code>debug</code> option with the <code>ant</code> command
+(assuming that you are using a <code>build.xml</code> file generated by the
+<code>android</code> tool). When you run <code>ant debug</code> to
+compile your app, the build script generates a keystore/key and signs the APK for you.
+The script then also aligns the APK with the <code>zipalign</code> tool.
+No other action on your part is needed. Read
+<a href="{@docRoot}tools/building/building-cmdline.html#DebugMode">Building and Running Apps
+on the Command Line</a> for more information.</p>
+
+
+<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
+
+<p>The self-signed certificate used to sign your application in debug mode (the default on
+Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
+
+<p>When the certificate expires, you will get a build error. On Ant builds, the error
+looks like this:</p>
+
+<pre>debug:
+[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
+[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
+
+<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
+
+<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
+The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
+in <code>C:\Documents and Settings\&lt;user>\.android\</code> on Windows XP, and in
+<code>C:\Users\&lt;user>\.android\</code> on Windows Vista and Windows 7.</p>
+
+
+<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
+
+<p>Note that, if your development machine is using a non-Gregorian locale, the build
+tools may erroneously generate an already-expired debug certificate, so that you get an
+error when trying to compile your application. For workaround information, see the
+troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
+I&nbsp;can't&nbsp;compile my app because the build tools generated an expired debug
+certificate</a>. </p>
+
+
+<h2 id="releasemode">Signing in Release Mode</h2>
+
+<p>When your application is ready for release to other users, you must:</p>
+<ol>
+  <li><a href="#cert">Obtain a suitable private key</a></li>
+  <li><a href="#releasecompile">Compile the application in release mode</a></li>
+  <li><a href="#signapp">Sign your application with your private key</a></li>
+  <li><a href="#align">Align the final APK package</a></li>
+</ol>
+
+<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
+to perform the compile, sign, and align procedures. The Export Wizard even allows you to
+generate a new keystore and private key in the process. So if you use Eclipse, you can
+skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
+
+
+
+<h3 id="cert">1. Obtain a suitable private key</h3>
+
+<p>In preparation for signing your application, you must first ensure that
+you have a suitable private key with which to sign. A suitable private
+key is one that:</p>
+
+<ul>
+<li>Is in your possession</li>
+<li>Represents the personal, corporate, or organizational entity to be identified
+with the application</li>
+<li>Has a validity period that exceeds the expected lifespan of the application
+or application suite. A validity period of more than 25 years is recommended.
+<p>If you plan to publish your application(s) on Google Play, note that a
+validity period ending after 22 October 2033 is a requirement. You can not upload an
+application if it is signed with a key whose validity expires before that date.
+</p></li>
+<li>Is not the debug key generated by the Android SDK tools. </li>
+</ul>
+
+<p>The key may be self-signed. If you do not have a suitable key, you must
+generate one using Keytool. Make sure that you have Keytool available, as described
+in <a href="#setup">Basic Setup</a>.</p>
+
+<p>To generate a self-signed key with Keytool, use the <code>keytool</code>
+command and pass any of the options listed below (and any others, as
+needed). </p>
+
+<p class="warning"><strong>Warning:</strong> Keep your private key secure.
+Before you run Keytool, make sure to read
+<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
+your key secure and why doing so is critically important to you and to users. In
+particular, when you are generating your key, you should select strong passwords
+for both the keystore and key.</p>
+
+<table>
+<tr>
+<th>Keytool Option</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><code>-genkey</code></td><td>Generate a key pair (public and private
+keys)</td>
+</tr>
+<tr>
+<td><code>-v</code></td><td>Enable verbose output.</td>
+</tr>
+<tr>
+<td><code>-alias &lt;alias_name&gt;</code></td><td>An alias for the key. Only
+the first 8 characters of the alias are used.</td>
+</tr>
+<tr>
+<td><code>-keyalg &lt;alg&gt;</code></td><td>The encryption algorithm to use
+when generating the key. Both DSA and RSA are supported.</td>
+</tr>
+<tr>
+<td><code>-keysize &lt;size&gt;</code></td><td>The size of each generated key
+(bits). If not supplied, Keytool uses a default key size of 1024 bits. In
+general, we recommend using a key size of 2048 bits or higher. </td>
+</tr>
+<tr>
+<td><code>-dname &lt;name&gt;</code></td><td><p>A Distinguished Name that describes
+who created the key. The value is used as the issuer and subject fields in the
+self-signed certificate. </p><p>Note that you do not need to specify this option
+in the command line. If not supplied, Jarsigner prompts you to enter each
+of the Distinguished Name fields (CN, OU, and so on).</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the
+key.</p> <p>As a security precaution, do not include this option in your command
+line. If not supplied, Keytool prompts you to enter the password. In this way,
+your password is not stored in your shell history.</p></td>
+</tr>
+<tr>
+<td><code>-validity &lt;valdays&gt;</code></td><td><p>The validity period for the
+key, in days. </p><p><strong>Note:</strong> A value of 10000 or greater is recommended.</p></td>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>A name
+for the keystore containing the private key.</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>A password for the
+keystore.</p><p>As a security precaution, do not include this option in your
+command line. If not supplied, Keytool prompts you to enter the password. In
+this way, your password is not stored in your shell history.</p></td>
+</tr>
+</table>
+
+<p>Here's an example of a Keytool command that generates a private key:</p>
+
+<pre>$ keytool -genkey -v -keystore my-release-key.keystore
+-alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
+
+<p>Running the example command above, Keytool prompts you to provide
+passwords for the keystore and key, and to provide the Distinguished
+Name fields for your key. It then generates the keystore as a file called
+<code>my-release-key.keystore</code>. The keystore and key are
+protected by the passwords you entered. The keystore contains
+a single key, valid for 10000 days. The alias is a name that you &mdash;
+will use later, to refer to this keystore when signing your application. </p>
+
+<p>For more information about Keytool, see the documentation at
+<a
+href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html">
+http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html</a></p>
+
+
+
+<h3 id="releasecompile">2. Compile the application in release mode</h3>
+
+<p>In order to release your application to users, you must compile it in release mode.
+In release mode, the compiled application is not signed by default and you will need
+to sign it with your private key.</p>
+
+<p class="caution"><strong>Caution:</strong>
+You can not release your application unsigned, or signed with the debug key.</p>
+
+<h4>With Eclipse</h4>
+
+<p>To export an <em>unsigned</em> APK from Eclipse, right-click the project in the Package
+Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
+Package</strong>. Then specify the file location for the unsigned APK.
+(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, select
+the <strong>Manifest</strong> tab, and click <strong>Export an unsigned APK</strong>.)</p>
+
+<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
+<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
+
+<h4>With Ant</h4>
+
+<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
+with the <code>ant</code> command. For example, if you are running Ant from the
+directory containing your {@code build.xml} file, the command would look like this:</p>
+
+<pre>$ ant release</pre>
+
+<p>By default, the build script compiles the application APK without signing it. The output file
+in your project {@code bin/} will be <code><em>&lt;your_project_name></em>-unsigned.apk</code>.
+Because the application APK is still unsigned, you must manually sign it with your private
+key and then align it using {@code zipalign}.</p>
+
+<p>However, the Ant build script can also perform the signing
+and aligning for you, if you have provided the path to your keystore and the name of
+your key alias in the project's {@code ant.properties} file. With this information provided,
+the build script will prompt you for your keystore and alias password when you perform
+<code>ant release</code>, it will sign the package and then align it. The final output
+file in {@code bin/} will instead be
+<code><em>&lt;your_project_name></em>-release.apk</code>. With these steps
+automated for you, you're able to skip the manual procedures below (steps 3 and 4).
+To learn how to specify your keystore and alias in the {@code ant.properties} file,
+see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">
+Building and Running Apps on the Command Line</a>.</p>
+
+
+
+<h3 id="signapp">3. Sign your application with your private key</h3>
+
+<p>When you have an application package that is ready to be signed, you can do sign it
+using the Jarsigner tool. Make sure that you have Jarsigner available on your
+machine, as described in <a href="#setup">Basic Setup</a>. Also, make sure that
+the keystore containing your private key is  available.</p>
+
+<p>To sign your application, you run Jarsigner, referencing both the
+application's APK and the keystore containing the private key with which to
+sign the APK. The table below shows the options you could use. </p>
+
+<table>
+<tr>
+<th>Jarsigner Option</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>The name of
+the keystore containing your private key.</td>
+</tr>
+<tr>
+<td><code>-verbose</code></td><td>Enable verbose output.</td>
+</tr>
+<tr>
+<td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
+Use the value {@code MD5withRSA}.</td>
+</tr>
+<tr>
+<td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
+of an APK. Use the value {@code SHA1}.</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>The password for the
+keystore. </p><p>As a security precaution, do not include this option
+in your command line unless you are working at a secure computer.
+If not supplied, Jarsigner prompts you to enter the password. In this
+way, your password is not stored in your shell history.</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the private
+key. </p><p>As a security precaution, do not include this option
+in your command line unless you are working at a secure computer.
+If not supplied, Jarsigner prompts you to enter the password. In this
+way, your password is not stored in your shell history.</p></td>
+</tr>
+</table>
+
+<p>Here's how you would use Jarsigner to sign an application package called
+<code>my_application.apk</code>, using the example keystore created above.
+</p>
+
+<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
+my_application.apk alias_name</pre>
+
+<p>Running the example command above, Jarsigner prompts you to provide
+passwords for the keystore and key. It then modifies the APK
+in-place, meaning the APK is now signed. Note that you can sign an
+APK multiple times with different keys.</p>
+
+<p class="caution"><strong>Caution:</strong> As of JDK 7, the default signing algorithim has
+changed, requiring you to specify the signature and digest algorithims ({@code -sigalg} and {@code
+-digestalg}) when you sign an APK.</p>
+
+<p>To verify that your APK is signed, you can use a command like this:</p>
+
+<pre>$ jarsigner -verify my_signed.apk</pre>
+
+<p>If the APK is signed properly, Jarsigner prints "jar verified".
+If you want more details, you can try one of these commands:</p>
+
+<pre>$ jarsigner -verify -verbose my_application.apk</pre>
+
+<p>or</p>
+
+<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
+
+<p>The command above, with the <code>-certs</code> option added, will show you the
+"CN=" line that describes who created the key.</p>
+
+<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the APK was
+signed with the debug key generated by the Android SDK. If you intend to release
+your application, you must sign it with your private key instead of the debug
+key.</p>
+
+<p>For more information about Jarsigner, see the documentation at
+<a href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html">
+http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html</a></p>
+
+
+<h3 id="align">4. Align the final APK package</h3>
+
+<p>Once you have signed the APK with your private key, run <code>zipalign</code> on the file.
+This tool ensures that all uncompressed data starts with a particular byte alignment,
+relative to the start of the file. Ensuring alignment at 4-byte boundaries provides
+a performance optimization when installed on a device. When aligned, the Android
+system is able to read files with {@code mmap()}, even if
+they contain binary data with alignment restrictions, rather than copying all
+of the data from the package. The benefit is a reduction in the amount of
+RAM consumed by the running application.</p>
+
+<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
+<code>tools/</code> directory. To align your signed APK, execute:</p>
+
+<pre>$ zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
+
+<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
+byte-alignment (don't use anything other than 4). The first file argument is
+your signed {@code .apk} file (the input) and the second file is the destination {@code .apk} file
+(the output). If you're overriding an existing APK, add the {@code -f} flag.</p>
+
+<p class="caution"><strong>Caution:</strong> Your input APK must be signed with your
+private key <strong>before</strong> you optimize the package with {@code zipalign}.
+If you sign it after using {@code zipalign}, it will undo the alignment.</p>
+
+<p>For more information, read about the
+<a href="{@docRoot}tools/help/zipalign.html">zipalign</a> tool.
+
+
+<h3 id="ExportWizard">Compile and sign with Eclipse ADT</h3>
+
+<p>If you are using Eclipse with the ADT plugin, you can use the Export Wizard to
+export a <em>signed</em> APK (and even create a new keystore,
+if necessary). The Export Wizard performs all the interaction with
+the Keytool and Jarsigner for you, which allows you to sign the package using a GUI
+instead of performing the manual procedures to compile, sign,
+and align, as discussed above. Once the wizard has compiled and signed your package,
+it will also perfom package alignment with {@code zipalign}.
+Because the Export Wizard uses both Keytool and Jarsigner, you should
+ensure that they are accessible on your computer, as described above
+in the <a href="#setup">Basic Setup for Signing</a>.</p>
+
+<p>To create a signed and aligned APK in Eclipse:</p>
+
+<ol>
+  <li>Select the project in the Package
+Explorer and select <strong>File > Export</strong>.</li>
+  <li>Open the Android folder, select Export Android Application,
+  and click <strong>Next</strong>.
+  <p>The Export Android Application wizard now starts, which will
+  guide you through the process of signing your application,
+  including steps for selecting the private key with which to sign the APK
+  (or creating a new keystore and private key).</p>
+  <li>Complete the Export Wizard and your application will be compiled,
+  signed, aligned, and ready for distribution.</li>
+</ol>
+
+
+
+<h2 id="secure-key">Securing Your Private Key</h2>
+
+<p>Maintaining the security of your private key is of critical importance, both
+to you and to the user. If you allow someone to use your key, or if you leave
+your keystore and passwords in an unsecured location such that a third-party
+could find and use them, your authoring identity and the trust of the user
+are compromised. </p>
+
+<p>If a third party should manage to take your key without your knowledge or
+permission, that person could sign and distribute applications that maliciously
+replace your authentic applications or corrupt them. Such a person could also
+sign and distribute applications under your identity that attack other
+applications or the system itself, or corrupt or steal user data. </p>
+
+<p>Your reputation as a developer entity depends on your securing your private
+key properly, at all times, until the key is expired. Here are some tips for
+keeping your key secure: </p>
+
+<ul>
+<li>Select strong passwords for the keystore and key.</li>
+<li>When you generate your key with Keytool, <em>do not</em> supply the
+<code>-storepass</code> and <code>-keypass</code> options at the command line.
+If you do so, your passwords will be available in your shell history,
+which any user on your computer could access.</li>
+<li>Similarly, when signing your applications with Jarsigner,
+<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
+options at the command line. </li>
+<li>Do not give or lend anyone your private key, and do not let unauthorized
+persons know your keystore and key passwords.</li>
+</ul>
+
+<p>In general, if you follow common-sense precautions when generating, using,
+and storing your key, it will remain secure. </p>
\ No newline at end of file
diff --git a/docs/html/tools/publishing/preparing.jd b/docs/html/tools/publishing/preparing.jd
new file mode 100644
index 0000000..3ebf3f7
--- /dev/null
+++ b/docs/html/tools/publishing/preparing.jd
@@ -0,0 +1,359 @@
+page.title=Preparing for Release
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Quickview</h2>
+    <ul>
+      <li>Learn which resources you'll need to release your app.</li>
+      <li>Find out how to configure and build your app for release.</li>
+      <li>Learn best practices for releasing your app.</li>
+    </ul>
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#publishing-intro">Introduction</a></li>
+      <li><a href="#publishing-gather">Gathering Materials and Resources</a></li>
+      <li><a href="#publishing-configure">Configuring Your Application</a></li>
+      <li><a href="#publishing-build">Building Your Application</a></li>
+      <li><a href="#publishing-resources">Preparing External Servers and Resources</a></li>
+      <li><a href="#publishing-test">Testing Your Application for Release</a></li>
+    </ol>
+    <h2>See also</h2>
+    <ol>
+      <li><a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a></li>
+      <li><a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a></li>
+      <li><a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing Checklist for Google Play</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>Before you distribute your Android application to users you need to prepare it for release. The
+preparation process is a required <a href="{@docRoot}tools/workflow/index.html">development
+task</a> for all Android applications and is the first step in the publishing process (see figure
+1).</p>
+
+<p>When you prepare your application for release, you configure, build, and test a release
+version of your application. The configuration tasks are straightforward, involving basic code
+cleanup and code modification tasks that help optimize your application. The build process is
+similar to the debug build process and can be done using JDK and Android SDK tools. The testing
+tasks serve as a final check, ensuring that your application performs as expected under real-world
+conditions. When you are finished preparing your application for release you have a signed
+<code>.apk</code> file, which you can distribute directly to users or distribute through an
+application marketplace such as Google Play.</p>
+
+<p>This document summarizes the main tasks you need to perform to prepare your application for
+release. The tasks that are described in this document apply to all Android applications regardless
+how they are released or distributed to users. If you are releasing your application through Google
+Play, you should also read <a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing
+Checklist for Google Play</a> to be sure your release-ready application satisfies all Google Play
+requirements.</p>
+
+<p class="note"><strong>Note:</strong> As a best practice, your application should meet all of your
+release criteria for functionality, performance, and stability before you perform the tasks outlined
+in this document.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview_prep.png"
+     alt="Shows how the preparation process fits into the development process"
+     height="190"
+     id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Preparing for release is a required <a
+href="{@docRoot}tools/workflow/index.html">development
+task</a> and is the first step in the publishing process.
+</p>
+
+<h2 id="publishing-intro">Introduction</h2>
+
+<p>To release your application to users you need to create a release-ready package that users can
+install and run on their Android-powered devices. The release-ready package contains the same
+components as the debug <code>.apk</code> file &mdash; compiled source code, resources, manifest
+file, and so on &mdash; and it is built using the same build tools. However, unlike the debug
+<code>.apk</code> file, the release-ready <code>.apk</code> file is signed with your own certificate
+and it is optimized with the zipalign tool.</p>
+
+<div class="figure" style="width:331px">
+  <img src="{@docRoot}images/publishing/publishing_preparing.png"
+       alt="Shows the five tasks you perform to prepare your app for release"
+       height="450" />
+  <p class="img-caption">
+    <strong>Figure 2.</strong> You perform five main tasks to prepare your application for
+    release.
+  </p>
+</div>
+
+<p>The signing and optimization tasks are usually seamless if you are building your application with
+Eclipse and the ADT plugin or with the Ant build script (included with the Android SDK). For
+example, you can use the Eclipse Export Wizard to compile, sign, and optimize your application all
+at once. You can also configure the Ant build script to do the same when you build from the command
+line.</p>
+
+<p>To prepare your application for release you typically perform five main tasks (see figure 2).
+Each main task may include one or more smaller tasks depending on how you are releasing your
+application. For example, if you are releasing your application through Google Play you may want
+to add special filtering rules to your manifest while you are configuring your application for
+release. Similarly, to meet Google Play publishing guidelines you may have to prepare screenshots
+and create promotional text while you are gathering materials for release.</p>
+
+<p>You usually perform the tasks listed in figure 2 after you have throroughly debugged and tested
+your application. The Android SDK contains several tools to help you test and debug your Android
+applications. For more information, see the <a
+href="{@docRoot}tools/debugging/index.html">Debugging</a> and <a
+href="{@docRoot}tools/testing/index.html">Testing</a> sections in the Dev Guide.</p>
+
+<h2 id="publishing-gather">Gathering Materials and Resources</h2>
+
+<p>To begin preparing your application for release you need to gather several supporting items. At a
+minimum this includes cryptographic keys for signing your application and an application icon. You
+might also want to include an end-user license agreement.</p>
+
+<h4 id="publishing-keys">Cryptographic keys</h4>
+
+<p>The Android system requires that each installed application be digitally signed with a
+certificate that is owned by the application's developer (that is, a certificate for which the
+developer holds the private key). The Android system uses the certificate as a means of identifying
+the author of an application and establishing trust relationships between applications. The
+certificate that you use for signing does not need to be signed by a certificate authority; the
+Android system allows you to sign your applications with a self-signed certificate. To learn about
+certificate requirements, see <a href="{@docRoot}tools/publishing/app-signing.html#cert">Obtain a
+suitable private key</a>.</p>
+
+<p class="caution"><strong>Important:</strong> Your application must be signed with a cryptographic
+key whose validity period ends after 22 October 2033.</p>
+
+<p>You may also have to obtain other release keys if your application accesses a service or uses a
+third-party library that requires you to use a key that is based on your private key. For example,
+if your application uses the <a
+href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html">MapView</a>
+class, which is part of the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>, you will need to register your application with the Google Maps service and obtain
+a Maps API key. For information about getting a Maps API key, see <a
+href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API
+key</a>.</p>
+
+<h4>Application Icon</h4>
+
+<p>Be sure you have an application icon and that it meets the recommended <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html">icon guidelines</a>. Your
+application's icon helps users identify your application on a device's Home
+screen and in the Launcher window. It also appears in Manage Applications, My Downloads, and
+elsewhere. In addition, publishing services such as Google Play display your icon to users.</p>
+
+<p class="note"><strong>Note:</strong> If you are releasing your application on Google Play, you
+need to create a high resolution
+  version of your icon. See <a
+href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">Graphic
+Assets for your Application</a> for more information.</p>
+
+<h4>End-user License Agreement</h4>
+
+<p>Consider preparing an End User License Agreement (EULA) for your application. A EULA can help
+protect your person, organization, and intellectual property, and we recommend that you provide one
+with your application.</p>
+
+<h4>Miscellaneous Materials</h4>
+
+<p>You might also have to prepare promotional and marketing materials to publicize your application.
+For example, if you are releasing your application on Google Play you will need to prepare some
+promotional text and you will need to create screenshots of your application. For more
+information, see
+<a href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">
+Graphic Assets for your Application</a></p>
+
+<h2 id="publishing-configure">Configuring Your Application for Release</h2>
+
+<p>After you gather all of your supporting materials you can start configuring your application
+for release. This section provides a summary of the configuration changes we recommend that you make
+to your source code, resource files, and application manifest prior to releasing your application.
+Although most of the configuration changes listed in this section are optional, they are
+considered good coding practices and we encourage you to implement them. In some cases,
+you may have already made these configuration changes as part of your development process.</p>
+
+<h4>Choose a good package name</h4>
+
+<p>Make sure you choose a package name that is suitable over the life of your application. You
+cannot change the package name after you distribute your application to users. You can set the
+package name in application's manifest file. For more information, see the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a> attribute
+documentation.</p>
+
+<h4>Turn off logging and debugging</h4>
+
+<p>Make sure you deactivate logging and disable the debugging option before you build your
+application for release. You can deactivate logging by removing calls to
+{@link android.util.Log} methods in your source files. You can disable debugging by removing the
+<code>android:debuggable</code> attribute from the <code>&lt;application&gt;</code> tag in your
+manifest file, or by setting the <code>android:debuggable</code> attribute to
+<code>false</code> in your manifest file. Also, remove any log files or static test files that
+were created in your project.</p>
+
+<p>Also, you should remove all {@link android.os.Debug} tracing calls that you
+added to your code, such as {@link android.os.Debug#startMethodTracing()} and
+{@link android.os.Debug#stopMethodTracing()} method calls.</p>
+
+<h4>Clean up your project directories</h4>
+
+<p>Clean up your project and make sure it conforms to the directory structure described in <a
+href="{@docRoot}tools/projects/index.html#ApplicationProjects">Android Projects</a>.
+Leaving stray or orphaned files in your project can prevent your application from compiling and
+cause your application to behave unpredictably. At a minimum you should do the following cleanup
+tasks:</p>
+
+<ul>
+  <li>Review the contents of your <code>jni/</code>, <code>lib/</code>, and <code>src/</code>
+  directories.  The <code>jni/</code> directory should contain only source files associated with the
+  <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>, such as
+  <code>.c</code>, <code>.cpp</code>, <code>.h</code>, and <code>.mk</code> files. The
+  <code>lib/</code> directory should contain only third-party library files or private library
+  files, including prebuilt shared and static libraries (for example, <code>.so</code> files). The
+  <code>src/</code> directory should contain only the source files for your application
+  (<code>.java</code> and <code>.aidl</code> files). The <code>src/</code> directory should not
+  contain any <code>.jar</code> files.</li>
+  <li>Check your project for private or proprietary data files that your application does not use
+  and remove them. For example, look in your project's <code>res/</code> directory for old
+  drawable files, layout files, and values files that you are no longer using and delete them.</li>
+  <li>Check your <code>lib/</code> directory for test libraries and remove them if they are no
+  longer being used by your application.</li>
+  <li>Review the contents of your <code>assets/</code> directory and your <code>res/raw/</code>
+    directory for raw asset files and static files that you need to update or remove prior to
+    release.</li>
+</ul>
+
+<h4>Review and update your manifest settings</h4>
+
+<p>Verify that the following manifest items are set correctly:</p>
+
+<ul>
+  <li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+  &lt;uses-permission&gt;</a> element
+    <p>You should specify only those permissions that are relevant and required for your application.</p>
+  </li>
+  <li><code>android:icon</code> and <code>android:label</code> attributes
+    <p>You must specify values for these attributes, which are located in the
+    <a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a>
+    element.</p>
+  </li>
+  <li><code>android:versionCode</code> and <code>android:versionName</code> attributes.
+    <p>We recommend that you specify values for these attributes, which are located in the
+      <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
+      element. For more information see
+      <a href="{@docRoot}tools/publishing/versioning.html">Versioning your Application</a>.</p>
+  </li>
+</ul>
+
+<p>There are several additional manifest elements that you can set if you are releasing your
+application on Google Play. For example, the <code>android:minSdkVersion</code> and
+<code>android:targetSdkVersion</code> attributes, which are located in the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"> &lt;uses-sdk&gt;</a> element. For more
+information about these and other Google Play settings, see <a
+href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>.</p>
+
+<h4>Address compatibility issues</h4>
+
+<p>Android provides several tools and techniques to make your application compatible with a wide
+range of devices. To make your application available to the largest number of users, consider
+doing the following:</p>
+
+<ul>
+  <li><strong>Add support for multiple screen configurations</strong>
+    <p>Make sure you meet the
+    <a href="{@docRoot}guide/practices/screens_support.html#screen-independence">
+    best practices for supporting multiple screens</a>. By supporting multiple screen configurations
+    you can create an application that functions properly and looks good on any of the screen sizes
+    supported by Android.</p>
+  </li>
+  <li><strong>Optimize your application for Android tablet devices.</strong>
+    <p>If your application is designed for devices older than Android 3.0, make it compatible
+    with Android 3.0 devices by following the guidelines and best practices described in
+    <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0
+    </a>.</p>
+  </li>
+  <li><strong>Consider using the Support Library</strong>
+    <p>If your application is designed for devices running Android 3.x, make your application
+    compatible with older versions of Android by adding the
+    <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> to your
+    application project. The Support Library provides static support libraries that you can add to
+    your Android application, which enables you to use APIs that are either not available on
+    older platform versions or use utility APIs that are not part of the framework APIs.</p>
+  </li>
+</ul>
+
+<h4>Update URLs for servers and services</h4>
+
+<p>If your application accesses remote servers or services, make sure you are using the production
+URL or path for the server or service and not a test URL or path.</p>
+
+<h4>Implement Licensing (if you are releasing on Google Play)</h4>
+
+<p>If you are releasing a paid application through Google Play, consider adding support for
+Google Play Licensing. Licensing lets you control access to your application based on whether the
+current user has purchased it. Using Google Play Licensing is optional even if you are
+releasing your app through Google Play.</p>
+
+<p>For more information about Google Play Licensing Service and how to use it in your
+application, see <a href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a>.</p>
+
+<h2 id="publishing-build">Building Your Application for Release</h2>
+
+<p>After you finish configuring your application you can build it into a release-ready
+<code>.apk</code> fle that is signed and optimized. The JDK includes the tools for signing the
+<code>.apk</code> file (Keytool and Jarsigner); the Android SDK includes the tools for compiling and
+optimizing the <code>.apk</code> file. If you are using Eclipse with the ADT plugin or you are using
+the Ant build script from the command line, you can automate the entire build process.</p>
+
+<h3>Building with Eclipse</h3>
+
+<p>You can use the Eclipse Export Wizard to build a release-ready <code>.apk</code> file that is
+signed with your private key and optimized. To learn how to run the Export Wizard, see
+<a href="{@docRoot}tools/publishing/app-signing.html#ExportWizard">Compile and sign with Eclipse
+ADT</a>. The Export Wizard compiles your application for release, signs your application with your
+private key, and optimizes your application with the zipalign tool. The Export Wizard should run
+successfully if you have run or debugged your application from Eclipse and you have no errors in
+your application (see <a href="{@docRoot}tools/building/building-eclipse.html">Building
+and Running from Eclipse with ADT</a> for more information.</p>
+
+<p>The Export Wizard assumes that you have a <a href="#billing-keys">certificate and private key</a>
+suitable for signing your application. If you do not have a suitable certificate and private key,
+the Export Wizard will help you generate one (see
+<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a> for more
+information about the signing process and signing guidelines.</p>
+
+<h3>Building with Ant</h3>
+
+<p>You can use the Ant build script (included in the Android SDK) to build a release-ready
+<code>.apk</code> file that is signed with your private key and optimized. To learn how to do this,
+see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">Building in
+Release Mode</a>. This build method assumes you have a <a href="#billing-keys">certificate and
+private key</a> suitable for signing your application. If you do not have a suitable certificate and
+private key, the Export Wizard will help you generate one (see
+<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a> for more
+information about the signing process and signing guidelines.</p>
+
+<h2 id="publishing-resources">Preparing External Servers and Resources</h2>
+
+<p>If your application relies on a remote server, make sure the server is secure and that it is
+configured for production use. This is particularly important if you are implementing <a
+href="{@docRoot}guide/google/play/billing/index.html">in-app billing</a> in your application and you are
+performing the signature verification step on a remote server.</p>
+
+<p>Also, if your application fetches content from a remote server or a real-time service (such as a
+content feed), be sure the content you are providing is up to date and production-ready.</p>
+
+<h2 id="publishing-test">Testing Your Application for Release</h2>
+
+<p>Testing the release version of your application helps ensure that your application runs properly
+under realistic device and network conditions. Ideally, you should test your application on at least
+one handset-sized device and one tablet-sized device to verify that your user interface elements are
+sized correctly and that your application's performance and battery efficiency are acceptable.</p>
+
+<p>As a starting point for testing, see
+<a href="{@docRoot}tools/testing/what_to_test.html">What to Test</a>. This article provides
+a summary of common Android situations that you should consider when you are testing. When you are
+done testing and you are satisfied that the release version of your application
+behaves correctly, you can release your application to users. For more information, see
+<a href="{@docRoot}tools/publishing/publishing_overview.html#publishing-release">Releasing Your
+Application to Users</a>. If you are publishing your application on Google Play, see
+<a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing Checklist
+for Google Play</a>.</p>
+
+
diff --git a/docs/html/tools/publishing/publishing_overview.jd b/docs/html/tools/publishing/publishing_overview.jd
new file mode 100755
index 0000000..572766c
--- /dev/null
+++ b/docs/html/tools/publishing/publishing_overview.jd
@@ -0,0 +1,238 @@
+page.title=Publishing Overview
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>Quickview</h2>
+  <ul>
+    <li>Learn how to publish Android apps.</li>
+    <li>Find out how to prepare apps for release.</li>
+    <li>Learn how to release apps to users.</li>
+  </ul>
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
+    <li><a href="#publishing-release">Releasing Your Application to Users</a>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing on Google Play</a></li>
+  </ol>
+</div>
+</div>
+
+<p>Publishing is the general process that makes your Android applications available to users. When you
+publish an Android application you perform two main tasks:</p>
+
+<ul>
+  <li>You prepare the application for release.
+    <p>During the preparation step you build a release version of your application, which users can
+      download and install on their Android-powered devices.</p>
+  </li>
+  <li>You release the application to users.
+    <p>During the release step you publicize, sell, and distribute the release version of your
+      application to users.</p>
+  </li>
+</ul>
+
+<p>Usually, you release your application through an application marketplace, such as <a href="{@docRoot}distribute/index.html">Google Play</a>.
+However, you can also release applications by sending them directly to users or by letting users
+download them from your own website.</p>
+
+<p>Figure 1 shows how the publishing process fits into the overall Android <a
+href="{@docRoot}tools/workflow/index.html">application development process</a>.
+The publishing process is typically performed after you finish testing your application in a debug
+environment. Also, as a best practice, your application should meet all of your release criteria for
+functionality, performance, and stability before you begin the publishing process.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
+       process fits into the overall development process" height="86" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
+href="{@docRoot}tools/workflow/index.html">application development process</a>.
+</p>
+
+<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
+
+<p>Preparing your application for release is a multi-step process that involves the following
+tasks:</p>
+
+<ul>
+  <li>Configuring your application for release.
+    <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
+    <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+    attribute from your manifest file. You should also provide values for the
+    <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
+    located in the
+    <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
+    element. You may also have to configure several other settings to meet Google Play
+    requirements or accomodate whatever method you're using to release your application.</p>
+  </li>
+  <li>Building and signing a release version of your application.
+    <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
+    with the Android SDK tools provide everything you need to build and sign a release version of
+    your application.</p>
+  </li>
+  <li>Testing the release version of your application.
+    <p>Before you distribute your application, you should thoroughly test the release version on at
+    least one target handset device and one target tablet device.</p>
+  </li>
+  <li>Updating application resources for release.
+    <p>You need to be sure that all application resources such as multimedia files and graphics
+    are updated and included with your application or staged on the proper production servers.</p>
+  </li>
+  <li>Preparing remote servers and services that your application depends on.
+    <p>If your application depends on external servers or services, you need to be sure they
+    are secure and production ready.</p>
+  </li>
+</ul>
+
+<p>You may have to perform several other tasks as part of the preparation process. For example, you
+will need to get a private key for signing your application, and you may need to get a Maps API
+release key if you are using the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>. You will also need to create an icon for your application, and you may want to prepare
+an End User License Agreement (EULA) to protect your person, organization, and intellectual
+property.</p>
+
+<p>When you are finished preparing your application for release you will have a signed
+<code>.apk</code> file that you can distribute to users.</p>
+
+<p>To learn how to prepare your application for release, see <a
+href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
+topic provides step-by-step instructions for configuring and building a release version of your
+application.</p>
+
+<h2 id="publishing-release">Releasing Your Application to Users</h2>
+
+<p>You can release your Android applications several ways. Usually, you release applications
+through an application marketplace such as Google Play, but you can also release applications
+on your own website or by sending an application directly to a user. 
+
+<h3 id="publishing-marketplace">Releasing through an App Marketplace</h3>
+
+<p>If you want to distribute your apps to the broadest possible audience, releasing through
+an app marketplace such as Google Play is ideal. </p>
+
+<p>Google Play is the premier marketplace for Android apps and is particularly
+useful if you want to distribute your applications to a large global audience.
+However, you can distribute your apps through any app marketplace you want or
+you can use multiple marketplaces.</p>
+
+
+<h4 id="publishing-market">Releasing Your Applications on Google Play</h4>
+
+<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
+your Android applications to users around the world. When you release your applications through
+Google Play you have access to a suite of developer tools that let you analyze your sales,
+identify market trends, and control who your applications are being distributed to. You also have
+access to several revenue-enhancing features such as <a
+href="{@docRoot}guide/google/play/billing/index.html">in-app billing</a> and <a
+href="{@docRoot}guide/google/play/licensing/index.html">application licensing</a>. The rich array of tools
+and features, coupled with numerous end-user community features, makes Google Play the premier
+marketplace for selling and buying Android applications.</p>
+
+<p>Releasing your application on Google Play is a simple process that involves three basic
+  steps:</p>
+
+<ul>
+  <li>Preparing promotional materials.
+    <p>To fully leverage the marketing and publicity capabilities of Google Play, you need to
+    create promotional materials for your application, such as screenshots, videos, graphics, and
+    promotional text.</p>
+  </li>
+  <li>Configuring options and uploading assets.
+    <p>Google Play lets you target your application to a worldwide pool of users and devices.
+    By configuring various Google Play settings, you can choose the countries you want to
+    reach, the listing languages you want to use, and the price you want to charge in each
+    country. You can also configure listing details such as the application type, category, and
+    content rating. When you are done configuring options you can upload your promotional materials
+    and your application as a draft (unpublished) application.</p>
+  </li>
+  <li>Publishing the release version of your application.
+    <p>If you are satisfied that your publishing settings are correctly configured and your
+    uploaded application is ready to be released to the public, you can simply click
+    <strong>Publish</strong > in the developer console and within minutes your application will be
+    live and available for download around the world.</p>
+  </li>
+</ul>
+
+<p>For information complete information, see <a href="{@docRoot}distribute/index.html">Google Play</a>.</p>
+
+
+<h3 id="publishing-email">Releasing your application through email</h3>
+
+<div class="figure" style="width:246px">
+  <img src="{@docRoot}images/publishing/publishing_via_email.png"
+       alt="Screenshot showing the graphical user interface users see when you send them an app"
+       style="width:240px;" />
+  <p class="img-caption">
+    <strong>Figure 1.</strong> Users can simply click <strong>Install</strong> when you send them
+    an application via email.
+  </p>
+</div>
+
+<p>The easiest and quickest way to release your application is to send it to a user through
+email. To do this, you prepare your application for release and then attach it to an email
+and send it to a user. When the user opens your email message on their Android-powered device
+the Android system will recognize the APK and display an <strong>Install Now</strong>
+button in the email message (see figure 1). Users can install your application by touching the
+button.</p>
+
+<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button
+shown in Figure 1 appears only if a user has configured their device to allow
+installation from <a href="#unknown-sources">unknown sources</a> and has opened your 
+email with the native Gmail application.</p>
+
+<p>Distributing applications through email is convenient if you are sending your application to
+only a few trusted users, but it provides few protections from piracy and unauthorized
+distribution; that is, anyone you send your application to can simply forward it to someone else.</p>
+
+<h2 id="publishing-website">Releasing through a web site</h2>
+
+<p>If you do not want to release your app on a marketplace like Google Play, you
+can make the app available for download on your own website or server, including
+on a private or enterprise server. To do this, you must first prepare your
+application for release in the normal way. Then all you need to do is host the
+release-ready APK file on your website and provide a download link to users.
+</p>
+
+<p>When users browse to the download link from their Android-powered devices,
+the file is downloaded and Android system automatically starts installing it on
+the device. However, the installation process will start automatically only if
+the user has configured their Settings to allow the installation of apps from
+<a href="#unknown-sources">unknown sources</a>.</p>
+
+<p>Although it is relatively easy to release your application on your own
+website, it can be inefficient. For example, if you want to monetize your
+application you will have to process and track all financial transactions
+yourself and you will not be able to use Google Play's <a
+href="{@docRoot}guide/google/play/billing/index.html">In-app Billing service</a>
+to sell in-app products. In addition, you will not be able to use the <a
+href="{@docRoot}guide/google/play/licensing/index.html">Licensing service</a> to
+help prevent unauthorized installation and use of your application.</p>
+
+
+<h2 id="unknown-sources">User Opt-In for Apps from Unknown Sources</h2>
+
+<div class="figure" style="width:246px;margin-top:0;">
+  <img src="{@docRoot}images/publishing/publishing_unknown_sources_sm.png"
+       alt="Screenshot showing the setting for accepting download and install of
+       apps from unknown sources." style="width:240px;" />
+  <p class="img-caption">
+    <strong>Figure 2.</strong> Users must enable the <strong>Unknown sources</strong>
+    setting before they can install apps not downloaded from Google Play. 
+  </p>
+</div> 
+
+<p>Android protects users from inadvertent download and install of apps from
+locations other than Google Play (which is trusted). It blocks such installs
+until the user opts-in <strong>Unknown sources</strong> in
+Settings&nbsp;<strong>&gt;</strong>&nbsp;Security, shown in Figure 2. To allow
+the installation of applications from other sources, users need to enable the
+Unknown sources setting on their devices, and they need to make this
+configuration change <em>before</em> they download your application to their
+devices.</p> 
+
+<p class="note">Note that some network providers do not allow users to install
+applications from unknown sources.</p>
diff --git a/docs/html/tools/publishing/versioning.jd b/docs/html/tools/publishing/versioning.jd
new file mode 100644
index 0000000..8f602b4
--- /dev/null
+++ b/docs/html/tools/publishing/versioning.jd
@@ -0,0 +1,174 @@
+page.title=Versioning Your Applications
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>Your application <em>must</em> be versioned</a></li>
+<li>You set the version in the application's manifest file</li>
+<li>How you version your applications affects how users upgrade </li>
+<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
+</ul>
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#appversioning">Setting Application Version</a></li>
+<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
+</ol>
+
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish Your Application</a></li>
+<li><a href="{@docRoot}distribute/googleplay/publish/preparing.html">Publishing Checklist for Google Play</a></li>
+<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Versioning is a critical component of your application upgrade and maintenance
+strategy. Versioning is important because:</p>
+
+<ul>
+<li>Users need to have specific information about the application version that
+is installed on their devices and the upgrade versions available for
+installation. </li>
+<li>Other applications &mdash; including other applications that you publish as
+a suite &mdash; need to query the system for your application's version, to
+determine compatibility and identify dependencies.</li>
+<li>Services through which you will publish your application(s) may also need to
+query your application for its version, so that they can display the version to
+users. A publishing service may also need to check the application version to
+determine compatibility and establish upgrade/downgrade relationships.</li>
+</ul>
+
+<p>The Android system does not use app version information to enforce
+restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
+developer) are responsible for enforcing version restrictions within your application or by
+informing users of the version restrictions and limitations. The Android system does, however,
+enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
+manifest. This attribute allows an application to specify the minimum system API with which it is
+compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
+Version</a>.</p>
+
+<h2 id="appversioning">Setting Application Version</h2>
+<p>To define the version information for your application, you set attributes in
+the application's manifest file. Two attributes are available, and you should
+always define values for both of them: </p>
+
+<ul>
+<li><code>android:versionCode</code> &mdash; An integer value that represents
+the version of the application code, relative to other versions.
+
+<p>The value is an integer so that other applications can programmatically
+evaluate it, for example to check an upgrade or downgrade relationship. You can
+set the value to any integer you want, however you should make sure that each
+successive release of your application uses a greater value. The system does not
+enforce this behavior, but increasing the value with successive releases is
+normative. </p>
+
+<p>Typically, you would release the first version of your application with
+versionCode set to 1, then monotonically increase the value with each release,
+regardless whether the release constitutes a major or minor release. This means
+that the <code>android:versionCode</code> value does not necessarily have a
+strong resemblance to the application release version that is visible to the
+user (see <code>android:versionName</code>, below). Applications and publishing
+services should not display this version value to users.</p>
+</li>
+<li><code>android:versionName</code> &mdash; A string value that represents the
+release version of the application code, as it should be shown to users.
+<p>The value is a string so that you can describe the application version as a
+&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
+absolute or relative version identifier. </p>
+
+<p>As with <code>android:versionCode</code>, the system does not use this value
+for any internal purpose, other than to enable applications to display it to
+users. Publishing services may also extract the <code>android:versionName</code>
+value for display to users.</p>
+</li>
+</ul>
+
+<p>You define both of these version attributes in the
+<code>&lt;manifest&gt;</code> element of the manifest file. </p>
+
+<p>Here's an example manifest that shows the <code>android:versionCode</code>
+and <code>android:versionName</code> attributes in the
+<code>&lt;manifest&gt;</code> element. </p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.package.name"
+      android:versionCode="2"
+      android:versionName="1.1"&gt;
+    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<p>In this example, note that <code>android:versionCode</code> value indicates
+that the current .apk contains the second release of the application code, which
+corresponds to a minor follow-on release, as shown by the
+<code>android:versionName</code> string. </p>
+
+<p>The Android framework provides an API to let applications query the system
+for version information about your application. To obtain version information,
+applications use the
+{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
+method of {@link android.content.pm.PackageManager PackageManager}. </p>
+
+<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
+
+<p>If your application requires a specific minimum version of the Android
+platform, or is designed only to support a certain range of Android platform
+versions, you can specify those version requirements as API Level identifiers
+in the application's manifest file. Doing so ensures that your
+application can only be installed on devices that
+are running a compatible version of the Android system. </p>
+
+<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
+element in the application's manifest, with one or more of these attributes: </p>
+
+<ul>
+<li><code>android:minSdkVersion</code> &mdash; The minimum version
+of the Android platform on which the application will run, specified
+by the platform's API Level identifier. </li>
+<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
+on which the application is designed to run. In some cases, this allows the
+application to use manifest elements or behaviors defined in the target
+API Level, rather than being restricted to using only those defined
+for the minimum API Level.</li>
+<li><code>android:maxSdkVersion</code> &mdash; The maximum version
+of the Android platform on which the application is designed to run,
+specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation before using this attribute. </li>
+</ul>
+
+<p>When preparing to install your application, the system checks the value of this
+attribute and compares it to the system version. If the
+<code>android:minSdkVersion</code> value is greater than the system version, the
+system aborts the installation of the application. Similarly, the system
+installs your application only if its <code>android:maxSdkVersion</code>
+is compatible with the platform version.</p>
+
+<p>If you do not specify these attributes in your manifest, the system assumes
+that your application is compatible with all platform versions, with no
+maximum API Level. </p>
+
+<p>To specify a minimum platform version for your application, add a
+<code>&lt;uses-sdk&gt;</code> element as a child of
+<code>&lt;manifest&gt;</code>, then define the
+<code>android:minSdkVersion</code> as an attribute. </p>
+
+<p>For more information, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+manifest element documentation and the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document.</p>
diff --git a/docs/html/tools/revisions/index.jd b/docs/html/tools/revisions/index.jd
new file mode 100644
index 0000000..0e7ceef
--- /dev/null
+++ b/docs/html/tools/revisions/index.jd
@@ -0,0 +1,9 @@
+page.title=Revisions
+page.noplus=1
+@jd:body
+
+<p>The Android SDK is composed of individual packages that may undergo
+an update at their own schedule, so some have their own set of release notes. You can
+find information about some of the packages in this section, including the core <a
+href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools</a> and the latest <a
+href="{@docRoot}tools/revisions/platforms.html">Platforms</a>.</p>
\ No newline at end of file
diff --git a/docs/html/tools/revisions/platforms.jd b/docs/html/tools/revisions/platforms.jd
new file mode 100644
index 0000000..e57c221
--- /dev/null
+++ b/docs/html/tools/revisions/platforms.jd
@@ -0,0 +1,831 @@
+page.title=Platforms
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+
+<h2>See Also</h2>
+<ol>
+  <li><a href="{@docRoot}about/versions/android-4.0-highlights.html">Ice Cream Sandwich
+Highlights and APIs</a></li>
+  <li><a href="{@docRoot}about/versions/android-3.0-highlights.html">Honeycomb
+Highlights and APIs</a></li>
+  <li><a href="{@docRoot}about/versions/android-2.3-highlights.html">Gingerbread
+Highlights and APIs</a></li>
+</ol>
+
+</div>
+</div>
+
+
+
+<p>To develop an Android app, you must install at least one Android platform from the SDK Manager
+against which you can compile your app. Often, any given version of the Android will be revised
+with bug fixes or other changes, as denoted by the "revision" number. Below, you'll find the
+release notes for each version of the platform and the subsequent revisions to the platform
+version.</p>
+
+<p>To determine what revision of an Android platform you
+have installed, refer to the "Installed Packages" listing in the Android SDK Manager.</p>
+
+
+
+
+
+
+
+
+<h2 id="4.0.3">Android 4.0.3</h2>
+
+
+<p class="caution"><strong>Important:</strong> To download the new Android
+4.0.x system components from the Android SDK Manager, you must first update the
+SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
+the Android 4.0.x system components will not be available for download.</p>
+
+<div class="toggle-content opened">
+
+  <p><a href="#" onclick="return toggleContent(this)">
+    <img src="{@docRoot}assets/images/triangle-opened.png"
+class="toggle-content-img" alt="" />
+    Revision 3</a> <em>(March 2012)</em>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+    <p>Maintenance update. The system version is 4.0.4.</p>
+    <p class="note"><strong>Note:</strong> This system image includes support for emulator
+hardware graphics acceleration when used with SDK Tools r17 or higher.
+(<a href="{@docRoot}tools/devices/emulator.html#accel-graphics">more info</a>)</p>
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>SDK Tools r17 or higher is required.</dd>
+    </dl>
+
+  </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="" />
+    Revision 2</a> <em>(January 2012)</em>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+    <p>Maintenance update. The system version is 4.0.3.</p>
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>SDK Tools r14 or higher is required.</dd>
+    </dl>
+
+  </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="" />
+    Revision 1</a> <em>(December 2011)</em>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+    <p>Initial release. The system version is 4.0.3.</p>
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>SDK Tools r14 or higher is required.</dd>
+    </dl>
+
+  </div>
+</div>
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes the following emulator skins:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA400 (240x400, low density, normal screen)
+  </li>
+  <li>
+    WQVGA432 (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+  <li>
+    WXGA720 (1280x720, extra-high density, normal screen) 
+  </li>
+  <li>
+    WSVGA (1024x600, medium density, large screen) 
+  </li>
+  <li>
+    WXGA (1280x800, medium density, xlarge screen)
+  </li>
+</ul>
+
+<p>To test your application on an emulator that represents the latest Android device, you can create
+an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
+currently doesn't support the new on-screen navigation bar for devices without hardware navigation
+buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
+<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
+
+<p>However, due to performance issues in the emulator when running high-resolution screens such as
+the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
+(hdpi, normal screen) to test your application.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="4.0">Android 4.0</h2>
+
+
+<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="" />
+    Android 4.0, Revision 2</a> <em>(December 2011)</em>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+    <p>Maintenance update. The system version is 4.0.2.</p>
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>SDK Tools r14 or higher is required.</dd>
+    </dl>
+  </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="" />
+    Android 4.0, Revision 1</a> <em>(October 2011)</em>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+    <p>Initial release. The system version is 4.0.1.</p>
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>SDK Tools r14 or higher is required.</dd>
+    </dl>
+  </div>
+</div>
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes the following emulator skins:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA400 (240x400, low density, normal screen)
+  </li>
+  <li>
+    WQVGA432 (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+  <li>
+    WXGA720 (1280x720, extra-high density, normal screen) <span class="new">new</span>
+  </li>
+  <li>
+    WSVGA (1024x600, medium density, large screen) <span class="new">new</span>
+  </li>
+  <li>
+    WXGA (1280x800, medium density, xlarge screen)
+  </li>
+</ul>
+
+<p>To test your application on an emulator that represents the latest Android device, you can create
+an AVD with the new WXGA720 skin (it's an xhdpi, normal screen device). Note that the emulator
+currently doesn't support the new on-screen navigation bar for devices without hardware navigation
+buttons, so when using this skin, you must use keyboard keys <em>Home</em> for the Home button,
+<em>ESC</em> for the Back button, and <em>F2</em> or <em>Page-up</em> for the Menu button.</p>
+
+<p>However, due to performance issues in the emulator when running high-resolution screens such as
+the one for the WXGA720 skin, we recommend that you primarily use the traditional WVGA800 skin
+(hdpi, normal screen) to test your application.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="3.2">Android 3.2</h2>
+
+
+
+<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="" />
+    Android 3.2, Revision 1</a> <em>(July 2011)</em>
+  </a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Initial release. SDK Tools r12 or higher is recommended.</dt>
+</dl>
+
+  </div>
+</div>
+
+
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes the following emulator skin:</p>
+
+<ul>
+  <li>
+    WXGA (1280x800, medium density, xlarge screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays
+and functions properly on all Android-powered devices, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="3.1">Android 3.1</h2>
+
+
+<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="" />
+  Android 3.1, Revision 3</a> <em>(July 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a> or
+higher.</p>
+</dd>
+<dt>Notes:</dt>
+<dd>
+<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
+Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
+bugs in the previous rendering library. It also unlocks several editor features that were added in
+ADT 12.</p>
+</dd>
+</dl>
+
+</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="" />
+  Android 3.1, Revision 2</a> <em>(May 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r11</a> or
+higher.</p>
+</dd>
+<dt>Notes:</dt>
+<dd>
+<p>Fixes an issue with the visual layout editor rendering library that prevented Android 3.1 from
+running in ADT.</p>
+</dd>
+</dl>
+
+</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="" />
+  Android 3.1, Revision 1</a> <em>(May 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r11</a> or
+higher.</p>
+</dd>
+</dl>
+
+</div>
+</div>
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes the following emulator skin:</p>
+
+<ul>
+  <li>
+    WXGA (1280x800, medium density, xlarge screen)
+  </li>
+</ul>
+
+<p>For more information about how to develop an application that displays
+and functions properly on all Android-powered devices, see <a
+href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple
+Screens</a>.</p>
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="3.0">Android 3.0</h2>
+
+
+<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="" />
+  Android 3.0, Revision 2</a> <em>(July 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a> or
+higher.</p>
+</dd>
+<dt>Notes:</dt>
+<dd>
+<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
+Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
+bugs in the previous rendering library. It also unlocks several editor features that were added in
+ADT 12.</p>
+</dd>
+</dl>
+
+</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="" />
+  Android 3.0, Revision 1</a> <em>(February 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+    
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r10</a> or higher.</p>
+</dd>
+</dl>
+
+</div>
+</div>
+
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes the following emulator skin:</p>
+
+<ul>
+  <li>
+    WXGA (1280x800, medium density, xlarge screen)
+  </li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="2.3.4">Android 2.3.4</h2>
+
+
+
+<p>The sections below provide notes about successive releases of
+the Android 2.3.4 platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+2.3.4 platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+<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="" />
+        Android 2.3.4, Revision 1</a> <em>(May 2011)</em>
+</a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>
+        <p>Requires SDK Tools r11 or higher.</p>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes a set of emulator skins that you can use
+for modeling your application in different screen sizes and resolutions. The
+emulator skins are:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA400 (240x400, low density, normal screen)
+  </li>
+  <li>
+    WQVGA432 (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+
+
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="2.3.3">Android 2.3.3</h2>
+
+
+<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="" />
+  Android 2.3.3, Revision 2</a> <em>(July 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a> or
+higher.</p>
+</dd>
+<dt>Notes:</dt>
+<dd>
+<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
+Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
+bugs in the previous rendering library. It also unlocks several editor features that were added in
+ADT 12.</p>
+</dd>
+</dl>
+
+</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="" />
+  Android 2.3.3, Revision 1</a> <em>(February 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r9 or higher.</p>
+</dd>
+</dl>
+
+</div>
+</div>
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes a set of emulator skins that you can use
+for modeling your application in different screen sizes and resolutions. The
+emulator skins are:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA400 (240x400, low density, normal screen)
+  </li>
+  <li>
+    WQVGA432 (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+  
+
+
+
+
+
+
+
+
+
+
+
+<h2 id="2.3">Android 2.3</h2>
+
+
+
+<p>The sections below provide notes about successive releases of
+the Android 2.3 platform component for the Android SDK, as denoted by
+revision number. To determine what revision(s) of the Android
+2.3 platforms are installed in your SDK environment, refer to
+the "Installed Packages" listing in the Android SDK and AVD Manager.</p>
+
+
+<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="" />
+        Android 2.3, Revision 1</a> <em>(December 2010)</em>
+</a></p>
+
+  <div class="toggle-content-toggleme" style="padding-left:2em;">
+    <dl>
+      <dt>Dependencies:</dt>
+      <dd>
+      <p>Requires SDK Tools r8 or higher.</p>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes a set of emulator skins that you can use
+for modeling your application in different screen sizes and resolutions. The
+emulator skins are:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA400 (240x400, low density, normal screen)
+  </li>
+  <li>
+    WQVGA432 (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
+
+
+  
+
+
+
+
+
+
+<h2 id="2.2">Android 2.2</h2>
+
+
+<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="" />
+  Android {@sdkPlatformVersion}, Revision 3</a> <em>(July 2011)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a> or
+higher.</p>
+</dd>
+<dt>Notes:</dt>
+<dd>
+<p>Improvements to the platform's rendering library to support the visual layout editor in the ADT
+Eclipse plugin. This revision allows for more drawing features in ADT and fixes several
+bugs in the previous rendering library. It also unlocks several editor features that were added in
+ADT 12.</p>
+</dd>
+</dl>
+
+</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="" />
+  Android {@sdkPlatformVersion}, Revision 2</a> <em>(July 2010)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r6 or higher.</p>
+</dd>
+
+<dt>System Image:</dt>
+<dd>
+<ul>
+<li>Adds default Search Widget.</li>
+<li>Includes proper provisioning for the platform's Backup Manager. For more information about how
+to use the Backup Manager, see <a href="{@docRoot}guide/topics/data/backup.html">Data
+Backup</a>.</li>
+<li>Updates the Android 2.2 system image to FRF91.</li>
+</ul>
+</dd>
+
+</dl>
+ </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="" />
+  Android {@sdkPlatformVersion}, Revision 1</a> <em>(May 2010)</em>
+</a></p>
+
+<div class="toggle-content-toggleme" style="padding-left:2em;">
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>Requires SDK Tools r6 or higher.</p>
+</dd>
+
+<dt>Tools:</dt>
+<dd>
+<p>Adds support for building with Android library projects. See <a href="tools-notes.html">SDK
+Tools, r6</a> for information.</p>
+</dd>
+
+</dl>
+ </div>
+</div>
+
+
+<h3>Emulator Skins</h3>
+
+<p>The downloadable platform includes a set of emulator skins that you can use
+for modeling your application in different screen sizes and resolutions. The
+emulator skins are:</p>
+
+<ul>
+  <li>
+    QVGA (240x320, low density, small screen)
+  </li>
+  <li>
+    WQVGA (240x400, low density, normal screen)
+  </li>
+  <li>
+    FWQVGA (240x432, low density, normal screen)
+  </li>
+  <li>
+    HVGA (320x480, medium density, normal screen)
+  </li>
+  <li>
+    WVGA800 (480x800, high density, normal screen)
+  </li>
+  <li>
+    WVGA854 (480x854 high density, normal screen)
+  </li>
+</ul>
\ No newline at end of file
diff --git a/docs/html/tools/samples/index.jd b/docs/html/tools/samples/index.jd
new file mode 100644
index 0000000..5c0e8db
--- /dev/null
+++ b/docs/html/tools/samples/index.jd
@@ -0,0 +1,31 @@
+page.title=Samples
+
+@jd:body
+
+<p>To help you understand some fundamental Android APIs and coding practices, a variety of sample
+code is available from the Android SDK Manager.</p>
+
+<p>To download the samples:</p>
+<ol>
+  <li>Launch the Android SDK Manager.
+    <ul>
+      <li>On Windows, double-click the SDK Manager.exe file at the root of the Android SDK
+directory.</li>
+      <li>On Mac or Linux, open a terminal to the {@code tools/} directory in the
+Android SDK, then execute {@code android sdk}.</ul>
+  </li>
+  <li>Expand the list of packages for the latest Android platform.</li>
+  <li>Select and download <em>Samples for SDK</em>.</li>
+</ol>
+
+<p>When the download is complete, you can find the samples sources at this location:</p>
+
+<p style="margin-left:2em">
+<code><em>&lt;sdk&gt;</em>/platforms/&lt;android-version>/samples/</code>
+</p>
+
+<p>You can easily create new Android projects with the downloaded samples, modify them
+if you'd like, and then run them on an emulator or device. </p>
+<!--
+<p>Below are summaries for several of the available samples.</p>
+-->
\ No newline at end of file
diff --git a/docs/html/tools/sdk/OLD_RELEASENOTES.jd b/docs/html/tools/sdk/OLD_RELEASENOTES.jd
new file mode 100644
index 0000000..6865db2
--- /dev/null
+++ b/docs/html/tools/sdk/OLD_RELEASENOTES.jd
@@ -0,0 +1,527 @@
+page.title=Release Notes for Older SDK Versions
+@jd:body
+
+<div class="special">
+  <p><strong>Note:</strong> These are the release notes for the "early-look" SDK versions, released
+  before the full Android 1.0 release in September 2008.
+  Release notes for the Android 1.0 and later SDK versions are provided in the main
+  <a href="{@docRoot}sdk/RELEASENOTES.html">Release Notes</a> document.</p>
+</div>
+
+
+
+<a name="0.9_r1" id="0.9_r1"></a>
+<h2>Android 0.9 SDK Beta (r1)</h2>
+
+<p>This beta SDK release contains a large number of bug fixes and improvements from the early-look SDKs.&nbsp; 
+The sections below describe the highlights of the release.
+
+<h3>New Features and Notable Changes</h3>
+
+<p><strong>Behavior and System Changes</strong></p>
+<ul>
+	<li>New Home screen and many user interface updates
+	</li>
+	<li>Minor changes to Activity lifecycle and task management
+	</li>
+	<li>New window option to request OpenGL acceleration for certain kinds of View structures
+	</li>
+</ul>
+<p>
+	<b>
+	Significant API Changes</b>
+</p>
+<ul>
+	<li>onFreeze(Bundle) renamed to onSaveInstanceState(Bundle), to better reflect the fact that it does not represent an actual change in application lifecycle
+	</li>
+	<li>IntentReceivers are now known as BroadcastReceivers (but still operate on Intents.)
+	</li>
+	<li>Various parts of the API cleaned up to use Intents instead of Bundles; Intent itself improved to reduce the need for separate payload Bundles.</li>
+	<li>ContentProvider Cursors have had significant changes to make them easier to create and remove certain data consistency bugs.
+	</li>
+	<li>Changes to menus to make them more flexible; also added context menus (similar to "right mouse button" menus)
+	</li>
+	<li>Changes to the Sensor API to make reading sensors more convenient and reduce the need to poll
+	</li>
+	<li>Improvements to the Camera API
+	</li>
+	<li>Significant changes to the Location API to make it easier to use and better self-documenting
+	</li>
+	<li>API cleanup on MapViews
+	</li>
+	<li>Performance-related changes to the MediaPlayer, as well as support for new types of ringtones
+	</li>
+	<li>Apache HTTPClient installation upgraded to 4.x of that API; 3.x version is removed
+	</li>
+	<li>HTTPClient 4.x removes multipart methods, include HttpMime which is an extension of Mime4j (http://james.apache.org/mime4j/index.html) in your project instead
+	</li>
+	<li>Improvements to WiFi and related networking
+	</li>
+	<li>New Preferences API to easily store small amounts of data
+	</li>
+	<li>Improvements to the Telephony API, including ability to obtain source number of incoming phone calls
+	</li>
+	<li>Variety of improvements to the View API
+	</li>
+	<li>Variety of improvements to component management, such as the ability to keep components private, better control over when processes are started, and ability to "alias" an Activity to more than one entry in AndroidManifest.xml
+	</li>
+	<li>Improvements to how the Browser and WebView, such as better control over content downloads
+	</li>
+	<li>A number of enhancements to XML layouts, such as the new &lt;merge&gt; tag
+	</li>
+	<li>Numerous improvements to the standard widgets
+	</li>
+	<li>Network access now requires that applications obtain a permission in their AndroidManifest.xml files.
+	</li>
+</ul>
+<p>
+	<b>
+	Maps &amp; Location</b>
+</p>
+<ul>
+	<li>The MapView will require an API key on final Android 1.0 devices. This key can be obtained at no cost from Google, and will allow access to the full MapView API. In this release, the API key must be provided but can be any dummy value.&nbsp; In the final 1.0-compatible SDKs, this will need to be a real key.
+	</li>
+	<li>The KML-based mock location provider supported in previous releases is no longer supported. In the current SDK, you can use the emulator console to send GPS fix updates to the emulator and applications running on it. Also, the DDMS tool provides an UI that you can use to easily upload GPX and KML files. DDMS handles playback of the KML or GPX tracks automatically. </li>
+</ul>
+<p>
+	<b>ADT Plugin for Eclipse</b></p>
+	<p>The ADT Plugin that accompanies this SDK includes a preview of the Graphical Layout Editor. Files located in &lt;project&gt;/res/layout[-qualifiers]/ will be opened with the new layout editor. This is very much a work in progress, and provided here for preview purpose. The editor feature is subject to change.
+</p>
+<ul>
+	<li>Dual page editor with a WYSIWYG page (the graphical editor) and an XML page with content assist.
+	</li>
+	<li>The interactivity in the editor itself is limited to selection at the moment. Actions on the layout elements can be done from the following standard Eclipse views: Outline (add/remove/up/down), and Properties (editing of all the element properties with a tooltip in the status bar).
+	</li>
+	<li>Top part of the editor allows you to display the layout in different configurations (language, orientation, size, etc...), and different themes.
+
+		<ul>
+			<li>All referenced resources (strings, bitmaps, etc...) are resolved based on the selected configuration/theme.
+			</li>
+			<li>A green check mark next to a resource qualifier indicates that the opened file matches the value of the qualifier. A warning sign indicates that the opened file does not specifies any value for this qualifier.
+			</li>
+			<li>If a different version of the opened layout matches the new configuration selection (in a different res/layout-qualifier folder) then the editor automatically switches to that new file.
+			</li>
+		</ul>
+	</li>
+	<li>Custom Views are supported, however if they do too much in their constructor/onDraw method, it may not work (the layout library used by the editor only includes a sub-part of the Android framework). Check the android console for errors/exceptions.
+	</li>
+</ul>
+
+<p>Known issues/limitations for Graphical Layout Editor include:</p>
+	
+		<ul>
+			<li>Font display is very close but not equals to on-device rendering since the font engine in Java slightly differs from the font engine in Android. This should not have any impact on your layouts.
+			</li>
+			<li>Creating new views in a relative layout automatically puts each new elements below each other using the <i>layout_below</i> attribute. However, until the layout file is saved, they will appear stacked on top of each other.
+			</li>
+			<li>Some XML based drawables don't draw. Fading in the scroll/list view appears as a white rectangle. Generally do not expect every single fancy drawing feature of the android framework to be supported in the layout editor (but we're working on it).
+			</li>
+			<li>Themes defined in the project are not added to the theme drop-down.
+			</li>
+			<li>No animation support!
+			</li>
+			<li>No support for WebView, MapView and SurfaceView.
+			</li>
+			<li>No UI support for &lt;merge&gt;, &lt;include&gt;, &lt;ViewStub&gt; elements. You can add these elements to your manifest using the xml editor only. 
+			</li>
+			<li>If a layout fails to render in a way that prevents the whole editor from opening, you can:
+
+			<ul>
+			<li>open that particular file in a different editor: right click the file in the package explorer and choose Open With... &gt; XML editor
+			</li>
+			<li>completely disable the layout editor, by setting a system wide environment variable called ANDROID_DISABLE_LAYOUT to any value.
+			</li>
+			</ul>
+			<li>If a layout fails to render, check the android console (in the standard Eclipse Console view). Errors/Exceptions will be displayed in there.
+			</li>
+	</ul>
+	</li>
+</ul>
+<p>Other ADT features/notes include:</p>
+<ul>
+	<li>There is a new launch option for activity. You can choose to launch the default activity (finds an activity configured to show up in the home screen), or a specific activity, or none.</li>
+	<li>Normal Java resources (non Java files placed in package folders) are now properly packaged in the final package, and can be accessed through normal java API such as ClassLoader.getResourceAsStream()</li>
+	<li>Launch configuration now has an option to wipe emulator data on launch. This always asks for confirmation.</li>
+	<li>Launch configuration now has an option to disable the boot animation. This will let the emulator start faster on older computers.</li>
+	<li>Installation of application is now more robust and will notify of installation failure. Also installation is blocking, removing issues where ADT tried to launch the activity before the app was installed.</li>
+
+</ul>
+
+<p><b>Ant Build Tools</b></p>
+
+<ul>
+  <li><span>External jar libraries are now directly supported by build.xml, just drop them in the libs directory.</li>
+</ul>
+
+<p><b>Emulator</b></p>
+
+<ul>
+  <li>The console port number of a given emulator instance is now displayed in its window's title bar.</li>
+  <li>You can define the console port number used by a given emulator instance.
+To do so, start the instance with the '-port &lt;port&gt;' option and
+specify which port the emulator should bind to for the console. &lt;port&gt; must be an *even* integer between 5554 and 5584 inclusive. The corresponding ADB port will be &lt;port&gt;+1.</li>
+  <li>The <code>-adb-port</code> command is deprecated. Please do not use it, as it will be removed soon and you cannot use both -port and -adb-port at the same time.</li>
+  <li>Voice/sms are automatically forwarded to other emulator instances running on the same machine, as long as you use their console port number as the destination phone number. For example, if you have two emulators running, the first one will typically use console port 5554, and the second one will use port 5556, dialing 5556 on the first emulator will generate an incoming call on the second emulator. You can also hold/unhold calls. This also works when sending SMS messages from one emulator to the other.</li>
+  <li>A new <code>-scale &lt;fraction&gt;</code> option allows you to scale the emulator window. </li>
+  <li>A new <code>-no-boot-anim</code> option tells the emulator to disable the boot animation. On slower systems, this can significantly reduce the time to boot the system in the emulator.</li>
+
+</ul>
+
+<p>
+	<b>Other Development Tools</b>
+</p>
+
+<p>The SDK includes several new development tools, such as</p>
+<ul>
+	<li><a href="{@docRoot}tools/help/hierarchy-viewer.html">HierarchyViewer</a> is a visual tool for inspecting and debugging your user interfaces and layout. </li>
+	<li><a href="{@docRoot}tools/help/draw9patch.html">Draw 9-patch</a> allows you to easily create a NinePatch graphic using a WYSIWYG editor. </li>
+	<li>The <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a> generates pseudo-random system and user events, for testing your application. </li>
+</ul>
+<p>
+	<b>Application Signing</b>
+</p>
+<ul>
+	<li>Starting with this release, Android .apk files must be cryptographically signed, or the system will reject them upon installation.&nbsp; The purpose of this requirement is to securely and uniquely identify developers, so that the system can -- for example -- safely let multiple .apk files signed by the same developer share resources.&nbsp;
+	</li>
+	<li>There are no requirements on the key used to sign .apk files;&nbsp; locally-generated and self-signed keys are allowed.&nbsp; There is no PKI, and developers will not be required to purchase certificates, or similar. &nbsp; For developers who use the Eclipse/ADT plugin, application signing will be largely automatic.&nbsp; Developers who do not use Eclipse/ADT can use the standard Java jarsigner tool to sign .apk files.
+	</li>
+</ul>
+<p>
+	<b>Sample Code</b>
+</p>
+<ul>
+	<li>LunarLander has been converted to render into a SurfaceView via a background Thread, for better performance.
+	</li>
+	<li>New sample: the source code for the now-obsolete Home screen from M5 is included as an example of how to construct a Home screen replacement.
+	</li>
+</ul>
+<p>
+	<b>
+	Removed Functionality</b>
+</p>
+<ul>
+	<li>Due to significant API changes in the upstream open-source project and due to the timeline of getting certain Bluetooth profile implementations certified, a comprehensive Bluetooth API will not be possible or present in Android 1.0.
+	</li>
+	<li>Due to the security risks inherent in accepting arbitrary data from "outside" the device, the data messaging facility of the GTalkService will not be present in Android 1.0.&nbsp; The GTalkService will provide connectivity to Google's servers for Google Talk instant messaging, but the API has been removed from this release while we improve the service.&nbsp; Note that this will be a Google-specific service and is not part of the core of Android.
+	</li>
+	<li>We know that these changes will affect many developers who have worked with the prior early looks at the SDK, and we are very sorry for the resulting inconvenience.&nbsp; We look forward to the possibilty of restoring some or all of this functionality in a later version of the Android platform.
+	</li>
+</ul>
+<p>
+	<b>
+	Miscellaneous</b>
+</p>
+<ul>
+	<li>Many internal and non-public APIs have been removed from the documentation.&nbsp; Classes and methods that are not present in the documentation are non-public and should not be used, even though they may appear in tools such as IDEs.&nbsp; A future version of the SDK will ship with an android.jar file that contains only public classes, to help developers avoid accidentally using non-public APIs.
+	</li>
+	<li>A few extraneous APIs (such as unnecessary packages under java.awt) have been removed.
+	</li>
+	<li>Several additional tools are included, such as a utility for easily drawing 9-patch images.
+	</li>
+	<li>The DDMS utility has been refactored into library form. This is not of direct interest to application developers, but may be of interest to vendors interested in integrating the Android SDK into their products. Watch for more information about the ddmlib library soon.
+	</li>
+	<li>For performance and maintainability reasons, some APIs were moved into separate modules that must be explicitly included in the application via a directive in AndroidManifest.xml.&nbsp; Notable APIs that fall into this category are the MapView, and the java.awt.* classes, which each now reside in separate modules that must be imported.&nbsp; Developers who overlook this requirement will see ClassNotFoundExceptions that seem spurious. 
+	</li>
+	<li>Developers who use 'adb push' to install applications must now use 'adb install', since the full package manager is now implemented. 'adb push' will no longer work to install .apk files.
+	</li>
+	<li>The emulator supports a variety of new options, and some existing options have been changed.&nbsp; Please consult the updated emulator documentation for details.
+	</li>
+</ul>
+
+<h3>
+	Resolved Issues
+</h3>
+<p>
+	The list below is not comprehensive, but instead highlights the most interesting fixes since the last SDK release.
+</p>
+<ul>
+	<li>More of the standard Android user applications are now included, such as the Music and Messaging applications.
+	</li>
+	<li>Many bug fixes to the Media Player
+	</li>
+	<li>Emulator performance is improved, especially for startup
+	</li>
+	<li>More internal APIs are removed from class documentation.&nbsp; (However, this work is not quite yet complete.)
+	</li>
+	<li>It's now much easier to add media content to the SD card and have the ContentProvider locate and expose it to other applications.
+	</li>
+</ul>
+
+<h3>
+	Known Issues
+</h3>
+<ul>
+	<li>The final set of Intent patterns honored by Android 1.0 has not yet been fully documented.&nbsp; Documentation will be provided in future releases.
+	</li>
+	<li>We regret to inform developers that Android 1.0 will not support 3.5" floppy disks.
+	</li>
+	<li>Unfortunately, the ability to play audio streams from memory (such as via an InputStream or Reader) will not be possible in Android 1.0.&nbsp; As a workaround, we recommend that developers save media content to SD card and use MediaPlayer to play from a file URI, or embed a small HTTP server and play from a URI on localhost (such as http://127.0.0.1:4242/something).
+	</li>
+	<li>Android now supports modules or libraries that can be optionally linked into applications; a good example is the MapView, which has been moved into such a library. However, Android 1.0 will not support the ability for third-party developers to create such libraries for sharing with other applications.
+	</li>
+	<li>We believe that we have eliminated the problem with very long emulator startups on Windows, but had some trouble reproducing the issue.&nbsp; We are interested in feedback from developers, if this issue persists.
+	</li>
+</ul>
+
+
+
+
+<a name="m5-rc15"></a>
+<h2>Version m5-rc15</h2>
+
+<h3>New Features</h3>
+<p>m5-rc15 does not introduce any new features.</p>
+
+<h3>Resolved Issues</h3>
+<ul>
+    <li>1012640: Incorrect handling of BMP images.</li>
+</ul>
+
+<h3>Known Issues</h3>
+<p>Unless otherwise noted, Known Issues from m5-rc14 also apply to m5-rc15.</p>
+
+
+
+
+<a name="m5-rc14"></a>
+<h2>Version m5-rc14</h2>
+
+<h3>New Features</h3>
+
+<p>In addition to changes in the Android APIs, m5-rc14 also introduces changes to the Android Developer Tools:</p>
+
+<h4>emulator</h4>
+<ul>
+    <li>The Android emulator now support SD card images up to 128 GB in size.  The previous limit was 2 GB.</li>
+</ul>
+
+<h4>DDMS</h4>
+<ul>
+    <li>Support for managing multiple devices has been integrated into DDMS.  This should make it easier to debug applications that are run on multiple device scenarios.</li>
+</ul>
+
+<h4>ADT</h4>
+<ul>
+    <li>ADT now attempts to connect a debugger to any application that shows up
+    in the wait-for-debugger state, even if this application was not launched
+    from Eclipse.
+    <br /><br />
+    The connection is actually established only if there exists a project
+    in the Eclipse workspace that contains an <code>AndroidManifest.xml</code>
+    declaring a package matching the name of the process.
+    To force this connection from your code, use <code>Debug.waitForDebugger()</code>. Activities declaring that they require their own process through the
+    "process" attribute with a value like ":someProcess" will be
+    recognized and a debugger will be connected accordingly.
+    This should make it easier to debug intent receivers, services,
+    providers, and other activities not launched from the standard app
+    launcher.<br /><br /></li>
+    <li>ADT has launch modes for device target selection.  Automatic mode will: 1) launch an emulator if no device is present, 2) automatically target the device if only one is connected, and 3) prompt the user if 2 or more are connected.  Manual mode will always prompt the user.<br /><br /></li>
+    <li>ADT also contains the same support for multiple devices that has been introduced into DDMS.</li>
+</ul>
+
+<h4>AIDL</h4>
+<ul>
+    <li>AIDL files that import and reuse types is now supported by activityCreator.py and ADT.</li>
+</ul>
+
+<h4>traceview</h4>
+<ul>
+    <li>The <a href="{@docRoot}tools/help/traceview.html">traceview</a> tool is now included in the SDK.</li>
+</ul>
+
+<h3>Resolved Issues</h3>
+
+<p>The following Known Issues from m3-rc20 have been resolved:</p>
+<ul>
+    <li>917572: The activityCreator created incorrect IntelliJ scripts</li>
+    <li>917465: Unanswered incoming calls placed from the emulator console will result in an unfinished call UI if you press the call back button</li>
+    <li>917247: dmtracedump and traceview tools are not available in the SDK</li>
+    <li>912168: Extremely rapid or prolonged scrolling in the Maps application or MapsView will result in application errors</li>
+    <li>905852: adb emits warnings about deprecated API use on Mac OS X 10.5</li>
+    <li>905242: The Run dialog sometimes failed to show the Android Launcher</li>
+    <li>901122: The focus ring in the browser is sometimes incorrect</li>
+    <li>896274: On Windows, the emulator sometimes starts off-screen</li>
+    <li>778432: Icons for newly installed applications do not display</li>
+</ul>
+
+<h3>Known Issues</h3>
+
+<p>The following are known issues in m5-rc14:</p>
+
+<ul>
+    <li>1017312: The emulator window size has been reduced slightly, to allow it to be fully visible on smaller screens. This causes a slight clipping of the HVGA emulator skin but does not affect its function.</li>
+    <li>1021777: Setting a power requirement in a <code>Criteria</code> object passed to <code>{@link android.location.LocationManager#getBestProvider getBestProvider()}</code> will result in a value not being returned.</li>
+    <li>1025850: Emulator failing to launch from the Eclipse plugin due to wrong custom command line parameters do not report the error anywhere and silently fails.</li>
+</ul>
+
+<p>Unless otherwise noted, Known Issues from m3-rc20a also apply to m5-rc14.</p>
+
+
+
+
+<a name="m3-rc37a"></a>
+<h2>Version m3-rc37a</h2>
+
+<p>Version m3-rc37a and ADT 0.3.3 were released on December 14, 2007.</p>
+
+<h3>New Features</h3>
+
+<h4>Android Debug Bridge (ADB)</h4>
+<ul>
+<li>Now supports multiple emulators on one host computer. Please note that you need to use the <code>-data</code> option when starting secondary emulators, to allow those instances to save their data across sessions. Also, DDMS does not yet support debugging on multiple emulators yet. </li>
+</ul>
+
+<h4>ADT Plugin for Eclipse</h4>
+<ul>
+<li>Adds editor capabilities for working with Android manifest files, such as syntax highlighting and autocompletion. The editor capabilities require the Web Tools WST plugin for Eclipse, which is included in <a href="http://www.eclipse.org/downloads/moreinfo/compare.php">most Eclipse packages</a>. Not having WST does not prevent the ADT plugin from working. If necessary, you can download and install WST from the Web Tools Project <a href="http://download.eclipse.org/webtools/downloads">downloads page</a>. To update directly from an Eclipse installation, you can add a remote update site with this URL: http://download.eclipse.org/webtools/updates . Note that installing WST on Eclipse 3.4 will require installing other packages, as detailed on the WTP downloads page</a>.
+</li>
+<li>Now retries to launch the app on the emulator if it fails due to timing issues when the emulator is booting.</li>
+<li>Adds support for loading custom skins from the &lt;SDK&gt;/lib/images/skins/ directory. The Skin dropdown in the Emulator tab is now built from the content of the skins/ directory in order to support developer-made skins.</li>
+<li>Adds an Emulator control panel. This is a UI on top of the emulator console that allows you to change the state of the network and gsm connection, and to initiate incoming voice call. (This is also present in standalone DDMS.)</li>
+<li>Adds support for referenced projects. Android projects will add to the apk package any code from referenced projects.</li>
+<li>Eclipse console now warns if an .apk that is pushed to the device declares the same package as another already installed package.</li>
+<li>Java classes generated by the Eclipse plugin are now marked as derived automatically, so that Team plugins do not consider them as regular source.</li>
+</ul>
+
+<h4>Emulator Console</h4>
+<ul>
+<li>Now provides support for emulating inbound SMS messages. The ADT plugin and DDMS provide integrated access to 
+this capability. For more information about how to emulate inbound SMS from the console, 
+see <a href="{@docRoot}tools/help/emulator.html#sms">SMS Emulation</a>. </li>
+</ul>
+
+<h4>Emulator</h4>
+<ul><li>The default emulator skin has been changed to HVGA-P from QVGA-L. For information 
+about emulator skins and how to load a specific skin when starting the emulator, see 
+<a href="{@docRoot}tools/help/emulator.html#skins">Using Emulator Skins</a>.</li>
+</ul>
+
+<h3>Resolved Issues</h3>
+
+<h4>907947</h4>
+<p><code>adb -version</code> now returns a version number.</p>
+
+<h4>917462</h4>
+<p>Audio on Windows is fixed and is no longer 'choppy'. </p>
+
+<h4>Removed Manifest File Locking on Mac OS X</h4>
+
+<p>ADT plugin now uses a custom java editor for R.java/Manifest.java, to make those files non-editable. This is to replace the current locking mechanism which causes issues on Mac OS (preventing projects from being deleted). Note that your project must recompile at least once for the lock to be removed from the files.</p>
+
+<h4>The following known issues noted in m3-rc20 are now fixed:</h4>
+<p>
+<ul>
+<li>890937: Emulator does not support non-qwerty keyboards.
+<li>894618: <code>adb shell</code> may fail to connect when used the first time.
+<li>896274: On Windows, the emulator window may start off-screen.
+<li>899949: The emulator may fail to start with <code>-useaudio</code> on some environments.
+<li>912619: Emulator console listens on non-local ports 5554-5584.
+<li>917399: On Windows, running multiple emulator consoles can result in unexpected behavior when simulating incoming telephone calls.
+</ul>
+</p>
+
+<h3>Known Issues</h3>
+
+<p>Unless otherwise noted, Known Issues from m3-rc22a also apply to m3-rc37a.</p>
+
+
+
+
+<a name="m3-rc22a"></a>
+<h2>Version m3-rc22a</h2>
+
+<p>Version m3-rc22a and ADT 0.3.1 were released on November 16, 2007.</p>
+
+<h3>Resolved Issues</h3>
+
+<h4>920067</h4>
+<p>The New Android Project wizard provided by ADT 0.3.1 now properly displays error messages when used with Eclipse 3.2 on Windows.</p>
+
+<h4>920045</h4>
+<p>The <code>AndroidManifest.xml</code> files generated by ADT 0.3.1 now include the XML element required for displaying the associated app in the "Applications" menu. If you have applications created with ADT 0.3.0, simply ensure that your <code>AndroidManifest.xml</code> file contains the following highlighted line:</p>
+<pre>
+...
+    &lt;intent-filter&gt;
+        &lt;action android:value=&quot;android.intent.action.MAIN&quot; /&gt;
+        <strong>&lt;category android:value=&quot;android.intent.category.LAUNCHER&quot; /&gt;</strong>
+    &lt;/intent-filter&gt;
+...
+</pre>
+
+<h4>920098</h4>
+<p>ADT 0.3.1 is now compatible with Eclipse 3.4.</p>
+
+<h4>920282</h4>
+<p>Fixes a NullPointerException that is thrown in certain situations with the DDMS perspective in Eclipse.</p>
+
+<h4>918637</h4>
+<p>Address a keyboard lock-up issue when using <code>adb</code> on Mac OS X 10.4 and 10.5.</p>
+
+<h3>Known Issues</h3>
+
+<p>Unless otherwise noted, known issues from m3-rc20a also apply to m3-rc22a.</p>
+
+<a name="m3-rc20a"></a>
+
+<h2>Version m3-rc20a</h2>
+<h3>Known Issues</h3>
+
+<p>The following are known issues in m3-rc20a:</p>
+
+<h4>778432 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>In certain circumstances, icons for newly installed applications do not display as expected.</p>
+
+<h4>890937 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
+<p>The emulator currently does not support non-QWERTY keyboards.</p>
+
+<h4>894618 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
+<p>The adb shell command may fail to connect when used for the first time.</p>
+
+<h4>896274 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>On Windows, the emulator screen will sometimes show up off-screen when it is started. The workaround for this is to right-click on the emulator taskbar entry, select Move, and move the window using keyboard arrow keys</p>
+
+<h4>899949 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
+<p>The emulator may fail to start when using the <code>-useaudio</code> in some environments</p>
+
+<h4>901122 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>The focus ring shown in the browser may sometimes not properly wrap links.</p>
+
+<h4>905242 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>On Mac OS X 10.5, the Eclipse plugin's Run Dialog may sometimes fail to show the option to select the Android Launcher.</p>
+
+<h4>905852 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>On Mac OS X 10.5, adb will emit warnings about deprecated API use when first used.</p>
+
+<h4>912168 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>extremely rapid or prolonged scrolling in the Maps application or in a MapView will result in application errors.</p>
+
+<h4>912619 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
+<p>The emulator console listens for connections on ports 5554-5587. Future versions will only accept connections from localhost. It is recommend that you use a firewall to block external connections to those ports on your development machine.</p>
+
+<h4>912849</h4>
+<p>On Mac OS X 10.4, the emulator may hang if started in the background (i.e. <code>./emulator &amp;</code>).</p>
+
+<h4>914692</h4>
+<p>On Mac OS X 10.5, the emulator will emit warnings about deprecated API use when started from the command line.</p>
+
+<h4>917247 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>The dmtracedump and traceview tools are not available in the SDK.</p>
+
+<h4>917399 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m3-rc37a">m3-rc37a</a></span></h4>
+<p>On Windows, running multiple emulator consoles can result in unexpected behavior when simulating incoming telephone calls.</p>
+
+<h4>917465 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>Unanswered incoming calls placed from the emulator console, will result in an unfinished call UI if you press the call back button.</p>
+
+<h4>917572 - <span style="font-weight: normal; font-size: 13px; font-style: italic">Resolved in <a href="#m5-rc14">m5</a></span></h4>
+<p>Using activityCreator with the <code>--ide intellij</code> option creates IntelliJ scripts with incorrect documentation location specified. To correct, change value for the <code>&lt;JAVADOC&gt;</code> element in the generated .ipr file from <code>file://.../docs/framework</code> to <code>file://.../docs/reference</code>.</p>
+
+<h4>917579</h4>
+<p>On Ubuntu 7.10 (Gusty), the Eclipse package installed by the <code>apt-get install eclipse</code> command uses java-gcj by default.  This configuration is not compatible with the Android Eclipse plugin (ADT) and will result in "Class not found" errors whenever you access an ADT feature.</p>
+    <p>The resolution for this issue is to install a Sun JDK</p>
+    <pre>sudo update-java-alternatives --jre java-1.5.0-sun</pre>
+    <p>and then configure Eclipse to use it by exporting the following environment variable:</p>
+    <pre>export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun</pre>
+    <p>or by adding following to your <code>.eclipse/eclipserc file</code>:</p>
+    <pre>JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun</pre>
+
diff --git a/docs/html/tools/sdk/RELEASENOTES.jd b/docs/html/tools/sdk/RELEASENOTES.jd
new file mode 100644
index 0000000..c7ece42
--- /dev/null
+++ b/docs/html/tools/sdk/RELEASENOTES.jd
@@ -0,0 +1,803 @@
+page.title=SDK Release Notes
+@jd:body
+
+<p>This document provides version-specific information about Android SDK
+releases. <!--For the latest known issues, please ensure that you're viewing this
+page at <a
+href="http://developer.android.com/sdk/RELEASENOTES.html">http://developer.
+android.com/sdk/RELEASENOTES.html</a>.--></p>
+
+<h2 id="multiversion_r1">Android SDK</h2>
+
+<p>The Android SDK has changed! If you've worked with the Android SDK before,
+you will notice several important differences:</p>
+
+<ul>
+<li style="margin-top:.5em">The SDK downloadable package includes <em>only</em>
+the latest version of the Android SDK Tools.</li>
+<li>Once you've installed the SDK, you now use the Android SDK and AVD Manager
+to download all of the SDK components that you need, such as Android platforms,
+SDK add-ons, tools, and documentation. </li>
+<li>The new approach is modular &mdash; you can install only the components you
+need and update any or all components without affecting your development
+environment.</li>
+<li>In short, once you've installed the new SDK, you will not need to download
+an SDK package again. Instead, you will use the Android SDK and AVD Manager to
+keep your development environment up-to-date. </li>
+</ul>
+
+<p>Note that if you are currently using the Android 1.6 SDK, you do not
+necessarily need to install the new SDK, since your existing SDK already
+includes the Android SDK and AVD Manager tool. To develop against Android 2.0.1,
+for example, you could just download the Android 2.0.1 platform into your existing
+SDK. </p>
+
+<p>Release notes for Android platforms and other SDK components are
+now available from the "SDK" tab, under "Downloadable SDK Components."</p>
+
+<ul>
+<li>Notes for the Android 2.0.1 platform are in the <a
+href="{@docRoot}about/versions/android-2.0.1.html">Android 2.0.1, Release 1</a> document. </li>
+<li>You can find information about tools changes in the <a
+href="{@docRoot}tools/sdk/tools-notes.html#notes">SDK Tools</a> and <a
+href="{@docRoot}tools/sdk/eclipse-adt.html#notes">ADT Plugin for Eclipse</a>.</li>
+</ul>
+
+<p>To get started with the SDK, review the Quick Start summary on the <a
+href="{@docRoot}sdk/index.html">Android SDK download page</a> or read <a
+href="{@docRoot}sdk/installing/index.html">Installing the SDK</a> for detailed
+installation instructions. </p>
+
+
+<h2 id="1.6_r1">Android 1.6 SDK, Release 1</h2>
+
+<p>This SDK provides updates to the development tools and Android system that
+you use to create applications for compliant Android-powered devices. </p>
+
+<h3>Release Overview</h3>
+
+<p>This SDK release includes several new features for developers. Highlights of the
+changes include: </p>
+
+  <ul>
+    <li>Emulator support for multiple screen sizes/densities, including new
+skins. </li>
+    <li>Android SDK and AVD Manager, a graphical UI to let you manage your
+SDK and AVD environments more easily. The tool lets you create and manage 
+your <a href="{@docRoot}tools/devices/managing-avds.html">Android Virtual
+Devices</a> and download new SDK packages (such as platform versions and 
+add-ons) into your environment.</li>
+    <li>Improved support for test packages in New Project Wizard</li>
+    <li>The reference documentation now offers a "Filter by API Level" 
+capability that lets you display only the parts of the API that are actually 
+available to your application, based on the <code>android:minSdkVersion</code>
+value the application declares in its manifest. For more information, see
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
+  </ul>
+
+<p>For details about the Android platforms included in the SDK &mdash; including
+bug fixes, features, and API changes &mdash; please read the <a
+href="android-1.6.html">Android 1.6 version notes</a>.</p>
+
+<h3>Installation and Upgrade Notes</h3>
+
+<p>If you've been developing an application using an Android 1.1 SDK, you need
+to make a few changes to your development environment to migrate to the new SDK.
+Tools and documentation are provided to assist you. No changes to the source
+code of an existing application should be needed, provided that your application
+is not using Android internal structures or APIs.</p>
+
+<p>To ensure that your existing application will work properly on a device
+running the latest version of the Android platform, you are strongly encouraged
+to migrate the application to the new SDK, compile it using the platform
+matching the application's original API Level, and run it against the most
+current platform. </p>
+
+<h3>ADT Plugin for Eclipse</h3>
+
+<p>An updated version of the ADT Plugin for Eclipse is available with the
+Android 1.6 SDK. The new version, ADT 0.9.3, provides several new
+features, including integrated support for the Android SDK and AVD Manager
+and zipalign tool. In addition, the New Project Wizard now
+lets you create a test package containing tests for your application. These
+features are described in the sections below. </p>
+
+<p>If you are developing in Eclipse with ADT and want to get started with the
+Android 1.6 SDK, you should download and install a compatible version of the ADT
+Plugin (0.9.3 or higher). </p>
+
+<p>The new version of ADT is downloadable from the usual remote update site or
+is separately downloadable as a .zip archive. For instructions on how to
+download the plugin, please see <a
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>. </p>
+
+<h3>Android SDK and AVD Manager</h3>
+
+<p>The SDK offers a new tool called Android SDK and AVD Manager that lets you 
+manage your SDK and AVD environments more efficiently. </p>
+
+<p>Using the tool, you can quickly check what Android platforms, add-ons,
+extras, and documentation packages are available in your SDK environment, what
+their versions are, and whether updated versions are available. You can then
+download one or more items from remote repositories and install them directly in
+your SDK environment. For example, the tool lets you obtain updates to SDK tools
+incrementally, as they are made available, without having to wait for the next
+SDK release. You can also download Android platform versions into your
+environment that were not included in the SDK package.</p>
+
+<p>The tool also lets you quickly create new AVDs, manage
+their properties, and run a target AVD from a single window. </p>
+
+<p>If you are developing in Eclipse with ADT, you can access the Android SDK 
+and AVD Manager from the <strong>Window</strong> menu. </p>
+
+<p>If you are developing in another IDE, you can access the Android SDK and 
+AVD Manager through the <code>android</code> command-line tool, located in the
+&lt;sdk&gt;/tools directory. You can launch the tool with a graphical UI by
+using the <code>android</code> command without specifying any options. You can
+also simply double-click the android.bat (Windows) or android (OS X/Linux) file.
+You can still use <code>android</code> commands to create and manage AVDs, 
+including AVDs with custom hardware configurations.</p>
+
+<h3>Integration with zipalign</h3>
+
+<p>The Android system offers a performance optimization for installed
+application packages whose contained uncompressed files are all aligned on
+4-byte boundaries. For these .apks, the system can read the files by mmap'ing
+the zip file, rather than by copying all the data out of them. This reduces
+the amount of memory used by the application at run time. The SDK includes
+a tool called <code>zipalign</code> that you can run against your .apks, to
+align them properly and enable them to benefit from this optimization.</p>
+
+<p>The ADT Plugin and the Ant build tools both provide integrated support for
+aligning your application packages. After you build an .apk, the SDK tools can
+sign and then run <code>zipalign</code> against it. The SDK includes the
+standalone version of the <code>zipalign</code> tool, so you can run also run it
+manually from the command line if you choose. </p>
+
+<ul>
+  <li>If you are developing in Eclipse with ADT, support for
+<code>zipalign</code> is integrated into the Export Wizard. When you use the
+Wizard to export a signed application package, ADT signs and then automatically
+runs <code>zipalign</code> against the exported package. If you use the Wizard 
+to export an unsigned application package, then it will not zipalign the 
+package because zipalign must be performed only after the APK has been signed. 
+You must manually sign and zipalign the package after export. </li>
+  <li>If you are developing using Ant and are compiling in release mode, the
+build tools will automatically sign and then <code>zipalign</code> the
+application package, provided that you have specified the location of a valid
+keystore in the build properties file. If you are compiling in debug mode, the
+build tools will sign the package with the debug key and then <code>zipalign</code>
+it.</li>
+  <li>To use <code>zipalign</code> manually, change to the SDK tools directory
+and use the command syntax <code>$ zipalign 4 &lt;infile&gt;
+&lt;outfile&gt;</code></li>
+</ul>
+
+<p>In general, note that you must <code>zipalign</code> an application only
+<em>after</em> it has been signed, as signing will disrupt the package
+alignment.</p>
+
+<h3>Support for Test Packages in New Project Wizard</h3>
+
+<p>The New Project Wizard available in the ADT 0.9.3 now lets you add a test
+package containing Instrumentation or other classes of tests while you are 
+creating or importing a new Android application project. </p>
+
+<h3>New USB Driver for Windows</h3>
+
+<p>If you are using Windows and want to develop or test your application on an
+Android-powered device (such as the T-Mobile G1), you need an appropriate USB
+driver. 
+
+<p>The Windows version of the Android 1.6 SDK includes a new, WinUSB-based
+driver that you can install. The driver is compatible with both 32- and 64-bit
+versions of Windows XP and Vista. The driver represents an upgrade from the USB
+driver included in previous Android SDKs, although installing the new driver is
+not required. </p>
+
+<p>If you installed the USB driver from a previous SDK release and it is working
+properly, you do not need to upgrade to the new driver. However, we recommend
+upgrading if you have had any problems with the older driver or simply want
+to upgrade to the latest version.</p>
+
+<p>For driver installation or
+upgrade instructions, see  <a
+href="{@docRoot}sdk/win-usb.html">USB Driver for Windows</a>.</p>
+</p>
+
+<h3>Emulator Skins, Android 1.6 Platform</h3>
+
+<p>The Android 1.6 platform included in the SDK provides a new set of emulator
+skins, including: </p>
+
+<ul>
+  <li>QVGA &mdash; 240 x 320, low density (120 dpi)</li>
+  <li>HVGA &mdash; 320 x 480, medium density (160 dpi)</li>
+  <li>WVGA800  &mdash; 480 x 800, high density (240 dpi)</li>
+  <li>WVGA854  &mdash; 480 x 854, high density (240 dpi)</li>
+</ul>
+
+<p>Besides these defaults, You can also create an AVD that overrides the default
+density for each skin, to create any combination of resolution/density (WVGA
+with medium density, for instance).  To do so, use the <code>android</code> tool
+command line to create a new AVD that uses a custom hardware configuration. See
+<a href="{@docRoot}tools/devices/managing-avds.html#createavd">Creating an
+AVD</a> for more information.</p>
+
+<h3>Other Notes and Resolved Issues</h3>
+
+<ul>
+  <li>This SDK release adds support for Eclipse 3.5 (Galileo) and deprecates
+support for Eclipse 3.3 (Europa). </li>
+  <li>We regret to inform developers that Android 1.6 will not include support
+for <a href="http://www.ietf.org/rfc/rfc2549">RFC 2549</a></li>
+  <li>The issue preventing adb from recognizing Samsung Galaxy devices (linux SDK
+only) has been fixed.</li>
+</ul>
+
+
+<h2 id="1.5_r3">Android 1.5 SDK, Release 3</h2>
+
+<p>Provides an updated Android 1.5 system image that includes permissions
+fixes, as described below, and a new application &mdash; an IME for Japanese 
+text input. Also provides the same set of developer tools included in the 
+previous SDK, but with bug fixes and several new features.</p>
+
+<h3>Permissions Fixes</h3>
+
+<p>The latest version of the Android platform, deployable to 
+Android-powered devices, includes fixes to the permissions-checking
+in certain areas of the framework. Specifically, the Android system
+now properly checks and enforces several existing permissions where it
+did not do so in the previous release. Because of these changes in 
+enforcement, you are strongly encouraged to test your application 
+against the new Android 1.5 system image included in this SDK, to ensure 
+that it functions normally. </p>
+
+<p>In particular, if your application uses any of the system areas listed below,
+you should add the required permissions to the application's manifest and then
+test the areas of your code that depend on the permission-protected services.
+Even if you believe your application does not use the permissions-protected
+services, you should compile and test your application under the latest platform
+version to ensure that users will not encounter problems when using your
+application. </p>
+
+<p>The changes to permissions are as follows:</p>
+
+<ul>
+<li>When an application requests access to device camera (through
+android.hardware.camera), the <code>CAMERA</code> permission check is now
+properly enforced. </li>
+<li>When an application requests access to device audio capture (through
+android.media.MediaRecorder), the <code>RECORD_AUDIO</code> permission check is
+now properly enforced.</li>
+</ul>
+
+<p>For more information, see the issue described in the oCert advisory
+below:</p>
+
+<p style="margin-left: 2em;"><a href="http://www.ocert.org/advisories/ocert-2009-011.html">http://www.ocert.org/advisories/ocert-2009-011.html</a> </p>
+
+<h3>Resolved Issues, Changes</h3>
+
+<ul>
+<li>The SDK includes a new version of the Google APIs add-on. The add-on
+provides an updated com.google.android.maps external library that fixes compile
+errors related to certain classes such as GeoPoint. For information about the
+Google APIs add-on and the library it provides, see:
+
+<p style="margin-left:2em;"><a
+href="http://code.google.com/android/add-ons/google-apis">http://code.google.com/android/add-ons/google-apis</a> </p></li>
+
+<li>The SDK add-on architecture now lets device manufacturers specify a USB
+Vendor ID in their add-ons. 
+<li>The <code>android</code> tool provides a new command that scans SDK add-ons
+for their USB Vendor IDs and makes them available to adb (OS X and Linux
+versions of the SDK only). The command is  <code>android update adb</code>. On
+Windows versions of the SDK, a custom USB driver is included that supports the
+"Google" and "HTC" Vendor IDs, which allow adb to recognize G1 and HTC
+Magic devices. For other devices, contact the device manufacturer 
+to obtain a USB driver, especially if you have an SDK add-on that defines 
+a new USB Vendor ID.</li>
+<li>The telephony, sensor, and geo fix issues in the emulator are now
+fixed.</li>
+<li>When you use adb to uninstall an upgraded application, the Android system
+now properly restores any permissions that had already been granted to the
+previous (downgrade) version of the application</li>
+</ul>
+
+<h2 id="1.5_r2">Android 1.5 SDK, Release 2</h2>
+
+<p>This SDK release provides the same developer tools as the Android 1.5 SDK,
+Release 1, but provides an updated Android 1.5 system image that includes a
+security patch for the issue described in the oCert advisory below:</p>
+
+<p style="margin-left:2em;"><a href="http://www.ocert.org/advisories/ocert-2009-006.html">http://www.ocert.org/advisories/ocert-2009-006.html</a></p>
+
+<h2 id="1.5_r1">Android 1.5 SDK, Release 1</h2>
+
+<p>This SDK provides updates to the development tools and Android system that
+you use to create applications for compliant Android-powered devices. </p>
+
+<h3>Release Overview</h3>
+
+<p>This SDK release includes many new features for developers. Highlights of the
+changes include: </p>
+
+  <ul>
+    <li>Multiple versions of the Android platform are included (Android 1.1,
+Android 1.5). The tools are updated to let you deploy your application
+on any platform in the SDK, which helps you ensure forward-compatibility and, 
+if applicable, backward-compatibility.</li>
+    <li>Introduces <a href="{@docRoot}tools/devices/managing-avds.html">Android
+Virtual Devices</a> &mdash; (AVD) configurations of options that you
+run in the emulator to better model actual devices. Each AVD gets its
+own dedicated storage area, making it much easier to work with multiple emulators 
+that are running concurrently.</li>
+    <li>Support for SDK add-ons, which extend the
+Android SDK to give you access to one or more external Android libraries and/or
+a customized (but compliant) system image that can run in the emulator. </li>
+    <li>The new Eclipse ADT plugin (version 0.9.x) offers new Wizards to let you
+create projects targeted for specific Android configurations, generate XML
+resources (such as layouts, animations, and menus), generate alternate layouts,
+and export and sign your application for publishing.</li>
+    <li>Improved JUnit support in ADT</li>
+    <li>Easier profiling of performance</li>
+    <li>Easier management of localized applications. You can now include or
+exclude locale resources when building your APK from a single
+Android project.</li>
+    <li>A new tool called "android" replaces the activitycreator script.</li>
+  </ul>
+
+<p>For details about the Android platforms included in the SDK &mdash; including
+bug fixes, features, and API changes &mdash; please read the <a
+href="{@docRoot}about/versions/android-1.5.html">Android 1.5 version notes</a>.</p>
+
+<h3>Installation and Upgrade Notes</h3>
+
+<p>If you've been developing an application using an Android 1.1 SDK, you need
+to make a few changes to your development environment to migrate to the new SDK.
+Tools and documentation are provided to assist you. No changes to the source
+code of an existing application should be needed, provided that your application
+is not using Android internal structures or APIs.</p>
+
+<p>To ensure that your existing application will work properly on a device
+running the latest version of the Android platform, you are strongly encouraged
+to migrate the application to the new SDK, compile it using the platform
+matching the application's original API Level, and run it against the most
+current platform. </p>
+
+<h3>SDK Add-Ons</h3>
+
+<p>This version of the SDK introduces support for SDK add-ons, which extend the
+Android SDK to give you access to one or more external Android libraries and/or
+a customized (but compliant) system image that can run in the emulator. The
+purpose of an SDK add-on is to give you a way to develop applications for a
+specific actual device (or family of devices) that extends the APIs available to
+Android applications through external libraries or system customizations. </p>
+
+<p>From the perspective of your Android development environment, an SDK add-on
+is similar to any of the Android platform targets included in the SDK &mdash; it
+includes an external library, a system image, as well as custom emulator skins
+and system properties. The add-on differs in that the Android platform it
+provides may include customized UI, resources, or behaviors, a different set of
+preinstalled applications, or other similar modifications. 
+
+<p>The SDK includes a single SDK add-on &mdash; the Google APIs add-on. The
+Google APIs add-on gives your application access to the com.google.android.maps
+external library that is included on many (if not most) Android-powered devices. 
+The Google APIs add-on also includes a {@link android.location.Geocoder Geocoder}
+backend service implementation. For more information, see the "Maps External 
+Library" section below. </p>
+
+<h3>Android Virtual Devices (AVDs)</h3>
+
+<p>The SDK now gives you the capability to compile an application against any
+one of several system targets, then run it in the emulator on top of any
+compatible system image. There are two types of targets:</p>
+<ul>
+<li>Targets that represent core Android platform versions. </li>
+<li>Targets that are SDK add-ons, which typically provide application access to
+one or more external libraries and/or a customized (but compliant) system image
+that can run in the emulator. 
+</ul>
+
+<p>A new tool called "android" lets you discover what targets and AVDs are
+available to use.</p>
+
+<p>For more information about AVDs, see <a
+href="{@docRoot}tools/devices/index.html">Creating and Managing Virtual Devices</a>
+
+<h3>Other Notes</h3>
+
+<p><strong>Maps External Library</strong></p>
+
+<p>In previous versions of the SDK, the com.google.android.maps package was
+included in the standard Android library and system image. In the Android 1.5
+SDK, that is not the case. The Android 1.5 library and system image do not
+include the Maps external library (com.google.android.maps). However, the Maps
+external library is available as part of the Google APIs add-on for the Android
+SDK, downloadable from this location: </p>
+
+<p style="margin-left:2em;"><a
+href="http://code.google.com/android/add-ons/google-apis">http://code.google.com
+/android/add-ons/google-apis</a> </p>
+
+<p>For your convenience, the Google APIs add-on is included in the SDK. </p>
+
+<p>For information about how to register for a Maps API Key, see 
+<a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">
+Obtaining a Maps API Key</a>.</p>
+
+<p><strong>USB Drivers for Windows</strong></p>
+
+<p>If you are using Windows and want to develop or test your application on an
+Android-powered device (such as the T-Mobile G1), you need an appropriate USB
+driver. For your convenience, the Windows version of the Android SDK includes
+these USB drivers that you can install, to let you develop on the device:</p>
+
+<ul>
+<li>USB driver for 32-bit XP and Vista</li>
+<li>USB driver for 64-bit Vista only</li>
+</ul>
+
+<p>For driver installation or
+upgrade instructions, see  <a
+href="{@docRoot}sdk/win-usb.html">USB Driver for Windows</a>.</p>
+</p>
+
+<h3>Resolved Issues, Changes</h3>
+
+<p><strong>Media</strong></p>
+<ul>
+<li>Updated documentation for {@link android.media.SoundPool
+android.media.SoundPool}</li>
+<li>{@link android.webkit.WebView} objects no longer automatically save
+thumbnails. The {@link android.webkit.WebView#capturePicture() capturePicture()}
+method will need to be called manually.</li>
+</ul>
+
+<h3>Known Issues</h3>
+
+<p><strong>Sensor problems in Emulator</strong></p>
+
+<ul>
+<li>If your application uses the Sensor API and you are running it in the
+emulator on the Android 1.5 system image, you may experience problems. Your
+application may generate ANR messages or crash when using the sensors. The
+problem is being investigated.</li>
+</ul>
+
+<p><strong>Other</strong></p>
+
+<ul>
+<li>We regret to inform developers that Android 1.5 will not include support for
+the Zilog Z80 processor architecture.</li>
+</ul>
+
+
+<h2 id="1.1_r1">Android 1.1 SDK, Release 1</h2>
+
+<p>This SDK provides the development tools and Android system image you need to
+create applications for Android-powered devices. Applications developed on this
+SDK will be compatible with mobile devices running the Android 1.1 platform.
+</p>
+
+<p>This release provides an updated system image (Android 1.1), updated
+documentation, and the same set of development tools provided in the Android 1.0
+r2 SDK. The updated system image includes bug fixes and some smaller features,
+as well as a few minor API changes from the 1.0 version. </p>
+
+<p>For details about the Android 1.1 system image included in the SDK &mdash;
+including bug fixes, features, and API changes &mdash; please read the <a
+href="{@docRoot}about/versions/android-1.1.html">Android 1.1 version notes</a>.</p>
+
+<h3>App Versioning for Android 1.1</h3>
+
+<p>If you are using this SDK to build an application that is compatible
+<em>only</em> with Android-powered devices running the Android 1.1 platform,
+please note that you <strong>must</strong> set the the
+<code>android:minSdkVersion</code> attribute in the application's manifest to
+the API Level of Android 1.1 &mdash; "2".</p>
+
+<p>Specifically, you specify the <code>android:minSdkVersion</code> attribute in
+a <code>&lt;uses-sdk&gt;</code> element as a child of
+<code>&lt;manifest&gt;</code> in the manifest file. When set, the attribute
+looks like this: </p>
+
+<pre><code>&lt;manifest&gt;
+  ...
+  &lt;uses-sdk android:minSdkVersion="2" /&gt;
+  ...
+&lt;/manifest&gt;</code>
+</pre>
+
+<p>By setting <code>android:minSdkVersion</code> in this way, you ensure that
+users will only be able to install your application if their devices are running
+the Android 1.1 platform. In turn, this ensures that your application will
+function properly on their devices, especially if it uses APIs introduced in
+Android 1.1. </p>
+
+<p>If your application uses APIs introduced in Android 1.1 but does not declare
+<code>&lt;uses-sdk android:minSdkVersion="2" /&gt;</code>, then it will run properly on
+Android 1.1 devices but <em>not</em> on Android 1.0 devices. </p>
+
+<p>If your application does not use any new APIs introduced in Android 1.1, you
+can indicate Android 1.0 compatibility by removing <code>android:minSdkVersion</code> or
+setting the attribute to "1". However, before publishing your application, you
+must make sure to compile your application against the Android 1.0 system image
+(available in the Android 1.0 SDK), to ensure that it builds and functions
+properly for Android 1.0 devices. You should test the application against system
+images corresponding to the API Levels that the application is designed to be
+compatible with.</p>
+
+<p>If you are sure your application is not using Android 1.1 APIs and has no
+need to use them, you might find it easier to keep working in the Android 1.0
+SDK, rather than migrating to the Android 1.1 SDK and having to do additional
+testing.</p>
+
+
+<h3>ADT Plugin Compatibility</h3>
+
+<p>For this version of the SDK &mdash; Android 1.1 SDK, Release 1
+&mdash; the compatible version of the Android Development Tools (ADT)
+Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a
+previous version of ADT, you should update to the latest version for use
+with this SDK. For information about how to update your ADT plugin, see
+<a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
+
+<h3>Installation and Upgrade Notes</h3>
+
+<p>If you've been developing an application using an Android 1.0 SDK no
+changes to your application are needed. You may want to wipe application
+user data (emulator option <code>-wipe-data</code>) when running your
+application on the Android 1.1 emulator for the first time.</p>
+
+<h3>Other Notes</h3>
+
+<p><strong>MapView API Key</strong></p>
+
+<p>com.google.android.maps.MapView is a class that lets you
+easily integrate Google Maps into your application. Before you can
+access the maps data, you will need to register with the Google Maps
+service and receive a Maps API Key, which you then add to your MapView
+for authentication to the server.</p>
+
+<p>Developers should note that the registration service for MapView is now
+active and Google Maps is actively enforcing the Maps API Key requirement. 
+For information about how to register for a Maps API Key, see 
+<a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">
+Obtaining a Maps API Key</a>.</p>
+
+<p><strong>USB Drivers for Windows</strong></p>
+
+<p>If you using Windows and want to develop or test your application on an
+Android-powered device (such as the T-Mobile G1), you need an appropriate USB
+driver. For your convenience, the Windows version of the Android SDK includes
+these USB drivers that you can install, to let you develop on the device:</p>
+
+<ul>
+<li>USB driver for 32-bit XP and Vista</li>
+<li>USB driver for 64-bit Vista only</li>
+</ul>
+
+<p>The USB driver files are located in the
+<code>&lt;SDK&gt;/usb_driver</code> directory. For details and
+installation instructions, see <a
+href="{@docRoot}tools/device.html#setting-up">Connecting Hardware Devices</a>.</p>
+</p>
+
+<h3>Resolved Issues, Changes</h3>
+
+<p><strong>Emulator</strong></p>
+<ul>
+<li>Emulator now saves the user image in &lt;android&gt;/SDK1.1/</code></li>
+</ul>
+
+<h3>Known Issues</h3>
+
+<p><strong>JUnit and Eclipse/ADT</strong></p>
+<ul>
+<li>If you are developing in Eclipse/ADT and want to add JUnit test
+classes, you can do so. However, you need to set up a custom JUnit configuration
+before your tests will run properly. For detailed information about how to set
+up the JUnit configuration, see the troubleshooting topic <a
+href="{@docRoot}resources/faq/troubleshooting.html#addjunit">Running a Junit test class
+in Eclipse</a>.</li>
+</ul>
+
+<p><strong>Other</strong></p>
+
+<ul>
+<li>It is not possible to send MMS messages between emulator instances. </li>
+<li>In some cases, you may encounter problems when using the browser on an
+emulator started with the command-line option <code>-http-proxy</code>. </li>
+<li>On the OSX platform, if you manually remove the ~/.android directory
+using <code>rm -rf ~/.android</code>, then try to run 
+the emulator, it crashes. This happens because the emulator fails to create 
+a new .android directory before attempting to create the child SDK1.0 directory.
+To work around this issue, manually create a new .android directory using
+<code>mkdir ~/.android</code>, then run the emulator. The emulator 
+creates the SDK1.0 directory and starts normally. </li>
+<li>We regret to inform developers that Android 1.1 will not include support 
+for ARCNet network interfaces.</li>
+<li>The final set of Intent patterns honored by Android 1.0 has not yet been
+fully documented. Documentation will be provided in future releases.</li>
+<li>In ADT Editor, you can add at most ten new resource values at a time,
+in a given res/values/*.xml, using the form in the Android Resources pane. 
+If you add more than ten, the Android Resources pane will not display the
+attributes fields for the additional resource entries. To work around this 
+problem, you can close the file in the editor and open it again, or you 
+can edit the resource entries in the XML text mode. </li>
+<li>The emulator's battery-control commands (<code>power &lt;option&gt</code>)
+are not working in this release.</li>
+</ul>
+
+
+<h2 id="1.0_r2">Android 1.0 SDK, Release 2</h2>
+
+<p>This SDK release includes the Android 1.0 platform and application API.
+Applications developed on this SDK will be compatible with mobile devices
+running the Android 1.0 platform.</p>
+
+<p>This release includes mainly bug fixes, although some smaller features were
+added.</p>
+
+<h3>ADT Plugin Compatibility</h3>
+
+<p>For this release of the SDK, the compatible version of the Android
+Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are
+using a previous version of ADT, you should update to the latest version for use
+with this SDK. For information about how to update your ADT plugin, see <a
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a>.</p>
+
+<h3>Other Notes</h3>
+
+<p><strong>T-Mobile G1 Compatibility</strong></p>
+
+<p>This version of the SDK has been tested for compatibility with the first 
+Android-powered mobile device, the T-Mobile
+G1. </p>
+
+<p><strong>MapView API Key</strong></p>
+
+<p>MapView is a class that lets you easily integrate Google Maps into your
+application. Before you can access the maps data, you will need to register with
+the Google Maps service and receive a Maps API Key, which you then add to your
+MapView for authentication to the server.</p>
+
+<p>Developers should note that the registration service for MapView is now
+active and Google Maps is actively enforcing the Maps API Key requirement. For
+information about how to register for a Maps API Key, see <a
+href="http://code.google.com/android/add-ons/google-apis/mapkey.html">http://code.google.com/android/add-ons/google-apis/mapkey.html</a>.
+</p>
+
+<p><strong>USB Driver for Windows</strong></p>
+<p>If you using Windows and want to develop or test your application on an
+Android-powered device (such as the T-Mobile G1), you need an appropriate USB
+driver. For your convenience, the Windows version of the Android SDK includes a
+USB driver that you can install, to let you develop on the device. The USB
+driver files are located in the <code>&lt;SDK&gt;/usb_driver</code> directory. 
+
+</p>
+
+<h3>Resolved Issues, Changes</h3>
+<ul>
+<li>The android.jar in this SDK release now includes several classes that were
+missing from the previous SDK. </li>
+<li>The android.R.styleable class and its fields were removed from the public
+API, to better ensure forward-compatibility for applications. The constants
+declared in android.R.styleable were platform-specific and subject to arbitrary
+change across versions, so were not suitable for use by applications. You can
+still access the platform's styleable attributes from your resources or code. To
+do so, declare a custom resource element using a
+<code>&lt;declare-styleable&gt;</code> in your project's res/values/R.attrs
+file, then declare the attribute inside. For examples, see 
+&lt;sdk&gt;/samples/ApiDemos/res/values/attrs.xml. For more information about
+custom resources, see <a
+href="{@docRoot}guide/topics/resources/available-resources.html#customresources">Custom
+Layout Resources</a>. Note that the android.R.styleable documentation is still
+provided in the SDK, but only as a reference of the platform's styleable
+attributes for the various elements.</li>
+<li>The VM now properly ensures that private classes are not 
+available to applications through reflection. If you were using reflection
+to access private classes in a previous release, you will now get a run-time 
+error. </li>
+
+<li>The Settings and Email applications are now included in the SDK and
+available in the emulator.</li>
+<li>We regret to inform developers that SDK 1.0_r2 does not support MFM, RLL, 
+or Winchester hard disk drives.</li>
+<li>In the emulator, the control key for enabling/disabling trackball mode 
+is changed from Control-T to F6. You can also enter trackball mode temporarily
+using the Delete key. While the key is pressed, you can send trackball events.</li>
+</ul>
+
+<p>Unless otherwise noted, Known Issues from the previous SDK release also apply
+to this release.</p>
+
+
+
+
+
+
+<h2 id="1.0_r1">Android 1.0 SDK, Release 1</h2>
+
+<p>This SDK release is the first to include the Android 1.0 platform and application API. Applications developed on this SDK will be compatible with mobile devices running the Android 1.0 platform, when such devices are available.</p>
+
+<p>This release includes mainly bug fixes, although some smaller features were added. The Android 1.0 also includes several API changes from the 0.9 version. For those porting from the M5 release, the SDK also includes the legacy changes overview and API Differences Reports. See the current Overview of Changes for more information. </p>
+
+<h3>ADT Plugin Compatibility</h3>
+
+<p>For this version of the SDK &mdash; Android 1.0 SDK, Release 1 &mdash; the compatible version of the Android Development Tools (ADT) Plugin for Eclipse is <strong>0.8.0</strong>. If you are using a previous version of ADT, you should update to the latest version for use with this SDK. For information about how to update your ADT plugin, see <a href="{@docRoot}sdk/1.0_r1/upgrading.html">Upgrading the SDK</a>.</p>
+
+<h3>Installation and Upgrade Notes</h3>
+
+<p>If you've been developing an application using a previous SDK version and you want the application to run on Android-powered mobile devices, you must port the application to the Android 1.0 SDK. Please see <a href="{@docRoot}sdk/1.0_r1/upgrading.html">Upgrading the SDK</a> for detailed instructions on how to make the transition to this release.  Be sure to wipe application user data (emulator option <code>-wipe-data</code>) when running your application on the Android 1.0 SDK emulator.</p>
+
+<h3>Other Notes</h3>
+
+<p><strong>MapView API Key</strong></p>
+
+<p>MapView is a class that lets you easily integrate Google Maps into your application. Before you can access the maps data, you will need to register with the Google Maps service and receive a Maps API Key, which you then add to your MapView for authentication to the server.</p>
+
+<p>Currently, the registration service for MapView is not yet active and Google Maps is not yet enforcing the Maps API Key requirement. However, note that the registration service will be activated soon, so that MapViews in any application deployed to a mobile device will require registration and a valid Maps API Key. </p>
+
+<p>As soon as the registration service becomes available, we will update the page at <a href="http://code.google.com/android/add-ons/google-apis/mapkey.html">http://code.google.com/android/add-ons/google-apis/mapkey.html</a> with details about how and where to register. Please check that page periodically for registration information, if you are using a MapView.</p>
+
+
+<h3>Resolved Issues, Changes</h3>
+
+<p><strong>Emulator</strong></p>
+<ul>
+<li>Emulator now saves the user image in &lt;android&gt;/SDK1.0/</code></li>
+<li>Fixed EsounD-related freezes on Linux.</li>
+<li>Fixed the documentation in -help-audio. '-audio list' doesn't work, one
+ needs to call -help-audio-out and -help-audio-in to get the list of valid
+ audio backends.</li>
+<li>Fixed scrollwheel Dpad emulation in rotated mode. before that, using the
+ scroll-wheel would always generated Dpad Up/Down events, even when in
+ landscape mode.</li>
+
+<li>Several Obsolete command options were removed.</li>
+<li>Setting the network speed through the console or the -netspeed option will
+ properly modify the connectivity icon on the device.</li>
+<li>Setting the GSM voice registration state to 'roaming' in the console will
+ properly modify the voice icon on the device</li>
+</ul>
+
+<p><strong>SQLite</strong></p>
+<ul>
+<li>SQLite is now included in the SDK package on all platforms. </li>
+</ul>
+
+<p><strong>Other</strong></p>
+
+<ul>
+<li>It is not possible to send MMS messages between emulator instances. </li>
+<li>In some cases, you may encounter problems when using the browser on an
+emulator started with the command-line option <code>-http-proxy</code>. </li>
+
+<li>We regret to inform developers that Android 1.0 will not include support for
+dot-matrix printers.</li>
+<li>On the OSX platform, if you manually remove the ~/.android directory
+using <code>rm -rf ~/.android</code>, then try to run 
+the emulator, it crashes. This happens because the emulator fails to create 
+a new .android directory before attempting to create the child SDK1.0 directory.
+To work around this issue, manually create a new .android directory using
+<code>mkdir ~/.android</code>, then run the emulator. The emulator 
+creates the SDK1.0 directory and starts normally. </li>
+<li>The final set of Intent patterns honored by Android 1.0 has not yet been
+fully documented. Documentation will be provided in future releases.</li>
+<li>In ADT Editor, you can add at most ten new resource values at a time,
+in a given res/values/*.xml, using the form in the Android Resources pane. 
+If you add more than ten, the Android Resources pane will not display the
+attributes fields for the additional resource entries. To work around this 
+problem, you can close the file in the editor and open it again, or you 
+can edit the resource entries in the XML text mode. </li>
+<li>The emulator's battery-control commands (<code>power &lt;option&gt</code>)
+are not working in this release.</li>
+
+</ul>
+
diff --git a/docs/html/tools/sdk/addons.jd b/docs/html/tools/sdk/addons.jd
new file mode 100644
index 0000000..8c5e1ed
--- /dev/null
+++ b/docs/html/tools/sdk/addons.jd
@@ -0,0 +1,9 @@
+page.title=SDK Add-Ons
+
+@jd:body
+
+
+
+<p>A page that lists SDK addons and links to release notes. Links to dashboards etc.</p>
+
+
diff --git a/docs/html/sdk/adt-notes.jd b/docs/html/tools/sdk/adt-notes.jd
similarity index 100%
rename from docs/html/sdk/adt-notes.jd
rename to docs/html/tools/sdk/adt-notes.jd
diff --git a/docs/html/sdk/adt_download.html b/docs/html/tools/sdk/adt_download.html
similarity index 100%
rename from docs/html/sdk/adt_download.html
rename to docs/html/tools/sdk/adt_download.html
diff --git a/docs/html/sdk/download.jd b/docs/html/tools/sdk/download.jd
similarity index 100%
rename from docs/html/sdk/download.jd
rename to docs/html/tools/sdk/download.jd
diff --git a/docs/html/tools/sdk/eclipse-adt.jd b/docs/html/tools/sdk/eclipse-adt.jd
new file mode 100644
index 0000000..ac200b6
--- /dev/null
+++ b/docs/html/tools/sdk/eclipse-adt.jd
@@ -0,0 +1,1178 @@
+page.title=ADT Plugin
+
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}sdk/installing/installing-adt.html">Installing the Eclipse
+Plugin</a></li>
+  </ol>
+
+</div>
+</div>
+
+<p>Android Development Tools (ADT) is a plugin for the Eclipse IDE
+that is designed to give you a powerful, integrated environment in which
+to build Android applications.</p>
+
+<p>ADT extends the capabilities of Eclipse to let you quickly set up new Android
+projects, create an application UI, add packages based on the Android
+Framework API, debug your applications using the Android SDK tools, and even
+export signed (or unsigned) {@code .apk} files in order to distribute your application.</p>
+
+<p>Developing in Eclipse with ADT is highly recommended and is the fastest way
+to get started. With the guided project setup it provides, as well as tools
+integration, custom XML editors, and debug output pane, ADT gives you an
+incredible boost in developing Android applications. </p>
+
+<p>This document provides step-by-step instructions on how to download the ADT
+plugin and install it into your Eclipse development environment. Note that
+before you can install or use ADT, you must have compatible versions of both the
+Eclipse IDE and the Android SDK installed. For details, make sure to read <a
+href="#installing">Installing the ADT Plugin</a>, below. </p>
+
+<p>If you are already using ADT, this document also provides instructions on
+how to update ADT to the latest version or how to uninstall it, if necessary.
+</p>
+
+<p>For information about the features provided by the ADT plugin, such as code
+editor features, SDK tool integration, and the graphical layout editor (for drag-and-drop layout
+editing), see the <a href="{@docRoot}tools/help/adt.html">Android Developer Tools</a>
+document.</p>
+
+
+<h2 id="notes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the ADT Plugin, as denoted by revision number. </p>
+
+<p>For a summary of all known issues in ADT, see <a
+href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+
+<style>
+.toggleable {
+padding: 5px 0 0;
+}
+.toggleme {
+  padding: 10px 0 0 20px;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0 5px 3px 0;
+}
+</style>
+
+
+<div class="toggleable opened">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 18.0.0</a> <em>(April 2012)</em>
+  <div class="toggleme">
+<dl>
+  <dt>Dependencies:</dt>
+
+  <dd>
+    <ul>
+      <li>Java 1.6 or higher is required for ADT 18.0.0.</li>
+      <li>Eclipse Helios (Version 3.6.2) or higher is required for ADT 18.0.0.</li>
+      <li>ADT 18.0.0 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools
+      r18</a>. If you haven't already installed SDK Tools r18 into your SDK, use the Android SDK
+      Manager to do so.</li>
+    </ul>
+  </dd>
+
+  <dt>Bug fixes:</dt>
+  <dd>
+    <ul>
+      <li>Fixed problem where exporting release package does not recompile libraries in release
+        mode.
+        (<a href="http://code.google.com/p/android/issues/detail?id=27940">Issue 27940</a>)</li>
+    </ul>
+  </dd>
+
+</dl>
+
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 17.0.0</a> <em>(March 2012)</em>
+  <div class="toggleme">
+<dl>
+  <dt>Dependencies:</dt>
+
+  <dd>
+    <ul>
+      <li>Java 1.6 or higher is required for ADT 17.0.0.</li>
+      <li>Eclipse Helios (Version 3.6.2) or higher is required for ADT 17.0.0.</li>
+      <li>ADT 17.0.0 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools
+      r17</a>. If you haven't already installed SDK Tools r17 into your SDK, use the Android SDK
+      Manager to do so.</li>
+    </ul>
+  </dd>
+
+  <dt>General improvements:</dt>
+  <dd>
+    <ul>
+      <li>New build features
+        <ul>
+          <li>Added feature to automatically setup JAR dependencies. Any {@code .jar} files in the
+          {@code /libs} folder are added to the build configuration (similar to how the Ant build
+          system works). Also, {@code .jar} files needed by library projects are also automatically
+          added to projects that depend on those library projects.
+          (<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">more
+          info</a>)</li>
+          <li>Added a feature that allows you to run some code only in debug mode. Builds now
+generate a class called {@code BuildConfig} containing a {@code DEBUG} constant that is
+automatically set according to your build type. You can check the ({@code BuildConfig.DEBUG})
+constant in your code to run debug-only functions.</li>
+          <li>Added support for custom views with custom attributes in libraries. Layouts using
+custom attributes must use the namespace URI {@code http://schemas.android.com/apk/res-auto} instead
+of the URI that includes the app package name. This URI is replaced with the app specific one at
+build time.</li>
+        </ul>
+      </li>
+      <li>Improved Lint features. See the <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r17</a>
+release notes.</li>
+      <li>Improved the Lint user interface
+        <ul>
+          <li>Added <strong>Run Lint</strong> toolbar action with a dropdown menu for selecting
+specific (or all) projects, clearing results and other actions.</li>
+          <li>Updated the results window to be organized as a tree rather than a flat list. Each
+issue type has a single top level item, which makes it easier to quickly scan through the reported
+issues and narrow down to the issues you are most interested in.</li>
+          <li>Added many new toolbar actions to the results window, including expand/collapse,
+ignore in file, ignore in project, ignore everywhere, show options, and configure columns.</li>
+          <li>Added new column options for the <strong>Lint Warnings</strong> tab, such as
+category, priority, project, file and line. The column selection (as well as the column sizes) are
+persisted. You can also click on columns to sort by those values.</li>
+          <li>Added Enable All and Disable All buttons to the Lint Options dialog, and a search
+filter textbox to filter by issue id, summary and severity.</li>
+        </ul>
+      </li>
+      <li>Added Quick Outline for XML editors (Ctrl-O, Command-O). This feature shows the structure
+of the current file including icons and ids, lets you filter and quickly jump to specific ids.</li>
+      <li>Updated the resource chooser to shows the resolved value for resources. For example,
+when selecting {@code @string/hello} the chooser displays a resolved value such as "Hello World").
+The resource chooser also now allows you to edit the chosen value directly.</li>
+      <li>Updated Layout Editor so that it does not assign default ids to layouts, includes and
+merge tags. This behavior tended to pollute the namespace with a lot of unused resources since
+layouts are not usually manipulated via code, or referenced from XML. (The RelativeLayout editor
+automatically assigns ids to views without ids when pointing to them.)</li>
+      <li>Added ability to export screenshots from the Layout Editor</li>
+    </ul>
+  </dd>
+
+  <dt>Bug fixes:</dt>
+  <dd>
+    <ul>
+      <li>Fixed problem using Layout Editor with {@link android.widget.SlidingDrawer} which could
+        not be dragged into the layout on some platforms.</li>
+      <li>Fixed preview rendering for {@link android.widget.SlidingDrawer} and 
+        {@link android.widget.TabHost}.
+        (<a href="http://code.google.com/p/android/issues/detail?id=23022">Issue 23022</a>).</li>
+      <li>Fixed issues that could prevent layout rendering due to unresolvable resources.
+        (<a href="http://code.google.com/p/android/issues/detail?id=21046">Issue 21046</a>,
+        <a href="http://code.google.com/p/android/issues/detail?id=21051">Issue 21051</a>)</li>
+      <li>Fixed a bug in resource chooser which made some types of framework resources impossible to
+select. (<a href="http://code.google.com/p/android/issues/detail?id=20589">Issue 20589</a>)</li>
+      <li>Fixed a bug in the formatter where a certain whitespace pattern could result in a
+        non-space character getting deleted.
+        (<a href="http://code.google.com/p/android/issues/detail?id=23940">Issue 23940</a>)</li>
+      <li>Fixed a locale bug affecting Turkish locales in particular.
+        (<a href="http://code.google.com/p/android/issues/detail?id=23747">Issue 23747</a>)</li>
+      <li>Fixed issue where dex complains about duplicate classes in cases where a Library
+        Project depends on the same jar files or Java-only projects.</li>
+      <li>Fixed issue where test projects had to independently reference the library projects used
+        by an app project. Now referencing only the app project is enough.</li>
+    </ul>
+  </dd>
+
+</dl>
+
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 16.0.1</a> <em>(December 2011)</em>
+  <div class="toggleme">
+<dl>
+  <dt>Dependencies:</dt>
+
+  <dd>
+    <ul>
+      <li>Eclipse Helios (Version 3.6) or higher is required for ADT 16.0.1.</li>
+      <li>ADT 16.0.1 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools
+        r16</a>. If you haven't already installed SDK Tools r16 into your SDK, use the Android SDK
+        Manager to do so.</li>
+    </ul>
+  </dd>
+
+  <dt>Bug fixes:</dt>
+  <dd>
+    <ul>
+      <li>Fixed build issue where the 9-patch could be packaged as normal bitmap in some cases.</li>
+      <li>Fixed minor issues in the <a href="http://tools.android.com/recent/lint">Lint</a>
+        tool.</li>
+      <li>Fixed minor issues in the SDK Manager.</li>
+    </ul>
+  </dd>
+</dl>
+
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 16.0.0</a> <em>(December 2011)</em>
+  <div class="toggleme">
+<dl>
+  <dt>Dependencies:</dt>
+
+  <dd>
+    <ul>
+      <li>Eclipse Helios (Version 3.6) or higher is required for ADT
+16.0.0.</li>
+      <li>ADT 16.0.0 is designed for use with <a
+href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r16</a>. If you haven't already installed SDK Tools
+r16 into your SDK, use the Android SDK Manager to do so.</li>
+    </ul>
+  </dd>
+
+  <dt>General improvements:</dt>
+  <dd>
+    <ul>
+      <li>Added Lint tool to detect common errors in Android projects. (<a
+href="http://tools.android.com/recent/lint">more info</a>)</li>
+    </ul>
+  </dd>
+</dl>
+
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 15.0.1</a> <em>(November 2011)</em>
+  <div class="toggleme">
+<dl>
+  <dt>Dependencies:</dt>
+
+  <dd>ADT 15.0.1 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r15</a>.
+  If you haven't already installed SDK Tools r15 into your SDK, use the Android SDK Manager to
+  do so.</dd>
+
+  <dt>Bug fixes:</dt>
+  <dd>
+    <ul>
+      <li>Fixed how source files are attached to library project <code>.jar</code> files.</li>
+      <li>Fixed how the <code>bin/</code> folder for library projects are refreshed. This ensures that parent projects pick up changes in library projects.</li>
+      <li>Fixed how a parent project's library container is updated when a library project is recompiled. This ensures that parent projects are
+      recompiled when code in a library project changes.</li>
+      <li>Fixed how <code>res/</code> folders are checked in library projects. This ensures that all <code>res</code> folders are properly included
+      even if Eclipse is not aware of them due to refresh issues.</li>
+      <li>Fixed issue that prevented <code>aapt</code> from running when editing certain XML files.</li>
+      <li>Fixed minor XML formatting issues.</li>
+    </ul>
+  </dd>
+</dl>
+
+</div>
+</div>
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 15.0.0</a> <em>(October 2011)</em>
+  <div class="toggleme">
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 15.0.0 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r15</a>.
+If you haven't already installed SDK Tools r15 into your SDK, use the Android SDK Manager to
+do so.</dd>
+
+<dt>Bug fixes:</dt>
+<dd>
+<ul>
+  <li>Fixed build issue when using Renderscript in projects that target API levels 11-13
+    (<a href="http://code.google.com/p/android/issues/detail?id=21006">Issue 21006</a>).</li>
+  <li>Fixed issue when creating projects from existing source code.</li>
+  <li>Fixed issues in the SDK Manager
+    (<a href="http://code.google.com/p/android/issues/detail?id=20939">Issue 20939</a>,
+    <a href="http://code.google.com/p/android/issues/detail?id=20607">Issue 20607</a>).</li>
+  <li>Fixed scrolling issue in the new Logcat panel of DDMS.</li>
+</ul>
+</dd>
+</dl>
+
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 14.0.0</a> <em>(October 2011)</em>
+  <div class="toggleme">
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 14.0.0 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r14</a>.
+If you haven't already installed SDK Tools r14 into your SDK, use the Android SDK Manager to
+do so.</dd>
+
+<dt>Build system:</dt>
+<dd>
+  <ul>
+    <li>Changed <code>default.properties</code> to <code>project.properties</code> and
+    <code>build.properties</code> to <code>ant.properties</code>. ADT automatically
+    renames these files, if necessary, when you open a project in Eclipse.</li>
+    <li>Changed how library projects are built in Eclipse.</a></li>
+    <li>Changed output of <code>javac</code> from <code>bin/</code> to <code>bin/classes</code>
+    in Eclipse.</li>
+    <li>Improved incremental builds so that resource compilation runs less frequently. Builds no
+    longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
+    run once for each library project.</li>
+    <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
+    crunching all existing PNG files, all the time.</li>
+    <li>Modified resource compilation so it no longer happens for normal save operations. It only
+    happens when running or debugging (the build option that lets you disable the packaging
+    step, which was introduced in ADT 12, is now on by default.)</li>
+  </ul>
+<p>For a complete overview of the build system changes and what you need to do to support them,
+see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
+site</a>.</p>
+</dd>
+
+<dt>General improvements:</dt>
+<dd>
+  <ul>
+
+
+<li>Added a Welcome Wizard to help with the initial setup of the Android
+development environment (<a href="http://tools.android.com/recent/welcomewizard">more
+info</a>).</li>
+<li>Integrated the Android Asset Studio, which helps you create icons for things
+like the launcher, menus, and tabs. (<a
+href="http://tools.android.com/recent/assetstudiointegration">more
+info</a>).</li>
+<li>Revamped the Logcat view and added support to display and filter logs by
+   application names as well as PIDs (<a
+   href="http://tools.android.com/recent/updatedlogcatviewer">more info</a>).</li>
+<li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
+info</a>).</li>
+<li>Revamped the New Project and the New XML File wizards to have
+multiple pages. Sample projects are now copied into the workspace such that they can be modified
+and deleted without affecting the master copy
+(<a href="http://tools.android.com/recent/revampedwizards">more info</a>).</li>
+<li>Removed the dependency on Eclipse GEF.</li>
+</ul>
+</dd>
+
+<dt>XML and Java editors:</dt>
+<dd>
+  <ul>
+    <li>Added a new XML formatter that formats all XML files according to the
+   standard Android coding style. The formatter can also reorder
+   attributes to follow a recommended order and processes any changes made in the Layout editor.
+(<a href="http://tools.android.com/recent/xmlformatter">more info</a>).</li>
+  <li>Added the "Go to Matching" (Ctrl-Shift-P) feature, which lets you jump
+between opening and closing tags in XML files.</li>
+  <li>Added support for the "Select Enclosing Element" feature on Mac.</li>
+  <li>Added a Quickfix for extracting Strings when the caret is inside a String (<a href="">see
+more</a>).</li>
+  <li>Improved "smart indent", which allows automatic indentation and un-indentation
+   when pressing the Return key in XML editors (<a
+href="http://tools.android.com/recent/xmleditingimprovements">more info</a>).</li>
+
+  </ul>
+</dd>
+
+<dt>Layout editor:</dt>
+<dd>
+  <ul>
+    <li>Added tooltip feedback for dragging and resizing operations. For
+    example, when dragging in a relative layout, the proposed
+    constraints are shown. When resizing, the new dimensions are
+    shown (<a href="http://tools.android.com/recent/layouteditorfeedbacktooltips">more
+info</a>).</li>
+    <li>Added the ability to suppress rendering fidelity warnings (<a
+href="http://tools.android.com/recent/suppressrenderwarnings">more info</a>).</li>
+    <li>Added "Remove Container" visual refactoring that removes the
+    children of a container up to the top level and transfers
+    namespace and layout attributes if necessary (<a
+href="http://tools.android.com/recent/removecontainervisualrefactoring">more info</a>).</li>
+    <li>Added pull-right menus to the context menu for accessing
+    properties of the parents, which is useful when the children fully
+    cover the parent and make it hard to select on their own.</li>
+     <li>Improved access to properties in the context menu. The most
+    frequently set attributes for each view are listed at the top of
+    the menu. The Properties menu offers access to the most
+    recently set attributes, attributes organized by their defining
+    view, and layout attributes only or all attributes alphabetically (<a
+href="http://tools.android.com/recent/layouteditorcontextmenuimprovements">more info</a>).</li>
+  </ul>
+</dd>
+
+<dt>Bug fixes:</dt>
+<dd>Fixed many bugs and added <a
+href="http://tools.android.com/recent/miscellaneousrecentfixes">minor improvements</a>, in
+particular some <a href="http://tools.android.com/recent/linuxfixes">critical bug fixes on
+Linux</a>.</dd>
+
+</div>
+</div>
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 12.0.0</a> <em>(July 2011)</em>
+  <div class="toggleme">
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 12.0.0 is designed for use with <a href="{@docRoot}tools/sdk/tools-notes.html">SDK Tools r12</a>. If you haven't
+already installed SDK Tools r12 into your SDK, use
+the Android SDK Manager to do so.</dd>
+
+<dt>Visual Layout Editor:</dt>
+<dd>
+<ul>
+  <li>New RelativeLayout drop support with guideline suggestions for
+   attachments and cycle prevention
+   (<a href="http://tools.android.com/recent/revampedrelativelayoutsupport">more info</a>).</li>
+  <li>Resize support in most layouts along with
+  guideline snapping to the sizes dictated by <code>wrap_content</code> and <code>match_parent</code>.
+  In LinearLayout, sizes are mapped to weights instead of pixel widths.
+  (<a href="http://tools.android.com/recent/resizesupport">more info</a>).</li>
+  <li>Previews of drawables and colors in the resource chooser dialogs
+  (<a href="http://tools.android.com/recent/imageandcolorpreviews">more info</a>).</li>
+  <li>Improved error messages and links for rendering errors including
+  detection of misspelled class names
+  (<a href="http://tools.android.com/recent/improvedrenderingerrordiagnostics">more info</a>).</li>
+</ul>
+</dd>
+
+<dt>Build system:</dt>
+<dd>
+<ul>
+  <li id="build-option">A new option lets you disable the packaging step in the automatic
+  builders. This improves performance when saving files by not
+  performing a full build, which can take a long time for large projects.
+  If the option is enabled, the APK is packaged when the
+  application is deployed to a device or emulator or when the
+  release APK is exported (<a href="http://tools.android.com/recent/finercontroloveradtbuildprocess">more info</a>).</li>
+</ul>
+</dd>
+
+<dt>Bug fixes:</dt>
+<dd>Many bug fixes are part of this release
+(<a href="http://tools.android.com/recent/adt12bugfixroundup">more info</a>).</dd>
+
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 11.0.0</a> <em>(June 2011)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 11.0.0 is designed for use with SDK Tools r11. If you haven't
+already installed SDK Tools r11 into your SDK, use the Android SDK Manager to do
+so.</dd>
+
+<dt>Visual Refactoring:</dt>
+<dd>
+  <ul>
+    <li>"Extract Style" feature pulls out style-related attributes from your layout and extracts
+them as a new style defined in {@code styles.xml} (<a
+href="http://tools.android.com/recent/extractstylerefactoring">more info</a>).</li>
+    <li>"Wrap in Container" feature lets you select a group of views then surround them
+    in a new layout (a new view group, such as a LinearLayout), and transfers namespace and layout
+    parameters to the new parent (<a
+href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
+info</a>).</li>
+    <li>"Change Layout" feature changes layouts from one type
+    to another, and can also flatten a layout hierarchy (<a
+href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
+info</a>).</li>
+    <li>"Change Widget Type" feature changes the type of the
+    selected views to a new type. Also, a new selection context menu
+    in the visual layout editor makes it easy to select siblings as
+    well as views anywhere in the layout that have the same type (<a
+href="http://tools.android.com/recent/newrefactoringswrapinchangelayoutchangewidget">more
+info</a>).</li>
+    <li>"Extract as Include" feature finds identical collections of views
+    in other layouts and offers to combine them into a single layout that you can then include in
+ each layout (<a
+href="http://tools.android.com/recent/extractasincludeimprovements">more info</a>).</li>
+    <li>Quick Assistant in Eclipse can be invoked
+    from the XML editor (with Ctrl-1) to apply any of the above
+    refactorings (and Extract String) to the current selection (<a
+href="http://tools.android.com/recent/refactoringquickassistant">more info</a>).</li>
+  </ul>
+</dd>
+
+<dt>Visual Layout Editor:</dt>
+<dd>
+  <ul>
+    <li>This is the update to the layout editor you've been waiting for! It includes (almost) all
+the goodies demonstrated at Google I/O. <a href="http://www.youtube.com/watch?v=Oq05KqjXTvs">Watch
+the video</a> on YouTube.</li>
+    <li>The palette now supports different configurations for supported widgets. That is, a single
+view is presented in various different configurations that you can drag into your layout. For
+example, there is a <em>Text Fields</em> palette category where you can drag an {@link
+android.widget.EditText} widget in as a password field, an e-mail field, a phone field, or other
+types of text boxes. Similarly, {@link android.widget.TextView} widgets are preconfigured
+with large, normal and small theme sizes, and {@link android.widget.LinearLayout} elements are
+preconfigured in horizontal and vertical configurations (<a
+href="http://tools.android.com/recent/multipletextfieldandlayouttypes">more info</a>).</li>
+    <li>The palette supports custom views. You can pick up any custom
+    implementations of the View class you've created in your project or from included libraries and
+drag them into your layout (<a
+href="http://tools.android.com/recent/customviewsinthepalette">more info</a>).</li>
+    <li>Fragments are available in the palette for placement in your layout. In the tool, you can
+choose which layout to show rendered for a given fragment tag. Go to declaration works for fragment
+classes (<a href="http://tools.android.com/recent/fragmentsupport">more info</a>).</li>
+    <li>The layout editor automatically applies a "zoom to fit" for newly
+    opened files as well as on device size and orientation changes to
+    ensure that large layouts are always fully visible unless you
+    manually zoom in.</li>
+    <li>You can drop in an {@code &lt;include&gt;} element from the palette, which will pop up
+    a layout chooser. When you select the layout to include, it is added with an {@code
+&lt;include&gt;}. Similarly, dropping images or image buttons will pop up image
+    resource choosers (<a
+href="http://tools.android.com/recent/includetagdropsupport">more info</a>).</li>
+    <li>The configuration chooser now applies the "Render Target" and
+    "Locale" settings project wide, making it trivial to check the
+    layouts for different languages or render targets without having
+    to configure these individually for each layout.</li>
+    <li>The layout editor is smarter about picking a default theme to
+    render a layout with, consulting factors like theme registrations
+    in the manifest, the SDK version, and other factors.</li>
+    <li>The layout editor is smarter about picking a default configuration to render a layout
+with, defaulting to the currently visible configuration in the previous file. It also considers the
+SDK target to determine whether to default to a tablet or phone screen size.</li>
+    <li>Basic focus support. The first text field dropped in a layout is assigned focus, and there
+are <strong>Request Focus</strong> and <strong>Clear Focus</strong> context menu items on text
+fields to change the focus.</li>
+  </ul>
+</dd>
+
+<dt>XML editors:</dt>
+<dd>
+<ul>
+  <li>Code completion has been significantly improved. It now works
+  with {@code &lt;style&gt;} elements, completes dimensional units,
+  sorts resource paths in values based on the attribute name, and more. There are also many fixes to
+handle text replacement (<a
+href="http://tools.android.com/recent/xmlcodecompletionimprovements">more info</a>).</li>
+  <li>AAPT errors are handled better. They are now underlined for the
+  relevant range in the editor, and a new quickfix makes it trivial
+  to create missing resources.</li>
+  <li>Code completion for drawable, animation and color XML files (<a
+href="http://tools.android.com/recent/codecompletionfordrawablescolorsandanimationfiles">more
+info</a>).</li>
+</ul>
+</dd>
+
+<dt>DDMS:</dt>
+<dd>
+<ul>
+  <li>"New Folder" action in the File Explorer.</li>
+  <li>The screenshot dialog will add timestamps to the filenames and preserve the orientation on
+snapshot refresh.</li>
+</ul>
+</dd>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>TraceView supports zooming with the mouse-wheel in the timeline.</li>
+    <li>The New Android Project wizard now supports Eclipse working sets.</li>
+  </ul>
+</dd>
+</dl>
+<p>More information about tool changes are available on the <a
+href="http://tools.android.com/recent">Android Tools Project Site</a>.</p>
+</div>
+</div>
+
+
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 10.0.1</a> <em>(March 2011)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 10.0.1 is designed for use with SDK Tools r10. If you haven't
+already installed SDK Tools r10 into your SDK, use the Android SDK Manager to do
+so.</dd>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>Temporary work-around to resolve the rare cases in which the layout editor will
+not open.</li>
+    <li>Fix issue in which ADT 10.0.0 would install on Eclipse 3.4 and lower, even though ADT
+requires Eclipse 3.5 or higher (as of 10.0.0).</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 10.0.0</a> <em>(February 2011)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 10.0.0 is designed for use with SDK Tools r10. If you haven't
+already installed SDK Tools r10 into your SDK, use the Android SDK Manager to do
+so.</dd>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+  <li>The tools now automatically generate Java Programming Language source files (in the <code>gen/</code> directory) and
+    bytecode (in the <code>res/raw/</code> directory) from your <code>.rs</code> files.</li>
+  <li>A Binary XML editor has been added (<a href="http://tools.android.com/recent/binaryxmleditor">details</a>).</li>
+  <li>Traceview is now integrated into the Eclipse UI (<a href="http://tools.android.com/recent/traceviewineclipse">details</a>).</li>
+  <li>The "Go To Declaration" feature for XML and <code>.java</code> files quickly show all the matches in the project
+  and allows you jump to specific items such as string translations or <code>onClick</code> handlers
+  (<a href="http://tools.android.com/recent/gotodeclarationimprovements">details</a>).</li>
+  <li>The Resource Chooser can create items such as dimensions, integers, ids, and booleans
+  (<a href="http://tools.android.com/recent/resourcechoosercannowcreatearbitraryvalues">details</a>).</li>
+  <li>Improvements to the Visual Layout Editor:
+      <ul>
+        <li>A new Palette with categories and rendering previews
+        (<a href="http://tools.android.com/recent/newpalette">details</a>).</li>
+        <li>A Layout Actions bar that provides quick access to common layout operations
+        (<a href="http://tools.android.com/recent/layoutactionsbar">details</a>).</li>
+        <li>When the Android 3.0 rendering library is selected, layouts render more like they do on devices.
+        This includes rendering of status and title bars to more accurately reflect the actual
+        screen space available to applications
+        (<a href="http://tools.android.com/recent/systembarandactionbar">details</a>).</li>
+        <li>Zoom improvements such as fit to view, persistent scale, and keyboard access.
+        (<a href="http://tools.android.com/recent/zoomimprovements">details</a>).</li>
+        <li>Further improvements to <code>&lt;merge&gt;</code> layouts, as well as layouts with gesture overlays
+        (<a href="http://tools.android.com/recent/improvedsupportformergetags">details</a>).</li>
+        <li>Improved rendering error diagnostics.</li>
+      </ul>
+    </li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 9.0.0</a> <em>(January 2011)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd>ADT 9.0.0 is designed for use with SDK Tools r9. If you haven't
+already installed SDK Tools r9 into your SDK, use the Android SDK Manager to do
+so.</dd>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>"Go To Declaration" hyperlink support: You can jump directly from code references (such as
+    <code>R.id.main</code>) to the corresponding XML declaration, or from XML attributes (such as
+    <code>@string</code>) to the corresponding resource definition, or from manifest XML
+    registrations to activities and services.</li>
+    <li>Improvements were made to name refactoring.</li>
+    <li>AVDs now automatically save their state, so they can restart almost instantly. You can enable this feature when
+    creating an AVD or by editing an AVD with the AVD Manager.</li>
+    <li>Improvements to the Visual Layout Editor:
+      <ul>
+        <li>Support for rendering targets: You can now choose an arbitrary Android platform to
+        render the current page, regardless of the project's minimum platform. This makes it
+        easy to verify the layout and appearance of your activity on different versions of
+        the platform.
+        </li>
+        <li>Improved support for empty and nested layouts: Dragging items over nested and
+        invisible layouts automatically enlarges and highlights these layouts, so that they
+        can receive drops.
+        </li>
+        <li>XML formatting improvements: The editor generates cleaner XML and you can now enable
+        XML auto-formatting in the <strong>Preferences</strong> menu.</li>
+        <li>Improved Outline labels: The Outline tab now displays additional information about each
+        View. Textual Views display a snippet of the actual text. Views with a source
+        (such as ImageView) displays the resource name. Included Views display the name of the View.
+        </li>
+        <li>When you right click a View in the Layout Editor,
+        the context menu now contains <strong>Edit ID...</strong> and <strong>Edit Text...</strong>
+        items. The <strong>Properties...</strong> context menus now list all of the properties and
+        provide a way to edit them
+        (<a href="http://tools.android.com/recent/editidtextandotherpropertiesviamenu">Details</a>).
+        </li>
+        <li>The layout editor now properly handles
+        <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element"><code>&lt;include&gt;</code></a>
+        and <a href="{@docRoot}guide/topics/resources/layout-resource.html#merge-element"><code>&lt;merge&gt;</code></a>
+        tags (<a href="http://tools.android.com/recent/supportforincludeandmerge">Details</a>).</li>
+        <li>"Extract as Include" refactoring: The Layout Editor has a new refactoring that allows
+        you to select one or more views in a layout, and extract it into a separate layout
+        (<a href="http://tools.android.com/recent/extractasincluderefactoring">Details</a>).</li>
+        <li>Improved diagnostics for class loading and rendering errors: Class loading and rendering
+        error messages are more useful and provide better information about the root cause of the
+        error.</li>
+        <li>Improved error handling to prevent drag and reordering operations from adding children
+        into an {@link android.widget.AdapterView}.</li>
+        <li>Outline reordering: Reordering your views in the Outline tab is much easier
+        (<a href="http://tools.android.com/recent/outlineimprovements">Details</a>).</li>
+        <li>Fix for keybinding bug where keyboard shortcuts did not work (Issues
+        <a href="http://code.google.com/p/android/issues/detail?id=13231">13231</a> and
+        <a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
+        <li>Fix for problems with Custom layout attribute menu (Issue
+        <a href="http://code.google.com/p/android/issues/detail?id=13134">13134</a>).</li>
+        <li>Automatic configuration for various view types: Certain views have properties configured
+        by default. For example, the width of an {@link android.widget.EditText} object is set to
+        <code>match_parent</code> when added to a vertical {@link android.widget.LinearLayout}
+        or a default image is added to an {@link android.widget.ImageButton}.</li>
+        <li>Previews during dragging: Dragging from the palette or dragging within the layout editor
+        now shows live previews of the dragged item.</li>
+        <li>Navigation improvements: In the Layout Editor, double-clicking Views jumps to the
+        corresponding XML element. In the Outline view, double-clicking opens the Properties view.</li>
+        <li>The editor has Honeycomb style animation preview support.</li>
+        <li>Improved rendering support for various Views (such as TabHosts and SlidingDrawers) in
+        Honeycomb (Issues <a href="http://code.google.com/p/android/issues/detail?id=3162">3162</a>
+        and <a href="http://code.google.com/p/android/issues/detail?id=13092">13092</a>).</li>
+        <li>Included layouts can be rendered and edited in the context of the layouts that include
+        them. From a layout using an <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
+        <code>&lt;include&gt;</code></a> tag, double-clicking on the
+        <a href="{@docRoot}guide/topics/resources/layout-resource.html#include-element">
+        <code>&lt;include&gt;</code></a> element edits the referenced layout in the context of the
+        current layout. Additionally, when editing a layout that is included by other layouts,
+        you can quickly change between context layouts, by right clicking in the editor and choosing
+        <strong>Show included in...</strong>. This feature is only available in Honeycomb.</li>
+      </ul>
+    </li>
+    <li>This release fixes many other bugs, but the most important ones are listed below:
+  <ul>
+   <li>Fixed issue that prevented launching debug builds on productions devices when
+    <code>debuggable=true</code> was not set in the Android manifest.</li>
+    <li>The LogCat view in DDMS properly handles UTF-8 characters.</li>
+    <li>The SDK Manager is more reliable on Windows
+    (<a href="http://tools.android.com/recent/sdkmanagerfixes">Details</a>).</li>
+    <li>A JUnit initialization bug that prevented you from working with JUnit tests was fixed
+    (Issue <a href="http://code.google.com/p/android/issues/detail?id=12411">12411</a>).</li>
+  </ul>
+</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 8.0.1</a> <em>(December 2010)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<p><p>ADT 8.0.1 is designed for use with SDK Tools r8. If you haven't
+already installed SDK Tools r8 into your SDK, use the Android SDK Manager to do
+so.</p></dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+  <li>This is a quick follow-up to ADT 8.0.0 to fix some bugs.</li>
+  <li>Fixes an issue in which projects failed to compile, citing a dex error.</li>
+  <li>Better ProGuard error reporting when exporting applications for release.</li>
+</ul>
+<p>Also see the recent release notes for 8.0.0, below.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+ADT 8.0.0</a> <em>(December 2010)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<p><p>ADT 8.0.0 is designed for use with SDK Tools r8. If you haven't
+already installed SDK Tools r8 into your SDK, use the Android SDK Manager to do
+so.</p></dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+  <li>New version number scheme that follows the SDK Tools revision number. The major version
+number for your ADT plugin should now always match the revision number of your SDK Tools. For
+example, ADT 8.x is for SDK Tools r8.</li>
+  <li>Support for true debug build. You no longer need to change the value of the
+   <code>debuggable</code> attribute in the Android Manifest.
+  <p>Incremental builds automatically insert <code>debuggable="true"</code>, but if you perform
+  "export signed/unsigned application package", ADT does <em>not</em> insert it.
+  If you manually set <code>debuggable="true"</code> in the manifest file, then release builds will
+  actually create a debug build (it does not remove it if you placed it there).</p></li>
+  <li>Automatic <a href="{@docRoot}tools/help/proguard.html">ProGuard</a> support in
+  release builds. For it to work, you need to have a <code>proguard.config</code>
+  property in the <code>default.properties</code> file that points to a ProGuard config file.</li>
+  <li>Completely rewritten Visual Layout Editor. (This is still a work in progress.) Now includes:
+    <ul>
+      <li>Full drag and drop from palette to layout for all Layout classes.</li>
+      <li>Move widgets inside a Layout view, from one Layout view to another and from one layout file to another.</li>
+      <li>Contextual menu with enum/flag type properties.</li>
+      <li>New zoom controls.</li>
+    </ul></li>
+  <li>New HierarchyViewer plug-in integrated in Eclipse.</li>
+  <li>Android launch configurations don't recompile the whole workspace on launch anymore.</li>
+  <li><code>android.jar</code> source and javadoc location can now be configured.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+ADT 0.9.9</a> <em>(September 2010)</em>
+  <div class="toggleme">
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd><p>ADT 0.9.9 replaces ADT 0.9.8 and is designed for use with SDK Tools r7
+and later. ADT 0.9.9 includes the ADT 0.9.8 features as well as an important
+bugfix, so we recommend that you upgrade as soon as possible. If you haven't
+already installed SDK Tools r7 into your SDK, use the Android SDK Manager to do
+so.</p></dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+<li>Fixes a problem in project import, in which source files were deleted in some cases.</li>
+<li>Includes all other ADT 0.9.8 features (see below).</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+ADT 0.9.8</a> <em>(September 2010)</em>
+  <div class="toggleme">
+
+
+</ul>
+</dd>
+
+<dl>
+
+<dt>Dependencies:</dt>
+
+<dd><p>ADT 0.9.8 is now deprecated. Please use ADT 0.9.9 instead.</p></dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+<li>Adds a new Action, "Rename Application Package", to the Android Tools
+contextual menu. The Action does a full application package refactoring.
+<li>Adds support for library projects that don't have a source folder
+called <code>src/</code>. There is now support for any number of source folders,
+with no name restriction. They can even be in subfolder such as
+<code>src/java</code>. If you are already working with library projects created
+in ADT 0.9.7, see <a
+href="{@docRoot}tools/projects/index.html#libraryMigrating">Migrating
+library projects to ADT 0.9.8</a> for important information about moving
+to the new ADT environment.</li>
+<li>Adds support for library projects that depend on other library
+projects.</li>
+<li>Adds support for additional resource qualifiers:
+<code>car</code>/<code>desk</code>, <code>night</code>/<code>notnight</code> and
+<code>navexposed</code>/<code>navhidden</code>.</li>
+<li>Adds more device screen types in the layout editor. All screen
+resolution/density combinations listed in the <a
+href="{@docRoot}guide/practices/screens_support.html#range">Supporting
+Multiple Screens</a> are now available.</li>
+<li>Fixes problems with handling of library project names that
+contain characters that are incompatible with the Eclipse path variable.
+Now properly sets up the link between the main project and the library
+project.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+ADT 0.9.7</a> <em>(May 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Library projects:</dt>
+<dd>
+<p>The ADT Plugin now supports the use of <em>library projects</em> during
+development, a capability that lets you store shared Android application
+code and resources in a separate development project. You can then reference the
+library project from other Android projects and, at build time, the tools
+compile the shared code and resources as part of the dependent applications.
+More information about this feature is available in the <a
+href="{@docRoot}tools/projects/index.html#LibraryProjects">Creating and Managing Projects</a> document. </p>
+<p>If you are not developing in Eclipse, <a
+href="tools-notes.html">SDK Tools r6</a> provides the equivalent library
+project support through the Ant build system.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+ADT 0.9.6</a> <em>(March 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+
+<dd><p>ADT 0.9.6 is designed for use with SDK Tools r5 and later. Before
+updating to ADT 0.9.6, we highly recommend that you use the Android SDK Manager to install SDK
+Tools r5 into your SDK.</p></dd>
+
+<dt>General Notes:</dt>
+<dd>
+<ul>
+<li>Editing <code>default.properties</code> outside of Eclipse will now
+automatically update the project.</li>
+<li>Loads the SDK content only when a project requires it. This will make
+Eclipse use less resources when the SDK contains many versions of Android.</li>
+<li>Resolves potential deadlock between modal dialogs, when launching ADT the
+first time with the SDK Usage panel.</li>
+<li>Fixes issues with the New Project Wizard when selecting samples.</li>
+</ul>
+</dd>
+<dt>AVD/SDK Manager:</dt>
+<dd>
+<ul>
+<li>Adds support for platform samples packages.</li>
+<li>Improves support for dependency between packages.</li>
+<li>AVDs now sorted by API level.</li>
+<li>The AVD creation dialog now enforces a minimum SD card size of 9MB.</li>
+<li>Prevents deletion of running AVDs.</li>
+</ul>
+</dd>
+<dt>DDMS:</dt>
+<dd>
+<ul>
+<li>DDMS plug-in now contains the Allocation Tracker view.</li>
+<li>New action in the Logcat view: "Go to problem" lets you go directly from an
+exception trace output to the code.</li>
+</ul>
+</dd>
+<dt>Editors:</dt>
+<dd>
+<ul>
+<li>Explode mode in the Visual Layout Editor adds a margin to all layout objects
+so that it's easier to see embedded or empty layouts.</li>
+<li>Outline mode in the Visual Layout Editor draws layout outline to make it
+easier to see layout objects.</li>
+<li>Several fixes in the configuration selector of the Visual Layout
+Editor.</li>
+</ul>
+</dd>
+<dt>Application launching:</dt>
+<dd>
+<ul>
+<li>Applications launched from ADT now behave as if they were clicked from the
+Home screen.</li>
+<li>Fixes issue where add-on with no optional library would not show up as valid
+targets for application launches.</li>
+<li>Resolves possible crash when launching applications.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+ADT 0.9.5</a> <em>(December 2009)</em>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+
+<dd><p>ADT 0.9.5 requires features provided in SDK Tools r4 or higher. If you install
+ADT 0.9.5, which is highly recommended, you should use the Android SDK
+Manager to download the latest SDK Tools into your SDK. For more information,
+see <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+</dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+<li>AVD Launch dialog now shows scale value.</li>
+<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no skin name specified.</li>
+<li>Fixes XML validation issue in on older Java versions.</li>
+<li>.apk packaging now properly ignores vi swap files as well as hidden files.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+ADT 0.9.4</a> <em>(October 2009)</em>
+  <div class="toggleme">
+<dl>
+<dt>Dependencies:</dt>
+
+<dd><p>ADT 0.9.4 requires features provided in SDK Tools r3 or higher. If you install
+ADT 0.9.4, which is highly recommended, you should use the Android SDK
+Manager to download the latest SDK Tools into your SDK. For more information,
+see <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+</dd>
+
+<dt>Project Creation Wizard:</dt>
+<dd>
+<ul>
+<li>New option to create a project from a sample by choosing it from a list.</li>
+</ul>
+</dd>
+
+<dt>Layout Editor:</dt>
+<dd>
+<ul>
+<li>Improved Configuration selector that lets you see how your layout will
+render on different devices. Default device descriptions include ADP1
+and Google Ion, while SDK add-ons can also provide new descriptions.
+A new UI allows you to create custom descriptions.</li>
+<li>Adds a new clipping toggle, to let you see your full layout even if it's
+bigger than the screen.</li>
+</ul>
+</dd>
+
+<dt>DDMS integration:</dt>
+<dd>
+<ul>
+<li>Includes the improvements from the standlone DDMS, revision 3.</li>
+<li>Adds an option to open HPROF files into eclipse instead of writing them on
+disk. If a profiler such as MAT (<a href="http://eclipse.org/mat">Memory Analyzer
+Tool</a>) is installed, it'll open the file.</li>
+</ul>
+</dd>
+
+<dt>Android SDK and AVD Manager integration:</dt>
+<dd>
+<ul>
+<li>Includes the improvements from the standalone Android SDK and AVD Manager,
+revision 3.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
diff --git a/docs/html/tools/sdk/images/2.0/camera-modes.png b/docs/html/tools/sdk/images/2.0/camera-modes.png
new file mode 100644
index 0000000..ac4c1da
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.0/camera-modes.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/email-inbox.png b/docs/html/tools/sdk/images/2.0/email-inbox.png
new file mode 100644
index 0000000..50d1c19
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.0/email-inbox.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/mms-search.png b/docs/html/tools/sdk/images/2.0/mms-search.png
new file mode 100644
index 0000000..22c7dca
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.0/mms-search.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/multiple-accounts.png b/docs/html/tools/sdk/images/2.0/multiple-accounts.png
new file mode 100644
index 0000000..aa4cb15
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.0/multiple-accounts.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.0/quick-connect.png b/docs/html/tools/sdk/images/2.0/quick-connect.png
new file mode 100644
index 0000000..0bbf7dd
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.0/quick-connect.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22browser.png b/docs/html/tools/sdk/images/2.2/22browser.png
new file mode 100644
index 0000000..817439d
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/22browser.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22exchange.png b/docs/html/tools/sdk/images/2.2/22exchange.png
new file mode 100644
index 0000000..1fa1f59
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/22exchange.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22gallery.png b/docs/html/tools/sdk/images/2.2/22gallery.png
new file mode 100644
index 0000000..0cb74ad
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/22gallery.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22home.png b/docs/html/tools/sdk/images/2.2/22home.png
new file mode 100644
index 0000000..a11ea30
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/22home.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22hotspot.png b/docs/html/tools/sdk/images/2.2/22hotspot.png
new file mode 100644
index 0000000..0951439
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/22hotspot.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/22keyboard.png b/docs/html/tools/sdk/images/2.2/22keyboard.png
new file mode 100644
index 0000000..69f95ca
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/22keyboard.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.2/jit-graph.png b/docs/html/tools/sdk/images/2.2/jit-graph.png
new file mode 100644
index 0000000..52b8d60
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.2/jit-graph.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/ffc.png b/docs/html/tools/sdk/images/2.3/ffc.png
new file mode 100644
index 0000000..136a395
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/ffc.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/home-menu.png b/docs/html/tools/sdk/images/2.3/home-menu.png
new file mode 100644
index 0000000..e9c8620
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/home-menu.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/home-plain.png b/docs/html/tools/sdk/images/2.3/home-plain.png
new file mode 100644
index 0000000..a6255f6
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/home-plain.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/nfc.png b/docs/html/tools/sdk/images/2.3/nfc.png
new file mode 100644
index 0000000..a21b6ab
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/nfc.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/onetouch.png b/docs/html/tools/sdk/images/2.3/onetouch.png
new file mode 100644
index 0000000..2789612
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/onetouch.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/power.png b/docs/html/tools/sdk/images/2.3/power.png
new file mode 100644
index 0000000..7b0785d
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/power.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/running.png b/docs/html/tools/sdk/images/2.3/running.png
new file mode 100644
index 0000000..fe9a1a0
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/running.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/selection.png b/docs/html/tools/sdk/images/2.3/selection.png
new file mode 100644
index 0000000..46ff28c
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/selection.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/2.3/sipcall.png b/docs/html/tools/sdk/images/2.3/sipcall.png
new file mode 100644
index 0000000..48a5a1d
--- /dev/null
+++ b/docs/html/tools/sdk/images/2.3/sipcall.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/browser.png b/docs/html/tools/sdk/images/3.0/browser.png
new file mode 100644
index 0000000..0f16b27
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/browser.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/browser_full.png b/docs/html/tools/sdk/images/3.0/browser_full.png
new file mode 100644
index 0000000..08a329d
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/browser_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/camera.png b/docs/html/tools/sdk/images/3.0/camera.png
new file mode 100644
index 0000000..7dabdfc
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/camera.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/camera_full.png b/docs/html/tools/sdk/images/3.0/camera_full.png
new file mode 100644
index 0000000..3ee95c9
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/camera_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/contacts.png b/docs/html/tools/sdk/images/3.0/contacts.png
new file mode 100644
index 0000000..9304701
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/contacts.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/contacts_full.png b/docs/html/tools/sdk/images/3.0/contacts_full.png
new file mode 100644
index 0000000..b5eaf5b
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/contacts_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/copy.png b/docs/html/tools/sdk/images/3.0/copy.png
new file mode 100644
index 0000000..d5a4c3e
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/copy.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/copy_full.png b/docs/html/tools/sdk/images/3.0/copy_full.png
new file mode 100644
index 0000000..124cf52
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/copy_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/home_hero1.png b/docs/html/tools/sdk/images/3.0/home_hero1.png
new file mode 100644
index 0000000..c00391f
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/home_hero1.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/home_hero1_full.png b/docs/html/tools/sdk/images/3.0/home_hero1_full.png
new file mode 100644
index 0000000..1910ed2
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/home_hero1_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/homescreen_cust_port.png b/docs/html/tools/sdk/images/3.0/homescreen_cust_port.png
new file mode 100644
index 0000000..b003a30
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/homescreen_cust_port.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/homescreen_cust_port_full.png b/docs/html/tools/sdk/images/3.0/homescreen_cust_port_full.png
new file mode 100644
index 0000000..9c64edd
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/homescreen_cust_port_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/mail_drag.png b/docs/html/tools/sdk/images/3.0/mail_drag.png
new file mode 100644
index 0000000..1f09a7a
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/mail_drag.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/mail_drag_full.png b/docs/html/tools/sdk/images/3.0/mail_drag_full.png
new file mode 100644
index 0000000..be4472f
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/mail_drag_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/tasks.png b/docs/html/tools/sdk/images/3.0/tasks.png
new file mode 100644
index 0000000..a4ba1ba
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/tasks.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/tasks_full.png b/docs/html/tools/sdk/images/3.0/tasks_full.png
new file mode 100644
index 0000000..d2a2241
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/tasks_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.0/widgets.png b/docs/html/tools/sdk/images/3.0/widgets.png
new file mode 100644
index 0000000..d847666
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.0/widgets.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/controls.png b/docs/html/tools/sdk/images/3.1/controls.png
new file mode 100644
index 0000000..e0ca1f8
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.1/controls.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/home.png b/docs/html/tools/sdk/images/3.1/home.png
new file mode 100644
index 0000000..ea0a75a
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.1/home.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/home_full.png b/docs/html/tools/sdk/images/3.1/home_full.png
new file mode 100644
index 0000000..2b8e85e
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.1/home_full.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/resizeable.png b/docs/html/tools/sdk/images/3.1/resizeable.png
new file mode 100644
index 0000000..c9f5e8e
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.1/resizeable.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/3.1/tasks.png b/docs/html/tools/sdk/images/3.1/tasks.png
new file mode 100644
index 0000000..89d69e5
--- /dev/null
+++ b/docs/html/tools/sdk/images/3.1/tasks.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/allapps-lg.png b/docs/html/tools/sdk/images/4.0/allapps-lg.png
new file mode 100644
index 0000000..f5eba3c
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/allapps-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/allapps.png b/docs/html/tools/sdk/images/4.0/allapps.png
new file mode 100644
index 0000000..317a49a
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/allapps.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/bbench.png b/docs/html/tools/sdk/images/4.0/bbench.png
new file mode 100644
index 0000000..f113092
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/bbench.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam-lg.png b/docs/html/tools/sdk/images/4.0/beam-lg.png
new file mode 100644
index 0000000..608fc94
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/beam-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam-maps-lg.png b/docs/html/tools/sdk/images/4.0/beam-maps-lg.png
new file mode 100644
index 0000000..96ac235
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/beam-maps-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam-maps.png b/docs/html/tools/sdk/images/4.0/beam-maps.png
new file mode 100644
index 0000000..63b6756
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/beam-maps.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/beam.png b/docs/html/tools/sdk/images/4.0/beam.png
new file mode 100644
index 0000000..0eb7d26
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/beam.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser-lg.png b/docs/html/tools/sdk/images/4.0/browser-lg.png
new file mode 100644
index 0000000..fe3fe81
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/browser-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser-tabs-lg.png b/docs/html/tools/sdk/images/4.0/browser-tabs-lg.png
new file mode 100644
index 0000000..0ea8f10
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/browser-tabs-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser-tabs.png b/docs/html/tools/sdk/images/4.0/browser-tabs.png
new file mode 100644
index 0000000..413b0c6
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/browser-tabs.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/browser.png b/docs/html/tools/sdk/images/4.0/browser.png
new file mode 100644
index 0000000..4bc8179
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/browser.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/calendar-widget-lg.png b/docs/html/tools/sdk/images/4.0/calendar-widget-lg.png
new file mode 100644
index 0000000..39fc986
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/calendar-widget-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/calendar-widget.png b/docs/html/tools/sdk/images/4.0/calendar-widget.png
new file mode 100644
index 0000000..80a57f7
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/calendar-widget.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/camera-lg.png b/docs/html/tools/sdk/images/4.0/camera-lg.png
new file mode 100644
index 0000000..7d96a4f
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/camera-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/camera.png b/docs/html/tools/sdk/images/4.0/camera.png
new file mode 100644
index 0000000..7454549
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/camera.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-call-lg.png b/docs/html/tools/sdk/images/4.0/contact-call-lg.png
new file mode 100644
index 0000000..40b1f40
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-call-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-call.png b/docs/html/tools/sdk/images/4.0/contact-call.png
new file mode 100644
index 0000000..5550b57
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-call.png
Binary files differ
diff --git a/docs/html/sdk/images/4.0/contact-call.xcf b/docs/html/tools/sdk/images/4.0/contact-call.xcf
similarity index 100%
rename from docs/html/sdk/images/4.0/contact-call.xcf
rename to docs/html/tools/sdk/images/4.0/contact-call.xcf
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-connect-lg.png b/docs/html/tools/sdk/images/4.0/contact-connect-lg.png
new file mode 100644
index 0000000..ad0d04c
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-connect-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-connect.png b/docs/html/tools/sdk/images/4.0/contact-connect.png
new file mode 100644
index 0000000..d958206
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-connect.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-email-lg.png b/docs/html/tools/sdk/images/4.0/contact-email-lg.png
new file mode 100644
index 0000000..db75a46
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-email-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-email.png b/docs/html/tools/sdk/images/4.0/contact-email.png
new file mode 100644
index 0000000..9e5460d
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-email.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-faves-lg.png b/docs/html/tools/sdk/images/4.0/contact-faves-lg.png
new file mode 100644
index 0000000..1ec3fd0
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-faves-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/contact-faves.png b/docs/html/tools/sdk/images/4.0/contact-faves.png
new file mode 100644
index 0000000..57e4ca6
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/contact-faves.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/face-unlock-lg.png b/docs/html/tools/sdk/images/4.0/face-unlock-lg.png
new file mode 100644
index 0000000..3fd1695
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/face-unlock-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/face-unlock.png b/docs/html/tools/sdk/images/4.0/face-unlock.png
new file mode 100644
index 0000000..00afb83
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/face-unlock.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/folders.xcf b/docs/html/tools/sdk/images/4.0/folders.xcf
new file mode 100644
index 0000000..66cc02c
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/folders.xcf
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-edit-lg.png b/docs/html/tools/sdk/images/4.0/gallery-edit-lg.png
new file mode 100644
index 0000000..3d6688f
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/gallery-edit-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-edit.png b/docs/html/tools/sdk/images/4.0/gallery-edit.png
new file mode 100644
index 0000000..69744ec
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/gallery-edit.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-share-lg.png b/docs/html/tools/sdk/images/4.0/gallery-share-lg.png
new file mode 100644
index 0000000..749f51e
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/gallery-share-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-share.png b/docs/html/tools/sdk/images/4.0/gallery-share.png
new file mode 100644
index 0000000..443a70c
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/gallery-share.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/gallery-widget.png b/docs/html/tools/sdk/images/4.0/gallery-widget.png
new file mode 100644
index 0000000..e72fd0d
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/gallery-widget.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/home-lg.png b/docs/html/tools/sdk/images/4.0/home-lg.png
new file mode 100644
index 0000000..5b9021d
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/home-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/home.png b/docs/html/tools/sdk/images/4.0/home.png
new file mode 100644
index 0000000..cd24732
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/home.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/live-effects.png b/docs/html/tools/sdk/images/4.0/live-effects.png
new file mode 100644
index 0000000..11a0122
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/live-effects.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock-camera-lg.png b/docs/html/tools/sdk/images/4.0/lock-camera-lg.png
new file mode 100644
index 0000000..c82cec6
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/lock-camera-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock-camera.png b/docs/html/tools/sdk/images/4.0/lock-camera.png
new file mode 100644
index 0000000..d3cc153
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/lock-camera.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock-lg.png b/docs/html/tools/sdk/images/4.0/lock-lg.png
new file mode 100644
index 0000000..b859e11
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/lock-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/lock.png b/docs/html/tools/sdk/images/4.0/lock.png
new file mode 100644
index 0000000..d168826
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/lock.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/quick-responses-lg.png b/docs/html/tools/sdk/images/4.0/quick-responses-lg.png
new file mode 100644
index 0000000..39cea9a
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/quick-responses-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/quick-responses.png b/docs/html/tools/sdk/images/4.0/quick-responses.png
new file mode 100644
index 0000000..d43f348
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/quick-responses.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/screenshot-lg.png b/docs/html/tools/sdk/images/4.0/screenshot-lg.png
new file mode 100644
index 0000000..30ac339
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/screenshot-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/screenshot.png b/docs/html/tools/sdk/images/4.0/screenshot.png
new file mode 100644
index 0000000..b23c913
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/screenshot.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tasks-lg.png b/docs/html/tools/sdk/images/4.0/tasks-lg.png
new file mode 100644
index 0000000..58b5c5d
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/tasks-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tasks.png b/docs/html/tools/sdk/images/4.0/tasks.png
new file mode 100644
index 0000000..34a9d4a
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/tasks.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/text-replace-lg.png b/docs/html/tools/sdk/images/4.0/text-replace-lg.png
new file mode 100644
index 0000000..047d802
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/text-replace-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/text-replace.png b/docs/html/tools/sdk/images/4.0/text-replace.png
new file mode 100644
index 0000000..d2bda3e
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/text-replace.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tts-lg.png b/docs/html/tools/sdk/images/4.0/tts-lg.png
new file mode 100644
index 0000000..2f49051
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/tts-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/tts.png b/docs/html/tools/sdk/images/4.0/tts.png
new file mode 100644
index 0000000..3eae634
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/tts.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-all-lg.png b/docs/html/tools/sdk/images/4.0/usage-all-lg.png
new file mode 100644
index 0000000..fd7eeba
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/usage-all-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-all.png b/docs/html/tools/sdk/images/4.0/usage-all.png
new file mode 100644
index 0000000..048db83
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/usage-all.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-maps-lg.png b/docs/html/tools/sdk/images/4.0/usage-maps-lg.png
new file mode 100644
index 0000000..b144370
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/usage-maps-lg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/4.0/usage-maps.png b/docs/html/tools/sdk/images/4.0/usage-maps.png
new file mode 100644
index 0000000..a6dcd21
--- /dev/null
+++ b/docs/html/tools/sdk/images/4.0/usage-maps.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/battery.png b/docs/html/tools/sdk/images/battery.png
new file mode 100644
index 0000000..10fd16b
--- /dev/null
+++ b/docs/html/tools/sdk/images/battery.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/camera.png b/docs/html/tools/sdk/images/camera.png
new file mode 100644
index 0000000..6078388
--- /dev/null
+++ b/docs/html/tools/sdk/images/camera.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/donut_small_bg.png b/docs/html/tools/sdk/images/donut_small_bg.png
new file mode 100644
index 0000000..f514b50
--- /dev/null
+++ b/docs/html/tools/sdk/images/donut_small_bg.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/market.png b/docs/html/tools/sdk/images/market.png
new file mode 100644
index 0000000..8d11134
--- /dev/null
+++ b/docs/html/tools/sdk/images/market.png
Binary files differ
diff --git a/docs/html/tools/sdk/images/search.png b/docs/html/tools/sdk/images/search.png
new file mode 100644
index 0000000..10ab910
--- /dev/null
+++ b/docs/html/tools/sdk/images/search.png
Binary files differ
diff --git a/docs/html/tools/sdk/index.jd b/docs/html/tools/sdk/index.jd
new file mode 100644
index 0000000..fb71065
--- /dev/null
+++ b/docs/html/tools/sdk/index.jd
@@ -0,0 +1,10 @@
+page.title=Android SDK
+header.hide=1
+
+@jd:body
+
+<p>This page should not exist.</p>
+
+
+
+
diff --git a/docs/html/tools/sdk/installing.jd b/docs/html/tools/sdk/installing.jd
new file mode 100644
index 0000000..4837ab7
--- /dev/null
+++ b/docs/html/tools/sdk/installing.jd
@@ -0,0 +1,590 @@
+page.title=Installing the SDK
+
+@jd:body
+
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot +
+"assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot +
+"assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+  padding: .25em 1em 0em 1em;
+  margin-bottom: 0;
+}
+.toggleme {
+  padding: 1em 1em 0 2em;
+  line-height:1em;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0;
+}
+</style>
+
+<div id="qv-wrapper">
+<div id="qv">
+
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#Preparing">1. Preparing Your Development Computer</a></li>
+    <li><a href="#Installing">2. Downloading the SDK Starter Package</a></li>
+    <li><a href="#InstallingADT">3. Installing the ADT Plugin for Eclipse</a></li>
+    <li><a href="#AddingComponents">4. Adding Platforms and Other Packages</a>
+      <ol>
+        <li><a href="#components">Available Packages</a></li>
+        <li><a href="#which">Recommended Packages</a></li>
+      </ol></li>
+    <li><a href="#sdkContents">5. Exploring the SDK (Optional)</a></li>
+    <li><a href="#NextSteps">Next Steps</a></li>
+    <li><a href="#troubleshooting">Troubleshooting</a></li>
+  </ol>
+
+<h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin for Eclipse</a></li>
+    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+  </ol>
+
+</div>
+</div>
+
+<p>This page describes how to install the Android SDK
+and set up your development environment for the first time.</p>
+
+<p>If you encounter any problems during installation, see the
+<a href="#troubleshooting">Troubleshooting</a> section at the bottom of
+this page.</p>
+
+<h4>Updating?</h4>
+
+<p>If you already have an Android SDK, use the Android SDK Manager tool to install
+updated tools and new Android platforms into your existing environment. For information about how to
+do that, see <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+
+
+<h2 id="Preparing">Step 1. Preparing Your Development Computer</h2>
+
+<p>Before getting started with the Android SDK, take a moment to confirm that
+your development computer meets the <a href="requirements.html">System
+Requirements</a>. In particular, you might need to install the <a
+href="http://java.sun.com/javase/downloads/index.jsp">JDK</a>, if you don't have it already. </p>
+
+<p>If you will be developing in Eclipse with the Android Development
+Tools (ADT) Plugin&mdash;the recommended path if you are new to
+Android&mdash;make sure that you have a suitable version of Eclipse
+installed on your computer as described in the
+<a href="requirements.html">System Requirements</a> document.
+If you need to install Eclipse, you can download it from this location: </p>
+
+<p style="margin-left:2em;"><a href=
+"http://www.eclipse.org/downloads/">http://www.eclipse.org/downloads/</a></p>
+
+<p>The "Eclipse Classic" version is recommended. Otherwise, a Java or
+RCP version of Eclipse is recommended.</p>
+
+
+<h2 id="Installing">Step 2. Downloading the SDK Starter Package</h2>
+
+<p>The SDK starter package is not a full
+development environment&mdash;it includes only the core SDK Tools, which you can
+use to download the rest of the SDK packages (such as the latest Android platform).</p>
+
+<p>If you haven't already, get the latest version of the SDK starter package from the <a
+href="{@docRoot}sdk/index.html">SDK download page</a>.</p>
+
+<p>If you downloaded a {@code .zip} or {@code .tgz} package (instead of the SDK installer), unpack
+it to a safe location on your machine. By default, the SDK files are unpacked
+into a directory named <code>android-sdk-&lt;machine-platform&gt;</code>.</p>
+
+<p>If you downloaded the Windows installer ({@code .exe} file), run it now and it will check
+whether the proper Java SE Development Kit (JDK) is installed (installing it, if necessary), then
+install the SDK Tools into a default location (which you can modify).</p>
+
+<p>Make a note of the name and location of the SDK directory on your system&mdash;you will need to
+refer to the SDK directory later, when setting up the ADT plugin and when using
+the SDK tools from the command line.</p>
+
+
+<h2 id="InstallingADT">Step 3. Installing the ADT Plugin for Eclipse</h2>
+
+<p>Android offers a custom plugin for the Eclipse IDE, called Android
+Development Tools (ADT), that is designed to give you a powerful, integrated
+environment in which to build Android applications. It extends the capabilites
+of Eclipse to let you quickly set up new Android projects, create an application
+UI, debug your applications
+using the Android SDK tools, and even export signed (or unsigned) APKs in order
+to distribute your application. In general, developing in Eclipse with ADT is a
+highly recommended approach and is the fastest way to get started with Android.
+</p>
+
+<p>If you'd like to use ADT for developing Android applications, install it now.
+Read <a href="{@docRoot}tools/sdk/eclipse-adt.html#installing">Installing the ADT Plugin</a> for
+step-by-step installation instructions, then return here to continue the
+last step in setting up your Android SDK.</p>
+
+<p>If you prefer to work in a different IDE, you do not need to
+install Eclipse or ADT. Instead, you can directly use the SDK tools to build and
+debug your application. The <a href="{@docRoot}tools/workflow/index.html">Introduction</a>
+to Android application development outlines the major steps that you need to complete when
+developing in Eclipse or other IDEs.</p>
+
+
+
+<h2 id="AddingComponents">Step 4. Adding Platforms and Other Packages</h2>
+
+<p>The last step in setting up your SDK is using the Android SDK Manager (a
+tool included in the SDK starter package) to download essential SDK packages into your development
+environment.</p>
+
+<p>The SDK uses a modular structure that separates the major parts of the SDK&mdash;Android platform
+versions, add-ons, tools, samples, and documentation&mdash;into a set of separately installable
+packages. The SDK starter package, which you've already downloaded, includes only a single
+package: the latest version of the SDK Tools. To develop an Android application, you also need to
+download at least one Android platform and the associated platform tools. You can add other
+packages and platforms as well, which is highly recommended.</p>
+
+<p>If you used the Windows installer, when you complete the installation wizard, it will launch the
+Android SDK Manager with a default set of platforms and other packages selected
+for you to install. Simply click <strong>Install</strong> to accept the recommended set of
+packages and install them. You can then skip to <a href="#sdkContents">Step 5</a>, but we
+recommend you first read the section about the <a href="#components">Available Packages</a> to
+better understand the packages available from the Android SDK Manager.</p>
+
+<p>You can launch the Android SDK Manager in one of the following ways:</p>
+<ul>
+  <li>From within Eclipse, select <strong>Window &gt; Android SDK Manager</strong>.</li>
+  <li>On Windows, double-click the <code>SDK Manager.exe</code> file at the root of the Android
+SDK directory.</li>
+  <li>On Mac or Linux, open a terminal and navigate to the <code>tools/</code> directory in the
+Android SDK, then execute: <pre>android</pre> </li>
+</ul>
+
+<p>To download packages, use the graphical UI of the Android SDK
+Manager to browse the SDK repository and select new or updated
+packages (see figure 1). The Android SDK Manager installs the selected packages in
+your SDK environment. For information about which packages you should download, see <a
+href="#which">Recommended Packages</a>.</p>
+
+<img src="/images/sdk_manager_packages.png" />
+<p class="img-caption"><strong>Figure 1.</strong> The Android SDK Manager's
+<strong>Available Packages</strong> panel, which shows the SDK packages that are
+available for you to download into your environment.</p>
+
+
+<h3 id="components">Available Packages</h3>
+
+<p>By default, there are two repositories of packages for your SDK: <em>Android
+Repository</em> and <em>Third party Add-ons</em>.</p>
+
+<p>The <em>Android Repository</em> offers these types of packages:</p>
+
+<ul>
+<li><strong>SDK Tools</strong> &mdash; Contains tools for debugging and testing your application
+and other utility tools. These tools are installed with the Android SDK starter package and receive
+periodic updates. You can access these tools in the <code>&lt;sdk&gt;/tools/</code> directory of
+your SDK. To learn more about
+them, see <a href="{@docRoot}tools/index.html#tools-sdk">SDK Tools</a> in the
+developer guide.</li>
+
+<li><strong>SDK Platform-tools</strong> &mdash; Contains platform-dependent tools for developing
+and debugging your application. These tools support the latest features of the Android platform and
+are typically updated only when a new platform becomes available. You can access these tools in the
+<code>&lt;sdk&gt;/platform-tools/</code> directory. To learn more about them, see <a
+href="{@docRoot}tools/index.html#tools-platform">Platform Tools</a> in the
+developer guide.</li>
+
+<li><strong>Android platforms</strong> &mdash; An SDK platform is
+available for every production Android platform deployable to Android-powered devices. Each
+SDK platform package includes a fully compliant Android library, system image, sample code,
+and emulator skins. To learn more about a specific platform, see the list of platforms that appears
+under the section "Downloadable SDK Packages" on the left part of this page.</li>
+
+<li><strong>USB Driver for Windows</strong> (Windows only) &mdash; Contains driver files
+that you can install on your Windows computer, so that you can run and debug
+your applications on an actual device. You <em>do not</em> need the USB driver unless
+you plan to debug your application on an actual Android-powered device. If you
+develop on Mac OS X or Linux, you do not need a special driver to debug
+your application on an Android-powered device. See <a
+href="{@docRoot}tools/device.html">Using Hardware Devices</a> for more information
+about developing on a real device.</li>
+
+<li><strong>Samples</strong> &mdash; Contains the sample code and apps available
+for each Android development platform. If you are just getting started with
+Android development, make sure to download the samples to your SDK. <!--The download
+includes not only a set of very useful sample apps, but also the source for <a
+href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a> and other
+tutorials. --></li>
+
+<li><strong>Documentation</strong> &mdash; Contains a local copy of the latest
+multiversion documentation for the Android framework API. </li>
+</ul>
+
+<p>The <em>Third party Add-ons</em> provide packages that allow you to create a development
+environment using a specific Android external library (such as the Google Maps library) or a
+customized (but fully compliant) Android system image. You can add additional Add-on repositories by
+clicking <strong>Add Add-on Site</strong>.</p>
+
+
+<h3 id="which">Recommended Packages</h3>
+
+<p>The SDK repository contains a range of packages that you can download.
+Use the table below to determine which packages you need, based on whether you
+want to set up a basic, recommended, or full development environment:
+</p>
+
+<table style="width:95%">
+
+<tr>
+<th>Environment</th>
+<th>SDK&nbsp;Package</th>
+<th>Comments</th>
+</tr>
+
+<tr>
+<td rowspan="3" style="font-size:.9em;background-color:#FFE;">Basic</td>
+<td style="font-size:.9em;background-color:#FFE;">SDK Tools</td>
+<td style="font-size:.9em;background-color:#FFE;">If you've just installed
+the SDK starter package, then you already have the latest version of this package. The
+SDK Tools package is required to develop an Android application. Make sure you keep this up to
+date.</td>
+</tr>
+
+<tr>
+<td style="font-size:.9em;background-color:#FFE;">SDK Platform-tools</td>
+<td style="font-size:.9em;background-color:#FFE;">This includes more tools that are required
+for application development. These tools are platform-dependent and typically update only when
+a new SDK platform is made available, in order to support new features in the platform. These
+tools are always backward compatible with older platforms, but you must be sure that you have
+the latest version of these tools when you install a new SDK platform.</td>
+</tr>
+
+<tr>
+<td style="font-size:.9em;background-color:#FFE;">SDK platform</td>
+<td style="font-size:.9em;background-color:#FFE;">You need to download <strong
+style="color:red">at least one platform</strong> into your environment, so that
+you will be able to compile your application and set up an Android Virtual
+Device (AVD) to run it on (in the emulator). To start with, just download the
+latest version of the platform. Later, if you plan to publish your application,
+you will want to download other platforms as well, so that you can test your
+application on the full range of Android platform versions that your application supports.</td>
+</tr>
+<tr>
+<td colspan="2"
+style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
+style="border:none"></td>
+</tr>
+<tr>
+<td rowspan="3">Recommended<br/>(plus Basic)</td>
+<td>Documentation</td>
+<td>The Documentation package is useful because it lets you work offline and
+also look up API reference information from inside Eclipse.</td>
+</tr>
+
+<tr>
+<td>Samples</td>
+<td>The Samples packages give you source code that you can use to learn about
+Android, load as a project and run, or reuse in your own app. Note that multiple
+samples packages are available &mdash; one for each Android platform version. When
+you are choosing a samples package to download, select the one whose API Level
+matches the API Level of the Android platform that you plan to use.</td>
+</tr>
+<tr>
+<td>Usb Driver</td>
+<td>The Usb Driver package is needed only if you are developing on Windows and
+have an Android-powered device on which you want to install your application for
+debugging and testing. For Mac OS X and Linux platforms, no
+special driver is needed.</td>
+</tr>
+<tr>
+<td colspan="2"
+style="border:none;text-align:center;font-size:1.5em;font-weight:bold;">+</td><td
+style="border:none"></td>
+</tr>
+<tr>
+<td rowspan="3">Full<br/>(plus Recommended)</td>
+<td>Google APIs</td>
+<td>The Google APIs add-on gives your application access to the Maps external
+library, which makes it easy to display and manipulate Maps data in your
+application. </td>
+</tr>
+<tr>
+<td>Additional SDK Platforms</td>
+<td>If you plan to publish your application, you will want to download
+additional platforms corresponding to the Android platform versions on which you
+want the application to run. The recommended approach is to compile your
+application against the lowest version you want to support, but test it against
+higher versions that you intend the application to run on. You can test your
+applications on different platforms by running in an Android Virtual Device
+(AVD) on the Android emulator.</td>
+</tr>
+
+</table>
+
+<p>Once you've installed at least the basic configuration of SDK packages, you're ready to start
+developing Android apps. The next section describes the contents of the Android SDK to familiarize
+you with the packages you've just installed.</p>
+
+<p>For more information about using the Android SDK Manager, see the <a
+href="{@docRoot}sdk/exploring.html">Exploring the SDK</a> document. </p>
+
+
+<h2 id="sdkContents">Step 5. Exploring the SDK (Optional)</h2>
+
+<p>Once you've installed the SDK and downloaded the platforms, documentation,
+and add-ons that you need, we suggest that you open the SDK directory and take a look at what's
+inside.</p>
+
+<p>The table below describes the full SDK directory contents, with packages
+installed. </p>
+
+<table>
+<tr>
+<th colspan="3">Name</th><th>Description</th>
+</tr>
+<tr>
+<td colspan="3"><code>add-ons/</code></td>
+<td>Contains add-ons to the Android SDK development
+environment, which let you develop against external libraries that are available on some
+devices. </td>
+</tr>
+<tr>
+<td colspan="3"><code>docs/</code></td>
+<td>A full set of documentation in HTML format, including the Developer's Guide,
+API Reference, and other information. To read the documentation, load the
+file <code>offline.html</code> in a web browser.</td>
+</tr>
+<tr>
+<td colspan="3"><code>platform-tools/</code></td>
+<td>Contains platform-dependent development tools that may be updated with each platform release.
+The platform tools include the Android Debug Bridge ({@code adb}) as well as other tools that you
+don't typically use directly. These tools are separate from the development tools in the {@code
+tools/} directory because these tools may be updated in order to support new
+features in the latest Android platform.</td>
+</tr>
+<tr>
+<td colspan="3"><code>platforms/</code></td>
+<td>Contains a set of Android platform versions that you can develop
+applications against, each in a separate directory.  </td>
+</tr>
+<tr>
+<td style="width:2em;"></td>
+<td colspan="2"><code><em>&lt;platform&gt;</em>/</code></td>
+<td>Platform version directory, for example "android-11". All platform version directories contain
+a similar set of files and subdirectory structure. Each platform directory also includes the
+Android library (<code>android.jar</code>) that is used to compile applications against the
+platform version.</td>
+</tr>
+<tr>
+<td colspan="3"><code>samples/</code></td>
+<td>Sample code and apps that are specific to platform version.</td>
+</tr>
+<tr>
+<td colspan="3"><code>tools/</code></td>
+<td>Contains the set of development and profiling tools that are platform-independent, such
+as the emulator, the Android SDK Manager, the AVD Manager, <code>ddms</code>,
+<code>hierarchyviewer</code>
+and more. The tools in this directory may be updated at any time using the Android SDK
+Manager and are independent of platform releases.</td>
+</tr>
+<tr>
+<td colspan="3"><code>SDK Readme.txt</code></td>
+<td>A file that explains how to perform the initial setup of your SDK,
+including how to launch the Android SDK Manager tool on all
+platforms.</td>
+</tr>
+<tr>
+<td colspan="3"><code>SDK Manager.exe</code></td>
+<td>Windows SDK only. A shortcut that launches the Android SDK
+Manager tool, which you use to add packages to your SDK.</td>
+</tr>
+<!--<tr>
+<td colspan="3"><code>documentation.html</code></td>
+<td>A file that loads the entry page for the local Android SDK
+documentation.</td>
+</tr>-->
+
+</table>
+
+
+<p>Optionally, you might want to add the location of the SDK's <code>tools/</code> and
+<code>platform-tools</code> to your <code>PATH</code> environment variable, to provide easy
+access to the tools.</p>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+        How to update your PATH</a>
+  <div class="toggleme">
+
+<p>Adding both <code>tools/</code> and <code>platform-tools/</code> to your PATH lets you run
+command line <a href="{@docRoot}tools/index.html">tools</a> without needing to
+supply the full path to the tool directories. Depending on your operating system, you can
+include these directories in your PATH in the following way:</p>
+
+<ul>
+
+  <li>On Windows, right-click on My Computer, and select Properties.
+  Under the Advanced tab, hit the Environment Variables button, and in the
+  dialog that comes up, double-click on Path (under System Variables). Add the full path to the
+  <code>tools/</code> and <code>platform-tools/</code> directories to the path. </li>
+
+  <li>On Linux, edit your <code>~/.bash_profile</code> or <code>~/.bashrc</code> file. Look
+  for a line that sets the PATH environment variable and add the
+  full path to the <code>tools/</code> and <code>platform-tools/</code> directories to it. If you
+  don't see a line setting the path, you can add one:
+  <pre>export PATH=${PATH}:&lt;sdk&gt;/tools:&lt;sdk&gt;/platform-tools</pre>
+  </li>
+
+  <li>On a Mac OS X, look in your home directory for <code>.bash_profile</code> and
+  proceed as for Linux. You can create the <code>.bash_profile</code> if
+  you don't already have one. </li>
+</ul>
+
+</div><!-- end toggleme -->
+</div><!-- end toggleable -->
+
+
+<h2 id="NextSteps">Next Steps</h2>
+<p>Once you have completed installation, you are ready to
+begin developing applications. Here are a few ways you can get started: </p>
+
+<p><strong>Set up the Hello World application</strong></p>
+<ul>
+  <li>If you have just installed the SDK for the first time, go to the <a
+  href="{@docRoot}training/basics/firstapp/index.html">Hello
+  World tutorial</a>. The tutorial takes you step-by-step through the process
+  of setting up your first Android project, including setting up an Android
+  Virtual Device (AVD) on which to run the application.
+</li>
+</ul>
+
+<p class="note">Following the Hello World tutorial is an essential
+first step in getting started with Android development. </p>
+
+<p><strong>Learn about Android</strong></p>
+<ul>
+  <li>Take a look at the <a href="{@docRoot}guide/index.html">Dev
+  Guide</a> and the types of information it provides.</li>
+  <li>Read an introduction to Android as a platform in <a
+  href="{@docRoot}guide/basics/what-is-android.html">What is
+  Android?</a></li>
+  <li>Learn about the Android framework and how applications run on it in
+  <a href="{@docRoot}guide/components/fundamentals.html">Application
+  Fundamentals</a>.</li>
+  <li>Take a look at the Android framework API specification in the <a
+  href="{@docRoot}reference/packages.html">Reference</a> tab.</li>
+</ul>
+
+<p><strong>Explore the development tools</strong></p>
+<ul>
+  <li>Get an overview of the <a
+  href="{@docRoot}tools/index.html">development
+  tools</a> that are available to you.</li>
+  <li>Read the <a href="{@docRoot}tools/workflow/index.html">Introduction</a> to Android
+application development.
+  </li>
+  <li>Read <a href="{@docRoot}tools/device.html">Using Hardware Devices</a> to learn
+how to set up an Android-powered device so you can run and test your application.</li>
+</ul>
+
+<p><strong>Follow the Notepad tutorial</strong></p>
+
+<ul>
+  <li>The <a href="{@docRoot}resources/tutorials/notepad/index.html">
+  Notepad Tutorial</a> shows you how to build a full Android application
+  and provides  helpful commentary on the Android system and API. The
+  Notepad tutorial helps you bring together the important design
+  and architectural concepts in a moderately complex application.
+  </li>
+</ul>
+<p class="note">Following the Notepad tutorial is an excellent
+second step in getting started with Android development. </p>
+
+<p><strong>Explore some code</strong></p>
+
+<ul>
+  <li>The Android SDK includes sample code and applications for each platform
+version. You can browse the samples in the <a
+href="{@docRoot}resources/index.html">Resources</a> tab or download them
+into your SDK using the Android SDK Manager. Once you've downloaded the
+samples, you'll find them in
+<code><em>&lt;sdk&gt;</em>/samples/<em>&lt;platform&gt;/</em></code>. </li>
+</ul>
+
+<p><strong>Visit the Android developer groups</strong></p>
+<ul>
+  <li>Take a look at the <a
+  href="{@docRoot}resources/community-groups.html">Community</a> pages to see a list of
+  Android developers groups. In particular, you might want to look at the
+  <a href="http://groups.google.com/group/android-developers">Android
+  Developers</a> group to get a sense for what the Android developer
+  community is like.</li>
+</ul>
+
+<h2 id="troubleshooting">Troubleshooting</h2>
+
+<h3>Ubuntu Linux Notes</h3>
+
+<ul>
+  <li>If you need help installing and configuring Java on your
+    development machine, you might find these resources helpful:
+    <ul>
+      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/Java </a></li>
+      <li><a href="https://help.ubuntu.com/community/Java">https://help.ubuntu.com/community/JavaInstallation</a></li>
+    </ul>
+  </li>
+  <li>Here are the steps to install Java and Eclipse, prior to installing
+  the Android SDK and ADT Plugin.
+    <ol>
+      <li>If you are running a 64-bit distribution on your development
+      machine, you need to install the <code>ia32-libs</code> package using
+      <code>apt-get:</code>:
+      <pre>apt-get install ia32-libs</pre>
+      </li>
+      <li>Next, install Java: <pre>apt-get install sun-java6-jdk</pre></li>
+      <li>The Ubuntu package manager does not currently offer an Eclipse 3.3
+      version for download, so we recommend that you download Eclipse from
+      eclipse.org (<a
+      href="http://www.eclipse.org/downloads/">http://www.eclipse.org/
+      downloads/</a>). A Java or RCP version of Eclipse is recommended.</li>
+      <li>Follow the steps given in previous sections to install the SDK
+      and the ADT plugin. </li>
+    </ol>
+  </li>
+</ul>
+
+<h3>Other Linux Notes</h3>
+
+<ul>
+  <li>If JDK is already installed on your development computer, please
+  take a moment to make sure that it meets the version requirements listed
+  in the <a href="requirements.html">System Requirements</a>.
+  In particular, note that some Linux distributions may include JDK 1.4 or Gnu
+  Compiler for Java, both of which are not supported for Android development.</li>
+</ul>
diff --git a/docs/html/tools/sdk/libraries.jd b/docs/html/tools/sdk/libraries.jd
new file mode 100644
index 0000000..9e47c4a
--- /dev/null
+++ b/docs/html/tools/sdk/libraries.jd
@@ -0,0 +1,9 @@
+page.title=Libraries
+
+@jd:body
+
+
+
+<p>A page that lists libraries and links to release notes. Links to dashboards etc.</p>
+
+
diff --git a/docs/html/sdk/ndk/1.5_r1/index.jd b/docs/html/tools/sdk/ndk/1.5_r1/index.jd
similarity index 100%
rename from docs/html/sdk/ndk/1.5_r1/index.jd
rename to docs/html/tools/sdk/ndk/1.5_r1/index.jd
diff --git a/docs/html/sdk/ndk/1.6_r1/index.jd b/docs/html/tools/sdk/ndk/1.6_r1/index.jd
similarity index 100%
rename from docs/html/sdk/ndk/1.6_r1/index.jd
rename to docs/html/tools/sdk/ndk/1.6_r1/index.jd
diff --git a/docs/html/tools/sdk/ndk/index.jd b/docs/html/tools/sdk/ndk/index.jd
new file mode 100644
index 0000000..956d939
--- /dev/null
+++ b/docs/html/tools/sdk/ndk/index.jd
@@ -0,0 +1,1128 @@
+ndk=true
+
+ndk.win_download=android-ndk-r8-windows.zip
+ndk.win_bytes=109928336
+ndk.win_checksum=37b1a2576f28752fcc09e1b9c07e3f14
+
+ndk.mac_download=android-ndk-r8-darwin-x86.tar.bz2
+ndk.mac_bytes=96650992
+ndk.mac_checksum=81ce5de731f945692123b377afe0bad9
+
+ndk.linux_download=android-ndk-r8-linux-x86.tar.bz2
+ndk.linux_bytes=88310791
+ndk.linux_checksum=5c9afc9695ad67c61f82fbf896803c05
+
+page.title=Android NDK
+
+@jd:body
+
+<h2 id="notes">Revisions</h2>
+
+<p>The sections below provide information and notes about successive releases of
+the NDK, as denoted by revision number. </p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", "{@docRoot}assets/images/triangle-opened.png");
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", "/assets/images/triangle-closed.png");
+  }
+  return false;
+}
+</script>
+
+<style>
+.toggleable {
+padding: 5px 0 0;
+}
+.toggleme {
+  padding: 10px 0 0 20px;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0 5px 3px 0;
+}
+</style>
+
+<div class="toggleable open">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 8</a> <em>(May 2012)</em>
+
+  <div class="toggleme">
+    <p>This release of the NDK includes support for MIPS ABI and a few additional fixes.</p>
+
+    </dl>
+      <dt>New features:</dt>
+
+      <dd>
+        <ul>
+          <li>Added support for the MIPS ABI, which allows you to generate machine code that runs on
+            compatible MIPS-based Android devices. Major features for MIPS include MIPS-specific
+            toolchains, system headers, libraries and debugging support. For more details regarding
+            MIPS support, see {@code docs/CPU-MIPS.html} in the NDK package.
+
+              <p>By default, code is generated for ARM-based devices. You can add {@code mips} to
+              your {@code APP_ABI} definition in your {@code Application.mk} file to build
+              for MIPS platforms. For example, the following line instructs {@code ndk-build}
+              to build your code for three distinct ABIs:</p>
+
+              <pre>APP_ABI := armeabi armeabi-v7a <strong>mips</strong></pre>
+
+              <p>Unless you rely on architecture-specific assembly sources, such as ARM assembly
+              code, you should not need to touch your {@code Android.mk} files to build MIPS
+              machine code.</p>
+          </li>
+
+          <li>You can build a standalone MIPS toolchain using the {@code --arch=mips}
+          option when calling <code>make-standalone-toolchain.sh</code>. See
+          {@code docs/STANDALONE-TOOLCHAIN.html} for more details.
+          </li>
+        </ul>
+
+        <p class="note"><strong>Note:</strong> To ensure that your applications are available
+to users only if their devices are capable of running them, Google Play filters applications based
+on the instruction set information included in your application — no action is needed on your part
+to enable the filtering. Additionally, the Android system itself also checks your application at
+install time and allows the installation to continue only if the application provides a library that
+is compiled for the device's CPU architecture.</p>
+      </dd>
+
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed a typo in GAbi++ implementation where the result of {@code
+          dynamic_cast&lt;D&gt;(b)} of base class object {@code b} to derived class {@code D} is
+          incorrectly adjusted in the opposite direction from the base class.
+          (<a href="http://code.google.com/p/android/issues/detail?id=28721">Issue 28721</a>)
+          </li>
+          <li>Fixed an issue in which {@code make-standalone-toolchain.sh} fails to copy
+          {@code libsupc++.*}.</li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed {@code ndk-build.cmd} to ensure that {@code ndk-build.cmd} works correctly even
+          if the user has redefined the {@code SHELL} environment variable, which may be changed
+          when installing a variety of development tools in Windows environments.
+          </li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 7c</a> <em>(April 2012)</em>
+
+  <div class="toggleme">
+    <p>This release of the NDK includes an important fix for Tegra2-based devices, and a few
+additional fixes and improvements:</p>
+
+    <dl>
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed GNU STL armeabi-v7a binaries to not crash on non-NEON
+  devices. The files provided with NDK r7b were not configured properly,
+  resulting in crashes on Tegra2-based devices and others when trying to use
+  certain floating-point functions (e.g., {@code cosf}, {@code sinf}, {@code expf}).</li>
+        </ul>
+      </dd>
+
+      <dt>Important changes:</dt>
+
+      <dd>
+        <ul>
+          <li>Added support for custom output directories through the {@code NDK_OUT}
+  environment variable. When defined, this variable is used to store all
+  intermediate generated files, instead of {@code $PROJECT_PATH/obj}. The variable is
+  also recognized by {@code ndk-gdb}. </li>
+          <li>Added support for building modules with hundreds or even thousands of source
+  files by defining {@code LOCAL_SHORT_COMMANDS} to {@code true} in your {@code Android.mk}.
+            <p>This change forces the NDK build system to put most linker or archiver options
+  into list files, as a work-around for command-line length limitations.
+  See {@code docs/ANDROID-MK.html} for details.</p>
+          </li>
+        </ul>
+      </dd>
+
+      <dt>Other bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Fixed {@code android_getCpuCount()} implementation in the {@code cpufeatures}
+helper library. On certain devices, where cores are enabled dynamically by the system, the previous
+implementation would report the total number of <em>active</em> cores the first time the function
+was called, rather than the total number of <em>physically available</em> cores.</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 7b</a> <em>(February 2012)</em>
+
+  <div class="toggleme">
+    <p>This release of the NDK includes fixes for native Windows builds, Cygwin and many other
+      improvements:</p>
+
+    <dl>
+      <dt>Important bug fixes:</dt>
+
+      <dd>
+        <ul>
+          <li>Updated {@code sys/atomics.h} to avoid correctness issues
+            on some multi-core ARM-based devices. Rebuild your unmodified sources with this
+            version of the NDK and this problem should be completely eliminated.
+            For more details, read {@code docs/ANDROID-ATOMICS.html}.</li>
+          <li>Reverted to {@code binutils} 2.19 to fix debugging issues that
+            appeared in NDK r7 (which switched to {@code binutils} 2.20.1).</li>
+          <li>Fixed {@code ndk-build} on 32-bit Linux. A packaging error put a 64-bit version
+            of the {@code awk} executable under {@code prebuilt/linux-x86/bin} in NDK r7.</li>
+          <li>Fixed native Windows build ({@code ndk-build.cmd}). Other build modes were not
+            affected. The fixes include:
+            <ul>
+              <li>Removed an infinite loop / stack overflow bug that happened when trying
+                to call {@code ndk-build.cmd} from a directory that was <em>not</em> the top of
+                your project path (e.g., in any sub-directory of it).</li>
+              <li>Fixed a problem where the auto-generated dependency files were ignored. This
+                meant that updating a header didn't trigger recompilation of sources that included
+                it.</li>
+              <li>Fixed a problem where special characters in files or paths, other than spaces and
+                quotes, were not correctly handled.</li>
+            </ul>
+          </li>
+          <li>Fixed the standalone toolchain to generate proper binaries when using
+            {@code -lstdc++} (i.e., linking against the GNU {@code libstdc++} C++ runtime). You
+            should use {@code -lgnustl_shared} if you want to link against the shared library
+            version or {@code -lstdc++} for the static version.
+
+            <p>See {@code docs/STANDALONE-TOOLCHAIN.html} for more details about this fix.</p>
+          </li>
+          <li>Fixed {@code gnustl_shared} on Cygwin. The linker complained that it couldn't find
+            {@code libsupc++.a} even though the file was at the right location.</li>
+          <li>Fixed Cygwin C++ link when not using any specific C++ runtime through
+            {@code APP_STL}.</li>
+        </ul>
+      </dd>
+    </dl>
+
+    <dl>
+      <dt>Other changes:</dt>
+
+      <dd>
+        <ul>
+          <li>When your application uses the GNU {@code libstdc++} runtime, the compiler will
+            no longer forcibly enable exceptions and RTTI. This change results in smaller code.
+            <p>If you need these features, you must do one of the following:</p>
+            <ul>
+              <li>Enable exceptions and/or RTTI explicitly in your modules or
+                {@code Application.mk}. (recommended)</li>
+              <li>Define {@code APP_GNUSTL_FORCE_CPP_FEATURES} to {@code 'exceptions'},
+                {@code 'rtti'} or both in your {@code Application.mk}. See
+                {@code docs/APPLICATION-MK.html} for more details.</li>
+            </ul>
+          </li>
+          <li>{@code ndk-gdb} now works properly when your application has private services
+            running in independent processes. It debugs the main application process, instead of the
+            first process listed by {@code ps}, which is usually a service process.</li>
+          <li>Fixed a rare bug where NDK r7 would fail to honor the {@code LOCAL_ARM_MODE} value
+            and always compile certain source files (but not all) to 32-bit instructions.</li>
+          <li>{@code stlport}: Refresh the sources to match the Android platform version. This
+            update fixes a few minor bugs:
+            <ul>
+               <li>Fixed instantiation of an incomplete type</li>
+               <li>Fixed minor "==" versus "=" typo</li>
+               <li>Used {@code memmove} instead of {@code memcpy} in {@code string::assign}</li>
+               <li>Added better handling of {@code IsNANorINF}, {@code IsINF}, {@code IsNegNAN},
+                 etc.</li>
+             </ul>
+             <p>For complete details, see the commit log.</p>
+          </li>
+          <li>{@code stlport}: Removed 5 unnecessary static initializers from the library.</li>
+          <li>The GNU libstdc++ libraries for armeabi-v7a were mistakenly compiled for
+            armeabi instead. This change had no impact on correctness, but using the right
+            ABI should provide slightly better performance.</li>
+          <li>The {@code cpu-features} helper library was updated to report three optional
+            x86 CPU features ({@code SSSE3}, {@code MOVBE} and {@code POPCNT}). See
+            {@code docs/CPU-FEATURES.html} for more details.</li>
+          <li>{@code docs/NDK-BUILD.html} was updated to mention {@code NDK_APPLICATION_MK} instead
+            of {@code NDK_APP_APPLICATION_MK} to select a custom {@code Application.mk} file.</li>
+          <li>Cygwin: {@code ndk-build} no longer creates an empty "NUL" file in the current
+            directory when invoked.</li>
+          <li>Cygwin: Added better automatic dependency detection. In the previous version, it
+            didn't work properly in the following cases:
+            <ul>
+              <li>When the Cygwin drive prefix was not {@code /cygdrive}.</li>
+              <li>When using drive-less mounts, for example, when Cygwin would translate
+                {@code /home} to {@code \\server\subdir} instead of {@code C:\Some\Dir}.</li>
+            </ul>
+          </li>
+          <li>Cygwin: {@code ndk-build} does not try to use the native Windows tools under
+            {@code $NDK/prebuilt/windows/bin} with certain versions of Cygwin and/or GNU Make.</li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 7</a> <em>(November 2011)</em>
+
+  <div class="toggleme">
+    <p>This release of the NDK includes new features to support the Android 4.0 platform as well
+    as many other additions and improvements:</p>
+
+    <dl>
+      <dt>New features</dt>
+
+      <dd>
+        <ul>
+          <li>Added official NDK APIs for Android 4.0 (API level 14), which adds the following
+          native features to the platform:
+
+            <ul>
+              <li>Added native multimedia API based on the Khronos Group OpenMAX AL™ 1.0.1
+              standard. The new <code>&lt;OMXAL/OpenMAXAL.h&gt;</code> and
+              <code>&lt;OMXAL/OpenMAXAL_Android.h&gt;</code> headers allow applications targeting
+              API level 14 to perform multimedia output directly from native code by using a new
+              Android-specific buffer queue interface. For more details, see
+              <code>docs/openmaxal/index.html</code> and <a href=
+              "http://www.khronos.org/openmax/">http://www.khronos.org/openmax/</a>.</li>
+
+              <li>Updated the native audio API based on the Khronos Group OpenSL ES 1.0.1™
+              standard. With API Level 14, you can now decode compressed audio (e.g. MP3, AAC,
+              Vorbis) to PCM. For more details, see <code>docs/opensles/index.html</code> and
+              <a href=
+              "http://www.khronos.org/opensles">http://www.khronos.org/opensles/</a>.</li>
+            </ul>
+          </li>
+
+          <li>Added CCache support. To speed up large rebuilds, define the
+          <code>NDK_CCACHE</code> environment variable to <code>ccache</code> (or the path to
+          your <code>ccache</code> binary). When declared, the NDK build system automatically
+          uses CCache when compiling any source file. For example:
+            <pre>
+export NDK_CCACHE=ccache
+</pre>
+          <p class="note"><strong>Note:</strong> CCache is not included in the NDK release
+          so you must have it installed prior to using it. For more information about CCache, see
+          <a href="http://ccache.samba.org">http://ccache.samba.org</a>.</p>
+          </li>
+
+          <li>Added support for setting <code>APP_ABI</code> to <code>all</code> to indicate that
+          you want to build your NDK modules for all the ABIs supported by your given NDK
+          release. This means that either one of the following two lines in your
+          <code>Application.mk</code> are equivalent with this release:
+            <pre>
+APP_ABI := all
+APP_ABI := armeabi armeabi-v7a x86
+</pre>
+
+            <p>This also works if you define <code>APP_ABI</code> when calling
+            <code>ndk-build</code> from the command-line, which is a quick way to check that your
+            project builds for all supported ABIs without changing the project's
+            <code>Application.mk file</code>. For example:</p>
+            <pre>
+ndk-build APP_ABI=all
+</pre>
+          </li>
+
+          <li>Added a <code>LOCAL_CPP_FEATURES</code> variable in <code>Android.mk</code> that
+          allows you to declare which C++ features (RTTI or Exceptions) your module uses. This
+          ensures that the final linking works correctly if you have prebuilt modules that depend
+          on these features. See <code>docs/ANDROID-MK.html</code> and
+          <code>docs/CPLUSPLUS-SUPPORT.html</code> for more details.</li>
+
+          <li>Shortened paths to source and object files that are used in build commands. When
+          invoking <code>$NDK/ndk-build</code> from your project path, the paths to the source,
+          object, and binary files that are passed to the build commands are significantly
+          shorter now, because they are passed relative to the current directory. This is useful
+          when building projects with a lot of source files, to avoid limits on the maximum
+          command line length supported by your host operating system. The behavior is unchanged
+          if you invoke <code>ndk-build</code> from a sub-directory of your project tree, or if
+          you define <code>NDK_PROJECT_PATH</code> to point to a specific directory.</li>
+        </ul>
+      </dd>
+
+      <dt>Experimental features</dt>
+
+      <dd>
+        You can now build your NDK source files on Windows <em>without</em> Cygwin by calling the
+        <code>ndk-build.cmd</code> script from the command line from your project path. The
+        script takes exactly the same arguments as the original <code>ndk-build</code> script.
+        The Windows NDK package comes with its own prebuilt binaries for GNU Make, Awk and other
+        tools required by the build. You should not need to install anything else to get a
+        working build system.
+
+        <p class="caution"><strong>Important:</strong> <code>ndk-gdb</code> does not work on
+        Windows, so you still need Cygwin to debug.</p>
+
+        <p>This feature is still experimental, so feel free to try it and report issues on the
+        <a href="http://b.android.com">public bug database</a> or <a href=
+        "http://groups.google.com/group/android-ndk">public forum</a>. All samples and unit tests
+        shipped with the NDK succesfully compile with this feature.</p>
+      </dd>
+
+      <dt>Important bug fixes</dt>
+
+      <dd>
+        <ul>
+          <li>Imported shared libraries are now installed by default to the target installation
+          location (<code>libs/&lt;abi&gt;</code>) if <code>APP_MODULES</code> is not defined in
+          your <code>Application.mk</code>. For example, if a top-level module <code>foo</code>
+          imports a module <code>bar</code>, then both <code>libfoo.so</code> and
+          <code>libbar.so</code> are copied to the install location. Previously, only
+          <code>libfoo.so</code> was copied, unless you listed <code>bar</code> in your
+          <code>APP_MODULES</code> too. If you define <code>APP_MODULES</code> explicitly, the
+          behavior is unchanged.</li>
+
+          <li><code>ndk-gdb</code> now works correctly for activities with multiple categories in
+          their MAIN intent filters.</li>
+
+          <li>Static library imports are now properly transitive. For example, if a top-level
+          module <code>foo</code> imports static library <code>bar</code> that imports static
+          library <code>zoo</code>, the <code>libfoo.so</code> will now be linked against both
+          <code>libbar.a</code> and <code>libzoo.a</code>.</li>
+        </ul>
+      </dd>
+
+      <dt>Other changes</dt>
+
+      <dd>
+        <ul>
+          <li><code>docs/NATIVE-ACTIVITY.HTML</code>: Fixed typo. The minimum API level should be
+          9, not 8 for native activities.</li>
+
+          <li><code>docs/STABLE-APIS.html</code>: Added missing documentation listing EGL as a
+          supported stable API, starting from API level 9.</li>
+
+          <li><code>download-toolchain-sources.sh</code>: Updated to download the toolchain
+          sources from <a href="http://android.googlesource.com">android.googlesource.com</a>,
+          which is the new location for the AOSP servers.</li>
+
+          <li>Added a new C++ support runtime named <code>gabi++</code>. More details about it
+          are available in the updated <code>docs/CPLUSPLUS-SUPPORT.html</code>.</li>
+
+          <li>Added a new C++ support runtime named <code>gnustl_shared</code> that corresponds
+          to the shared library version of GNU libstdc++ v3 (GPLv3 license). See more info at
+          <code>docs/CPLUSPLUS-SUPPORT.html</code></li>
+
+          <li>Added support for RTTI in the STLport C++ runtimes (no support for
+          exceptions).</li>
+
+          <li>Added support for multiple file extensions in <code>LOCAL_CPP_EXTENSION</code>. For
+          example, to compile both <code>foo.cpp</code> and <code>bar.cxx</code> as C++ sources,
+          declare the following:
+            <pre>
+LOCAL_CPP_EXTENSION := .cpp .cxx
+</pre>
+          </li>
+
+          <li>Removed many unwanted exported symbols from the link-time shared system libraries
+          provided by the NDK. This ensures that code generated with the standalone toolchain
+          doesn't risk to accidentally depend on a non-stable ABI symbol (e.g. any libgcc.a
+          symbol that changes each time the toolchain used to build the platform is changed)</li>
+
+          <li>Refreshed the EGL and OpenGLES Khronos headers to support more extensions. Note
+          that this does <em>not</em> change the NDK ABIs for the corresponding libraries,
+          because each extension must be probed at runtime by the client application.
+
+            <p>The extensions that are available depend on your actual device and GPU drivers,
+            not the platform version the device runs on. The header changes simply add new
+            constants and types to make it easier to use the extensions when they have been
+            probed with <code>eglGetProcAddress()</code> or <code>glGetProcAddress()</code>. The
+            following list describes the newly supported extensions:</p>
+
+            <dl>
+              <dt>GLES 1.x</dt>
+
+              <dd>
+                <ul>
+                  <li><code>GL_OES_vertex_array_object</code></li>
+
+                  <li><code>GL_OES_EGL_image_external</code></li>
+
+                  <li><code>GL_APPLE_texture_2D_limited_npot</code></li>
+
+                  <li><code>GL_EXT_blend_minmax</code></li>
+
+                  <li><code>GL_EXT_discard_framebuffer</code></li>
+
+                  <li><code>GL_EXT_multi_draw_arrays</code></li>
+
+                  <li><code>GL_EXT_read_format_bgra</code></li>
+
+                  <li><code>GL_EXT_texture_filter_anisotropic</code></li>
+
+                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
+
+                  <li><code>GL_EXT_texture_lod_bias</code></li>
+
+                  <li><code>GL_IMG_read_format</code></li>
+
+                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
+
+                  <li><code>GL_IMG_texture_env_enhanced_fixed_function</code></li>
+
+                  <li><code>GL_IMG_user_clip_plane</code></li>
+
+                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
+
+                  <li><code>GL_NV_fence</code></li>
+
+                  <li><code>GL_QCOM_driver_control</code></li>
+
+                  <li><code>GL_QCOM_extended_get</code></li>
+
+                  <li><code>GL_QCOM_extended_get2</code></li>
+
+                  <li><code>GL_QCOM_perfmon_global_mode</code></li>
+
+                  <li><code>GL_QCOM_writeonly_rendering</code></li>
+
+                  <li><code>GL_QCOM_tiled_rendering</code></li>
+                </ul>
+              </dd>
+
+              <dt>GLES 2.0</dt>
+
+              <dd>
+                <ul>
+                  <li><code>GL_OES_element_index_uint</code></li>
+
+                  <li><code>GL_OES_get_program_binary</code></li>
+
+                  <li><code>GL_OES_mapbuffer</code></li>
+
+                  <li><code>GL_OES_packed_depth_stencil</code></li>
+
+                  <li><code>GL_OES_texture_3D</code></li>
+
+                  <li><code>GL_OES_texture_float</code></li>
+
+                  <li><code>GL_OES_texture_float_linear</code></li>
+
+                  <li><code>GL_OES_texture_half_float_linear</code></li>
+
+                  <li><code>GL_OES_texture_npot</code></li>
+
+                  <li><code>GL_OES_vertex_array_object</code></li>
+
+                  <li><code>GL_OES_EGL_image_external</code></li>
+
+                  <li><code>GL_AMD_program_binary_Z400</code></li>
+
+                  <li><code>GL_EXT_blend_minmax</code></li>
+
+                  <li><code>GL_EXT_discard_framebuffer</code></li>
+
+                  <li><code>GL_EXT_multi_draw_arrays</code></li>
+
+                  <li><code>GL_EXT_read_format_bgra</code></li>
+
+                  <li><code>GL_EXT_texture_format_BGRA8888</code></li>
+
+                  <li><code>GL_EXT_texture_compression_dxt1</code></li>
+
+                  <li><code>GL_IMG_program_binary</code></li>
+
+                  <li><code>GL_IMG_read_format</code></li>
+
+                  <li><code>GL_IMG_shader_binary</code></li>
+
+                  <li><code>GL_IMG_texture_compression_pvrtc</code></li>
+
+                  <li><code>GL_IMG_multisampled_render_to_texture</code></li>
+
+                  <li><code>GL_NV_coverage_sample</code></li>
+
+                  <li><code>GL_NV_depth_nonlinear</code></li>
+
+                  <li><code>GL_QCOM_extended_get</code></li>
+
+                  <li><code>GL_QCOM_extended_get2</code></li>
+
+                  <li><code>GL_QCOM_writeonly_rendering</code></li>
+
+                  <li><code>GL_QCOM_tiled_rendering</code></li>
+                </ul>
+              </dd>
+
+              <dt>EGL</dt>
+
+              <dd>
+                <ul>
+                  <li><code>EGL_ANDROID_recordable</code></li>
+
+                  <li><code>EGL_NV_system_time</code></li>
+                </ul>
+              </dd>
+            </dl>
+          </li>
+        </ul>
+      </dd>
+    </dl>
+  </div>
+</div>
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 6b</a> <em>(August 2011)</em>
+
+   <div class="toggleme">
+      <p>This release of the NDK does not include any new features compared to r6. The r6b release
+      addresses the following issues in the r6 release:</p>
+      <dl>
+        <dt>Important bug fixes</dt>
+        <dd>
+          <ul>
+            <li>Fixed the build when <code>APP_ABI="armeabi x86"</code> is used for
+            multi-architecture builds.</li>
+            <li>Fixed the location of prebuilt STLport binaries in the NDK release package.
+            A bug in the packaging script placed them in the wrong location.</li>
+            <li>Fixed <code>atexit()</code> usage in shared libraries with the x86standalone
+            toolchain.</li>
+            <li>Fixed <code>make-standalone-toolchain.sh --arch=x86</code>. It used to fail
+            to copy the proper GNU libstdc++ binaries to the right location.</li>
+            <li>Fixed the standalone toolchain linker warnings about missing the definition and
+            size for the <code>__dso_handle</code> symbol (ARM only).</li>
+            <li>Fixed the inclusion order of <code>$(SYSROOT)/usr/include</code> for x86 builds.
+            See the <a href="http://code.google.com/p/android/issues/detail?id=18540">bug</a> for
+            more information.</li>
+            <li>Fixed the definitions of <code>ptrdiff_t</code> and <code>size_t</code> in
+            x86-specific systems when they are used with the x86 standalone toolchain.</li>
+          </ul>
+        </dd>
+      </dl>
+  </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 6</a> <em>(July 2011)</em>
+
+   <div class="toggleme">
+      <p>This release of the NDK includes support for the x86 ABI and other minor changes.
+      For detailed information describing the changes in this release, read the
+      <code>CHANGES.HTML</code> document included in the NDK package.
+      </p>
+      <dl>
+        <dt>General notes:</dt>
+        <dd>
+          <ul>
+            <li>Adds support for the x86 ABI, which allows you to generate machine code
+            that runs on compatible x86-based Android devices. Major features for x86
+            include x86-specific toolchains, system headers, libraries and
+            debugging support. For all of the details regarding x86 support,
+            see <code>docs/CPU-X86.html</code> in the NDK package.
+
+              <p>By default, code is generated for ARM-based devices, but you can add x86 to your
+              <code>APP_ABI</code> definition in your <code>Application.mk</code> file to build
+              for x86 platforms. For example, the following line instructs <code>ndk-build</code>
+              to build your code for three distinct ABIs:</p>
+
+              <pre>APP_ABI := armeabi armeabi-v7a x86</pre>
+
+              <p>Unless you rely on ARM-based assembly sources, you shouldn't need to touch
+              your <code>Android.mk</code> files to build x86 machine code.</p>
+
+            </li>
+
+            <li>You can build a standalone x86 toolchain using the <code>--toolchain=x86-4.4.3</code>
+            option when calling <code>make-standalone-toolchain.sh</code>. See
+            <code>docs/STANDALONE-TOOLCHAIN.html</code> for more details.
+            </li>
+            <li>The new <code>ndk-stack</code> tool lets you translate stack traces in
+            <code>logcat</code> that are generated by native code. The tool translates
+            instruction addresses into a readable format that contains things such
+            as the function, source file, and line number corresponding to each stack frame.
+            For more information and a usage example, see <code>docs/NDK-STACK.html</code>.
+            </li>
+          </ul>
+        </dd>
+        <dt>Other changes:</dt>
+        <dd><code>arm-eabi-4.4.0</code>, which had been deprecated since NDK r5, has been
+        removed from the NDK distribution.</dd>
+
+      </dl>
+    </div>
+  </div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)"><img src=
+  "{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px">
+  Android NDK, Revision 5c</a> <em>(June 2011)</em>
+
+  <div class="toggleme">
+    <p>This release of the NDK does not include any new features compared to r5b. The r5c release
+    addresses the following problems in the r5b release:</p>
+    <dl>
+      <dt>Important bug fixes:</dt>
+      <dd>
+        <ul>
+          <li><code>ndk-build</code>: Fixed a rare bug that appeared when trying to perform parallel
+          builds of debuggable projects.</li>
+
+          <li>Fixed a typo that prevented <code>LOCAL_WHOLE_STATIC_LIBRARIES</code> to work
+          correctly with the new toolchain and added documentation for this in
+          <code>docs/ANDROID-MK.html</code>.</li>
+
+          <li>Fixed a bug where code linked against <code>gnustl_static</code> crashed when run on
+          platform releases older than API level 8 (Android 2.2).</li>
+
+          <li><code>ndk-gdb</code>: Fixed a bug that caused a segmentation fault when debugging Android 3.0
+          or newer devices.</li>
+
+          <li><code>&lt;android/input.h&gt;</code>: Two functions that were introduced in API level
+          9 (Android 2.3) were incorrect and are fixed. While this breaks the source API, the
+          binary interface to the system is unchanged. The incorrect functions were missing a
+          <code>history_index</code> parameter, and the correct definitions are shown below:
+<pre>
+float AMotionEvent_getHistoricalRawX(const AInputEvent* motion_event,
+                                           size_t pointer_index,
+                                           size_t history_index);
+
+float AMotionEvent_getHistoricalRawY(const AInputEvent* motion_event,
+                                           size_t pointer_index,
+                                           size_t history_index);
+</pre>
+          </li>
+
+          <li>Updated the C library ARM binary for API level 9 (Android 2.3) to correctly expose at
+          link time new functions that were added in that API level (for example,
+          <code>pthread_rwlock_init</code>).</li>
+
+        </ul>
+      </dd>
+
+      <dt>Minor improvements and fixes:</dt>
+      <dd>
+        <ul>
+          <li>Object files are now always linked in the order they appear in
+          <code>LOCAL_SRC_FILES</code>. This was not the case previously because the files were
+          grouped by source extensions instead.</li>
+
+          <li>When <code>import-module</code> fails, it now prints the list of directories that
+          were searched. This is useful to check that the <code>NDK_MODULE_PATH</code> definition
+          used by the build system is correct.</li>
+
+          <li>When <code>import-module</code> succeeds, it now prints the directory where the
+          module was found to the log (visible with <code>NDK_LOG=1</code>).</li>
+
+          <li>Increased the build speed of debuggable applications when there is a very large number
+          of include directories in the project.</li>
+
+          <li><code>ndk-gdb</code>: Better detection of <code>adb shell</code> failures and improved
+          error messages.</li>
+
+          <li><code>&lt;pthread.h&gt;</code>: Fixed the definition of
+          <code>PTHREAD_RWLOCK_INITIALIZER</code> for API level 9 (Android 2.3) and higher.</li>
+
+          <li>Fixed an issue where a module could import itself, resulting in an infinite loop in
+          GNU Make.</li>
+
+          <li>Fixed a bug that caused the build to fail if <code>LOCAL_ARM_NEON</code> was set to
+          true (typo in <code>build/core/build-binary.mk</code>).</li>
+
+          <li>Fixed a bug that prevented the compilation of </code>.s</code> assembly files
+          (<code>.S</code> files were okay).</li>
+        </ul>
+      </dd>
+  </div>
+</div>
+
+<div class="toggleable closed">
+    <a href="#"
+         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
+         class="toggle-img"
+         height="9px"
+         width="9px" /> Android NDK, Revision 5b</a> <em>(January 2011)</em>
+
+    <div class="toggleme">
+      <p>This release of the NDK does not include any new features compared to r5. The r5b release addresses the
+      following problems in the r5 release:
+      </p>
+      <ul>
+    <li>The r5 binaries required glibc 2.11, but the r5b binaries are generated with a special
+    toolchain that targets glibc 2.7 or higher instead. The Linux toolchain binaries now run on Ubuntu 8.04 or higher. </li>
+    <li>Fixes a compiler bug in the arm-linux-androideabi-4.4.3 toolchain.
+    The previous binary generated invalid thumb instruction sequences when
+    dealing with signed chars.</li>
+    <li>Adds missing documentation for the
+    "gnustl_static" value for APP_STL, that allows you to link against
+    a static library version of GNU libstdc++. </li>
+    <li>The following <code>ndk-build</code> issues are fixed:
+      <ul>
+        <li>A bug that created inconsistent dependency files when a
+        compilation error occured on Windows. This prevented a proper build after
+        the error was fixed in the source code.</li>
+        <li>A Cygwin-specific bug where using very short paths for
+        the Android NDK installation or the project path led to the
+        generation of invalid dependency files. This made incremental builds
+        impossible.</li>
+        <li>A typo that prevented the cpufeatures library from working correctly
+        with the new NDK toolchain.</li>
+        <li>Builds in Cygwin are faster by avoiding calls to <code>cygpath -m</code>
+        from GNU Make for every source or object file, which caused problems
+        with very large source trees. In case this doesn't work properly, define <code>NDK_USE_CYGPATH=1</code> in your
+        environment to use <code>cygpath -m</code> again.</li>
+        <li>The Cygwin installation now notifies the user of invalid installation paths that contain spaces. Previously, an invalid path
+        would output an error that complained about an incorrect version of GNU Make, even if the right one was installed.
+      </ul>
+    </li>
+  <li>Fixed a typo that prevented the <code>NDK_MODULE_PATH</code> environment variable from working properly when
+  it contained multiple directories separated with a colon. </li>
+  <li>The <code>prebuilt-common.sh</code> script contains fixes to check the compiler for 64-bit
+  generated machine code, instead of relying on the host tag, which
+  allows the 32-bit toolchain to rebuild properly on Snow Leopard. The toolchain rebuild scripts now also support
+  using a 32-bit host toolchain.</li>
+  <li>A missing declaration for <code>INET_ADDRSTRLEN</code> was added to <code>&lt;netinet/in.h&gt;</code>.</li>
+  <li>Missing declarations for <code>IN6_IS_ADDR_MC_NODELOCAL</code> and <code>IN6_IS_ADDR_MC_GLOBAL</code> were added to <code>&lt;netinet/in6.h&gt;</code>.</li>
+  <li>'asm' was replaced with '__asm__' in <code>&lt;asm/byteorder.h&gt;</code> to allow compilation with <code>-std=c99</code>.</li>
+  </ul>
+  </div>
+  </div>
+
+<div class="toggleable closed">
+    <a href="#"
+         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
+         class="toggle-img"
+         height="9px"
+         width="9px" /> Android NDK, Revision 5</a> <em>(December 2010)</em>
+
+    <div class="toggleme">
+      <p>This release of the NDK includes many new APIs, most of which are introduced to
+         support the development of games and similar applications that make extensive use
+         of native code. Using the APIs, developers have direct native access to events, audio,
+         graphics and window management, assets, and storage. Developers can also implement the
+         Android application lifecycle in native code with help from the new
+         {@link android.app.NativeActivity} class. For detailed information describing the changes in this
+         release, read the <code>CHANGES.HTML</code> document included in the downloaded NDK package.
+      </p>
+      <dl>
+        <dt>General notes:</dt>
+        <dd>
+          <ul>
+            <li>Adds support for native activities, which allows you to implement the
+            Android application lifecycle in native code.</li>
+
+            <li>Adds native support for the following:
+
+              <ul>
+
+                <li>Input subsystem (such as the keyboard and touch screen)</li>
+
+                <li>Access to sensor data (accelerometer, compass, gyroscope, etc).</li>
+
+                <li>Event loop APIs to wait for things such as input and sensor events.</li>
+
+                <li>Window and surface subsystem</li>
+
+                <li>Audio APIs based on the OpenSL ES standard that support playback and recording
+                as well as control over platform audio effects</li>
+
+                <li>Access to assets packaged in an <code>.apk</code> file.</li>
+                
+              </ul>
+            </li>
+
+            <li>Includes a new toolchain (based on GCC 4.4.3), which generates better code, and can also now
+            be used as a standalone cross-compiler, for people who want to build their stuff with
+            <code>./configure &amp;&amp; make</code>. See
+            docs/STANDALONE-TOOLCHAIN.html for the details. The binaries for GCC 4.4.0 are still provided,
+            but the 4.2.1 binaries were removed.</li>
+
+            <li>Adds support for prebuilt static and shared libraries (docs/PREBUILTS.html) and module
+            exports and imports to make sharing and reuse of third-party modules much easier
+            (docs/IMPORT-MODULE.html explains why).</li>
+
+            <li>Provides a default C++ STL implementation (based on STLport) as a helper module. It can be used either
+            as a static or shared library (details and usage examples are in sources/android/stlport/README). Prebuilt
+            binaries for STLport (static or shared) and GNU libstdc++ (static only) are also provided if you choose to
+            compile against those libraries instead of the default C++ STL implementation. 
+            C++ Exceptions and RTTI are not supported in the default STL implementation. For more information, see
+            docs/CPLUSPLUS-SUPPORT.HTML.</li>
+
+            <li>Includes improvements to the <code>cpufeatures</code> helper library that improves reporting
+            of the CPU type (some devices previously reported ARMv7 CPU when the device really was an ARMv6). We
+            recommend developers that use this library to rebuild their applications then
+            upload to Google Play to benefit from the improvements.</li>
+
+            <li>Adds an EGL library that lets you create and manage OpenGL ES textures and
+              services.</li>
+                
+            <li>Adds new sample applications, <code>native-plasma</code> and <code>native-activity</code>, 
+            to demonstrate how to write a native activity.</li>
+
+            <li>Includes many bugfixes and other small improvements; see docs/CHANGES.html for a more
+              detailed list of changes.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+  <div class="toggleable closed">
+    <a href="#"
+         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
+         class="toggle-img"
+         height="9px"
+         width="9px" /> Android NDK, Revision 4b</a> <em>(June 2010)</em>
+
+    <div class="toggleme">
+      <dl>
+        <dt>NDK r4b notes:</dt>
+
+        <dd>
+          <p>Includes fixes for several issues in the NDK build and debugging scripts &mdash; if
+          you are using NDK r4, we recommend downloading the NDK r4b build. For detailed
+          information describing the changes in this release, read the CHANGES.TXT document
+          included in the downloaded NDK package.</p>
+        </dd>
+      </dl>
+
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Provides a simplified build system through the new <code>ndk-build</code> build
+            command.</li>
+
+            <li>Adds support for easy native debugging of generated machine code on production
+            devices through the new <code>ndk-gdb</code> command.</li>
+
+            <li>Adds a new Android-specific ABI for ARM-based CPU architectures,
+            <code>armeabi-v7a</code>. The new ABI extends the existing <code>armeabi</code> ABI to
+            include these CPU instruction set extensions:
+
+              <ul>
+                <li>Thumb-2 instructions</li>
+
+                <li>VFP hardware FPU instructions (VFPv3-D16)</li>
+
+                <li>Optional support for ARM Advanced SIMD (NEON) GCC intrinsics and VFPv3-D32.
+                Supported by devices such as Verizon Droid by Motorola, Google Nexus One, and
+                others.</li>
+              </ul>
+            </li>
+
+            <li>Adds a new <code>cpufeatures</code> static library (with sources) that lets your
+            app detect the host device's CPU features at runtime. Specifically, applications can
+            check for ARMv7-A support, as well as VFPv3-D32 and NEON support, then provide separate
+            code paths as needed.</li>
+
+            <li>Adds a sample application, <code>hello-neon</code>, that illustrates how to use the
+            <code>cpufeatures</code> library to check CPU features and then provide an optimized
+            code path using NEON instrinsics, if supported by the CPU.</li>
+
+            <li>Lets you generate machine code for either or both of the instruction sets supported
+            by the NDK. For example, you can build for both ARMv5 and ARMv7-A architectures at the
+            same time and have everything stored to your application's final
+            <code>.apk</code>.</li>
+
+            <li>To ensure that your applications are available to users only if their devices are
+            capable of running them, Google Play now filters applications based on the
+            instruction set information included in your application &mdash; no action is needed on
+            your part to enable the filtering. Additionally, the Android system itself also checks
+            your application at install time and allows the installation to continue only if the
+            application provides a library that is compiled for the device's CPU architecture.</li>
+
+            <li>Adds support for Android 2.2, including a new stable API for accessing the pixel
+            buffers of {@link android.graphics.Bitmap} objects from native code.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+  <div class="toggleable closed">
+    <a href="#"
+         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
+         class="toggle-img"
+         height="9px"
+         width="9px" /> Android NDK, Revision 3</a> <em>(March 2010)</em>
+
+    <div class="toggleme">
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Adds OpenGL ES 2.0 native library support.</li>
+
+            <li>Adds a sample application,<code>hello-gl2</code>, that illustrates the use of
+            OpenGL ES 2.0 vertex and fragment shaders.</li>
+
+            <li>The toolchain binaries have been refreshed for this release with GCC 4.4.0, which
+            should generate slightly more compact and efficient machine code than the previous one
+            (4.2.1). The NDK also still provides the 4.2.1 binaries, which you can optionally use
+            to build your machine code.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+  <div class="toggleable closed">
+    <a href="#"
+         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
+         class="toggle-img"
+         height="9px"
+         width="9px" /> Android NDK, Revision 2</a> <em>(September 2009)</em>
+
+    <div class="toggleme">
+      <p>Originally released as "Android 1.6 NDK, Release 1".</p>
+
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Adds OpenGL ES 1.1 native library support.</li>
+
+            <li>Adds a sample application, <code>san-angeles</code>, that renders 3D graphics
+            through the native OpenGL ES APIs, while managing activity lifecycle with a {@link
+            android.opengl.GLSurfaceView} object.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+
+  <div class="toggleable closed">
+    <a href="#"
+         onclick="return toggleDiv(this)"><img src="{@docRoot}assets/images/triangle-closed.png"
+         class="toggle-img"
+         height="9px"
+         width="9px" /> Android NDK, Revision 1</a> <em>(June 2009)</em>
+
+    <div class="toggleme">
+      <p>Originally released as "Android 1.5 NDK, Release 1".</p>
+
+      <dl>
+        <dt>General notes:</dt>
+
+        <dd>
+          <ul>
+            <li>Includes compiler support (GCC) for ARMv5TE instructions, including Thumb-1
+            instructions.</li>
+
+            <li>Includes system headers for stable native APIs, documentation, and sample
+            applications.</li>
+          </ul>
+        </dd>
+      </dl>
+    </div>
+  </div>
+  
+  <h2 id="installing">Installing the NDK</h2>
+  <p>Installing the NDK on your development computer is straightforward and involves extracting the
+  NDK from its download package.</p>
+
+  <p>Before you get started make sure that you have downloaded the latest <a href=
+  "{@docRoot}sdk/index.html">Android SDK</a> and upgraded your applications and environment as
+  needed. The NDK is compatible with older platform versions but not older versions of the SDK tools.
+  Also, take a moment to review the <a href="{@docRoot}tools/sdk/ndk/overview.html#reqs">System and
+Software Requirements</a>
+  for the NDK, if you haven't already.</p>
+
+  <p>To install the NDK, follow these steps:</p>
+
+  <ol>
+    <li>From the table at the top of this page, select the NDK package that is appropriate for your
+    development computer and download the package.</li>
+
+    <li>Uncompress the NDK download package using tools available on your computer. When
+    uncompressed, the NDK files are contained in a directory called
+    <code>android-ndk-&lt;version&gt;</code>. You can rename the NDK directory if necessary and you
+    can move it to any location on your computer. This documentation refers to the NDK directory as
+    <code>&lt;ndk&gt;</code>.</li>
+  </ol>
+
+  <p>You are now ready to start working with the NDK.</p>
+
+  <h2 id="gettingstarted">Getting Started with the NDK</h2>
+
+  <p>Once you've installed the NDK successfully, take a few minutes to read the documentation
+  included in the NDK. You can find the documentation in the <code>&lt;ndk&gt;/docs/</code>
+  directory. In particular, please read the OVERVIEW.HTML document completely, so that you
+  understand the intent of the NDK and how to use it.</p>
+
+  <p>If you used a previous version of the NDK, take a moment to review the list of NDK changes in
+  the CHANGES.HTML document.</p>
+
+  <p>Here's the general outline of how you work with the NDK tools:</p>
+
+  <ol>
+    <li>Place your native sources under <code>&lt;project&gt;/jni/...</code></li>
+
+    <li>Create <code>&lt;project&gt;/jni/Android.mk</code> to describe your native sources to the
+    NDK build system</li>
+
+    <li>Optional: Create <code>&lt;project&gt;/jni/Application.mk</code>.</li>
+
+    <li>Build your native code by running the 'ndk-build' script from your project's directory. It
+    is located in the top-level NDK directory:
+      <pre class="no-pretty-print">cd &lt;project&gt;
+&lt;ndk&gt;/ndk-build
+</pre>
+
+      <p>The build tools copy the stripped, shared libraries needed by your application to the
+      proper location in the application's project directory.</p>
+    </li>
+
+    <li>Finally, compile your application using the SDK tools in the usual way. The SDK build tools
+    will package the shared libraries in the application's deployable <code>.apk</code> file.</li>
+  </ol>
+
+  <p>For complete information on all of the steps listed above, please see the documentation
+  included with the NDK package.</p>
+
+  <h2 id="samples">Sample Applications</h2>
+
+  <p>The NDK includes sample Android applications that illustrate how to use native code in your
+  Android applications. For more information, see <a href=
+  "{@docRoot}tools/sdk/ndk/overview.html#samples">Sample Applications</a>.</p>
+
+  <h2 id="forum">Discussion Forum and Mailing List</h2>
+
+  <p>If you have questions about the NDK or would like to read or contribute to discussions about
+  it, please visit the <a href="http://groups.google.com/group/android-ndk">android-ndk</a> group
+  and mailing list.</p>
diff --git a/docs/html/tools/sdk/ndk/overview.jd b/docs/html/tools/sdk/ndk/overview.jd
new file mode 100644
index 0000000..98ef1fc
--- /dev/null
+++ b/docs/html/tools/sdk/ndk/overview.jd
@@ -0,0 +1,588 @@
+page.title=What is the NDK?
+@jd:body
+
+ <div id="qv-wrapper">
+    <div id="qv">
+      <h2>In this document</h2>
+
+      <ol>
+        <li><a href="#choosing">When to Develop in Native Code</a></li>
+        <li>
+          <a href="#contents">Contents of the NDK</a>
+          <ol>
+            <li><a href="#tools">Development tools</a></li>
+
+            <li><a href="#docs">Documentation</a></li>
+
+            <li><a href="#samples">Sample applications</a></li>
+          </ol>
+        </li>
+        <li><a href="#reqs">System and Software Requirements</a></li>
+      </ol>
+    </div>
+  </div>
+
+  <p>The Android NDK is a toolset that lets you embed components that make use of native code in
+  your Android applications.</p>
+
+  <p>Android applications run in the Dalvik virtual machine. The NDK allows you to implement parts
+  of your applications using native-code languages such as C and C++. This can provide benefits to
+  certain classes of applications, in the form of reuse of existing code and in some cases
+  increased speed.</p>
+
+  <p>The NDK provides:</p>
+
+  <ul>
+    <li>A set of tools and build files used to generate native code libraries from C and C++
+    sources</li>
+
+    <li>A way to embed the corresponding native libraries into an application package file
+    (<code>.apk</code>) that can be deployed on Android devices</li>
+
+    <li>A set of native system headers and libraries that will be supported in all future versions
+    of the Android platform, starting from Android 1.5. Applications that use native activities
+    must be run on Android 2.3 or later.</li>
+
+    <li>Documentation, samples, and tutorials</li>
+  </ul>
+
+  <p>The latest release of the NDK supports the following instruction sets:</p>
+
+  <ul>
+    <li>ARMv5TE, including Thumb-1 instructions (see {@code docs/CPU-ARCH-ABIS.html} for more
+information)</li>
+
+    <li>ARMv7-A, including Thumb-2 and VFPv3-D16 instructions, with optional support for
+    NEON/VFPv3-D32 instructions (see {@code docs/CPU-ARM-NEON.html} for more information)</li>
+
+    <li>x86 instructions (see {@code docs/CPU-X86.html} for more information)</li>
+
+    <li>MIPS instructions (see {@code docs/CPU-MIPS.html} for more information)</li>
+  </ul>
+
+  <p>ARMv5TE machine code will run on all ARM-based Android devices. ARMv7-A will run only on
+  devices such as the Verizon Droid or Google Nexus One that have a compatible CPU. The main
+  difference between the two instruction sets is that ARMv7-A supports hardware FPU, Thumb-2, and
+  NEON instructions. You can target either or both of the instruction sets &mdash; ARMv5TE is the
+  default, but switching to ARMv7-A is as easy as adding a single line to the application's
+  <code>Application.mk</code> file, without needing to change anything else in the file. You can also build for
+  both architectures at the same time and have everything stored in the final <code>.apk</code>.
+  Complete information is provided in the CPU-ARCH-ABIS.HTML in the NDK package.</p>
+
+  <p>The NDK provides stable headers for libc (the C library), libm (the Math library), OpenGL ES
+  (3D graphics library), the JNI interface, and other libraries, as listed in the <a href=
+  "#tools">Development Tools</a> section.</p>
+
+  <h2 id="choosing">When to Develop in Native Code</h2>
+
+  <p>The NDK will not benefit most applications. As a developer, you need to balance its benefits
+  against its drawbacks; notably, using native code does not result in an automatic performance
+  increase, but always increases application complexity. In general, you should only use native
+  code if it is essential to your application, not just because you prefer to program in C/C++.</p>
+
+  <p>Typical good candidates for the NDK are self-contained, CPU-intensive operations that don't
+  allocate much memory, such as signal processing, physics simulation, and so on. Simply re-coding
+  a method to run in C usually does not result in a large performance increase. When examining
+  whether or not you should develop in native code, think about your requirements and see if the
+  Android framework APIs provide the functionality that you need. The NDK can, however, can be an
+  effective way to reuse a large corpus of existing C/C++ code.</p>
+
+  <p>The Android framework provides two ways to use native code:</p>
+
+  <ul>
+    <li>Write your application using the Android framework and use JNI to access the APIs provided
+    by the Android NDK. This technique allows you to take advantage of the convenience of the
+    Android framework, but still allows you to write native code when necessary. If you use this
+    approach, your application must target specific, minimum Android platform levels, see <a
+    href="#platform-compat">Android platform compatibility</a> for more information.</li>
+
+    <li>
+      <p>Write a native activity, which allows you to implement the lifecycle callbacks in native
+      code. The Android SDK provides the {@link android.app.NativeActivity} class, which is a
+      convenience class that notifies your
+      native code of any activity lifecycle callbacks (<code>onCreate()</code>, <code>onPause()</code>,
+      <code>onResume()</code>, etc). You can implement the callbacks in your native code to handle
+      these events when they occur. Applications that use native activities must be run on Android
+      2.3 (API Level 9) or later.</p>
+
+      <p>You cannot access features such as Services and Content Providers natively, so if you want
+      to use them or any other framework API, you can still write JNI code to do so.</p>
+    </li>
+  </ul>
+
+  <h2 id="contents">Contents of the NDK</h2>The NDK contains the APIs, documentation, and sample
+  applications that help you write your native code.
+
+  <h3 id="tools">Development tools</h3>
+
+  <p>The NDK includes a set of cross-toolchains (compilers, linkers, etc..) that can generate
+  native ARM binaries on Linux, OS X, and Windows (with Cygwin) platforms.</p>
+
+  <p>It provides a set of system headers for stable native APIs that are guaranteed to be supported
+  in all later releases of the platform:</p>
+
+  <ul>
+    <li>libc (C library) headers</li>
+
+    <li>libm (math library) headers</li>
+
+    <li>JNI interface headers</li>
+
+    <li>libz (Zlib compression) headers</li>
+
+    <li>liblog (Android logging) header</li>
+
+    <li>OpenGL ES 1.1 and OpenGL ES 2.0 (3D graphics libraries) headers</li>
+
+    <li>libjnigraphics (Pixel buffer access) header (for Android 2.2 and above).</li>
+
+    <li>A Minimal set of headers for C++ support</li>
+    
+    <li>OpenSL ES native audio libraries</li>
+    
+    <li>Android native application APIS</li>
+  </ul>
+
+  <p>The NDK also provides a build system that lets you work efficiently with your sources, without
+  having to handle the toolchain/platform/CPU/ABI details. You create very short build files to
+  describe which sources to compile and which Android application will use them &mdash; the build
+  system compiles the sources and places the shared libraries directly in your application
+  project.</p>
+
+  <p class="caution"><strong>Important:</strong> With the exception of the libraries listed above,
+  native system libraries in the Android platform are <em>not</em> stable and may change in future
+  platform versions. Your applications should <em>only</em> make use of the stable native system
+  libraries provided in this NDK.</p>
+
+  <h3 id="docs">Documentation</h3>
+
+  <p>The NDK package includes a set of documentation that describes the capabilities of the NDK and
+  how to use it to create shared libraries for your Android applications. In this release, the
+  documentation is provided only in the downloadable NDK package. You can find the documentation in
+  the <code>&lt;ndk&gt;/docs/</code> directory. Included are these files (partial listing):</p>
+
+  <ul>
+    <li>
+    INSTALL.HTML &mdash; describes how to install the NDK and configure it for your host
+    system</li>
+
+    <li>OVERVIEW.HTML &mdash; provides an overview of the NDK capabilities and usage</li>
+    
+    <li>ANDROID-MK.HTML &mdash; describes the use of the Android.mk file, which defines the native
+    sources you want to compile</li>
+    
+    <li>APPLICATION-MK.HTML &mdash; describes the use of the Application.mk file, which describes
+    the native sources required by your Android application</li>    
+    <li>CPLUSPLUS-SUPPORT.HTML &mdash; describes the C++ support provided in the Android NDK</li>    
+    <li>CPU-ARCH-ABIS.HTML &mdash; a description of supported CPU architectures and how to target
+    them.</li>
+
+    <li>CPU-FEATURES.HTML &mdash; a description of the <code>cpufeatures</code> static library that
+    lets your application code detect the target device's CPU family and the optional features at
+    runtime.</li>
+
+    <li>CHANGES.HTML &mdash; a complete list of changes to the NDK across all releases.</li>
+
+    <li>DEVELOPMENT.HTML &mdash; describes how to modify the NDK and generate release packages for it</li>
+    
+    <li>HOWTO.HTML &mdash; information about common tasks associated with NDK development</li>
+    
+    <li>IMPORT-MODULE.HTML &mdash; describes how to share and reuse modules</li>
+    
+    <li>LICENSES.HTML  &mdash; information about the various open source licenses that govern the Android NDK</li>
+ 
+    <li>NATIVE-ACTIVITY.HTML &mdash; describes how to implement native activities</li>
+    
+    <li>NDK-BUILD.HTML &mdash; describes the usage of the ndk-build script</li>
+
+    <li>NDK-GDB.HTML &mdash; describes how to use the native code debugger</li>
+
+    <li>PREBUILTS.HTML &mdash; information about how shared and static prebuilt libraries work </li>
+
+    <li>STANDALONE-TOOLCHAIN.HTML &mdash; describes how to use Android NDK toolchain as a standalone
+    compiler (still in beta).</li>
+    
+    <li>SYSTEM-ISSUES.HTML &mdash; known issues in the Android system images that you should be
+    aware of, if you are developing using the NDK.</li>
+
+    <li>STABLE-APIS.HTML &mdash; a complete list of the stable APIs exposed by headers in the
+    NDK.</li>
+    
+  </ul>
+
+  <p>Additionally, the package includes detailed information about the "bionic" C library provided
+  with the Android platform that you should be aware of, if you are developing using the NDK. You
+  can find the documentation in the <code>&lt;ndk&gt;/docs/system/libc/</code> directory:</p>
+
+  <ul>
+    <li>OVERVIEW.HTML &mdash; provides an overview of the "bionic" C library and the features it
+    offers.</li>
+  </ul>
+
+  <h3 id="samples">Sample applications</h3>
+
+<p>The NDK includes sample applications that illustrate how to use native code in your Android
+  applications:</p>
+
+  <ul>
+    <li><code>hello-jni</code> &mdash; a simple application that loads a string from a native
+    method implemented in a shared library and then displays it in the application UI.</li>
+
+    <li><code>two-libs</code> &mdash; a simple application that loads a shared library dynamically
+    and calls a native method provided by the library. In this case, the method is implemented in a
+    static library imported by the shared library.</li>
+
+    <li><code>san-angeles</code> &mdash; a simple application that renders 3D graphics through the
+    native OpenGL ES APIs, while managing activity lifecycle with a {@link
+    android.opengl.GLSurfaceView} object.</li>
+
+    <li><code>hello-gl2</code> &mdash; a simple application that renders a triangle using OpenGL ES
+    2.0 vertex and fragment shaders.</li>
+
+    <li><code>hello-neon</code> &mdash; a simple application that shows how to use the
+    <code>cpufeatures</code> library to check CPU capabilities at runtime, then use NEON intrinsics
+    if supported by the CPU. Specifically, the application implements two versions of a tiny
+    benchmark for a FIR filter loop, a C version and a NEON-optimized version for devices that
+    support it.</li>
+
+    <li><code>bitmap-plasma</code> &mdash; a simple application that demonstrates how to access the
+    pixel buffers of Android {@link android.graphics.Bitmap} objects from native code, and uses
+    this to generate an old-school "plasma" effect.</li>
+
+    <li><code>native-activity</code> &mdash; a simple application that demonstrates how to use the
+    native-app-glue static library to create a native activity</li>
+
+    <li><code>native-plasma</code> &mdash; a version of bitmap-plasma implemented with a native
+    activity.</li>
+  </ul>
+
+  <p>For each sample, the NDK includes the corresponding C source code and the necessary Android.mk
+  and Application.mk files. There are located under <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>
+  and their source code can be found under <code>&lt;ndk&gt;/samples/&lt;name&gt;/jni/</code>.</p>
+
+  <p>You can build the shared libraries for the sample apps by going into
+  <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code> then calling the <code>ndk-build</code> command.
+  The generated shared libraries will be located under
+  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi/</code> for (ARMv5TE machine code) and/or
+  <code>&lt;ndk&gt;/samples/&lt;name&gt;/libs/armeabi-v7a/</code> for (ARMv7 machine code).</p>
+
+  <p>Next, build the sample Android applications that use the shared libraries:</p>
+
+  <ul>
+    <li>If you are developing in Eclipse with ADT, use the New Project Wizard to create a new
+    Android project for each sample, using the "Import from Existing Source" option and importing
+    the source from <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>. Then, set up an AVD,
+    if necessary, and build/run the application in the emulator.</li>
+
+    <li>If you are developing with Ant, use the <code>android</code> tool to create the build file
+    for each of the sample projects at <code>&lt;ndk&gt;/samples/&lt;name&gt;/</code>.
+    Then set up an AVD, if necessary, build your project in the usual way, and run it in the
+    emulator.</li>    
+    
+  </ul>
+  
+  <p>For more information about developing with the Android SDK tools and what
+  you need to do to create, build, and run your applications, see
+  the <a href="{@docRoot}tools/workflow/index.html">Overview</a>
+  section for developing on Android.</p>
+
+  <h4 id="hello-jni">Exploring the hello-jni Sample</h4>
+
+  <p>The hello-jni sample is a simple demonstration on how to use JNI from an Android application.
+  The HelloJni activity receives a string from a simple C function and displays it in a
+  TextView.</p>
+
+  <p>The main components of the sample include:</p>
+
+  <ul>
+    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
+    file, a <code>src/</code> and <code>res</code> directories, and a main activity)</li>
+
+    <li>A <code>jni/</code> directory that includes the implemented source file for the native code
+    as well as the Android.mk file</li>
+
+    <li>A <code>tests/</code> directory that contains unit test code.</li>
+  </ul>
+
+  <ol>
+    <li>Create a new project in Eclipse from the existing sample source or use the
+    <code>android</code> tool to update the project so it generates a build.xml file that you can
+    use to build the sample.
+
+      <ul>
+        <li>In Eclipse:
+
+          <ol type="a">
+            <li>Click <strong>File &gt; New Android Project...</strong></li>
+
+            <li>Select the <strong>Create project from existing source</strong> radio button.</li>
+
+            <li>Select any API level above Android 1.5.</li>
+
+            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
+            the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
+
+            <li>Click <strong>Finish</strong>.</li>
+          </ol>
+        </li>
+
+        <li>On the command line:
+
+          <ol type="a">
+            <li>Change to the <code>&lt;ndk-root&gt;/samples/hello-jni</code> directory.</li>
+
+            <li>Run the following command to generate a build.xml file:
+              <pre class="no-pretty-print">android update project -p . -s</pre>
+            </li>
+          </ol>
+        </li>
+      </ul>
+    </li>
+
+    <li>Compile the native code using the <code>ndk-build</code> command.
+      <pre class="no-pretty-print">
+cd &lt;ndk-root&gt;/samples/hello-jni
+&lt;ndk_root&gt;/ndk-build
+</pre>
+    </li>
+
+    <li>Build and install the application as you would a normal Android application. If you are
+    using Eclipse, run the application to build and install it on a device. If you are using Ant,
+    run the following commands from the project directory:
+      <pre class="no-pretty-print">
+ant debug
+adb install bin/HelloJni-debug.apk
+</pre>
+    </li>
+  </ol>
+
+  <p>When you run the application on the device, the string <code>Hello JNI</code> should appear on
+  your device. You can explore the rest of the samples that are located in the
+  <code>&lt;ndk-root&gt;/samples</code> directory for more examples on how to use the JNI.</p>
+
+  <h4 id="native-activity">Exploring the native-activity Sample Application</h4>
+
+  <p>The native-activity sample provided with the Android NDK demonstrates how to use the
+  android_native_app_glue static library. This static library makes creating a native activity
+  easier by providing you with an implementation that handles your callbacks in another thread, so
+  you do not have to worry about them blocking your main UI thread. The main parts of the sample
+  are described below:</p>
+
+  <ul>
+    <li>The familiar basic structure of an Android application (an <code>AndroidManifest.xml</code>
+    file, a <code>src/</code> and <code>res</code> directories). The AndroidManifest.xml declares
+    that the application is native and specifies the .so file of the native activity. See {@link
+    android.app.NativeActivity} for the source or see the
+    <code>&lt;ndk_root&gt;/platforms/samples/native-activity/AndroidManifest.xml</code> file.</li>
+
+    <li>A <code>jni/</code> directory contains the native activity, main.c, which uses the
+    <code>android_native_app_glue.h</code> interface to implement the activity. The Android.mk that
+    describes the native module to the build system also exists here.</li>
+  </ul>
+
+  <p>To build this sample application:</p>
+
+  <ol>
+    <li>Create a new project in Eclipse from the existing sample source or use the
+    <code>android</code> tool to update the project so it generates a build.xml file that you can
+    use to build the sample.
+
+      <ul>
+        <li>In Eclipse:
+
+          <ol type="a">
+            <li>Click <strong>File &gt; New Android Project...</strong></li>
+
+            <li>Select the <strong>Create project from existing source</strong> radio button.</li>
+
+            <li>Select any API level above Android 2.3.</li>
+
+            <li>In the <strong>Location</strong> field, click <strong>Browse...</strong> and select
+            the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
+
+            <li>Click <strong>Finish</strong>.</li>
+          </ol>
+        </li>
+
+        <li>On the command line:
+
+          <ol type="a">
+            <li>Change to the <code>&lt;ndk-root&gt;/samples/native-activity</code> directory.</li>
+
+            <li>Run the following command to generate a build.xml file:
+              <pre class="no-pretty-print">
+android update project -p . -s
+</pre>
+            </li>
+          </ol>
+        </li>
+      </ul>
+    </li>
+
+    <li>Compile the native code using the <code>ndk-build</code> command.
+      <pre class="no-pretty-print">
+cd &lt;ndk-root&gt;/platforms/samples/android-9/samples/native-activity
+&lt;ndk_root&gt;/ndk-build
+</pre>
+    </li>
+
+    <li>Build and install the application as you would a normal Android application. If you are
+    using Eclipse, run the application to build and install it on a device. If you are using Ant,
+    run the following commands in the project directory, then run the application on the device:
+      <pre class="no-pretty-print">
+ant debug
+adb install bin/NativeActivity-debug.apk
+</pre>
+    </li>
+  </ol>
+
+
+  <h2 id="reqs">System and Software Requirements</h2>
+
+  <p>The sections below describe the system and software requirements for using the Android NDK, as
+  well as platform compatibility considerations that affect appplications using libraries produced
+  with the NDK.</p>
+
+  <h4>The Android SDK</h4>
+
+  <ul>
+    <li>A complete Android SDK installation (including all dependencies) is required.</li>
+
+    <li>Android 1.5 SDK or later version is required.</li>
+  </ul>
+
+  <h4>Supported operating systems</h4>
+
+  <ul>
+    <li>Windows XP (32-bit) or Vista (32- or 64-bit)</li>
+
+    <li>Mac OS X 10.4.8 or later (x86 only)</li>
+
+    <li>Linux (32 or 64-bit; Ubuntu 8.04, or other Linux distributions using GLibc 2.7 or
+later)</li>
+  </ul>
+
+  <h4>Required development tools</h4>
+
+  <ul>
+    <li>For all development platforms, GNU Make 3.81 or later is required. Earlier versions of GNU
+    Make might work but have not been tested.</li>
+
+    <li>A recent version of awk (either GNU Awk or Nawk) is also required.</li>
+
+    <li>For Windows, <a href="http://www.cygwin.com">Cygwin</a> 1.7 or higher is required. The NDK
+    will <em>not</em> work with Cygwin 1.5 installations.</li>
+  </ul>
+
+  <h4 id="platform-compat">Android platform compatibility</h4>
+
+  <ul>
+    <li>The native libraries created by the Android NDK can only be used on devices running
+      specific minimum Android platform versions. The minimum required platform version depends on
+      the CPU architecture of the devices you are targeting. The following table details which
+      Android platform versions are compatible with native code developed for specific CPU
+      architectures.
+
+    <table style="margin:1em;">
+      <tr>
+        <th>Native Code CPU Architecture Used</th>
+        <th>Compatible Android Platform(s)</th>
+      </tr>
+
+      <tr>
+        <td>ARM, ARM-NEON</td>
+        <td>Android 1.5 (API Level 3) and higher</td>
+      </tr>
+
+      <tr>
+        <td>x86</td>
+        <td>Android 2.3 (API Level 9) and higher</td>
+      </tr>
+
+      <tr>
+        <td>MIPS</td>
+        <td>Android 2.3 (API Level 9) and higher</td>
+      </tr>
+    </table>
+
+      <p>These requirements mean you can use native libraries produced with the NDK in
+      applications that are deployable to ARM-based devices running Android 1.5 or later. If you are
+      deploying native libraries to x86 and MIPS-based devices, your application must target Android
+      2.3 or later.</p>
+    </li>
+
+    <li>To ensure compatibility, an application using a native library produced with the NDK
+    <em>must</em> declare a <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>
+      &lt;uses-sdk&gt;</code></a> element in its manifest file, with an
+      <code>android:minSdkVersion</code> attribute value of "3" or higher. For example:
+
+<pre style="margin:1em;">
+&lt;manifest&gt;
+  &lt;uses-sdk android:minSdkVersion="3" /&gt;
+  ...
+&lt;/manifest&gt;
+</pre>
+    </li>
+
+    <li>If you use this NDK to create a native library that uses the OpenGL ES APIs, the
+    application containing the library can be deployed only to devices running the minimum platform
+    versions described in the table below. To ensure compatibility, make sure that your application
+    declares the proper <code>android:minSdkVersion</code> attribute value, as shown in the
+    following table.</li>
+
+    <li style="list-style: none; display: inline">
+      <table style="margin:1em;">
+        <tr>
+          <th>OpenGL ES Version Used</th>
+
+          <th>Compatible Android Platform(s)</th>
+
+          <th>Required uses-sdk Attribute</th>
+        </tr>
+
+        <tr>
+          <td>OpenGL ES 1.1</td>
+
+          <td>Android 1.6 (API Level 4) and higher</td>
+
+          <td><code>android:minSdkVersion="4"</code></td>
+        </tr>
+
+        <tr>
+          <td>OpenGL ES 2.0</td>
+
+          <td>Android 2.0 (API Level 5) and higher</td>
+
+          <td><code>android:minSdkVersion="5"</code></td>
+        </tr>
+      </table>
+
+      <p>For more information about API Level and its relationship to Android platform versions,
+      see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a>.</p>
+    </li>
+
+    <li>Additionally, an application using the OpenGL ES APIs should declare a
+    <code>&lt;uses-feature&gt;</code> element in its manifest, with an
+    <code>android:glEsVersion</code> attribute that specifies the minimum OpenGl ES version
+    required by the application. This ensures that Google Play will show your application only
+    to users whose devices are capable of supporting your application. For example:
+      <pre style="margin:1em;">
+&lt;manifest&gt;
+<!-- Declare that the application uses the OpenGL ES 2.0 API and is designed
+     to run only on devices that support OpenGL ES 2.0 or higher. -->
+  &lt;uses-feature android:glEsVersion="0x00020000" /&gt;
+  ...
+&lt;/manifest&gt;
+</pre>
+
+      <p>For more information, see the <a href=
+      "{@docRoot}guide/topics/manifest/uses-feature-element.html"><code>&lt;uses-feature&gt;</code></a>
+      documentation.</p>
+    </li>
+
+    <li>If you use this NDK to create a native library that uses the API to access Android {@link
+    android.graphics.Bitmap} pixel buffers or utilizes native activities, the application
+    containing the library can be deployed only to devices running Android 2.2 (API level 8) or
+    higher. To ensure compatibility, make sure that your application declares <code>&lt;uses-sdk
+    android:minSdkVersion="8" /&gt;</code> attribute value in its manifest.</li>
+  </ul>
diff --git a/docs/html/tools/sdk/older_releases.jd b/docs/html/tools/sdk/older_releases.jd
new file mode 100644
index 0000000..bb274b6
--- /dev/null
+++ b/docs/html/tools/sdk/older_releases.jd
@@ -0,0 +1,613 @@
+page.title=SDK Archives
+@jd:body
+
+<p>This page provides a full list of archived and obsolete SDK releases,
+including non-current versions of active releases and "early look" versions that
+were released before Android 1.0. <strong>These are provided for
+informational and archival purposes only</strong>.</p>
+
+<div class="special">
+<p>If you are just starting to develop applications for Android, please
+download the current <a href="{@docRoot}sdk/index.html">Android
+SDK</a>. With the current Android SDK, you can add any current and previous
+version of the Android platform as a component and use it for
+development and testing.</p>
+<p>If you already have an Android SDK for platform version 1.6 or newer, then
+you do not need to install a new SDK&mdash;especially not one from this page.
+You should install older platforms as components of your existing SDK.
+See <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.</p>
+</div>
+
+
+<h2>Archived SDKs</h2>
+
+<p>The tables below provides Android SDKs that are current in terms of their
+platform version, but do not provide the latest Android development
+environment and tools. Instead of downloading one of these, as a separate
+SDK for each version of the platform, you should instead use the new
+version-neutral Android SDK to download each version of
+the Android platfrom as an individual component.</p>
+
+<p>Please download the current <a
+href="http://developer.android.com/sdk/index.html">Android SDK</a>.</p>
+
+
+<h3>Release 1.6 r1</h3>
+ <p><em>September 2009 - <a href="RELEASENOTES.html#1.6_r1">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.6_r1.zip">android-sdk-
+windows-1 .6_r1.zip</a>
+    </td>
+    <td>260529085 bytes</td>
+    <td>2bcbacbc7af0363058ca1cac6abad848</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.6_r1.zip">android-sdk-
+mac_x86-1 .6_r1.zip</a>
+    </td>
+    <td>247412515 bytes</td>
+    <td>eb13cc79602d492e89103efcf48ac1f6</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.6_r1.tgz">android-
+sdk- linux_x86-1.6_r1.tgz</a>
+    </td>
+    <td>238224860 bytes</td>
+    <td>b4bf0e610ff6db2fb6fb09c49cba1e79</td>
+  </tr>
+  
+  </table>
+
+
+<h3>Release 1.5 r3</h3>
+ <p><em>July 2009 - <a href="RELEASENOTES.html#1.5_r3">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r3.zip">android-sdk-
+windows-1 .5_r3.zip</a>
+    </td>
+    <td>191477853 bytes</td>
+    <td>1725fd6963ce69102ba7192568dfc711</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r3.zip">android-sdk-
+mac_x86-1 .5_r3.zip</a>
+    </td>
+    <td>183024673 bytes</td>
+    <td>b1bafdaefdcec89a14b604b504e7daec</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r3.zip">android-
+sdk- linux_x86-1.5_r3.zip</a>
+    </td>
+    <td>178117561 bytes</td>
+    <td>350d0211678ced38da926b8c9ffa4fac</td>
+  </tr>
+  
+  </table>
+
+
+<h3>Release 1.1 r1</h3>
+ <p><em>February 2009 - <a href="RELEASENOTES.html#1.1_r1">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.1_r1.zip">android-sdk-
+windows-1
+.1_r1.zip</a>
+    </td>
+    <td>86038515 bytes</td>
+    <td>8c4b9080b430025370689e03d20842f3</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.1_r1.zip">android-sdk-
+mac_x86-1
+.1_r1.zip</a>
+    </td>
+    <td>79046151 bytes</td>
+    <td>becf0f1763d61eedce15d2a903d6c1dd</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.1_r1.zip">android-
+sdk-
+linux_x86-1.1_r1.zip</a>
+    </td>
+    <td>79345522 bytes</td>
+    <td>ebcb16b0cd4aef198b4dd9a1418efbf1</td>
+  </tr>
+  
+  </table>
+
+
+<h3>Release 1.0 r2</h3>
+ <p><em>November 2008 - <a href="RELEASENOTES.html#1.0_r2">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.0_r2.zip">android-sdk-
+windows-1
+.0_r2.zip</a>
+    </td>
+    <td>98360564 bytes</td>
+    <td>a5e1af8ac145946b4a9627516ad4a711</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r2.zip">android-sdk-
+mac_x86-1
+.0_r2.zip</a>
+    </td>
+    <td>93771410 bytes</td>
+    <td>87b99d5e9f59b78363a63200c11498e8</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r2.zip">android-
+sdk-
+linux_x86-1.0_r2.zip</a>
+    </td>
+    <td>94186463 bytes</td>
+    <td>a1f3b6d854596f850f5008856d0f380e</td>
+  </tr>
+  
+  </table>
+
+
+
+
+<h2>Obsolete SDK Releases</h2>
+
+<p>These tables provide Android SDK releases that have been superceded by
+an active release (shown above) and that are now obsolete.</p>
+
+
+<h3>Release 1.5 r2</h3>
+ <p><em>May 2009 - <a href="RELEASENOTES.html#1.5_r2">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r2.zip">android-sdk-
+windows-1 .5_r2.zip</a>
+    </td>
+    <td>178346828 bytes</td>
+    <td>ba54ac6bda45921d442b74b6de6ff6a9</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r2.zip">android-sdk-
+mac_x86-1 .5_r2.zip</a>
+    </td>
+    <td>169945128 bytes</td>
+    <td>f4e06a5194410243f213d0177713d6c9</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r2.zip">android-
+sdk- linux_x86-1.5_r2.zip</a>
+    </td>
+    <td>165035130 bytes</td>
+    <td>1d3c3d099e95a31c43a7b3e6ae307ed3</td>
+  </tr>
+  
+  </table>
+
+
+<h3>Release 1.5 r1</h3>
+ <p><em>April 2009 - <a href="RELEASENOTES.html#1.5_r1">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.5_r1.zip">android-sdk-
+windows-1 .5_r1.zip</a>
+    </td>
+    <td>176263368 bytes</td>
+    <td>42be980eb2d3efaced01ea6c32c0045f</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.5_r1.zip">android-sdk-
+mac_x86-1 .5_r1.zip</a>
+    </td>
+    <td>167848675 bytes</td>
+    <td>5b2a8d9f096032db4a75bfa0d689a51b</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.5_r1.zip">android-
+sdk- linux_x86-1.5_r1.zip</a>
+    </td>
+    <td>162938845 bytes</td>
+    <td>2addfd315da0ad8b5bde6b09d5ff3b06</td>
+  </tr>
+  
+  </table>
+
+
+<h3>Release 1.0 r1</h3>
+ <p><em>September 23, 2008 - <a href="RELEASENOTES.html#1.0_r1">Release
+Notes</a></em></p>
+
+  <table class="download">
+    <tr>
+      <th>Platform</th>
+      <th>Package</th>
+      <th>Size</th>
+      <th>MD5 Checksum</th>
+  </tr>
+  <tr>
+    <td>Windows</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-1.0_r1.zip">android-sdk-
+windows-1 .0_r1.zip</a>
+    </td>
+    <td>89.7 MB bytes</td>
+    <td>d69f4ee93d4010f726c04302662fd999</td>
+  </tr>
+  <tr class="alt-color">
+    <td>Mac OS X (intel)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-1.0_r1.zip">android-sdk-
+mac_x86-1 .0_r1.zip</a>
+    </td>
+    <td>87.5 MB bytes</td>
+    <td>564876ada22872e50c2866806de9fc5c</td>
+  </tr>
+  <tr>
+    <td>Linux (i386)</td>
+    <td>
+  <a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-1.0_r1.zip">android-
+sdk- linux_x86-1.0_r1.zip</a>
+    </td>
+    <td>87.8 MB bytes</td>
+    <td>2660b4029039b7d714e59827e9a9a11d</td>
+  </tr>
+  
+  </table>
+
+
+
+
+<h2>Non-Compatible SDK Releases</h2>
+
+<!-- <div class="special"> -->
+<p>The SDKs listed below are "early-look" versions that were released in
+  the year preceding the full release of Android 1.0 in September 2008. Because
+  these early-look SDKs were released before the Android 1.0 API specification was
+  finalized, they do not provide a compliant Android execution environment.
+  Consequently, applications that you develop in these SDKs will not be able to
+  run on any Android-powered devices.</p>
+
+<p>If you have an older application that you built in one of the early-look
+SDKs, you must migrate it to the Android 1.0 SDK (or later release) before you
+will be able to deploy it to an Android-powered device. To help with this
+migration, each SDK package below provides information about API changes from
+the previous version. You can find the migration information in the
+documentation included in each SDK package.</p>
+<!-- </div> -->
+
+<h4>Version 0.9 Beta</h4>
+<p><em>August 18, 2008 - <a href="OLD_RELEASENOTES.html#0.9_beta">Release Notes</a></em></p>
+ <table>
+   <tr>
+     <th colspan="2">Package</th>
+     <th>Size</th>
+     <th>MD5 Checksum</th>
+   </tr>
+   <tr>
+     <td>Windows</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-windows-0.9_beta.zip">
+android-sdk-windows-0.9_beta.zip</a></td>
+     <td>93,126,573 bytes</td>
+     <td>305031ad8335d1b6040bdd5a65349d6d</td>
+   </tr>
+   <tr class="alt">
+     <td>Mac OS X (intel)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-mac_x86-0.9_beta.zip">
+android-sdk-mac_x86-0.9_beta.zip</a></td>
+     <td>91,374,464 bytes</td>
+     <td>9a6969159091cede46302e11049fe3ca</td>
+   </tr>
+   <tr>
+     <td>Linux (i386)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk-linux_x86-0.9_beta.zip"
+>android-sdk-linux_x86-0.9_beta.zip</a></td>
+     <td>91,821,068 bytes</td>
+     <td>077e5ef549dd9c5be54bd88e6a8e196c</td>
+   </tr>
+ </table>
+
+<h4>Version m5-rc15</h4>
+ <p><em>March 3, 2008 - <a href="OLD_RELEASENOTES.html#m5-rc15">Release Notes</a></em></p>
+ <table>
+   <tr>
+     <th colspan="2">Package</th>
+     <th>Size</th>
+     <th>MD5 Checksum</th>
+   </tr>
+   <tr>
+     <td>Windows</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc15_windows.zip">
+android-sdk_m5-rc15_windows.zip</a></td>
+     <td>79 MB</td>
+     <td>ecce40bc50201886d95ba2690cdbc5ce</td>
+   </tr>
+   <tr class="alt">
+     <td>Mac OS X (intel)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc15_mac-x86.zip">
+android-sdk_m5-rc15_mac-x86.zip</a></td>
+     <td>76 MB</td>
+     <td>45a6385bbc1b2cb295409cfc81fb04b4</td>
+   </tr>
+   <tr>
+     <td>Linux (i386)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc15_linux-x86.zip">
+android-sdk_m5-rc15_linux-x86.zip</a></td>
+     <td>76 MB</td>
+     <td>e913f785afecdeed34c30639fd8c5862</td>
+   </tr>
+ </table>
+
+ <h4>Version m5-rc14</h4>
+ <p><em>February 12, 2008 - <a href="OLD_RELEASENOTES.html#m5-rc14">Release Notes</a></em></p>
+ <table>
+   <tr>
+     <th colspan="2">Package</th>
+     <th>Size</th>
+     <th>MD5 Checksum</th>
+   </tr>
+   <tr>
+     <td>Windows</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc14_windows.zip">
+android-sdk_m5-rc14_windows.zip</a></td>
+     <td>79 MB</td>
+     <td>ecc75c1e69588350634ca25867ce05a0</td>
+   </tr>
+   <tr class="alt">
+     <td>Mac OS X (intel)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc14_mac-x86.zip">
+android-sdk_m5-rc14_mac-x86.zip</a></td>
+     <td>76 MB</td>
+     <td>844c80d0adb1a326f5a9fff262c61efc</td>
+   </tr>
+   <tr>
+     <td>Linux (i386)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android-sdk_m5-rc14_linux-x86.zip">
+android-sdk_m5-rc14_linux-x86.zip</a></td>
+     <td>76 MB</td>
+     <td>f8b863c8a880afe9bb84124f5976aab1</td>
+   </tr>
+ </table>
+
+
+
+
+ <h4>Version m3-rc37a</h4>
+ <p><em>December 14, 2007 - <a href="OLD_RELEASENOTES.html#m3-rc37a">Release Notes</a></em></p>
+ <table>
+   <tr>
+     <th colspan="2">Package</th>
+     <th>Size</th>
+     <th>MD5 Checksum</th>
+   </tr>
+   <tr>
+     <td>Windows</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_windows_m3-rc37a.zip">
+android_sdk_windows_m3-rc37a.zip</a></td>
+     <td>58 MB</td>
+     <td>5db5aea20a2c2f010baefc4b1091a575</td>
+   </tr>
+   <tr class="alt">
+     <td>Mac OS X (intel)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_darwin_m3-rc37a.zip">
+android_sdk_darwin_m3-rc37a.zip</a></td>
+     <td>54 MB</td>
+     <td>0b22e73fbd07b4af4009387afce3a37f</td>
+   </tr>
+   <tr>
+     <td>Linux (i386)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_linux_m3-rc37a.zip">
+android_sdk_linux_m3-rc37a.zip</a></td>
+     <td>54 MB</td>
+     <td>41285beecc4f9926e6ecf5f12610b356</td>
+   </tr>
+ </table>
+
+
+
+
+ <h4>Version m3-rc22a</h4>
+ <p><em>November 16, 2007 - <a href="OLD_RELEASENOTES.html#m3-rc22a">Release Notes</a></em></p>
+ <table>
+   <tr>
+     <th colspan="2">Package</th>
+     <th>Size</th>
+     <th>MD5 Checksum</th>
+   </tr>
+   <tr>
+     <td>Windows</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_windows_m3-rc22a.zip">
+android_sdk_windows_m3-rc22a.zip</a></td>
+     <td>59 MB</td>
+     <td>aa3dee05a9872752a3bc4efd0f93e98b</td>
+   </tr>
+   <tr class="alt">
+     <td>Mac OS X (intel)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_darwin_m3-rc22a.zip">
+android_sdk_darwin_m3-rc22a.zip</a></td>
+     <td>55 MB</td>
+     <td>0547f45614ad94c3af22c3c0aa6f709f</td>
+   </tr>
+   <tr>
+     <td>Linux (i386)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_linux_m3-rc22a.zip">
+android_sdk_linux_m3-rc22a.zip</a></td>
+     <td>55 MB</td>
+     <td>84b3455de5cdfd841a172c13d24c382e</td>
+   </tr>
+ </table>
+
+
+
+
+ <h4>Version m3-rc20a</h4>
+ <p><em>November 12, 2007 - <a href="OLD_RELEASENOTES.html#m3-rc20a">Release Notes</a></em></p>
+ <table>
+   <tr>
+     <th colspan="2">Package</th>
+     <th>Size</th>
+     <th>MD5 Checksum</th>
+   </tr>
+   <tr>
+     <td>Windows</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_windows_m3-rc20a.zip">
+android_sdk_windows_m3-rc20a.zip</a></td>
+     <td>59 MB</td>
+     <td>a404b875708df7339ba77bdf2e08dc06</td>
+   </tr>
+   <tr class="alt">
+     <td>Mac OS X (intel)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_darwin_m3-rc20a.zip">
+android_sdk_darwin_m3-rc20a.zip</a></td>
+     <td>55 MB</td>
+     <td>8fc29aeaa45eda84bfac854ebd02a6da</td>
+   </tr>
+   <tr>
+     <td>Linux (i386)</td>
+     <td>
+<a
+href="{@docRoot}sdk/download.html?v=archives/android_sdk_linux_m3-rc20a.zip">
+android_sdk_linux_m3-rc20a.zip</a></td>
+     <td>55 MB</td>
+     <td>9196759df9b69cd89a220b156f133364</td>
+   </tr>
+ </table>
diff --git a/docs/html/tools/sdk/platforms.jd b/docs/html/tools/sdk/platforms.jd
new file mode 100644
index 0000000..27e89de
--- /dev/null
+++ b/docs/html/tools/sdk/platforms.jd
@@ -0,0 +1,9 @@
+page.title=Android Development Platforms
+
+@jd:body
+
+
+
+<p>A page that lists platforms and links to release notes. Links to dashboards etc.</p>
+
+
diff --git a/docs/html/tools/sdk/preview/features.jd b/docs/html/tools/sdk/preview/features.jd
new file mode 100644
index 0000000..02897cd
--- /dev/null
+++ b/docs/html/tools/sdk/preview/features.jd
@@ -0,0 +1,8 @@
+@jd:body
+
+<script type="text/javascript">
+  document.location=toRoot+"about/versions/android-3.0.html"
+</script>
+
+<p>You should have already been redirected by your browser. Please go to the
+<a href="{@docRoot}about/versions/android-3.0.html">Android 3.0 Platform</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/preview/index.jd b/docs/html/tools/sdk/preview/index.jd
similarity index 100%
rename from docs/html/sdk/preview/index.jd
rename to docs/html/tools/sdk/preview/index.jd
diff --git a/docs/html/tools/sdk/preview/installing.jd b/docs/html/tools/sdk/preview/installing.jd
new file mode 100644
index 0000000..c40e531
--- /dev/null
+++ b/docs/html/tools/sdk/preview/installing.jd
@@ -0,0 +1,8 @@
+@jd:body
+
+<script type="text/javascript">
+  document.location=toRoot+"sdk/installing/index.html"
+</script>
+
+<p>You should have already been redirected by your browser. Please go to
+<a href="{@docRoot}sdk/installing/index.html">Installing the SDK</a>.</p>
\ No newline at end of file
diff --git a/docs/html/sdk/preview/requirements.jd b/docs/html/tools/sdk/preview/requirements.jd
similarity index 100%
rename from docs/html/sdk/preview/requirements.jd
rename to docs/html/tools/sdk/preview/requirements.jd
diff --git a/docs/html/sdk/preview/upgrading.jd b/docs/html/tools/sdk/preview/upgrading.jd
similarity index 100%
rename from docs/html/sdk/preview/upgrading.jd
rename to docs/html/tools/sdk/preview/upgrading.jd
diff --git a/docs/html/tools/sdk/tools-notes.jd b/docs/html/tools/sdk/tools-notes.jd
new file mode 100644
index 0000000..f08209b
--- /dev/null
+++ b/docs/html/tools/sdk/tools-notes.jd
@@ -0,0 +1,855 @@
+page.title=SDK Tools
+@jd:body
+
+<p>SDK Tools is a downloadable component for the Android SDK. It includes the
+complete set of development and debugging tools for the Android SDK.</p>
+
+<p>If you are new to the Android SDK, the <a
+href="{@docRoot}sdk/index.html">SDK starter package</a> installs the
+latest revision of the SDK Tools in the <code>&lt;sdk&gt;/tools</code> directory.</p>
+
+<p>If you are already using the SDK and you want to update to the latest version
+of the SDK Tools, use the <em>Android SDK Manager</em> to get the
+update, rather than downloading a new SDK starter package. For more information
+about how to update, see <a
+href="{@docRoot}sdk/exploring.html#UpdatingComponents">Exploring the SDK</a>.</p>
+
+
+<h2 id="notes">Revisions</h2>
+
+<p>The sections below provide notes about successive releases of
+the SDK Tools, as denoted by revision number. To determine what revision of the SDK
+Tools you are using, refer to the "Installed Packages" listing in the Android SDK Manager. </p>
+
+<p>For a summary of all known issues in SDK Tools, see <a
+href="http://tools.android.com/knownissues">http://tools.android.com/knownissues</a>.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+padding: 5px 0 0;
+}
+.toggleme {
+  padding: 10px 0 0 20px;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0 5px 3px 0;
+}
+</style>
+
+<div class="toggleable opened">
+  <a href="#" onclick="return toggleDiv(this)">
+    <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
+    width="9px" />
+    SDK Tools, Revision 19</a> <em>(April 2012)</em>
+
+  <div class="toggleme">
+    <p class="note"><strong>Note:</strong> This update of SDK Tools is only available through
+the <a href="{@docRoot}sdk/exploring.html">Android SDK Manager</a>. Use this tool to
+download and install this update.</p>
+
+    <dl>
+    <dt>Dependencies:</dt>
+    <dd>
+      <ul>
+        <li>Android SDK Platform-tools revision 9 or later.</li>
+        <li>If you are developing in Eclipse with ADT, note that the SDK Tools r19 is designed for
+        use with ADT 18.0.0 and later. If you haven't already, we highly recommend updating your
+        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 18.0.0.</li>
+        <li>If you are developing outside Eclipse, you must have
+          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
+    </ul>
+    </dd>
+    <dt>Bug fixes:</dt>
+    <dd>
+      <ul>
+        <li>Fixed an issue that prevented some developers from running the emulator with GPU
+acceleration.</li>
+      </ul>
+    </dd>
+    </dl>
+  </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+    width="9px" />
+    SDK Tools, Revision 18</a> <em>(April 2012)</em>
+
+  <div class="toggleme">
+    <p class="caution"><strong>Important:</strong> To download the new Android
+    4.0 system components from the Android SDK Manager, you must first update the
+    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
+    the Android 4.0 system components will not be available for download.</p>
+
+    <dl>
+    <dt>Dependencies:</dt>
+    <dd>
+      <ul>
+        <li>Android SDK Platform-tools revision 9 or later.</li>
+        <li>If you are developing in Eclipse with ADT, note that the SDK Tools r18 is designed for
+        use with ADT 18.0.0 and later. If you haven't already, we highly recommend updating your
+        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 18.0.0.</li>
+        <li>If you are developing outside Eclipse, you must have
+          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
+    </ul>
+    </dd>
+    <dt>General notes:</dt>
+    <dd>
+      <ul>
+        <li>Updated the SdkController app to encapsulate both sensor and multitouch emulation
+          functionality.</li>
+      </ul>
+    </dd>
+    <dt>Bug fixes:</dt>
+    <dd>
+      <ul>
+        <li>Fixed Ant issues where some jar libraries in the {@code libs/} folder are not picked up
+in some cases.</li>
+      </ul>
+    </dd>
+    </dl>
+  </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+    width="9px" />
+    SDK Tools, Revision 17</a> <em>(March 2012)</em>
+
+  <div class="toggleme">
+    <p class="caution"><strong>Important:</strong> To download the new Android
+    4.0 system components from the Android SDK Manager, you must first update the
+    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
+    the Android 4.0 system components will not be available for download.</p>
+
+    <dl>
+    <dt>Dependencies:</dt>
+    <dd>
+      <ul>
+        <li>Android SDK Platform-tools revision 9 or later.</li>
+        <li>If you are developing in Eclipse with ADT, note that the SDK Tools r17 is designed for
+        use with ADT 17.0.0 and later. If you haven't already, we highly recommend updating your
+        <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 17.0.0.</li>
+        <li>If you are developing outside Eclipse, you must have
+          <a href="http://ant.apache.org/">Apache Ant</a> 1.8 or later.</li>
+    </ul>
+    </dd>
+    <dt>General notes:</dt>
+    <dd>
+      <ul>
+        <li>Emulator
+          <ul>
+            <li>Added support for hardware accelerated graphics rendering. This feature requires an
+API Level 15, Revision 3 or later system image.
+(<a href="{@docRoot}tools/devices/emulator.html#accel-graphics">more info</a>)
+            </li>
+            <li>Added support for running Android x86 system images in virtualization mode on
+Windows and Mac OS X.
+(<a href="{@docRoot}tools/devices/emulator.html#accel-vm">more info</a>)
+              <p class="note"><strong>Note:</strong> Use the Android SDK Manager to download and
+install x86 system images. Android x86 system images are not available for all API levels.</p>
+            </li>
+            <li>Added experimental support for multi-touch input by enabing the emulator to receive
+              touch input from a USB-tethered physical Android device.
+              (<a href="http://tools.android.com/tips/hardware-emulation">more info</a>)</li>
+          </ul>
+        </li>
+        <li>Added viewing of live detailed network usage of an app in DDMS. (<a
+    href="http://tools.android.com/recent/detailednetworkusageinddms">more info</a>)</li>
+        <li>ProGuard
+          <ul>
+            <li>Updated the bundled ProGuard tool to version 4.7. In addition to many new features,
+this update fixes the {@code Conversion to Dalvik format failed with error 1} error some users have
+experienced.</li>
+            <li>Updated the default {@code proguard.cfg} file with better default flags for
+              Android.</li>
+            <li>Split the ProGuard configuration file has been in half, with project specific flags
+kept in project and the generic Android flags distributed (and updated) with the tools
+themselves.</li>
+          </ul>
+        </li>
+        <li>Build
+          <ul>
+            <li>Added a feature that allows you to run some code only in debug mode. Builds now
+generate a class called {@code BuildConfig} containing a {@code DEBUG} constant that is
+automatically set according to your build type. You can check the ({@code BuildConfig.DEBUG})
+constant in your code to run debug-only functions.</li>
+            <li>Fixed issue when a project and its libraries include the same jar file in their libs
+              folder. (<a href="http://tools.android.com/recent/dealingwithdependenciesinandroidprojects">more
+              info</a>)</li>
+            <li>Added support for custom views with custom attributes in libraries. Layouts using
+custom attributes must use the namespace URI {@code http://schemas.android.com/apk/res-auto} instead
+of the URI that includes the app package name. This URI is replaced with the app specific one at
+build time.</li>
+          </ul>
+        </li>
+        <li>Lint
+          <ul>
+            <li>Updated Lint to check Android application code. Lint rules which previously
+performed pattern based searches in the application code (such as the unused resource check) have
+been rewritten to use the more accurate Java-style parse trees.</li>
+            <li>Added support for checking library projects. This change means that rules such as
+the unused resource check properly handle resources declared in a library project and referenced in
+a downstream project.</li>
+            <li>Added ability to suppress Lint warnings in Java code with the new
+{@code @SuppressLint} annotation, and in XML files with the new tools: namespace and
+ignore attribute. (<a
+    href="http://tools.android.com/recent/ignoringlintwarnings">more info</a>)</li>
+            <li>New Lint checks:
+              <ul>
+                <li>Added check for Android API calls that require a version of Android higher than
+                  the minimum supported version. You can use the new {@code @TargetApi} annotation
+                  to suppress warnings when the code is wrapped in a system version condition.
+                  (<a href="http://tools.android.com/recent/lintapicheck">more info</a>)</li>
+                <li>Added over 20 new Lint rules, including checks for
+                  <a href="http://tools.android.com/recent/lintperformancechecks">performance</a>,
+                  XML layouts, manifest and file handling.</li>
+              </ul>
+            </li>
+          </ul>
+        </li>
+      </ul>
+    </dd>
+    </dl>
+  </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+    width="9px" />
+    SDK Tools, Revision 16</a> <em>(December 2011)</em>
+
+  <div class="toggleme">
+    <p class="caution"><strong>Important:</strong> To download the new Android
+    4.0 system components from the Android SDK Manager, you must first update the
+    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
+    the Android 4.0 system components will not be available for download.</p>
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+  <ul>
+    <li>Android SDK Platform-tools revision 9 or later.</li>
+    <li>If you are developing in Eclipse with ADT, note that the SDK Tools r16 is designed for use
+    with ADT 16.0.0 and later. If you haven't already, we highly recommend updating your
+    <a href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 16.0.0.</li>
+    <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+    Ant</a> 1.8 or later.</li>
+</ul>
+</dd>
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>Added Lint tools to detect common errors in Android projects.
+      (<a href="http://tools.android.com/recent/lint">more info</a>)</li>
+    <li>Added sensor emulation support, which allows the emulator to read sensor data from a
+      physical Android device.
+      (<a href="http://tools.android.com/recent/sensoremulation">more info</a>)</li>
+    <li>Added support for using a webcam to emulate a camera on Mac OS X.</li>
+  </ul>
+</dd>
+<dt>Bug fixes:</dt>
+<dd>
+  <ul>
+    <li>Snapshots now work for Android 4.0 system images.</li>
+    <li>Fixed several small issues for the build file.
+    (<a href="http://code.google.com/p/android/issues/detail?id=21023">Issue 21023</a>,
+    <a href="http://code.google.com/p/android/issues/detail?id=21267">Issue 21267</a>,
+    <a href="http://code.google.com/p/android/issues/detail?id=21465">Issue 21465</a>,
+    <a href="http://code.google.com/p/android/issues/detail?id=21525">Issue 21525</a>).</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+    width="9px" />
+    SDK Tools, Revision 15</a> <em>(October 2011)</em>
+
+  <div class="toggleme">
+    <p class="caution"><strong>Important:</strong> To download the new Android
+    4.0 system components from the Android SDK Manager, you must first update the
+    SDK tools to revision 14 or later and restart the Android SDK Manager. If you do not,
+    the Android 4.0 system components will not be available for download.</p>
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+  <ul><li>Android SDK Platform-tools revision 9 or later.</li>
+  <li>If you are developing in Eclipse with ADT, note that the SDK Tools r15 is designed for use
+  with ADT 15.0.0 and later. If you haven't already, we highly recommend updating your <a
+  href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 15.0.0.</li>
+  <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+  Ant</a> 1.8 or later.</li>
+</ul>
+
+<dt>Bug fixes:</dt>
+<dd>
+  <ul>
+    <li>Fixed emulator crash on Linux due to improper webcam detection
+    (<a href="http://code.google.com/p/android/issues/detail?id=20952">Issue 20952</a>).</li>
+    <li>Fixed emulator issue when using the <code>-wipe-data</code> argument.</li>
+    <li>Fixed build issue when using Renderscript in projects that target API levels 11-13
+    (<a href="http://code.google.com/p/android/issues/detail?id=21006">Issue 21006</a>).</li>
+    <li>Fixed issue when creating an AVD using the GoogleTV addon
+    (<a href="http://code.google.com/p/android/issues/detail?id=20963">Issue 20963</a>).</li>
+    <li>Fixed <code>ant test</code>
+    (<a href="http://code.google.com/p/android/issues/detail?id=20979">Issue 20979</a>).</li>
+    <li>Fixed <code>android update project</code>
+    (<a href="http://code.google.com/p/android/issues/detail?id=20535">Issue 20535</a>).</li>
+    <li>Fixed scrolling issue in the new Logcat panel of DDMS.</li>
+    <li>Fixed issue with MonkeyRunner
+    (<a href="http://code.google.com/p/android/issues/detail?id=20964">Issue 20964</a>).</li>
+    <li>Fixed issues in the SDK Manager
+    (<a href="http://code.google.com/p/android/issues/detail?id=20939">Issue 20939</a>,
+    <a href="http://code.google.com/p/android/issues/detail?id=20607">Issue 20607</a>).</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+    <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+    width="9px" />
+    SDK Tools, Revision 14</a> <em>(October 2011)</em>
+
+  <div class="toggleme">
+    <p class="note"><strong>Important:</strong> To download the new Android
+    4.0 system components from the Android SDK Manager, you must first update the
+    SDK tools to revision 14 and restart the Android SDK Manager. If you do not,
+    the Android 4.0 system components will not be available for download.</p>
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+  <ul><li>Android SDK Platform-tools revision 8 or later.</li>
+  <li>If you are developing in Eclipse with ADT, note that the SDK Tools r14 is designed for use
+  with ADT 14.0.0 and later. If you haven't already, we highly recommend updating your <a
+  href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 14.0.0.</li>
+  <li>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+  Ant</a> 1.8 or later.</li>
+</ul>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>Added webcam support to Android 4.0 or later platforms to emulate rear-facing cameras when
+    one webcam is present, and to emulate both rear-facing and front-facing cameras when two
+    webcams are present. Webcam support is for Windows and Linux only.
+    Mac support will come in a later release.</li>
+    <li>Changed <code>default.properties</code> to <code>project.properties</code> and
+    <code>build.properties</code> to <code>ant.properties</code>. Any existing
+    projects that you build with Ant must be updated with the <code>android update project</code>
+    command.</li>
+    <li>Changed Ant <code>build.xml</code> file to support improvements to the
+    build system and added and modified Ant commands to support these changes. For a list of Ant
+commands, see the
+<a href="{@docRoot}tools/building/building-cmdline.html#AntReference">Ant Command
+Reference</a>.</li>
+    <li>Changed how library projects are built.</li>
+    <li>Improved incremental builds, so that resource compilation runs less frequently. Builds no
+    longer run when you edit strings or layouts (unless you add a new <code>id</code>) and no longer
+    run once for each library project.</li>
+    <li>Introduced a "PNG crunch cache" that only runs on modified PNG files, instead of
+    crunching all existing PNG files, all the time.</li>
+    <li>Revamped the SDK Manager UI (<a href="http://tools.android.com/recent/newsdkmanager">more
+info</a>).</li>
+  </ul>
+  <p>For a complete overview of the build system changes and what you need to do to support them,
+see the <a href="http://tools.android.com/recent/buildchangesinrevision14">Android Tools Project
+site</a>.</p>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+        width="9px" />
+SDK Tools, Revision 13</a> <em>(September 2011)</em>
+  <div class="toggleme">
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that the SDK Tools r13 is designed for use with
+ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>Fix compilation issue in Ant (<code>dex</code> step) when paths have spaces.</li>
+    <li>Fix issue in emulator installation when paths have spaces.</li>
+    <li>Fix issue when AVD paths have spaces.</li>
+    <li>Fix rendering issue when using emulator scaling (<a href="http://code.google.com/p/android/issues/detail?id=18299">see more</a>).</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 12</a> <em>(July 2011)</em>
+  <div class="toggleme">
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that the SDK Tools r12 is designed for use with
+ADT 12.0.0 and later. If you haven't already, we highly recommend updating your <a
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 12.0.0.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>The AVD manager and emulator can now use system images
+    compiled for ARM v7 and x86 CPUs.</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 11</a> <em>(May 2011)</em>
+  <div class="toggleme">
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that the SDK Tools r11 is designed for use with
+ADT 10.0.1 and later. If you haven't already, we highly recommend updating your <a
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT Plugin</a> to 10.0.1.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>Miscellaneous emulator changes to support Android 3.1.</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+SDK Tools, Revision 10</a> <em>(February 2011)</em>
+  <div class="toggleme">
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that the SDK Tools r10 is
+designed for use with ADT 10.0.0 and later. After installing SDK Tools r10, we
+highly recommend updating your ADT Plugin to 10.0.0.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>The tools now automatically generate Java Programming Language source files (in the
+<code>gen</code> directory) and
+    bytecode (in the <code>res/raw</code> directory) from your native <code>.rs</code> files</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 9</a> <em>(January 2011)</em>
+  <div class="toggleme">
+  <dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that the SDK Tools r9 is
+designed for use with ADT 9.0.0 and later. After installing SDK Tools r9, we
+highly recommend updating your ADT Plugin to 9.0.0.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<dt>Upgrading to SDK Tools r9:</dt>
+<dd>
+<p>If you are upgrading to SDK Tools r9 from SDK Tools r7 or earlier, the default installed location
+for the <code>adb</code> tool has changed from <code>&lt;<em>SDK</em>&gt;/tools/adb</code> to
+<code>&lt;<em>SDK</em>&gt;/platform-tools/adb</code>. This means that you should
+add the new location to your PATH and modify any custom build scripts to
+reference the new location. Copying the <code>adb</code> executable from the new
+location to the old is not recommended, since subsequent updates to the SDK
+Tools will delete the file.</p>
+</dd>
+
+<dt>General notes:</dt>
+<dd>
+  <ul>
+    <li>The default ProGuard configuration, <code>proguard.cfg</code>, now ignores the following classes:
+      <ul>
+        <li>classes that extend {@link android.preference.Preference}</li>
+        <li>classes that extend {@link android.app.backup.BackupAgentHelper}</li>
+      </ul>
+    </li>
+    <li>Ant lib rules now allow you to override <code>java.encoding</code>, <code>java.source</code>,
+    and <code>java.target</code> properties.</li>
+    <li>The default encoding for the <code>javac</code> Ant task is now UTF-8.</li>
+    <li>The LogCat view in DDMS now properly displays UTF-8 characters.</li>
+    <li>The SDK Manager is more reliable on Windows. For details on the improvements, see the
+    <a href="http://tools.android.com/recent/sdkmanagerfixes">Android Tools Project Site</a>. </li>
+    <li>Early look at the new snapshot feature: To improve startup time for the emulator, you can
+enable snapshots for the system state. The emulator will then restore to the state when it last
+closed almost instantly. <strong>Note:</strong> The snapshot feature is still under active
+development and might not always perform as expected.</li>
+    <li>Fixed the missing JAR file error that prevented <code>draw9patch</code> from running.</li>
+    <li>Fixed the Windows launch scripts <code>hierarchyviewer</code> and <code>ddms</code> to support
+    the new location of <code>adb</code>.</li>
+    <li>Known issues with emulator performance: Because the Android emulator must simulate the ARM
+instruction set architecture on your computer, emulator performance is  slow. We're working hard to
+resolve the performance issues and it will improve in future releases.</li>
+  </ul>
+</dd>
+</dl>
+</div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 8</a> <em>(December 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that SDK Tools r8 is
+designed for use with ADT 8.0.0 and later. After installing SDK Tools r8, we
+highly recommend updating your ADT Plugin to 8.0.0.</p>
+
+<p>If you are developing outside Eclipse, you must have <a href="http://ant.apache.org/">Apache
+Ant</a> 1.8 or later.</p>
+
+<p>Also note that SDK Tools r8 requires a new SDK component called
+<em>Platform-tools</em>. The new Platform-tools component lets all SDK platforms
+(Android 2.1, Android 2.2, and so on) use the same (latest) version of build
+tools such as <code>adb</code>, <code>aapt</code>, <code>aidl</code>, and
+<code>dx</code>. To download the Platform-tools component, use the Android SDK
+Manager, as described in <a href="{@docRoot}sdk/exploring.html">Exploring the
+SDK</a></p>
+
+<dt>Upgrading from SDK Tools r7:</dt>
+<dd>
+<p>If you are upgrading to SDK Tools r8 from an earlier version, note that the
+the default installed location for the <code>adb</code> tool has changed from
+<code>&lt;<em>SDK</em>&gt;/tools/adb</code> to
+<code>&lt;<em>SDK</em>&gt;/platform-tools/adb</code>. This means that you should
+add the new location to your PATH and modify any custom build scripts to
+reference the new location. Copying the <code>adb</code> executable from the new
+location to the old is not recommended, since subsequent updates to the SDK
+Tools will delete the file.</p>
+</dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+<li>All SDK platforms now support Library Projects.</li>
+<li>Support for a true debug build. Developers no longer need to add the
+<code>android:debuggable</code> attribute to the
+<code>&lt;application&gt;</code> tag in the manifest &mdash; the build tools add
+the attribute automatically. In Eclipse/ADT, all incremental builds are assumed
+to be debug builds, so the tools insert <code>android:debuggable="true"</code>.
+When exporting a signed release build, the tools do not add the attribute. In
+Ant, a <code>ant debug</code> command automatically inserts the
+<code>android:debuggable="true"</code> attribute, while <code>ant release</code>
+does not. If <code>android:debuggable="true"</code> is manually set, then
+<code>ant release</code> will actually do a debug build, rather than a release
+build.</li>
+<li>Automatic ProGuard support in release builds. Developers generate a ProGuard
+configuration file using the <code>android</code> tool &mdash; the build tools
+then automatically run ProGuard against the project sources during the build.
+For more information, see the <a
+href="{@docRoot}tools/help/proguard.html">ProGuard</a>
+documentation. </li>
+<li>New overridable Ant javac properties: <code>java.encoding</code>,
+<code>java.source</code>, and <code>java.target</code> (default values are
+"ascii", "1.5", and "1.5", respectively).</li>
+<li>New UI for the HierarchyViewer tool.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 7</a> <em>(September 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that SDK Tools r7 is
+designed for use with ADT 0.9.8 and later. After installing SDK Tools r7, we
+highly recommend updating your ADT Plugin to 0.9.8.</p>
+</dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+<li>Added support for library projects that depend on other library projects.</li>
+<li>Adds support for aidl files in library projects.</li>
+<li>Adds support for extension targets in Ant build to perform tasks between the
+normal tasks: <code>-pre-build</code>, <code>-pre-compile</code>, and
+<code>-post-compile</code>.</li>
+<li>Adds support for "headless" SDK update. See <code>android -h update sdk</code>
+for more information.</li>
+<li>Fixes location control in DDMS to work in any locale not using '.' as a
+decimal point.</li>
+</ul>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 6</a> <em>(May 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd>
+<p>If you are developing in Eclipse with ADT, note that SDK Tools r6 is
+designed for use with ADT 0.9.7 and later. After installing SDK Tools r6, we
+highly recommend updating your ADT Plugin to 0.9.7.</p>
+</dd>
+
+<dt>Library projects:</dt>
+<dd>
+<p>The SDK Tools now support the use of <em>library projects</em> during
+development, a capability that lets you store shared Android application
+code and resources in a separate development project. You can then reference the
+library project from other Android projects and, at build time, the tools
+compile the shared code and resources as part of the dependent applications.
+More information about this feature is available in the <a
+href="{@docRoot}tools/projects/index.html#LibraryProjects">Creating and Managing Projects</a> document.</p>
+<p>If you are developing in Eclipse, <a href="eclipse-adt.html">ADT</a>
+provides the equivalent library project support.</p>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 5</a> <em>(March 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd><ul>
+<li>If you are developing in Eclipse with ADT, note that SDK Tools r5 is
+designed for use with ADT 0.9.6 and later. After installing SDK Tools r5, we
+highly recommend updating your ADT Plugin to 0.9.6.</li>
+<li>For Mac OS platforms, OS X 10.4.x (Tiger) is no longer
+officially supported. </li>
+</ul>
+</dd>
+
+<dt>SDK and AVD Manager:</dt>
+<dd>
+<ul>
+<li>Fixes SSL download for the standalone version of the SDK Updater.</li>
+<li>Fixes issue with 64-bit JVM on Windows.</li>
+<li>Adds support for platform samples components.</li>
+<li>Improves support for dependency between components.</li>
+<li>AVDs now sorted by API level.</li>
+<li>The AVD creation dialog now enforces a minimum SD card size of 9MB.</li>
+<li>Prevents deletion of running AVDs.</li>
+<li>Settings are now automatically saved, no need to click "Apply".</li>
+</ul>
+</dd>
+
+<dt>Emulator:</dt>
+<dd>
+<ul>
+<li>Emulator now requires SD card to be 9MB or more.</li>
+</ul>
+</dd>
+
+<dt>Layoutopt:</dt>
+<dd>
+<ul>
+<li>Fixes <code>layoutopt.bat</code> to execute correctly on Windows.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 4</a> <em>(December 2009)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd><p>SDK Tools r4 is compatible with ADT 0.9.5 and later, but not
+compatible with earlier versions. If you are developing in Eclipse with ADT, you
+<strong>must</strong> update your ADT plugin to version 0.9.5 or higher if you
+install SDK Tools r4 in your SDK. </p></dd>
+
+<dt>General notes:</dt>
+<dd>
+<ul>
+<li>Launcher script now forces GDK_NATIVE_WINDOW=true (linux only), to fix a
+compatibility issue between GTK and SWT.</li>
+</ul>
+</dd>
+
+<dt>Android SDK and AVD Manager:</dt>
+<dd>
+<ul>
+<li>AVD Launch dialog now shows scale value.</li>
+<li>Fixes potential NPE in SDK Manager on AVD launch, for older AVD with no
+skin name specified.</li>
+<li>Fixes XML validation issue in on older Java versions.</li>
+<li>No longer forces the use of Java 1.5 on Mac OS X.</li>
+</ul>
+</dd>
+
+<dt>Emulator:</dt>
+<dd>
+<ul>
+<li>No longer limits the size of the system partition.</li>
+</ul>
+</dd>
+
+<dt>Ant build tools:</dt>
+<dd>
+<ul>
+<li>.apk packaging now properly ignores vi swap files as well as hidden files.</li>
+</ul>
+</dd>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+SDK Tools, Revision 3</a> <em>(October 2009)</em>
+  <div class="toggleme">
+
+<dl>
+<dt>Dependencies:</dt>
+<dd><p>SDK Tools r3 is compatible with ADT 0.9.4 and later, but not
+compatible with earlier versions. If you are developing in Eclipse with ADT, you
+<strong>must</strong> update your ADT plugin to version 0.9.4 or higher if you
+install SDK Tools r3 in your SDK.</p>
+</dd>
+
+<dt>Android tool:</dt>
+<dd>
+<ul>
+<li>Adds new <code>android create test-project</code> and <code>android update
+test-project</code> commands to allow for greater flexibility in the location of the
+main and test projects.</li>
+</ul>
+</dd>
+
+<dt>DDMS:</dt>
+<dd>
+<ul>
+<li>Adds a button to dump HPROF file for running applications (app must be able
+to write to the sdcard).</li>
+<li>Button to start/stop profiling of a running application (app must be able to
+write to the sdcard). Upon stop, Traceview will automatically be launched to
+display the trace.</li>
+<li>Fixed DDMS, Traceview, and the AVD Mananger/SDK Updater to run on Mac OS X
+10.6.</li>
+<li>Fixed screenshot support for devices running 32-bit framebuffer.</li>
+</ul>
+</dd>
+
+<dt>Android SDK and AVD Manager:</dt>
+<dd>
+<ul>
+<li>Provides a new UI that lets you set options for controlling
+the emulator skin, screen size/density, and scale factor used when launching
+an AVD.</li>
+<li>Provides improved AVD creation UI, which lets you customize the hardware
+properties of your AVDs.</li>
+<li>Now enforces dependencies between platforms and tools components, and
+between SDK add-ons and platforms.</li>
+</ul>
+</dd>
+
+<dt>Layoutopt, a new tool for optimizing layouts:</dt>
+
+<dd><p>The SDK Tools r3 package includes <code>layoutopt</code>, a new command-line
+tool that helps you optimize your layout hierarchies. When run against your
+layout files, the tool analyzes their hierarchies and notifies you of
+inefficiencies and other potential issues. The tool also provides simple
+solutions for the issues it finds. For usage, see <a
+href="/tools/help/layoutopt.html">layoutopt</a>.</p>
+</dd>
+</dl>
+ </div>
+</div>
diff --git a/docs/html/tools/sdk/usb-drivers.jd b/docs/html/tools/sdk/usb-drivers.jd
new file mode 100644
index 0000000..27e89de
--- /dev/null
+++ b/docs/html/tools/sdk/usb-drivers.jd
@@ -0,0 +1,9 @@
+page.title=Android Development Platforms
+
+@jd:body
+
+
+
+<p>A page that lists platforms and links to release notes. Links to dashboards etc.</p>
+
+
diff --git a/docs/html/tools/sdk/win-usb.jd b/docs/html/tools/sdk/win-usb.jd
new file mode 100644
index 0000000..d322340
--- /dev/null
+++ b/docs/html/tools/sdk/win-usb.jd
@@ -0,0 +1,172 @@
+page.title=Google USB Driver
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#notes">Revisions</a></li>
+    <li><a href="#WinUsbDriver">Downloading the Google USB Driver</a></li>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/extras/oem-usb.html#InstallingDriver">Installing a USB Driver</a></li>
+    <li><a href="{@docRoot}tools/device.html">Using Hardware Devices</a></li>
+    <li><a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a></li>
+  </ol>
+</div>
+</div>
+
+<p>The Google USB driver is a downloadable component for the Android SDK, available
+from the SDK Manager. The driver is for Windows only and provides the necessary drivers for the
+following devices:</p>
+  <ul>
+    <li>ADP1 / T-Mobile G1*</li>
+    <li>ADP2 / Google Ion / T-Mobile myTouch 3G*</li>
+    <li>Verizon Droid*</li>
+    <li>Nexus One</li>
+    <li>Nexus S</li>
+  </ul>
+  <p>* <em>Or similar hardware on other carriers</em></p>
+  
+  <p>All other devices require Windows drivers provided by the hardware manufacturer, as listed in
+the <a href="{@docRoot}tools/extras/oem-usb.html">OEM USB Drivers</a> document. The Galaxy Nexus
+driver is also distributed by <a
+href="http://www.samsung.com/us/support/downloads/verizon-wireless/SCH-I515MSAVZW">Samsung</a>
+(listed as model SCH-I515).</p>
+
+<p class="note"><strong>Note:</strong>
+If you're developing on Mac OS X or Linux, then you do not need to install a USB driver. To start
+developing with your device, also read <a href="{@docRoot}tools/device.html">Using
+Hardware Devices</a>.</p>
+
+<p>The sections below provide instructions on how to download and install the Google USB Driver
+for Windows. </p>
+
+
+
+
+<h2 id="notes">Revisions</h2>
+
+<p>The sections below provide notes about successive revisions of the USB Driver
+for Windows, as denoted by revision number. To determine what revision of the
+USB Driver for Windows you are using, refer to the "Installed Packages" listing
+in the Android SDK Manager.</p>
+
+<script type="text/javascript">
+function toggleDiv(link) {
+  var toggleable = $(link).parent();
+  if (toggleable.hasClass("closed")) {
+    //$(".toggleme", toggleable).slideDown("fast");
+    toggleable.removeClass("closed");
+    toggleable.addClass("open");
+    $(".toggle-img", toggleable).attr("title", "hide").attr("src", (toRoot + "assets/images/triangle-opened.png"));
+  } else {
+    //$(".toggleme", toggleable).slideUp("fast");
+    toggleable.removeClass("open");
+    toggleable.addClass("closed");
+    $(".toggle-img", toggleable).attr("title", "show").attr("src", (toRoot + "assets/images/triangle-closed.png"));
+  }
+  return false;
+}
+</script>
+<style>
+.toggleable {
+padding: .25em 1em;
+}
+.toggleme {
+  padding: 1em 1em 0 2em;
+  line-height:1em;
+}
+.toggleable a {
+  text-decoration:none;
+}
+.toggleme a {
+  text-decoration:underline;
+}
+.toggleable.closed .toggleme {
+  display:none;
+}
+#jd-content .toggle-img {
+  margin:0;
+}
+</style>
+
+<div class="toggleable opened">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-opened.png" class="toggle-img" height="9px"
+width="9px" />
+USB Driver for Windows, Revision 4</a> <em>(December 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt><p>Adds support for the Nexus S.</p></dt>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px"
+width="9px" />
+USB Driver for Windows, Revision 3</a> <em>(January 2010)</em>
+  <div class="toggleme">
+
+<dl>
+<dt><p>Adds support for the Nexus One.</p></dt>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+USB Driver for Windows, Revision 2</a> <em>(November 2009)</em>
+  <div class="toggleme">
+
+<dl>
+<dt><p>Adds support for the Verizon Droid (or similar hardware on
+other carriers).</p></dt>
+</dl>
+ </div>
+</div>
+
+<div class="toggleable closed">
+  <a href="#" onclick="return toggleDiv(this)">
+        <img src="{@docRoot}assets/images/triangle-closed.png" class="toggle-img" height="9px" width="9px" />
+USB Driver for Windows, Revision 1</a> <em>(October 2009)</em>
+  <div class="toggleme">
+
+<dl>
+<dt><p>Initial release of the WinUsb-based driver, with support
+for the T-Mobile G1 and myTouch 3G (and similar devices).</p></dt>
+</dl>
+ </div>
+</div>
+
+
+<h2 id="WinUsbDriver">Downloading the Google USB Driver</h2>
+
+<div class="figure" style="width:536px;margin:0">
+  <img src="{@docRoot}images/developing/sdk-usb-driver.png" alt="" />
+  <p class="img-caption"><strong>Figure 1.</strong> The SDK Manager
+    with the Google USB Driver selected.</p>
+</div>
+
+<p>The USB Driver for Windows is available for download as an optional SDK
+component. You need the driver only if you are developing on Windows and 
+want to connect an Android-powered device (ADP, Nexus One, or Nexus S) to your
+development environment over USB. </p>
+
+<p>To download the driver, use the Android SDK Manager tool that is
+included with the <a href="{@docRoot}sdk/index.html">Android SDK</a>:</p>
+<ol>
+  <li>Launch the Android SDK Manager by double-clicking <code>SDK Manager.exe</code>,
+  at the root of your SDK directory.</li>
+  <li>Expand <em>Extras</em>.</li>
+  <li>Check <strong>Google USB Driver package</strong> and click <strong>Install</strong>.</li>
+  <li>Proceed to install the package. When done, the driver files are
+downloaded into the <code>&lt;sdk&gt;\extras\google\usb_driver\</code> directory.</li>
+</ol>
+
+<p>For installation information, read <a href="{@docRoot}tools/extras/oem-usb.html#InstallingDriver">Installing a USB Driver</a>.</p>
diff --git a/docs/html/tools/testing/activity_test.jd b/docs/html/tools/testing/activity_test.jd
new file mode 100644
index 0000000..8288249
--- /dev/null
+++ b/docs/html/tools/testing/activity_test.jd
@@ -0,0 +1,1334 @@
+page.title=Activity Testing Tutorial
+parent.title=Testing
+parent.link=index.html
+@jd:body
+ <div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li>
+      <a href="#Prerequisites">Prerequisites</a>
+    </li>
+    <li>
+      <a href="#DownloadCode">Installing the Tutorial Sample Code</a>
+    </li>
+    <li>
+        <a href="#SetupEmulator">Setting Up the Emulator</a>
+    </li>
+    <li>
+        <a href="#SetupProjects">Setting Up the Projects</a>
+    </li>
+    <li>
+      <a href="#CreateTestCaseClass">Creating the Test Case Class</a>
+      <ol>
+        <li>
+          <a href="#AddTestCaseClass">Adding the test case class file</a>
+        </li>
+        <li>
+          <a href="#AddConstructor">Adding the test case constructor</a>
+        </li>
+        <li>
+            <a href="#AddSetupMethod">Adding the setup method</a>
+        </li>
+        <li>
+            <a href="#AddPreConditionsTest">Adding an initial conditions test</a>
+        </li>
+        <li>
+            <a href="#AddUITest">Adding a UI test</a>
+        </li>
+        <li>
+            <a href="#StateManagementTests">Adding state management tests</a>
+        </li>
+      </ol>
+    </li>
+    <li>
+        <a href="#RunTests">Running the Tests and Seeing the Results</a>
+    </li>
+    <li>
+        <a href="#TestFailure">Forcing Some Tests to Fail</a>
+    </li>
+    <li>
+        <a href="#NextSteps">Next Steps</a>
+    </li>
+</ol>
+<h2 id="#Appendix">Appendix</h2>
+<ol>
+    <li>
+        <a href="#InstallCompletedTestApp">Installing the Completed Test Application File</a>
+    </li>
+    <li>
+        <a href="#EditorCommandLine">For Users Not Developing In Eclipse</a>
+    </li>
+</ol>
+<h2>See Also</h2>
+<ol>
+    <li>
+        <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>
+    </li>
+    <li>
+        {@link android.test.ActivityInstrumentationTestCase2}
+    </li>
+    <li>
+        {@link junit.framework.Assert}
+    </li>
+    <li>
+        {@link android.test.InstrumentationTestRunner}
+    </li>
+</ol>
+</div>
+</div>
+<p>
+  Android includes powerful tools for testing applications. The tools extend JUnit with additional features, provide convenience classes for mock Android system objects, and use
+  instrumentation to give you control over your main application while you are testing it. The entire Android testing environment is discussed in the document
+  <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>.
+</p>
+<p>
+  This tutorial demonstrates the Android testing tools by presenting a simple Android application and then leading you step-by-step through the creation of a test application for it.
+  The test application demonstrates these key points:
+</p>
+  <ul>
+    <li>
+      An Android test is itself an Android application that is linked to the application under test by entries in its <code>AndroidManifest.xml</code> file.
+    </li>
+    <li>
+      Instead of Android components, an Android test application contains one or more test cases. Each of these is a separate class definition.
+    </li>
+    <li>
+      Android test case classes extend the JUnit {@link junit.framework.TestCase} class.
+    </li>
+    <li>
+      Android test case classes for activities extend JUnit and also connect you to the application under test with instrumentation. You can send keystroke or touch events directly to the UI.
+    </li>
+    <li>
+      You choose an Android test case class based on the type of component (application, activity, content provider, or service) you are testing.
+    </li>
+    <li>
+      Additional test tools in Eclipse/ADT provide integrated support for creating test applications, running them, and viewing the results.
+    </li>
+  </ul>
+<p>
+  The test application contains methods that perform the following tests:
+</p>
+  <ul>
+    <li>
+      Initial conditions test. Tests that the application under test initializes correctly. This is also a unit test of the application's
+      {@link android.app.Activity#onCreate(android.os.Bundle) onCreate()} method. Testing initial conditions also provides a confidence measure for subsequent tests.
+    </li>
+    <li>
+      UI test. Tests that the main UI operation works correctly. This test demonstrates the instrumentation features available in activity testing.
+      It shows that you can automate UI tests by sending key events from the test application to the main application.
+    </li>
+    <li>
+      State management tests. Test the application's code for saving state. This test demonstrates the instrumentation features of the test runner, which
+      are available for testing any component.
+    </li>
+  </ul>
+<h2 id="Prerequisites">Prerequisites</h2>
+<p>
+  The instructions and code in this tutorial depend on the following:
+</p>
+  <ul>
+    <li>
+      Basic knowledge of Android programming. If you haven't yet written an Android application, 
+      do the class 
+      <a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>. 
+      If you want to learn more about Spinner, the application under test, then you 
+      might want to review the "Spinner" sample app.
+    </li>
+    <li>
+      Some familiarity with the Android testing framework and concepts. If you haven't explored
+      Android testing yet, start by reading the
+      <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>
+      guide.
+    </li>
+    <li>
+        Eclipse with ADT. This tutorial describes how to set up and run a test application using
+        Eclipse with ADT. If you haven't yet installed Eclipse and the ADT plugin,
+        follow the steps in <a href="{@docRoot}sdk/installing/index.html">Installing the SDK</a>
+        to install them before continuing. If you are not developing in Eclipse, you will
+        find instructions for setting up and running the test application in the
+        <a href="#EditorCommandLine">appendix</a> of this document.
+    </li>
+    <li>
+        Android 1.5 platform (API Level 3) or higher. You must have the Android 1.5 platform
+        (API Level 3) or higher installed in your SDK, because this tutorial uses APIs that
+        were introduced in that version.
+        <p>
+            If you are not sure which platforms are installed in your SDK,
+            open the Android SDK and AVD Manager and check in the
+            <strong>Installed Packages</strong> panel.
+            If aren't sure how to download a platform into your SDK,
+            read <a href="{@docRoot}sdk/exploring.html">Exploring the SDK</a>.
+        </p>
+    </li>
+  </ul>
+<h2 id="DownloadCode">Installing the Tutorial Sample Code</h2>
+<p>
+    During this tutorial, you will be working with sample code that is provided as part
+    of the downloadable Samples component of the SDK. Specifically, you will be working
+    with a pair of related sample applications &mdash; an application under test and a test
+    application:
+</p>
+    <ul>
+        <li>
+            Spinner is the application under test. This tutorial focuses on the
+            common situation of writing tests for an application that already exists, so the main
+            application is provided to you.
+        </li>
+        <li>
+             SpinnerTest is the test application. In the tutorial, you create this application
+             step-by-step. If you want to run quickly through the tutorial,
+             you can install the completed SpinnerTest application first, and then follow the
+             text. You may get more from the tutorial, however, if you create the test application
+             as you go. The instructions for installing the completed test application are in the
+             section 
+             <a href="#InstallCompletedTestApp">Installing the Completed Test Application File</a>.
+        </li>
+    </ul>
+<p>
+    The sample applications are described in more detail in the 
+    <a href="{@docRoot}tools/samples/index.html">Samples</a> topic. Follow the instructions to
+    download the version of the samples that's appropriate for the platform you're working with.
+</p>
+<h2 id="SetupEmulator">Setting Up the Emulator</h2>
+<p>
+  In this tutorial, you will use the Android emulator to run applications. The emulator needs
+  an Android Virtual Device (AVD) with an API level equal to or higher than the one you set for the projects in the previous step.
+  To find out how to check this and create the right AVD if necessary, 
+  see <a href="{@docRoot}tools/devices/managing-avds.html">Creating an AVD</a>.
+</p>
+<p>
+    As a test of the AVD and emulator, run the SpinnerActivity application in Eclipse with ADT. When it starts,
+    click the large downward-pointing arrow to the right of the spinner text. You see the spinner expand and display the title &quot;Select a planet&quot; at the top.
+    Click one of the other planets. The spinner closes, and your selection appears below it on the screen.
+</p>
+<h2 id="SetupProjects">Setting Up the Projects</h2>
+<p>
+    When you are ready to get started with the tutorial, begin by setting up Eclipse projects for
+    both Spinner (the application under test) and SpinnerTest (the test application).
+</p>
+<p>
+    You'll be using the Spinner application as-is, without modification, so you'll be loading it
+    into Eclipse as a new Android project from existing source. In the process, you'll be
+    creating a new test project associated with Spinner that will contain the SpinnerTest
+    application. The SpinnerTest application will be completely new and you'll be
+    using the code examples in this tutorial to add test classes and tests to it.
+</p>
+<p>
+    To install the Spinner app in a new Android project from existing source, following these steps:
+</p>
+<ol>
+    <li>
+        In Eclipse, select <strong>File</strong>&nbsp;&gt;&nbsp;<strong>New</strong>&nbsp;&gt;&nbsp;<strong>Project</strong>&nbsp;&gt;&nbsp;<strong>Android</strong>&nbsp;&gt;&nbsp;<strong>Android Project</strong>,
+        then click Next. The <strong>New Android Project</strong> dialog appears.
+    </li>
+    <li>
+        In the <em>Project name</em> text box, enter &quot;SpinnerActivity&quot;. The <em>Properties</em> area is filled in automatically.
+    </li>
+    <li>
+        In the <em>Contents</em> area, set &quot;Create project from existing source&quot;.
+    </li>
+    <li>
+        For <em>Location</em>, click <strong>Browse</strong>, navigate to the directory <code>&lt;SDK_path&gt;/samples/android-8/Spinner</code>,
+        then click Open. The directory name <code>&lt;SDK_path&gt;/samples/android-8/Spinner</code> now appears in the <em>Location</em> text box.
+    </li>
+    <li>
+        In the <em>Build Target</em> area, set a API level of 3 or higher. If you are already developing with a particular target, and it is API level 3 or higher, then use that target.
+    </li>
+    <li>
+        In the <em>Properties</em> area, in the <em>Min SDK Version:</em>, enter &quot;3&quot;.
+    </li>
+    <li>
+        You should now see these values:
+        <ul>
+            <li><em>Project Name:</em> &quot;SpinnerActivity&quot;</li>
+            <li><em>Create project from existing source:</em> set</li>
+            <li><em>Location:</em> &quot;<code>&lt;SDK_path&gt;/samples/android-8/Spinner</code>&quot;</li>
+            <li><em>Build Target:</em> &quot;API level of 3 or higher&quot; (<em>Target Name</em> &quot;Android 1.5 or higher&quot;)</li>
+            <li><em>Package name:</em> (disabled, set to &quot;<code>com.android.example.spinner</code>&quot;)</li>
+            <li><em>Create Activity:</em> (disabled, set to &quot;.SpinnerActivity&quot;)</li>
+            <li><em>Min SDK Version:</em> &quot;3&quot;</li>
+        </ul>
+        <p>
+            The following screenshot summarizes these values:
+        </p>
+            <a href="{@docRoot}images/testing/eclipse_new_android_project_complete_callouts.png">
+                <img src="{@docRoot}images/testing/eclipse_new_android_project_complete_callouts.png" alt="New Android Project dialog with filled-in values" style="height:230px"/>
+            </a>
+
+    </li>
+</ol>
+<p>
+    To create a new test project for the SpinnerTest application, follow these steps:
+</p>
+<ol>
+    <li>
+        Click Next. The <strong>New Android Test Project</strong> dialog appears.
+    </li>
+    <li>
+        Set &quot;Create a Test Project&quot;.
+    </li>
+    <li>
+        Leave the other values unchanged. The result should be:
+        <ul>
+            <li><em>Create a Test Project:</em> checked</li>
+            <li><em>Test Project Name:</em> &quot;SpinnerActivityTest&quot;</li>
+            <li><em>Use default location:</em> checked (this should contain the directory name &quot;<code>workspace/SpinnerActivityTest</code>&quot;).</li>
+            <li><em>Build Target:</em> Use the same API level you used in the previous step.</li>
+            <li><em>Application name:</em> &quot;SpinnerActivityTest&quot;</li>
+            <li><em>Package name:</em> &quot;<code>com.android.example.spinner.test</code>&quot;</li>
+            <li><em>Min SDK Version:</em> &quot;3&quot;</li>
+        </ul>
+        <p>
+            The following screenshot summarizes these values:
+        </p>
+            <a href="{@docRoot}images/testing/eclipse_new_android_testproject_complete_callouts.png">
+            <img src="{@docRoot}images/testing/eclipse_new_android_testproject_complete_callouts.png" alt="New Android Test Project dialog with filled-in values" style="height:230px"/>
+            </a>
+    </li>
+    <li>
+        Click Finish. Entries for SpinnerActivity and SpinnerActivityTest should appear in the
+        <strong>Package Explorer</strong>.
+        <p class="note">
+            <strong>Note:</strong> If you set <em>Build Target</em> to an API level higher than &quot;3&quot;, you will see the warning
+            &quot;The API level for the selected SDK target does not match the Min SDK version&quot;. You do not need to change the API level or the Min SDK version.
+            The message tells you that you are building the projects with one particular API level, but specifying that a lower API level is required. This may
+            occur if you have chosen not to install the optional earlier API levels.
+        </p>
+        <p>
+            If you see errors listed in the <strong>Problems</strong> pane at the bottom of the Eclipse window, or if a red error marker appears next to
+            the entry for SpinnerActivity in the Package Explorer, highlight the SpinnerActivity entry and then select
+            <strong>Project</strong>&nbsp;&gt;&nbsp;<strong>Clean</strong>. This should fix any errors.
+        </p>
+    </li>
+</ol>
+<p>
+    You now have the application under test in the SpinnerActivity project,
+    and an empty test project in SpinnerActivityTest. You may
+    notice that the two projects are in different directories, but Eclipse with
+    ADT handles this automatically. You should have no problem in either building or running them.
+</p>
+<p>
+    Notice that Eclipse and ADT have already done some initial setup for your test application.
+    Expand the SpinnerActivityTest project, and notice that it already has an
+    Android manifest file <code>AndroidManifest.xml</code>.
+    Eclipse with ADT created this when you added the test project.
+    Also, the test application is already set up to use instrumentation. You can see this
+    by examining <code>AndroidManifest.xml</code>.
+    Open it, then at the bottom of the center pane click <strong>AndroidManifest.xml</strong>
+    to display the XML contents:
+</p>
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.android.example.spinner.test"
+      android:versionCode="1"
+      android:versionName="1.0"&gt;
+    &lt;uses-sdk android:minSdkVersion="3" /&gt;
+    &lt;instrumentation
+        android:targetPackage="com.android.example.spinner"
+        android:name="android.test.InstrumentationTestRunner" /&gt;
+    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
+        &lt;uses-library android:name="android.test.runner" /&gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+<p>
+    Notice the <code>&lt;instrumentation&gt;</code> element. The attribute
+    <code>android:targetPackage="com.android.example.spinner"</code> tells Android that the
+    application under test is defined in the Android package
+    <code>com.android.example.spinner</code>. Android now knows to use that
+    package's <code>AndroidManifest.xml</code> file to launch the application under test.
+    The <code>&lt;instrumentation&gt;</code> element also contains the attribute
+    <code>android:name="android.test.InstrumentationTestRunner"</code>, which tells Android
+    instrumentation to run the test application with Android's instrumentation-enabled test runner.
+</p>
+<h2 id="CreateTestCaseClass">Creating the Test Case Class</h2>
+
+<p>
+    You now have a test project SpinnerActivityTest, and the basic structure of a test
+    application also called SpinnerActivityTest. The basic structure includes all the files and
+    directories you need to build and run a test application, except for the class that
+    contains your tests (the test case class).
+</p>
+<p>
+    The next step is to define the test case class. In this tutorial, you'll be creating a
+    test case class that includes:
+</p>
+<ul>
+    <li>
+        Test setup. This use of the JUnit {@link junit.framework.TestCase#setUp() setUp()}
+        method demonstrates some of the tasks you might perform before running an Android test.
+    </li>
+    <li>
+        Testing initial conditions. This test demonstrates a good testing technique.
+        It also demonstrates that with Android instrumentation you can look at the application
+        under test <em>before</em> the main activity starts. The test checks that the application's
+        important objects have been initialized.
+        If the test fails, you then know that any other tests against the application are
+        unreliable, since the application was running in an incorrect state.
+        <p class="note">
+            <strong>Note:</strong> The purpose of testing initial conditions is not the same as
+            using <code>setUp()</code>. The JUnit {@link junit.framework.TestCase#setUp()} runs once
+            before <strong>each test method</strong>, and its purpose is to create a clean test
+            environment. The initial conditions test runs once, and its purpose is to verify that the
+            application under test is ready to be tested.
+        </p>
+    </li>
+    <li>
+        Testing the UI. This test shows how to control the main application's UI
+        with instrumentation, a powerful automation feature of Android testing.
+    </li>
+    <li>
+        Testing state management. This test shows some techniques for testing how
+        well the application maintains state in the Android environment. Remember that to
+        provide a satisfactory user experience, your application must never lose its current state,
+        even if it's interrupted by a phone call or destroyed because of memory constraints.
+        The Android activity lifecycle provides ways to maintain state, and the
+        <code>SpinnerActivity</code> application uses them. The test shows the techniques for
+        verifying that they work.
+    </li>
+</ul>
+<p>
+  Android tests are contained in a special type of Android application that contains one or more test class definitions. Each of these contains
+  one or more test methods that do the actual tests. In this tutorial, you will first add a test case class, and then add tests to it.
+</p>
+<p>
+ You first choose an Android test case class to extend. You choose from the base test case classes according to the Android component you are testing and the types of tests you are doing.
+ In this tutorial, the application under test has a single simple activity, so the test case class will be for an Activity component. Android offers several, but the one that tests in
+ the most realistic environment is {@link android.test.ActivityInstrumentationTestCase2}, so you will use it as the base class. Like all activity test case classes,
+ <code>ActivityInstrumentationTestCase2</code> offers convenience methods for interacting directly with the UI of the application under test.
+</p>
+<h3 id="AddTestCaseClass">Adding the test case class file</h3>
+<p>
+    To add <code>ActivityInstrumentationTestCase2</code> as the base test case class, follow these steps:
+</p>
+<ol>
+  <li>
+    In the Package Explorer, expand the test project SpinnerActivityTest if it is not open already.
+  </li>
+  <li>
+    Within SpinnerActivityTest, expand the <code>src/</code> folder and then the package marker for
+    <code>com.android.example.spinner.test</code>. Right-click on the package name and select <strong>New</strong> &gt; <strong>Class</strong>:<br/>
+    <a href="{@docRoot}images/testing/spinner_create_test_class_callouts.png">
+      <img alt="Menu for creating a new class in the test application" src="{@docRoot}images/testing/spinner_create_test_class_callouts.png" style="height:230px"/>
+    </a>
+    <p>
+      The <strong>New Java Class</strong> wizard appears:
+    </p>
+    <a href="{@docRoot}images/testing/spinnertest_new_class_callouts.png">
+      <img alt="New Java Class wizard dialog" src="{@docRoot}images/testing/spinnertest_new_class_callouts.png" style="height:230px"/>
+    </a>
+  </li>
+  <li>
+    In the wizard, enter the following:
+    <ul>
+      <li>
+        <em>Name:</em> &quot;SpinnerActivityTest&quot;. This becomes the name of your test class.
+      </li>
+      <li>
+        <em>Superclass:</em> &quot;<code>android.test.ActivityInstrumentationTestCase2&lt;SpinnerActivity&gt;</code>&quot;. The superclass is parameterized, so
+        you have to provide it your main application's class name.
+      </li>
+    </ul>
+    <p>
+      Do not change any of the other settings. Click Finish.
+    </p>
+  </li>
+  <li>
+    You now have a new file <code>SpinnerActivityTest.java</code> in the project.
+  </li>
+  <li>
+    To resolve the reference to SpinnerActivity, add the following import:
+<pre>
+import com.android.example.spinner.SpinnerActivity;
+</pre>
+  </li>
+</ol>
+<h3 id="AddConstructor">Adding the test case constructor</h3>
+  <p>
+    To ensure that the test application is instantiated correctly, you must set up a constructor that the test
+    runner will call when it instantiates your test class. This constructor has no parameters, and its sole
+    purpose is to pass information to the superclass's default constructor. To set up this constructor, enter the
+    following code in the class:
+  </p>
+<pre>
+  public SpinnerActivityTest() {
+    super("com.android.example.spinner", SpinnerActivity.class);
+  } // end of SpinnerActivityTest constructor definition
+</pre>
+<p>
+  This calls the superclass constructor with the Android package name (<code>com.android.example.spinner</code>)and main activity's class
+  (<code>SpinnerActivity.class</code>) for the application under test. Android uses this information to find the application and activity to test.
+</p>
+<p>
+  You are now ready to add tests, by adding test methods to the class.
+</p>
+<h3 id="AddSetupMethod">Adding the setup method</h3>
+<p>
+    The <code>setUp()</code> method is invoked before every test. You use it to initialize variables and clean up from previous tests. You can also use
+    the JUnit {@link junit.framework.TestCase#tearDown() tearDown()} method, which runs <strong>after</strong> every test method. The tutorial does not use it.
+</p>
+<p>
+    The method you are going to add does the following:
+</p>
+<ul>
+  <li>
+    <code>super.setUp()</code>. Invokes the superclass constructor for <code>setUp()</code>, which is required by JUnit.
+  </li>
+  <li>
+    Calls {@link android.test.ActivityInstrumentationTestCase2#setActivityInitialTouchMode(boolean) setActivityInitialTouchMode(false)}.
+    This turns off <strong>touch mode</strong> in the device or emulator. If any of your test methods send key events to the application,
+    you must turn off touch mode <em>before</em> you start any activities; otherwise, the call is ignored.
+  </li>
+  <li>
+    Stores references to system objects. Retrieves and stores a reference to the activity under test, the <code>Spinner</code>
+    widget used by the activity, the <code>SpinnerAdapter</code> that backs the widget, and the string value of the selection that is
+    set when the application is first installed. These objects are used in the state management test. The methods invoked are:
+    <ul>
+      <li>
+        {@link android.test.ActivityInstrumentationTestCase2#getActivity()}. Gets a reference to the activity under test (<code>SpinnerActivity</code>).
+        This call also starts the activity if it is not already running.
+      </li>
+      <li>
+        {@link android.app.Activity#findViewById(int)}. Gets a reference to the <code>Spinner</code> widget of the application under test.
+      </li>
+      <li>
+        {@link android.widget.AbsSpinner#getAdapter()}. Gets a reference to the adapter (an array of strings) backing the spinner.
+      </li>
+    </ul>
+  </li>
+</ul>
+<p>
+    Add this code to the definition of <code>SpinnerActivityTest</code>, after the constructor definition:
+</p>
+<pre>
+  &#64;Override
+  protected void setUp() throws Exception {
+    super.setUp();
+
+    setActivityInitialTouchMode(false);
+
+    mActivity = getActivity();
+
+    mSpinner =
+      (Spinner) mActivity.findViewById(
+        com.android.example.spinner.R.id.Spinner01
+      );
+
+      mPlanetData = mSpinner.getAdapter();
+
+  } // end of setUp() method definition
+</pre>
+<p>
+    Add these members to the test case class:
+</p>
+<pre>
+  private SpinnerActivity mActivity;
+  private Spinner mSpinner;
+  private SpinnerAdapter mPlanetData;
+</pre>
+<p>
+  Add these imports:
+</p>
+<pre>
+import android.widget.Spinner;
+import android.widget.SpinnerAdapter;
+</pre>
+<p>
+    You now have the the complete <code>setUp()</code> method.
+</p>
+<h3 id="AddPreConditionsTest">Adding an initial conditions test</h3>
+<p>
+  The initial conditions test verifies that the application under test is initialized correctly. It is an illustration of the types of tests you can run, so it is not comprehensive.
+  It verifies the following:
+</p>
+<ul>
+  <li>
+    The item select listener is initialized. This listener is called when a selection is made from the spinner.
+  </li>
+  <li>
+    The adapter that provides values to the spinner is initialized.
+  </li>
+  <li>
+    The adapter contains the right number of entries.
+  </li>
+</ul>
+<p>
+  The actual initialization of the application under test is done in <code>setUp()</code>, which the test runner calls automatically before every test. The verifications are
+  done with JUnit {@link junit.framework.Assert} calls. As a useful convention, the method name is <code>testPreConditions()</code>:
+</p>
+<pre>
+  public void testPreConditions() {
+    assertTrue(mSpinner.getOnItemSelectedListener() != null);
+    assertTrue(mPlanetData != null);
+    assertEquals(mPlanetData.getCount(),ADAPTER_COUNT);
+  } // end of testPreConditions() method definition
+</pre>
+<p>
+  Add this member:
+</p>
+<pre>
+  public static final int ADAPTER_COUNT = 9;
+</pre>
+<h3 id="AddUITest">Adding a UI test</h3>
+<p>
+  Now create a UI test that selects an item from the <code>Spinner</code> widget. The test sends key events to the UI with key events.
+  The test confirms that the selection matches the result you expect.
+</p>
+<p>
+  This test demonstrates the power of using instrumentation in Android testing. Only an instrumentation-based test class allows you to send key events (or touch events)
+  to the application under test. With instrumentation, you can test your UI without having to take screenshots, record the screen, or do human-controlled testing.
+</p>
+<p>
+  To work with the spinner, the test has to request focus for it and then set it to a known position. The test uses {@link android.view.View#requestFocus() requestFocus()} and
+  {@link android.widget.AbsSpinner#setSelection(int) setSelection()} to do this. Both of these methods interact with a View in the application under test, so you have to call them
+  in a special way.
+</p>
+<p>
+  Code in a test application that interacts with a View of the application under test must run in the main application's thread, also
+  known as the <em>UI thread</em>. To do this, you use the {@link android.app.Activity#runOnUiThread(java.lang.Runnable) Activity.runOnUiThread()}
+  method. You pass the code to <code>runOnUiThread()</code>in an anonymous {@link java.lang.Runnable Runnable} object. To set
+  the statements in the <code>Runnable</code> object, you override the object's {@link java.lang.Runnable#run()} method.
+</p>
+<p>
+  To send key events to the UI of the application under test, you use the <a href="{@docRoot}reference/android/test/InstrumentationTestCase.html#sendKeys(int...)">sendKeys</a>() method.
+  This method does not have to run on the UI thread, since Android uses instrumentation to pass the key events to the application under test.
+</p>
+<p>
+  The last part of the test compares the selection made by sending the key events to a pre-determined value. This tests that the spinner is working as intended.
+</p>
+<p>
+    The following sections show you how to add the code for this test.
+</p>
+<ol>
+    <li>
+        Get focus and set selection. Create a new method <code>public void testSpinnerUI()</code>. Add
+        code to to request focus for the spinner and set its position to default or initial position, "Earth". This code is run on the UI thread of
+        the application under test:
+<pre>
+  public void testSpinnerUI() {
+
+    mActivity.runOnUiThread(
+      new Runnable() {
+        public void run() {
+          mSpinner.requestFocus();
+          mSpinner.setSelection(INITIAL_POSITION);
+        } // end of run() method definition
+      } // end of anonymous Runnable object instantiation
+    ); // end of invocation of runOnUiThread
+</pre>
+        <p>
+          Add the following member to the test case class.
+        </p>
+<pre>
+  public static final int INITIAL_POSITION = 0;
+</pre>
+    </li>
+    <li>
+      Make a selection. Send key events to the spinner to select one of the items. To do this, open the spinner by
+      "clicking" the center keypad button (sending a DPAD_CENTER key event) and then clicking (sending) the down arrow keypad button five times. Finally,
+      click the center keypad button again to highlight the desired item. Add the following code:
+<pre>
+    this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
+    for (int i = 1; i &lt;= TEST_POSITION; i++) {
+      this.sendKeys(KeyEvent.KEYCODE_DPAD_DOWN);
+    } // end of for loop
+
+    this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
+</pre>
+    <p>
+      Add the following member to the test case class:
+    </p>
+<pre>
+  public static final int TEST_POSITION = 5;
+</pre>
+    <p>
+      This sets the final position of the spinner to "Saturn" (the spinner's backing adapter is 0-based).
+    </p>
+  </li>
+  <li>
+    Check the result. Query the current state of the spinner, and compare its current selection to the expected value.
+    Call the method {@link android.widget.AdapterView#getSelectedItemPosition() getSelectedItemPosition()} to find out the current selection position, and then
+    {@link android.widget.AdapterView#getItemAtPosition(int) getItemAtPosition()} to get the object corresponding to that position (casting it to a String). Assert that
+    this string value matches the expected value of "Saturn":
+<pre>
+    mPos = mSpinner.getSelectedItemPosition();
+    mSelection = (String)mSpinner.getItemAtPosition(mPos);
+    TextView resultView =
+      (TextView) mActivity.findViewById(
+        com.android.example.spinner.R.id.SpinnerResult
+      );
+
+    String resultText = (String) resultView.getText();
+
+    assertEquals(resultText,mSelection);
+
+  } // end of testSpinnerUI() method definition
+</pre>
+<p>
+  Add the following members to the test case class:
+</p>
+<pre>
+  private String mSelection;
+  private int mPos;
+</pre>
+  <p>
+    Add the following imports to the test case class:
+  </p>
+<pre>
+  import android.view.KeyEvent;
+  import android.widget.TextView;
+</pre>
+  </li>
+</ol>
+<p>
+  Pause here to run the tests you have. The procedure for running a test application is different
+  from running a regular Android application. You run a test application as an Android JUnit
+  application. To see how to do this, see <a href="#RunTests">Running the Tests and Seeing the Results</a>.
+</p>
+<p>
+    Eventually, you will see the <code>SpinnerActivity</code> application start, and the test
+    application controlling it by sending it key events. You will also see a new
+    <strong>JUnit</strong> view in the Explorer pane, showing the results of the
+    test. The JUnit view is documented in a following section,
+    <a href="#RunTests">Running the Test and Seeing the Results</a>.
+</p>
+<h3 id="StateManagementTests">Adding state management tests</h3>
+<p>
+  You now write two tests that verify that SpinnerActivity maintains its state when it is paused or terminated.
+  The state, in this case, is the current selection in the spinner. When users make a selection,
+  pause or terminate the application, and then resume or restart it, they should see
+  the same selection.
+</p>
+<p>
+  Maintaining state is an important feature of an application. Users may switch from the current
+  application temporarily to answer the phone, and then switch back. Android may decide to
+  terminate and restart an activity to change the screen orientation, or terminate an unused
+  activity to regain storage. In each case, users are best served by having the UI return to its
+  previous state (except where the logic of the application dictates otherwise).
+</p>
+<p>
+  SpinnerActivity manages its state in these ways:
+</p>
+  <ul>
+    <li>
+      Activity is hidden. When the spinner screen (the activity) is running but hidden by some other screen, it
+      stores the spinner's position and value in a form that persists while the application is running.
+    </li>
+    <li>
+      Application is terminated. When the activity is terminated, it stores the spinner's position and value in
+      a permanent form. The activity can read the position and value when it restarts, and restore the spinner to its previous state.
+    </li>
+    <li>
+      Activity re-appears. When the user returns to the spinner screen, the previous selection is restored.
+    </li>
+    <li>
+      Application is restarted. When the user starts the application again, the previous selection is restored.
+    </li>
+  </ul>
+<p class="note">
+    <strong>Note:</strong> An application can manage its state in other ways as well, but these are
+    not covered in this tutorial.
+</p>
+<p>
+  When an activity is hidden, it is <strong>paused</strong>. When it re-appears, it
+  <strong>resumes</strong>. Recognizing that these are key points in an activity's life cycle,
+  the Activity class provides two callback methods {@link android.app.Activity#onPause()} and
+  {@link android.app.Activity#onResume()} for handling pauses and resumes.
+  SpinnerActivity uses them for code that saves and restores state.
+</p>
+<p>
+  <strong>Note:</strong> If you would like to learn more about the difference between losing
+  focus/pausing and killing an application,
+  read about the <a href="{@docRoot}guide/components/activities.html#Lifecycle">activity
+lifecycle</a>.
+</p>
+<p>
+  The first test verifies that the spinner selection is maintained after the entire application is shut down and then restarted. The test uses instrumentation to
+  set the spinner's variables outside of the UI. It then terminates the activity by calling {@link android.app.Activity#finish() Activity.finish()}, and restarts it
+  using the instrumentation method {@link android.test.ActivityInstrumentationTestCase2#getActivity()}. The test then asserts that the current spinner state matches
+  the test values.
+</p>
+<p>
+  The second test verifies that the spinner selection is maintained after the activity is paused and then resumed. The test uses instrumentation to
+  set the spinner's variables outside of the UI and then force calls to the <code>onPause()</code> and <code>onResume()</code> methods. The test then
+  asserts that the current spinner state matches the test values.
+</p>
+<p>
+  Notice that these tests make limited assumptions about the mechanism by which the activity manages state. The tests use the activity's getters and
+  setters to control the spinner. The first test also knows that hiding an activity calls <code>onPause()</code>, and bringing it back to the foreground
+  calls <code>onResume()</code>. Other than this, the tests treat the activity as a "black box".
+</p>
+<p>
+    To add the code for testing state management across shutdown and restart, follow these steps:
+</p>
+ <ol>
+    <li>
+      Add the test method <code>testStateDestroy()</code>, then
+      set the spinner selection to a test value:
+<pre>
+  public void testStateDestroy() {
+    mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);
+    mActivity.setSpinnerSelection(TEST_STATE_DESTROY_SELECTION);
+</pre>
+    </li>
+    <li>
+      Terminate the activity and restart it:
+<pre>
+    mActivity.finish();
+    mActivity = this.getActivity();
+</pre>
+    </li>
+    <li>
+      Get the current spinner settings from the activity:
+<pre>
+    int currentPosition = mActivity.getSpinnerPosition();
+    String currentSelection = mActivity.getSpinnerSelection();
+</pre>
+    </li>
+    <li>
+      Test the current settings against the test values:
+<pre>
+    assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
+    assertEquals(TEST_STATE_DESTROY_SELECTION, currentSelection);
+  } // end of testStateDestroy() method definition
+</pre>
+<p>
+  Add the following members to the test case class:
+<pre>
+  public static final int TEST_STATE_DESTROY_POSITION = 2;
+  public static final String TEST_STATE_DESTROY_SELECTION = "Earth";
+</pre>
+    </li>
+ </ol>
+<p>
+    To add the code for testing state management across a pause and resume, follow these steps:
+</p>
+<ol>
+    <li>
+      Add the test method <code>testStatePause()</code>:
+<pre>
+    &#64;UiThreadTest
+    public void testStatePause() {
+</pre>
+    <p>
+      The <code>@UiThreadTest</code> annotation tells Android to build this method so that it runs
+      on the UI thread. This allows the method to change the state of the spinner widget in the
+      application under test. This use of <code>@UiThreadTest</code> shows that, if necessary, you
+      can run an entire method on the UI thread.
+    </p>
+    </li>
+   <li>
+    Set up instrumentation. Get the instrumentation object
+    that is controlling the application under test. This is used later to
+    invoke the <code>onPause()</code> and <code>onResume()</code> methods:
+<pre>
+    Instrumentation mInstr = this.getInstrumentation();
+</pre>
+  </li>
+  <li>
+    Set the spinner selection to a test value:
+<pre>
+    mActivity.setSpinnerPosition(TEST_STATE_PAUSE_POSITION);
+    mActivity.setSpinnerSelection(TEST_STATE_PAUSE_SELECTION);
+</pre>
+  </li>
+  <li>
+    Use instrumentation to call the Activity's <code>onPause()</code>:
+<pre>
+    mInstr.callActivityOnPause(mActivity);
+</pre>
+    <p>
+      Under test, the activity is waiting for input. The invocation of
+      {@link android.app.Instrumentation#callActivityOnPause(android.app.Activity)}
+      performs a call directly to the activity's <code>onPause()</code> instead
+      of manipulating the activity's UI to force it into a paused state.
+    </p>
+  </li>
+  <li>
+    Force the spinner to a different selection:
+<pre>
+    mActivity.setSpinnerPosition(0);
+    mActivity.setSpinnerSelection("");
+</pre>
+    <p>
+      This ensures that resuming the activity actually restores the
+      spinner's state rather than simply leaving it as it was.
+    </p>
+  </li>
+  <li>
+    Use instrumentation to call the Activity's <code>onResume()</code>:
+<pre>
+    mInstr.callActivityOnResume(mActivity);
+</pre>
+    <p>
+      Invoking {@link android.app.Instrumentation#callActivityOnResume(android.app.Activity)}
+      affects the activity in a way similar to <code>callActivityOnPause</code>. The
+      activity's <code>onResume()</code> method is invoked instead of manipulating the
+      activity's UI to force it to resume.
+    </p>
+  </li>
+  <li>
+    Get the current state of the spinner:
+<pre>
+    int currentPosition = mActivity.getSpinnerPosition();
+    String currentSelection = mActivity.getSpinnerSelection();
+</pre>
+  </li>
+  <li>
+    Test the current spinner state against the test values:
+<pre>
+    assertEquals(TEST_STATE_PAUSE_POSITION,currentPosition);
+    assertEquals(TEST_STATE_PAUSE_SELECTION,currentSelection);
+  } // end of testStatePause() method definition
+</pre>
+    <p>
+      Add the following members to the test case class:
+    </p>
+<pre>
+  public static final int TEST_STATE_PAUSE_POSITION = 4;
+  public static final String TEST_STATE_PAUSE_SELECTION = "Jupiter";
+</pre>
+  </li>
+  <li>
+    Add the following imports:
+<pre>
+  import android.app.Instrumentation;
+  import android.test.UiThreadTest;
+</pre>
+  </li>
+</ol>
+<h2 id="RunTests">Running the Tests and Seeing the Results</h2>
+ <p>
+    The most simple way to run the <code>SpinnerActivityTest</code> test case is to run it directly from the Package Explorer.
+ </p>
+ <p>
+    To run the <code>SpinnerActivityTest</code> test, follow these steps:
+</p>
+ <ol>
+    <li>
+      In the Package Explorer, right-click the project SpinnerActivityTest at the top level, and then
+      select <strong>Run As</strong> &gt; <strong>Android JUnit Test</strong>:<br/>
+      <a href="{@docRoot}images/testing/spinnertest_runas_menu_callouts.png">
+        <img alt="Menu to run a test as an Android JUnit test" src="{@docRoot}images/testing/spinnertest_runas_menu_callouts.png" style="height:230px">
+      </a>
+    </li>
+    <li>
+        You will see the emulator start. When the unlock option is displayed (its appearance depends on the API level you specified for the AVD),
+        unlock the home screen.
+    </li>
+    <li>
+      The test application starts. You see a new tab for the <strong>JUnit</strong> view, next to the Package Explorer tab:<br/>
+      <a href="{@docRoot}images/testing/spinnertest_junit_panel.png">
+        <img alt="The JUnit window" src="{@docRoot}images/testing/spinnertest_junit_panel.png" style="height:230px">
+      </a>
+    </li>
+</ol>
+<p>
+    This view contains two sub-panes. The top pane summarizes the tests that were run, and the bottom pane shows failure traces for
+    highlighted tests.
+</p>
+<p>
+   At the conclusion of a successful test run, this is the view's appearance:<br/>
+   <a href="{@docRoot}images/testing/spinnertest_junit_success.png">
+    <img src="{@docRoot}images/testing/spinnertest_junit_success.png" alt="JUnit test run success" style="height:230px"/>
+   </a>
+</p>
+<p>
+    The upper pane summarizes the test:
+</p>
+    <ul>
+        <li>
+            Total time elapsed for the test application(labeled <em>Finished after &lt;x&gt; seconds</em>).
+        </li>
+        <li>
+            Number of runs (<em>Runs:</em>) - the number of tests in the entire test class.
+        </li>
+        <li>
+            Number of errors (<em>Errors:</em>) - the number of program errors and exceptions encountered during
+            the test run.
+        </li>
+        <li>
+            Number of failures (<em>Failures:</em>) - the number of test failures encountered during the test
+            run. This is the number of assertion failures. A test can fail even if the program does not encounter an error.
+        </li>
+        <li>
+            A progress bar. The progress bar extends from left to right as the tests run.
+            <p>
+               If all the tests succeed, the bar remains green. If a test fails, the bar turns from green to red.
+            </p>
+        </li>
+        <li>
+            A test method summary. Below the bar, you see a line for each class in the test application. To look at the results for the individual
+            methods in a test, click the arrow at the left to expand the line. You see the name of each test method. To the
+            right of the name, you see the time taken by the test. You can look at the test's code
+            by double-clicking its name.
+        </li>
+    </ul>
+<p>
+    The lower pane contains the failure trace. If all the tests are successful, this pane is empty. If some tests fail,
+    then if you highlight a failed test in the upper pane, the lower view contains a stack trace for the test. This is
+    demonstrated in the next section.
+</p>
+<p class="note">
+    <strong>Note:</strong> If you run the test application and nothing seems to happen, look for
+    the JUnit view. If you do not see it, you may have run the test application
+    as a regular Android application.
+    Remember that you need to run it as an Android <strong>JUnit</strong>
+    application.
+</p>
+<h2 id="TestFailure">Forcing Some Tests to Fail</h2>
+<p>
+  A test is as useful when it fails as when it succeeds. This section shows what happens in Eclipse with ADT when a test fails. You
+  can quickly see that a test class has failed, find the method or methods that failed, and then use a failure trace to find
+  the exact problem.
+</p>
+<p>
+  The example application SpinnerActivity that you downloaded passes all the tests in the test application SpinnerActivityTest.
+  To force the test to fail, you must modify the example application. You change a line of setup code in the application under test. This
+  causes the <code>testPreConditions()</code> and <code>testTextView()</code> test methods to fail.
+</p>
+<p>
+    To force the tests to fail, follow these steps:
+</p>
+<ol>
+  <li>
+    In Eclipse with ADT, go to the SpinnerActivity project and open the file <code>SpinnerActivity.java</code>.
+  </li>
+  <li>
+    At the top of <code>SpinnerActivity.java</code>, at the end of the <code>onCreate()</code> method, find the following line:
+<pre>
+    // mySpinner.setOnItemSelectedListener(null);
+</pre>
+    <p>Remove the forward slash characters at the beginning of the line to
+    uncomment the line. This sets the listener callback to null:
+    </p>
+<pre>
+    mySpinner.setOnItemSelectedListener(null);
+</pre>
+  </li>
+  <li>
+    The <code>testPreConditions()</code> method in <code>SpinnerActivityTest</code> contains the following test:
+    <code>assertTrue(mSpinner.getOnItemSelectedListener() != null);</code>. This test asserts that the listener callback is <em>not</em> null.
+    Since you have modified the application under test, this assertion now fails.
+  </li>
+  <li>
+    Run the test, as described in the previous section <a href="#RunTests">Running the Tests and Seeing the Results</a>.
+  </li>
+</ol>
+<p>
+    The JUnit view is either created or updated with the results of the test. Now, however, the progress bar is red,
+    the number of failures is 2, and small "x" icons appear in the list icons next to the testPreConditions and
+    TestSpinnerUI tests. This indicates that the tests have failed. The display is similar to this:<br/>
+    <a href="{@docRoot}images/testing/spinnertest_junit_panel_fail_callouts.png">
+      <img src="{@docRoot}images/testing/spinnertest_junit_panel_fail_callouts.png" alt="The JUnit Failure window" style="height:230px"/>
+    </a>
+</p>
+<p>
+  You now want to look at the failures to see exactly where they occurred.
+</p>
+<p>
+    To examine the failures, follow these steps:
+</p>
+<ol>
+  <li>
+    Click the testPreconditions entry. In the lower pane entitled <strong>Failure Trace</strong>,
+    you see a stack trace of the calls that led to the failure. This trace is similar to the following screenshot:<br/>
+    <a href="{@docRoot}images/testing/spinnertest_junit_panel_failtrace_callouts.png">
+      <img src="{@docRoot}images/testing/spinnertest_junit_panel_failtrace_callouts.png" alt="The JUnit failure trace" style="height:230px"/>
+    </a>
+  </li>
+  <li>
+      The first line of the trace tells you the error. In this case, a JUnit assertion failed. To look at the
+      assertion in the test code, double-click the next line (the first line of the trace). In the center pane
+      a new tabbed window opens, containing the code for the test application <code>SpinnerActivityTest</code>. The failed assertion
+      is highlighted in the middle of the window.
+  </li>
+</ol>
+<p>
+    The assertion failed because you modified the main application to set the <code>getOnItemSelectedListener</code> callback to <code>null</code>.
+</p>
+<p>
+    You can look at the failure in <code>testTextView</code> if you want. Remember, though, that <code>testPreConditions</code> is meant to verify the
+    initial setup of the application under test. If testPreConditions() fails, then succeeding tests can't be trusted. The best strategy to follow is to
+    fix the problem and re-run all the tests.
+</p>
+<p>
+    Remember to go back to <code>SpinnerActivity.java</code> and re-comment the line you uncommented in an earlier step.
+</p>
+<p>
+  You have now completed the tutorial.
+</p>
+<h2 id="NextSteps">Next Steps</h2>
+<p>
+    This example test application has shown you how to create a test project and link it to
+    the application you want to test, how to choose and add a test case class, how to write
+    UI and state management tests, and how to run the tests against the application under
+    test. Now that you are familiar with the basics of testing Android applications, here
+    are some suggested next steps:
+</p>
+<p>
+    <strong>Learn more about testing on Android</strong>
+</p>
+<ul>
+    <li>
+        If you haven't done so already, read the
+        <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>
+        document in the <em>Dev Guide</em>. It provides an overview of how testing on Android
+        works. If you are just getting started with Android testing, reading that document will
+        help you understand the tools available to you, so that you can develop effective
+        tests.
+    </li>
+</ul>
+<p>
+    <strong>Review the main Android test case classes</strong>
+</p>
+<ul>
+    <li>
+        {@link android.test.ActivityInstrumentationTestCase2}
+    </li>
+    <li>
+        {@link android.test.ActivityUnitTestCase}
+    </li>
+    <li>
+        {@link android.test.ProviderTestCase2}
+    </li>
+    <li>
+        {@link android.test.ServiceTestCase}
+    </li>
+</ul>
+<p>
+    <strong>Learn more about the assert and utility classes</strong>
+</p>
+<ul>
+    <li>
+        {@link junit.framework.Assert}, the JUnit Assert class.
+    </li>
+    <li>
+        {@link android.test.MoreAsserts}, additional Android assert methods.
+    </li>
+    <li>
+        {@link android.test.ViewAsserts}, useful assertion methods for testing Views.
+    </li>
+    <li>
+        {@link android.test.TouchUtils}, utility methods for simulating touch events in an Activity.
+    </li>
+</ul>
+<p>
+    <strong>Learn about instrumentation and the instrumented test runner</strong>
+</p>
+<ul>
+    <li>
+        {@link android.app.Instrumentation}, the base instrumentation class.
+    </li>
+    <li>
+        {@link android.test.InstrumentationTestCase}, the base instrumentation test case.
+    </li>
+    <li>
+        {@link android.test.InstrumentationTestRunner}, the standard Android test runner.
+    </li>
+</ul>
+<h2 id="Appendix">Appendix</h2>
+<h3 id="InstallCompletedTestApp">Installing the Completed Test Application File</h3>
+<p>
+    The recommended approach to this tutorial is to follow the instructions step-by-step and
+    write the test code as you go. However, if you want to do this tutorial quickly,
+    you can install the entire file for the test application into the test project.
+</p>
+<p>
+    To do this, you first create a test project with the necessary structure and files by using
+    the automated tools in Eclipse. Then you exit Eclipse and copy the test application's file
+    from the SpinnerTest sample project into your test project. The SpinnerTest sample project is
+    part of the Samples component of the SDK.
+</p>
+<p>
+    The result is a complete test application, ready to run against the Spinner sample application.
+</p>
+<p>
+    To install the test application file, follow these steps:
+</p>
+<ol>
+    <li>
+        Set up the projects for the application under test and the test application, as described
+        in the section section <a href="#SetupProjects">Setting Up the Projects</a>.
+    </li>
+    <li>
+        Set up the emulator, as described in the section <a href="#SetupEmulator">Setting Up the Emulator</a>.
+    </li>
+    <li>
+        Add the test case class, as described in the section <a href="#AddTestCaseClass">Adding the test case class file</a>.
+    </li>
+    <li>
+        Close Eclipse with ADT.
+    </li>
+    <li>
+        Copy the file <code>&lt;SDK_path&gt;/samples/android-8/SpinnerTest/src/com/android/example/spinner/test/SpinnerActivityTest.java</code>
+        to the directory <code>workspace/SpinnerActivityTest/src/com/android/example/spinner/test/</code>.
+    </li>
+    <li>
+        Restart Eclipse with ADT.
+    </li>
+    <li>
+        In Eclipse with ADT, re-build the project <code>SpinnerActivityTest</code> by selecting it in the Package Explorer, right-clicking,
+        and selecting <em>Project</em>&nbsp;&gt;&nbsp;<em>Clean</em>.
+    </li>
+    <li>
+        The complete, working test application should now be in the <code>SpinnerActivityTest</code> project.
+    </li>
+</ol>
+<p>
+    You can now continue with the tutorial, starting at the section <a href="#AddConstructor">Adding the test case constructor</a> and
+    following along in the text.
+</p>
+<h3 id="EditorCommandLine">For Users Not Developing In Eclipse</h3>
+<p>
+    If you are not developing in Eclipse, you can still do this tutorial. Android provides tools for
+    creating test applications using a code editor and command-line tools. You use the following tools:
+</p>
+<ul>
+  <li>
+   <a href="{@docRoot}tools/help/adb.html">adb</a> - Installs and uninstalls applications and test applications to a device or the emulator. You
+   also use this tool to run the test application from the command line.
+  </li>
+  <li>
+    <a href="{@docRoot}tools/help/android.html">android</a> - Manages projects and test projects. This tool also manages AVDs and Android platforms.
+  </li>
+</ul>
+  <p>
+    You use the <code>emulator</code> tool to run the emulator from the command line.
+  </p>
+  <p>
+    Here are the general steps for doing this tutorial using an editor and the command line:
+  </p>
+<ol>
+  <li>
+    As described in the section <a href="#DownloadCode">Installing the Tutorial Sample Code</a>, get the sample code. You will then
+    have a directory <code>&lt;SDK_path&gt;/samples/android-8</code>, containing (among others) the directories <code>Spinner</code>
+    and <code>SpinnerTest</code>:
+    <ul>
+        <li>
+            <code>Spinner</code> contains the main application, also known as the <strong>application under test</strong>. This tutorial focuses on the
+            common situation of writing tests for an application that already exists, so the main application is provided to you.
+        </li>
+        <li>
+            <code>SpinnerTest</code> contains all the code for the test application. If you want to run quickly through the tutorial, you can
+            install the test code and then follow the text. You may get more from the tutorial, however, if you write the code as you go. The instructions
+            for installing the test code are in the section <a href="#InstallCompletedTestApp">Appendix: Installing the Completed Test Application File</a>.
+        </li>
+        </ul>
+  </li>
+  <li>
+    Navigate to the directory <code>&lt;SDK_path&gt;/samples/android-8</code>.
+  </li>
+  <li>
+    Create a new Android application project using <code>android create project</code>:
+<pre>
+$ android create project -t &lt;APItarget&gt; -k com.android.example.spinner -a SpinnerActivity -n SpinnerActivity -p Spinner
+</pre>
+    <p>
+        The value of <code>&lt;APItarget&gt;</code> should be &quot;3&quot; (API level 3) or higher. If you are already developing with a particular API level, and it is
+        higher than 3, then use that API level.
+    </p>
+    <p>
+        This a new Android project <code>SpinnerActivity</code> in the existing <code>Spinner</code> directory. The existing source and
+        resource files are not touched, but the <code>android</code> tool adds the necessary build files.
+    </p>
+  </li>
+  <li>
+    Create a new Android test project using <code>android create test-project</code>:
+<pre>
+$ android create test-project -m ../Spinner -n SpinnerActivityTest -p SpinnerActivityTest
+</pre>
+    <p>
+        This will create a new Android test project in the <em>new</em> directory <code>SpinnerActivityTest</code>. You do this
+        so that the solution to the tutorial that is in <code>SpinnerTest</code> is left untouched. If you want to use the solution
+        code instead of entering it as you read through the tutorial, refer to the section
+        <a href="#InstallCompletedTestApp">Appendix: Installing the Completed Test Application File</a>.
+    </p>
+    <p class="Note">
+      <strong>Note:</strong> Running <code>android create test-project</code> will automatically create
+      the file <code>AndroidManifest.xml</code> with the correct <code>&lt;instrumentation&gt;</code> element.
+    </p>
+  </li>
+  <li>
+    Build the sample application. If you are building with Ant, then it is easiest to use the command <code>ant debug</code> to build a debug version, since the SDK comes
+    with a debug signing key. The result will be the file <code>Spinner/bin/SpinnerActivity-debug.apk</code>.
+    You can install this to your device or emulator. Attach your device or start the emulator if you haven't already, and run the command:
+<pre>
+$ adb install Spinner/bin/SpinnerActivity-debug.apk
+</pre>
+  </li>
+  <li>
+    To create the test application, create a file <code>SpinnerActivityTest.java</code> in the directory
+    <code>SpinnerActivityTest/src/com/android/example/spinner/test/</code>.
+  </li>
+  <li>
+    Follow the tutorial, starting with the section <a href="#CreateTestCaseClass">Creating the Test Case Class</a>. When you are prompted to
+    run the sample application, go the the Launcher screen in your device or emulator and select SpinnerActivity.
+    When you are prompted to run the test application, return here to continue with the following instructions.
+  </li>
+  <li>
+    Build the test application. If you are building with Ant, then it is easiest to use the command <code>ant debug</code> to build a
+    debug version, since the SDK comes with a debug signing key. The result will be the Android file
+    <code>SpinnerActivityTest/bin/SpinnerActivityTest-debug.apk</code>. You can install this to your device or emulator.
+    Attach your device or start the emulator if you haven't already, and run the command:
+<pre>
+$ adb install SpinnerActivityTest/bin/SpinnerActivityTest-debug.apk
+</pre>
+  </li>
+  <li>
+    In your device or emulator, check that both the main application <code>SpinnerActivity</code> and the test application
+    <code>SpinnerActivityTest</code> are installed.
+  </li>
+  <li>
+    To run the test application, enter the following at the command line:
+<pre>
+$ adb shell am instrument -w com.android.example.spinner.test/android.test.InstrumentationTestRunner
+ </pre>
+  </li>
+</ol>
+<p>
+    The result of a successful test looks like this:
+</p>
+<pre>
+com.android.example.spinner.test.SpinnerActivityTest:....
+Test results for InstrumentationTestRunner=....
+Time: 10.098
+OK (4 tests)
+</pre>
+<p>
+    If you force the test to fail, as described in the previous section <a href="#TestFailure">Forcing Some Tests to Fail</a>, then
+    the output looks like this:
+</p>
+<pre>
+com.android.example.spinner.test.SpinnerActivityTest:
+Failure in testPreConditions:
+junit.framework.AssertionFailedError
+  at com.android.example.spinner.test.SpinnerActivityTest.testPreConditions(SpinnerActivityTest.java:104)
+  at java.lang.reflect.Method.invokeNative(Native Method)
+  at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:205)
+  at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:195)
+  at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:175)
+  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
+  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
+  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
+  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
+Failure in testSpinnerUI:
+junit.framework.ComparisonFailure: expected:&lt;Result&gt; but was:&lt;Saturn&gt;
+  at com.android.example.spinner.test.SpinnerActivityTest.testSpinnerUI(SpinnerActivityTest.java:153)
+  at java.lang.reflect.Method.invokeNative(Native Method)
+  at android.test.InstrumentationTestCase.runMethod(InstrumentationTestCase.java:205)
+  at android.test.InstrumentationTestCase.runTest(InstrumentationTestCase.java:195)
+  at android.test.ActivityInstrumentationTestCase2.runTest(ActivityInstrumentationTestCase2.java:175)
+  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:169)
+  at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:154)
+  at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:430)
+  at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1447)
+..
+Test results for InstrumentationTestRunner=.F.F..
+Time: 9.377
+FAILURES!!!
+Tests run: 4,  Failures: 2,  Errors: 0
+</pre>
diff --git a/docs/html/tools/testing/activity_testing.jd b/docs/html/tools/testing/activity_testing.jd
new file mode 100644
index 0000000..7190b98
--- /dev/null
+++ b/docs/html/tools/testing/activity_testing.jd
@@ -0,0 +1,375 @@
+page.title=Activity Testing
+parent.title=Testing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li>
+      <a href="#ActivityTestAPI">The Activity Testing API</a>
+      <ol>
+        <li>
+            <a href="#ActivityInstrumentationTestCase2">ActivityInstrumentationTestCase2</a>
+        </li>
+        <li>
+            <a href="#ActivityUnitTestCase">ActivityUnitTestCase</a>
+        </li>
+        <li>
+            <a href="#SingleLaunchActivityTestCase">SingleLaunchActivityTestCase</a>
+        </li>
+        <li>
+            <a href="#MockObjectNotes">Mock objects and activity testing</a>
+        </li>
+        <li>
+            <a href="#AssertionNotes">Assertions for activity testing</a>
+        </li>
+      </ol>
+    </li>
+    <li>
+        <a href="#WhatToTest">What to Test</a>
+    </li>
+    <li>
+        <a href="#NextSteps">Next Steps</a>
+    </li>
+    <li>
+      <a href="#UITesting">Appendix: UI Testing Notes</a>
+      <ol>
+        <li>
+          <a href="#RunOnUIThread">Testing on the UI thread</a>
+        </li>
+        <li>
+          <a href="#NotouchMode">Turning off touch mode</a>
+        </li>
+        <li>
+          <a href="#UnlockDevice">Unlocking the Emulator or Device</a>
+        </li>
+        <li>
+          <a href="#UITestTroubleshooting">Troubleshooting UI tests</a>
+        </li>
+      </ol>
+    </li>
+    </ol>
+<h2>Key Classes</h2>
+    <ol>
+      <li>{@link android.test.InstrumentationTestRunner}</li>
+      <li>{@link android.test.ActivityInstrumentationTestCase2}</li>
+      <li>{@link android.test.ActivityUnitTestCase}</li>
+    </ol>
+<h2>Related Tutorials</h2>
+    <ol>
+      <li>
+         <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>
+      </li>
+    </ol>
+<h2>See Also</h2>
+      <ol>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_eclipse.html">
+          Testing from Eclipse with ADT</a>
+        </li>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_otheride.html">
+          Testing from Other IDEs</a>
+        </li>
+      </ol>
+  </div>
+</div>
+<p>
+    Activity testing is particularly dependent on the the Android instrumentation framework.
+    Unlike other components, activities have a complex lifecycle based on callback methods; these
+    can't be invoked directly except by instrumentation. Also, the only way to send events to the
+    user interface from a program is through instrumentation.
+</p>
+<p>
+    This document describes how to test activities using instrumentation and other test
+    facilities. The document assumes you have already read
+    <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
+    the introduction to the Android testing and instrumentation framework.
+</p>
+<h2 id="ActivityTestAPI">The Activity Testing API</h2>
+<p>
+    The activity testing API base class is {@link android.test.InstrumentationTestCase},
+    which provides instrumentation to the test case subclasses you use for Activities.
+</p>
+<p>
+    For activity testing, this base class provides these functions:
+</p>
+<ul>
+    <li>
+        Lifecycle control: With instrumentation, you can start the activity under test, pause it,
+        and destroy it, using methods provided by the test case classes.
+    </li>
+    <li>
+        Dependency injection: Instrumentation allows you to create mock system objects such as
+        Contexts or Applications and use them to run the activity under test. This
+        helps you control the test environment and isolate it from production systems. You can
+        also set up customized Intents and start an activity with them.
+    </li>
+    <li>
+        User interface interaction: You use instrumentation to send keystrokes or touch events
+        directly to the UI of the activity under test.
+    </li>
+</ul>
+<p>
+    The activity testing classes also provide the JUnit framework by extending
+    {@link junit.framework.TestCase} and {@link junit.framework.Assert}.
+</p>
+<p>
+    The two main testing subclasses are {@link android.test.ActivityInstrumentationTestCase2} and
+    {@link android.test.ActivityUnitTestCase}. To test an Activity that is launched in a mode
+    other than <code>standard</code>, you use {@link android.test.SingleLaunchActivityTestCase}.
+</p>
+<h3 id="ActivityInstrumentationTestCase2">ActivityInstrumentationTestCase2</h3>
+<p>
+    The {@link android.test.ActivityInstrumentationTestCase2} test case class is designed to do
+    functional testing of one or more Activities in an application, using a normal system
+    infrastructure. It runs the Activities in a normal instance of the application under test,
+    using a standard system Context. It allows you to send mock Intents to the activity under
+    test, so you can use it to test an activity that responds to multiple types of intents, or
+    an activity that expects a certain type of data in the intent, or both. Notice, though, that it
+    does not allow mock Contexts or Applications, so you can not isolate the test from the rest of
+    a production system.
+</p>
+<h3 id="ActivityUnitTestCase">ActivityUnitTestCase</h3>
+<p>
+    The {@link android.test.ActivityUnitTestCase} test case class tests a single activity in
+    isolation. Before you start the activity, you can inject a mock Context or Application, or both.
+    You use it to run activity tests in isolation, and to do unit testing of methods
+    that do not interact with Android. You can not send mock Intents to the activity under test,
+    although you can call
+    {@link android.app.Activity#startActivity(Intent) Activity.startActivity(Intent)} and then
+    look at arguments that were received.
+</p>
+<h3 id="SingleLaunchActivityTestCase">SingleLaunchActivityTestCase</h3>
+<p>
+    The {@link android.test.SingleLaunchActivityTestCase} class is a convenience class for
+    testing a single activity in an environment that doesn't change from test to test.
+    It invokes {@link junit.framework.TestCase#setUp() setUp()} and
+    {@link junit.framework.TestCase#tearDown() tearDown()} only once, instead of once per
+    method call. It does not allow you to inject any mock objects.
+</p>
+<p>
+    This test case is useful for testing an activity that runs in a mode other than
+    <code>standard</code>. It ensures that the test fixture is not reset between tests. You
+    can then test that the activity handles multiple calls correctly.
+</p>
+<h3 id="MockObjectNotes">Mock objects and activity testing</h3>
+<p>
+    This section contains notes about the use of the mock objects defined in
+    {@link android.test.mock} with activity tests.
+</p>
+<p>
+    The mock object {@link android.test.mock.MockApplication} is only available for activity
+    testing if you use the {@link android.test.ActivityUnitTestCase} test case class.
+    By default, <code>ActivityUnitTestCase</code>, creates a hidden <code>MockApplication</code>
+    object that is used as the application under test. You can inject your own object using
+    {@link android.test.ActivityUnitTestCase#setApplication(Application) setApplication()}.
+</p>
+<h3 id="AssertionNotes">Assertions for activity testing</h3>
+<p>
+    {@link android.test.ViewAsserts} defines assertions for Views. You use it to verify the
+    alignment and position of View objects, and to look at the state of ViewGroup objects.
+</p>
+<h2 id="WhatToTest">What To Test</h2>
+<ul>
+    <li>
+        Input validation: Test that an activity responds correctly to input values in an
+        EditText View. Set up a keystroke sequence, send it to the activity, and then
+        use {@link android.view.View#findViewById(int)} to examine the state of the View. You can
+        verify that a valid keystroke sequence enables an OK button, while an invalid one leaves the
+        button disabled. You can also verify that the Activity responds to invalid input by
+        setting error messages in the View.
+    </li>
+    <li>
+        Lifecycle events: Test that each of your application's activities handles lifecycle events
+        correctly. In general, lifecycle events are actions, either from the system or from the
+        user, that trigger a callback method such as <code>onCreate()</code> or
+        <code>onClick()</code>. For example, an activity should respond to pause or destroy events
+        by saving its state. Remember that even a change in screen orientation causes the current
+        activity to be destroyed, so you should test that accidental device movements don't
+        accidentally lose the application state.
+    </li>
+    <li>
+        Intents: Test that each activity correctly handles the intents listed in the intent
+        filter specified in its manifest. You can use
+        {@link android.test.ActivityInstrumentationTestCase2} to send mock Intents to the
+        activity under test.
+    </li>
+    <li>
+        Runtime configuration changes: Test that each activity responds correctly to the
+        possible changes in the device's configuration while your application is running. These
+        include a change to the device's orientation, a change to the current language, and so
+        forth. Handling these changes is described in detail in the topic
+        <a href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime
+        Changes</a>.
+    </li>
+    <li>
+        Screen sizes and resolutions: Before you publish your application, make sure to test it on
+        all of the screen sizes and densities on which you want it to run. You can test the
+        application on multiple sizes and densities using AVDs, or you can test your application
+        directly on the devices that you are targeting. For more information, see the topic
+        <a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a>.
+    </li>
+</ul>
+<h2 id="NextSteps">Next Steps</h2>
+<p>
+    To learn how to set up and run tests in Eclipse, please refer to 
+<a href="{@docRoot}tools/testing/testing_eclipse.html">Testing from Eclipse with ADT</a>.
+    If you're not working in Eclipse, refer to 
+<a href="{@docRoot}tools/testing/testing_otheride.html">Testing from Other IDEs</a>.
+</p>
+<p>
+    If you want a step-by-step introduction to testing activities, try the 
+    <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>, which
+    guides you through a testing scenario that you develop against an activity-oriented application.
+</p>
+<h2 id="UITesting">Appendix: UI Testing Notes</h2>
+<p>
+    The following sections have tips for testing the UI of your Android application, specifically
+    to help you handle actions that run in the UI thread, touch screen and keyboard events, and home
+    screen unlock during testing.
+</p>
+<h3 id="RunOnUIThread">Testing on the UI thread</h3>
+<p>
+    An application's activities run on the application's <strong>UI thread</strong>. Once the
+    UI is instantiated, for example in the activity's <code>onCreate()</code> method, then all
+    interactions with the UI must run in the UI thread. When you run the application normally, it
+    has access to the thread and does not have to do anything special.
+</p>
+<p>
+    This changes when you run tests against the application. With instrumentation-based classes,
+    you can invoke methods against the UI of the application under test. The other test classes
+    don't allow this. To run an entire test method on the UI thread, you can annotate the thread
+    with <code>@UIThreadTest</code>. Notice that this will run <em>all</em> of the method statements
+    on the UI thread.  Methods that do not interact with the UI are not allowed; for example, you
+    can't invoke <code>Instrumentation.waitForIdleSync()</code>.
+</p>
+<p>
+    To run a subset of a test method on the UI thread, create an anonymous class of type
+    <code>Runnable</code>, put the statements you want in the <code>run()</code> method, and
+    instantiate a new instance of the class as a parameter to the method
+    <code><em>appActivity</em>.runOnUiThread()</code>, where <code><em>appActivity</em></code> is
+    the instance of the application you are testing.
+</p>
+<p>
+    For example, this code instantiates an activity to test, requests focus (a UI action) for the
+    Spinner displayed by the activity, and then sends a key to it. Notice that the calls to
+    <code>waitForIdleSync</code> and <code>sendKeys</code> aren't allowed to run on the UI thread:
+</p>
+<pre>
+  private MyActivity mActivity; // MyActivity is the class name of the app under test
+  private Spinner mSpinner;
+
+  ...
+
+  protected void setUp() throws Exception {
+      super.setUp();
+      mInstrumentation = getInstrumentation();
+
+      mActivity = getActivity(); // get a references to the app under test
+
+      /*
+       * Get a reference to the main widget of the app under test, a Spinner
+       */
+      mSpinner = (Spinner) mActivity.findViewById(com.android.demo.myactivity.R.id.Spinner01);
+
+  ...
+
+  public void aTest() {
+      /*
+       * request focus for the Spinner, so that the test can send key events to it
+       * This request must be run on the UI thread. To do this, use the runOnUiThread method
+       * and pass it a Runnable that contains a call to requestFocus on the Spinner.
+       */
+      mActivity.runOnUiThread(new Runnable() {
+          public void run() {
+              mSpinner.requestFocus();
+          }
+      });
+
+      mInstrumentation.waitForIdleSync();
+
+      this.sendKeys(KeyEvent.KEYCODE_DPAD_CENTER);
+</pre>
+
+<h3 id="NotouchMode">Turning off touch mode</h3>
+<p>
+    To control the emulator or a device with key events you send from your tests, you must turn off
+    touch mode. If you do not do this, the key events are ignored.
+</p>
+<p>
+    To turn off touch mode, you invoke
+    <code>ActivityInstrumentationTestCase2.setActivityTouchMode(false)</code>
+    <em>before</em> you call <code>getActivity()</code> to start the activity. You must invoke the
+    method in a test method that is <em>not</em> running on the UI thread. For this reason, you
+    can't invoke the touch mode method from a test method that is annotated with
+    <code>@UIThread</code>. Instead, invoke the touch mode method from <code>setUp()</code>.
+</p>
+<h3 id="UnlockDevice">Unlocking the emulator or device</h3>
+<p>
+    You may find that UI tests don't work if the emulator's or device's home screen is disabled with
+    the keyguard pattern. This is because the application under test can't receive key events sent
+    by <code>sendKeys()</code>. The best way to avoid this is to start your emulator or device
+    first and then disable the keyguard for the home screen.
+</p>
+<p>
+    You can also explicitly disable the keyguard. To do this,
+    you need to add a permission in the manifest file (<code>AndroidManifest.xml</code>) and
+    then disable the keyguard in your application under test. Note, though, that you either have to
+    remove this before you publish your application, or you have to disable it with code in
+    the published application.
+</p>
+<p>
+    To add the the permission, add the element
+    <code>&lt;uses-permission android:name="android.permission.DISABLE_KEYGUARD"/&gt;</code>
+    as a child of the <code>&lt;manifest&gt;</code> element. To disable the KeyGuard, add the
+    following code to the <code>onCreate()</code> method of activities you intend to test:
+</p>
+<pre>
+  mKeyGuardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
+  mLock = mKeyGuardManager.newKeyguardLock("<em>activity_classname</em>");
+  mLock.disableKeyguard();
+</pre>
+<p>where <code><em>activity_classname</em></code> is the class name of the activity.</p>
+<h3 id="UITestTroubleshooting">Troubleshooting UI tests</h3>
+<p>
+    This section lists some of the common test failures you may encounter in UI testing, and their
+    causes:
+</p>
+<dl>
+    <dt><code>WrongThreadException</code></dt>
+    <dd>
+      <p><strong>Problem:</strong></p>
+      For a failed test, the Failure Trace contains the following error message:
+      <code>
+        android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created
+        a view hierarchy can touch its views.
+      </code>
+      <p><strong>Probable Cause:</strong></p>
+        This error is common if you tried to send UI events to the UI thread from outside the UI
+        thread. This commonly happens if you send UI events from the test application, but you don't
+        use the <code>@UIThread</code> annotation or the <code>runOnUiThread()</code> method. The
+        test method tried to interact with the UI outside the UI thread.
+      <p><strong>Suggested Resolution:</strong></p>
+        Run the interaction on the UI thread. Use a test class that provides instrumentation. See
+        the previous section <a href="#RunOnUIThread">Testing on the UI Thread</a>
+        for more details.
+    </dd>
+    <dt><code>java.lang.RuntimeException</code></dt>
+    <dd>
+      <p><strong>Problem:</strong></p>
+        For a failed test, the Failure Trace contains the following error message:
+      <code>
+        java.lang.RuntimeException: This method can not be called from the main application thread
+      </code>
+      <p><strong>Probable Cause:</strong></p>
+        This error is common if your test method is annotated with <code>@UiThreadTest</code> but
+        then tries to do something outside the UI thread or tries to invoke
+        <code>runOnUiThread()</code>.
+      <p><strong>Suggested Resolution:</strong></p>
+        Remove the <code>@UiThreadTest</code> annotation, remove the <code>runOnUiThread()</code>
+        call, or re-factor your tests.
+    </dd>
+</dl>
diff --git a/docs/html/tools/testing/contentprovider_testing.jd b/docs/html/tools/testing/contentprovider_testing.jd
new file mode 100644
index 0000000..a6440df
--- /dev/null
+++ b/docs/html/tools/testing/contentprovider_testing.jd
@@ -0,0 +1,217 @@
+page.title=Content Provider Testing
+parent.title=Testing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li>
+        <a href="#DesignAndTest">Content Provider Design and Testing</a>
+    </li>
+    <li>
+      <a href="#ContentProviderTestAPI">The Content Provider Testing API</a>
+      <ol>
+        <li>
+          <a href="#ProviderTestCase2">ProviderTestCase2 </a>
+        </li>
+        <li>
+          <a href="#MockObjects">Mock object classes</a>
+        </li>
+      </ol>
+    </li>
+    <li>
+        <a href="#WhatToTest">What To Test</a>
+    </li>
+    <li>
+        <a href="#NextSteps">Next Steps</a>
+    </li>
+  </ol>
+  <h2>Key Classes</h2>
+    <ol>
+      <li>{@link android.test.InstrumentationTestRunner}</li>
+      <li>{@link android.test.ProviderTestCase2}</li>
+      <li>{@link android.test.IsolatedContext}</li>
+      <li>{@link android.test.mock.MockContentResolver}</li>
+    </ol>
+  <h2>Related Tutorials</h2>
+    <ol>
+        <li>
+            <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>
+        </li>
+    </ol>
+  <h2>See Also</h2>
+      <ol>
+        <li>
+          <a
+          href="{@docRoot}tools/testing/testing_android.html">
+          Testing Fundamentals</a>
+        </li>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_eclipse.html">
+          Testing From Eclipse with ADT</a>
+        </li>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_otheride.html">
+          Testing From Other IDEs</a>
+        </li>
+      </ol>
+  </div>
+</div>
+<p>
+    Content providers, which store and retrieve data and make it accessible across applications,
+    are a key part of the Android API. As an application developer you're allowed to provide your
+    own public providers for use by other applications. If you do, then you should test them
+    using the API you publish.
+</p>
+<p>
+    This document describes how to test public content providers, although the information is
+    also applicable to providers that you keep private to your own application. If you aren't
+    familiar with content  providers or the Android testing framework, please read
+    <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>,
+    the guide to developing content providers, and
+    <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
+    the introduction to the Android testing and instrumentation framework.
+</p>
+<h2 id="DesignAndTest">Content Provider Design and Testing</h2>
+<p>
+    In Android, content providers are viewed externally as data APIs that provide
+    tables of data, with their internals hidden from view. A content provider may have many
+    public constants, but it usually has few if any public methods and no public variables.
+    This suggests that you should write your tests based only on the provider's public members.
+    A content provider that is designed like this is offering a contract between itself and its
+    users.
+</p>
+<p>
+    The base test case class for content providers,
+    {@link android.test.ProviderTestCase2}, allows you to test your content provider in an
+    isolated environment. Android mock objects such as {@link android.test.IsolatedContext} and
+    {@link android.test.mock.MockContentResolver} also help provide an isolated test environment.
+</p>
+<p>
+    As with other Android tests, provider test packages are run under the control of the test
+    runner {@link android.test.InstrumentationTestRunner}. The section
+    <a href="{@docRoot}tools/testing/testing_android.html#InstrumentationTestRunner">
+    Running Tests With InstrumentationTestRunner</a> describes the test runner in
+    more detail. The topic <a href="{@docRoot}tools/testing/testing_eclipse.html">
+    Testing From Eclipse with ADT</a> shows you how to run a test package in Eclipse, and the
+    topic <a href="{@docRoot}tools/testing/testing_otheride.html">
+    Testing From Other IDEs</a>
+    shows you how to run a test package from the command line.
+</p>
+<h2 id="ContentProviderTestAPI">Content Provider Testing API</h2>
+<p>
+    The main focus of the provider testing API is to provide an isolated testing environment. This
+    ensures that tests always run against data dependencies set explicitly in the test case. It
+    also prevents tests from modifying actual user data. For example, you want to avoid writing
+    a test that fails because there was data left over from a previous test, and you want to
+    avoid adding or deleting contact information in a actual provider.
+</p>
+<p>
+    The test case class and mock object classes for provider testing set up this isolated testing
+    environment for you.
+</p>
+<h3 id="ProviderTestCase2">ProviderTestCase2</h3>
+<p>
+    You test a provider with a subclass of {@link android.test.ProviderTestCase2}. This base class
+    extends {@link android.test.AndroidTestCase}, so it provides the JUnit testing framework as well
+    as Android-specific methods for testing application permissions. The most important
+    feature of this class is its initialization, which creates the isolated test environment.
+</p>
+<p>
+    The initialization is done in the constructor for {@link android.test.ProviderTestCase2}, which
+    subclasses call in their own constructors. The {@link android.test.ProviderTestCase2}
+    constructor creates an {@link android.test.IsolatedContext} object that allows file and
+    database operations but stubs out other interactions with the Android system.
+    The file and database operations themselves take place in a directory that is local to the
+    device or emulator and has a special prefix.
+</p>
+<p>
+    The constructor then creates a {@link android.test.mock.MockContentResolver} to use as the
+    resolver for the test. The {@link android.test.mock.MockContentResolver} class is described in
+    detail in the section
+    <a href="{@docRoot}tools/testing/testing_android.html#MockObjectClasses">Mock object
+classes</a>.
+</p>
+<p>
+    Lastly, the constructor creates an instance of the provider under test. This is a normal
+    {@link android.content.ContentProvider} object, but it takes all of its environment information
+    from the {@link android.test.IsolatedContext}, so it is restricted to
+    working in the isolated test environment. All of the tests done in the test case class run
+    against this isolated object.
+</p>
+<h3 id="MockObjects">Mock object classes</h3>
+<p>
+    {@link android.test.ProviderTestCase2} uses {@link android.test.IsolatedContext} and
+    {@link android.test.mock.MockContentResolver}, which are standard mock object classes. To
+    learn more about them, please read
+    <a href="{@docRoot}tools/testing/testing_android.html#MockObjectClasses">
+    Testing Fundamentals</a>.
+</p>
+<h2 id="WhatToTest">What To Test</h2>
+<p>
+    The topic <a href="{@docRoot}tools/testing/what_to_test.html">What To Test</a>
+    lists general considerations for testing Android components.
+    Here are some specific guidelines for testing content providers.
+</p>
+<ul>
+    <li>
+        Test with resolver methods: Even though you can instantiate a provider object in
+        {@link android.test.ProviderTestCase2}, you should always test with a resolver object
+        using the appropriate URI. This ensures that you are testing the provider using the same
+        interaction that a regular application would use.
+    </li>
+    <li>
+        Test a public provider as a contract: If you intent your provider to be public and
+        available to other applications, you should test it as a contract. This includes
+        the following ideas:
+        <ul>
+            <li>
+                Test with constants that your provider publicly exposes. For
+                example, look for constants that refer to column names in one of the provider's
+                data tables. These should always be constants publicly defined by the provider.
+            </li>
+            <li>
+                Test all the URIs offered by your provider. Your provider may offer several URIs,
+                each one referring to a different aspect of the data. The
+                <a href="{@docRoot}resources/samples/NotePad/index.html">Note Pad</a> sample,
+                for example, features a provider that offers one URI for retrieving a list of notes,
+                another for retrieving an individual note by it's database ID, and a third for
+                displaying notes in a live folder.
+            </li>
+            <li>
+                Test invalid URIs: Your unit tests should deliberately call the provider with an
+                invalid URI, and look for errors. Good provider design is to throw an
+                IllegalArgumentException for invalid URIs.
+
+            </li>
+        </ul>
+    </li>
+    <li>
+        Test the standard provider interactions: Most providers offer six access methods:
+        query, insert, delete, update, getType, and onCreate(). Your tests should verify that all
+        of these methods work. These are described in more detail in the topic
+        <a href="{@docRoot}guide/topics/providers/content-providers.html">Content Providers</a>.
+    </li>
+    <li>
+        Test business logic: Don't forget to test the business logic that your provider should
+        enforce. Business logic includes handling of invalid values, financial or arithmetic
+        calculations, elimination or combining of duplicates, and so forth. A content provider
+        does not have to have business logic, because it may be implemented by activities that
+        modify the data. If the provider does implement business logic, you should test it.
+    </li>
+</ul>
+<h2 id="NextSteps">Next Steps</h2>
+<p>
+    To learn how to set up and run tests in Eclipse, please refer to 
+<a href="{@docRoot}tools/testing/testing_eclipse.html">Testing from Eclipse with ADT</a>.
+    If you're not working in Eclipse, refer to 
+<a href="{@docRoot}tools/testing/testing_otheride.html">Testing From Other IDEs</a>.
+</p>
+<p>
+    If you want a step-by-step introduction to testing activities, try the 
+    <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>, which
+    guides you through a testing scenario that you develop against an activity-oriented application.
+</p>
+
diff --git a/docs/html/tools/testing/index.jd b/docs/html/tools/testing/index.jd
new file mode 100644
index 0000000..56de4cf
--- /dev/null
+++ b/docs/html/tools/testing/index.jd
@@ -0,0 +1,40 @@
+page.title=Testing
+@jd:body
+
+<p> The Android framework includes an integrated testing framework that helps you test all aspects
+of your application and the SDK tools include tools for setting up and running test applications.
+Whether you are working in Eclipse with ADT or working from the command line, the SDK tools help you
+set up and run your tests within an emulator or the device you are targeting. </p>
+
+<p>If you aren't yet familiar with the Android testing framework, start by reading <a
+href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>. For a step-by-step
+introduction to Android testing, try the <a
+href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>. </p>
+
+
+
+<div class="landing-docs">
+
+  <div class="col-13" style="margin-left:0">
+    <h3>Blog Articles</h3>
+    
+    <a href="http://android-developers.blogspot.com/2010/12/new-gingerbread-api-strictmode.html">
+      <h4>New Gingerbread API: StrictMode</h4>
+      <p>StrictMode is a new API in Gingerbread which primarily lets you set a policy on a thread
+declaring what you’re not allowed to do on that thread, and what the penalty is if you violate the
+policy. Implementation-wise, this policy is simply a thread-local integer bitmask.</p>
+    </a>
+    
+    <a href="http://android-developers.blogspot.com/2010/10/traceview-war-story.html">
+      <h4>Traceview War Story</h4>
+      <p>I recently took my first serious look at Traceview, and it occurred to me, first, that
+there are probably a few other Android developers who haven’t used it and, second, that this is an
+opportunity to lecture sternly on one of my favorite subjects: performance improvement and
+profiling.</p>
+    </a>
+  </div>
+
+
+</div>
+
+
diff --git a/docs/html/tools/testing/service_testing.jd b/docs/html/tools/testing/service_testing.jd
new file mode 100644
index 0000000..7c56fd9
--- /dev/null
+++ b/docs/html/tools/testing/service_testing.jd
@@ -0,0 +1,176 @@
+page.title=Service Testing
+parent.title=Testing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li>
+        <a href="#DesignAndTest">Service Design and Testing</a>
+    </li>
+    <li>
+        <a href="#ServiceTestCase">ServiceTestCase</a>
+    </li>
+    <li>
+        <a href="#MockObjects">Mock object classes</a>
+    </li>
+    <li>
+        <a href="#TestAreas">What to Test</a>
+    </li>
+  </ol>
+  <h2>Key Classes</h2>
+    <ol>
+      <li>{@link android.test.InstrumentationTestRunner}</li>
+      <li>{@link android.test.ServiceTestCase}</li>
+      <li>{@link android.test.mock.MockApplication}</li>
+      <li>{@link android.test.RenamingDelegatingContext}</li>
+    </ol>
+  <h2>Related Tutorials</h2>
+    <ol>
+        <li>
+            <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>
+        </li>
+    </ol>
+  <h2>See Also</h2>
+      <ol>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_eclipse.html">
+          Testing From Eclipse with ADT</a>
+        </li>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_otheride.html">
+          Testing From Other IDEs</a>
+        </li>
+      </ol>
+  </div>
+</div>
+<p>
+    Android provides a testing framework for Service objects that can run them in
+    isolation and provides mock objects. The test case class for Service objects is
+    {@link android.test.ServiceTestCase}. Since the Service class assumes that it is separate
+    from its clients, you can test a Service object without using instrumentation.
+</p>
+<p>
+    This document describes techniques for testing Service objects. If you aren't familiar with the
+    Service class, please read the <a href="{@docRoot}guide/components/services.html">
+    Services</a> document. If you aren't familiar with Android testing, please read
+    <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
+    the introduction to the Android testing and instrumentation framework.
+</p>
+<h2 id="DesignAndTest">Service Design and Testing</h2>
+<p>
+    When you design a Service, you should consider how your tests can examine the various states
+    of the Service lifecycle. If the lifecycle methods that start up your Service, such as
+    {@link android.app.Service#onCreate() onCreate()} or
+    {@link android.app.Service#onStartCommand(Intent, int, int) onStartCommand()} do not normally
+    set a global variable to indicate that they were successful, you may want to provide such a
+    variable for testing purposes.
+</p>
+<p>
+    Most other testing is facilitated by the methods in the {@link android.test.ServiceTestCase}
+    test case class. For example, the {@link android.test.ServiceTestCase#getService()} method
+    returns a handle to the Service under test, which you can test to confirm that the Service is
+    running even at the end of your tests.
+</p>
+<h2 id="ServiceTestCase">ServiceTestCase</h2>
+<p>
+    {@link android.test.ServiceTestCase} extends the JUnit {@link junit.framework.TestCase} class
+    with with methods for testing application permissions and for controlling the application and
+    Service under test. It also provides mock application and Context objects that isolate your
+    test from the rest of the system.
+</p>
+<p>
+    {@link android.test.ServiceTestCase} defers initialization of the test environment until you
+    call {@link android.test.ServiceTestCase#startService(Intent) ServiceTestCase.startService()} or
+    {@link android.test.ServiceTestCase#bindService(Intent) ServiceTestCase.bindService()}. This
+    allows you to set up your test environment, particularly your mock objects, before the Service
+    is started.
+</p>
+<p>
+    Notice that the parameters to <code>ServiceTestCase.bindService()</code>are different from
+    those for <code>Service.bindService()</code>. For the <code>ServiceTestCase</code> version,
+    you only provide an Intent. Instead of returning a boolean,
+    <code>ServiceTestCase.bindService()</code> returns an object that subclasses
+    {@link android.os.IBinder}.
+</p>
+<p>
+    The {@link android.test.ServiceTestCase#setUp()} method for {@link android.test.ServiceTestCase}
+    is called before each test. It sets up the test fixture by making a copy of the current system
+    Context before any test methods touch it. You can retrieve this Context by calling
+    {@link android.test.ServiceTestCase#getSystemContext()}. If you override this method, you must
+    call <code>super.setUp()</code> as the first statement in the override.
+</p>
+<p>
+    The methods {@link android.test.ServiceTestCase#setApplication(Application) setApplication()}
+    and {@link android.test.AndroidTestCase#setContext(Context)} setContext()} allow you to set
+    a mock Context or mock Application (or both) for the Service, before you start it. These mock
+    objects are described in <a href="#MockObjects">Mock object classes</a>.
+</p>
+<p>
+    By default, {@link android.test.ServiceTestCase} runs the test method
+    {@link android.test.AndroidTestCase#testAndroidTestCaseSetupProperly()}, which asserts that
+    the base test case class successfully set up a Context before running.
+</p>
+<h2 id="MockObjects">Mock object classes</h2>
+<p>
+    <code>ServiceTestCase</code> assumes that you will use a mock Context or mock Application
+    (or both) for the test environment. These objects isolate the test environment from the
+    rest of the system. If you don't provide your own instances of these objects before you
+    start the Service, then {@link android.test.ServiceTestCase} will create its own internal
+    instances and inject them into the Service. You can override this behavior by creating and
+    injecting your own instances before starting the Service
+</p>
+<p>
+    To inject a mock Application object into the Service under test, first create a subclass of
+    {@link android.test.mock.MockApplication}. <code>MockApplication</code> is a subclass of
+    {@link android.app.Application} in which all the methods throw an Exception, so to use it
+    effectively you subclass it and override the methods you need. You then inject it into the
+    Service with the
+    {@link android.test.ServiceTestCase#setApplication(Application) setApplication()} method.
+    This mock object allows you to control the application values that the Service sees, and
+    isolates it from the real system. In addition, any hidden dependencies your Service has on
+    its application reveal themselves as exceptions when you run the test.
+</p>
+<p>
+    You inject a mock Context into the Service under test with the
+    {@link android.test.AndroidTestCase#setContext(Context) setContext()} method. The mock
+    Context classes you can use are described in more detail in
+    <a href="{@docRoot}tools/testing/testing_android.html#MockObjectClasses">
+    Testing Fundamentals</a>.
+</p>
+<h2 id="TestAreas">What to Test</h2>
+<p>
+    The topic <a href="{@docRoot}tools/testing/what_to_test.html">What To Test</a>
+    lists general considerations for testing Android components.
+    Here are some specific guidelines for testing a Service:
+</p>
+<ul>
+    <li>
+        Ensure that the {@link android.app.Service#onCreate()} is called in response to
+        {@link android.content.Context#startService(Intent) Context.startService()} or
+    {@link android.content.Context#bindService(Intent,ServiceConnection,int) Context.bindService()}.
+        Similarly, you should ensure that {@link android.app.Service#onDestroy()} is called in
+        response to {@link android.content.Context#stopService(Intent) Context.stopService()},
+        {@link android.content.Context#unbindService(ServiceConnection) Context.unbindService()},
+        {@link android.app.Service#stopSelf()}, or
+        {@link android.app.Service#stopSelfResult(int) stopSelfResult()}.
+    </li>
+    <li>
+        Test that your Service correctly handles multiple calls from
+        <code>Context.startService()</code>. Only the first call triggers
+        <code>Service.onCreate()</code>, but all calls trigger a call to
+        <code>Service.onStartCommand()</code>.
+        <p>
+            In addition, remember that <code>startService()</code> calls don't
+            nest, so a single call to <code>Context.stopService()</code> or
+            <code>Service.stopSelf()</code> (but not <code>stopSelf(int)</code>)
+            will stop the Service. You should test that your Service stops at the correct point.
+        </p>
+    </li>
+    <li>
+        Test any business logic that your Service implements. Business logic includes checking for
+        invalid values, financial and arithmetic calculations, and so forth.
+    </li>
+</ul>
diff --git a/docs/html/tools/testing/testing_android.jd b/docs/html/tools/testing/testing_android.jd
new file mode 100755
index 0000000..acf5ec2
--- /dev/null
+++ b/docs/html/tools/testing/testing_android.jd
@@ -0,0 +1,640 @@
+page.title=Testing Fundamentals
+parent.title=Testing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+  <h2>In this document</h2>
+  <ol>
+    <li>
+        <a href="#TestStructure">Test Structure</a>
+    </li>
+    <li>
+        <a href="#TestProjects">Test Projects</a>
+    </li>
+    <li>
+      <a href="#TestAPI">The Testing API</a>
+      <ol>
+        <li>
+          <a href="#JUnit">JUnit</a>
+        </li>
+        <li>
+          <a href="#Instrumentation">Instrumentation</a>
+        </li>
+        <li>
+            <a href="#TestCaseClasses">Test case classes</a>
+        </li>
+        <li>
+          <a href="#AssertionClasses">Assertion classes</a>
+        </li>
+        <li>
+          <a href="#MockObjectClasses">Mock object classes</a>
+        </li>
+      </ol>
+    </li>
+    <li>
+        <a href="#InstrumentationTestRunner">Running Tests</a>
+    </li>
+    <li>
+        <a href="#TestResults">Seeing Test Results</a>
+    </li>
+    <li>
+        <a href="#Monkeys">monkey and monkeyrunner</a>
+    </li>
+    <li>
+       <a href="#PackageNames">Working With Package Names</a>
+    </li>
+    <li>
+        <a href="#WhatToTest">What To Test</a>
+    </li>
+    <li>
+        <a href="#NextSteps">Next Steps</a>
+    </li>
+  </ol>
+  <h2>Key classes</h2>
+    <ol>
+      <li>{@link android.test.InstrumentationTestRunner}</li>
+      <li>{@link android.test}</li>
+      <li>{@link android.test.mock}</li>
+      <li>{@link junit.framework}</li>
+    </ol>
+  <h2>Related tutorials</h2>
+    <ol>
+        <li>
+            <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>
+        </li>
+    </ol>
+  <h2>See also</h2>
+      <ol>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_eclipse.html">
+          Testing from Eclipse with ADT</a>
+        </li>
+        <li>
+          <a href="{@docRoot}tools/testing/testing_otheride.html">
+          Testing from Other IDEs</a>
+        </li>
+        <li>
+          <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">
+          monkeyrunner</a>
+        </li>
+        <li>
+     <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a>
+        </li>
+      </ol>
+  </div>
+</div>
+<p>
+    The Android testing framework, an integral part of the development environment,
+    provides an architecture and powerful tools that help you test every aspect of your application
+    at every level from unit to framework.
+</p>
+<p>
+    The testing framework has these key features:
+</p>
+<ul>
+    <li>
+        Android test suites are based on JUnit. You can use plain JUnit to test a class that doesn't
+        call the Android API, or Android's JUnit extensions to test Android components. If you're
+        new to Android testing, you can start with general-purpose test case classes such as {@link
+        android.test.AndroidTestCase} and then go on to use more sophisticated classes.
+    </li>
+    <li>
+        The Android JUnit extensions provide component-specific test case classes. These classes
+        provide helper methods for creating mock objects and methods that help you control the
+        lifecycle of a component.
+    </li>
+    <li>
+        Test suites are contained in test packages that are similar to main application packages, so
+        you don't need to learn a new set of tools or techniques for designing and building tests.
+    </li>
+    <li>
+        The SDK tools for building and tests are available in Eclipse with ADT, and also in
+        command-line form for use with other IDES. These tools get information from the project of
+        the application under test and use this information to automatically create the build files,
+        manifest file, and directory structure for the test package.
+    </li>
+    <li>
+        The SDK also provides
+  <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">monkeyrunner</a>, an API
+        testing devices with Python programs, and <a
+        href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a>,
+        a command-line tool for stress-testing UIs by sending pseudo-random events to a device.
+    </li>
+</ul>
+<p>
+    This document describes the fundamentals of the Android testing framework, including the
+    structure of tests, the APIs that you use to develop tests, and the tools that you use to run
+    tests and view results. The document assumes you have a basic knowledge of Android application
+    programming and JUnit testing methodology.
+</p>
+<p>
+    The following diagram summarizes the testing framework:
+</p>
+<div style="width: 70%; margin-left:auto; margin-right:auto;">
+<a href="{@docRoot}images/testing/test_framework.png">
+    <img src="{@docRoot}images/testing/test_framework.png"
+        alt="The Android testing framework"/>
+</a>
+</div>
+<h2 id="TestStructure">Test Structure</h2>
+<p>
+    Android's build and test tools assume that test projects are organized into a standard
+    structure of tests, test case classes, test packages, and test projects.
+</p>
+<p>
+    Android testing is based on JUnit. In general, a JUnit test is a method whose
+    statements test a part of the application under test. You organize test methods into classes
+    called test cases (or test suites). Each test is an isolated test of an individual module in
+    the application under test. Each class is a container for related test methods, although it
+    often provides helper methods as well.
+</p>
+<p>
+    In JUnit, you build one or more test source files into a class file. Similarly, in Android you
+    use the SDK's build tools to build one or more test source files into class files in an
+    Android test package. In JUnit, you use a test runner to execute test classes. In Android, you
+    use test tools to load the test package and the application under test, and the tools then
+    execute an Android-specific test runner.
+</p>
+<h2 id="TestProjects">Test Projects</h2>
+<p>
+    Tests, like Android applications, are organized into projects.
+</p>
+<p>
+    A test project is a directory or Eclipse project in which you create the source code, manifest
+    file, and other files for a test package. The Android SDK contains tools for Eclipse with ADT
+    and for the command line that create and update test projects for you. The tools create the
+    directories you use for source code and resources and the manifest file for the test package.
+    The command-line tools also create the Ant build files you need.
+</p>
+<p>
+    You should always use Android tools to create a test project. Among other benefits,
+    the tools:
+</p>
+    <ul>
+        <li>
+            Automatically set up your test package to use
+            {@link android.test.InstrumentationTestRunner} as the test case runner. You must use
+            <code>InstrumentationTestRunner</code> (or a subclass) to run JUnit tests.
+        </li>
+        <li>
+            Create an appropriate name for the test package. If the application
+            under test has a package name of <code>com.mydomain.myapp</code>, then the
+            Android tools set the test package name to <code>com.mydomain.myapp.test</code>. This
+            helps you identify their relationship, while preventing conflicts within the system.
+        </li>
+        <li>
+            Automatically create the proper build files, manifest file, and directory
+            structure for the test project. This helps you to build the test package without
+            having to modify build files and sets up the linkage between your test package and
+            the application under test.
+            The
+        </li>
+    </ul>
+<p>
+    You can create a test project anywhere in your file system, but the best approach is to
+    add the test project so that its root directory <code>tests/</code> is at the same level
+    as the <code>src/</code> directory of the main application's project. This helps you find the
+    tests associated with an application. For example, if your application project's root directory
+    is <code>MyProject</code>, then you should use the following directory structure:
+</p>
+<pre class="classic no-pretty-print">
+  MyProject/
+      AndroidManifest.xml
+      res/
+          ... (resources for main application)
+      src/
+          ... (source code for main application) ...
+      tests/
+          AndroidManifest.xml
+          res/
+              ... (resources for tests)
+          src/
+              ... (source code for tests)
+</pre>
+<h2 id="TestAPI">The Testing API</h2>
+<p>
+    The Android testing API is based on the JUnit API and extended with a instrumentation
+    framework and Android-specific testing classes.
+</p>
+<h3 id="JUnit">JUnit</h3>
+<p>
+    You can use the JUnit {@link junit.framework.TestCase TestCase} class to do unit testing on
+    a class that doesn't call Android APIs. <code>TestCase</code> is also the base class for
+    {@link android.test.AndroidTestCase}, which you can use to test Android-dependent objects.
+    Besides providing the JUnit framework, AndroidTestCase offers Android-specific setup,
+    teardown, and helper methods.
+</p>
+<p>
+    You use the JUnit {@link junit.framework.Assert} class to display test results.
+    The assert methods compare values you expect from a test to the actual results and
+    throw an exception if the comparison fails. Android also provides a class of assertions that
+    extend the possible types of comparisons, and another class of assertions for testing the UI.
+    These are described in more detail in the section <a href="#AssertionClasses">
+    Assertion classes</a>
+</p>
+<p>
+    To learn more about JUnit, you can read the documentation on the
+    <a href="http://www.junit.org">junit.org</a> home page.
+    Note that the Android testing API supports JUnit 3 code style, but not JUnit 4. Also, you must
+    use Android's instrumented test runner {@link android.test.InstrumentationTestRunner} to run
+    your test case classes. This test runner is described in the
+    section <a href="#InstrumentationTestRunner">Running Tests</a>.
+</p>
+<h3 id="Instrumentation">Instrumentation</h3>
+<p>
+    Android instrumentation is a set of control methods or "hooks" in the Android system. These hooks
+    control an Android component independently of its normal lifecycle. They also control how
+    Android loads applications.
+</p>
+<p>
+    Normally, an Android component runs in a lifecycle determined by the system. For example, an
+    Activity object's lifecycle starts when the Activity is activated by an Intent. The object's
+    <code>onCreate()</code> method is called, followed by <code>onResume()</code>. When the user
+    starts another application, the <code>onPause()</code> method is called. If the Activity
+    code calls the <code>finish()</code> method, the <code>onDestroy()</code> method is called.
+    The Android framework API does not provide a way for your code to invoke these callback
+    methods directly, but you can do so using instrumentation.
+</p>
+<p>
+    Also, the system runs all the components of an application into the same
+    process. You can allow some components, such as content providers, to run in a separate process,
+    but you can't force an application to run in the same process as another application that is
+    already running.
+</p>
+<p>
+    With Android instrumentation, though, you can invoke callback methods in your test code.
+    This allows you to run through the lifecycle of a component step by step, as if you were
+    debugging the component. The following test code snippet demonstrates how to use this to
+    test that an Activity saves and restores its state:
+</p>
+<a name="ActivitySnippet"></a>
+<pre>
+    // Start the main activity of the application under test
+    mActivity = getActivity();
+
+    // Get a handle to the Activity object's main UI widget, a Spinner
+    mSpinner = (Spinner)mActivity.findViewById(com.android.example.spinner.R.id.Spinner01);
+
+    // Set the Spinner to a known position
+    mActivity.setSpinnerPosition(TEST_STATE_DESTROY_POSITION);
+
+    // Stop the activity - The onDestroy() method should save the state of the Spinner
+    mActivity.finish();
+
+    // Re-start the Activity - the onResume() method should restore the state of the Spinner
+    mActivity = getActivity();
+
+    // Get the Spinner's current position
+    int currentPosition = mActivity.getSpinnerPosition();
+
+    // Assert that the current position is the same as the starting position
+    assertEquals(TEST_STATE_DESTROY_POSITION, currentPosition);
+</pre>
+<p>
+    The key method used here is
+    {@link android.test.ActivityInstrumentationTestCase2#getActivity()}, which is a
+    part of the instrumentation API. The Activity under test is not started until you call this
+    method. You can set up the test fixture in advance, and then call this method to start the
+    Activity.
+</p>
+<p>
+    Also, instrumentation can load both a test package and the application under test into the
+    same process. Since the application components and their tests are in the same process, the
+    tests can invoke methods in the components, and modify and examine fields in the components.
+</p>
+<h3 id="TestCaseClasses">Test case classes</h3>
+<p>
+    Android provides several test case classes that extend {@link junit.framework.TestCase} and
+    {@link junit.framework.Assert} with Android-specific setup, teardown, and helper methods.
+</p>
+<h4 id="AndroidTestCase">AndroidTestCase</h4>
+<p>
+    A useful general test case class, especially if you are
+    just starting out with Android testing, is {@link android.test.AndroidTestCase}. It extends
+    both {@link junit.framework.TestCase} and {@link junit.framework.Assert}. It provides the
+    JUnit-standard <code>setUp()</code> and <code>tearDown()</code> methods, as well as
+    all of JUnit's Assert methods. In addition, it provides methods for testing permissions, and a
+    method that guards against memory leaks by clearing out certain class references.
+</p>
+<h4 id="ComponentTestCase">Component-specific test cases</h4>
+<p>
+    A key feature of the Android testing framework is its component-specific test case classes.
+    These address specific component testing needs with methods for fixture setup and
+    teardown and component lifecycle control. They also provide methods for setting up mock objects.
+    These classes are described in the component-specific testing topics:
+</p>
+<ul>
+    <li>
+        <a href="{@docRoot}tools/testing/activity_testing.html">Activity Testing</a>
+    </li>
+    <li>
+        <a href="{@docRoot}tools/testing/contentprovider_testing.html">
+        Content Provider Testing</a>
+    </li>
+    <li>
+        <a href="{@docRoot}tools/testing/service_testing.html">Service Testing</a>
+    </li>
+</ul>
+<p>
+    Android does not provide a separate test case class for BroadcastReceiver. Instead, test a
+    BroadcastReceiver by testing the component that sends it Intent objects, to verify that the
+    BroadcastReceiver responds correctly.
+</p>
+<h4 id="ApplicationTestCase">ApplicationTestCase</h4>
+<p>
+    You use the {@link android.test.ApplicationTestCase} test case class to test the setup and
+    teardown of {@link android.app.Application} objects. These objects maintain the global state of
+    information that applies to all the components in an application package. The test case can
+    be useful in verifying that the &lt;application&gt; element in the manifest file is correctly
+    set up. Note, however, that this test case does not allow you to control testing of the
+    components within your application package.
+</p>
+<h4 id="InstrumentationTestCase">InstrumentationTestCase</h4>
+<p>
+    If you want to use instrumentation methods in a test case class, you must use
+    {@link android.test.InstrumentationTestCase} or one of its subclasses. The
+    {@link android.app.Activity} test cases extend this base class with other functionality that
+    assists in Activity testing.
+</p>
+
+<h3 id="AssertionClasses">Assertion classes</h3>
+<p>
+    Because Android test case classes extend JUnit, you can use assertion methods to display the
+    results of tests. An assertion method compares an actual value returned by a test to an
+    expected value, and throws an AssertionException if the comparison test fails. Using assertions
+    is more convenient than doing logging, and provides better test performance.
+</p>
+<p>
+    Besides the JUnit {@link junit.framework.Assert} class methods, the testing API also provides
+    the {@link android.test.MoreAsserts} and {@link android.test.ViewAsserts} classes:
+</p>
+<ul>
+    <li>
+        {@link android.test.MoreAsserts} contains more powerful assertions such as
+        {@link android.test.MoreAsserts#assertContainsRegex}, which does regular expression
+        matching.
+    </li>
+    <li>
+        {@link android.test.ViewAsserts} contains useful assertions about Views. For example
+        it contains {@link android.test.ViewAsserts#assertHasScreenCoordinates} that tests if a View
+        has a particular X and Y position on the visible screen. These asserts simplify testing of
+        geometry and alignment in the UI.
+    </li>
+</ul>
+<h3 id="MockObjectClasses">Mock object classes</h3>
+<p>
+    To facilitate dependency injection in testing, Android provides classes that create mock system
+    objects such as {@link android.content.Context} objects,
+    {@link android.content.ContentProvider} objects, {@link android.content.ContentResolver}
+    objects, and {@link android.app.Service} objects. Some test cases also provide mock
+    {@link android.content.Intent} objects. You use these mocks both to isolate tests
+    from the rest of the system and to facilitate dependency injection for testing. These classes
+    are found in the packages {@link android.test} and {@link android.test.mock}.
+</p>
+<p>
+    Mock objects isolate tests from a running system by stubbing out or overriding
+    normal operations. For example, a {@link android.test.mock.MockContentResolver}
+    replaces the normal resolver framework with its own local framework, which is isolated
+    from the rest of the system. MockContentResolver also stubs out the
+    {@link android.content.ContentResolver#notifyChange(Uri, ContentObserver, boolean)} method
+    so that observer objects outside the test environment are not accidentally triggered.
+</p>
+<p>
+    Mock object classes also facilitate dependency injection by providing a subclass of the
+    normal object that is non-functional except for overrides you define. For example, the
+    {@link android.test.mock.MockResources} object provides a subclass of
+    {@link android.content.res.Resources} in which all the methods throw Exceptions when called.
+    To use it, you override only those methods that must provide information.
+</p>
+<p>
+    These are the mock object classes available in Android:
+</p>
+<h4 id="SimpleMocks">Simple mock object classes</h4>
+<p>
+    {@link android.test.mock.MockApplication}, {@link android.test.mock.MockContext},
+    {@link android.test.mock.MockContentProvider}, {@link android.test.mock.MockCursor},
+    {@link android.test.mock.MockDialogInterface}, {@link android.test.mock.MockPackageManager}, and
+    {@link android.test.mock.MockResources} provide a simple and useful mock strategy. They are
+    stubbed-out versions of the corresponding system object class, and all of their methods throw an
+    {@link java.lang.UnsupportedOperationException} exception if called. To use them, you override
+    the methods you need in order to provide mock dependencies.
+</p>
+<p class="Note"><strong>Note:</strong>
+    {@link android.test.mock.MockContentProvider}
+    and {@link android.test.mock.MockCursor} are new as of API level 8.
+</p>
+<h4 id="ResolverMocks">Resolver mock objects</h4>
+<p>
+    {@link android.test.mock.MockContentResolver} provides isolated testing of content providers by
+    masking out the normal system resolver framework. Instead of looking in the system to find a
+    content provider given an authority string, MockContentResolver uses its own internal table. You
+    must explicitly add providers to this table using
+    {@link android.test.mock.MockContentResolver#addProvider(String,ContentProvider)}.
+</p>
+<p>
+    With this feature, you can associate a mock content provider with an authority. You can create
+    an instance of a real provider but use test data in it. You can even set the provider for an
+    authority to <code>null</code>. In effect, a MockContentResolver object isolates your test
+    from providers that contain real data. You can control the
+    function of the provider, and you can prevent your test from affecting real data.
+</p>
+<h3 id="ContextMocks">Contexts for testing</h3>
+<p>
+    Android provides two Context classes that are useful for testing:
+</p>
+<ul>
+    <li>
+        {@link android.test.IsolatedContext} provides an isolated {@link android.content.Context},
+        File, directory, and database operations that use this Context take place in a test area.
+        Though its functionality is limited, this Context has enough stub code to respond to
+        system calls.
+        <p>
+            This class allows you to test an application's data operations without affecting real
+            data that may be present on the device.
+        </p>
+    </li>
+    <li>
+        {@link android.test.RenamingDelegatingContext} provides a Context in which
+        most functions are handled by an existing {@link android.content.Context}, but
+        file and database operations are handled by a {@link android.test.IsolatedContext}.
+        The isolated part uses a test directory and creates special file and directory names.
+        You can control the naming yourself, or let the constructor determine it automatically.
+        <p>
+            This object provides a quick way to set up an isolated area for data operations,
+            while keeping normal functionality for all other Context operations.
+        </p>
+    </li>
+</ul>
+<h2 id="InstrumentationTestRunner">Running Tests</h2>
+<p>
+    Test cases are run by a test runner class that loads the test case class, set ups,
+    runs, and tears down each test. An Android test runner must also be instrumented, so that
+    the system utility for starting applications can control how the test package
+    loads test cases and the application under test. You tell the Android platform
+    which instrumented test runner to use by setting a value in the test package's manifest file.
+</p>
+<p>
+    {@link android.test.InstrumentationTestRunner} is the primary Android test runner class. It
+    extends the JUnit test runner framework and is also instrumented. It can run any of the test
+    case classes provided by Android and supports all possible types of testing.
+</p>
+<p>
+    You specify <code>InstrumentationTestRunner</code> or a subclass in your test package's
+    manifest file, in the 
+<code><a href="{@docRoot}guide/topics/manifest/instrumentation-element.html">&lt;instrumentation&gt;</a></code> 
+    element. Also, <code>InstrumentationTestRunner</code> code resides
+    in the shared library <code>android.test.runner</code>,  which is not normally linked to
+    Android code. To include it, you must specify it in a
+<code><a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library&gt;</a></code>
+    element. You do not have to set up these elements yourself. Both Eclipse with ADT and the
+    <code>android</code> command-line tool construct them automatically and add them to your
+    test package's manifest file.
+</p>
+<p class="Note">
+    <strong>Note:</strong> If you use a test runner other than
+    <code>InstrumentationTestRunner</code>, you must change the &lt;instrumentation&gt;
+    element to point to the class you want to use.
+</p>
+<p>
+    To run {@link android.test.InstrumentationTestRunner}, you use internal system classes called by
+    Android tools. When you run a test in Eclipse with ADT, the classes are called automatically.
+    When you run a test from the command line, you run these classes with
+    <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (adb)</a>.
+</p>
+<p>
+    The system classes load and start the test package, kill any processes that
+    are running an instance of the application under test, and then load a new instance of the
+    application under test. They then pass control to
+    {@link android.test.InstrumentationTestRunner}, which runs
+    each test case class in the test package. You can also control which test cases and
+    methods are run using settings in Eclipse with ADT, or using flags with the command-line tools.
+</p>
+<p>
+    Neither the system classes nor {@link android.test.InstrumentationTestRunner} run
+    the application under test. Instead, the test case does this directly. It either calls methods
+    in the application under test, or it calls its own methods that trigger lifecycle events in
+    the application under test. The application is under the complete control of the test case,
+    which allows it to set up the test environment (the test fixture) before running a test. This
+    is demonstrated in the previous <a href="#ActivitySnippet">code snippet</a> that tests an
+    Activity that displays a Spinner widget.
+</p>
+<p>
+    To learn more about running tests, please read the topics
+    <a href="{@docRoot}tools/testing/testing_eclipse.html">
+    Testing from Eclipse with ADT</a> or
+    <a href="{@docRoot}tools/testing/testing_otheride.html">
+    Testing from Other IDEs</a>.
+</p>
+<h2 id="TestResults">Seeing Test Results</h2>
+<p>
+    The Android testing framework returns test results back to the tool that started the test.
+    If you run a test in Eclipse with ADT, the results are displayed in a new JUnit view pane. If
+    you run a test from the command line, the results are displayed in <code>STDOUT</code>. In
+    both cases, you see a test summary that displays the name of each test case and method that
+    was run. You also see all the assertion failures that occurred. These include pointers to the
+    line in the test code where the failure occurred. Assertion failures also list the expected
+    value and actual value.
+</p>
+<p>
+    The test results have a format that is specific to the IDE that you are using. The test
+    results format for Eclipse with ADT is described in
+    <a href="{@docRoot}tools/testing/testing_eclipse.html#RunTestEclipse">
+    Testing from Eclipse with ADT</a>. The test results format for tests run from the
+    command line is described in
+    <a href="{@docRoot}tools/testing/testing_otheride.html#RunTestsCommand">
+    Testing from Other IDEs</a>.
+</p>
+<h2 id="Monkeys">monkey and monkeyrunner</h2>
+<p>
+    The SDK provides two tools for functional-level application testing:
+</p>
+    <ul>
+        <li>
+The <a href="{@docRoot}tools/help/monkey.html">UI/Application Exerciser Monkey</a>,
+            usually called "monkey", is a command-line tool that sends pseudo-random streams of
+            keystrokes, touches, and gestures to a device. You run it with the
+            <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a> (adb) tool.
+            You use it to stress-test your application and report back errors that are encountered.
+            You can repeat a stream of events by running the tool each time with the same random
+            number seed.
+        </li>
+        <li>
+    The <a href="{@docRoot}tools/help/monkeyrunner_concepts.html">monkeyrunner</a> tool
+            is an API and execution environment for test programs written in Python. The API
+            includes functions for connecting to a device, installing and uninstalling packages,
+            taking screenshots, comparing two images, and running a test package against an
+            application. Using the API, you can write a wide range of large, powerful, and complex
+            tests. You run programs that use the API with the <code>monkeyrunner</code> command-line
+            tool.
+        </li>
+    </ul>
+<h2 id="PackageNames">Working With Package names</h2>
+<p>
+    In the test environment, you work with both Android application package names and
+    Java package identifiers. Both use the same naming format, but they represent substantially
+    different entities. You need to know the difference to set up your tests correctly.
+</p>
+<p>
+    An Android package name is a unique system name for a <code>.apk</code> file, set by the
+    &quot;android:package&quot; attribute of the &lt;manifest&gt; element in the package's
+    manifest. The Android package name of your test package must be different from the
+    Android package name of the application under test. By default, Android tools create the
+    test package name by appending ".test" to the package name of the application under test.
+</p>
+<p>
+    The test package also uses an Android package name to target the application package it
+    tests. This is set in the &quot;android:targetPackage&quot; attribute of the
+    &lt;instrumentation&gt; element in the test package's manifest.
+</p>
+<p>
+    A Java package identifier applies to a source file. This package name reflects the directory
+    path of the source file. It also affects the visibility of classes and members to each other.
+</p>
+<p>
+    Android tools that create test projects set up an Android test package name for you.
+    From your input, the tools set up the test package name and the target package name for the
+    application under test. For these tools to work, the application project must already exist.
+</p>
+<p>
+    By default, these tools set the Java package identifier for the test class to be the same
+    as the Android package identifier. You may want to change this if you want to expose
+    members in the application under test by giving them package visibility. If you do this,
+    change only the Java package identifier, not the Android package names, and change only the
+    test case source files. Do not change the Java package name of the generated
+    <code>R.java</code> class in your test package, because it will then conflict with the
+    <code>R.java</code> class in the application under test. Do not change the Android package name
+    of your test package to be the same as the application it tests, because then their names
+    will no longer be unique in the system.
+</p>
+<h2 id="WhatToTest">What to Test</h2>
+<p>
+    The topic <a href="{@docRoot}tools/testing/what_to_test.html">What To Test</a>
+    describes the key functionality you should test in an Android application, and the key
+    situations that might affect that functionality.
+</p>
+<p>
+    Most unit testing is specific to the Android component you are testing.
+    The topics <a href="{@docRoot}tools/testing/activity_testing.html">Activity Testing</a>,
+    <a href="{@docRoot}tools/testing/contentprovider_testing.html">
+    Content Provider Testing</a>, and <a href="{@docRoot}tools/testing/service_testing.html">
+    Service Testing</a> each have a section entitled "What To Test" that lists possible testing
+    areas.
+</p>
+<p>
+    When possible, you should run these tests on an actual device. If this is not possible, you can
+    use the <a href="{@docRoot}tools/devices/emulator.html">Android Emulator</a> with
+    Android Virtual Devices configured for the hardware, screens, and versions you want to test.
+</p>
+<h2 id="NextSteps">Next Steps</h2>
+<p>
+    To learn how to set up and run tests in Eclipse, please refer to 
+<a href="{@docRoot}tools/testing/testing_eclipse.html">Testing from Eclipse with ADT</a>.
+    If you're not working in Eclipse, refer to 
+<a href="{@docRoot}tools/testing/testing_otheride.html">Testing from Other IDEs</a>.
+</p>
+<p>
+    If you want a step-by-step introduction to Android testing, try the
+    <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing Tutorial</a>.
+</p>
diff --git a/docs/html/tools/testing/testing_eclipse.jd b/docs/html/tools/testing/testing_eclipse.jd
new file mode 100644
index 0000000..7d3be47
--- /dev/null
+++ b/docs/html/tools/testing/testing_eclipse.jd
@@ -0,0 +1,535 @@
+page.title=Testing from Eclipse with ADT
+parent.title=Testing
+parent.link=index.html
+@jd:body
+<div id="qv-wrapper">
+    <div id="qv">
+        <h2>In this document</h2>
+            <ol>
+                <li><a href="#CreateTestProjectEclipse">Creating a Test Project</a></li>
+                <li><a href="#CreateTestAppEclipse">Creating a Test Package</a></li>
+                <li><a href="#RunTestEclipse">Running Tests</a></li>
+            </ol>
+    </div>
+</div>
+<p>
+    This topic explains how create and run tests of Android applications in Eclipse with ADT.
+    Before you read this topic, you should read about how to create an Android application with the
+    basic processes for creating and running applications with ADT, as described in
+    <a href="{@docRoot}tools/projects/projects-eclipse.html">Managing Projects from
+Eclipse</a>
+    and <a href="{@docRoot}tools/building/building-eclipse.html">Building and Running
+from Eclipse</a>.
+    You may also want to read
+    <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
+    which provides an overview of the Android testing framework.
+</p>
+<p>
+    ADT provides several features that help you set up and manage your testing environment
+    effectively:
+</p>
+    <ul>
+        <li>
+            It lets you quickly create a test project and link it to the application under test.
+            When it creates the test project, it automatically inserts the necessary
+            <code>&lt;instrumentation&gt;</code> element in the test package's manifest file.
+        </li>
+        <li>
+            It lets you quickly import the classes of the application under test, so that your
+            tests can inspect them.
+        </li>
+        <li>
+            It lets you create run configurations for your test package and include in
+            them flags that are passed to the Android testing framework.
+        </li>
+        <li>
+            It lets you run your test package without leaving Eclipse. ADT builds both the
+            application under test and the test package automatically, installs them if
+            necessary to your device or emulator, runs the test package, and displays the
+            results in a separate window in Eclipse.
+        </li>
+    </ul>
+<p>
+    If you are not developing in Eclipse or you want to learn how to create and run tests from the
+    command line, see
+    <a href="{@docRoot}tools/testing/testing_otheride.html">Testing from Other IDEs</a>.
+</p>
+<h2 id="CreateTestProjectEclipse">Creating a Test Project</h2>
+<p>
+    To set up a test environment for your Android application, you must first create a separate
+    project that holds the test code. The new project follows the directory structure
+    used for any Android application. It includes the same types of content and files, such as
+    source code, resources, a manifest file, and so forth. The test package you
+    create is connected to the application under test by an
+    <a href="{@docRoot}guide/topics/manifest/instrumentation-element.html">
+    <code>&lt;instrumentation&gt;</code></a> element in its manifest file.
+</p>
+<p>
+    The <em>New Android Test Project</em> dialog makes it easy for you to generate a
+    new test project that has the proper structure, including the
+    <code>&lt;instrumentation&gt;</code> element in the manifest file. You can use the New
+    Android Test Project dialog to generate the test project at any time. The dialog appears
+    just after you create a new Android main application project, but you can also run it to
+    create a test project for a project that you created previously.
+</p>
+<p>
+    To create a test project in Eclipse with ADT:
+</p>
+<ol>
+    <li>
+        In Eclipse, select <strong>File &gt; New &gt; Other</strong>. This opens the <em>Select a
+        Wizard</em> dialog.
+    </li>
+    <li>
+        In the dialog, in the <em>Wizards</em> drop-down list, find the entry for Android, then
+        click the toggle to the left. Select <strong>Android Test Project</strong>, then at the
+        bottom of the dialog click <strong>Next</strong>. The <em>New Android Test Project</em>
+        wizard appears.
+    </li>
+    <li>
+        Next to <em>Test Project Name</em>, enter a name for the project. You may use any name,
+        but you may want to associate the name with the project name for the application under test.
+        One way to do this is to take the application's project name, append the string "Test" to
+        it, and then use this as the test package project name.
+        <p>
+            The name becomes part of the suggested project path, but you can change this in the
+            next step.
+        </p>
+    </li>
+    <li>
+        In the <em>Content</em> panel, examine the suggested path to the project.
+        If <em>Use default location</em> is set, then the wizard will suggest a path that is
+        a concatenation of the workspace path and the project name you entered. For example,
+        if your workspace path is <code>/usr/local/workspace</code> and your project name is
+        <code>MyTestApp</code>, then the wizard will suggest
+        <code>/usr/local/workspace/MyTestApp</code>. To enter your own
+        choice for a path, unselect <em>Use default location</em>, then enter or browse to the
+        path where you want your project.
+        <p>
+            To learn more about choosing the location of test projects, please read
+            <a href="{@docRoot}tools/testing/testing_android.html#TestProjectPaths">
+            Testing Fundamentals</a>.
+        </p>
+    </li>
+    <li>
+        In the Test Target panel, set An Existing Android Project, click Browse, then select your
+        Android application from the list. You now see that the wizard has completed the Test
+        Target Package, Application Name, and Package Name fields for you (the latter two are in
+        the Properties panel).
+    </li>
+    <li>
+        In the Build Target panel, select the Android SDK platform that the application under test
+        uses.
+    </li>
+    <li>
+        Click Finish to complete the wizard. If Finish is disabled, look for error messages at the
+        top of the wizard dialog, and then fix any problems.
+    </li>
+</ol>
+<h2 id="CreateTestAppEclipse">Creating a Test Package</h2>
+<p>
+    Once you have created a test project, you populate it with a test package. This package does not
+    require an Activity, although you can define one if you wish. Although your test package can
+    combine Activity classes, test case classes, or ordinary classes, your main test case
+    should extend one of the Android test case classes or JUnit classes, because these provide the
+    best testing features.
+</p>
+<p>
+    Test packages do not need to have an Android GUI. When you run the package in
+    Eclipse with ADT, its results appear in the JUnit view. Running tests and seeing the results is
+    described in more detail in the section <a href="#RunTestEclipse">Running Tests</a>.
+</p>
+
+<p>
+    To create a test package, start with one of Android's test case classes defined in
+    {@link android.test android.test}. These extend the JUnit
+    {@link junit.framework.TestCase TestCase} class. The Android test classes for Activity objects
+    also provide instrumentation for testing an Activity. To learn more about test case
+    classes, please read the topic <a href="{@docRoot}tools/testing/testing_android.html">
+    Testing Fundamentals</a>.
+</p>
+<p>
+    Before you create your test package, you choose the Java package identifier you want to use
+    for your test case classes and the Android package name you want to use. To learn more
+    about this, please read
+    <a href="{@docRoot}tools/testing/testing_android.html#PackageNames">
+    Testing Fundamentals</a>.
+</p>
+<p>
+    To add a test case class to your project:
+</p>
+<ol>
+    <li>
+        In the <em>Project Explorer</em> tab, open your test project, then open the <em>src</em>
+        folder.
+    </li>
+    <li>
+        Find the Java package identifier set by the projection creation wizard. If you haven't
+        added classes yet, this node won't have any children, and its icon will not be filled in.
+        If you want to change the identifier value, right-click the identifier and select
+        <strong>Refactor</strong> &gt; <strong>Rename</strong>, then enter the new name.
+    </li>
+    <li>
+        When you are ready, right-click the Java package identifier again and select
+        <strong>New</strong> &gt; <strong>Class</strong>. This displays the <em>New Java Class</em>
+        dialog, with the <em>Source folder</em> and <em>Package</em> values already set.
+    </li>
+    <li>
+        In the <em>Name</em> field, enter a name for the test case class. One way to choose a
+        class name is to append the string "Test" to the class of the component you are testing.
+        For example, if you are testing the class MyAppActivity, your test case class
+        name would be MyAppActivityTest. Leave the modifiers set to <em>public</em>.
+    </li>
+    <li>
+        In the <em>Superclass</em> field, enter the name of the Android test case class you
+        are extending. You can also browse the available classes.
+    </li>
+    <li>
+        In <em>Which method stubs would you like to create?</em>, unset all the options, then
+        click <strong>Finish</strong>. You will set up the constructor manually.
+    </li>
+    <li>
+        Your new class appears in a new Java editor pane.
+    </li>
+</ol>
+<p>
+    You now have to ensure that the constructor is set up correctly. Create a constructor for your
+    class that has no arguments; this is required by JUnit. As the first statement in this
+    constructor, add a call to the base class' constructor. Each base test case class has its
+    own constructor signature. Refer to the class documentation in the documentation for
+    {@link android.test} for more information.
+</p>
+<p>
+    To control your test environment, you will want to override the <code>setUp()</code> and
+    <code>tearDown()</code> methods:
+</p>
+<ul>
+    <li>
+        <code>setUp()</code>: This method is invoked before any of the test methods in the class.
+        Use it to set up the environment for the test (the test fixture. You can use
+        <code>setUp()</code> to instantiate a new Intent with the action <code>ACTION_MAIN</code>.
+        You can then use this intent to start the Activity under test.
+    </li>
+    <li>
+        <code>tearDown()</code>: This method is invoked after all the test methods in the class. Use
+        it to do garbage collection and to reset the test fixture.
+    </li>
+</ul>
+<p>
+    Another useful convention is to add the method <code>testPreconditions()</code> to your test
+    class. Use this method to test that the application under test is initialized correctly. If this
+    test fails, you know that that the initial conditions were in error. When this happens, further
+    test results are suspect, regardless of whether or not the tests succeeded.
+</p>
+<p>
+    The Resources tab contains an
+    <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing</a>
+    tutorial with more information about creating test classes and methods.
+</p>
+<h2 id="RunTestEclipse">Running Tests</h2>
+    <div class="sidebox-wrapper">
+        <div class="sidebox">
+            <h2>Running tests from the command line</h2>
+                <p>
+                    If you've created your tests in Eclipse, you can still run your tests and test
+                    suites by using command-line tools included with the Android SDK. You may want
+                    to do this, for example, if you have a large number of tests to run, if you
+                    have a large test case, or if you want a fine level of control over which
+                    tests are run at a particular time.
+                </p>
+                <p>
+                    To run tests created in Eclipse with ADT with command-line tools, you must first
+                    install additional files into the test project using the <code>android</code>
+                    tool's "create test-project" option. To see how to do this, read
+                   <a href="{@docRoot}tools/testing/testing_otheride.html#CreateProject">
+                    Testing in Other IDEs</a>.
+                </p>
+        </div>
+    </div>
+<p>
+    When you run a test package in Eclipse with ADT, the output appears in the Eclipse JUnit view.
+    You can run the entire test package or one test case class. To do run tests, Eclipse runs the
+    <code>adb</code> command for running a test package, and displays the output, so there is no
+    difference between running tests inside Eclipse and running them from the command line.
+</p>
+<p>
+    As with any other package, to run a test package in Eclipse with ADT you must either attach a
+    device to your computer or use the Android emulator. If you use the emulator, you must have an
+    Android Virtual Device (AVD) that uses the same target as the test package.
+</p>
+<p>
+    To run a test in Eclipse, you have two choices:</p>
+<ul>
+    <li>
+        Run a test just as you run an application, by selecting
+        <strong>Run As... &gt; Android JUnit Test</strong> from the project's context menu or
+        from the main menu's <strong>Run</strong> item.
+    </li>
+    <li>
+        Create an Eclipse run configuration for your test project. This is useful if you want
+        multiple test suites, each consisting of selected tests from the project. To run
+        a test suite, you run the test configuration.
+        <p>
+            Creating and running test configurations is described in the next section.
+        </p>
+    </li>
+</ul>
+<p>
+    To create and run a test suite using a run configuration:
+</p>
+<ol>
+    <li>
+        In the Package Explorer, select the test project, then from the main menu, select
+        <strong>Run &gt; Run Configurations...</strong>. The Run Configurations dialog appears.
+    </li>
+    <li>
+        In the left-hand pane, find the Android JUnit Test entry. In the right-hand pane, click the
+        Test tab. The Name: text box shows the name of your project. The Test class: dropdown box
+        shows one of the test classes in your project.
+    </li>
+    <li>
+        To run one test class, click  Run a single test, then enter your project name in the
+        Project: text box and the class name in the Test class: text box.
+        <p>
+            To run all the test classes, click Run all tests in the selected project or package,
+            then enter the project or package name in the text box.
+        </p>
+    </li>
+    <li>
+        Now click the Target tab.
+        <ul>
+            <li>
+                Optional: If you are using the emulator, click Automatic, then in the Android
+                Virtual Device (AVD) selection table, select an existing AVD.
+            </li>
+            <li>
+                In the Emulator Launch Parameters pane, set the Android emulator flags you want to
+                use. These are documented in the topic
+                <a href="{@docRoot}tools/help/emulator.html#startup-options">
+                Android Emulator</a>.
+            </li>
+        </ul>
+    </li>
+    <li>
+        Click the Common tab. In the Save As pane, click Local to save this run configuration
+        locally, or click Shared to save it to another project.
+    </li>
+    <li>
+        Optional: Add the configuration to the Run toolbar and the <strong>Favorites</strong>
+        menu: in the Display in Favorites pane click the checkbox next to Run.
+    </li>
+    <li>
+        Optional: To add this configuration to the <strong>Debug</strong> menu and toolbar, click
+        the checkbox next to Debug.
+    </li>
+    <li>
+        To save your settings, click Close.<br/>
+        <p class="note"><strong>Note:</strong>
+            Although you can run the test immediately by clicking Run, you should save the test
+            first and then run it by selecting it from the Eclipse standard toolbar.
+        </p>
+    </li>
+    <li>
+        On the Eclipse standard toolbar, click the down arrow next to the green Run arrow. This
+        displays a menu of saved Run and Debug configurations.
+    </li>
+    <li>
+        Select the test run configuration you just created. The test starts.
+    </li>
+</ol>
+<p>
+    The progress of your test appears in the Console view as a series of messages. Each message is
+    preceded by a timestamp and the <code>.apk</code> filename to which it applies. For example,
+    this message appears when you run a test to the emulator, and the emulator is not yet started:
+</p>
+<div class="sidebox-wrapper">
+    <div class="sidebox">
+        <h2>Message Examples</h2>
+        <p>
+            The examples shown in this section come from the
+            <a href="{@docRoot}resources/samples/SpinnerTest/index.html">SpinnerTest</a>
+            sample test package, which tests the
+            <a href="{@docRoot}resources/samples/Spinner/index.html">Spinner</a>
+            sample application. This test package is also featured in the
+            <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing</a>
+            tutorial.
+        </p>
+    </div>
+</div>
+<pre>
+    [<em>yyyy-mm-dd hh:mm:ss</em> - <em>testfile</em>] Waiting for HOME ('android.process.acore') to be launched...
+</pre>
+<p>
+    In the following description of these messages, <code><em>devicename</em></code> is the name of
+    the device or emulator you are using to run the test, and <code><em>port</em></code> is the
+    port number for the device. The name and port number are in the format used by the
+    <code><a href="{@docRoot}tools/help/adb.html#devicestatus">adb devices</a></code>
+    command. Also, <code><em>testfile</em></code> is the <code>.apk</code> filename of the test
+    package you are running, and <em>appfile</em> is the filename of the application under test.
+</p>
+<ul>
+    <li>
+        If you are using an emulator and you have not yet started it, then Eclipse
+        first starts the emulator. When this is complete, you see
+        the message:
+        <p>
+            <code>HOME is up on device '<em>devicename</em>-<em>port</em>'</code>
+        </p>
+    </li>
+    <li>
+        If you have not already installed your test package, then you see
+        the message:
+        <p>
+            <code>Uploading <em>testfile</em> onto device '<em>devicename</em>-<em>port</em>'
+            </code>
+        </p>
+        <p>
+            then the message <code>Installing <em>testfile</em></code>.
+        </p>
+        <p>
+            and finally the message <code>Success!</code>
+        </p>
+    </li>
+</ul>
+<p>
+    The following lines are an example of this message sequence:
+</p>
+<code>
+[2010-07-01 12:44:40 - MyTest] HOME is up on device 'emulator-5554'<br>
+[2010-07-01 12:44:40 - MyTest] Uploading MyTest.apk onto device 'emulator-5554'<br>
+[2010-07-01 12:44:40 - MyTest] Installing MyTest.apk...<br>
+[2010-07-01 12:44:49 - MyTest] Success!<br>
+</code>
+<br>
+<ul>
+    <li>
+        Next, if you have not yet installed the application under test to the device or
+        emulator, you see the message
+        <p>
+        <code>Project dependency found, installing: <em>appfile</em></code>
+        </p>
+        <p>
+            then the message <code>Uploading <em>appfile</em></code> onto device
+            '<em>devicename</em>-<em>port</em>'
+        </p>
+        <p>
+            then the message <code>Installing <em>appfile</em></code>
+        </p>
+        <p>
+            and finally the message <code>Success!</code>
+        </p>
+    </li>
+</ul>
+<p>
+    The following lines are an example of this message sequence:
+</p>
+<code>
+[2010-07-01 12:44:49 - MyTest] Project dependency found, installing: MyApp<br>
+[2010-07-01 12:44:49 - MyApp] Uploading MyApp.apk onto device 'emulator-5554'<br>
+[2010-07-01 12:44:49 - MyApp] Installing MyApp.apk...<br>
+[2010-07-01 12:44:54 - MyApp] Success!<br>
+</code>
+<br>
+<ul>
+    <li>
+        Next, you see the message
+        <code>Launching instrumentation <em>instrumentation_class</em> on device
+        <em>devicename</em>-<em>port</em></code>
+        <p>
+            <code>instrumentation_class</code> is the fully-qualified class name of the
+            instrumentation test runner you have specified (usually
+            {@link android.test.InstrumentationTestRunner}.
+        </p>
+    </li>
+    <li>
+        Next, as {@link android.test.InstrumentationTestRunner} builds a list of tests to run,
+        you see the message
+        <p>
+            <code>Collecting test information</code>
+        </p>
+        <p>
+            followed by
+        </p>
+        <p>
+            <code>Sending test information to Eclipse</code>
+        </p>
+    </li>
+    <li>
+        Finally, you see the message <code>Running tests</code>, which indicates that your tests
+        are running. At this point, you should start seeing the test results in the JUnit view.
+        When the tests are finished, you see the console message <code>Test run complete</code>.
+        This indicates that your tests are finished.
+    </li>
+</ul>
+<p>
+    The following lines are an example of this message sequence:
+</p>
+<code>
+[2010-01-01 12:45:02 - MyTest] Launching instrumentation android.test.InstrumentationTestRunner on device emulator-5554<br>
+[2010-01-01 12:45:02 - MyTest] Collecting test information<br>
+[2010-01-01 12:45:02 - MyTest] Sending test information to Eclipse<br>
+[2010-01-01 12:45:02 - MyTest] Running tests...<br>
+[2010-01-01 12:45:22 - MyTest] Test run complete<br>
+</code>
+<br>
+<p>
+    The test results appear in the JUnit view. This is divided into an upper summary pane,
+    and a lower stack trace pane.
+</p>
+<p>
+    The upper pane contains test information. In the pane's header, you see the following
+    information:
+</p>
+<ul>
+    <li>
+        Total time elapsed for the test package (labeled Finished after <em>x</em> seconds).
+    </li>
+    <li>
+        Number of runs (Runs:) - the number of tests in the entire test class.
+    </li>
+    <li>
+        Number of errors (Errors:) - the number of program errors and exceptions encountered
+        during the test run.
+    </li>
+    <li>
+        Number of failures (Failures:) - the number of test failures encountered during the test
+        run. This is the number of assertion failures. A test can fail even if the program does
+        not encounter an error.
+    </li>
+    <li>
+        A progress bar. The progress bar extends from left to right as the tests run. If all the
+        tests succeed, the bar remains green. If a test fails, the bar turns from green to red.
+    </li>
+</ul>
+<p>
+    The body of the upper pane contains the details of the test run. For each test case class
+    that was run, you see a line with the class name. To look at the results for the individual
+    test methods in that class, you click the left arrow to expand the line. You now see a
+    line for each test method in the class, and to its right the time it took to run.
+    If you double-click the method name, Eclipse opens the test class source in an editor view
+    pane and moves the focus to the first line of the test method.
+</p>
+<p>
+    The results of a successful test are shown in figure 1.
+</p>
+<a href="{@docRoot}images/testing/eclipse_test_results.png">
+    <img src="{@docRoot}images/testing/eclipse_test_results.png"
+         alt="Messages for a successful test" height="327px" id="TestResults"/>
+</a>
+<p class="img-caption">
+    <strong>Figure 1.</strong> Messages for a successful test.
+</p>
+<p>
+    The lower pane is for stack traces. If you highlight a failed test in the upper pane, the
+    lower pane contains a stack trace for the test. If a line corresponds to a point in your
+    test code, you can double-click it to display the code in an editor view pane, with the
+    line highlighted. For a successful test, the lower pane is empty.
+</p>
+<p>The results of a failed test are shown in figure 2.</p>
+<a href="{@docRoot}images/testing/eclipse_test_run_failure.png">
+    <img src="{@docRoot}images/testing/eclipse_test_run_failure.png"
+         alt="" height="372px" id="TestRun"/>
+</a>
+<p class="img-caption">
+    <strong>Figure 2.</strong> Messages for a test failure.
+</p>
diff --git a/docs/html/tools/testing/testing_otheride.jd b/docs/html/tools/testing/testing_otheride.jd
new file mode 100644
index 0000000..0678f52
--- /dev/null
+++ b/docs/html/tools/testing/testing_otheride.jd
@@ -0,0 +1,690 @@
+page.title=Testing from Other IDEs
+parent.title=Testing
+parent.link=index.html
+@jd:body
+
+<div id="qv-wrapper">
+    <div id="qv">
+        <h2>In this document</h2>
+            <ol>
+                <li>
+                    <a href="#CreateTestProjectCommand">Working with Test Projects</a>
+                    <ol>
+                        <li>
+                            <a href="#CreateTestProject">Creating a test project</a>
+                        </li>
+                        <li>
+                            <a href="#UpdateTestProject">Updating a test project</a>
+                        </li>
+                    </ol>
+                </li>
+                <li>
+                    <a href="#CreateTestApp">Creating a Test Package</a>
+                </li>
+                <li>
+                    <a href="#RunTestsCommand">Running Tests</a>
+                    <ol>
+                        <li>
+                            <a href="#RunTestsAnt">Quick build and run with Ant</a>
+                        </li>
+                        <li>
+                            <a href="#RunTestsDevice">Running tests on a device or emulator</a>
+                        </li>
+                    </ol>
+                </li>
+                <li>
+                    <a href="#AMSyntax">Using the Instrument Command</a>
+                    <ol>
+                        <li>
+                            <a href="#AMOptionsSyntax">Instrument options</a>
+                        </li>
+                        <li>
+                            <a href="#RunTestExamples">Instrument examples</a>
+                        </li>
+                    </ol>
+                </li>
+            </ol>
+        <h2>See Also</h2>
+            <ol>
+                <li>
+                    <a href="{@docRoot}tools/testing/testing_android.html">
+                        Testing Fundamentals</a>
+                </li>
+                <li>
+                    <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a>
+                </li>
+            </ol>
+    </div>
+</div>
+<p>
+    This document describes how to create and run tests directly from the command line.
+    You can use the techniques described here if you are developing in an IDE other than Eclipse
+    or if you prefer to work from the command line. This document assumes that you already know how
+    to create a Android application in your programming environment. Before you start this
+    document, you should read the topic
+    <a href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
+    which provides an overview of Android testing.
+</p>
+<p>
+    If you are developing in Eclipse with ADT, you can set up and run your tests
+    directly in Eclipse. For more information, please read
+    <a href="{@docRoot}tools/testing/testing_eclipse.html">
+    Testing from Eclipse with ADT</a>.
+</p>
+<h2 id="CreateTestProjectCommand">Working with Test Projects</h2>
+<p>
+    You use the <code>android</code> tool to create test projects.
+    You also use <code>android</code> to convert existing test code into an Android test project,
+    or to add the <code>run-tests</code> Ant target to an existing Android test project.
+    These operations are described in more detail in the section <a href="#UpdateTestProject">
+    Updating a test project</a>. The <code>run-tests</code> target is described in
+    <a href="#RunTestsAnt">Quick build and run with Ant</a>.
+</p>
+<h3 id="CreateTestProject">Creating a test project</h3>
+<p>
+    To create a test project with the <code>android</code> tool, enter:
+</p>
+<pre>
+android create test-project -m &lt;main_path&gt; -n &lt;project_name&gt; -p &lt;test_path&gt;
+</pre>
+<p>
+    You must supply all the flags. The following table explains them in detail:
+</p>
+<table>
+    <tr>
+        <th>Flag</th>
+        <th>Value</th>
+        <th>Description</th>
+    </tr>
+    <tr>
+        <td><code>-m, --main</code></td>
+        <td>
+            Path to the project of the application under test, relative to the test package
+            directory.
+        </td>
+        <td>
+            For example, if the application under test is in <code>source/HelloAndroid</code>, and
+            you want to create the test project in <code>source/HelloAndroidTest</code>, then the
+            value of <code>--main</code> should be <code>../HelloAndroid</code>.
+        <p>
+            To learn more about choosing the location of test projects, please read
+            <a href="{@docRoot}tools/testing/testing_android.html#TestProjects">
+            Testing Fundamentals</a>.
+        </p>
+        </td>
+    </tr>
+    <tr>
+        <td><code>-n, --name</code></td>
+        <td>Name that you want to give the test project.</td>
+        <td>&nbsp;</td>
+    </tr>
+    <tr>
+        <td><code>-p, --path</code></td>
+        <td>Directory in which you want to create the new test project.</td>
+        <td>
+            The <code>android</code> tool creates the test project files and directory structure
+            in this directory. If the directory does not exist, <code>android</code> creates it.
+        </td>
+    </tr>
+</table>
+<p>
+    If the operation is successful, <code>android</code> lists to STDOUT the names of the files
+    and directories it has created.
+</p>
+<p>
+    This creates a new test project with the appropriate directories and build files. The directory
+    structure and build file contents are identical to those in a regular Android application
+    project. They are described in detail in the topic
+    <a href="{@docRoot}tools/projects/index.html">Managing Projects</a>.
+</p>
+<p>
+    The operation also creates an <code>AndroidManifest.xml</code> file with instrumentation
+    information. When you run the test, Android uses this information to load the application you
+    are testing and control it with instrumentation.
+</p>
+<p>
+    For example, suppose you create a project in the directory <code>~/source/HelloAndroid</code>,
+with the package name <code>com.example.helloandroid</code>,
+    and the activity name <code>HelloAndroid</code>. You can to create the test for this in
+    <code>~/source/HelloAndroidTest</code>. To do so, you enter:
+</p>
+<pre>
+$ cd ~/source
+$ android create test-project -m ../HelloAndroid -n HelloAndroidTest -p HelloAndroidTest
+</pre>
+<p>
+    This creates a directory called <code>~/src/HelloAndroidTest</code>. In the new directory you
+    see the file <code>AndroidManifest.xml</code>. This file contains the following
+    instrumentation-related elements and attributes:
+</p>
+<ul>
+    <li>
+        <code>&lt;application&gt;</code>: to contain the
+        <code>&lt;uses-library&gt;</code> element.
+    </li>
+    <li>
+        <code>&lt;uses-library android:name=&quot;android.test.runner&quot;</code>:
+        specifies this testing application uses the <code>android.test.runner</code> library.
+    </li>
+    <li>
+        <code>&lt;instrumentation&gt;</code>: contains attributes that control Android
+        instrumentation. The attributes are:
+        <ul>
+            <li>
+                <code>android:name=&quot;android.test.InstrumentationTestRunner&quot;</code>:
+                {@link android.test.InstrumentationTestRunner} runs test cases. It extends both
+                JUnit test case runner classes and Android instrumentation classes.
+            </li>
+            <li>
+                <code>android:targetPackage=&quot;com.example.helloandroid&quot;</code>: specifies
+                that the tests in HelloAndroidTest should be run against the application with the
+                <em>Android</em> package name <code>com.example.helloandroid</code>.
+            </li>
+            <li>
+                <code>android:label=&quot;Tests for .HelloAndroid&quot;</code>: specifies a
+                user-readable label for the instrumentation class. By default,
+                the <code>android</code> tool gives it the value &quot;Tests for &quot; plus
+                the name of the main Activity of the application under test.
+            </li>
+        </ul>
+    </li>
+</ul>
+<h3 id="UpdateTestProject">Updating a test project</h3>
+<p>
+    You use the <code>android</code> tool when you need to change the path to the
+    project of the application under test. If you are changing an existing test project created in
+    Eclipse with ADT so that you can also build and run it from the command line, you must use the
+    "create" operation. See the section <a href="#CreateTestProject">Creating a test project</a>.
+</p>
+<p class="note">
+    <strong>Note:</strong> If you change the Android package name of the application under test,
+    you must <em>manually</em> change the value of the <code>&lt;android:targetPackage&gt;</code>
+    attribute within the <code>AndroidManifest.xml</code> file of the test package.
+    Running <code>android update test-project</code> does not do this.
+</p>
+<p>
+  To update a test project with the <code>android</code> tool, enter:
+</p>
+<pre>android update test-project -m &lt;main_path&gt; -p &lt;test_path&gt;</pre>
+
+<table>
+    <tr>
+        <th>Flag</th>
+        <th>Value</th>
+        <th>Description</th>
+    </tr>
+    <tr>
+        <td><code>-m, --main</code></td>
+        <td>The path to the project of the application under test, relative to the test project</td>
+        <td>
+            For example, if the application under test is in <code>source/HelloAndroid</code>, and
+            the test project is in <code>source/HelloAndroidTest</code>, then the value for
+            <code>--main</code> is <code>../HelloAndroid</code>.
+        </td>
+    </tr>
+    <tr>
+        <td><code>-p, --path</code></td>
+        <td>The of the test project.</td>
+        <td>
+            For example, if the test project is in <code>source/HelloAndroidTest</code>, then the
+            value for <code>--path</code> is <code>HelloAndroidTest</code>.
+        </td>
+    </tr>
+</table>
+<p>
+    If the operation is successful, <code>android</code> lists to STDOUT the names of the files
+    and directories it has created.
+</p>
+<h2 id="CreateTestApp">Creating a Test Package</h2>
+<p>
+    Once you have created a test project, you populate it with a test package.
+    The application does not require an {@link android.app.Activity Activity},
+    although you can define one if you wish. Although your test package can
+    combine Activities, Android test class extensions, JUnit extensions, or
+    ordinary classes, you should extend one of the Android test classes or JUnit classes,
+    because these provide the best testing features.
+</p>
+<p>
+    If you run your tests with {@link android.test.InstrumentationTestRunner}
+    (or a related test runner), then it will run all the methods in each class. You can modify
+    this behavior by using the {@link junit.framework.TestSuite TestSuite} class.
+</p>
+
+<p>
+    To create a test package, start with one of Android's test classes in the Java package
+    {@link android.test android.test}. These extend the JUnit
+    {@link junit.framework.TestCase TestCase} class. With a few exceptions, the Android test
+    classes also provide instrumentation for testing.
+</p>
+<p>
+    For test classes that extend {@link junit.framework.TestCase TestCase}, you probably want to
+    override the <code>setUp()</code> and <code>tearDown()</code> methods:
+</p>
+<ul>
+    <li>
+        <code>setUp()</code>: This method is invoked before any of the test methods in the class.
+        Use it to set up the environment for the test. You can use <code>setUp()</code>
+        to instantiate a new <code>Intent</code> object with the action <code>ACTION_MAIN</code>.
+        You can then use this intent to start the Activity under test.
+        <p class="note">
+            <strong>Note:</strong> If you override this method, call
+            <code>super.setUp()</code> as the first statement in your code.
+        </p>
+    </li>
+    <li>
+        <code>tearDown()</code>: This method is invoked after all the test methods in the class. Use
+        it to do garbage collection and re-setting before moving on to the next set of tests.
+        <p class="note"><strong>Note:</strong> If you override this method, you must call
+        <code>super.tearDown()</code> as the <em>last</em> statement in your code.</p>
+    </li>
+</ul>
+<p>
+    Another useful convention is to add the method <code>testPreConditions()</code> to your test
+    class. Use this method to test that the application under test is initialized correctly. If this
+    test fails, you know that that the initial conditions were in error. When this happens, further
+    test results are suspect, regardless of whether or not the tests succeeded.
+</p>
+<p>
+    To learn more about creating test packages, see the topic <a
+    href="{@docRoot}tools/testing/testing_android.html">Testing Fundamentals</a>,
+    which provides an overview of Android testing. If you prefer to follow a tutorial,
+    try the <a href="{@docRoot}tools/testing/activity_test.html">Activity Testing</a>
+    tutorial, which leads you through the creation of tests for an actual Android application.
+</p>
+<h2 id="RunTestsCommand">Running Tests</h2>
+<p>
+    You run tests from the command line, either with Ant or with an
+    <a href="{@docRoot}tools/help/adb.html">
+    Android Debug Bridge (adb)</a> shell.
+</p>
+<h3 id="RunTestsAnt">Quick build and run with Ant</h3>
+<p>
+    You can use Ant to run all the tests in your test project, using the target
+    <code>run-tests</code>, which is created automatically when you create a test project with
+    the <code>android</code> tool.
+</p>
+<p>
+    This target re-builds your main project and test project if necessary, installs the test
+    application to the current AVD or device, and then runs all the test classes in the test
+    application. The results are directed to <code>STDOUT</code>.
+</p>
+<p>
+    You can update an existing test project to use this feature. To do this, use the
+    <code>android</code> tool with the <code>update test-project</code> option. This is described
+    in the section <a href="#UpdateTestProject">Updating a test project</a>.
+</p>
+<h3 id="RunTestsDevice">Running tests on a device or emulator</h3>
+<p>
+    When you run tests from the command line with
+    <a href="{@docRoot}tools/help/adb.html">
+    Android Debug Bridge (adb)</a>, you get more options for choosing the tests
+    to run than with any other method. You can select individual test methods, filter tests
+    according to their annotation, or specify testing options. Since the test run is controlled
+    entirely from a command line, you can customize your testing with shell scripts in various ways.
+</p>
+<p>
+    To run a test from the command line, you run <code>adb shell</code> to start a command-line
+    shell on your device or emulator, and then in the shell run the <code>am instrument</code>
+    command. You control <code>am</code> and your tests with command-line flags.
+</p>
+<p>
+    As a shortcut, you can start an <code>adb</code> shell, call <code>am instrument</code>, and
+    specify command-line flags all on one input line. The shell opens on the device or emulator,
+    runs your tests, produces output, and then returns to the command line on your computer.
+</p>
+<p>
+    To run a test with <code>am instrument</code>:
+</p>
+<ol>
+    <li>
+        If necessary, rebuild your main application and test package.
+    </li>
+    <li>
+        Install your test package and main application Android package files
+        (<code>.apk</code> files) to your current Android device or emulator</li>
+    <li>
+        At the command line, enter:
+<pre>
+$ adb shell am instrument -w &lt;test_package_name&gt;/&lt;runner_class&gt;
+</pre>
+        <p>
+            where <code>&lt;test_package_name&gt;</code> is the Android package name of your test
+            application, and <code>&lt;runner_class&gt;</code> is the name of the Android test
+            runner class you are using. The Android package name is the value of the
+            <code>package</code> attribute of the <code>manifest</code> element in the manifest file
+            (<code>AndroidManifest.xml</code>) of your test package. The Android test runner
+            class is usually {@link android.test.InstrumentationTestRunner}.
+        </p>
+        <p>
+            Your test results appear in <code>STDOUT</code>.
+        </p>
+    </li>
+</ol>
+<p>
+    This operation starts an <code>adb</code> shell, then runs <code>am instrument</code>
+    with the specified parameters. This particular form of the command will run all of the tests
+    in your test package. You can control this behavior with flags that you pass to
+    <code>am instrument</code>. These flags are described in the next section.
+</p>
+<h2 id="AMSyntax">Using the am instrument Command</h2>
+<p>
+    The general syntax of the <code>am instrument</code> command is:
+</p>
+<pre>
+    am instrument [flags] &lt;test_package&gt;/&lt;runner_class&gt;
+</pre>
+<p>
+    The main input parameters to <code>am instrument</code> are described in the following table:
+</p>
+<table>
+    <tr>
+        <th>
+            Parameter
+        </th>
+        <th>
+            Value
+        </th>
+        <th>
+            Description
+        </th>
+    </tr>
+    <tr>
+        <td>
+            <code>&lt;test_package&gt;</code>
+        </td>
+        <td>
+            The Android package name of the test package.
+        </td>
+        <td>
+            The value of the <code>package</code> attribute of the <code>manifest</code>
+            element in the test package's manifest file.
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <code>&lt;runner_class&gt;</code>
+        </td>
+        <td>
+            The class name of the instrumented test runner you are using.
+        </td>
+        <td>
+            This is usually {@link android.test.InstrumentationTestRunner}.
+        </td>
+    </tr>
+</table>
+<p>
+    The flags for <code>am instrument</code> are described in the following table:
+</p>
+<table>
+    <tr>
+        <th>
+            Flag
+        </th>
+        <th>
+            Value
+        </th>
+        <th>
+            Description
+        </th>
+    </tr>
+    <tr>
+        <td>
+            <code>-w</code>
+        </td>
+        <td>
+            (none)
+        </td>
+        <td>
+            Forces <code>am instrument</code> to wait until the instrumentation terminates
+            before terminating itself. The net effect is to keep the shell open until the tests
+            have finished. This flag is not required, but if you do not use it, you will not
+            see the results of your tests.
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <code>-r</code>
+        </td>
+        <td>
+            (none)
+        </td>
+        <td>
+            Outputs results in raw format. Use this flag when you want to collect
+            performance measurements, so that they are not formatted as test results. This flag is
+            designed for use with the flag <code>-e perf true</code> (documented in the section
+            <a href="#AMOptionsSyntax">Instrument options</a>).
+        </td>
+    </tr>
+    <tr>
+        <td>
+            <code>-e</code>
+        </td>
+        <td>
+             &lt;test_options&gt;
+        </td>
+        <td>
+            Provides testing options as key-value pairs. The
+            <code>am instrument</code> tool passes these to the specified instrumentation class
+            via its <code>onCreate()</code> method. You can specify multiple occurrences of
+            <code>-e &lt;test_options&gt;</code>. The keys and values are described in the
+            section <a href="#AMOptionsSyntax">am instrument options</a>.
+            <p>
+                The only instrumentation class that uses these key-value pairs is
+                {@link android.test.InstrumentationTestRunner} (or a subclass). Using them with
+                any other class has no effect.
+            </p>
+        </td>
+    </tr>
+</table>
+
+<h3 id="AMOptionsSyntax">am instrument options</h3>
+<p>
+    The <code>am instrument</code> tool passes testing options to
+    <code>InstrumentationTestRunner</code> or a subclass in the form of key-value pairs,
+    using the <code>-e</code> flag, with this syntax:
+</p>
+<pre>
+    -e &lt;key&gt; &lt;value&gt;
+</pre>
+<p>
+    Some keys accept multiple values. You specify multiple values in a comma-separated list.
+    For example, this invocation of <code>InstrumentationTestRunner</code> provides multiple
+    values for the <code>package</code> key:
+</p>
+<pre>
+$ adb shell am instrument -w -e package com.android.test.package1,com.android.test.package2 \
+&gt; com.android.test/android.test.InstrumentationTestRunner
+</pre>
+<p>
+    The following table describes the key-value pairs and their result. Please review the
+    <strong>Usage Notes</strong> following the table.
+</p>
+<table>
+    <tr>
+        <th>Key</th>
+        <th>Value</th>
+        <th>Description</th>
+    </tr>
+    <tr>
+        <td>
+            <code>package</code>
+        </td>
+        <td>
+            &lt;Java_package_name&gt;
+        </td>
+        <td>
+            The fully-qualified <em>Java</em> package name for one of the packages in the test
+            application. Any test case class that uses this package name is executed. Notice that
+            this is not an <em>Android</em> package name; a test package has a single
+            Android package name but may have several Java packages within it.
+        </td>
+    </tr>
+    <tr>
+        <td rowspan="2"><code>class</code></td>
+        <td>&lt;class_name&gt;</td>
+        <td>
+            The fully-qualified Java class name for one of the test case classes. Only this test
+            case class is executed.
+        </td>
+    </tr>
+    <tr>
+        <td>&lt;class_name&gt;<strong>#</strong>method name</td>
+        <td>
+            A fully-qualified test case class name, and one of its methods. Only this method is
+            executed. Note the hash mark (#) between the class name and the method name.
+        </td>
+    </tr>
+    <tr>
+        <td><code>func</code></td>
+        <td><code>true</code></td>
+        <td>
+            Runs all test classes that extend {@link android.test.InstrumentationTestCase}.
+        </td>
+    </tr>
+    <tr>
+        <td><code>unit</code></td>
+        <td><code>true</code></td>
+        <td>
+            Runs all test classes that do <em>not</em> extend either
+            {@link android.test.InstrumentationTestCase} or
+            {@link android.test.PerformanceTestCase}.
+        </td>
+    </tr>
+    <tr>
+        <td><code>size</code></td>
+        <td>
+            [<code>small</code> | <code>medium</code> | <code>large</code>]
+        </td>
+        <td>
+            Runs a test method annotated by size. The  annotations are <code>@SmallTest</code>,
+            <code>@MediumTest</code>, and <code>@LargeTest</code>.
+        </td>
+    </tr>
+    <tr>
+        <td><code>perf</code></td>
+        <td><code>true</code></td>
+        <td>
+            Runs all test classes that implement {@link android.test.PerformanceTestCase}.
+            When you use this option, also specify the <code>-r</code> flag for
+            <code>am instrument</code>, so that the output is kept in raw format and not
+            re-formatted as test results.
+        </td>
+    </tr>
+    <tr>
+        <td><code>debug</code></td>
+        <td><code>true</code></td>
+        <td>
+            Runs tests in debug mode.
+        </td>
+    </tr>
+    <tr>
+        <td><code>log</code></td>
+        <td><code>true</code></td>
+        <td>
+            Loads and logs all specified tests, but does not run them. The test
+            information appears in <code>STDOUT</code>. Use this to verify combinations of other
+            filters and test specifications.
+        </td>
+    </tr>
+    <tr>
+        <td><code>emma</code></td>
+        <td><code>true</code></td>
+        <td>
+            Runs an EMMA code coverage analysis and writes the output to
+            <code>/data//coverage.ec</code> on the device. To override the file location, use the
+            <code>coverageFile</code> key that is described in the following entry.
+            <p class="note">
+                <strong>Note:</strong> This option requires an EMMA-instrumented build of the test
+                application, which you can generate with the <code>coverage</code> target.
+            </p>
+        </td>
+    </tr>
+    <tr>
+        <td><code>coverageFile</code></td>
+        <td><code>&lt;filename&gt;</code></td>
+        <td>
+            Overrides the default location of the EMMA coverage file on the device. Specify this
+            value as a path and filename in UNIX format. The default filename is described in the
+            entry for the <code>emma</code> key.
+        </td>
+    </tr>
+</table>
+<strong><code>-e</code> Flag Usage Notes</strong>
+<ul>
+    <li>
+        <code>am instrument</code> invokes
+        {@link android.test.InstrumentationTestRunner#onCreate(Bundle)}
+        with a {@link android.os.Bundle} containing the key-value pairs.
+    </li>
+    <li>
+        The <code>package</code> key takes precedence over the <code>class</code> key. If you
+        specifiy a package, and then separately specify a class within that package, Android
+        will run all the tests in the package and ignore the <code>class</code> key.
+    </li>
+    <li>
+        The <code>func</code> key and <code>unit</code> key are mutually exclusive.
+    </li>
+</ul>
+<h3 id="RunTestExamples">Usage examples</h3>
+<p>
+The following sections provide examples of using <code>am instrument</code> to run tests.
+They are based on the following structure:</p>
+<ul>
+    <li>
+        The test package has the Android package name <code>com.android.demo.app.tests</code>
+    </li>
+    <li>
+        There are three test classes:
+        <ul>
+            <li>
+                <code>UnitTests</code>, which contains the methods
+                <code>testPermissions</code> and <code>testSaveState</code>.
+            </li>
+            <li>
+                <code>FunctionTests</code>, which contains the methods
+                <code>testCamera</code>, <code>testXVGA</code>, and <code>testHardKeyboard</code>.
+            </li>
+            <li>
+                <code>IntegrationTests</code>,
+                which contains the method <code>testActivityProvider</code>.
+            </li>
+        </ul>
+    </li>
+    <li>
+        The test runner is {@link android.test.InstrumentationTestRunner}.
+    </li>
+</ul>
+<h4>Running the entire test package</h4>
+<p>
+    To run all of the test classes in the test package, enter:
+</p>
+<pre>
+$ adb shell am instrument -w com.android.demo.app.tests/android.test.InstrumentationTestRunner
+</pre>
+<h4>Running all tests in a test case class</h4>
+<p>
+    To run all of the tests in the class <code>UnitTests</code>, enter:
+</p>
+<pre>
+$ adb shell am instrument -w  \
+&gt; -e class com.android.demo.app.tests.UnitTests \
+&gt; com.android.demo.app.tests/android.test.InstrumentationTestRunner
+</pre>
+<p>
+  <code>am instrument</code> gets the value of the <code>-e</code> flag, detects the
+  <code>class</code> keyword, and runs all the methods in the <code>UnitTests</code> class.
+</p>
+<h4>Selecting a subset of tests</h4>
+<p>
+    To run all of the tests in <code>UnitTests</code>, and the <code>testCamera</code> method in
+    <code>FunctionTests</code>, enter:
+</p>
+<pre>
+$ adb shell am instrument -w \
+&gt; -e class com.android.demo.app.tests.UnitTests,com.android.demo.app.tests.FunctionTests#testCamera \
+&gt; com.android.demo.app.tests/android.test.InstrumentationTestRunner
+</pre>
+<p>
+    You can find more examples of the command in the documentation for
+    {@link android.test.InstrumentationTestRunner}.
+</p>
diff --git a/docs/html/tools/testing/what_to_test.jd b/docs/html/tools/testing/what_to_test.jd
new file mode 100644
index 0000000..77ae211
--- /dev/null
+++ b/docs/html/tools/testing/what_to_test.jd
@@ -0,0 +1,86 @@
+page.title=What To Test
+parent.title=Testing
+parent.link=index.html
+@jd:body
+<p>
+    As you develop Android applications, knowing what to test is as important as knowing how to
+    test. This document lists some most common Android-related situations that you should consider
+    when you test, even at the unit test level. This is not an exhaustive list, and you consult the
+    documentation for the features that you use for more ideas. The
+    <a href="http://groups.google.com/group/android-developers">android-developers</a> Google Groups
+    site is another resource for information about testing.
+</p>
+<h2 id="Tests">Ideas for Testing</h2>
+<p>
+    The following sections are organized by behaviors or situations that you should test. Each
+    section contains a scenario that further illustrates the situation and the test or tests you
+    should do.
+</p>
+<h4>Change in orientation</h4>
+<p>
+    For devices that support multiple orientations, Android detects a change in orientation when
+    the user turns the device so that the display is "landscape" (long edge is horizontal) instead
+    of "portrait" (long edge is vertical).
+</p>
+<p>
+    When Android detects a change in orientation, its default behavior is to destroy and then
+    re-start the foreground Activity. You should consider testing the following:
+</p>
+<ul>
+    <li>
+        Is the screen re-drawn correctly? Any custom UI code you have should handle changes in the
+        orientation.
+    </li>
+    <li>
+        Does the application maintain its state? The Activity should not lose anything that the
+        user has already entered into the UI. The application should not "forget" its place in the
+        current transaction.
+    </li>
+</ul>
+<h4>Change in configuration</h4>
+<p>
+    A situation that is more general than a change in orientation is a change in the device's
+    configuration, such as a change in the availability of a keyboard or a change in system
+    language.
+</p>
+<p>
+    A change in configuration also triggers the default behavior of destroying and then restarting
+    the foreground Activity. Besides testing that the application maintains the UI and its
+    transaction state, you should also test that the application updates itself to respond
+    correctly to the new configuration.
+</p>
+<h4>Battery life</h4>
+<p>
+    Mobile devices primarily run on battery power. A device has finite "battery budget", and when it
+    is gone, the device is useless until it is recharged. You need to write your application to
+    minimize battery usage, you need to test its battery performance, and you need to test the
+    methods that manage battery usage.
+</p>
+<p>
+    Techniques for minimizing battery usage were presented at the 2010 Google I/O conference in the
+    presentation
+    <a href="http://code.google.com/events/io/2009/sessions/CodingLifeBatteryLife.html">
+    Coding for Life -- Battery Life, That Is</a>. This presentation describes the impact on battery
+    life of various operations, and the ways you can design your application to minimize these
+    impacts. When you code your application to reduce battery usage, you also write the
+    appropriate unit tests.
+</p>
+<h4>Dependence on external resources</h4>
+<p>
+    If your application depends on network access, SMS, Bluetooth, or GPS, then you should
+    test what happens when the resource or resources are not available.
+</p>
+<p>
+    For example, if your application uses the network,it can notify the user if access is
+    unavailable, or disable network-related features, or do both. For GPS, it can switch to
+    IP-based location awareness. It can also wait for WiFi access before doing large data transfers,
+    since WiFi transfers maximize battery usage compared to transfers over 3G or EDGE.
+</p>
+<p>
+    You can use the emulator to test network access and bandwidth. To learn more, please see
+    <a href="{@docRoot}tools/help/emulator.html#netspeed">Network Speed Emulation</a>.
+    To test GPS, you can use the emulator console and {@link android.location.LocationManager}. To
+    learn more about the emulator console, please see
+    <a href="{@docRoot}tools/help/emulator.html#console">
+    Using the Emulator Console</a>.
+</p>
diff --git a/docs/html/tools/tools_toc.cs b/docs/html/tools/tools_toc.cs
new file mode 100644
index 0000000..27fbd2d
--- /dev/null
+++ b/docs/html/tools/tools_toc.cs
@@ -0,0 +1,214 @@
+<ul id="nav">
+
+  <li class="nav-section">
+    <div class="nav-section-header empty">
+        <a href="<?cs var:toroot ?>tools/index.html"><span class="en">Developer Tools</span></a>
+    </div>
+  </li>
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot
+?>sdk/index.html"><span class="en">Download</span></a></div>
+    <ul>
+      <li class="nav-section">
+        <div class="nav-section-header">
+          <a href="<?cs var:toroot ?>sdk/installing/index.html"><span class="en">Installing
+    the SDK</span></a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>sdk/installing/adding-packages.html">
+              <span class="en">Adding Platforms and Packages</span></a></li>
+          <li><a href="<?cs var:toroot ?>sdk/installing/installing-adt.html">
+              <span class="en">Installing the Eclipse Plugin</span></a></li>
+          <li><a href="<?cs var:toroot ?>sdk/installing/next.html">
+              <span class="en">Next Steps</span></a></li>
+        </ul>
+      </li>
+          <li><a href="<?cs var:toroot ?>sdk/exploring.html">
+              <span class="en">Exploring the SDK</span></a></li>
+    </ul>
+  </li>
+  
+  <li class="nav-section">
+    <div class="nav-section-header">
+        <a href="/tools/workflow/index.html"><span class="en">Workflow</span></a>
+    </div>
+    <ul>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="/tools/devices/index.html"><span class="en">Setting Up Virtual Devices</span></a></div>
+        <ul>
+          <li><a href="/tools/devices/managing-avds.html"><span class="en">With AVD Manager</span></a></li>
+          <li><a href="/tools/devices/managing-avds-cmdline.html"><span class="en">From the Command Line</span></a></li>      
+          <li><a href="/tools/devices/emulator.html"><span class="en">Using the Android Emulator</span></a></li>                  
+        </ul>
+      </li>
+      <li><a href="/tools/device.html"><span class="en">Using Hardware Devices</span></a></li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="/tools/projects/index.html"><span class="en">Setting Up Projects</span></a></div>
+        <ul>
+          <li><a href="/tools/projects/projects-eclipse.html"><span class="en">From Eclipse with ADT</span></a></li>
+          <li><a href="/tools/projects/projects-cmdline.html"><span class="en">From the Command Line</span></a></li>                      
+        </ul>
+      </li>
+
+  
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="/tools/building/index.html"><span class="en">Building and Running</span></a></div>
+        <ul>
+          <li><a href="/tools/building/building-eclipse.html"><span class="en">From Eclipse with ADT</span></a></li>
+          <li><a href="/tools/building/building-cmdline.html"><span class="en">From the Command Line</span></a></li>                    
+        </ul>
+      </li>
+
+
+  <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot?>tools/testing/index.html">
+            <span class="en">Testing</span>
+          </a></div>
+        <ul>
+          <li>
+            <a href="<?cs var:toroot?>tools/testing/testing_android.html">
+            <span class="en">Fundamentals</span></a>
+          </li>
+          <li><a href="<?cs var:toroot ?>tools/testing/testing_eclipse.html">
+            <span class="en">From Eclipse</span></a>
+          </li>
+          <li><a href="<?cs var:toroot ?>tools/testing/testing_otheride.html">
+            <span class="en">From Other IDEs</span></a>
+          </li>  
+          <li>
+            <a href="<?cs var:toroot?>tools/testing/activity_testing.html">
+            <span class="en">Activity Testing</span></a>
+          </li>
+          <li>
+            <a href="<?cs var:toroot?>tools/testing/service_testing.html">
+            <span class="en">Service Testing</span></a>
+          </li>
+          <li>
+            <a href="<?cs var:toroot?>tools/testing/contentprovider_testing.html">
+            <span class="en">Content Provider Testing</span></a>
+          </li>
+          <li>
+            <a href="<?cs var:toroot ?>tools/testing/what_to_test.html">
+            <span class="en">What To Test</span></a>
+          </li>
+          <li>
+            <a href="<?cs var:toroot ?>tools/testing/activity_test.html">
+            <span class="en">Activity Testing Tutorial</span></a>
+          </li>
+        </ul>
+  </li><!-- end of testing -->
+
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/debugging/index.html"><span class="en">Debugging</span></a></div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>tools/debugging/debugging-projects.html"><span class="en">From Eclipse with ADT</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/debugging-projects-cmdline.html"><span class="en">From Other IDEs</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/ddms.html"><span class="en">Using DDMS</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/debugging-log.html"><span class="en">Reading and Writing Logs</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/debugging-ui.html"><span class="en">Optimizing your UI</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/debugging-tracing.html"><span class="en">Profiling with Traceview and dmtracedump</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/debugging/debugging-devtools.html"><span class="en">Using the Dev Tools App</span></a></li>
+    </ul>
+  </li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/publishing/publishing_overview.html"><span class="en">Publishing</span></a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>tools/publishing/preparing.html"><span class="en">Preparing for Release</span></a></li>
+          <li><a href="<?cs var:toroot ?>tools/publishing/versioning.html"><span class="en">Versioning Your Apps</span></a></li>
+          <li><a href="<?cs var:toroot ?>tools/publishing/app-signing.html"><span class="en">Signing Your Apps</span></a></li>
+        </ul>
+      </li>
+</ul>
+</li>
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot ?>tools/help/index.html"><span
+class="en">Tools Help</span></a></div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>tools/help/adb.html">adb</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/adt.html">ADT</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/android.html">android</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/bmgr.html">bmgr</a>
+      <li><a href="<?cs var:toroot ?>tools/help/dmtracedump.html">dmtracedump</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/draw9patch.html">Draw 9-Patch</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/emulator.html">Emulator</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/etc1tool.html">etc1tool</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/hierarchy-viewer.html">Hierarchy Viewer</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/hprof-conv.html">hprof-conv</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/layoutopt.html">layoutopt</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/logcat.html">logcat</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/mksdcard.html">mksdcard</a></li>
+      <li><a href="<?cs var:toroot ?>tools/help/monkey.html">monkey</a></li>
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot
+?>tools/help/monkeyrunner_concepts.html"><span class="en">monkeyrunner</span></a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>tools/help/MonkeyDevice.html"><span
+class="en">MonkeyDevice</span></a></li>
+          <li><a href="<?cs var:toroot ?>tools/help/MonkeyImage.html"><span
+class="en">MonkeyImage</span></a></li>
+          <li><a href="<?cs var:toroot ?>tools/help/MonkeyRunner.html"><span
+class="en">MonkeyRunner</span></a></li>
+        </ul>
+      </li>
+       <li><a href="<?cs var:toroot ?>tools/help/proguard.html">ProGuard</a></li>
+       <li><a href="<?cs var:toroot ?>tools/help/traceview.html">Traceview</a></li>
+       <li><a href="<?cs var:toroot ?>tools/help/zipalign.html">zipalign</a></li>
+    </ul>
+  </li>
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot
+?>tools/revisions/index.html"><span class="en">Revisions</span></a></div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>tools/sdk/tools-notes.html">
+        <span class="en">Tools</span>
+      </a></li>
+      <li><a href="<?cs var:toroot ?>tools/sdk/eclipse-adt.html">
+        <span class="en">ADT Plugin</span>
+      </a></li>
+      <!--
+      <li><a href="<?cs var:toroot ?>tools/sdk/addons.html"><span class="en">Add-ons</span></a></li>
+      -->
+      <li class="nav-section">
+        <div class="nav-section-header">
+        <a href="<?cs var:toroot ?>tools/sdk/ndk/index.html">
+          <span class="en">NDK</span></a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>tools/sdk/ndk/overview.html">What is the NDK?</a></li>
+        </ul>
+      </li>
+      <li><a href="<?cs var:toroot ?>tools/revisions/platforms.html"><span
+class="en">Platforms</span></a></li>
+    </ul>
+  </li>
+  
+  
+  <li class="nav-section">
+    <div class="nav-section-header"><a href="<?cs var:toroot
+?>tools/extras/index.html"><span class="en">Extras</span></a></div>
+    <ul>
+      <li><a href="<?cs var:toroot ?>tools/extras/support-library.html"><span class="en">Support
+Library</span></a></li>
+      <li><a href="<?cs var:toroot ?>tools/extras/oem-usb.html"><span
+class="en">USB Drivers</span></a>
+      </li>
+    </ul>
+  </li>
+
+  
+  
+  <li class="nav-section">
+    <div class="nav-section-header empty"><a href="<?cs var:toroot
+?>tools/samples/index.html"><span class="en">Samples</span></a></div>
+  </li>
+  
+  
+</ul><!-- nav -->
+
+<script type="text/javascript">
+<!--
+    buildToggleLists();
+    changeNavLang(getLangPref());
+//-->
+</script>
diff --git a/docs/html/tools/workflow.jd b/docs/html/tools/workflow.jd
new file mode 100644
index 0000000..4eb5ada
--- /dev/null
+++ b/docs/html/tools/workflow.jd
@@ -0,0 +1,150 @@
+page.title=Introduction
+@jd:body
+
+<p>Developing applications for Android devices is facilitated by a group of tools that are
+  provided with the SDK. You can access these tools through an Eclipse plugin called ADT (Android
+  Development Tools) or from the command line. Developing with Eclipse is the preferred method because
+  it can directly invoke the tools that you need while developing applications.</p>
+
+  <p>However, you may choose to develop with another IDE or a simple text editor and invoke the
+  tools on the command line or with scripts. This is a less streamlined way to develop because you
+  will sometimes have to call command line tools manually, but you will have access to the same
+  number of features that you would have in Eclipse.</p>
+
+<div class="figure" style="width:461px">
+  <img src="{@docRoot}images/developing/developing_overview.png"
+       alt="Development process for Android applications"
+       height="738" />
+  <p class="img-caption">
+    <strong>Figure 1.</strong> The development process for Android applications.
+  </p>
+</div>
+
+<p>The basic steps for developing applications (with or without Eclipse) are shown in figure 1. The
+development steps encompass four development phases, which include:</p>
+
+<ul>
+  <li><strong>Setup</strong>
+    <p>During this phase you install and set up your development environment. You also create
+      Android Virtual Devices (AVDs) and connect hardware devices on which you can install your
+      applications.</p>
+    <p>See <a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>
+      and <a href="{@docRoot}tools/device.html">Using Hardware Devices</a> for more
+      information.
+  </li>
+  <li><strong>Development</strong>
+    <p>During this phase you set up and develop your Android project, which contains all of the
+    source code and resource files for your application. For more informations, see
+    <a href="{@docRoot}tools/projects/index.html">Create an Android project</a>.</p>
+  </li>
+  <li><strong>Debugging and Testing</strong>
+    <p>During this phase you build your project into a debuggable <code>.apk</code> package that you
+    can install and run on the emulator or an Android-powered device. If you are using Eclipse,
+    builds are generated each time you project is saved. If you're using another IDE,
+    you can build your project using Ant and install it on a device using
+    <a href="{@docRoot}tools/help/adb.html">adb</a>. For more information, see
+    <a href="{@docRoot}tools/building/index.html">Build and run your application</a>.</p>
+    <p>Next, you debug your application using a JDWP-compliant debugger along with the debugging
+    and logging tools that are provided with the Android SDK. Eclipse already comes packaged with
+    a compatible debugger. For more information see,
+    <a href="{@docRoot}tools/debugging/index.html">Debug your application with the
+      SDK debugging and logging tools</a>.</p>
+    <p>Last, you test your application using various Android SDK testing tools. For more
+    information, see <a href="{@docRoot}tools/testing/index.html">Test your application
+    with the Testing and Instrumentation framework</a>.</p>
+  </li>
+  <li><strong>Publishing</strong>
+    <p>During this phase you configure and build your application for release and distribute your
+      application to users. For more information, see
+      <a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a>.</p>
+  </li>
+</ul>
+
+<h2 id="EssentialTools">Essential command line tools</h2>
+
+  <p>When developing in IDEs or editors other than Eclipse, be familiar with
+  all of the tools below, because you will have to run them from the command line.</p>
+
+  <dl>
+    <dt><a href="{@docRoot}tools/help/android.html">android</a></dt>
+
+    <dd>Create and update Android projects and create, move, and delete AVDs.</dd>
+
+    <dt><a href="{@docRoot}tools/devices/emulator.html">Android Emulator</a></dt>
+
+    <dd>Run your Android applications on an emulated Android platform.</dd>
+
+    <dt><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a></dt>
+
+    <dd>Interface with your emulator or connected device (install apps, shell the device, issue
+    commands, etc.).</dd>
+  </dl>
+
+  <p>In addition to the above tools that are included with the SDK, you need the following open
+  source and third-party tools:</p>
+
+  <dl>
+    <dt>Ant</dt>
+
+    <dd>To compile and build your Android project into an installable .apk file.</dd>
+
+    <dt>Keytool</dt>
+
+    <dd>To generate a keystore and private key, used to sign your .apk file. Keytool is part of the
+    JDK.</dd>
+
+    <dt>Jarsigner (or similar signing tool)</dt>
+
+    <dd>To sign your .apk file with a private key generated by Keytool. Jarsigner is part of the
+    JDK.</dd>
+  </dl>
+
+  <p>If you are using Eclipse and ADT, tools such as <code>adb</code> and <code>android</code>
+  are automatically called by Eclipse and ADT so you don't have to manually invoke these tools.
+  You need to be familiar with <code>adb</code>, however, because certain functions are not
+accessible from
+  Eclipse, such as the <code>adb</code> shell commands. You might also need to call Keytool and
+Jarsigner to
+  sign your applications, but you can set up Eclipse to do this automatically as well.</p>
+
+<p>For more information on the tools provided with the Android SDK, see the
+  <a href="{@docRoot}tools/index.html">Tools</a> section of the documentation.</p>
+
+<h2 id="ThirdParty">Other Third-Party Development Tools</h2>
+<p>
+	The tools described in this section are not developed by the Android SDK team. The Android Dev Guide
+	    does not provide documentation for these tools. Please refer to the linked documents in each
+	    section for documentation.
+</p>
+<h3 id="IntelliJ">Developing in IntelliJ IDEA</h3>
+<div style="float: right">
+<img alt="The IntelliJ graphical user interface" height="500px"
+src="{@docRoot}images/developing/intellijidea_android_ide.png"/>
+</div>
+<p>
+	IntelliJ IDEA is a powerful Java IDE from JetBrains that provides
+	full-cycle Android development support in both the free Community
+	Edition and the Ultimate edition.
+</p>
+<p>
+	The IDE ensures compatibility with the latest Android SDK and offers a
+	smart code editor with completion, quick navigation between code and
+	resources, a graphical debugger, unit testing support using Android
+	Testing Framework, and the ability to run applications in either the
+	emulator or a USB-connected device.
+</p>
+<p>
+	<strong>Links:</strong>
+</p>
+<ul>
+	<li>
+    	<a href="http://www.jetbrains.com/idea">IntelliJ IDEA official website</a>
+</li>
+	<li>
+    	<a href="http://www.jetbrains.com/idea/features/google_android.html">Android support in IntelliJ IDEA</a>
+</li>
+	<li>
+    	<a href="http://wiki.jetbrains.net/intellij/Android">IntelliJ IDEA Android Tutorials</a>
+	</li>
+</ul>
+
diff --git a/docs/html/tools/workflow/app-signing.jd b/docs/html/tools/workflow/app-signing.jd
new file mode 100644
index 0000000..ac45242
--- /dev/null
+++ b/docs/html/tools/workflow/app-signing.jd
@@ -0,0 +1,618 @@
+page.title=Signing Your Applications
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>All Android apps <em>must</em> be signed</li>
+<li>You can sign with a self-signed key</li>
+<li>How you sign your apps is critical &mdash; read this document carefully</li>
+<li>Determine your signing strategy early in the development process</li>
+</ul>
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#signing">Signing Process</a></li>
+<li><a href="#strategies">Signing Strategies</a></li>
+<li><a href="#setup">Basic Setup for Signing</a></li>
+<li><a href="#debugmode">Signing in Debug Mode</a></li>
+<li><a href="#releasemode">Signing Release Mode</a>
+    <ol>
+    <li><a href="#cert">Obtain a suitable private key</a></li>
+    <li><a href="#releasecompile">Compile the application in release mode</a></li>
+    <li><a href="#signapp">Sign your application with your private key</a></li>
+    <li><a href="#align">Align the final APK package</a></li>
+    <li><a href="#ExportWizard">Compile and sign with Eclipse ADT</a></li>
+    </ol>
+</li>
+<li><a href="#secure-key">Securing Your Private Key</a></li>
+
+</ol>
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>The Android system requires that all installed applications be digitally signed with a
+certificate whose private key is held by the application's developer. The Android system uses the
+certificate as a means of identifying the author of an application and establishing trust
+relationships between applications. The certificate is not used to control which applications the
+user can install. The certificate does not need to be signed by a certificate authority: it is
+perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
+
+<p>The important points to understand about signing Android applications are:</p>
+
+<ul>
+  <li>All applications <em>must</em> be signed. The system will not install an application
+on an emulator or a device if it is not signed.</li>
+  <li>To test and debug your application, the build tools sign your application with a special debug
+    key that is created by the Android SDK build tools.</li>
+  <li>When you are ready to release your application for end-users, you must sign it with a suitable
+    private key. You cannot publish an application that is signed with the debug key generated
+    by the SDK tools.</li>
+  <li>You can use self-signed certificates to sign your applications. No certificate authority is
+    needed.</li>
+  <li>The system tests a signer certificate's expiration date only at install time. If an
+application's signer certificate expires after the application is installed, the application
+will continue to function normally.</li>
+  <li>You can use standard tools &mdash; Keytool and Jarsigner &mdash; to generate keys and
+sign your application {@code .apk} files.</li>
+  <li>After you sign your application for release, we recommend that you use the
+    <code>zipalign</code> tool to optimize the final APK package.</li>
+</ul>
+
+<p>The Android system will not install or run an application that is not signed appropriately. This
+applies wherever the Android system is run, whether on an actual device or on the emulator.
+For this reason, you must <a href="#setup">set up signing</a> for your application before you can
+run it or debug it on an emulator or device.</p>
+
+<h2 id="signing">Signing Process</h3>
+
+<p>The Android build process signs your application differently depending on which build mode you
+use to build your application. There are two build modes: <em>debug mode</em> and <em>release
+mode</em>. You use debug mode when you are developing and testing your application. You use
+release mode when you want to build a release version of your application that you can
+distribute directly to users or publish on an application marketplace such as Google Play.</p>
+
+<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
+(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
+they know the debug key's alias and password. Each time you compile your application in debug mode,
+the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
+sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
+build tools, the tools don't need to prompt you for the debug key's alias and password each time
+you compile.</p>
+
+<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
+you don't have a private key, you can use the Keytool utility to create one for you. When you
+compile your application in release mode, the build tools use your private key along with the
+Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
+private key you use are your own, you will have to provide the password for the keystore and key
+alias.</p>
+
+<p>The debug signing process happens automatically when you run or debug your application using
+Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
+script with the <code>debug</code> option. You can automate the release signing process by using the
+Eclipse Export Wizard or by modifying the Ant build script and building with the
+<code>release</code> option.</p>
+
+<h2 id="strategies">Signing Strategies</h2>
+
+<p>Some aspects of application signing may affect how you approach the development
+of your application, especially if you are planning to release multiple
+applications. </p>
+
+<p>In general, the recommended strategy for all developers is to sign
+all of your applications with the same certificate, throughout the expected
+lifespan of your applications. There are several reasons why you should do so: </p>
+
+<ul>
+<li>Application upgrade &ndash; As you release updates to your application, you
+will want to continue to sign the updates with the same certificate or set of
+certificates, if you want users to upgrade seamlessly to the new version. When
+the system is installing an update to an application, it compares the
+certificate(s) in the new version with those in the existing version. If the
+certificates match exactly, including both the certificate data and order, then
+the system allows the update. If you sign the new version without using matching
+certificates, you will also need to assign a different package name to the
+application &mdash; in this case, the user installs the new version as a
+completely new application. </li>
+
+<li>Application modularity &ndash; The Android system allows applications that
+are signed by the same certificate to run in the same process, if the
+applications so requests, so that the system treats them as a single application.
+In this way you can deploy your application in modules, and users can update
+each of the modules independently if needed.</li>
+
+<li>Code/data sharing through permissions &ndash; The Android system provides
+signature-based permissions enforcement, so that an application can expose
+functionality to another application that is signed with a specified
+certificate. By signing multiple applications with the same certificate and
+using signature-based permissions checks, your applications can share code and
+data in a secure manner. </li>
+
+</ul>
+
+<p>Another important consideration in determining your signing strategy is
+how to set the validity period of the key that you will use to sign your
+applications.</p>
+
+<ul>
+<li>If you plan to support upgrades for a single application, you should ensure
+that your key has a validity period that exceeds the expected lifespan of
+that application. A validity period of 25 years or more is recommended.
+When your key's validity period expires, users will no longer be
+able to seamlessly upgrade to new versions of your application.</li>
+
+<li>If you will sign multiple distinct applications with the same key,
+you should ensure that your key's validity period exceeds the expected
+lifespan of <em>all versions of all of the applications</em>, including
+dependent applications that may be added to the suite in the future. </li>
+
+<li>If you plan to publish your application(s) on Google Play, the
+key you use to sign the application(s) must have a validity period
+ending after 22 October 2033. Google Play enforces this requirement
+to ensure that users can seamlessly upgrade applications when
+new versions are available. </li>
+</ul>
+
+<p>As you design your application, keep these points in mind and make sure to
+use a <a href="#cert">suitable certificate</a> to sign your applications. </p>
+
+<h2 id="setup">Basic Setup for Signing</h2>
+
+<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
+the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
+the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
+variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
+Jarsigner to your <code>PATH</code> variable.</p>
+
+<p>If you are developing on a version of Linux that originally came with GNU Compiler for
+Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
+version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
+<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
+to the Keytool in the JDK.</p>
+
+<h2 id="debugmode">Signing in Debug Mode</h2>
+
+<p>The Android build tools provide a debug signing mode that makes it easier for you
+to develop and debug your application, while still meeting the Android system
+requirement for signing your APK.
+When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
+a debug keystore and key. This debug key is then used to automatically sign the APK, so
+you do not need to sign the package with your own key.</p>
+
+<p>The SDK tools create the debug keystore/key with predetermined names/passwords:</p>
+<ul>
+<li>Keystore name: "debug.keystore"</li>
+<li>Keystore password: "android"</li>
+<li>Key alias: "androiddebugkey"</li>
+<li>Key password: "android"</li>
+<li>CN: "CN=Android Debug,O=Android,C=US"</li>
+</ul>
+
+<p>If necessary, you can change the location/name of the debug keystore/key or
+supply a custom debug keystore/key to use. However, any custom debug
+keystore/key must use the same keystore/key names and passwords as the default
+debug key (as described above). (To do so in Eclipse/ADT, go to
+<strong>Windows</strong> &gt; <strong>Preferences</strong> &gt;
+<strong>Android</strong> &gt; <strong>Build</strong>.) </p>
+
+<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
+to the public when signed with the debug certificate.</p>
+
+<h3>Eclipse Users</h3>
+
+<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
+<a href="#setup">Basic Setup for Signing</a>),
+signing in debug mode is enabled by default. When you run or debug your
+application, ADT signs the {@code .apk} file with the debug certificate, runs {@code zipalign} on
+the package, then installs it on
+the selected emulator or connected device. No specific action on your part is needed,
+provided ADT has access to Keytool.</p>
+
+<h3>Ant Users</h3>
+
+<p>If you are using Ant to build your {@code .apk} file, debug signing mode
+is enabled by using the <code>debug</code> option with the <code>ant</code> command
+(assuming that you are using a <code>build.xml</code> file generated by the
+<code>android</code> tool). When you run <code>ant debug</code> to
+compile your app, the build script generates a keystore/key and signs the APK for you.
+The script then also aligns the APK with the <code>zipalign</code> tool.
+No other action on your part is needed. Read
+<a href="{@docRoot}tools/building/building-cmdline.html#DebugMode">Building and Running Apps
+on the Command Line</a> for more information.</p>
+
+
+<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
+
+<p>The self-signed certificate used to sign your application in debug mode (the default on
+Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
+
+<p>When the certificate expires, you will get a build error. On Ant builds, the error
+looks like this:</p>
+
+<pre>debug:
+[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
+[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
+
+<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
+
+<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
+The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
+in <code>C:\Documents and Settings\&lt;user>\.android\</code> on Windows XP, and in
+<code>C:\Users\&lt;user>\.android\</code> on Windows Vista and Windows 7.</p>
+
+
+<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
+
+<p>Note that, if your development machine is using a non-Gregorian locale, the build
+tools may erroneously generate an already-expired debug certificate, so that you get an
+error when trying to compile your application. For workaround information, see the
+troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
+I&nbsp;can't&nbsp;compile my app because the build tools generated an expired debug
+certificate</a>. </p>
+
+
+<h2 id="releasemode">Signing in Release Mode</h2>
+
+<p>When your application is ready for release to other users, you must:</p>
+<ol>
+  <li><a href="#cert">Obtain a suitable private key</a></li>
+  <li><a href="#releasecompile">Compile the application in release mode</a></li>
+  <li><a href="#signapp">Sign your application with your private key</a></li>
+  <li><a href="#align">Align the final APK package</a></li>
+</ol>
+
+<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
+to perform the compile, sign, and align procedures. The Export Wizard even allows you to
+generate a new keystore and private key in the process. So if you use Eclipse, you can
+skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
+
+
+
+<h3 id="cert">1. Obtain a suitable private key</h3>
+
+<p>In preparation for signing your application, you must first ensure that
+you have a suitable private key with which to sign. A suitable private
+key is one that:</p>
+
+<ul>
+<li>Is in your possession</li>
+<li>Represents the personal, corporate, or organizational entity to be identified
+with the application</li>
+<li>Has a validity period that exceeds the expected lifespan of the application
+or application suite. A validity period of more than 25 years is recommended.
+<p>If you plan to publish your application(s) on Google Play, note that a
+validity period ending after 22 October 2033 is a requirement. You can not upload an
+application if it is signed with a key whose validity expires before that date.
+</p></li>
+<li>Is not the debug key generated by the Android SDK tools. </li>
+</ul>
+
+<p>The key may be self-signed. If you do not have a suitable key, you must
+generate one using Keytool. Make sure that you have Keytool available, as described
+in <a href="#setup">Basic Setup</a>.</p>
+
+<p>To generate a self-signed key with Keytool, use the <code>keytool</code>
+command and pass any of the options listed below (and any others, as
+needed). </p>
+
+<p class="warning"><strong>Warning:</strong> Keep your private key secure.
+Before you run Keytool, make sure to read
+<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
+your key secure and why doing so is critically important to you and to users. In
+particular, when you are generating your key, you should select strong passwords
+for both the keystore and key.</p>
+
+<table>
+<tr>
+<th>Keytool Option</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><code>-genkey</code></td><td>Generate a key pair (public and private
+keys)</td>
+</tr>
+<tr>
+<td><code>-v</code></td><td>Enable verbose output.</td>
+</tr>
+<tr>
+<td><code>-alias &lt;alias_name&gt;</code></td><td>An alias for the key. Only
+the first 8 characters of the alias are used.</td>
+</tr>
+<tr>
+<td><code>-keyalg &lt;alg&gt;</code></td><td>The encryption algorithm to use
+when generating the key. Both DSA and RSA are supported.</td>
+</tr>
+<tr>
+<td><code>-keysize &lt;size&gt;</code></td><td>The size of each generated key
+(bits). If not supplied, Keytool uses a default key size of 1024 bits. In
+general, we recommend using a key size of 2048 bits or higher. </td>
+</tr>
+<tr>
+<td><code>-dname &lt;name&gt;</code></td><td><p>A Distinguished Name that describes
+who created the key. The value is used as the issuer and subject fields in the
+self-signed certificate. </p><p>Note that you do not need to specify this option
+in the command line. If not supplied, Jarsigner prompts you to enter each
+of the Distinguished Name fields (CN, OU, and so on).</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the
+key.</p> <p>As a security precaution, do not include this option in your command
+line. If not supplied, Keytool prompts you to enter the password. In this way,
+your password is not stored in your shell history.</p></td>
+</tr>
+<tr>
+<td><code>-validity &lt;valdays&gt;</code></td><td><p>The validity period for the
+key, in days. </p><p><strong>Note:</strong> A value of 10000 or greater is recommended.</p></td>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>A name
+for the keystore containing the private key.</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>A password for the
+keystore.</p><p>As a security precaution, do not include this option in your
+command line. If not supplied, Keytool prompts you to enter the password. In
+this way, your password is not stored in your shell history.</p></td>
+</tr>
+</table>
+
+<p>Here's an example of a Keytool command that generates a private key:</p>
+
+<pre>$ keytool -genkey -v -keystore my-release-key.keystore
+-alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
+
+<p>Running the example command above, Keytool prompts you to provide
+passwords for the keystore and key, and to provide the Distinguished
+Name fields for your key. It then generates the keystore as a file called
+<code>my-release-key.keystore</code>. The keystore and key are
+protected by the passwords you entered. The keystore contains
+a single key, valid for 10000 days. The alias is a name that you &mdash;
+will use later, to refer to this keystore when signing your application. </p>
+
+<p>For more information about Keytool, see the documentation at
+<a
+href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html">
+http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html</a></p>
+
+
+
+<h3 id="releasecompile">2. Compile the application in release mode</h3>
+
+<p>In order to release your application to users, you must compile it in release mode.
+In release mode, the compiled application is not signed by default and you will need
+to sign it with your private key.</p>
+
+<p class="caution"><strong>Caution:</strong>
+You can not release your application unsigned, or signed with the debug key.</p>
+
+<h4>With Eclipse</h4>
+
+<p>To export an <em>unsigned</em> APK from Eclipse, right-click the project in the Package
+Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
+Package</strong>. Then specify the file location for the unsigned APK.
+(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, select
+the <strong>Manifest</strong> tab, and click <strong>Export an unsigned APK</strong>.)</p>
+
+<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
+<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
+
+<h4>With Ant</h4>
+
+<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
+with the <code>ant</code> command. For example, if you are running Ant from the
+directory containing your {@code build.xml} file, the command would look like this:</p>
+
+<pre>$ ant release</pre>
+
+<p>By default, the build script compiles the application APK without signing it. The output file
+in your project {@code bin/} will be <code><em>&lt;your_project_name></em>-unsigned.apk</code>.
+Because the application APK is still unsigned, you must manually sign it with your private
+key and then align it using {@code zipalign}.</p>
+
+<p>However, the Ant build script can also perform the signing
+and aligning for you, if you have provided the path to your keystore and the name of
+your key alias in the project's {@code ant.properties} file. With this information provided,
+the build script will prompt you for your keystore and alias password when you perform
+<code>ant release</code>, it will sign the package and then align it. The final output
+file in {@code bin/} will instead be
+<code><em>&lt;your_project_name></em>-release.apk</code>. With these steps
+automated for you, you're able to skip the manual procedures below (steps 3 and 4).
+To learn how to specify your keystore and alias in the {@code ant.properties} file,
+see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">
+Building and Running Apps on the Command Line</a>.</p>
+
+
+
+<h3 id="signapp">3. Sign your application with your private key</h3>
+
+<p>When you have an application package that is ready to be signed, you can do sign it
+using the Jarsigner tool. Make sure that you have Jarsigner available on your
+machine, as described in <a href="#setup">Basic Setup</a>. Also, make sure that
+the keystore containing your private key is  available.</p>
+
+<p>To sign your application, you run Jarsigner, referencing both the
+application's APK and the keystore containing the private key with which to
+sign the APK. The table below shows the options you could use. </p>
+
+<table>
+<tr>
+<th>Jarsigner Option</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>The name of
+the keystore containing your private key.</td>
+</tr>
+<tr>
+<td><code>-verbose</code></td><td>Enable verbose output.</td>
+</tr>
+<tr>
+<td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
+Use the value {@code MD5withRSA}.</td>
+</tr>
+<tr>
+<td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
+of an APK. Use the value {@code SHA1}.</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>The password for the
+keystore. </p><p>As a security precaution, do not include this option
+in your command line unless you are working at a secure computer.
+If not supplied, Jarsigner prompts you to enter the password. In this
+way, your password is not stored in your shell history.</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the private
+key. </p><p>As a security precaution, do not include this option
+in your command line unless you are working at a secure computer.
+If not supplied, Jarsigner prompts you to enter the password. In this
+way, your password is not stored in your shell history.</p></td>
+</tr>
+</table>
+
+<p>Here's how you would use Jarsigner to sign an application package called
+<code>my_application.apk</code>, using the example keystore created above.
+</p>
+
+<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
+my_application.apk alias_name</pre>
+
+<p>Running the example command above, Jarsigner prompts you to provide
+passwords for the keystore and key. It then modifies the APK
+in-place, meaning the APK is now signed. Note that you can sign an
+APK multiple times with different keys.</p>
+
+<p class="caution"><strong>Caution:</strong> As of JDK 7, the default signing algorithim has
+changed, requiring you to specify the signature and digest algorithims ({@code -sigalg} and {@code
+-digestalg}) when you sign an APK.</p>
+
+<p>To verify that your APK is signed, you can use a command like this:</p>
+
+<pre>$ jarsigner -verify my_signed.apk</pre>
+
+<p>If the APK is signed properly, Jarsigner prints "jar verified".
+If you want more details, you can try one of these commands:</p>
+
+<pre>$ jarsigner -verify -verbose my_application.apk</pre>
+
+<p>or</p>
+
+<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
+
+<p>The command above, with the <code>-certs</code> option added, will show you the
+"CN=" line that describes who created the key.</p>
+
+<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the APK was
+signed with the debug key generated by the Android SDK. If you intend to release
+your application, you must sign it with your private key instead of the debug
+key.</p>
+
+<p>For more information about Jarsigner, see the documentation at
+<a href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html">
+http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html</a></p>
+
+
+<h3 id="align">4. Align the final APK package</h3>
+
+<p>Once you have signed the APK with your private key, run <code>zipalign</code> on the file.
+This tool ensures that all uncompressed data starts with a particular byte alignment,
+relative to the start of the file. Ensuring alignment at 4-byte boundaries provides
+a performance optimization when installed on a device. When aligned, the Android
+system is able to read files with {@code mmap()}, even if
+they contain binary data with alignment restrictions, rather than copying all
+of the data from the package. The benefit is a reduction in the amount of
+RAM consumed by the running application.</p>
+
+<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
+<code>tools/</code> directory. To align your signed APK, execute:</p>
+
+<pre>$ zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
+
+<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
+byte-alignment (don't use anything other than 4). The first file argument is
+your signed {@code .apk} file (the input) and the second file is the destination {@code .apk} file
+(the output). If you're overriding an existing APK, add the {@code -f} flag.</p>
+
+<p class="caution"><strong>Caution:</strong> Your input APK must be signed with your
+private key <strong>before</strong> you optimize the package with {@code zipalign}.
+If you sign it after using {@code zipalign}, it will undo the alignment.</p>
+
+<p>For more information, read about the
+<a href="{@docRoot}tools/help/zipalign.html">zipalign</a> tool.
+
+
+<h3 id="ExportWizard">Compile and sign with Eclipse ADT</h3>
+
+<p>If you are using Eclipse with the ADT plugin, you can use the Export Wizard to
+export a <em>signed</em> APK (and even create a new keystore,
+if necessary). The Export Wizard performs all the interaction with
+the Keytool and Jarsigner for you, which allows you to sign the package using a GUI
+instead of performing the manual procedures to compile, sign,
+and align, as discussed above. Once the wizard has compiled and signed your package,
+it will also perfom package alignment with {@code zipalign}.
+Because the Export Wizard uses both Keytool and Jarsigner, you should
+ensure that they are accessible on your computer, as described above
+in the <a href="#setup">Basic Setup for Signing</a>.</p>
+
+<p>To create a signed and aligned APK in Eclipse:</p>
+
+<ol>
+  <li>Select the project in the Package
+Explorer and select <strong>File > Export</strong>.</li>
+  <li>Open the Android folder, select Export Android Application,
+  and click <strong>Next</strong>.
+  <p>The Export Android Application wizard now starts, which will
+  guide you through the process of signing your application,
+  including steps for selecting the private key with which to sign the APK
+  (or creating a new keystore and private key).</p>
+  <li>Complete the Export Wizard and your application will be compiled,
+  signed, aligned, and ready for distribution.</li>
+</ol>
+
+
+
+<h2 id="secure-key">Securing Your Private Key</h2>
+
+<p>Maintaining the security of your private key is of critical importance, both
+to you and to the user. If you allow someone to use your key, or if you leave
+your keystore and passwords in an unsecured location such that a third-party
+could find and use them, your authoring identity and the trust of the user
+are compromised. </p>
+
+<p>If a third party should manage to take your key without your knowledge or
+permission, that person could sign and distribute applications that maliciously
+replace your authentic applications or corrupt them. Such a person could also
+sign and distribute applications under your identity that attack other
+applications or the system itself, or corrupt or steal user data. </p>
+
+<p>Your reputation as a developer entity depends on your securing your private
+key properly, at all times, until the key is expired. Here are some tips for
+keeping your key secure: </p>
+
+<ul>
+<li>Select strong passwords for the keystore and key.</li>
+<li>When you generate your key with Keytool, <em>do not</em> supply the
+<code>-storepass</code> and <code>-keypass</code> options at the command line.
+If you do so, your passwords will be available in your shell history,
+which any user on your computer could access.</li>
+<li>Similarly, when signing your applications with Jarsigner,
+<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
+options at the command line. </li>
+<li>Do not give or lend anyone your private key, and do not let unauthorized
+persons know your keystore and key passwords.</li>
+</ul>
+
+<p>In general, if you follow common-sense precautions when generating, using,
+and storing your key, it will remain secure. </p>
\ No newline at end of file
diff --git a/docs/html/tools/workflow/index.jd b/docs/html/tools/workflow/index.jd
new file mode 100644
index 0000000..5ae06e6
--- /dev/null
+++ b/docs/html/tools/workflow/index.jd
@@ -0,0 +1,150 @@
+page.title=Introduction
+@jd:body
+
+<p>To develop apps for Android devices, you use a set of tools that are included in the Android SDK.
+Once you've downloaded and installed the SDK, you can access these tools right from your Eclipse IDE,
+through the ADT plugin, or from the command line. Developing with Eclipse is the preferred method because
+it can directly invoke the tools that you need while developing applications.</p>
+
+  <p>However, you may choose to develop with another IDE or a simple text editor and invoke the
+  tools on the command line or with scripts. This is a less streamlined way to develop because you
+  will sometimes have to call command line tools manually, but you will have access to the same
+  number of features that you would have in Eclipse.</p>
+
+<div class="figure" style="width:461px">
+  <img src="{@docRoot}images/developing/developing_overview.png"
+       alt="Development process for Android applications"
+       height="738" />
+  <p class="img-caption">
+    <strong>Figure 1.</strong> The development process for Android applications.
+  </p>
+</div>
+
+<p>The basic steps for developing applications (with or without Eclipse) are shown in figure 1. The
+development steps encompass four development phases, which include:</p>
+
+<ul>
+  <li><strong>Setup</strong>
+    <p>During this phase you install and set up your development environment. You also create
+      Android Virtual Devices (AVDs) and connect hardware devices on which you can install your
+      applications.</p>
+    <p>See <a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a>
+      and <a href="{@docRoot}tools/device.html">Using Hardware Devices</a> for more
+      information.
+  </li>
+  <li><strong>Development</strong>
+    <p>During this phase you set up and develop your Android project, which contains all of the
+    source code and resource files for your application. For more informations, see
+    <a href="{@docRoot}tools/projects/index.html">Create an Android project</a>.</p>
+  </li>
+  <li><strong>Debugging and Testing</strong>
+    <p>During this phase you build your project into a debuggable <code>.apk</code> package that you
+    can install and run on the emulator or an Android-powered device. If you are using Eclipse,
+    builds are generated each time you project is saved. If you're using another IDE,
+    you can build your project using Ant and install it on a device using
+    <a href="{@docRoot}tools/help/adb.html">adb</a>. For more information, see
+    <a href="{@docRoot}tools/building/index.html">Build and run your application</a>.</p>
+    <p>Next, you debug your application using a JDWP-compliant debugger along with the debugging
+    and logging tools that are provided with the Android SDK. Eclipse already comes packaged with
+    a compatible debugger. For more information see,
+    <a href="{@docRoot}tools/debugging/index.html">Debug your application with the
+      SDK debugging and logging tools</a>.</p>
+    <p>Last, you test your application using various Android SDK testing tools. For more
+    information, see <a href="{@docRoot}tools/testing/index.html">Test your application
+    with the Testing and Instrumentation framework</a>.</p>
+  </li>
+  <li><strong>Publishing</strong>
+    <p>During this phase you configure and build your application for release and distribute your
+      application to users. For more information, see
+      <a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a>.</p>
+  </li>
+</ul>
+
+<h2 id="EssentialTools">Essential command line tools</h2>
+
+  <p>When developing in IDEs or editors other than Eclipse, be familiar with
+  all of the tools below, because you will have to run them from the command line.</p>
+
+  <dl>
+    <dt><a href="{@docRoot}tools/help/android.html">android</a></dt>
+
+    <dd>Create and update Android projects and create, move, and delete AVDs.</dd>
+
+    <dt><a href="{@docRoot}tools/devices/emulator.html">Android Emulator</a></dt>
+
+    <dd>Run your Android applications on an emulated Android platform.</dd>
+
+    <dt><a href="{@docRoot}tools/help/adb.html">Android Debug Bridge</a></dt>
+
+    <dd>Interface with your emulator or connected device (install apps, shell the device, issue
+    commands, etc.).</dd>
+  </dl>
+
+  <p>In addition to the above tools that are included with the SDK, you need the following open
+  source and third-party tools:</p>
+
+  <dl>
+    <dt>Ant</dt>
+
+    <dd>To compile and build your Android project into an installable .apk file.</dd>
+
+    <dt>Keytool</dt>
+
+    <dd>To generate a keystore and private key, used to sign your .apk file. Keytool is part of the
+    JDK.</dd>
+
+    <dt>Jarsigner (or similar signing tool)</dt>
+
+    <dd>To sign your .apk file with a private key generated by Keytool. Jarsigner is part of the
+    JDK.</dd>
+  </dl>
+
+  <p>If you are using Eclipse and ADT, tools such as <code>adb</code> and <code>android</code>
+  are automatically called by Eclipse and ADT so you don't have to manually invoke these tools.
+  You need to be familiar with <code>adb</code>, however, because certain functions are not
+accessible from
+  Eclipse, such as the <code>adb</code> shell commands. You might also need to call Keytool and
+Jarsigner to
+  sign your applications, but you can set up Eclipse to do this automatically as well.</p>
+
+<p>For more information on the tools provided with the Android SDK, see the
+  <a href="{@docRoot}tools/index.html">Tools</a> section of the documentation.</p>
+
+<h2 id="ThirdParty">Other Third-Party Development Tools</h2>
+<p>
+	The tools described in this section are not developed by the Android SDK team. The Android Dev Guide
+	    does not provide documentation for these tools. Please refer to the linked documents in each
+	    section for documentation.
+</p>
+<h3 id="IntelliJ">Developing in IntelliJ IDEA</h3>
+<div style="float: right">
+<img alt="The IntelliJ graphical user interface" height="500px"
+src="{@docRoot}images/developing/intellijidea_android_ide.png"/>
+</div>
+<p>
+	IntelliJ IDEA is a powerful Java IDE from JetBrains that provides
+	full-cycle Android development support in both the free Community
+	Edition and the Ultimate edition.
+</p>
+<p>
+	The IDE ensures compatibility with the latest Android SDK and offers a
+	smart code editor with completion, quick navigation between code and
+	resources, a graphical debugger, unit testing support using Android
+	Testing Framework, and the ability to run applications in either the
+	emulator or a USB-connected device.
+</p>
+<p>
+	<strong>Links:</strong>
+</p>
+<ul>
+	<li>
+    	<a href="http://www.jetbrains.com/idea">IntelliJ IDEA official website</a>
+</li>
+	<li>
+    	<a href="http://www.jetbrains.com/idea/features/google_android.html">Android support in IntelliJ IDEA</a>
+</li>
+	<li>
+    	<a href="http://wiki.jetbrains.net/intellij/Android">IntelliJ IDEA Android Tutorials</a>
+	</li>
+</ul>
+
diff --git a/docs/html/tools/workflow/publishing/app-signing.jd b/docs/html/tools/workflow/publishing/app-signing.jd
new file mode 100644
index 0000000..ac45242
--- /dev/null
+++ b/docs/html/tools/workflow/publishing/app-signing.jd
@@ -0,0 +1,618 @@
+page.title=Signing Your Applications
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>All Android apps <em>must</em> be signed</li>
+<li>You can sign with a self-signed key</li>
+<li>How you sign your apps is critical &mdash; read this document carefully</li>
+<li>Determine your signing strategy early in the development process</li>
+</ul>
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#signing">Signing Process</a></li>
+<li><a href="#strategies">Signing Strategies</a></li>
+<li><a href="#setup">Basic Setup for Signing</a></li>
+<li><a href="#debugmode">Signing in Debug Mode</a></li>
+<li><a href="#releasemode">Signing Release Mode</a>
+    <ol>
+    <li><a href="#cert">Obtain a suitable private key</a></li>
+    <li><a href="#releasecompile">Compile the application in release mode</a></li>
+    <li><a href="#signapp">Sign your application with your private key</a></li>
+    <li><a href="#align">Align the final APK package</a></li>
+    <li><a href="#ExportWizard">Compile and sign with Eclipse ADT</a></li>
+    </ol>
+</li>
+<li><a href="#secure-key">Securing Your Private Key</a></li>
+
+</ol>
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/versioning.html">Versioning Your Applications</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>The Android system requires that all installed applications be digitally signed with a
+certificate whose private key is held by the application's developer. The Android system uses the
+certificate as a means of identifying the author of an application and establishing trust
+relationships between applications. The certificate is not used to control which applications the
+user can install. The certificate does not need to be signed by a certificate authority: it is
+perfectly allowable, and typical, for Android applications to use self-signed certificates.</p>
+
+<p>The important points to understand about signing Android applications are:</p>
+
+<ul>
+  <li>All applications <em>must</em> be signed. The system will not install an application
+on an emulator or a device if it is not signed.</li>
+  <li>To test and debug your application, the build tools sign your application with a special debug
+    key that is created by the Android SDK build tools.</li>
+  <li>When you are ready to release your application for end-users, you must sign it with a suitable
+    private key. You cannot publish an application that is signed with the debug key generated
+    by the SDK tools.</li>
+  <li>You can use self-signed certificates to sign your applications. No certificate authority is
+    needed.</li>
+  <li>The system tests a signer certificate's expiration date only at install time. If an
+application's signer certificate expires after the application is installed, the application
+will continue to function normally.</li>
+  <li>You can use standard tools &mdash; Keytool and Jarsigner &mdash; to generate keys and
+sign your application {@code .apk} files.</li>
+  <li>After you sign your application for release, we recommend that you use the
+    <code>zipalign</code> tool to optimize the final APK package.</li>
+</ul>
+
+<p>The Android system will not install or run an application that is not signed appropriately. This
+applies wherever the Android system is run, whether on an actual device or on the emulator.
+For this reason, you must <a href="#setup">set up signing</a> for your application before you can
+run it or debug it on an emulator or device.</p>
+
+<h2 id="signing">Signing Process</h3>
+
+<p>The Android build process signs your application differently depending on which build mode you
+use to build your application. There are two build modes: <em>debug mode</em> and <em>release
+mode</em>. You use debug mode when you are developing and testing your application. You use
+release mode when you want to build a release version of your application that you can
+distribute directly to users or publish on an application marketplace such as Google Play.</p>
+
+<p>When you build in <em>debug mode</em> the Android SDK build tools use the Keytool utility
+(included in the JDK) to create a debug key. Because the SDK build tools created the debug key,
+they know the debug key's alias and password. Each time you compile your application in debug mode,
+the build tools use the debug key along with the Jarsigner utility (also included in the JDK) to
+sign your application's <code>.apk</code> file. Because the alias and password are known to the SDK
+build tools, the tools don't need to prompt you for the debug key's alias and password each time
+you compile.</p>
+
+<p>When you build in <em>release mode</em> you use your own private key to sign your application. If
+you don't have a private key, you can use the Keytool utility to create one for you. When you
+compile your application in release mode, the build tools use your private key along with the
+Jarsigner utility to sign your application's <code>.apk</code> file. Because the certificate and
+private key you use are your own, you will have to provide the password for the keystore and key
+alias.</p>
+
+<p>The debug signing process happens automatically when you run or debug your application using
+Eclipse with the ADT plugin. Debug signing also happens automatically when you use the Ant build
+script with the <code>debug</code> option. You can automate the release signing process by using the
+Eclipse Export Wizard or by modifying the Ant build script and building with the
+<code>release</code> option.</p>
+
+<h2 id="strategies">Signing Strategies</h2>
+
+<p>Some aspects of application signing may affect how you approach the development
+of your application, especially if you are planning to release multiple
+applications. </p>
+
+<p>In general, the recommended strategy for all developers is to sign
+all of your applications with the same certificate, throughout the expected
+lifespan of your applications. There are several reasons why you should do so: </p>
+
+<ul>
+<li>Application upgrade &ndash; As you release updates to your application, you
+will want to continue to sign the updates with the same certificate or set of
+certificates, if you want users to upgrade seamlessly to the new version. When
+the system is installing an update to an application, it compares the
+certificate(s) in the new version with those in the existing version. If the
+certificates match exactly, including both the certificate data and order, then
+the system allows the update. If you sign the new version without using matching
+certificates, you will also need to assign a different package name to the
+application &mdash; in this case, the user installs the new version as a
+completely new application. </li>
+
+<li>Application modularity &ndash; The Android system allows applications that
+are signed by the same certificate to run in the same process, if the
+applications so requests, so that the system treats them as a single application.
+In this way you can deploy your application in modules, and users can update
+each of the modules independently if needed.</li>
+
+<li>Code/data sharing through permissions &ndash; The Android system provides
+signature-based permissions enforcement, so that an application can expose
+functionality to another application that is signed with a specified
+certificate. By signing multiple applications with the same certificate and
+using signature-based permissions checks, your applications can share code and
+data in a secure manner. </li>
+
+</ul>
+
+<p>Another important consideration in determining your signing strategy is
+how to set the validity period of the key that you will use to sign your
+applications.</p>
+
+<ul>
+<li>If you plan to support upgrades for a single application, you should ensure
+that your key has a validity period that exceeds the expected lifespan of
+that application. A validity period of 25 years or more is recommended.
+When your key's validity period expires, users will no longer be
+able to seamlessly upgrade to new versions of your application.</li>
+
+<li>If you will sign multiple distinct applications with the same key,
+you should ensure that your key's validity period exceeds the expected
+lifespan of <em>all versions of all of the applications</em>, including
+dependent applications that may be added to the suite in the future. </li>
+
+<li>If you plan to publish your application(s) on Google Play, the
+key you use to sign the application(s) must have a validity period
+ending after 22 October 2033. Google Play enforces this requirement
+to ensure that users can seamlessly upgrade applications when
+new versions are available. </li>
+</ul>
+
+<p>As you design your application, keep these points in mind and make sure to
+use a <a href="#cert">suitable certificate</a> to sign your applications. </p>
+
+<h2 id="setup">Basic Setup for Signing</h2>
+
+<p>Before you begin, make sure that the Keytool utility and Jarsigner utility are available to
+the SDK build tools. Both of these tools are available in the JDK. In most cases, you can tell
+the SDK build tools how to find these utilities by setting your <code>JAVA_HOME</code> environment
+variable so it references a suitable JDK. Alternatively, you can add the JDK version of Keytool and
+Jarsigner to your <code>PATH</code> variable.</p>
+
+<p>If you are developing on a version of Linux that originally came with GNU Compiler for
+Java, make sure that the system is using the JDK version of Keytool, rather than the gcj
+version. If Keytool is already in your <code>PATH</code>, it might be pointing to a symlink at
+<code>/usr/bin/keytool</code>. In this case, check the symlink target to be sure it points
+to the Keytool in the JDK.</p>
+
+<h2 id="debugmode">Signing in Debug Mode</h2>
+
+<p>The Android build tools provide a debug signing mode that makes it easier for you
+to develop and debug your application, while still meeting the Android system
+requirement for signing your APK.
+When using debug mode to build your app, the SDK tools invoke Keytool to automatically create
+a debug keystore and key. This debug key is then used to automatically sign the APK, so
+you do not need to sign the package with your own key.</p>
+
+<p>The SDK tools create the debug keystore/key with predetermined names/passwords:</p>
+<ul>
+<li>Keystore name: "debug.keystore"</li>
+<li>Keystore password: "android"</li>
+<li>Key alias: "androiddebugkey"</li>
+<li>Key password: "android"</li>
+<li>CN: "CN=Android Debug,O=Android,C=US"</li>
+</ul>
+
+<p>If necessary, you can change the location/name of the debug keystore/key or
+supply a custom debug keystore/key to use. However, any custom debug
+keystore/key must use the same keystore/key names and passwords as the default
+debug key (as described above). (To do so in Eclipse/ADT, go to
+<strong>Windows</strong> &gt; <strong>Preferences</strong> &gt;
+<strong>Android</strong> &gt; <strong>Build</strong>.) </p>
+
+<p class="caution"><strong>Caution:</strong> You <em>cannot</em> release your application
+to the public when signed with the debug certificate.</p>
+
+<h3>Eclipse Users</h3>
+
+<p>If you are developing in Eclipse/ADT (and have set up Keytool and Jarsigner as described above in
+<a href="#setup">Basic Setup for Signing</a>),
+signing in debug mode is enabled by default. When you run or debug your
+application, ADT signs the {@code .apk} file with the debug certificate, runs {@code zipalign} on
+the package, then installs it on
+the selected emulator or connected device. No specific action on your part is needed,
+provided ADT has access to Keytool.</p>
+
+<h3>Ant Users</h3>
+
+<p>If you are using Ant to build your {@code .apk} file, debug signing mode
+is enabled by using the <code>debug</code> option with the <code>ant</code> command
+(assuming that you are using a <code>build.xml</code> file generated by the
+<code>android</code> tool). When you run <code>ant debug</code> to
+compile your app, the build script generates a keystore/key and signs the APK for you.
+The script then also aligns the APK with the <code>zipalign</code> tool.
+No other action on your part is needed. Read
+<a href="{@docRoot}tools/building/building-cmdline.html#DebugMode">Building and Running Apps
+on the Command Line</a> for more information.</p>
+
+
+<h3 id="debugexpiry">Expiry of the Debug Certificate</h3>
+
+<p>The self-signed certificate used to sign your application in debug mode (the default on
+Eclipse/ADT and Ant builds) will have an expiration date of 365 days from its creation date.</p>
+
+<p>When the certificate expires, you will get a build error. On Ant builds, the error
+looks like this:</p>
+
+<pre>debug:
+[echo] Packaging bin/samples-debug.apk, and signing it with a debug key...
+[exec] Debug Certificate expired on 8/4/08 3:43 PM</pre>
+
+<p>In Eclipse/ADT, you will see a similar error in the Android console.</p>
+
+<p>To fix this problem, simply delete the <code>debug.keystore</code> file.
+The default storage location for AVDs is in <code>~/.android/</code> on OS X and Linux,
+in <code>C:\Documents and Settings\&lt;user>\.android\</code> on Windows XP, and in
+<code>C:\Users\&lt;user>\.android\</code> on Windows Vista and Windows 7.</p>
+
+
+<p>The next time you build, the build tools will regenerate a new keystore and debug key.</p>
+
+<p>Note that, if your development machine is using a non-Gregorian locale, the build
+tools may erroneously generate an already-expired debug certificate, so that you get an
+error when trying to compile your application. For workaround information, see the
+troubleshooting topic <a href="{@docRoot}resources/faq/troubleshooting.html#signingcalendar">
+I&nbsp;can't&nbsp;compile my app because the build tools generated an expired debug
+certificate</a>. </p>
+
+
+<h2 id="releasemode">Signing in Release Mode</h2>
+
+<p>When your application is ready for release to other users, you must:</p>
+<ol>
+  <li><a href="#cert">Obtain a suitable private key</a></li>
+  <li><a href="#releasecompile">Compile the application in release mode</a></li>
+  <li><a href="#signapp">Sign your application with your private key</a></li>
+  <li><a href="#align">Align the final APK package</a></li>
+</ol>
+
+<p>If you are developing in Eclipse with the ADT plugin, you can use the Export Wizard
+to perform the compile, sign, and align procedures. The Export Wizard even allows you to
+generate a new keystore and private key in the process. So if you use Eclipse, you can
+skip to <a href="#ExportWizard">Compile and sign with Eclipse ADT</a>.</p>
+
+
+
+<h3 id="cert">1. Obtain a suitable private key</h3>
+
+<p>In preparation for signing your application, you must first ensure that
+you have a suitable private key with which to sign. A suitable private
+key is one that:</p>
+
+<ul>
+<li>Is in your possession</li>
+<li>Represents the personal, corporate, or organizational entity to be identified
+with the application</li>
+<li>Has a validity period that exceeds the expected lifespan of the application
+or application suite. A validity period of more than 25 years is recommended.
+<p>If you plan to publish your application(s) on Google Play, note that a
+validity period ending after 22 October 2033 is a requirement. You can not upload an
+application if it is signed with a key whose validity expires before that date.
+</p></li>
+<li>Is not the debug key generated by the Android SDK tools. </li>
+</ul>
+
+<p>The key may be self-signed. If you do not have a suitable key, you must
+generate one using Keytool. Make sure that you have Keytool available, as described
+in <a href="#setup">Basic Setup</a>.</p>
+
+<p>To generate a self-signed key with Keytool, use the <code>keytool</code>
+command and pass any of the options listed below (and any others, as
+needed). </p>
+
+<p class="warning"><strong>Warning:</strong> Keep your private key secure.
+Before you run Keytool, make sure to read
+<a href="#secure-key">Securing Your Private Key</a> for a discussion of how to keep
+your key secure and why doing so is critically important to you and to users. In
+particular, when you are generating your key, you should select strong passwords
+for both the keystore and key.</p>
+
+<table>
+<tr>
+<th>Keytool Option</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><code>-genkey</code></td><td>Generate a key pair (public and private
+keys)</td>
+</tr>
+<tr>
+<td><code>-v</code></td><td>Enable verbose output.</td>
+</tr>
+<tr>
+<td><code>-alias &lt;alias_name&gt;</code></td><td>An alias for the key. Only
+the first 8 characters of the alias are used.</td>
+</tr>
+<tr>
+<td><code>-keyalg &lt;alg&gt;</code></td><td>The encryption algorithm to use
+when generating the key. Both DSA and RSA are supported.</td>
+</tr>
+<tr>
+<td><code>-keysize &lt;size&gt;</code></td><td>The size of each generated key
+(bits). If not supplied, Keytool uses a default key size of 1024 bits. In
+general, we recommend using a key size of 2048 bits or higher. </td>
+</tr>
+<tr>
+<td><code>-dname &lt;name&gt;</code></td><td><p>A Distinguished Name that describes
+who created the key. The value is used as the issuer and subject fields in the
+self-signed certificate. </p><p>Note that you do not need to specify this option
+in the command line. If not supplied, Jarsigner prompts you to enter each
+of the Distinguished Name fields (CN, OU, and so on).</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the
+key.</p> <p>As a security precaution, do not include this option in your command
+line. If not supplied, Keytool prompts you to enter the password. In this way,
+your password is not stored in your shell history.</p></td>
+</tr>
+<tr>
+<td><code>-validity &lt;valdays&gt;</code></td><td><p>The validity period for the
+key, in days. </p><p><strong>Note:</strong> A value of 10000 or greater is recommended.</p></td>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>A name
+for the keystore containing the private key.</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>A password for the
+keystore.</p><p>As a security precaution, do not include this option in your
+command line. If not supplied, Keytool prompts you to enter the password. In
+this way, your password is not stored in your shell history.</p></td>
+</tr>
+</table>
+
+<p>Here's an example of a Keytool command that generates a private key:</p>
+
+<pre>$ keytool -genkey -v -keystore my-release-key.keystore
+-alias alias_name -keyalg RSA -keysize 2048 -validity 10000</pre>
+
+<p>Running the example command above, Keytool prompts you to provide
+passwords for the keystore and key, and to provide the Distinguished
+Name fields for your key. It then generates the keystore as a file called
+<code>my-release-key.keystore</code>. The keystore and key are
+protected by the passwords you entered. The keystore contains
+a single key, valid for 10000 days. The alias is a name that you &mdash;
+will use later, to refer to this keystore when signing your application. </p>
+
+<p>For more information about Keytool, see the documentation at
+<a
+href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html">
+http://docs.oracle.com/javase/6/docs/technotes/tools/windows/keytool.html</a></p>
+
+
+
+<h3 id="releasecompile">2. Compile the application in release mode</h3>
+
+<p>In order to release your application to users, you must compile it in release mode.
+In release mode, the compiled application is not signed by default and you will need
+to sign it with your private key.</p>
+
+<p class="caution"><strong>Caution:</strong>
+You can not release your application unsigned, or signed with the debug key.</p>
+
+<h4>With Eclipse</h4>
+
+<p>To export an <em>unsigned</em> APK from Eclipse, right-click the project in the Package
+Explorer and select <strong>Android Tools</strong> > <strong>Export Unsigned Application
+Package</strong>. Then specify the file location for the unsigned APK.
+(Alternatively, open your <code>AndroidManifest.xml</code> file in Eclipse, select
+the <strong>Manifest</strong> tab, and click <strong>Export an unsigned APK</strong>.)</p>
+
+<p>Note that you can combine the compiling and signing steps with the Export Wizard. See
+<a href="#ExportWizard">Compiling and signing with Eclipse ADT</a>.</p>
+
+<h4>With Ant</h4>
+
+<p>If you are using Ant, you can enable release mode by using the <code>release</code> option
+with the <code>ant</code> command. For example, if you are running Ant from the
+directory containing your {@code build.xml} file, the command would look like this:</p>
+
+<pre>$ ant release</pre>
+
+<p>By default, the build script compiles the application APK without signing it. The output file
+in your project {@code bin/} will be <code><em>&lt;your_project_name></em>-unsigned.apk</code>.
+Because the application APK is still unsigned, you must manually sign it with your private
+key and then align it using {@code zipalign}.</p>
+
+<p>However, the Ant build script can also perform the signing
+and aligning for you, if you have provided the path to your keystore and the name of
+your key alias in the project's {@code ant.properties} file. With this information provided,
+the build script will prompt you for your keystore and alias password when you perform
+<code>ant release</code>, it will sign the package and then align it. The final output
+file in {@code bin/} will instead be
+<code><em>&lt;your_project_name></em>-release.apk</code>. With these steps
+automated for you, you're able to skip the manual procedures below (steps 3 and 4).
+To learn how to specify your keystore and alias in the {@code ant.properties} file,
+see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">
+Building and Running Apps on the Command Line</a>.</p>
+
+
+
+<h3 id="signapp">3. Sign your application with your private key</h3>
+
+<p>When you have an application package that is ready to be signed, you can do sign it
+using the Jarsigner tool. Make sure that you have Jarsigner available on your
+machine, as described in <a href="#setup">Basic Setup</a>. Also, make sure that
+the keystore containing your private key is  available.</p>
+
+<p>To sign your application, you run Jarsigner, referencing both the
+application's APK and the keystore containing the private key with which to
+sign the APK. The table below shows the options you could use. </p>
+
+<table>
+<tr>
+<th>Jarsigner Option</th>
+<th>Description</th>
+</tr>
+<tr>
+<td><code>-keystore&nbsp;&lt;keystore-name&gt;.keystore</code></td><td>The name of
+the keystore containing your private key.</td>
+</tr>
+<tr>
+<td><code>-verbose</code></td><td>Enable verbose output.</td>
+</tr>
+<tr>
+<td><code>-sigalg</code></td><td>The name of the signature algorithim to use in signing the APK.
+Use the value {@code MD5withRSA}.</td>
+</tr>
+<tr>
+<td><code>-digestalg</code></td><td>The message digest algorithim to use in processing the entries
+of an APK. Use the value {@code SHA1}.</td>
+</tr>
+<tr>
+<td><code>-storepass &lt;password&gt;</code></td><td><p>The password for the
+keystore. </p><p>As a security precaution, do not include this option
+in your command line unless you are working at a secure computer.
+If not supplied, Jarsigner prompts you to enter the password. In this
+way, your password is not stored in your shell history.</p></td>
+</tr>
+<tr>
+<td><code>-keypass &lt;password&gt;</code></td><td><p>The password for the private
+key. </p><p>As a security precaution, do not include this option
+in your command line unless you are working at a secure computer.
+If not supplied, Jarsigner prompts you to enter the password. In this
+way, your password is not stored in your shell history.</p></td>
+</tr>
+</table>
+
+<p>Here's how you would use Jarsigner to sign an application package called
+<code>my_application.apk</code>, using the example keystore created above.
+</p>
+
+<pre>$ jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore my-release-key.keystore
+my_application.apk alias_name</pre>
+
+<p>Running the example command above, Jarsigner prompts you to provide
+passwords for the keystore and key. It then modifies the APK
+in-place, meaning the APK is now signed. Note that you can sign an
+APK multiple times with different keys.</p>
+
+<p class="caution"><strong>Caution:</strong> As of JDK 7, the default signing algorithim has
+changed, requiring you to specify the signature and digest algorithims ({@code -sigalg} and {@code
+-digestalg}) when you sign an APK.</p>
+
+<p>To verify that your APK is signed, you can use a command like this:</p>
+
+<pre>$ jarsigner -verify my_signed.apk</pre>
+
+<p>If the APK is signed properly, Jarsigner prints "jar verified".
+If you want more details, you can try one of these commands:</p>
+
+<pre>$ jarsigner -verify -verbose my_application.apk</pre>
+
+<p>or</p>
+
+<pre>$ jarsigner -verify -verbose -certs my_application.apk</pre>
+
+<p>The command above, with the <code>-certs</code> option added, will show you the
+"CN=" line that describes who created the key.</p>
+
+<p class="note"><strong>Note:</strong> If you see "CN=Android Debug", this means the APK was
+signed with the debug key generated by the Android SDK. If you intend to release
+your application, you must sign it with your private key instead of the debug
+key.</p>
+
+<p>For more information about Jarsigner, see the documentation at
+<a href="http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html">
+http://docs.oracle.com/javase/6/docs/technotes/tools/windows/jarsigner.html</a></p>
+
+
+<h3 id="align">4. Align the final APK package</h3>
+
+<p>Once you have signed the APK with your private key, run <code>zipalign</code> on the file.
+This tool ensures that all uncompressed data starts with a particular byte alignment,
+relative to the start of the file. Ensuring alignment at 4-byte boundaries provides
+a performance optimization when installed on a device. When aligned, the Android
+system is able to read files with {@code mmap()}, even if
+they contain binary data with alignment restrictions, rather than copying all
+of the data from the package. The benefit is a reduction in the amount of
+RAM consumed by the running application.</p>
+
+<p>The <code>zipalign</code> tool is provided with the Android SDK, inside the
+<code>tools/</code> directory. To align your signed APK, execute:</p>
+
+<pre>$ zipalign -v 4 <em>your_project_name</em>-unaligned.apk <em>your_project_name</em>.apk</pre>
+
+<p>The {@code -v} flag turns on verbose output (optional). {@code 4} is the
+byte-alignment (don't use anything other than 4). The first file argument is
+your signed {@code .apk} file (the input) and the second file is the destination {@code .apk} file
+(the output). If you're overriding an existing APK, add the {@code -f} flag.</p>
+
+<p class="caution"><strong>Caution:</strong> Your input APK must be signed with your
+private key <strong>before</strong> you optimize the package with {@code zipalign}.
+If you sign it after using {@code zipalign}, it will undo the alignment.</p>
+
+<p>For more information, read about the
+<a href="{@docRoot}tools/help/zipalign.html">zipalign</a> tool.
+
+
+<h3 id="ExportWizard">Compile and sign with Eclipse ADT</h3>
+
+<p>If you are using Eclipse with the ADT plugin, you can use the Export Wizard to
+export a <em>signed</em> APK (and even create a new keystore,
+if necessary). The Export Wizard performs all the interaction with
+the Keytool and Jarsigner for you, which allows you to sign the package using a GUI
+instead of performing the manual procedures to compile, sign,
+and align, as discussed above. Once the wizard has compiled and signed your package,
+it will also perfom package alignment with {@code zipalign}.
+Because the Export Wizard uses both Keytool and Jarsigner, you should
+ensure that they are accessible on your computer, as described above
+in the <a href="#setup">Basic Setup for Signing</a>.</p>
+
+<p>To create a signed and aligned APK in Eclipse:</p>
+
+<ol>
+  <li>Select the project in the Package
+Explorer and select <strong>File > Export</strong>.</li>
+  <li>Open the Android folder, select Export Android Application,
+  and click <strong>Next</strong>.
+  <p>The Export Android Application wizard now starts, which will
+  guide you through the process of signing your application,
+  including steps for selecting the private key with which to sign the APK
+  (or creating a new keystore and private key).</p>
+  <li>Complete the Export Wizard and your application will be compiled,
+  signed, aligned, and ready for distribution.</li>
+</ol>
+
+
+
+<h2 id="secure-key">Securing Your Private Key</h2>
+
+<p>Maintaining the security of your private key is of critical importance, both
+to you and to the user. If you allow someone to use your key, or if you leave
+your keystore and passwords in an unsecured location such that a third-party
+could find and use them, your authoring identity and the trust of the user
+are compromised. </p>
+
+<p>If a third party should manage to take your key without your knowledge or
+permission, that person could sign and distribute applications that maliciously
+replace your authentic applications or corrupt them. Such a person could also
+sign and distribute applications under your identity that attack other
+applications or the system itself, or corrupt or steal user data. </p>
+
+<p>Your reputation as a developer entity depends on your securing your private
+key properly, at all times, until the key is expired. Here are some tips for
+keeping your key secure: </p>
+
+<ul>
+<li>Select strong passwords for the keystore and key.</li>
+<li>When you generate your key with Keytool, <em>do not</em> supply the
+<code>-storepass</code> and <code>-keypass</code> options at the command line.
+If you do so, your passwords will be available in your shell history,
+which any user on your computer could access.</li>
+<li>Similarly, when signing your applications with Jarsigner,
+<em>do not</em> supply the <code>-storepass</code> and <code>-keypass</code>
+options at the command line. </li>
+<li>Do not give or lend anyone your private key, and do not let unauthorized
+persons know your keystore and key passwords.</li>
+</ul>
+
+<p>In general, if you follow common-sense precautions when generating, using,
+and storing your key, it will remain secure. </p>
\ No newline at end of file
diff --git a/docs/html/tools/workflow/publishing/preparing.jd b/docs/html/tools/workflow/publishing/preparing.jd
new file mode 100644
index 0000000..4633d7e
--- /dev/null
+++ b/docs/html/tools/workflow/publishing/preparing.jd
@@ -0,0 +1,358 @@
+page.title=Preparing for Release
+@jd:body
+
+<div id="qv-wrapper">
+  <div id="qv">
+    <h2>Quickview</h2>
+    <ul>
+      <li>Learn which resources you'll need to release your app.</li>
+      <li>Find out how to configure and build your app for release.</li>
+      <li>Learn best practices for releasing your app.</li>
+    </ul>
+    <h2>In this document</h2>
+    <ol>
+      <li><a href="#publishing-intro">Introduction</a></li>
+      <li><a href="#publishing-gather">Gathering Materials and Resources</a></li>
+      <li><a href="#publishing-configure">Configuring Your Application</a></li>
+      <li><a href="#publishing-build">Building Your Application</a></li>
+      <li><a href="#publishing-resources">Preparing External Servers and Resources</a></li>
+      <li><a href="#publishing-test">Testing Your Application for Release</a></li>
+    </ol>
+    <h2>See also</h2>
+    <ol>
+      <li><a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a></li>
+      <li><a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a></li>
+      <li><a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a></li>
+    </ol>
+  </div>
+</div>
+
+<p>Before you distribute your Android application to users you need to prepare it for release. The
+preparation process is a required <a href="{@docRoot}tools/workflow/index.html">development
+task</a> for all Android applications and is the first step in the publishing process (see figure
+1).</p>
+
+<p>When you prepare your application for release, you configure, build, and test a release
+version of your application. The configuration tasks are straightforward, involving basic code
+cleanup and code modification tasks that help optimize your application. The build process is
+similar to the debug build process and can be done using JDK and Android SDK tools. The testing
+tasks serve as a final check, ensuring that your application performs as expected under real-world
+conditions. When you are finished preparing your application for release you have a signed
+<code>.apk</code> file, which you can distribute directly to users or distribute through an
+application marketplace such as Google Play.</p>
+
+<p>This document summarizes the main tasks you need to perform to prepare your application for
+release. The tasks that are described in this document apply to all Android applications regardless
+how they are released or distributed to users. If you are releasing your application through Google
+Play, you should also read <a href="{@docRoot}tools/publishing/publishing.html">Publishing on
+Google Play</a> to be sure your release-ready application satisfies all Google Play
+requirements.</p>
+
+<p class="note"><strong>Note:</strong> As a best practice, your application should meet all of your
+release criteria for functionality, performance, and stability before you perform the tasks outlined
+in this document.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview_prep.png"
+     alt="Shows how the preparation process fits into the development process"
+     height="190"
+     id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Preparing for release is a required <a
+href="{@docRoot}tools/workflow/index.html">development
+task</a> and is the first step in the publishing process.
+</p>
+
+<h2 id="publishing-intro">Introduction</h2>
+
+<p>To release your application to users you need to create a release-ready package that users can
+install and run on their Android-powered devices. The release-ready package contains the same
+components as the debug <code>.apk</code> file &mdash; compiled source code, resources, manifest
+file, and so on &mdash; and it is built using the same build tools. However, unlike the debug
+<code>.apk</code> file, the release-ready <code>.apk</code> file is signed with your own certificate
+and it is optimized with the zipalign tool.</p>
+
+<div class="figure" style="width:331px">
+  <img src="{@docRoot}images/publishing/publishing_preparing.png"
+       alt="Shows the five tasks you perform to prepare your app for release"
+       height="450" />
+  <p class="img-caption">
+    <strong>Figure 2.</strong> You perform five main tasks to prepare your application for
+    release.
+  </p>
+</div>
+
+<p>The signing and optimization tasks are usually seamless if you are building your application with
+Eclipse and the ADT plugin or with the Ant build script (included with the Android SDK). For
+example, you can use the Eclipse Export Wizard to compile, sign, and optimize your application all
+at once. You can also configure the Ant build script to do the same when you build from the command
+line.</p>
+
+<p>To prepare your application for release you typically perform five main tasks (see figure 2).
+Each main task may include one or more smaller tasks depending on how you are releasing your
+application. For example, if you are releasing your application through Google Play you may want
+to add special filtering rules to your manifest while you are configuring your application for
+release. Similarly, to meet Google Play publishing guidelines you may have to prepare screenshots
+and create promotional text while you are gathering materials for release.</p>
+
+<p>You usually perform the tasks listed in figure 2 after you have throroughly debugged and tested
+your application. The Android SDK contains several tools to help you test and debug your Android
+applications. For more information, see the <a
+href="{@docRoot}tools/debugging/index.html">Debugging</a> and <a
+href="{@docRoot}tools/testing/index.html">Testing</a> sections in the Dev Guide.</p>
+
+<h2 id="publishing-gather">Gathering Materials and Resources</h2>
+
+<p>To begin preparing your application for release you need to gather several supporting items. At a
+minimum this includes cryptographic keys for signing your application and an application icon. You
+might also want to include an end-user license agreement.</p>
+
+<h4 id="publishing-keys">Cryptographic keys</h4>
+
+<p>The Android system requires that each installed application be digitally signed with a
+certificate that is owned by the application's developer (that is, a certificate for which the
+developer holds the private key). The Android system uses the certificate as a means of identifying
+the author of an application and establishing trust relationships between applications. The
+certificate that you use for signing does not need to be signed by a certificate authority; the
+Android system allows you to sign your applications with a self-signed certificate. To learn about
+certificate requirements, see <a href="{@docRoot}tools/publishing/app-signing.html#cert">Obtain a
+suitable private key</a>.</p>
+
+<p class="caution"><strong>Important:</strong> Your application must be signed with a cryptographic
+key whose validity period ends after 22 October 2033.</p>
+
+<p>You may also have to obtain other release keys if your application accesses a service or uses a
+third-party library that requires you to use a key that is based on your private key. For example,
+if your application uses the <a
+href="http://code.google.com/android/add-ons/google-apis/reference/com/google/android/maps/MapView.html">MapView</a>
+class, which is part of the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>, you will need to register your application with the Google Maps service and obtain
+a Maps API key. For information about getting a Maps API key, see <a
+href="http://code.google.com/android/add-ons/google-apis/mapkey.html"> Obtaining a Maps API
+key</a>.</p>
+
+<h4>Application Icon</h4>
+
+<p>Be sure you have an application icon and that it meets the recommended <a
+href="{@docRoot}guide/practices/ui_guidelines/icon_design_launcher.html">icon guidelines</a>. Your
+application's icon helps users identify your application on a device's Home
+screen and in the Launcher window. It also appears in Manage Applications, My Downloads, and
+elsewhere. In addition, publishing services such as Google Play display your icon to users.</p>
+
+<p class="note"><strong>Note:</strong> If you are releasing your application on Google Play, you
+need to create a high resolution
+  version of your icon. See <a
+href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">Graphic
+Assets for your Application</a> for more information.</p>
+
+<h4>End-user License Agreement</h4>
+
+<p>Consider preparing an End User License Agreement (EULA) for your application. A EULA can help
+protect your person, organization, and intellectual property, and we recommend that you provide one
+with your application.</p>
+
+<h4>Miscellaneous Materials</h4>
+
+<p>You might also have to prepare promotional and marketing materials to publicize your application.
+For example, if you are releasing your application on Google Play you will need to prepare some
+promotional text and you will need to create screenshots of your application. For more
+information, see
+<a href="https://www.google.com/support/androidmarket/developer/bin/answer.py?answer=1078870">
+Graphic Assets for your Application</a></p>
+
+<h2 id="publishing-configure">Configuring Your Application for Release</h2>
+
+<p>After you gather all of your supporting materials you can start configuring your application
+for release. This section provides a summary of the configuration changes we recommend that you make
+to your source code, resource files, and application manifest prior to releasing your application.
+Although most of the configuration changes listed in this section are optional, they are
+considered good coding practices and we encourage you to implement them. In some cases,
+you may have already made these configuration changes as part of your development process.</p>
+
+<h4>Choose a good package name</h4>
+
+<p>Make sure you choose a package name that is suitable over the life of your application. You
+cannot change the package name after you distribute your application to users. You can set the
+package name in application's manifest file. For more information, see the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#package">package</a> attribute
+documentation.</p>
+
+<h4>Turn off logging and debugging</h4>
+
+<p>Make sure you deactivate logging and disable the debugging option before you build your
+application for release. You can deactivate logging by removing calls to
+{@link android.util.Log} methods in your source files. You can disable debugging by removing the
+<code>android:debuggable</code> attribute from the <code>&lt;application&gt;</code> tag in your
+manifest file, or by setting the <code>android:debuggable</code> attribute to
+<code>false</code> in your manifest file. Also, remove any log files or static test files that
+were created in your project.</p>
+
+<p>Also, you should remove all {@link android.os.Debug} tracing calls that you
+added to your code, such as {@link android.os.Debug#startMethodTracing()} and
+{@link android.os.Debug#stopMethodTracing()} method calls.</p>
+
+<h4>Clean up your project directories</h4>
+
+<p>Clean up your project and make sure it conforms to the directory structure described in <a
+href="{@docRoot}tools/projects/index.html#ApplicationProjects">Android Projects</a>.
+Leaving stray or orphaned files in your project can prevent your application from compiling and
+cause your application to behave unpredictably. At a minimum you should do the following cleanup
+tasks:</p>
+
+<ul>
+  <li>Review the contents of your <code>jni/</code>, <code>lib/</code>, and <code>src/</code>
+  directories.  The <code>jni/</code> directory should contain only source files associated with the
+  <a href="{@docRoot}tools/sdk/ndk/index.html">Android NDK</a>, such as
+  <code>.c</code>, <code>.cpp</code>, <code>.h</code>, and <code>.mk</code> files. The
+  <code>lib/</code> directory should contain only third-party library files or private library
+  files, including prebuilt shared and static libraries (for example, <code>.so</code> files). The
+  <code>src/</code> directory should contain only the source files for your application
+  (<code>.java</code> and <code>.aidl</code> files). The <code>src/</code> directory should not
+  contain any <code>.jar</code> files.</li>
+  <li>Check your project for private or proprietary data files that your application does not use
+  and remove them. For example, look in your project's <code>res/</code> directory for old
+  drawable files, layout files, and values files that you are no longer using and delete them.</li>
+  <li>Check your <code>lib/</code> directory for test libraries and remove them if they are no
+  longer being used by your application.</li>
+  <li>Review the contents of your <code>assets/</code> directory and your <code>res/raw/</code>
+    directory for raw asset files and static files that you need to update or remove prior to
+    release.</li>
+</ul>
+
+<h4>Review and update your manifest settings</h4>
+
+<p>Verify that the following manifest items are set correctly:</p>
+
+<ul>
+  <li><a href="{@docRoot}guide/topics/manifest/uses-permission-element.html">
+  &lt;uses-permission&gt;</a> element
+    <p>You should specify only those permissions that are relevant and required for your application.</p>
+  </li>
+  <li><code>android:icon</code> and <code>android:label</code> attributes
+    <p>You must specify values for these attributes, which are located in the
+    <a href="{@docRoot}guide/topics/manifest/application-element.html">&lt;application&gt;</a>
+    element.</p>
+  </li>
+  <li><code>android:versionCode</code> and <code>android:versionName</code> attributes.
+    <p>We recommend that you specify values for these attributes, which are located in the
+      <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
+      element. For more information see
+      <a href="{@docRoot}tools/publishing/versioning.html">Versioning your Application</a>.</p>
+  </li>
+</ul>
+
+<p>There are several additional manifest elements that you can set if you are releasing your
+application on Google Play. For example, the <code>android:minSdkVersion</code> and
+<code>android:targetSdkVersion</code> attributes, which are located in the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"> &lt;uses-sdk&gt;</a> element. For more
+information about these and other Google Play settings, see <a
+href="{@docRoot}/guide//appendix/market-filters.html">Filters on Google Play</a>.</p>
+
+<h4>Address compatibility issues</h4>
+
+<p>Android provides several tools and techniques to make your application compatible with a wide
+range of devices. To make your application available to the largest number of users, consider
+doing the following:</p>
+
+<ul>
+  <li><strong>Add support for multiple screen configurations</strong>
+    <p>Make sure you meet the
+    <a href="{@docRoot}guide/practices/screens_support.html#screen-independence">
+    best practices for supporting multiple screens</a>. By supporting multiple screen configurations
+    you can create an application that functions properly and looks good on any of the screen sizes
+    supported by Android.</p>
+  </li>
+  <li><strong>Optimize your application for Android 3.0 devices.</strong>
+    <p>If your application is designed for devices older than Android 3.0, make it compatible
+    with Android 3.0 devices by following the guidelines and best practices described in
+    <a href="{@docRoot}guide/practices/optimizing-for-3.0.html">Optimizing Apps for Android 3.0
+    </a>.</p>
+  </li>
+  <li><strong>Consider using the Support Library</strong>
+    <p>If your application is designed for devices running Android 3.x, make your application
+    compatible with older versions of Android by adding the
+    <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> to your
+    application project. The Support Library provides static support libraries that you can add to
+    your Android application, which enables you to use APIs that are either not available on
+    older platform versions or use utility APIs that are not part of the framework APIs.</p>
+  </li>
+</ul>
+
+<h4>Update URLs for servers and services</h4>
+
+<p>If your application accesses remote servers or services, make sure you are using the production
+URL or path for the server or service and not a test URL or path.</p>
+
+<h4>Implement Licensing (if you are releasing on Google Play)</h4>
+
+<p>If you are releasing a paid application through Google Play, consider adding support for
+Google Play Licensing. Licensing lets you control access to your application based on whether the
+current user has purchased it. Using Google Play Licensing is optional even if you are
+releasing your app through Google Play.</p>
+
+<p>For more information about Google Play Licensing Service and how to use it in your
+application, see <a href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a>.</p>
+
+<h2 id="publishing-build">Building Your Application for Release</h2>
+
+<p>After you finish configuring your application you can build it into a release-ready
+<code>.apk</code> fle that is signed and optimized. The JDK includes the tools for signing the
+<code>.apk</code> file (Keytool and Jarsigner); the Android SDK includes the tools for compiling and
+optimizing the <code>.apk</code> file. If you are using Eclipse with the ADT plugin or you are using
+the Ant build script from the command line, you can automate the entire build process.</p>
+
+<h3>Building with Eclipse</h3>
+
+<p>You can use the Eclipse Export Wizard to build a release-ready <code>.apk</code> file that is
+signed with your private key and optimized. To learn how to run the Export Wizard, see
+<a href="{@docRoot}tools/publishing/app-signing.html#ExportWizard">Compile and sign with Eclipse
+ADT</a>. The Export Wizard compiles your application for release, signs your application with your
+private key, and optimizes your application with the zipalign tool. The Export Wizard should run
+successfully if you have run or debugged your application from Eclipse and you have no errors in
+your application (see <a href="{@docRoot}tools/building/building-eclipse.html">Building
+and Running from Eclipse with ADT</a> for more information.</p>
+
+<p>The Export Wizard assumes that you have a <a href="#billing-keys">certificate and private key</a>
+suitable for signing your application. If you do not have a suitable certificate and private key,
+the Export Wizard will help you generate one (see
+<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a> for more
+information about the signing process and signing guidelines.</p>
+
+<h3>Building with Ant</h3>
+
+<p>You can use the Ant build script (included in the Android SDK) to build a release-ready
+<code>.apk</code> file that is signed with your private key and optimized. To learn how to do this,
+see <a href="{@docRoot}tools/building/building-cmdline.html#ReleaseMode">Building in
+Release Mode</a>. This build method assumes you have a <a href="#billing-keys">certificate and
+private key</a> suitable for signing your application. If you do not have a suitable certificate and
+private key, the Export Wizard will help you generate one (see
+<a href="{@docRoot}tools/publishing/app-signing.html">Signing Your Applications</a> for more
+information about the signing process and signing guidelines.</p>
+
+<h2 id="publishing-resources">Preparing External Servers and Resources</h2>
+
+<p>If your application relies on a remote server, make sure the server is secure and that it is
+configured for production use. This is particularly important if you are implementing <a
+href="{@docRoot}guide/google/play/billing/index.html">in-app billing</a> in your application and you are
+performing the signature verification step on a remote server.</p>
+
+<p>Also, if your application fetches content from a remote server or a real-time service (such as a
+content feed), be sure the content you are providing is up to date and production-ready.</p>
+
+<h2 id="publishing-test">Testing Your Application for Release</h2>
+
+<p>Testing the release version of your application helps ensure that your application runs properly
+under realistic device and network conditions. Ideally, you should test your application on at least
+one handset-sized device and one tablet-sized device to verify that your user interface elements are
+sized correctly and that your application's performance and battery efficiency are acceptable.</p>
+
+<p>As a starting point for testing, see
+<a href="{@docRoot}tools/testing/what_to_test.html">What to Test</a>. This article provides
+a summary of common Android situations that you should consider when you are testing. When you are
+done testing and you are satisfied that the release version of your application
+behaves correctly, you can release your application to users. For more information, see
+<a href="{@docRoot}tools/publishing/publishing_overview.html#publishing-release">Releasing Your
+Application to Users</a>. If you are publishing your application on Google Play, see
+<a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a>.</p>
+
+
diff --git a/docs/html/tools/workflow/publishing/publishing.jd b/docs/html/tools/workflow/publishing/publishing.jd
new file mode 100644
index 0000000..a54b030
--- /dev/null
+++ b/docs/html/tools/workflow/publishing/publishing.jd
@@ -0,0 +1,703 @@
+page.title=Publishing on Google Play
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>Learn how to publish and update apps on Google Play.</li>
+<li>Find out how to create links to apps that are published on Google Play.</li>
+<li>Learn about Google Play features.</li>
+</ul>
+
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#overview">About Google Play</a>
+<li><A href="#marketpublish">Publishing Apps on Google Play</a></li>
+<li><a href="#marketupgrade">Publishing Updates on Google Play</a></li>
+<li><a href="#marketLicensing">Using Google Play Licensing Service</a></li>
+<li><a href="#marketinappbilling">Using Google Play In-app Billing</a></li>
+<li><a href="#marketintent">Linking to Your Apps on Google Play</a>
+  <ol>
+    <li><a href="#OpeningDetails">Opening an app's details page</a></li>
+    <li><a href="#PerformingSearch">Performing a search</a></li>
+    <li><a href="#BuildaButton">Build a Google Play button</a></li>
+    <li><a href="#UriSummary">Summary of URI formats</a></li>
+  </ol>
+</li>
+</ol>
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/publishing_overview.html">Publishing Overview</a></li>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a></li>
+</ol>
+
+<div id="qv-extra">
+  <img id="rule" src="{@docRoot}assets/images/grad-rule-qv.png">
+  <div id="qv-sub-rule">
+    <img src="{@docRoot}assets/images/icon_play.png" style="float:left;margin:0;padding:0 5px;">
+    <h2 style="color:#669999;">Already know about Google Play and want to get started?</h2>
+    <p>Go to <a href="http://play.google.com/apps/publish">Google Play</a>, create a developer
+account, and upload your application. For more information about required assets, listing details,
+and publishing options, see <a
+href="http://market.android.com/support/bin/answer.py?answer=113469">Upload
+Applications</a>.</p>
+  </div>
+</div>
+
+</div>
+</div>
+
+<p>One of the most effective ways to get your application into users' hands is to
+publish it on an application marketplace like Google Play. Publishing on Google Play is a
+straightforward process that you can do in just a few simple steps&mdash;register, configure,
+upload, and publish. Registration takes only a few minutes and needs to be done only once.
+The configuration and publishing steps can all be done through the Google Play Android Developer Console
+after you register as a Google Play developer.</p>
+
+<p>To start publishing on Google Play, first read this topic and then go to the <a
+href="https://play.google.com/apps/publish">Google Play Android Developer Console</a> and register as
+a Google Play developer.</p>
+
+
+<h2 id="overview">About Google Play</h2>
+
+<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
+your Android applications to users around the world. When you release your applications through
+Google Play you have access to a suite of developer tools that let you analyze your sales,
+identify market trends, and control who your applications are being distributed to. You also have
+access to several revenue-enhancing features, such as <a
+href="{@docRoot}guide/google/play/billing/index.html">in-app billing</a> and
+<a href="{@docRoot}guide/google/play/licensing/index.html">application licensing</a>.</p>
+
+<p>Before you can publish applications on Google Play, you need to <a
+href="http://play.google.com/apps/publish">register</a> as a Google Play developer. During the
+registration process you will need to create a developer profile, pay a registration fee, and agree
+to the <a href="http://www.android.com/us/developer-distribution-agreement.html">Google Play
+Developer Distribution Agreement</a>. After you register you can access the Developer
+Console, where you can upload applications, configure publishing options, and monitor publishing
+data. If you want to sell your applications or use the in-app billing feature, you will also need
+to set up a Google Checkout merchant account. For more information about the registration process,
+see <a href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113468">
+Developer Registration</a>.</p>
+
+<h2 id="marketpublish">Publishing Apps on Google Play</h2>
+
+<p>Publishing your application on Google Play is a simple process that involves three basic
+tasks (see figure 1):</p>
+
+<ul>
+  <li>Creating various graphical assets that
+accompany your app on Google Play.</li>
+  <li>Using the Google Play <a
+href="http://play.google.com/apps/publish">Developer Console</a> to configure publishing options,
+specify listing details, and upload your app and graphical assets to Google Play.</li>
+  <li>Reviewing your publishing settings and changing the release
+status of your app from Unpublished to Published.</li>
+</ul>
+
+<img src="{@docRoot}images/publishing/publishing_android_market.png"
+     alt="Shows the three steps that are required to publish on Google Play"
+     height="168"
+     id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> To publish apps on Google Play you must first <a
+href="{@docRoot}tools/publishing/preparing.html">prepare your app for release</a> and then perform
+three simple tasks.
+</p>
+
+<p class="caution"><strong>Important:</strong> You must <a
+href="{@docRoot}tools/publishing/preparing.html">prepare your application for release</a> before you
+can publish it on Google Play. When you prepare your application for release you configure it for
+release and build it in release mode. Building in release mode signs your application's {@code .apk}
+file with your private release key. You cannot publish an application on Google Play unless it is
+signed with your own private release key.</p>
+
+<h3>Preparing promotional materials</h3>
+
+<p>To fully leverage the marketing and publicity capabilities of Google Play, you need to create
+several graphical assets that accompany your app on Google Play, such as screenshots, videos,
+promotional graphics, and promotional text. At a minimum you must provide two screenshots of your
+application and a high resolution application icon. The screenshots are displayed on the details
+page for your application on Google Play, and the high resolution application icon is displayed
+in various locations throughout Google Play. The high resolution icon does not replace the
+launcher icon for your application, rather, it serves as a supplemental icon and should look
+the same as your launcher icon. Promotional video,
+graphics, and text are optional, although we strongly recommended that you prepare these for your
+app. For more information about the graphic assets that accompany your application, see <a
+href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=1078870">Graphic
+Assets for your Application</a>.</p>
+
+<h3>Configuring options and uploading assets</h3>
+
+<p>Google Play lets you target your application to a worldwide pool of users and devices. To
+reach these users you can use the Developer Console to configure various publishing
+options and listing details for your app. For example, you can choose the <a
+href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=138294&topic=
+2365624&ctx=topic">countries</a> you want to reach, the listing languages you want to use, and the
+<a
+href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=138412&topic=
+15867&ctx=topic">price</a> you want to charge in each country. You can also configure listing
+details such as the application type, <a
+href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113475&topic=
+2365760&ctx=topic">category</a>, and <a
+href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=188189&topic=
+2364761&ctx=topic">content rating</a>. In addition, if you want to sell items within your app using
+the in-app billing feature, you can use the Developer Console to <a
+href="http://grendel.sea.corp.google.com:48014/guide/google/play/billing/billing_admin.html#billing-list
+- setup">create a product list</a> and control which items are available for purchase in your
+app.</p>
+
+<p>When you are finished setting publishing options and listing details, you can upload your assets
+and your application to Google Play. You can also upload your application as a draft
+(unpublished) application, which lets you do final testing before you publish it for final
+release.</p>
+
+<p>To learn more about Google Play publishing settings, see the following resources:</p>
+
+<ul>
+  <li><a
+href="http://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=113469&topic=
+236562&ctx=topic">Upload Applications</a>&mdash;provides a summary of the publishing settings
+you can configure for an app.</li>
+  <li><a
+href="http://support.google.com/androidmarket/developer/bin/topic.py?hl=en&topic=15867">Selling
+Your Apps</a>&mdash;provides guidance about pricing, supported currencies, tax rates, and many
+other topics related to selling apps.</li>
+  <li><a
+href="https://support.google.com/androidmarket/developer/bin/answer.py?hl=en&answer=1169947&topic=
+15867&ctx=topic">Selling Apps in Multiple Currencies</a>&mdash;provides a description of how
+pricing, payouts, and exchange rates work.</li>
+</ul>
+
+<h3>Publishing your application</h3>
+
+<p>When you are satisfied that your publishing settings are correctly configured and your uploaded
+application is ready to be released to the public, you can simply click <strong>Publish</strong> in
+the Developer Console to make your app available for download
+around the world. Keep in mind, it can take several hours for your app to appear on Google
+Play after you click <strong>Publish</strong> in the Developer Console.</p>
+
+<h3>Controlling Distribution to Devices</h3>
+
+<p>If your application targets different device configurations, you can control which Android-powered
+devices have access to your application on Google Play by
+using Google Play filters. Filtering compares device configurations that you declare in your
+app's manifest file to the configuration defined by a device. For example, if you declare the camera
+filter in your manifest, only those devices that have a camera will see your app on Google
+Play. Filters must be configured in your application's manifest file when you are <a
+href="{@docRoot}tools/publishing/preparing.html">preparing your app for release</a> (that is, before
+you upload your app to Google Play). For more information, see <a
+href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a>.</p>
+
+<p>You can also use the multiple APK feature to distribute different {@code .apk} files under the same
+application listing and the same package name; however, you should use this option only as a last
+resort. Android applications usually run on most compatible devices with a single APK, by supplying
+alternative resources for different configurations (for example, different layouts for different screen
+sizes) and the Android system selects the appropriate resources for the device at runtime. In a
+few cases, however, a single APK is unable to support all device configurations, because alternative
+resources make the APK file too big (greater than 50MB) or other technical challenges prevent a
+single APK from working on all devices. Although we encourage you to develop and publish a single
+APK that supports as many device configurations as possible, doing so is sometimes
+not possible. To help you publish your application for as many devices as possible, Google Play
+allows you to publish multiple APKs under the same application listing. Google Play then supplies
+each APK to the appropriate devices based on configuration support you've declared in the manifest
+file of each APK. To use this feature, you need to build your separate {@code .apk} files when you are <a
+href="{@docRoot}tools/publishing/preparing.html">preparing your app for release</a> (that is, before
+you upload your app to Google Play). For more information, see <a
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html">Multiple APK Support</a>.</p>
+
+<h2 id="marketupgrade">Publishing Updates on Google Play</h2>
+
+<p>At any time after publishing an application on Google Play, you can upload
+and publish an update to the same application package. When you publish an
+update to an application, users who have already installed the
+application may receive a notification that an update is
+available for the application. They can then choose to update the application
+to the latest version.</p>
+
+<p>Before uploading the updated application, be sure that you have incremented
+the <code>android:versionCode</code> and <code>android:versionName</code>
+attributes in the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html"><code>&lt;manifest&gt;</code></a>
+element of the manifest file. Also, the package name must be the same as the existing version and
+the {@code .apk} file must be signed with the same private key. If the package name and signing
+certificate do <em>not</em> match those of the existing version, Google Play will
+consider it a new application, publish it as such, and will not offer it to existing users as an
+update.</p>
+
+<p>If you plan to publish your application on Google Play, you must make sure
+  that it meets the requirements listed below, which are enforced by Google Play
+  when you upload the application.</p>
+
+<h2 id="marketLicensing">Using Google Play Licensing Service</h2>
+
+<p>Google Play offers a licensing service that lets you enforce licensing
+policies for paid applications that you publish through Google Play. With
+Google Play Licensing, your applications can query Google Play at runtime
+to obtain the licensing status for the current user, then allow or disallow
+further use of the application as appropriate. Using the service, you can apply a flexible
+licensing policy on an application-by-application basis&mdash;each
+application can enforce its licensing status in the way most appropriate
+for it. </p>
+
+<p>Any application that you publish through Google Play can use the Google
+Play Licensing Service. The service uses no dedicated framework APIs, so you can
+add licensing to any application that uses a minimum API Level of 3 or
+higher.</p>
+
+<p>For complete information about Google Play Licensing Service and how to
+use it in your application, read <a
+href="{@docRoot}guide/google/play/licensing/index.html">Application Licensing</a>.</p>
+
+<h2 id="marketinappbilling">Using Google Play In-app Billing</h2>
+
+<p><a href="{@docRoot}guide/google/play/billing/billing_overview.html">Google Play In-app Billing</a>
+is a Google Play service that lets you sell digital content in your applications. You can use
+the service to sell a wide range of content, including downloadable  content such as media files or
+photos, and virtual content such as game levels or potions.</p>
+
+<p>When you use Google Play's in-app billing service to sell an item, Google Play handles all
+billing details so your application never has to directly process any financial transactions.
+Google Play uses the same checkout service that is used for application purchases, so your users
+experience a consistent and familiar purchase flow (see figure 1). Also, the transaction fee for
+in-app purchases is the same as the transaction fee for application purchases (30%).</p>
+
+<p>Any application that you publish through Google Play can implement in-app billing. No special
+account or registration is required other than a Google Play publisher account and a Google
+Checkout Merchant account. Also, because the service uses no dedicated framework APIs, you can add
+in-app billing to any application that uses a minimum API level of 4 or higher.</p>
+
+<p>To help you integrate in-app billing into your application, the Android SDK provides a <a
+href="{@docRoot}guide/google/play/billing/billing_integrate.html#billing-download">sample application</a>
+that demonstrates a simple implementation of in-app billing. The sample application contains
+examples of billing-related classes you can use to implement in-app billing in your application. It
+also contains examples of the database, user interface, and business logic you might use to
+implement in-app billing. For more information about the in-app billing feature, see the
+<a href="{@docRoot}guide/google/play/billing/index.html">In-app Billing documentation</a>.</p>
+
+<h2 id="marketintent">Linking to Your Apps on Google Play</h2>
+
+<p>To help users discover your published applications, you can use two special Google Play URIs
+that direct users to your application's details page or perform a search for all of your published
+applications on Google Play. You can use these URIs to create a button in your application or a
+link on a web page that:</p>
+
+<ul>
+  <li>Opens your application's details page in the Google Play application or web site.</li>
+  <li>Searches for all your published applications in the Google Play application or web
+site.</li>
+</ul>
+
+<p>You can launch the Google Play application or web site in the following ways:</p>
+<ul>
+  <li>Initiate an {@link android.content.Intent} from your application that launches the
+Google Play application on the user's device.</li>
+  <li>Provide a link on a web page that opens the Google Play web site (but will also
+open the Google Play application if clicked from a device).</li>
+</ul>
+
+<p>In both cases, whether you want to initiate the action from your application or from a web
+page, the URIs are quite similar. The only difference is the URI prefix.</p>
+
+<p>To open the Google Play application from your application, the prefix for the intent's data
+URI is:</p>
+
+<p style="margin-left:2em"><code>market://</code></p>
+
+<p>To open Google Play store from your web site, the prefix for the link URI is:</p>
+
+<p style="margin-left:2em"><code>http://play.google.com/store/</code></p>
+
+<p>The following sections describe how to create a complete URI for each action.</p>
+
+<p class="note"><strong>Note:</strong> If you create a link to open Google Play from your web
+site and the user selects it from an Android-powered device, the device's Google Play application will
+resolve the link so the user can use the Google Play application on the device instead of opening the web
+site. As such, you should always use {@code http://play.google.com/store/apps/...} URIs when
+creating a link on
+a web page. When pointing to your apps from within your Android app, use the
+{@code market://} URIs in an intent, so that the Google Play application always opens.</p>
+
+
+<h3 id="OpeningDetails">Opening an app's details page</h3>
+
+<p>As described above, you can open the details page for a specific application either on the
+Google Play application or the Google Play web site. The details page allows the user to see
+the application description, screenshots, reviews and more, and choose to install it.</p>
+
+<p>The format for the URI that opens the details page is:</p>
+
+<p style="margin-left:2em"><code>&lt;URI_prefix&gt;<b>apps/details?id=</b>&lt;package_name&gt;</code></p>
+
+<p>The <code>&lt;package_name&gt;</code> is a placeholder for the target application's
+fully-qualified package name, as declared in the <a
+href="{@docRoot}guide/topics/manifest/manifest-element.html#package">{@code
+package}</a> attribute of the <a href="{@docRoot}guide/topics/manifest/manifest-element.html">{@code
+&lt;manifest&gt;}</a> element.</p>
+
+<p>For example: <code>http://play.google.com/store/apps/details?id=com.example.myapp</code></p>
+
+
+<h4>Opening the app details page from your Android app</h4>
+
+<p>To open the Google Play details page from your application,
+create an intent with the {@link android.content.Intent#ACTION_VIEW} action and include a data URI
+in this format:</p>
+
+<p style="margin-left:2em"><code>market://details?id=&lt;package_name&gt;</code></p>
+
+<p>For example, here's how you can create an intent and open an application's details page in
+Google Play:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_VIEW);
+intent.setData(Uri.parse("market://details?id=com.example.android"));
+startActivity(intent);
+</pre>
+
+<p>This will open the Google Play application on the device to view the {@code
+com.example.android} application.</p>
+
+
+<h4>Opening the app details page from a web site</h4>
+
+<p>To open the details page from your web site, create a link with a URI in this
+format:</p>
+
+<p style="margin-left:2em">
+  <code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
+</p>
+
+<p>For example, here's a link that opens an application's details page on Google Play:</p>
+
+<pre>
+&lt;a href="http://play.google.com/store/apps/details?id=com.example.android">App Link&lt;/a>
+</pre>
+
+<p>When clicked from a desktop web browser, this opens the Google Play web site to view the
+{@code com.example.android} application. When clicked from an Android-powered device, users are
+given the option to use either their web browser or the Google Play application to view the
+application.</p>
+
+
+
+<h3 id="PerformingSearch">Performing a search</h3>
+
+<p>To initiate a search on Google Play, the format for the URI is:</p>
+
+<p style="margin-left:2em">
+  <code>&lt;URI_prefix&gt;<b>search?q=</b>&lt;query&gt;</code>
+</p>
+
+<p>The <code>&lt;query&gt;</code> is a placeholder for the search query to execute in Google
+Play. The query can be a raw text string or you can include a parameter that performs a search
+based on the publisher name:</p>
+
+<ul>
+  <li>To perform a raw text search, append the query string:
+  <p><code>&lt;URI_prefix&gt;<b>search?q=</b>&lt;search_query&gt;</code></p></li>
+
+  <li>To search based on the publisher name, use the {@code pub:} parameter in the query, followed
+by the publisher name:
+  <p><code>&lt;URI_prefix&gt;<b>search?q=pub:</b>&lt;publisher_name&gt;</code></p>
+  <p>You can use this type of search to show all of your published applications.</p></li>
+</ul>
+
+
+<h4>Searching from your Android app</h4>
+
+<p>To initiate a search on Google Play from your application, create an intent with the
+{@link android.content.Intent#ACTION_VIEW} action and include a data URI in this format:</p>
+
+<p style="margin-left:2em"><code>market://search?q=&lt;query&gt;</code></p>
+
+<p>The query may include the {@code pub:} parameter described above.</p>
+
+<p>For example, here's how you can initiate a search in the Google Play application, based on the
+publisher name:</p>
+
+<pre>
+Intent intent = new Intent(Intent.ACTION_VIEW);
+intent.setData(Uri.parse("market://search?q=pub:Your Publisher Name"));
+startActivity(intent);
+</pre>
+
+<p>This opens the Google Play application to perform the search. The search result shows all
+applications published by the publisher that are compatible with the current device.</p>
+
+
+<h4>Searching from a web site</h4>
+
+<p>To initiate a search on Google Play from your web site, create a link with a URI in this
+format:</p>
+
+<p style="margin-left:2em">
+  <code>http://play.google.com/store/search?q=&lt;query&gt;</code>
+</p>
+
+<p>The query may include the {@code pub:} parameter described above.</p>
+
+<p>For example, here's a link that initiates a search on Google Play, based on the
+publisher name:</p>
+
+<pre>
+&lt;a href="http://play.google.com/store/search?q=pub:Your Publisher Name">Search Link&lt;/a>
+</pre>
+
+<p>When clicked from a desktop web browser, this opens the Google Play web site and performs the
+search. When clicked from an Android-powered device, users are given the option to use either their
+web browser or the Google Play application to perform the search.</p>
+
+
+
+<h3 id="BuildaButton">Build a Google Play button</h3>
+
+<p>Use the following form to create a button for your web site that takes users to your application
+on Google Play. Input either your application's package name or your publisher name and the button
+will take users to Google Play to either view your application's information or view a list of your
+published apps. If users click the button while on an Android-powered device, the Google Play
+application will respond to show users your application(s).</p>
+
+<p>This form offers two styles of the official brand badge each at recommended sizes. You can pick
+between either "Get it on Google Play" or "Android app on Google Play." You should not modify the
+badge images in any way. For more usage guidelines,
+see the <a href="http://www.android.com/branding.html">Android Brand Guidelines</a>.</p>
+
+<style type="text/css">
+
+form.button-form {
+  margin-top:2em;
+}
+
+/* the label and input elements are blocks that float left in order to
+   keep the left edgets of the input aligned, and IE 6/7 do not fully support "inline-block" */
+label.block {
+  display: block;
+  float: left;
+  width: 100px;
+  padding-right: 10px;
+}
+
+input.text {
+  display: block;
+  float: left;
+  width: 250px;
+}
+
+div.button-row {
+  white-space:nowrap;
+  min-height:80px;
+}
+
+div.button-row input {
+  vertical-align:120%;
+}
+
+#jd-content div.button-row img {
+  margin: 0;
+}
+
+</style>
+
+<script type="text/javascript">
+
+// variables for creating 'try it out' demo button
+var imagePath = "http://www.android.com/images/brand/"
+var linkStart = "<a href=\"http://play.google.com/store/";
+var imageStart = "\">\n"
+        + "  <img alt=\"";
+  // leaves opening for the alt text value
+var imageSrc = "\"\n       src=\"" + imagePath;
+  // leaves opening for the image file name
+var imageEnd = ".png\" />\n</a>";
+
+// variables for creating code snippet
+var linkStartCode = "&lt;a href=\"http://play.google.com/store/";
+var imageStartCode = "\"&gt;\n"
+        + "  &lt;img alt=\"";
+  // leaves opening for the alt text value
+var imageSrcCode = "\"\n       src=\"" + imagePath;
+  // leaves opening for the image file name
+var imageEndCode = ".png\" />\n&lt;/a>";
+
+/** Generate the HTML snippet and demo based on form values */
+function buildButton(form) {
+  var selectedValue = $('form input[type=radio]:checked').val();
+  var altText = selectedValue.indexOf("get_it") != -1 ? "Get it on Google Play" : "Android app on Google Play";
+
+  if (form["package"].value != "com.example.android") {
+    $("#preview").show();
+    $("#snippet").show().html(linkStartCode + "apps/details?id=" + form["package"].value
+            + imageStartCode + altText + imageSrcCode
+            + selectedValue + imageEndCode);
+    $("#button-preview").html(linkStart + "apps/details?id=" + form["package"].value
+            + imageStart + altText + imageSrc
+            + selectedValue + imageEnd);
+  } else if (form["publisher"].value != "Example, Inc.") {
+    $("#preview").show();
+    $("#snippet").show().html(linkStartCode + "search?q=pub:" + form["publisher"].value
+            + imageStartCode + altText + imageSrcCode
+            + selectedValue + imageEndCode);
+    $("#button-preview").html(linkStart + "search?q=pub:" + form["publisher"].value
+            + imageStart + altText + imageSrc
+            + selectedValue + imageEnd);
+  } else {
+    alert("Please enter your package name or publisher name");
+  }
+  return false;
+}
+
+/** Listen for Enter key */
+function onTextEntered(event, form, me) {
+  // 13 = enter
+  if (event.keyCode == 13) {
+    buildButton(form);
+  }
+}
+
+/** When input is focused, remove example text and disable other input */
+function onInputFocus(object, example) {
+  if (object.value == example) {
+    $(object).val('').css({'color' : '#000'});
+  }
+  $('input[type="text"]:not(input[name='+object.name+'])',
+          object.parentNode).attr('disabled','true');
+  $('#'+object.name+'-clear').show();
+}
+
+/** When input is blured, restore example text if appropriate and enable other input */
+function onInputBlur(object, example) {
+  if (object.value.length < 1) {
+    $(object).attr('value',example).css({'color':'#ccc'});
+    $('input[type="text"]', object.parentNode).removeAttr('disabled');
+    $('#'+object.name+'-clear').hide();
+  }
+}
+
+/** Clear the form to start over */
+function clearLabel(id, example) {
+  $("#preview").hide();
+  $('#'+id+'').html('').attr('value',example).css({'color':'#ccc'});
+  $('input[type="text"]', $('#'+id+'').parent()).removeAttr('disabled');
+  $('#'+id+'-clear').hide();
+  return false;
+}
+
+/** When the doc is ready, find the inputs and color the input grey if the value is the example
+    text. This is necessary to handle back-navigation, which can auto-fill the form with previous
+    values (and text should not be grey) */
+$(document).ready(function() {
+  $(".button-form input.text").each(function(index) {
+    if ($(this).val() == $(this).attr("default")) {
+      $(this).css("color","#ccc");
+    } else {
+      /* This is necessary to handle back-navigation to the page after form was filled */
+      $('input[type="text"]:not(input[name='+this.name+'])',
+              this.parentNode).attr('disabled','true');
+      $('#'+this.name+'-clear').show();
+    }
+  });
+});
+
+</script>
+
+<form class="button-form">
+  <label class="block" for="package">Package name:</label>
+  <input class="text" type="text" id="package" name="package"
+         value="com.example.android"
+         default="com.example.android"
+         onfocus="onInputFocus(this, 'com.example.android')"
+         onblur="onInputBlur(this, 'com.example.android')"
+         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
+         <a id="package-clear" style="display:none" href="#"
+            onclick="return clearLabel('package','com.example.android');">clear</a>
+  <p style="clear:both;margin:0">&nbsp;<em>or</em></p>
+  <label class="block" style="margin-top:5px" for="publisher">Publisher name:</label>
+  <input class="text" type="text" id="publisher" name="publisher"
+         value="Example, Inc."
+         default="Example, Inc."
+         onfocus="onInputFocus(this, 'Example, Inc.')"
+         onblur="onInputBlur(this, 'Example, Inc.')"
+         onkeyup="return onTextEntered(event, this.parentNode, this)"/>&nbsp;
+         <a id="publisher-clear" style="display:none" href="#"
+            onclick="return clearLabel('publisher','Example, Inc.');">clear</a>
+         <br/><br/>
+
+<div class="button-row">
+  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_small" id="ns" checked="checked" />
+    <label for="ns"><img src="http://www.android.com/images/brand/get_it_on_play_logo_small.png"
+alt="Get it on Google Play (small)" /></label>
+    &nbsp;&nbsp;&nbsp;&nbsp;
+  <input type="radio" name="buttonStyle" value="get_it_on_play_logo_large" id="nm" />
+    <label for="nm"><img src="http://www.android.com/images/brand/get_it_on_play_logo_large.png"
+alt="Get it on Google Play (large)" /></label>
+</div>
+
+<div class="button-row">
+  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_small" id="ws" />
+    <label for="ws"><img src="http://www.android.com/images/brand/android_app_on_play_logo_small.png"
+alt="Android app on Google Play (small)" /></label>
+    &nbsp;&nbsp;&nbsp;&nbsp;
+  <input type="radio" name="buttonStyle" value="android_app_on_play_logo_large" id="wm" />
+    <label for="wm"><img src="http://www.android.com/images/brand/android_app_on_play_logo_large.png"
+alt="Android app on Google Play (large)" /></label>
+</div>
+
+  <input type="button" onclick="return buildButton(this.parentNode)" value="Build my button"
+style="padding:5px" />
+  <br/>
+</form>
+
+<div id="preview" style="display:none">
+  <p>Copy and paste this HTML into your web site:</p>
+  <textarea id="snippet" cols="100" rows="5" onclick="this.select()"
+style="font-family:monospace;background-color:#efefef;padding:5px;display:none;margin-bottom:1em">
+  </textarea >
+
+<p>Try it out:</p>
+<div id="button-preview" style="margin-top:1em"></div>
+</div>
+
+
+
+
+
+
+<h3 id="UriSummary">Summary of URI formats</h3>
+
+<p>The table below provides a summary of the URIs currently supported by the Google Play (both on
+the web and in the Android application), as discussed in the previous sections.</p>
+
+<table>
+<tr>
+<th>For this result</th>
+<th>Use this URI in a web page link</th>
+<th>Or this URI in an {@link android.content.Intent#ACTION_VIEW} intent</th>
+</tr>
+
+<tr>
+<td>Display the details screen for a specific application</td>
+<td><code>http://play.google.com/store/apps/details?id=&lt;package_name&gt;</code>
+<td><code>market://details?id=&lt;package_name&gt;</code></td>
+</tr>
+
+<tr>
+<td>Search for applications using a general string query.</td>
+<td><code>http://play.google.com/store/search?q=&lt;query&gt;</code></td>
+<td><code>market://search?q=&lt;query&gt;</code></td>
+</tr>
+
+<tr>
+<td>Search for applications by publisher name</td>
+<td><nobr><code>http://play.google.com/store/search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
+<td><nobr><code>market://search?q=pub:&lt;publisher_name&gt;</code></nobr></td>
+</tr>
+
+</table>
diff --git a/docs/html/tools/workflow/publishing/publishing_overview.jd b/docs/html/tools/workflow/publishing/publishing_overview.jd
new file mode 100755
index 0000000..ca0dca8
--- /dev/null
+++ b/docs/html/tools/workflow/publishing/publishing_overview.jd
@@ -0,0 +1,231 @@
+page.title=Publishing Overview
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>Quickview</h2>
+  <ul>
+    <li>Learn how to publish Android apps.</li>
+    <li>Find out how to prepare apps for release.</li>
+    <li>Learn how to release apps to users.</li>
+  </ul>
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
+    <li><a href="#publishing-release">Releasing Your Application to Users</a>
+    <ol>
+      <li><a href="#publishing-market">Releasing on Google Play</a></li>
+      <li><a href="#publishing-website">Releasing on your own website</a></li>
+      <li><a href="#publishing-email">Releasing through email</a></li>
+    </ol>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/publishing/preparing.html">Preparing for
+    Release</a></li>
+    <li><a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a></li>
+  </ol>
+</div>
+</div>
+
+<p>Publishing is the process that makes your Android applications available to users. When you
+publish an Android application you perform two main tasks:</p>
+
+<ul>
+  <li>You prepare the application for release.
+    <p>During the preparation step you build a release version of your application, which users can
+      download and install on their Android-powered devices.</p>
+  </li>
+  <li>You release the application to users.
+    <p>During the release step you publicize, sell, and distribute the release version of your
+      application to users.</p>
+  </li>
+</ul>
+
+<p>Usually, you release your application through an application marketplace, such as Google Play.
+However, you can also release applications by sending them directly to users or by letting users
+download them from your own website.</p>
+
+<p>Figure 1 shows how the publishing process fits into the overall Android <a
+href="{@docRoot}tools/workflow/index.html">application development process</a>.
+The publishing process is typically performed after you finish testing your application in a debug
+environment. Also, as a best practice, your application should meet all of your release criteria for
+functionality, performance, and stability before you begin the publishing process.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
+       process fits into the overall development process" height="86" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
+href="{@docRoot}tools/workflow/index.html">application development process</a>.
+</p>
+
+<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
+
+<p>Preparing your application for release is a multi-step process that involves the following
+tasks:</p>
+
+<ul>
+
+  <li>Configuring your application for release.
+    <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
+    <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+    attribute from your manifest file. You should also provide values for the
+    <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
+    located in the
+    <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
+    element. You may also have to configure several other settings to meet Google Play
+    requirements or accomodate whatever method you're using to release your application.</p>
+  </li>
+  <li>Building and signing a release version of your application.
+    <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
+    with the Android SDK tools provide everything you need to build and sign a release version of
+    your application.</p>
+  </li>
+  <li>Testing the release version of your application.
+    <p>Before you distribute your application, you should thoroughly test the release version on at
+    least one target handset device and one target tablet device.</p>
+  </li>
+  <li>Updating application resources for release.
+    <p>You need to be sure that all application resources such as multimedia files and graphics
+    are updated and included with your application or staged on the proper production servers.</p>
+  </li>
+  <li>Preparing remote servers and services that your application depends on.
+    <p>If your application depends on external servers or services, you need to be sure they
+    are secure and production ready.</p>
+  </li>
+</ul>
+
+<p>You may have to perform several other tasks as part of the preparation process. For example, you
+will need to get a private key for signing your application, and you may need to get a Maps API
+release key if you are using the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>. You will also need to create an icon for your application, and you may want to prepare
+an End User License Agreement (EULA) to protect your person, organization, and intellectual
+property.</p>
+
+<p>When you are finished preparing your application for release you will have a signed
+<code>.apk</code> file that you can distribute to users.</p>
+
+<p>To learn how to prepare your application for release, see <a
+href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
+topic provides step-by-step instructions for configuring and building a release version of your
+application.</p>
+
+<h2 id="publishing-release">Releasing Your Application to Users</h2>
+
+<p>You can release your Android applications several ways. Usually, you release applications
+through an application marketplace, such as Google Play, but you can also release applications
+on your own website or by sending an application directly to a user. Google Play is the
+recommended marketplace for Android applications and is particularly useful if you want to
+distribute your applications to a large global audience. The other two release methods&mdash;server
+distribution and email distribution&mdash;are useful if you are releasing an application to a small
+group of users (for example, a work group in an enterprise environment), or if you do not want to
+make your application available to the general public.</p>
+
+<h3 id="publishing-market">Releasing Your Applications on Google Play</h3>
+
+<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
+your Android applications to users around the world. When you release your applications through
+Google Play you have access to a suite of developer tools that let you analyze your sales,
+identify market trends, and control who your applications are being distributed to. You also have
+access to several revenue-enhancing features that are not available anywhere else, such as <a
+href="{@docRoot}guide/google/play/billing/index.html">in-app billing</a> and <a
+href="{@docRoot}guide/google/play/licensing.html">application licensing</a>. This rich array of tools
+and features, coupled with numerous end-user community features, makes Google Play the premier
+marketplace for selling and buying Android applications.</p>
+
+<p>Releasing your application on Google Play is a simple process that involves three basic
+  steps:</p>
+
+<div class="figure" style="width:275px">
+  <img src="{@docRoot}images/publishing/publishing_unknown_sources.png"
+       alt="Screenshot showing the graphical user interface element that allows unknown sources
+       to be installed" />
+  <p class="img-caption">
+    <strong>Figure 2.</strong> The <strong>Unknown sources</strong> setting lets you install
+    applications that are not published on Google Play .
+  </p>
+</div>
+
+<ul>
+  <li>Preparing promotional materials.
+    <p>To fully leverage the marketing and publicity capabilities of Google Play, you need to
+    create promotional materials for your application, such as screenshots, videos, graphics, and
+    promotional text.</p>
+  </li>
+  <li>Configuring options and uploading assets.
+    <p>Google Play lets you target your application to a worldwide pool of users and devices.
+    By configuring various Google Play settings, you can choose the countries you want to
+    reach, the listing languages you want to use, and the price you want to charge in each
+    country. You can also configure listing details such as the application type, category, and
+    content rating. When you are done configuring options you can upload your promotional materials
+    and your application as a draft (unpublished) application.</p>
+  </li>
+  <li>Publishing the release version of your application.
+    <p>If you are satisfied that your publishing settings are correctly configured and your
+    uploaded application is ready to be released to the public, you can simply click
+    <strong>Publish</strong > in the developer console and within minutes your application will be
+    live and available for download around the world.</p>
+  </li>
+</ul>
+
+<p>For information about Google Play, see <a
+href="{@docRoot}tools/publishing/publishing.html#market">Publishing on Google Play</a>. This
+topic provides an introduction to Google Play features and provides a step-by-step guide for
+distributing your applications on Google Play.</p>
+
+<h3 id="publishing-website">Releasing your application on your own website</h3>
+
+<p>If you do not want to release your application on an application marketplace like Google Play,
+you can release your application by making it available for download on your own website or server.
+To do this, you must first prepare your application for release (that is, you must build it for
+release and sign it). Then all you need to do is host the release-ready application on your website
+and provide a download link for the application. When users browse to your website with their
+Android-powered devices and download your application, the Android system will automatically start
+installing the application on the device. However, the installation process will start automatically
+only if the user has configured their device to allow the installation of non-Google Play
+applications.</p>
+
+<div class="figure" style="width:275px">
+  <img src="{@docRoot}images/publishing/publishing_via_email.png"
+       alt="Screenshot showing the graphical user interface users see when you send them an app"
+       height="453" />
+  <p class="img-caption">
+    <strong>Figure 3.</strong> Users can simply click <strong>Install</strong> when you send them
+    an application via email.
+  </p>
+</div>
+
+<p>By default, Android-powered devices allow users to install applications only if the applications
+have been downloaded from Google Play. To allow the installation of applications from other
+sources, users need to enable the <strong>Unknown sources</strong> setting on their devices, and
+they need to make this configuration change before they download your application to their
+device (see figure 2).</p>
+
+<p class="note"><strong>Note:</strong> Some network providers do not allow users to install
+applications from unknown sources.</p>
+
+<p>Although it is relatively easy to release your application on your own website, it can be
+inefficient and cumbersome. For example, if you want to monetize your application you will
+have to process and track all financial transactions yourself and you will not be able to use
+Google Play's in-app billing feature to sell in-app products. In addition, you will not be
+able to use the licensing feature to help prevent unauthorized installation and use of your
+application.</p>
+
+<h3 id="publishing-email">Releasing your application through email</h3>
+
+<p>The easiest and quickest way to release your application is to send it to a user through
+email. To do this, you prepare your application for release and then attach it to an email
+and send it to a user. When the user opens your email message on their Android-powered device
+the Android system will recognize the <code>.apk</code> and display an <strong>Install Now</strong>
+button in the email message (see figure 3). Users can install your application by touching the
+button.</p>
+
+<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button appears only if a
+user has configured their device to allow the installation of non-Google Play applications and
+they open your email with the native Gmail application.</p>
+
+<p>Releasing applications through email is convenient if you are sending your application to
+only a few trusted users, but it provides few protections from piracy and unauthorized
+distribution; that is, anyone you send your application to can simply forward it to someone else.
+else.
diff --git a/docs/html/tools/workflow/publishing/versioning.jd b/docs/html/tools/workflow/publishing/versioning.jd
new file mode 100644
index 0000000..e0b4435
--- /dev/null
+++ b/docs/html/tools/workflow/publishing/versioning.jd
@@ -0,0 +1,174 @@
+page.title=Versioning Your Applications
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>Your application <em>must</em> be versioned</a></li>
+<li>You set the version in the application's manifest file</li>
+<li>How you version your applications affects how users upgrade </li>
+<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
+</ul>
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#appversioning">Setting Application Version</a></li>
+<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
+</ol>
+
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish Your Application</a></li>
+<li><a href="{@docRoot}tools/publishing/publishing.html#market">Publishing On Google Play</a></li>
+<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Versioning is a critical component of your application upgrade and maintenance
+strategy. Versioning is important because:</p>
+
+<ul>
+<li>Users need to have specific information about the application version that
+is installed on their devices and the upgrade versions available for
+installation. </li>
+<li>Other applications &mdash; including other applications that you publish as
+a suite &mdash; need to query the system for your application's version, to
+determine compatibility and identify dependencies.</li>
+<li>Services through which you will publish your application(s) may also need to
+query your application for its version, so that they can display the version to
+users. A publishing service may also need to check the application version to
+determine compatibility and establish upgrade/downgrade relationships.</li>
+</ul>
+
+<p>The Android system does not use app version information to enforce
+restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
+developer) are responsible for enforcing version restrictions within your application or by
+informing users of the version restrictions and limitations. The Android system does, however,
+enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
+manifest. This attribute allows an application to specify the minimum system API with which it is
+compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
+Version</a>.</p>
+
+<h2 id="appversioning">Setting Application Version</h2>
+<p>To define the version information for your application, you set attributes in
+the application's manifest file. Two attributes are available, and you should
+always define values for both of them: </p>
+
+<ul>
+<li><code>android:versionCode</code> &mdash; An integer value that represents
+the version of the application code, relative to other versions.
+
+<p>The value is an integer so that other applications can programmatically
+evaluate it, for example to check an upgrade or downgrade relationship. You can
+set the value to any integer you want, however you should make sure that each
+successive release of your application uses a greater value. The system does not
+enforce this behavior, but increasing the value with successive releases is
+normative. </p>
+
+<p>Typically, you would release the first version of your application with
+versionCode set to 1, then monotonically increase the value with each release,
+regardless whether the release constitutes a major or minor release. This means
+that the <code>android:versionCode</code> value does not necessarily have a
+strong resemblance to the application release version that is visible to the
+user (see <code>android:versionName</code>, below). Applications and publishing
+services should not display this version value to users.</p>
+</li>
+<li><code>android:versionName</code> &mdash; A string value that represents the
+release version of the application code, as it should be shown to users.
+<p>The value is a string so that you can describe the application version as a
+&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
+absolute or relative version identifier. </p>
+
+<p>As with <code>android:versionCode</code>, the system does not use this value
+for any internal purpose, other than to enable applications to display it to
+users. Publishing services may also extract the <code>android:versionName</code>
+value for display to users.</p>
+</li>
+</ul>
+
+<p>You define both of these version attributes in the
+<code>&lt;manifest&gt;</code> element of the manifest file. </p>
+
+<p>Here's an example manifest that shows the <code>android:versionCode</code>
+and <code>android:versionName</code> attributes in the
+<code>&lt;manifest&gt;</code> element. </p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.package.name"
+      android:versionCode="2"
+      android:versionName="1.1"&gt;
+    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<p>In this example, note that <code>android:versionCode</code> value indicates
+that the current .apk contains the second release of the application code, which
+corresponds to a minor follow-on release, as shown by the
+<code>android:versionName</code> string. </p>
+
+<p>The Android framework provides an API to let applications query the system
+for version information about your application. To obtain version information,
+applications use the
+{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
+method of {@link android.content.pm.PackageManager PackageManager}. </p>
+
+<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
+
+<p>If your application requires a specific minimum version of the Android
+platform, or is designed only to support a certain range of Android platform
+versions, you can specify those version requirements as API Level identifiers
+in the application's manifest file. Doing so ensures that your
+application can only be installed on devices that
+are running a compatible version of the Android system. </p>
+
+<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
+element in the application's manifest, with one or more of these attributes: </p>
+
+<ul>
+<li><code>android:minSdkVersion</code> &mdash; The minimum version
+of the Android platform on which the application will run, specified
+by the platform's API Level identifier. </li>
+<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
+on which the application is designed to run. In some cases, this allows the
+application to use manifest elements or behaviors defined in the target
+API Level, rather than being restricted to using only those defined
+for the minimum API Level.</li>
+<li><code>android:maxSdkVersion</code> &mdash; The maximum version
+of the Android platform on which the application is designed to run,
+specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation before using this attribute. </li>
+</ul>
+
+<p>When preparing to install your application, the system checks the value of this
+attribute and compares it to the system version. If the
+<code>android:minSdkVersion</code> value is greater than the system version, the
+system aborts the installation of the application. Similarly, the system
+installs your application only if its <code>android:maxSdkVersion</code>
+is compatible with the platform version.</p>
+
+<p>If you do not specify these attributes in your manifest, the system assumes
+that your application is compatible with all platform versions, with no
+maximum API Level. </p>
+
+<p>To specify a minimum platform version for your application, add a
+<code>&lt;uses-sdk&gt;</code> element as a child of
+<code>&lt;manifest&gt;</code>, then define the
+<code>android:minSdkVersion</code> as an attribute. </p>
+
+<p>For more information, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+manifest element documentation and the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document.</p>
diff --git a/docs/html/tools/workflow/publishing_overview.jd b/docs/html/tools/workflow/publishing_overview.jd
new file mode 100755
index 0000000..ca0dca8
--- /dev/null
+++ b/docs/html/tools/workflow/publishing_overview.jd
@@ -0,0 +1,231 @@
+page.title=Publishing Overview
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+  <h2>Quickview</h2>
+  <ul>
+    <li>Learn how to publish Android apps.</li>
+    <li>Find out how to prepare apps for release.</li>
+    <li>Learn how to release apps to users.</li>
+  </ul>
+  <h2>In this document</h2>
+  <ol>
+    <li><a href="#publishing-prepare">Preparing Your Application for Release</a></li>
+    <li><a href="#publishing-release">Releasing Your Application to Users</a>
+    <ol>
+      <li><a href="#publishing-market">Releasing on Google Play</a></li>
+      <li><a href="#publishing-website">Releasing on your own website</a></li>
+      <li><a href="#publishing-email">Releasing through email</a></li>
+    </ol>
+  </ol>
+  <h2>See also</h2>
+  <ol>
+    <li><a href="{@docRoot}tools/publishing/preparing.html">Preparing for
+    Release</a></li>
+    <li><a href="{@docRoot}tools/publishing/publishing.html">Publishing on Google Play</a></li>
+  </ol>
+</div>
+</div>
+
+<p>Publishing is the process that makes your Android applications available to users. When you
+publish an Android application you perform two main tasks:</p>
+
+<ul>
+  <li>You prepare the application for release.
+    <p>During the preparation step you build a release version of your application, which users can
+      download and install on their Android-powered devices.</p>
+  </li>
+  <li>You release the application to users.
+    <p>During the release step you publicize, sell, and distribute the release version of your
+      application to users.</p>
+  </li>
+</ul>
+
+<p>Usually, you release your application through an application marketplace, such as Google Play.
+However, you can also release applications by sending them directly to users or by letting users
+download them from your own website.</p>
+
+<p>Figure 1 shows how the publishing process fits into the overall Android <a
+href="{@docRoot}tools/workflow/index.html">application development process</a>.
+The publishing process is typically performed after you finish testing your application in a debug
+environment. Also, as a best practice, your application should meet all of your release criteria for
+functionality, performance, and stability before you begin the publishing process.</p>
+
+<img src="{@docRoot}images/publishing/publishing_overview.png" alt="Shows where the publishing
+       process fits into the overall development process" height="86" id="figure1" />
+<p class="img-caption">
+  <strong>Figure 1.</strong> Publishing is the last phase of the Android <a
+href="{@docRoot}tools/workflow/index.html">application development process</a>.
+</p>
+
+<h2 id="publishing-prepare">Preparing Your Application for Release</h2>
+
+<p>Preparing your application for release is a multi-step process that involves the following
+tasks:</p>
+
+<ul>
+
+  <li>Configuring your application for release.
+    <p>At a minimum you need to remove {@link android.util.Log} calls and remove the
+    <a href="{@docRoot}guide/topics/manifest/application-element.html#debug">android:debuggable</a>
+    attribute from your manifest file. You should also provide values for the
+    <code>android:versionCode</code> and <code>android:versionName</code> attributes, which are
+    located in the
+    <a href="{@docRoot}guide/topics/manifest/manifest-element.html">&lt;manifest&gt;</a>
+    element. You may also have to configure several other settings to meet Google Play
+    requirements or accomodate whatever method you're using to release your application.</p>
+  </li>
+  <li>Building and signing a release version of your application.
+    <p>The Android Development Tools (ADT) plugin and the Ant build script that are provided
+    with the Android SDK tools provide everything you need to build and sign a release version of
+    your application.</p>
+  </li>
+  <li>Testing the release version of your application.
+    <p>Before you distribute your application, you should thoroughly test the release version on at
+    least one target handset device and one target tablet device.</p>
+  </li>
+  <li>Updating application resources for release.
+    <p>You need to be sure that all application resources such as multimedia files and graphics
+    are updated and included with your application or staged on the proper production servers.</p>
+  </li>
+  <li>Preparing remote servers and services that your application depends on.
+    <p>If your application depends on external servers or services, you need to be sure they
+    are secure and production ready.</p>
+  </li>
+</ul>
+
+<p>You may have to perform several other tasks as part of the preparation process. For example, you
+will need to get a private key for signing your application, and you may need to get a Maps API
+release key if you are using the <a
+href="http://code.google.com/android/add-ons/google-apis/maps-overview.html">Google Maps external
+library</a>. You will also need to create an icon for your application, and you may want to prepare
+an End User License Agreement (EULA) to protect your person, organization, and intellectual
+property.</p>
+
+<p>When you are finished preparing your application for release you will have a signed
+<code>.apk</code> file that you can distribute to users.</p>
+
+<p>To learn how to prepare your application for release, see <a
+href="{@docRoot}tools/publishing/preparing.html">Preparing for Release</a> in the Dev Guide. This
+topic provides step-by-step instructions for configuring and building a release version of your
+application.</p>
+
+<h2 id="publishing-release">Releasing Your Application to Users</h2>
+
+<p>You can release your Android applications several ways. Usually, you release applications
+through an application marketplace, such as Google Play, but you can also release applications
+on your own website or by sending an application directly to a user. Google Play is the
+recommended marketplace for Android applications and is particularly useful if you want to
+distribute your applications to a large global audience. The other two release methods&mdash;server
+distribution and email distribution&mdash;are useful if you are releasing an application to a small
+group of users (for example, a work group in an enterprise environment), or if you do not want to
+make your application available to the general public.</p>
+
+<h3 id="publishing-market">Releasing Your Applications on Google Play</h3>
+
+<p>Google Play is a robust publishing platform that helps you publicize, sell, and distribute
+your Android applications to users around the world. When you release your applications through
+Google Play you have access to a suite of developer tools that let you analyze your sales,
+identify market trends, and control who your applications are being distributed to. You also have
+access to several revenue-enhancing features that are not available anywhere else, such as <a
+href="{@docRoot}guide/google/play/billing/index.html">in-app billing</a> and <a
+href="{@docRoot}guide/google/play/licensing.html">application licensing</a>. This rich array of tools
+and features, coupled with numerous end-user community features, makes Google Play the premier
+marketplace for selling and buying Android applications.</p>
+
+<p>Releasing your application on Google Play is a simple process that involves three basic
+  steps:</p>
+
+<div class="figure" style="width:275px">
+  <img src="{@docRoot}images/publishing/publishing_unknown_sources.png"
+       alt="Screenshot showing the graphical user interface element that allows unknown sources
+       to be installed" />
+  <p class="img-caption">
+    <strong>Figure 2.</strong> The <strong>Unknown sources</strong> setting lets you install
+    applications that are not published on Google Play .
+  </p>
+</div>
+
+<ul>
+  <li>Preparing promotional materials.
+    <p>To fully leverage the marketing and publicity capabilities of Google Play, you need to
+    create promotional materials for your application, such as screenshots, videos, graphics, and
+    promotional text.</p>
+  </li>
+  <li>Configuring options and uploading assets.
+    <p>Google Play lets you target your application to a worldwide pool of users and devices.
+    By configuring various Google Play settings, you can choose the countries you want to
+    reach, the listing languages you want to use, and the price you want to charge in each
+    country. You can also configure listing details such as the application type, category, and
+    content rating. When you are done configuring options you can upload your promotional materials
+    and your application as a draft (unpublished) application.</p>
+  </li>
+  <li>Publishing the release version of your application.
+    <p>If you are satisfied that your publishing settings are correctly configured and your
+    uploaded application is ready to be released to the public, you can simply click
+    <strong>Publish</strong > in the developer console and within minutes your application will be
+    live and available for download around the world.</p>
+  </li>
+</ul>
+
+<p>For information about Google Play, see <a
+href="{@docRoot}tools/publishing/publishing.html#market">Publishing on Google Play</a>. This
+topic provides an introduction to Google Play features and provides a step-by-step guide for
+distributing your applications on Google Play.</p>
+
+<h3 id="publishing-website">Releasing your application on your own website</h3>
+
+<p>If you do not want to release your application on an application marketplace like Google Play,
+you can release your application by making it available for download on your own website or server.
+To do this, you must first prepare your application for release (that is, you must build it for
+release and sign it). Then all you need to do is host the release-ready application on your website
+and provide a download link for the application. When users browse to your website with their
+Android-powered devices and download your application, the Android system will automatically start
+installing the application on the device. However, the installation process will start automatically
+only if the user has configured their device to allow the installation of non-Google Play
+applications.</p>
+
+<div class="figure" style="width:275px">
+  <img src="{@docRoot}images/publishing/publishing_via_email.png"
+       alt="Screenshot showing the graphical user interface users see when you send them an app"
+       height="453" />
+  <p class="img-caption">
+    <strong>Figure 3.</strong> Users can simply click <strong>Install</strong> when you send them
+    an application via email.
+  </p>
+</div>
+
+<p>By default, Android-powered devices allow users to install applications only if the applications
+have been downloaded from Google Play. To allow the installation of applications from other
+sources, users need to enable the <strong>Unknown sources</strong> setting on their devices, and
+they need to make this configuration change before they download your application to their
+device (see figure 2).</p>
+
+<p class="note"><strong>Note:</strong> Some network providers do not allow users to install
+applications from unknown sources.</p>
+
+<p>Although it is relatively easy to release your application on your own website, it can be
+inefficient and cumbersome. For example, if you want to monetize your application you will
+have to process and track all financial transactions yourself and you will not be able to use
+Google Play's in-app billing feature to sell in-app products. In addition, you will not be
+able to use the licensing feature to help prevent unauthorized installation and use of your
+application.</p>
+
+<h3 id="publishing-email">Releasing your application through email</h3>
+
+<p>The easiest and quickest way to release your application is to send it to a user through
+email. To do this, you prepare your application for release and then attach it to an email
+and send it to a user. When the user opens your email message on their Android-powered device
+the Android system will recognize the <code>.apk</code> and display an <strong>Install Now</strong>
+button in the email message (see figure 3). Users can install your application by touching the
+button.</p>
+
+<p class="note"><strong>Note:</strong> The <strong>Install Now</strong> button appears only if a
+user has configured their device to allow the installation of non-Google Play applications and
+they open your email with the native Gmail application.</p>
+
+<p>Releasing applications through email is convenient if you are sending your application to
+only a few trusted users, but it provides few protections from piracy and unauthorized
+distribution; that is, anyone you send your application to can simply forward it to someone else.
+else.
diff --git a/docs/html/tools/workflow/versioning.jd b/docs/html/tools/workflow/versioning.jd
new file mode 100644
index 0000000..e0b4435
--- /dev/null
+++ b/docs/html/tools/workflow/versioning.jd
@@ -0,0 +1,174 @@
+page.title=Versioning Your Applications
+@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>Quickview</h2>
+
+<ul>
+<li>Your application <em>must</em> be versioned</a></li>
+<li>You set the version in the application's manifest file</li>
+<li>How you version your applications affects how users upgrade </li>
+<li>Determine your versioning strategy early in the development process, including considerations for future releases.</li>
+</ul>
+
+<h2>In this document</h2>
+
+<ol>
+<li><a href="#appversioning">Setting Application Version</a></li>
+<li><a href="#minsdkversion">Specifying Your Application's System API Requirements</a>
+</ol>
+
+
+<h2>See also</h2>
+
+<ol>
+<li><a href="{@docRoot}tools/publishing/preparing.html">Preparing to Publish Your Application</a></li>
+<li><a href="{@docRoot}tools/publishing/publishing.html#market">Publishing On Google Play</a></li>
+<li><a href="{@docRoot}guide/topics/manifest/manifest-intro.html">The AndroidManifest.xml File</a></li>
+</ol>
+
+</div>
+</div>
+
+<p>Versioning is a critical component of your application upgrade and maintenance
+strategy. Versioning is important because:</p>
+
+<ul>
+<li>Users need to have specific information about the application version that
+is installed on their devices and the upgrade versions available for
+installation. </li>
+<li>Other applications &mdash; including other applications that you publish as
+a suite &mdash; need to query the system for your application's version, to
+determine compatibility and identify dependencies.</li>
+<li>Services through which you will publish your application(s) may also need to
+query your application for its version, so that they can display the version to
+users. A publishing service may also need to check the application version to
+determine compatibility and establish upgrade/downgrade relationships.</li>
+</ul>
+
+<p>The Android system does not use app version information to enforce
+restrictions on upgrades, downgrades, or compatibility of third-party apps. Instead, you (the
+developer) are responsible for enforcing version restrictions within your application or by
+informing users of the version restrictions and limitations. The Android system does, however,
+enforce system version compatibility as expressed by the <code>minSdkVersion</code> attribute in the
+manifest. This attribute allows an application to specify the minimum system API with which it is
+compatible. For more information see <a href="#minsdkversion">Specifying Minimum System API
+Version</a>.</p>
+
+<h2 id="appversioning">Setting Application Version</h2>
+<p>To define the version information for your application, you set attributes in
+the application's manifest file. Two attributes are available, and you should
+always define values for both of them: </p>
+
+<ul>
+<li><code>android:versionCode</code> &mdash; An integer value that represents
+the version of the application code, relative to other versions.
+
+<p>The value is an integer so that other applications can programmatically
+evaluate it, for example to check an upgrade or downgrade relationship. You can
+set the value to any integer you want, however you should make sure that each
+successive release of your application uses a greater value. The system does not
+enforce this behavior, but increasing the value with successive releases is
+normative. </p>
+
+<p>Typically, you would release the first version of your application with
+versionCode set to 1, then monotonically increase the value with each release,
+regardless whether the release constitutes a major or minor release. This means
+that the <code>android:versionCode</code> value does not necessarily have a
+strong resemblance to the application release version that is visible to the
+user (see <code>android:versionName</code>, below). Applications and publishing
+services should not display this version value to users.</p>
+</li>
+<li><code>android:versionName</code> &mdash; A string value that represents the
+release version of the application code, as it should be shown to users.
+<p>The value is a string so that you can describe the application version as a
+&lt;major&gt;.&lt;minor&gt;.&lt;point&gt; string, or as any other type of
+absolute or relative version identifier. </p>
+
+<p>As with <code>android:versionCode</code>, the system does not use this value
+for any internal purpose, other than to enable applications to display it to
+users. Publishing services may also extract the <code>android:versionName</code>
+value for display to users.</p>
+</li>
+</ul>
+
+<p>You define both of these version attributes in the
+<code>&lt;manifest&gt;</code> element of the manifest file. </p>
+
+<p>Here's an example manifest that shows the <code>android:versionCode</code>
+and <code>android:versionName</code> attributes in the
+<code>&lt;manifest&gt;</code> element. </p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+      package="com.example.package.name"
+      android:versionCode="2"
+      android:versionName="1.1"&gt;
+    &lt;application android:icon="@drawable/icon" android:label="@string/app_name"&gt;
+        ...
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<p>In this example, note that <code>android:versionCode</code> value indicates
+that the current .apk contains the second release of the application code, which
+corresponds to a minor follow-on release, as shown by the
+<code>android:versionName</code> string. </p>
+
+<p>The Android framework provides an API to let applications query the system
+for version information about your application. To obtain version information,
+applications use the
+{@link android.content.pm.PackageManager#getPackageInfo(java.lang.String, int)}
+method of {@link android.content.pm.PackageManager PackageManager}. </p>
+
+<h2 id="minsdkversion">Specifying Your Application's System API Requirements</h2>
+
+<p>If your application requires a specific minimum version of the Android
+platform, or is designed only to support a certain range of Android platform
+versions, you can specify those version requirements as API Level identifiers
+in the application's manifest file. Doing so ensures that your
+application can only be installed on devices that
+are running a compatible version of the Android system. </p>
+
+<p>To specify API Level requirements, add a <code>&lt;uses-sdk&gt;</code>
+element in the application's manifest, with one or more of these attributes: </p>
+
+<ul>
+<li><code>android:minSdkVersion</code> &mdash; The minimum version
+of the Android platform on which the application will run, specified
+by the platform's API Level identifier. </li>
+<li><code>android:targetSdkVersion</code> &mdash; Specifies the API Level
+on which the application is designed to run. In some cases, this allows the
+application to use manifest elements or behaviors defined in the target
+API Level, rather than being restricted to using only those defined
+for the minimum API Level.</li>
+<li><code>android:maxSdkVersion</code> &mdash; The maximum version
+of the Android platform on which the application is designed to run,
+specified by the platform's API Level identifier. <strong>Important:</strong> Please read the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+documentation before using this attribute. </li>
+</ul>
+
+<p>When preparing to install your application, the system checks the value of this
+attribute and compares it to the system version. If the
+<code>android:minSdkVersion</code> value is greater than the system version, the
+system aborts the installation of the application. Similarly, the system
+installs your application only if its <code>android:maxSdkVersion</code>
+is compatible with the platform version.</p>
+
+<p>If you do not specify these attributes in your manifest, the system assumes
+that your application is compatible with all platform versions, with no
+maximum API Level. </p>
+
+<p>To specify a minimum platform version for your application, add a
+<code>&lt;uses-sdk&gt;</code> element as a child of
+<code>&lt;manifest&gt;</code>, then define the
+<code>android:minSdkVersion</code> as an attribute. </p>
+
+<p>For more information, see the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>&lt;uses-sdk&gt;</code></a>
+manifest element documentation and the <a
+href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a> document.</p>
diff --git a/docs/html/training/advanced.jd b/docs/html/training/advanced.jd
new file mode 100644
index 0000000..7f9ddd4
--- /dev/null
+++ b/docs/html/training/advanced.jd
@@ -0,0 +1,11 @@
+page.title=Advanced Training
+
+@jd:body
+
+<p>Advanced Training contains a variety of classes that teach you best practices in Android
+development. These classes simplify the steps required to enhance your app with powerful
+platform features or effectively optimize your app performance.</p>
+
+<p>What you see now is still the beginning. We plan to add many more classes, expand and refine
+existing classes, re-organize, and build courses that help you enhance your apps using
+objective-oriented collections of classes.</p>
\ No newline at end of file
diff --git a/docs/html/training/backward-compatible-ui/index.jd b/docs/html/training/backward-compatible-ui/index.jd
index 7e27e68..f81b5a7 100644
--- a/docs/html/training/backward-compatible-ui/index.jd
+++ b/docs/html/training/backward-compatible-ui/index.jd
@@ -14,7 +14,7 @@
 
 <ul>
   <li>API level 5</li>
-  <li><a href="{@docRoot}sdk/compatibility-library.html">The Android Support Package</a></li>
+  <li><a href="{@docRoot}tools/extras/support-library.html">The Android Support Package</a></li>
 </ul>
 
 <h2>You should also read</h2>
diff --git a/docs/html/training/basics/activity-lifecycle/index.jd b/docs/html/training/basics/activity-lifecycle/index.jd
index d278f04..127c1c2 100644
--- a/docs/html/training/basics/activity-lifecycle/index.jd
+++ b/docs/html/training/basics/activity-lifecycle/index.jd
@@ -21,7 +21,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a></li>
+  <li><a href="{@docRoot}guide/components/activities.html">Activities</a></li>
 </ul>
 
 
diff --git a/docs/html/training/basics/activity-lifecycle/pausing.jd b/docs/html/training/basics/activity-lifecycle/pausing.jd
index 216d55e..fa88beb 100644
--- a/docs/html/training/basics/activity-lifecycle/pausing.jd
+++ b/docs/html/training/basics/activity-lifecycle/pausing.jd
@@ -21,7 +21,7 @@
     
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
+      <li><a href="{@docRoot}guide/components/activities.html">Activities</a>
       </li>
     </ul>
 
diff --git a/docs/html/training/basics/activity-lifecycle/recreating.jd b/docs/html/training/basics/activity-lifecycle/recreating.jd
index 941f1fd..005a95b 100644
--- a/docs/html/training/basics/activity-lifecycle/recreating.jd
+++ b/docs/html/training/basics/activity-lifecycle/recreating.jd
@@ -23,7 +23,7 @@
 Different Screens</a></li>
       <li><a
 href="{@docRoot}guide/topics/resources/runtime-changes.html">Handling Runtime Changes</a></li>
-      <li><a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
+      <li><a href="{@docRoot}guide/components/activities.html">Activities</a>
       </li>
     </ul>
 
diff --git a/docs/html/training/basics/activity-lifecycle/starting.jd b/docs/html/training/basics/activity-lifecycle/starting.jd
index 1d328c7..c32968b 100644
--- a/docs/html/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html/training/basics/activity-lifecycle/starting.jd
@@ -22,7 +22,7 @@
     
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a></li>
+      <li><a href="{@docRoot}guide/components/activities.html">Activities</a></li>
     </ul>
 
 <h2>Try it out</h2>
diff --git a/docs/html/training/basics/activity-lifecycle/stopping.jd b/docs/html/training/basics/activity-lifecycle/stopping.jd
index 7dfc6d3..d56c921 100644
--- a/docs/html/training/basics/activity-lifecycle/stopping.jd
+++ b/docs/html/training/basics/activity-lifecycle/stopping.jd
@@ -21,7 +21,7 @@
     
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
+      <li><a href="{@docRoot}guide/components/activities.html">Activities</a>
       </li>
     </ul>
 
@@ -37,7 +37,7 @@
 </div>
 
 <p>Properly stopping and restarting your activity is an important process in the activity lifecycle
-that ensures your users perceive that your app is always alive and doesn't loose their progress.
+that ensures your users perceive that your app is always alive and doesn't lose their progress.
 There are a few of key scenarios in which your activity is stopped and restarted:</p>
 
 <ul>
diff --git a/docs/html/training/basics/firstapp/building-ui.jd b/docs/html/training/basics/firstapp/building-ui.jd
index dae70a2..df8089f 100644
--- a/docs/html/training/basics/firstapp/building-ui.jd
+++ b/docs/html/training/basics/firstapp/building-ui.jd
@@ -19,7 +19,7 @@
 
 <ol>
   <li><a href="#LinearLayout">Use a Linear Layout</a></li>
-  <li><a href="#TextInput">Add a Text Input Box</a></li>
+  <li><a href="#TextInput">Add a Text Field</a></li>
   <li><a href="#Strings">Add String Resources</a></li>
   <li><a href="#Button">Add a Button</a></li>
   <li><a href="#Weight">Make the Input Box Fill in the Screen Width</a></li>
@@ -61,7 +61,7 @@
 </div>
 </div>
 
-<img src="{@docRoot}images/viewgroup.png" alt="" />
+<img src="{@docRoot}images/viewgroup.png" alt="" width="440" />
 <p class="img-caption"><strong>Figure 1.</strong> Illustration of how {@link
 android.view.ViewGroup} objects form branches in the layout and contain {@link
 android.view.View} objects.</p>
@@ -130,12 +130,12 @@
 
 
 
-<h2 id="TextInput">Add a Text Input Box</h2>
+<h2 id="TextInput">Add a Text Field</h2>
 
-<p>To create a user-editable text box, add an {@link android.widget.EditText
+<p>To create a user-editable text field, add an {@link android.widget.EditText
 &lt;EditText>} element inside the {@link android.widget.LinearLayout &lt;LinearLayout>}. The {@link
 android.widget.EditText} class is a subclass of {@link android.view.View} that displays an editable
-text box.</p>
+text field.</p>
 
 <p>Like every {@link android.view.View} object, you must define certain XML attributes to specify
 the {@link android.widget.EditText} object's properties. Here’s how you should declare it
@@ -185,7 +185,8 @@
 compiled, the SDK tools use the ID value, <code>edit_message</code>, to create a new identifier in
 your project's {@code gen/R.java} file that is now assiciated with the {@link
 android.widget.EditText} element. Once the resource ID is created, other references to the ID do not
-need the plus symbol. See the sidebox for more information about resource objects.</p></dd>
+need the plus symbol. This is the only attribute that may need the plus-symbol. See the sidebox for
+more information about resource objects.</p></dd>
 
 <dt><a
 href="{@docRoot}reference/android/view/View.html#attr_android:layout_width">{@code
@@ -202,12 +203,12 @@
 <dt><a
 href="{@docRoot}reference/android/widget/TextView.html#attr_android:hint">{@code
 android:hint}</a></dt>
-<dd>This is a default string to display when the text box is empty. Instead of using a hard-coded
-string as the value, the value given in this example refers to a string resource. When you add the
-{@code
-"@string/edit_message"} value, you’ll see a compiler error because there’s no matching string
-resource by that name. You'll fix this in the next section by defining the string
-resource.</dd>
+<dd>This is a default string to display when the text field is empty. Instead of using a hard-coded
+string as the value, the {@code "@string/edit_message"} value refers to a string resource defined
+in a separate file. Because this value refers to an existing resource, it does not need the
+plus-symbol. However, because you haven't defined the string resource yet, you’ll see a compiler
+error when you add the {@code "@string/edit_message"} value. You'll fix this in the next section by
+defining the string resource.</dd>
 </dl>
 
 
@@ -276,9 +277,9 @@
 android.widget.Button} widgets have their widths set to
 <code>"wrap_content"</code>.</p>
 
-<p>This works fine for the button, but not as well for the text box, because the user might type
+<p>This works fine for the button, but not as well for the text field, because the user might type
 something longer and there's extra space left on the screen. So, it'd be nice to fill that width
-using the text box.
+using the text field.
 {@link android.widget.LinearLayout} enables such a design with the <em>weight</em> property, which
 you can specify using the <a
 href="{@docRoot}reference/android/widget/LinearLayout.LayoutParams.html#weight">{@code
diff --git a/docs/html/training/basics/firstapp/creating-project.jd b/docs/html/training/basics/firstapp/creating-project.jd
index 5a89f2e..4fbfe34 100644
--- a/docs/html/training/basics/firstapp/creating-project.jd
+++ b/docs/html/training/basics/firstapp/creating-project.jd
@@ -23,9 +23,9 @@
 <h2>You should also read</h2>
 
 <ul>
-  <li><a href="{@docRoot}sdk/installing.html">Installing the
+  <li><a href="{@docRoot}sdk/installing/index.html">Installing the
 SDK</a></li>
-  <li><a href="{@docRoot}guide/developing/projects/index.html">Managing Projects</a></li>
+  <li><a href="{@docRoot}tools/projects/index.html">Managing Projects</a></li>
 </ul>
  
  
@@ -42,8 +42,8 @@
 
 <p class="note"><strong>Note:</strong> You should already have the Android SDK installed, and if
 you're using Eclipse, you should have installed the <a
-href="{@docRoot}sdk/eclipse-adt.html">ADT plugin</a> as well. If you have not installed
-these, see <a href="{@docRoot}sdk/installing.html">Installing the Android SDK</a> and return here
+href="{@docRoot}tools/sdk/eclipse-adt.html">ADT plugin</a> as well. If you have not installed
+these, see <a href="{@docRoot}sdk/installing/index.html">Installing the Android SDK</a> and return here
 when you've completed the installation.</p>
 
 
@@ -59,7 +59,7 @@
 The resulting dialog should have a folder labeled <em>Android</em>.  (If you don’t see the
 <em>Android</em> folder,
 then you have not installed the ADT plugin&mdash;see <a
-href="{@docRoot}sdk/eclipse-adt.html#installing">Installing the ADT Plugin</a>).</li>
+href="{@docRoot}tools/sdk/eclipse-adt.html#installing">Installing the ADT Plugin</a>).</li>
   <li>Open the <em>Android</em> folder, select <em>Android Project</em> and click
 <strong>Next</strong>.</li>
   <li>Enter a project name (such as "MyFirstApp") and click <strong>Next</strong>.</li>
@@ -68,7 +68,7 @@
 support older versions, but setting the build target to the latest version allows you to
 easily optimize your app for a great user experience on the latest Android-powered devices.</p>
 <p>If you don't see any built targets listed, you need to install some using the Android SDK
-Manager tool. See <a href="{@docRoot}sdk/installing.html#AddingComponents">step 4 in the
+Manager tool. See <a href="{@docRoot}sdk/installing/index.html#AddingComponents">step 4 in the
 installing guide</a>.</p>
 <p>Click <strong>Next</strong>.</p></li>
   <li>Specify other app details, such as the:
@@ -87,7 +87,7 @@
       <li><em>Minimum SDK</em>: Select <em>4 (Android 1.6)</em>.
         <p>Because this version is lower than the build target selected for the app, a warning
 appears, but that's alright. You simply need to be sure that you don't use any APIs that require an
-<a href="{@docRoot}guide/appendix/api-levels.html">API level</a> greater than the minimum SDK
+<a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API level</a> greater than the minimum SDK
 version without first using some code to verify the device's system version (you'll see this in some
 other classes).</p>
       </li>
@@ -117,7 +117,7 @@
 your app for the latest devices.</p>
 <p>If you don't see any targets listed, you need to
 install some using the Android SDK
-Manager tool. See <a href="{@docRoot}sdk/installing.html#AddingComponents">step 4 in the
+Manager tool. See <a href="{@docRoot}sdk/installing/index.html#AddingComponents">step 4 in the
 installing guide</a>.</p></li>
   <li>Execute:
 <pre class="no-pretty-print">
diff --git a/docs/html/training/basics/firstapp/index.jd b/docs/html/training/basics/firstapp/index.jd
index 9ff5b18..43b289b 100644
--- a/docs/html/training/basics/firstapp/index.jd
+++ b/docs/html/training/basics/firstapp/index.jd
@@ -35,7 +35,7 @@
   <li>Download the latest SDK tools and platforms using the SDK Manager.</li>
 </ol>
 
-<p>If you haven't already done this setup, read <a href="{@docRoot}sdk/installing.html">Installing
+<p>If you haven't already done this setup, read <a href="{@docRoot}sdk/installing/index.html">Installing
 the SDK</a>. Once you've finished the setup, you're ready to begin this class.</p>
 
 <p>This class uses a tutorial format that incrementally builds a small Android app in order to teach
diff --git a/docs/html/training/basics/firstapp/running-app.jd b/docs/html/training/basics/firstapp/running-app.jd
index 43b8983..5105a3b 100644
--- a/docs/html/training/basics/firstapp/running-app.jd
+++ b/docs/html/training/basics/firstapp/running-app.jd
@@ -25,9 +25,9 @@
 <h2>You should also read</h2>
 
 <ul>
-  <li><a href="{@docRoot}guide/developing/device.html">Using Hardware Devices</a></li>
-  <li><a href="{@docRoot}guide/developing/devices/index.html">Managing Virtual Devices</a></li>
-  <li><a href="{@docRoot}guide/developing/projects/index.html">Managing Projects</a></li>
+  <li><a href="{@docRoot}tools/device.html">Using Hardware Devices</a></li>
+  <li><a href="{@docRoot}tools/devices/index.html">Managing Virtual Devices</a></li>
+  <li><a href="{@docRoot}tools/projects/index.html">Managing Projects</a></li>
 </ul>
  
  
@@ -85,7 +85,7 @@
 <ol>
   <li>Plug in your Android-powered device to your machine with a USB cable.
 If you’re developing on Windows, you might need to install the appropriate USB driver for your
-device. For help installing drivers, see the <a href=”{@docRoot}sdk/oem-usb.html”>OEM USB
+device. For help installing drivers, see the <a href="{@docRoot}tools/extras/oem-usb.html">OEM USB
 Drivers</a> document.</li>
   <li>Ensure that <strong>USB debugging</strong> is enabled in the device Settings (open Settings
 and navitage to <strong>Applications > Development</strong> on most devices, or select
@@ -116,7 +116,7 @@
 <h2 id="Emulator">Run on the Emulator</h2>
 
 <p>Whether you’re using Eclipse or the command line, you need to first create an <a
-href="{@docRoot}guide/developing/devices/index.html">Android Virtual
+href="{@docRoot}tools/devices/index.html">Android Virtual
 Device</a> (AVD). An AVD is a
 device configuration for the Android emulator that allows you to model
 different device configurations.</p>
diff --git a/docs/html/training/basics/firstapp/starting-activity.jd b/docs/html/training/basics/firstapp/starting-activity.jd
index c548c1d..a8d32b6 100644
--- a/docs/html/training/basics/firstapp/starting-activity.jd
+++ b/docs/html/training/basics/firstapp/starting-activity.jd
@@ -31,7 +31,7 @@
 <h2>You should also read</h2>
 
 <ul>
-  <li><a href="{@docRoot}sdk/installing.html">Installing the
+  <li><a href="{@docRoot}sdk/installing/index.html">Installing the
 SDK</a></li>
 </ul>
  
@@ -42,7 +42,7 @@
 
 
 <p>After completing the <a href="building-ui.html">previous lesson</a>, you have an app that
-shows an activity (a single screen) with a text box and a button. In this lesson, you’ll add some
+shows an activity (a single screen) with a text field and a button. In this lesson, you’ll add some
 code to <code>MyFirstActivity</code> that
 starts a new activity when the user selects the Send button.</p>
 
@@ -90,7 +90,7 @@
 android.view.View} that was clicked)</li>
 </ul>
 
-<p>Next, you’ll fill in this method to read the contents of the text box and deliver that text to
+<p>Next, you’ll fill in this method to read the contents of the text field and deliver that text to
 another activity.</p>
 
 
@@ -290,8 +290,8 @@
 }
 </pre>
 
-<p>You can now run the app, type a message in the text box, press Send, and view the message on the
-second activity.</p>
+<p>You can now run the app, type a message in the text field, press Send, and view the message on
+the second activity.</p>
 
 <img src="{@docRoot}images/training/firstapp/firstapp.png" />
 <p class="img-caption"><strong>Figure 1.</strong> Both activities in the final app, running
diff --git a/docs/html/training/basics/fragments/communicating.jd b/docs/html/training/basics/fragments/communicating.jd
index e3e308f..3ac9873 100644
--- a/docs/html/training/basics/fragments/communicating.jd
+++ b/docs/html/training/basics/fragments/communicating.jd
@@ -19,7 +19,7 @@
     
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+      <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
     </ul>
 
 <h2>Try it out</h2>
diff --git a/docs/html/training/basics/fragments/creating.jd b/docs/html/training/basics/fragments/creating.jd
index c4a9b46..0646230 100644
--- a/docs/html/training/basics/fragments/creating.jd
+++ b/docs/html/training/basics/fragments/creating.jd
@@ -21,7 +21,7 @@
 
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+      <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
     </ul>
 
 <h2>Try it out</h2>
@@ -84,7 +84,7 @@
 to {@link android.support.v4.app.Fragment#onPause()}.</p>
 
 <p>More information about the fragment lifecycle and callback methods is available in the <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</p>
 
 
 
diff --git a/docs/html/training/basics/fragments/fragment-ui.jd b/docs/html/training/basics/fragments/fragment-ui.jd
index f906f46..4ec4de5 100644
--- a/docs/html/training/basics/fragments/fragment-ui.jd
+++ b/docs/html/training/basics/fragments/fragment-ui.jd
@@ -20,7 +20,7 @@
     
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+      <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
       <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
 Handsets</a></li>
     </ul>
diff --git a/docs/html/training/basics/fragments/index.jd b/docs/html/training/basics/fragments/index.jd
index dcdcd31..bc93f43 100644
--- a/docs/html/training/basics/fragments/index.jd
+++ b/docs/html/training/basics/fragments/index.jd
@@ -23,7 +23,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+  <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
   <li><a href="{@docRoot}guide/practices/tablets-and-handsets.html">Supporting Tablets and
 Handsets</a></li>
 </ul>
diff --git a/docs/html/training/basics/fragments/support-lib.jd b/docs/html/training/basics/fragments/support-lib.jd
index e2166f5..ba10b78 100644
--- a/docs/html/training/basics/fragments/support-lib.jd
+++ b/docs/html/training/basics/fragments/support-lib.jd
@@ -17,12 +17,12 @@
     </ol>
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}sdk/compatibility-library.html">Support Library</a></li>
+      <li><a href="{@docRoot}tools/extras/support-library.html">Support Library</a></li>
     </ul>
   </div>
 </div>
 
-<p>The Android <a href="{@docRoot}sdk/compatibility-library.html">Support Library</a> provides a JAR
+<p>The Android <a href="{@docRoot}tools/extras/support-library.html">Support Library</a> provides a JAR
 file with an API library that allow you to use some of the more recent Android APIs in your app
 while running on earlier versions of Android. For instance, the Support Library provides a version
 of the {@link android.app.Fragment} APIs that you can use on Android 1.6 (API level 4) and
diff --git a/docs/html/training/basics/intents/index.jd b/docs/html/training/basics/intents/index.jd
index c661d98..d94ff01 100644
--- a/docs/html/training/basics/intents/index.jd
+++ b/docs/html/training/basics/intents/index.jd
@@ -24,7 +24,7 @@
   <li><a
 href="http://android-developers.blogspot.com/2009/11/integrating-application-with-intents.html">
 Integrating Application with Intents (blog post)</a></li>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent
 Filters</a></li>
 </ul>
 
@@ -32,7 +32,7 @@
 </div>
 
 <p>An Android app typically has several <a
-href="{@docRoot}guide/topics/fundamentals/activities.html">activities</a>. Each activity displays a
+href="{@docRoot}guide/components/activities.html">activities</a>. Each activity displays a
 user interface that allows the user to perform a specific task (such as view a map or take a photo).
 To take the user from one activity to another, your app must use an {@link
 android.content.Intent} to define your app's "intent" to do something. When you pass an
diff --git a/docs/html/training/basics/intents/sending.jd b/docs/html/training/basics/intents/sending.jd
index bfd8f9b..f2a2cc3 100644
--- a/docs/html/training/basics/intents/sending.jd
+++ b/docs/html/training/basics/intents/sending.jd
@@ -166,7 +166,7 @@
 starts in case you need to disable the feature that uses the intent before the user attempts to use
 it. If you know of a specific app that can handle the intent, you can also provide a link for the
 user to download the app (see how to <a
-href="{@docRoot}guide/publishing/publishing.html#marketintent">link to an app on Google
+href="{@docRoot}distribute/googleplay/promote/linking.html">link to your product on Google
 Play</a>).</p>
 
 
diff --git a/docs/html/training/basics/network-ops/connecting.jd b/docs/html/training/basics/network-ops/connecting.jd
new file mode 100644
index 0000000..f70cf58
--- /dev/null
+++ b/docs/html/training/basics/network-ops/connecting.jd
@@ -0,0 +1,284 @@
+page.title=Connecting to the Network
+parent.title=Performing Network Operations
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Managing Network Usage
+next.link=managing.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#http-client">Choose an HTTP Client</a></li>
+  <li><a href="#connection">Check the Network Connection</a></li>
+  <li><a href="#AsyncTask">Perform Network Operations on a Separate Thread</a></li>
+  <li><a href="#download">Connect and Download Data</a></li>
+  <li><a href="#stream">Convert the InputStream to a String</a></li>
+  
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a></li>
+  <li><a href="{@docRoot}training/efficient-downloads/index.html">Transferring Data Without Draining the Battery</a></li>
+  <li><a href="{@docRoot}guide/webapps/index.html">Web Apps Overview</a></li>
+  <li><a href="{@docRoot}guide/components/fundamentals.html">Application Fundamentals</a></li>
+</ul>
+
+</div> 
+</div>
+
+<p>This lesson shows you how to implement a simple application that connects to
+the network. It explains some of the best practices you should follow in
+creating even the simplest network-connected app.</p>
+
+<p>Note that to perform the network operations described in this lesson, your
+application manifest must include the following permissions:</p>
+
+<pre>&lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&gt;
+&lt;uses-permission android:name=&quot;android.permission.ACCESS_NETWORK_STATE&quot; /&gt;</pre>
+
+
+
+<h2 id="http-client">Choose an HTTP Client</h2>
+
+<p>Most network-connected Android apps  use HTTP to send and receive  data.
+Android includes two HTTP clients: {@link java.net.HttpURLConnection} and Apache
+ {@link org.apache.http.client.HttpClient}. Both support HTTPS, streaming uploads and downloads,  configurable
+timeouts, IPv6, and connection pooling. We recommend using {@link
+java.net.HttpURLConnection} for applications targeted at Gingerbread and higher. For
+more discussion of this topic, see the blog post <a
+href="http://android-developers.blogspot.com/2011/09/androids-http-clients.html"
+>Android's HTTP Clients</a>.</p>
+
+<h2 id="connection">Check the Network Connection</h2>
+
+<p>Before your app attempts to connect to the network, it should check to see whether a
+network connection is available using 
+{@link android.net.ConnectivityManager#getActiveNetworkInfo getActiveNetworkInfo()}
+and {@link android.net.NetworkInfo#isConnected isConnected()}. 
+Remember, the device may be out of range of a
+network, or the user may have disabled both Wi-Fi and mobile data access. 
+For more discussion of this topic, see the lesson <a
+href="{@docRoot}training/network-ops/managing.html">Managing Network
+Usage</a>.</p>
+
+<pre>
+public void myClickHandler(View view) {
+    ...
+    ConnectivityManager connMgr = (ConnectivityManager) 
+        getSystemService(Context.CONNECTIVITY_SERVICE);
+    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
+    if (networkInfo != null &amp;&amp; networkInfo.isConnected()) {
+        // fetch data
+    } else {
+        // display error
+    }
+    ...
+}</pre>
+
+<h2 id="AsyncTask">Perform Network Operations on a Separate Thread</h2>
+
+<p>Network operations can involve unpredictable delays. To prevent this from
+causing a poor user experience, always perform network operations on a separate
+thread from the UI. The {@link android.os.AsyncTask} class provides one of the
+simplest ways to fire off a new task from the UI thread. For more discussion of
+this topic, see the blog post <a
+href="http://android-developers.blogspot.com/2010/07/multithreading-for-
+performance.html">Multithreading For Performance</a>.</p>
+
+
+<p>In the following snippet, the <code>myClickHandler()</code> method invokes <code>new
+DownloadWebpageTask().execute(stringUrl)</code>. The
+<code>DownloadWebpageTask</code> class is a subclass of {@link
+android.os.AsyncTask}. <code>DownloadWebpageTask</code> implements the following
+{@link android.os.AsyncTask} methods:</p>
+
+    <ul>
+    
+      <li>{@link android.os.AsyncTask#doInBackground doInBackground()} executes
+the method <code>downloadUrl()</code>. It passes the  web page URL as a
+parameter. The method <code>downloadUrl()</code> fetches and processes the web
+page content. When it finishes, it passes back a result string.</li>
+      
+      <li>{@link android.os.AsyncTask#onPostExecute onPostExecute()} takes the
+returned string and displays it in the UI.</li>
+      
+      
+    </ul>
+    
+<pre>
+public class HttpExampleActivity extends Activity {
+    private static final String DEBUG_TAG = "HttpExample";
+    private EditText urlText;
+    private TextView textView;
+    
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.main);   
+        urlText = (EditText) findViewById(R.id.myUrl);
+        textView = (TextView) findViewById(R.id.myText);
+    }
+
+    // When user clicks button, calls AsyncTask.
+    // Before attempting to fetch the URL, makes sure that there is a network connection.
+    public void myClickHandler(View view) {
+        // Gets the URL from the UI's text field.
+        String stringUrl = urlText.getText().toString();
+        ConnectivityManager connMgr = (ConnectivityManager) 
+            getSystemService(Context.CONNECTIVITY_SERVICE);
+        NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
+        if (networkInfo != null &amp;&amp; networkInfo.isConnected()) {
+            new DownloadWebpageText().execute(stringUrl);
+        } else {
+            textView.setText("No network connection available.");
+        }
+    }
+
+     // Uses AsyncTask to create a task away from the main UI thread. This task takes a 
+     // URL string and uses it to create an HttpUrlConnection. Once the connection
+     // has been established, the AsyncTask downloads the contents of the webpage as
+     // an InputStream. Finally, the InputStream is converted into a string, which is
+     // displayed in the UI by the AsyncTask's onPostExecute method.
+     private class DownloadWebpageText extends AsyncTask<String, Void, String> {
+        &#64;Override
+        protected String doInBackground(String... urls) {
+              
+            // params comes from the execute() call: params[0] is the url.
+            try {
+                return downloadUrl(urls[0]);
+            } catch (IOException e) {
+                return "Unable to retrieve web page. URL may be invalid.";
+            }
+        }
+        // onPostExecute displays the results of the AsyncTask.
+        &#64;Override
+        protected void onPostExecute(String result) {
+            textView.setText(result);
+       }
+    }
+    ...
+}</pre>
+
+<p>The sequence of events in this snippet is as follows:</p>
+<ol>
+
+  <li>When users click the button that invokes {@code myClickHandler()}, 
+  the app passes
+the specified URL to the {@link android.os.AsyncTask} subclass
+<code>DownloadWebpageTask</code>.</li>
+ 
+ <li>The {@link android.os.AsyncTask} method {@link
+android.os.AsyncTask#doInBackground doInBackground()} calls the 
+<code>downloadUrl()</code> method. </li>
+  
+  <li>The <code>downloadUrl()</code> method takes a URL string as a parameter
+and uses it to create a {@link java.net.URL} object.</li>
+  
+  <li>The {@link java.net.URL} object is used to establish an {@link
+java.net.HttpURLConnection}.</li>
+  
+  <li>Once the connection has been established, the {@link
+java.net.HttpURLConnection} object fetches the web page content as an {@link
+java.io.InputStream}.</li>
+  
+  <li>The {@link java.io.InputStream} is passed to the <code>readIt()</code>
+method, which converts the stream to a string.</li>
+  
+  <li>Finally, the {@link android.os.AsyncTask}'s {@link
+android.os.AsyncTask#onPostExecute onPostExecute()} method displays the string
+in the main activity's UI.</li>
+
+</ol>
+
+ <h2 id="download">Connect and Download Data</h2>
+ 
+ <p>In your thread that performs your network transactions, you can use 
+ {@link java.net.HttpURLConnection} to perform a {@code GET} and download your data. 
+ After you call {@code connect()}, you can get an {@link java.io.InputStream} of the data 
+ by calling {@code getInputStream()}.
+ 
+ <p>In the following snippet, the {@link android.os.AsyncTask#doInBackground
+doInBackground()} method calls the method <code>downloadUrl()</code>. The
+<code>downloadUrl()</code> method takes the given URL and uses it to connect to
+the network via {@link java.net.HttpURLConnection}. Once a connection has been
+established, the app uses the method <code>getInputStream()</code> to retrieve
+the data as an {@link java.io.InputStream}.</p>
+ 
+<pre>
+// Given a URL, establishes an HttpUrlConnection and retrieves
+// the web page content as a InputStream, which it returns as
+// a string.
+private String downloadUrl(String myurl) throws IOException {
+    InputStream is = null;
+    // Only display the first 500 characters of the retrieved
+    // web page content.
+    int len = 500;
+        
+    try {
+        URL url = new URL(myurl);
+        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+        conn.setReadTimeout(10000 /* milliseconds */);
+        conn.setConnectTimeout(15000 /* milliseconds */);
+        conn.setRequestMethod("GET");
+        conn.setDoInput(true);
+        // Starts the query
+        conn.connect();
+        int response = conn.getResponseCode();
+        Log.d(DEBUG_TAG, "The response is: " + response);
+        is = conn.getInputStream();
+
+        // Convert the InputStream into a string
+        String contentAsString = readIt(is, len);
+        return contentAsString;
+        
+    // Makes sure that the InputStream is closed after the app is
+    // finished using it.
+    } finally {
+        if (is != null) {
+            is.close();
+        } 
+    }
+}</pre>
+
+<p>Note that the method <code>getResponseCode()</code> returns the connection's
+<a href="http://www.w3.org/Protocols/HTTP/HTRESP.html">status code</a>. This is
+a useful way of getting additional information about the connection. A status
+code of 200 indicates success.</p>
+
+<h2 id="stream">Convert the InputStream to a String</h2>
+
+<p>An {@link java.io.InputStream} is a readable source of bytes. Once you get an {@link java.io.InputStream}, 
+it's common to decode or convert it into a
+target data type. For example, if you were downloading image data, you might
+decode and display it like this:</p>
+
+<pre>InputStream is = null;
+...
+Bitmap bitmap = BitmapFactory.decodeStream(is);
+ImageView imageView = (ImageView) findViewById(R.id.image_view);
+imageView.setImageBitmap(bitmap);
+</pre>
+
+<p>In the example shown above, the {@link java.io.InputStream} represents the text of a
+web page. This is how the example converts the {@link java.io.InputStream} to
+a string so that the activity can display it in the UI:</p>
+
+<pre>// Reads an InputStream and converts it to a String.
+public String readIt(InputStream stream, int len) throws IOException, UnsupportedEncodingException {
+    Reader reader = null;
+    reader = new InputStreamReader(stream, "UTF-8");        
+    char[] buffer = new char[len];
+    reader.read(buffer);
+    return new String(buffer);
+}</pre>
+
+
+
diff --git a/docs/html/training/basics/network-ops/index.jd b/docs/html/training/basics/network-ops/index.jd
new file mode 100644
index 0000000..b213c03
--- /dev/null
+++ b/docs/html/training/basics/network-ops/index.jd
@@ -0,0 +1,73 @@
+page.title=Performing Network Operations
+
+trainingnavtop=true
+startpage=true
+next.title=Connecting to the Network
+next.link=connecting.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+
+<h2>Dependencies and prerequisites</h2>
+<ul>
+  <li>Android 1.6 (API level 4) or higher</li>
+  <li>A device that is able to connect to mobile and Wi-Fi networks</li>
+</ul>
+
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a></li>
+  <li><a href="{@docRoot}training/efficient-downloads/index.html">Transferring Data Without Draining the Battery</a></li>
+  <li><a href="{@docRoot}guide/webapps/index.html">Web Apps Overview</a></li>
+</ul>
+
+
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/NetworkUsage.zip"
+class="button">Download the sample</a>
+ <p class="filename">NetworkUsage.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>This class explains the basic tasks involved in connecting to the network,
+monitoring the network connection (including connection changes), and giving
+users control over an app's network usage. It also describes how to parse and
+consume XML data.</p> 
+
+<p>This class includes a sample application that illustrates how to perform
+common network operations. You can download the sample (to the right) and use it
+as a source of reusable code for your own application.</p>
+
+<p>By going through these lessons, you'll have the
+fundamental building blocks for creating Android applications that download
+content and parse data efficiently, while minimizing network traffic.</p>
+
+
+
+<h2>Lessons</h2>
+
+<dl>
+ <dt><b><a href="connecting.html">Connecting to the Network</a></b></dt>
+ 
+   <dd>Learn how to connect to the network, choose an HTTP client, and perform
+network operations outside of the UI thread.</dd>
+
+ <dt><b><a href="managing.html">Managing Network Usage</a></b></dt>
+ 
+   <dd>Learn how to check a
+device's network connection, create a preferences UI for controlling network
+usage, and respond to connection changes.</dd>
+   
+   <dt><b><a href="xml.html">Parsing XML Data</a></b></dt>
+   <dd>Learn how to parse and consume XML data.</dd>
+
+</dl> 
+
diff --git a/docs/html/training/basics/network-ops/managing.jd b/docs/html/training/basics/network-ops/managing.jd
new file mode 100644
index 0000000..33cb195
--- /dev/null
+++ b/docs/html/training/basics/network-ops/managing.jd
@@ -0,0 +1,445 @@
+page.title=Managing Network Usage
+parent.title=Performing Network Operations
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Connecting to the Network
+previous.link=connecting.html
+next.title=Parsing XML Data
+next.link=xml.html
+
+@jd:body
+ 
+<div id="tb-wrapper"> 
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+    <ol>
+  <li><a href="#check-connection">Check a Device's Network Connection</a></li>
+  <li><a href="#manage-usage">Manage Network Usage</a></li>
+  <li><a href="#prefs">Implement a Preferences Activity</a></li>
+  <li><a href="#pref-change">Respond to Preference Changes</a></li>
+  <li><a href="#detect-changes">Detect Connection Changes</a></li>
+</ol>
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a></li>
+  <li><a href="{@docRoot}training/efficient-downloads/index.html">Transferring Data Without Draining the Battery</a></li>
+  <li><a href="{@docRoot}guide/webapps/index.html">Web Apps Overview</a></li>
+</ul>
+
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/NetworkUsage.zip"
+class="button">Download the sample</a>
+ <p class="filename">NetworkUsage.zip</p>
+</div>
+
+</div> 
+</div>
+
+<p>This lesson describes how to write applications that have fine-grained
+control over their usage of network resources. If your application performs a
+lot of network operations, you should provide user settings that allow users
+to control your app’s data habits, such as how often your app syncs data,
+whether to perform uploads/downloads only when on Wi-Fi, whether to use data
+while roaming, and so on. With these controls available to them, users are much
+less likely to disable your app’s access to background data when they approach their
+limits, because they can instead precisely control how much data your app
+uses.</p>
+
+<p>For general guidelines on how to write apps that minimize the battery life 
+impact of downloads and network connections, see 
+<a href="{@docRoot}training/monitoring-device-state/index.html">Optimizing Battery Life</a> 
+and <a href="{@docRoot}training/efficient-downloads/index.html">Transferring Data Without Draining the Battery</a>.
+
+<h2 id="check-connection">Check a Device's Network Connection</h2>
+
+<p>A device can have various types of network connections. This lesson  
+focuses on using either a Wi-Fi or a mobile network connection. For the full 
+list of possible network types, see {@link android.net.ConnectivityManager}.<p>
+
+<p>Wi-Fi is typically faster. Also, mobile data is often metered, which can get
+expensive. 
+A common strategy for apps is to only fetch large data
+if a Wi-Fi network is available.</p>
+
+<p>Before you perform network operations, it's good practice to check the state of
+network connectivity. Among other things, this could prevent your app from inadvertently using
+the wrong radio. If a network connection is unavailable, your application
+should respond gracefully. To check the network connection, you typically use
+the following classes:</p>
+
+<ul>
+
+  <li>{@link android.net.ConnectivityManager}: Answers queries about the state
+of network connectivity. It also  notifies applications when network
+connectivity changes. </li>
+  
+  <li>{@link android.net.NetworkInfo}: Describes the status of a network
+interface of a given type  (currently either Mobile or Wi-Fi).
+  </li>
+  
+</ul>
+
+
+
+<p>This code snippet tests network connectivity for Wi-Fi and mobile. It
+determines whether these network interfaces are available (that is, whether
+network connectivity is possible) and/or connected (that is, whether network
+connectivity exists and if it is possible to establish sockets and pass
+data): </p>
+
+<pre>
+private static final String DEBUG_TAG = &quot;NetworkStatusExample&quot;;
+...      
+ConnectivityManager connMgr = (ConnectivityManager) 
+        getSystemService(Context.CONNECTIVITY_SERVICE);
+NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
+boolean isWifiConn = networkInfo.isConnected();
+networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
+boolean isMobileConn = networkInfo.isConnected();
+Log.d(DEBUG_TAG, "Wifi connected: " + isWifiConn);
+Log.d(DEBUG_TAG, "Mobile connected: " + isMobileConn);
+</pre> 
+
+<p>Note that you should not base decisions on whether a network is
+&quot;available.&quot; You should always check {@link
+android.net.NetworkInfo#isConnected isConnected()} before performing network
+operations, since {@link android.net.NetworkInfo#isConnected isConnected()}
+handles  cases like flaky mobile networks, airplane mode, and restricted
+background data.</p>
+
+<p>A more concise way of checking whether a network interface is available is as
+follows. The method {@link
+android.net.ConnectivityManager#getActiveNetworkInfo() getActiveNetworkInfo()}
+returns a {@link android.net.NetworkInfo} instance representing the first
+connected network interface it can find, or <code>null</code> if none if the
+interfaces is connected (meaning that an
+internet connection is not available):</p>
+
+<pre>
+public boolean isOnline() {
+    ConnectivityManager connMgr = (ConnectivityManager) 
+            getSystemService(Context.CONNECTIVITY_SERVICE);
+    NetworkInfo networkInfo = connMgr.getActiveNetworkInfo();
+    return (networkInfo != null && networkInfo.isConnected());
+}  </pre>
+
+<p>To query more fine-grained state you can use {@link
+android.net.NetworkInfo.DetailedState}, but this should seldom be necessary.</p>
+
+
+<h2 id="manage-usage">Manage Network Usage</h2>
+
+<p>You can implement a preferences activity that gives users explicit control
+over your app's usage of network resources. For
+example:</p>
+
+<ul>
+
+<li>You might allow users to upload videos only when the device is connected to a
+Wi-Fi network.</li>
+
+<li>You might sync (or not) depending on specific criteria such as network
+availability, time interval, and so on.</li>
+
+</ul>
+
+<p>To write an app that supports network access and managing 
+network usage, your manifest must have the right permissions and 
+intent filters.
+</p>
+
+<ul>
+  <li>The manifest excerpted below includes the following permissions:
+    <ul>
+    
+      <li>{@link android.Manifest.permission#INTERNET
+android.permission.INTERNET}&mdash;Allows applications to open network
+sockets.</li>
+      
+      <li>{@link android.Manifest.permission#ACCESS_NETWORK_STATE
+android.permission.ACCESS_NETWORK_STATE}&mdash;Allows applications to access
+information about networks.</li>
+      
+    </ul>
+  </li>
+  
+  <li>You can declare the intent filter for the 
+{@link android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action (introduced in
+Android 4.0) to indicate that your application defines an activity that offers
+options to control data usage. {@link
+android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} shows settings for managing
+the network data usage of a specific application. When your app has a settings activity 
+that allows users to control network usage, you should declare this intent filter for that activity. 
+In the sample application, this action is handled by the class
+<code>SettingsActivity</code>, which displays a preferences UI to let users
+decide when to download a feed.</li>
+  
+</ul>
+
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?&gt;
+&lt;manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.example.android.networkusage"
+    ...&gt;
+
+    &lt;uses-sdk android:minSdkVersion="4" 
+           android:targetSdkVersion="14" /&gt;
+        
+    &lt;uses-permission android:name="android.permission.INTERNET" /&gt;
+    &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt;
+
+    &lt;application
+        ...&gt;
+        ...
+        &lt;activity android:label="SettingsActivity" android:name=".SettingsActivity"&gt;
+             &lt;intent-filter&gt;
+                &lt;action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /&gt;
+                &lt;category android:name="android.intent.category.DEFAULT" /&gt;
+          &lt;/intent-filter&gt;
+        &lt;/activity&gt;
+    &lt;/application&gt;
+&lt;/manifest&gt;
+</pre>
+
+<h2 id="prefs">Implement a Preferences Activity</h2>
+
+<p>As you can see in the manifest excerpt above, the sample app's activity
+<code>SettingsActivity</code> has an intent filter for the {@link
+android.content.Intent#ACTION_MANAGE_NETWORK_USAGE} action.
+<code>SettingsActivity</code> is a subclass of {@link
+android.preference.PreferenceActivity}. It displays a preferences screen 
+(shown in figure 1) that
+lets users specify the following:</p>
+
+<ul>
+
+  <li>Whether to display summaries for each XML feed entry, or just a link for
+each entry.</li>
+  
+  <li>Whether to download the XML feed if any network connection is available,
+or only if Wi-Fi is available.</li>
+  
+</ul>
+
+<img src="{@docRoot}images/training/basics/network-settings1.png" alt="Preferences panel" />
+
+<img src="{@docRoot}images/training/basics/network-settings2.png" alt="Setting a network preference" />
+<p class="img-caption"><strong>Figure 1.</strong> Preferences activity.</p>
+
+<p>Here is <code>SettingsActivity</code>. Note that it implements 
+{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener OnSharedPreferenceChangeListener}. 
+When a user changes a preference, it fires
+{@link android.content.SharedPreferences.OnSharedPreferenceChangeListener#onSharedPreferenceChanged onSharedPreferenceChanged()}, 
+which sets {@code refreshDisplay} to true. This causes the display to refresh when the user 
+returns to the main activity:</p>
+
+<pre>public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
+    
+    &#64;Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        // Loads the XML preferences file
+        addPreferencesFromResource(R.xml.preferences);
+    }
+  
+    &#64;Override
+    protected void onResume() {
+        super.onResume();
+
+        // Registers a listener whenever a key changes            
+        getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+    }
+  
+    &#64;Override
+    protected void onPause() {
+        super.onPause();
+
+       // Unregisters the listener set in onResume().
+       // It's best practice to unregister listeners when your app isn't using them to cut down on 
+       // unnecessary system overhead. You do this in onPause().            
+       getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);    
+    }
+  
+    // When the user changes the preferences selection, 
+    // onSharedPreferenceChanged() restarts the main activity as a new
+    // task. Sets the the refreshDisplay flag to "true" to indicate that 
+    // the main activity should update its display.
+    // The main activity queries the PreferenceManager to get the latest settings.
+    
+    &#64;Override
+    public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {    
+        // Sets refreshDisplay to true so that when the user returns to the main
+        // activity, the display refreshes to reflect the new settings.
+        NetworkActivity.refreshDisplay = true;
+    }
+}</pre>
+
+<h2 id="pref-change">Respond to Preference Changes</h2>
+
+<p>When the user changes preferences in the settings screen, it typically has
+consequences for the app's behavior. In this snippet, the app checks the
+preferences settings in {@code onStart()}. if there is a match between the setting and
+the device's network connection (for example, if the setting is {@code "Wi-Fi"} and the
+device has a Wi-Fi connection), the app downloads the feed and refreshes the
+display.</p>
+
+<pre>
+public class NetworkActivity extends Activity {
+    public static final String WIFI = "Wi-Fi";
+    public static final String ANY = "Any";
+    private static final String URL = "http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest";
+   
+    // Whether there is a Wi-Fi connection.
+    private static boolean wifiConnected = false; 
+    // Whether there is a mobile connection.
+    private static boolean mobileConnected = false;
+    // Whether the display should be refreshed.
+    public static boolean refreshDisplay = true;
+    
+    // The user's current network preference setting.
+    public static String sPref = null;
+    
+    // The BroadcastReceiver that tracks network connectivity changes.
+    private NetworkReceiver receiver = new NetworkReceiver();
+    
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        
+        // Registers BroadcastReceiver to track network connection changes.
+        IntentFilter filter = new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION);
+        receiver = new NetworkReceiver();
+        this.registerReceiver(receiver, filter);
+    }
+    
+    &#64;Override 
+    public void onDestroy() {
+        super.onDestroy();
+        // Unregisters BroadcastReceiver when app is destroyed.
+        if (receiver != null) {
+            this.unregisterReceiver(receiver);
+        }
+    }
+    
+    // Refreshes the display if the network connection and the
+    // pref settings allow it.
+    
+    &#64;Override
+    public void onStart () {
+        super.onStart();  
+        
+        // Gets the user's network preference settings
+        SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+        
+        // Retrieves a string value for the preferences. The second parameter
+        // is the default value to use if a preference value is not found.
+        sPref = sharedPrefs.getString("listPref", "Wi-Fi");
+
+        updateConnectedFlags(); 
+       
+        if(refreshDisplay){
+            loadPage();    
+        }
+    }
+    
+    // Checks the network connection and sets the wifiConnected and mobileConnected
+    // variables accordingly. 
+    public void updateConnectedFlags() {
+        ConnectivityManager connMgr = (ConnectivityManager) 
+                getSystemService(Context.CONNECTIVITY_SERVICE);
+        
+        NetworkInfo activeInfo = connMgr.getActiveNetworkInfo();
+        if (activeInfo != null && activeInfo.isConnected()) {
+            wifiConnected = activeInfo.getType() == ConnectivityManager.TYPE_WIFI;
+            mobileConnected = activeInfo.getType() == ConnectivityManager.TYPE_MOBILE;
+        } else {
+            wifiConnected = false;
+            mobileConnected = false;
+        }  
+    }
+      
+    // Uses AsyncTask subclass to download the XML feed from stackoverflow.com.
+    public void loadPage() {
+        if (((sPref.equals(ANY)) && (wifiConnected || mobileConnected))
+                || ((sPref.equals(WIFI)) && (wifiConnected))) {
+            // AsyncTask subclass
+            new DownloadXmlTask().execute(URL);
+        } else {
+            showErrorPage();
+        }
+    }
+...
+    
+}</pre>
+
+<h2 id="detect-changes">Detect Connection Changes</h2>
+
+<p>The final piece of the puzzle is the {@link
+android.content.BroadcastReceiver} subclass, <code>NetworkReceiver</code>. When
+the device's network connection changes, <code>NetworkReceiver</code> intercepts
+the  action {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION},
+determines what the  network connection status is, and sets the flags
+<code>wifiConnected</code> and <code>mobileConnected</code> to true/false
+accordingly. The upshot is that the next time the user returns to the app, the
+app will only download the latest feed and update the display if 
+<code>NetworkActivity.refreshDisplay</code> is set to <code>true</code>.</p>
+
+<p>Setting up a BroadcastReceiver that gets called unnecessarily can be a 
+drain on system resources.
+The sample application registers the 
+{@link android.content.BroadcastReceiver} {@code NetworkReceiver} in 
+{@link android.app.Activity#onCreate(android.os.Bundle) onCreate()}, 
+and it unregisters it in 
+{@link android.app.Activity#onDestroy onDestroy()}. This is more lightweight 
+than declaring a {@code &lt;receiver&gt;} in the manifest. When you declare a 
+{@code &lt;receiver&gt;} in the manifest, it can wake up your app at any time, 
+even if you haven't run it for weeks. By registering and unregistering 
+{@code NetworkReceiver} within the main activity, you ensure that the app won't 
+be woken up after the user leaves the app. 
+If you do declare a {@code &lt;receiver&gt;} in the manifest and you know exactly 
+where you need it, you can use 
+{@link android.content.pm.PackageManager#setComponentEnabledSetting setComponentEnabledSetting()}
+to enable and disable it as appropriate.</p>
+
+<p>Here is  <code>NetworkReceiver</code>:</p>
+
+<pre>public class NetworkReceiver extends BroadcastReceiver {   
+      
+&#64;Override
+public void onReceive(Context context, Intent intent) {
+    ConnectivityManager conn =  (ConnectivityManager)
+        context.getSystemService(Context.CONNECTIVITY_SERVICE);
+    NetworkInfo networkInfo = conn.getActiveNetworkInfo();
+       
+    // Checks the user prefs and the network connection. Based on the result, decides whether
+    // to refresh the display or keep the current display.
+    // If the userpref is Wi-Fi only, checks to see if the device has a Wi-Fi connection.
+    if (WIFI.equals(sPref) && networkInfo != null && networkInfo.getType() == ConnectivityManager.TYPE_WIFI) {
+        // If device has its Wi-Fi connection, sets refreshDisplay
+        // to true. This causes the display to be refreshed when the user
+        // returns to the app.
+        refreshDisplay = true;
+        Toast.makeText(context, R.string.wifi_connected, Toast.LENGTH_SHORT).show();
+
+    // If the setting is ANY network and there is a network connection
+    // (which by process of elimination would be mobile), sets refreshDisplay to true.
+    } else if (ANY.equals(sPref) && networkInfo != null) {
+        refreshDisplay = true;
+                 
+    // Otherwise, the app can't download content--either because there is no network
+    // connection (mobile or Wi-Fi), or because the pref setting is WIFI, and there 
+    // is no Wi-Fi connection.
+    // Sets refreshDisplay to false.
+    } else {
+        refreshDisplay = false;
+        Toast.makeText(context, R.string.lost_connection, Toast.LENGTH_SHORT).show();
+    }
+}</pre>
+
diff --git a/docs/html/training/basics/network-ops/xml.jd b/docs/html/training/basics/network-ops/xml.jd
new file mode 100644
index 0000000..b148257
--- /dev/null
+++ b/docs/html/training/basics/network-ops/xml.jd
@@ -0,0 +1,555 @@
+page.title=Parsing XML Data
+parent.title=Performing Network Operations
+parent.link=index.html
+
+trainingnavtop=true
+
+previous.title=Managing Network Usage
+previous.link=managing.html
+
+@jd:body
+
+<div id="tb-wrapper"> 
+<div id="tb">
+
+
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#choose">Choose a Parser</a></li>
+  <li><a href="#analyze">Analyze the Feed</a></li>
+  <li><a href="#instantiate">Instantiate the Parser</a></li>
+  <li><a href="#read">Read the Feed</a></li>
+  <li><a href="#parse">Parse XML</a></li>
+  <li><a href="#skip">Skip Tags You Don't Care About</a></li>
+  <li><a href="#consume">Consume XML Data</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/webapps/index.html">Web Apps Overview</a></li>
+</ul>
+
+<h2>Try it out</h2>
+
+<div class="download-box">
+  <a href="{@docRoot}shareables/training/NetworkUsage.zip"
+class="button">Download the sample</a>
+ <p class="filename">NetworkUsage.zip</p>
+</div>
+
+</div> 
+</div>
+
+<p>Extensible Markup Language (XML) is a set of rules for encoding documents in
+machine-readable form. XML is a popular format for sharing data on the internet.
+Websites that frequently update their content, such as news sites or blogs,
+often provide an XML feed so that external programs can keep abreast of content
+changes. Uploading and parsing XML data is a common task for network-connected
+apps. This lesson explains how to parse XML documents and use their data.</p>
+
+<h2 id="choose">Choose a Parser</h2>
+
+<p>We recommend {@link org.xmlpull.v1.XmlPullParser}, which is an efficient and
+maintainable way to parse XML on Android. Historically Android has had two
+implementations of this interface:</p>
+
+<ul>
+  <li><a href="http://kxml.sourceforge.net/"><code>KXmlParser</code></a> 
+  via {@link org.xmlpull.v1.XmlPullParserFactory#newPullParser XmlPullParserFactory.newPullParser()}. 
+  </li>
+  <li><code>ExpatPullParser</code>, via 
+  {@link android.util.Xml#newPullParser Xml.newPullParser()}. 
+  </li>
+</ul>
+
+<p>Either choice is fine. The
+example in this section uses <code>ExpatPullParser</code>, via
+{@link android.util.Xml#newPullParser Xml.newPullParser()}. </p>
+
+<h2 id="analyze">Analyze the Feed</h2>
+
+<p>The first step in parsing a feed is to decide which fields you're interested in. 
+The parser extracts data for those fields and ignores the rest.</p>
+
+<p>Here is an excerpt from the feed that's being parsed in the sample app. Each
+post to <a href="http://stackoverflow.com">StackOverflow.com</a> appears in the
+feed as an <code>entry</code> tag that contains several nested tags:</p>
+
+<pre>&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt; 
+&lt;feed xmlns=&quot;http://www.w3.org/2005/Atom&quot; xmlns:creativeCommons=&quot;http://backend.userland.com/creativeCommonsRssModule&quot; ...&quot;&gt;     
+&lt;title type=&quot;text&quot;&gt;newest questions tagged android - Stack Overflow&lt;/title&gt;
+...
+    &lt;entry&gt;
+    ...
+    &lt;/entry&gt;
+    &lt;entry&gt;
+        &lt;id&gt;http://stackoverflow.com/q/9439999&lt;/id&gt;
+        &lt;re:rank scheme="http://stackoverflow.com"&gt;0&lt;/re:rank&gt;
+        &lt;title type="text"&gt;Where is my data file?&lt;/title&gt;
+        &lt;category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&amp;sort=newest/tags" term="android"/&gt;
+        &lt;category scheme="http://stackoverflow.com/feeds/tag?tagnames=android&amp;sort=newest/tags" term="file"/&gt;
+        &lt;author&gt;
+            &lt;name&gt;cliff2310&lt;/name&gt;
+            &lt;uri&gt;http://stackoverflow.com/users/1128925&lt;/uri&gt;
+        &lt;/author&gt;
+        &lt;link rel="alternate" href="http://stackoverflow.com/questions/9439999/where-is-my-data-file" /&gt;
+        &lt;published&gt;2012-02-25T00:30:54Z&lt;/published&gt;
+        &lt;updated&gt;2012-02-25T00:30:54Z&lt;/updated&gt;
+        &lt;summary type="html"&gt;
+            &lt;p&gt;I have an Application that requires a data file...&lt;/p&gt;
+
+        &lt;/summary&gt;
+    &lt;/entry&gt;
+    &lt;entry&gt;
+    ...
+    &lt;/entry&gt;
+...
+&lt;/feed&gt;</pre>
+
+<p>The sample app  
+extracts data for the <code>entry</code> tag and its nested tags
+<code>title</code>, <code>link</code>, and <code>summary</code>.</p>
+
+
+<h2 id="instantiate">Instantiate the Parser</h2>
+
+<p>The next step is to
+instantiate a parser and kick off the parsing process. In this snippet, a parser
+is initialized to not process namespaces, and to use the provided {@link
+java.io.InputStream} as its input. It starts the parsing process with a call to
+{@link org.xmlpull.v1.XmlPullParser#nextTag() nextTag()} and invokes the
+<code>readFeed()</code> method, which extracts and processes the data the app is
+interested in:</p>
+
+<pre>public class StackOverflowXmlParser {
+    // We don't use namespaces
+    private static final String ns = null;
+   
+    public List<Entry> parse(InputStream in) throws XmlPullParserException, IOException {
+        try {
+            XmlPullParser parser = Xml.newPullParser();
+            parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
+            parser.setInput(in, null);
+            parser.nextTag();
+            return readFeed(parser);
+        } finally {
+            in.close();
+        }
+    }
+ ... 
+}</pre>
+
+<h2 id="read">Read the Feed</h2>
+
+<p>The <code>readFeed()</code> method does the actual work of processing the
+feed. It looks for elements tagged "entry" as a starting point for recursively
+processing the feed. If a tag isn't an {@code entry} tag, it skips it. Once the whole
+feed has been recursively processed, <code>readFeed()</code> returns a {@link
+java.util.List} containing the entries (including nested data members) it
+extracted from the feed. This {@link java.util.List} is then returned by the
+parser.</p>
+
+<pre>
+private List<Entry> readFeed(XmlPullParser parser) throws XmlPullParserException, IOException {
+    List<Entry> entries = new ArrayList<Entry>();
+
+    parser.require(XmlPullParser.START_TAG, ns, "feed");
+    while (parser.next() != XmlPullParser.END_TAG) {
+        if (parser.getEventType() != XmlPullParser.START_TAG) {
+            continue;
+        }
+        String name = parser.getName();
+        // Starts by looking for the entry tag
+        if (name.equals("entry")) {
+            entries.add(readEntry(parser));
+        } else {
+            skip(parser);
+        }
+    }  
+    return entries;
+}</pre>
+
+
+<h2 id="parse">Parse XML</h2>
+
+
+<p>The steps for parsing an XML feed are as follows:</p>
+<ol>
+
+  <li>As described in <a href="#analyze">Analyze the Feed</a>, identify the tags you want to include in your app. This
+example extracts data for the <code>entry</code> tag and its nested tags
+<code>title</code>, <code>link</code>, and <code>summary</code>.</li>
+
+<li>Create the following methods:</p>
+
+<ul>
+
+<li>A "read" method for each tag you're interested in. For example,
+<code>readEntry()</code>, <code>readTitle()</code>, and so on. The parser reads
+tags from the input stream. When it encounters a tag named <code>entry</code>, 
+<code>title</code>,
+<code>link</code> or <code>summary</code>, it calls the appropriate method
+for that tag. Otherwise, it skips the tag.
+</li>
+
+<li>Methods to extract data for each different type of tag and to advance the
+parser to the next tag. For example:
+<ul>
+
+<li>For the <code>title</code> and <code>summary</code> tags, the parser calls
+<code>readText()</code>. This method extracts data for these tags by calling
+<code>parser.getText()</code>.</li>
+
+<li>For the <code>link</code> tag, the parser extracts data for links by first 
+determining if the link is the kind
+it's interested in. Then it uses <code>parser.getAttributeValue()</code> to
+extract the link's value.</li>
+
+<li>For the <code>entry</code> tag, the parser calls <code>readEntry()</code>.
+This method parses the entry's nested tags and returns an <code>Entry</code>
+object with the data members <code>title</code>, <code>link</code>, and
+<code>summary</code>.</li>
+
+</ul>
+</li>
+<li>A helper <code>skip()</code> method that's recursive. For more discussion of this topic, see <a href="#skip">Skip Tags You Don't Care About</a>.</li>
+</ul>
+  
+  </li>
+</ol>
+
+<p>This snippet shows how the parser parses entries, titles, links, and summaries.</p>
+<pre>public static class Entry {
+    public final String title;
+    public final String link;
+    public final String summary;
+
+    private Entry(String title, String summary, String link) {
+        this.title = title;
+        this.summary = summary;
+        this.link = link;
+    }
+}
+  
+// Parses the contents of an entry. If it encounters a title, summary, or link tag, hands them off
+// to their respective &quot;read&quot; methods for processing. Otherwise, skips the tag.
+private Entry readEntry(XmlPullParser parser) throws XmlPullParserException, IOException {
+    parser.require(XmlPullParser.START_TAG, ns, "entry");
+    String title = null;
+    String summary = null;
+    String link = null;
+    while (parser.next() != XmlPullParser.END_TAG) {
+        if (parser.getEventType() != XmlPullParser.START_TAG) {
+            continue;
+        }
+        String name = parser.getName();
+        if (name.equals("title")) {
+            title = readTitle(parser);
+        } else if (name.equals("summary")) {
+            summary = readSummary(parser);
+        } else if (name.equals("link")) {
+            link = readLink(parser);
+        } else {
+            skip(parser);
+        }
+    }
+    return new Entry(title, summary, link);
+}
+
+// Processes title tags in the feed.
+private String readTitle(XmlPullParser parser) throws IOException, XmlPullParserException {
+    parser.require(XmlPullParser.START_TAG, ns, "title");
+    String title = readText(parser);
+    parser.require(XmlPullParser.END_TAG, ns, "title");
+    return title;
+}
+  
+// Processes link tags in the feed.
+private String readLink(XmlPullParser parser) throws IOException, XmlPullParserException {
+    String link = "";
+    parser.require(XmlPullParser.START_TAG, ns, "link");
+    String tag = parser.getName();
+    String relType = parser.getAttributeValue(null, "rel");  
+    if (tag.equals("link")) {
+        if (relType.equals("alternate")){
+            link = parser.getAttributeValue(null, "href");
+            parser.nextTag();
+        } 
+    }
+    parser.require(XmlPullParser.END_TAG, ns, "link");
+    return link;
+}
+
+// Processes summary tags in the feed.
+private String readSummary(XmlPullParser parser) throws IOException, XmlPullParserException {
+    parser.require(XmlPullParser.START_TAG, ns, "summary");
+    String summary = readText(parser);
+    parser.require(XmlPullParser.END_TAG, ns, "summary");
+    return summary;
+}
+
+// For the tags title and summary, extracts their text values.
+private String readText(XmlPullParser parser) throws IOException, XmlPullParserException {
+    String result = "";
+    if (parser.next() == XmlPullParser.TEXT) {
+        result = parser.getText();
+        parser.nextTag();
+    }
+    return result;
+}
+  ...
+}</pre>
+
+<h2 id="skip">Skip Tags You Don't Care About</h2>
+
+<p>One of the steps in the XML parsing described above is for the parser to skip tags it's not interested in. Here is the parser's <code>skip()</code> method:</p>
+
+<pre>
+private void skip(XmlPullParser parser) throws XmlPullParserException, IOException {
+    if (parser.getEventType() != XmlPullParser.START_TAG) {
+        throw new IllegalStateException();
+    }
+    int depth = 1;
+    while (depth != 0) {
+        switch (parser.next()) {
+        case XmlPullParser.END_TAG:
+            depth--;
+            break;
+        case XmlPullParser.START_TAG:
+            depth++;
+            break;
+        }
+    }
+ }
+</pre>
+
+<p>This is how it works:</p>
+
+<ul>
+
+<li>It throws an exception if the current event isn't a
+<code>START_TAG</code>.</li>
+
+<li>It consumes the <code>START_TAG</code>, and all events up to and including
+the matching <code>END_TAG</code>.</li>
+
+<li>To make sure that it stops at the correct <code>END_TAG</code> and not at
+the first tag it encounters after the original <code>START_TAG</code>, it keeps
+track of the nesting depth.</li>
+
+</ul>
+
+<p>Thus if the current element has nested elements, the value of
+<code>depth</code> won't be 0 until the parser has consumed all events between
+the original <code>START_TAG</code> and its matching <code>END_TAG</code>. For
+example, consider how the parser skips the <code>&lt;author&gt;</code> element,
+which has 2 nested elements, <code>&lt;name&gt;</code> and
+<code>&lt;uri&gt;</code>:</p>
+
+<ul>
+
+<li>The first time through the <code>while</code> loop, the next tag the parser
+encounters after <code>&lt;author&gt;</code> is the <code>START_TAG</code> for 
+<code>&lt;name&gt;</code>. The value for <code>depth</code> is incremented to
+2.</li>
+
+<li>The second time through the <code>while</code> loop, the next tag the parser
+encounters is the <code>END_TAG</code>  <code>&lt;/name&gt;</code>. The value
+for <code>depth</code> is decremented to 1.</li>
+
+<li>The third time through the <code>while</code> loop, the next tag the parser
+encounters is the <code>START_TAG</code>  <code>&lt;uri&gt;</code>. The value
+for <code>depth</code> is incremented to 2.</li>
+
+<li>The fourth time through the <code>while</code> loop, the next tag the parser
+encounters is the <code>END_TAG</code>  <code>&lt;/uri&gt;</code>. The value for
+<code>depth</code> is decremented to 1.</li>
+
+<li>The fifth time and final time through the <code>while</code> loop, the next
+tag the parser encounters is the <code>END_TAG</code> 
+<code>&lt;/author&gt;</code>. The value for <code>depth</code> is decremented to
+0, indicating that the <code>&lt;author&gt;</code> element has been successfully
+skipped.</li>
+
+</ul>
+
+<h2 id="consume">Consume XML Data</h2>
+
+<p>The example application fetches and parses the XML feed within an {@link
+android.os.AsyncTask}. This takes the processing off the main UI thread. When 
+processing is complete, the app updates the UI in the main activity
+(<code>NetworkActivity</code>).</p>
+<p>In the excerpt shown below, the <code>loadPage()</code> method does the
+following:</p>
+
+<ul>
+
+  <li>Initializes a string variable with the URL for the XML feed.</li>
+  
+  <li>If the user's settings and the network connection allow it, invokes
+<code>new DownloadXmlTask().execute(url)</code>. This instantiates a new 
+<code>DownloadXmlTask</code> object ({@link android.os.AsyncTask} subclass) and
+runs its {@link android.os.AsyncTask#execute execute()} method, which downloads
+and parses the feed and returns a string result to be displayed in the UI.</li>
+  
+</ul>
+<pre>
+public class NetworkActivity extends Activity {
+    public static final String WIFI = "Wi-Fi";
+    public static final String ANY = "Any";
+    private static final String URL = "http://stackoverflow.com/feeds/tag?tagnames=android&sort=newest";
+   
+    // Whether there is a Wi-Fi connection.
+    private static boolean wifiConnected = false; 
+    // Whether there is a mobile connection.
+    private static boolean mobileConnected = false;
+    // Whether the display should be refreshed.
+    public static boolean refreshDisplay = true; 
+    public static String sPref = null;
+
+    ...
+      
+    // Uses AsyncTask to download the XML feed from stackoverflow.com.
+    public void loadPage() {  
+      
+        if((sPref.equals(ANY)) && (wifiConnected || mobileConnected)) {
+            new DownloadXmlTask().execute(URL);
+        }
+        else if ((sPref.equals(WIFI)) && (wifiConnected)) {
+            new DownloadXmlTask().execute(URL);
+        } else {
+            // show error
+        }  
+    }</pre>
+    
+<p>The {@link android.os.AsyncTask} subclass shown below,
+<code>DownloadXmlTask</code>, implements the following {@link
+android.os.AsyncTask} methods:</p>
+
+    <ul>
+    
+      <li>{@link android.os.AsyncTask#doInBackground doInBackground()} executes
+the method <code>loadXmlFromNetwork()</code>. It passes the feed URL as a
+parameter. The method <code>loadXmlFromNetwork()</code> fetches and processes
+the feed. When it finishes, it passes back a result string.</li>
+      
+      <li>{@link android.os.AsyncTask#onPostExecute onPostExecute()} takes the
+returned string and displays it in the UI.</li>
+      
+    </ul>
+    
+<pre>
+// Implementation of AsyncTask used to download XML feed from stackoverflow.com.
+private class DownloadXmlTask extends AsyncTask&lt;String, Void, String&gt; {
+    &#64;Override
+    protected String doInBackground(String... urls) {
+        try {
+            return loadXmlFromNetwork(urls[0]);
+        } catch (IOException e) {
+            return getResources().getString(R.string.connection_error);
+        } catch (XmlPullParserException e) {
+            return getResources().getString(R.string.xml_error);
+        }
+    }
+
+    &#64;Override
+    protected void onPostExecute(String result) {  
+        setContentView(R.layout.main);
+        // Displays the HTML string in the UI via a WebView
+        WebView myWebView = (WebView) findViewById(R.id.webview);
+        myWebView.loadData(result, "text/html", null);
+    }
+}</pre>
+
+   <p>Below is the method <code>loadXmlFromNetwork()</code> that is invoked from
+<code>DownloadXmlTask</code>. It does the following:</p>
+   
+   <ol>
+   
+     <li>Instantiates a <code>StackOverflowXmlParser</code>. It also creates variables for
+a {@link java.util.List} of <code>Entry</code> objects (<code>entries</code>), and 
+<code>title</code>, <code>url</code>, and <code>summary</code>, to hold the
+values extracted from the XML feed for those fields.</li>
+     
+     <li>Calls <code>downloadUrl()</code>, which fetches the feed and returns it as 
+     an {@link java.io.InputStream}.</li>
+     
+     <li>Uses <code>StackOverflowXmlParser</code> to parse the {@link java.io.InputStream}. 
+     <code>StackOverflowXmlParser</code> populates a 
+     {@link java.util.List} of <code>entries</code> with data from the feed.</li>
+     
+     <li>Processes the <code>entries</code> {@link java.util.List}, 
+ and combines the feed data with HTML markup.</li>
+     
+     <li>Returns an HTML string that is displayed in the main activity
+UI by the {@link android.os.AsyncTask} method {@link
+android.os.AsyncTask#onPostExecute onPostExecute()}.</li>
+     
+</ol>
+
+<pre>
+// Uploads XML from stackoverflow.com, parses it, and combines it with
+// HTML markup. Returns HTML string.
+private String loadXmlFromNetwork(String urlString) throws XmlPullParserException, IOException {
+    InputStream stream = null;
+    // Instantiate the parser
+    StackOverflowXmlParser stackOverflowXmlParser = new StackOverflowXmlParser();
+    List&lt;Entry&gt; entries = null;
+    String title = null;
+    String url = null;
+    String summary = null;
+    Calendar rightNow = Calendar.getInstance(); 
+    DateFormat formatter = new SimpleDateFormat("MMM dd h:mmaa");
+        
+    // Checks whether the user set the preference to include summary text
+    SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
+    boolean pref = sharedPrefs.getBoolean("summaryPref", false);
+        
+    StringBuilder htmlString = new StringBuilder();
+    htmlString.append("&lt;h3&gt;" + getResources().getString(R.string.page_title) + "&lt;/h3&gt;");
+    htmlString.append("&lt;em&gt;" + getResources().getString(R.string.updated) + " " + 
+            formatter.format(rightNow.getTime()) + "&lt;/em&gt;");
+        
+    try {
+        stream = downloadUrl(urlString);        
+        entries = stackOverflowXmlParser.parse(stream);
+    // Makes sure that the InputStream is closed after the app is
+    // finished using it.
+    } finally {
+        if (stream != null) {
+            stream.close();
+        } 
+     }
+    
+    // StackOverflowXmlParser returns a List (called "entries") of Entry objects.
+    // Each Entry object represents a single post in the XML feed.
+    // This section processes the entries list to combine each entry with HTML markup.
+    // Each entry is displayed in the UI as a link that optionally includes
+    // a text summary.
+    for (Entry entry : entries) {       
+        htmlString.append("&lt;p&gt;&lt;a href='");
+        htmlString.append(entry.link);
+        htmlString.append("'&gt;" + entry.title + "&lt;/a&gt;&lt;/p&gt;");
+        // If the user set the preference to include summary text,
+        // adds it to the display.
+        if (pref) {
+            htmlString.append(entry.summary);
+        }
+    }
+    return htmlString.toString();
+}
+
+// Given a string representation of a URL, sets up a connection and gets
+// an input stream.
+private InputStream downloadUrl(String urlString) throws IOException {
+    URL url = new URL(urlString);
+    HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+    conn.setReadTimeout(10000 /* milliseconds */);
+    conn.setConnectTimeout(15000 /* milliseconds */);
+    conn.setRequestMethod("GET");
+    conn.setDoInput(true);
+    // Starts the query
+    conn.connect();
+    InputStream stream = conn.getInputStream();      
+}</pre>
diff --git a/docs/html/training/basics/supporting-devices/languages.jd b/docs/html/training/basics/supporting-devices/languages.jd
index fcc95c2..d83fbca 100644
--- a/docs/html/training/basics/supporting-devices/languages.jd
+++ b/docs/html/training/basics/supporting-devices/languages.jd
@@ -97,6 +97,10 @@
 &lt;/resources>
 </pre>
 
+<p class="note"><strong>Note:</strong> You can use the locale qualifier (or any
+configuration qualifer) on any resource type, such as if you want to provide
+localized versions of your bitmap drawable. For more information, see <a
+href="{@docRoot}guide/topics/resources/localization.html">Localization</a>.
 
 <h2 id="UseString">Use the String Resources</h2>
 
diff --git a/docs/html/training/basics/supporting-devices/platforms.jd b/docs/html/training/basics/supporting-devices/platforms.jd
index 0d4e7d9..04872a3 100644
--- a/docs/html/training/basics/supporting-devices/platforms.jd
+++ b/docs/html/training/basics/supporting-devices/platforms.jd
@@ -21,9 +21,9 @@
     
     <h2>You should also read</h2>
     <ul>
-      <li><a href="{@docRoot}guide/appendix/api-levels.html">Android API Levels</a></li>
+      <li><a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">Android API Levels</a></li>
       <li><a
-href="{@docRoot}sdk/compatibility-library.html">Android Support Library</a></li>
+href="{@docRoot}tools/extras/support-library.html">Android Support Library</a></li>
     </ul>
   </div>
 </div>
@@ -34,7 +34,7 @@
 versions as well.</p>
 
 <p>The dashboard for <a
-href="http://developer.android.com/resources/dashboard/platform-versions.html">Platform Versions</a>
+href="http://developer.android.com/about/dashboards/index.html">Platform Versions</a>
 is updated regularly to show the distribution of active 
 devices running each version of Android, based on the number of devices that visit the Google Play 
 Store.  Generally, it’s a good practice to support about 90% of the active devices, while 
@@ -42,7 +42,7 @@
 
 <p class="note"><strong>Tip:</strong> In order to provide the best features and 
 functionality across several Android versions, you should use the <a
-href="{@docRoot}sdk/compatibility-library.html">Android Support Library</a> in your app,
+href="{@docRoot}tools/extras/support-library.html">Android Support Library</a> in your app,
 which allows you to use several recent platform APIs on older versions.</p>
 
 
diff --git a/docs/html/training/camera/index.jd b/docs/html/training/camera/index.jd
index d209c7e..282bed8 100644
--- a/docs/html/training/camera/index.jd
+++ b/docs/html/training/camera/index.jd
@@ -21,7 +21,7 @@
 <h2>You should also read</h2>
 <ul>
   <li><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></li>
-  <li><a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a></li>
+  <li><a href="{@docRoot}guide/components/activities.html">Activities</a></li>
 </ul>
 
 
diff --git a/docs/html/training/camera/photobasics.jd b/docs/html/training/camera/photobasics.jd
index 3420918..8fa6d67b 100644
--- a/docs/html/training/camera/photobasics.jd
+++ b/docs/html/training/camera/photobasics.jd
@@ -25,7 +25,7 @@
     <h2>You should also read</h2>
     <ul>
       <li><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></li>
-      <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent 
+      <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent 
       Filters</a></li>
     </ul>
 
diff --git a/docs/html/training/camera/videobasics.jd b/docs/html/training/camera/videobasics.jd
index 5fe1a3a..d011d09 100644
--- a/docs/html/training/camera/videobasics.jd
+++ b/docs/html/training/camera/videobasics.jd
@@ -24,7 +24,7 @@
     <h2>You should also read</h2>
       <ul>
         <li><a href="{@docRoot}guide/topics/media/camera.html">Camera</a></li>
-        <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent 
+        <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent 
       Filters</a></li>
       </ul>
 
diff --git a/docs/html/training/custom-views/create-view.jd b/docs/html/training/custom-views/create-view.jd
new file mode 100644
index 0000000..b0bc8b4
--- /dev/null
+++ b/docs/html/training/custom-views/create-view.jd
@@ -0,0 +1,281 @@
+page.title=Creating a View Class
+parent.title=Creating Custom Views
+parent.link=index.html
+
+trainingnavtop=true
+next.title=Custom Drawing
+next.link=custom-drawing.html
+
+@jd:body
+
+<div id="tb-wrapper">
+    <div id="tb">
+
+        <h2>This lesson teaches you to</h2>
+        <ol>
+            <li><a href="#subclassview">Subclass a View</a></li>
+            <li><a href="#customattr">Define Custom Attributes</a></li>
+            <li><a href="#applyattr">Apply Custom Attributes to a View</a></li>
+            <li><a href="#addprop">Add Properties and Events</a></li>
+            <li><a href="#accessibility">Design For Accessibility</a></li>
+        </ol>
+
+        <h2>You should also read</h2>
+        <ul>
+            <li><a href="{@docRoot}/guide/topics/ui/custom-components.html">Custom Components</a>
+            </li>
+        </ul>
+<h2>Try it out</h2>
+<div class="download-box">
+<a href="{@docRoot}shareables/training/CustomView.zip"
+class="button">Download the sample</a>
+<p class="filename">CustomView.zip</p>
+</div>
+    </div>
+</div>
+
+<p>A well-designed custom view is much like any other well-designed class. It encapsulates a
+specific set of
+functionality with an easy to use interface, it uses CPU and memory efficiently, and so forth. In
+addition to being a
+well-designed class, though, a custom view should:
+
+<ul>
+    <li>Conform to Android standards</li>
+    <li>Provide custom styleable attributes that work with Android XML layouts</li>
+    <li>Send accessibility events</li>
+    <li>Be compatible with multiple Android platforms.</li>
+</ul>
+
+<p>The Android framework provides a set of base classes and XML tags to help you create a view that
+    meets all of these
+    requirements. This lesson discusses how to use the Android framework to create the core
+    functionality of a view
+    class.</p>
+
+<h2 id="subclassview">Subclass a View</h2>
+
+<p>All of the view classes defined in the Android framework extend {@link android.view.View}. Your
+    custom view can also
+    extend {@link android.view.View View} directly, or you can save time by extending one of the
+    existing view
+    subclasses, such as {@link android.widget.Button}.</p>
+
+<p>To allow the <a href=”{@docRoot}guide/developing/tools/adt.html”>Android Developer Tools
+</a> to interact with your view, at a minimum you must provide a constructor that takes a
+{@link android.content.Context} and an {@link android.util.AttributeSet} object as parameters.
+This constructor allows the layout editor to create and edit an instance of your view.</p>
+
+<pre class="prettyprint">
+class PieChart extends View {
+    public PieChart(Context ctx, AttributeSet attrs) {
+        super(ctx, attrs);
+    }
+}
+</pre>
+
+<h2 id="customattr">Define Custom Attributes</h2>
+
+<p>To add a built-in {@link android.view.View View} to your user interface, you specify it in an XML element and
+control its
+appearance and behavior with element attributes. Well-written custom views can also be added and
+styled via XML. To
+enable this behavior in your custom view, you must:
+
+<ul>
+    <li>Define custom attributes for your view in a {@code
+        &lt;declare-styleable&gt;
+        } resource element
+    </li>
+    <li>Specify values for the attributes in your XML layout</li>
+    <li>Retrieve attribute values at runtime</li>
+    <li>Apply the retrieved attribute values to your view</li>
+</ul>
+
+<p>This section discusses how to define custom attributes and specify their values.
+  The next section deals with
+    retrieving and applying the values at runtime.</p>
+
+<p>To define custom attributes, add {@code
+    &lt;declare-styleable&gt;
+    } resources to your project. It's customary to put these resources into a {@code
+    res/values/attrs.xml} file. Here's
+    an example of an {@code attrs.xml} file:
+</p>
+
+<pre>
+&lt;resources>;
+   &ltdeclare-styleable name="PieChart">
+       &lt;attr name="showText" format="boolean" />
+       &lt;attr name="labelPosition" format="enum">
+           &lt;enum name="left" value="0"/>
+           &lt;enum name="right" value="1"/>
+       &lt;/attr>
+   &lt;/declare-styleable>
+&lt;/resources>
+</pre>
+
+<p>This code declares two custom attributes, {@code showText} and {@code labelPosition}, that belong
+    to a styleable
+    entity named {@code PieChart}. The name of the styleable entity is, by convention, the same name as the
+    name of the class
+    that defines the custom view. Although it's not strictly necessary to follow this convention,
+    many popular code
+    editors depend on this naming convention to provide statement completion.</p>
+
+<p>Once you define the custom attributes, you can use them in layout XML files just like built-in
+    attributes. The only
+    difference is that your custom attributes belong to a different namespace. Instead of belonging
+    to the {@code
+    http://schemas.android.com/apk/res/android} namespace, they belong to {@code
+    http://schemas.android.com/apk/res/[your package name]}. For example, here's how to use the
+    attributes defined for
+    {@code PieChart}:
+    <p>
+
+<pre>
+&lt;?xml version="1.0" encoding="utf-8"?>
+&lt;LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+   xmlns:custom="http://schemas.android.com/apk/res/com.example.customviews">
+ &lt;com.example.customviews.charting.PieChart
+     custom:showText="true"
+     custom:labelPosition="left" />
+&lt;/LinearLayout>
+</pre>
+
+        <p>In order to avoid having to repeat the long namespace URI, the sample uses an {@code
+            xmlns} directive. This
+            directive assigns the alias {@code custom} to the namespace {@code
+            http://schemas.android.com/apk/res/com.example.customviews}. You can choose any alias
+            you want for your
+            namespace.</p>
+
+        <p>Notice the name of the XML tag that adds the custom view to the layout. It is the fully
+            qualified name of the
+            custom view class. If your view class is an inner class, you must further qualify it with the name of the view's outer class.
+            further. For instance, the
+            {@code PieChart} class has an inner class called {@code PieView}. To use the custom attributes from this class, you would
+            use the tag {@code com.example.customviews.charting.PieChart$PieView}.</p>
+
+        <h2 id="applyattr">Apply Custom Attributes</h2>
+
+        <p>When a view is created from an XML layout, all of the attributes in the XML tag are read
+            from the resource
+            bundle and passed into the view's constructor as an {@link android.util.AttributeSet}.
+            Although it's
+            possible to read values from the {@link android.util.AttributeSet} directly, doing so
+            has some disadvantages:</p>
+
+        <ul>
+            <li>Resource references within attribute values are not resolved</li>
+            <li>Styles are not applied</li>
+        </ul>
+
+        <p>Instead, pass the {@link android.util.AttributeSet} to {@link
+            android.content.res.Resources.Theme#obtainStyledAttributes obtainStyledAttributes()}.
+            This method passes back a {@link android.content.res.TypedArray TypedArray} array of
+            values that have
+            already been dereferenced and styled.</p>
+
+        <p>The Android resource compiler does a lot of work for you to make calling {@link
+            android.content.res.Resources.Theme#obtainStyledAttributes obtainStyledAttributes()}
+            easier. For each {@code &lt;declare-styleable&gt;}
+            resource in the res directory, the generated R.java defines both an array of attribute
+            ids and a set of
+            constants that define the index for each attribute in the array. You use the predefined
+            constants to read
+            the attributes from the {@link android.content.res.TypedArray TypedArray}. Here's how
+            the {@code PieChart} class
+            reads its attributes:</p>
+
+<pre>
+public PieChart(Context ctx, AttributeSet attrs) {
+   super(ctx, attrs);
+   TypedArray a = context.getTheme().obtainStyledAttributes(
+        attrs,
+        R.styleable.PieChart,
+        0, 0);
+
+   try {
+       mShowText = a.getBoolean(R.styleable.PieChart_showText, false);
+       mTextPos = a.getInteger(R.styleable.PieChart_labelPosition, 0);
+   } finally {
+       a.recycle();
+   }
+}
+</pre>
+
+        <p>Note that {@link android.content.res.TypedArray TypedArray} objects
+          are a shared resource
+            and must be recycled after use.</p>
+
+        <h2 id="addprop">Add Properties and Events</h2>
+
+        <p>Attributes are a powerful way of controlling the behavior and appearance of views, but
+            they can only be read
+            when the view is initialized. To provide dynamic behavior, expose a property getter and
+            setter pair for each
+            custom attribute. The following snippet shows how {@code PieChart} exposes a property
+            called {@code
+            showText}:</p>
+
+<pre>
+public boolean isShowText() {
+   return mShowText;
+}
+
+public void setShowText(boolean showText) {
+   mShowText = showText;
+   invalidate();
+   requestLayout();
+}
+</pre>
+
+        <p>Notice that {@code setShowText} calls {@link android.view.View#invalidate invalidate()}
+            and {@link android.view.View#requestLayout requestLayout()}. These calls are crucial
+            to ensure that the view behaves reliably. You have
+            to invalidate the view after any change to its properties that might change its
+            appearance, so that the
+            system knows that it needs to be redrawn. Likewise, you need to request a new layout if
+            a property changes
+            that might affect the size or shape of the view. Forgetting these method calls can cause
+            hard-to-find
+            bugs.</p>
+
+        <p>Custom views should also support event listeners to communicate important events. For
+            instance, {@code PieChart}
+            exposes a custom event called {@code OnCurrentItemChanged} to notify listeners that the
+            user has rotated the
+            pie chart to focus on a new pie slice.</p>
+
+        <p>It's easy to forget to expose properties and events, especially when you're the only user
+            of the custom view.
+            Taking some time to carefully define your view's interface reduces future maintenance
+            costs.
+            A good rule to follow is to always expose any property that affects the visible
+            appearance or behavior of
+            your custom view.
+
+            <h2 id="accessibility">Design For Accessibility</h2>
+
+            <p>Your custom view should support the widest range of users. This includes users with
+                disabilities that
+                prevent them from seeing or using a touchscreen. To support users with disabilities,
+                you should:</p>
+
+            <ul>
+              <li>Label your input fields using the {@code android:contentDescription} attribute
+              </li>
+              <li>Send accessibility events by calling {@link
+                android.view.accessibility.AccessibilityEventSource#sendAccessibilityEvent
+                sendAccessibilityEvent()} when
+                appropriate.
+              </li>
+                <li>
+                Support alternate controllers, such as D-pad and trackball</li>
+            </ul>
+
+            <p>For more information on creating accessible views, see
+                <a href=”{@docRoot}guide/topics/ui/accessibility/apps.html#custom-views”>
+              Making Applications Accessible</a> in the Android Developers Guide.
+        </p>
diff --git a/docs/html/training/custom-views/custom-drawing.jd b/docs/html/training/custom-views/custom-drawing.jd
new file mode 100644
index 0000000..8280237
--- /dev/null
+++ b/docs/html/training/custom-views/custom-drawing.jd
@@ -0,0 +1,284 @@
+page.title=Custom Drawing
+parent.title=Creating Custom Views
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Creating a View Class
+previous.link=create-view.html
+next.title=Making the View Interactive
+next.link=making-interactive.html
+
+@jd:body
+
+<div id="tb-wrapper">
+    <div id="tb">
+
+        <h2>This lesson teaches you to</h2>
+        <ol>
+            <li><a href="#ondraw">Override onDraw()</a></li>
+            <li><a href="#createobject">Create Drawing Objects</a></li>
+            <li><a href="#layoutevent">Handle Layout Events</a></li>
+            <li><a href="#draw">Draw!</a></li>
+        </ol>
+
+        <h2>You should also read</h2>
+        <ul>
+            <li><a href="{@docRoot}guide/topics/graphics/2d-graphics.html">
+              Canvas and Drawables</a></li>
+        </ul>
+<h2>Try it out</h2>
+<div class="download-box">
+<a href="{@docRoot}shareables/training/CustomView.zip"
+class="button">Download the sample</a>
+<p class="filename">CustomView.zip</p>
+</div>
+    </div>
+</div>
+
+<p>The most important part of a custom view is its appearance. Custom drawing can be easy or complex
+according to your
+application's needs. This lesson covers some of the most common operations.</p>
+
+<h2 id="overrideondraw">Override onDraw()</h2>
+
+<p>The most important step in drawing a custom view is to override the {@link
+android.view.View#onDraw(android.graphics.Canvas) onDraw()} method. The parameter to {@link
+android.view.View#onDraw(android.graphics.Canvas) onDraw()} is a {@link
+android.graphics.Canvas Canvas} object that the view can use to draw itself. The {@link
+android.graphics.Canvas Canvas}
+class defines methods for drawing text, lines, bitmaps, and many other graphics primitives. You can
+use these methods in
+{@link
+android.view.View#onDraw(android.graphics.Canvas) onDraw()} to create your custom user interface (UI).</p>
+
+<p>Before you can call any drawing methods, though, it's necessary to create a {@link
+android.graphics.Paint Paint}
+object. The next section discusses {@link android.graphics.Paint Paint} in more detail.</p>
+
+<h2 id="createobject">Create Drawing Objects</h2>
+
+<p>The {@link android.graphics} framework divides drawing into two areas:</p>
+
+<ul>
+<li><i>What</i> to draw, handled by {@link android.graphics.Canvas Canvas}</li>
+<li><i>How</i> to draw, handled by {@link android.graphics.Paint}.</li>
+</ul>
+
+<p>For instance, {@link android.graphics.Canvas Canvas} provides a method to draw a line, while
+{@link
+android.graphics.Paint Paint} provides methods to define that line's color. {@link
+android.graphics.Canvas Canvas} has a
+method to draw a rectangle, while {@link android.graphics.Paint Paint} defines whether to fill that
+rectangle with a
+color or leave it empty. Simply put, {@link android.graphics.Canvas Canvas} defines shapes that you
+can draw on the
+screen, while {@link android.graphics.Paint Paint} defines the color, style, font, and so forth of
+each shape you
+draw.</p>
+
+<p>So, before you draw anything, you need to create one or more {@link android.graphics.Paint Paint}
+objects. The {@code PieChart} example does this in a method called {@code init}, which is
+called from the
+constructor:</p>
+
+<pre>
+private void init() {
+   mTextPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+   mTextPaint.setColor(mTextColor);
+   if (mTextHeight == 0) {
+       mTextHeight = mTextPaint.getTextSize();
+   } else {
+       mTextPaint.setTextSize(mTextHeight);
+   }
+
+   mPiePaint = new Paint(Paint.ANTI_ALIAS_FLAG);
+   mPiePaint.setStyle(Paint.Style.FILL);
+   mPiePaint.setTextSize(mTextHeight);
+
+   mShadowPaint = new Paint(0);
+   mShadowPaint.setColor(0xff101010);
+   mShadowPaint.setMaskFilter(new BlurMaskFilter(8, BlurMaskFilter.Blur.NORMAL));
+
+   ...
+</pre>
+
+
+<p>Creating objects ahead of time is an important optimization. Views are redrawn very frequently,
+and many drawing
+objects require expensive initialization. Creating drawing objects within your {@link
+android.view.View#onDraw(android.graphics.Canvas) onDraw()}
+method significantly
+reduces performance and can make your UI appear sluggish.</p>
+
+<h2 id="layouteevent">Handle Layout Events</h2>
+
+<p>In order to properly draw your custom view, you need to know what size it is. Complex custom
+views often need to
+perform multiple layout calculations depending on the size and shape of their area on screen. You
+should never make
+assumptions about the size of your view on the screen. Even if only one app uses your view, that app
+needs to handle
+different screen sizes, multiple screen densities, and various aspect ratios in both portrait and
+landscape mode.</p>
+
+<p>Although {@link android.view.View} has many methods for handling measurement, most of them do not
+need to be
+overridden. If your view doesn't need special control over its size, you only need to override one
+method: {@link
+android.view.View#onSizeChanged onSizeChanged()}.</p>
+
+<p>{@link
+android.view.View#onSizeChanged onSizeChanged()} is called when your view is first assigned a size,
+and again if the size of your view changes
+for any reason. Calculate positions, dimensions, and any other values related to your view's size in
+{@link
+android.view.View#onSizeChanged onSizeChanged()}, instead of recalculating them every time you draw.
+In the {@code PieChart} example, {@link
+android.view.View#onSizeChanged onSizeChanged()} is
+where the {@code PieChart} view calculates the bounding rectangle of the pie chart and the relative position
+of the text label
+and other visual elements.</p>
+
+<p>When your view is assigned a size, the layout manager assumes that the size includes all of the
+view's padding. You
+must handle the padding values when you calculate your view's size. Here's a snippet from {@code
+PieChart.onSizeChanged()}
+that shows how to do this:</p>
+
+<pre>
+       // Account for padding
+       float xpad = (float)(getPaddingLeft() + getPaddingRight());
+       float ypad = (float)(getPaddingTop() + getPaddingBottom());
+
+       // Account for the label
+       if (mShowText) xpad += mTextWidth;
+
+       float ww = (float)w - xpad;
+       float hh = (float)h - ypad;
+
+       // Figure out how big we can make the pie.
+       float diameter = Math.min(ww, hh);
+</pre>
+
+<p>If you need finer control over your view's layout parameters, implement {@link
+android.view.View#onMeasure onMeasure()}. This method's parameters are
+{@link android.view.View.MeasureSpec} values that tell you how big your view's
+parent wants your view to be, and whether that size is a hard maximum or just a suggestion. As an
+optimization, these
+values are stored as packed integers, and you use the static methods of
+{@link android.view.View.MeasureSpec} to
+unpack the information
+stored in each integer.
+
+<p>Here's an example implementation of {@link android.view.View#onMeasure onMeasure()}.
+    In this implementation, {@code PieChart}
+    attempts to make its area
+    big enough to make the pie as big as its label:</p>
+
+<pre>
+&#64;Override
+protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+   // Try for a width based on our minimum
+   int minw = getPaddingLeft() + getPaddingRight() + getSuggestedMinimumWidth();
+   int w = resolveSizeAndState(minw, widthMeasureSpec, 1);
+
+   // Whatever the width ends up being, ask for a height that would let the pie
+   // get as big as it can
+   int minh = MeasureSpec.getSize(w) - (int)mTextWidth + getPaddingBottom() + getPaddingTop();
+   int h = resolveSizeAndState(MeasureSpec.getSize(w) - (int)mTextWidth, heightMeasureSpec, 0);
+
+   setMeasuredDimension(w, h);
+}
+</pre>
+
+<p>There are three important things to note in this code:</p>
+
+<ul>
+    <li>The calculations take into account the view's padding. As mentioned earlier, this is the
+        view's
+        responsibility.
+    </li>
+    <li>The helper method {@link android.view.View#resolveSizeAndState resolveSizeAndState()} is
+        used to create the
+        final width and height values. This helper returns an appropriate
+        {@link android.view.View.MeasureSpec} value
+        by comparing the view's desired size to the spec passed into
+        {@link android.view.View#onMeasure onMeasure()}.
+    </li>
+    <li>{@link android.view.View#onMeasure onMeasure()} has no return value.
+        Instead, the method communicates its results by
+        calling {@link
+        android.view.View#setMeasuredDimension setMeasuredDimension()}. Calling this method is
+        mandatory. If you omit
+        this call, the {@link android.view.View} class throws a runtime exception.
+    </li>
+</ul>
+
+<h2 id="draw">Draw!</h2>
+
+<p>Once you have your object creation and measuring code defined, you can implement {@link
+    android.view.View#onDraw(android.graphics.Canvas) onDraw()}. Every view
+    implements {@link
+    android.view.View#onDraw(android.graphics.Canvas) onDraw()}
+    differently, but there are some common operations that most views
+    share:</p>
+
+<ul>
+    <li>Draw text using {@link android.graphics.Canvas#drawText drawText()}. Specify the typeface by
+        calling {@link
+        android.graphics.Paint#setTypeface setTypeface()}, and the text color by calling {@link
+        android.graphics.Paint#setColor setColor()}.
+    </li>
+    <li>Draw primitive shapes using {@link android.graphics.Canvas#drawRect drawRect()}, {@link
+        android.graphics.Canvas#drawOval drawOval()}, and {@link android.graphics.Canvas#drawArc
+        drawArc()}. Change
+        whether the shapes are filled, outlined, or both by calling {@link
+        android.graphics.Paint#setStyle(android.graphics.Paint.Style) setStyle()}.
+    </li>
+    <li>Draw more complex shapes using the {@link android.graphics.Path} class.
+      Define a shape by adding lines and curves to a
+        {@link
+        android.graphics.Path} object, then draw the shape using {@link
+        android.graphics.Canvas#drawPath drawPath()}.
+        Just as with primitive shapes, paths can be outlined, filled, or both, depending on the
+        {@link android.graphics.Paint#setStyle
+        setStyle()}.
+    </li>
+    <li>
+    Define gradient fills by creating {@link android.graphics.LinearGradient} objects. Call {@link
+    android.graphics.Paint#setShader setShader()} to use your
+    {@link android.graphics.LinearGradient} on filled
+    shapes.
+    <li>Draw bitmaps using {@link android.graphics.Canvas#drawBitmap drawBitmap()}.</li>
+</ul>
+
+<p>For example, here's the code that draws {@code PieChart}. It uses a mix of text, lines, and shapes.</p>
+
+<pre>
+protected void onDraw(Canvas canvas) {
+   super.onDraw(canvas);
+
+   // Draw the shadow
+   canvas.drawOval(
+           mShadowBounds,
+           mShadowPaint
+   );
+
+   // Draw the label text
+   canvas.drawText(mData.get(mCurrentItem).mLabel, mTextX, mTextY, mTextPaint);
+
+   // Draw the pie slices
+   for (int i = 0; i &lt; mData.size(); ++i) {
+       Item it = mData.get(i);
+       mPiePaint.setShader(it.mShader);
+       canvas.drawArc(mBounds,
+               360 - it.mEndAngle,
+               it.mEndAngle - it.mStartAngle,
+               true, mPiePaint);
+   }
+
+   // Draw the pointer
+   canvas.drawLine(mTextX, mPointerY, mPointerX, mPointerY, mTextPaint);
+   canvas.drawCircle(mPointerX, mPointerY, mPointerSize, mTextPaint);
+}
+</pre>
diff --git a/docs/html/training/custom-views/index.jd b/docs/html/training/custom-views/index.jd
new file mode 100644
index 0000000..0661c05
--- /dev/null
+++ b/docs/html/training/custom-views/index.jd
@@ -0,0 +1,79 @@
+page.title=Creating Custom Views
+
+trainingnavtop=true
+startpage=true
+next.title=Creating a View Class
+next.link=create-view.html
+
+@jd:body
+
+<div id="tb-wrapper">
+    <div id="tb">
+
+        <h2>Dependencies and prerequisites</h2>
+        <ul>
+            <li>Android 2.1 (API level 7) or higher</li>
+        </ul>
+
+        <h2>You should also read</h2>
+        <ul>
+            <li><a href="{@docRoot}/guide/topics/ui/custom-components.html">Custom Components</a>
+            </li>
+            <li><a href="{@docRoot}/guide/topics/ui/ui-events.html">Input Events</a></li>
+            <li><a href="{@docRoot}/guide/topics/graphics/prop-animation.html">Property
+                Animation</a></li>
+            <li><a href="{@docRoot}/guide/topics/graphics/hardware-accel.html">Hardware
+                Acceleration</a></li>
+            <li><a href="{@docRoot}guide/topics/ui/accessibility/index.html">
+                Accessibility</a> developer guide</li>
+        </ul>
+<h2>Try it out</h2>
+<div class="download-box">
+<a href="{@docRoot}shareables/training/CustomView.zip"
+class="button">Download the sample</a>
+<p class="filename">CustomView.zip</p>
+</div>
+    </div>
+</div>
+
+<p>
+The Android framework has a large set of {@link android.view.View} classes for
+interacting with the user and displaying various
+types of data. But
+sometimes your app has unique needs that aren’t covered by the built-in views. This class shows you
+how to create your
+own views that are robust and reusable.</p>
+
+<h2>Lessons</h2>
+
+<dl>
+<dt><b><a href="create-view.html">Creating a View Class</a></b></dt>
+<dd>Create a class that acts like a built-in view, with custom
+    attributes and support from the <a href="http://developer.android.com/sdk/eclipse-adt.html">ADT</a> layout editor.
+</dd>
+
+<dt><b><a href="custom-drawing.html">Custom Drawing</a></b></dt>
+<dd>Make your view visually distinctive using the Android graphics system.</dd>
+
+<dt><b><a href="making-interactive.html">Making the View Interactive</a></b></dt>
+<dd>Users expect a view to react smoothly and naturally to input gestures.
+    This lesson discusses how to use gesture detection, physics, and animation
+    to give your user interface a professional feel.
+</dd>
+
+<dt><b><a href="optimizing-view.html">Optimizing the View</a></b></dt>
+<dd>No matter how beautiful your UI is, users won't love it if it
+    doesn't run at a consistently high frame rate. Learn how to avoid common
+    performance problems, and how to use hardware acceleration to make your
+    custom drawings run faster.
+</dd>
+
+</dl> 
+
+
+
+
+
+
+
+
diff --git a/docs/html/training/custom-views/making-interactive.jd b/docs/html/training/custom-views/making-interactive.jd
new file mode 100644
index 0000000..4e9d53a
--- /dev/null
+++ b/docs/html/training/custom-views/making-interactive.jd
@@ -0,0 +1,292 @@
+page.title=Making the View Interactive
+parent.title=Creating Custom Views
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Custom Drawing
+previous.link=custom-drawing.html
+next.title=Optmizing the View
+next.link=optimizing-view.html
+
+@jd:body
+
+<div id="tb-wrapper">
+    <div id="tb">
+
+        <h2>This lesson teaches you to</h2>
+        <ol>
+            <li><a href="#inputgesture">Handle Input Gestures</a></li>
+            <li><a href="#motion">Create Physically Plausible Motion</a></li>
+            <li><a href="#makesmooth">Make Your Transitions Smooth</a></li>
+        </ol>
+
+        <h2>You should also read</h2>
+        <ul>
+            <li><a href="{@docRoot}guide/topics/ui/ui-events.html">Input Events</a></li>
+            <li><a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a>
+            </li>
+        </ul>
+<h2>Try it out</h2>
+<div class="download-box">
+<a href="{@docRoot}shareables/training/CustomView.zip"
+class="button">Download the sample</a>
+<p class="filename">CustomView.zip</p>
+</div>
+    </div>
+</div>
+
+<p>Drawing a UI is only one part of creating a custom view. You also need to make your view respond
+to user input in a
+way that closely resembles the real-world action you're mimicking. Objects should always act in the
+same way that real
+objects do. For example, images should not immediately pop out of existence and reappear somewhere
+else, because objects
+in the real world don't do that. Instead, images should move from one place to another.</p>
+
+<p>Users also sense subtle behavior or feel in an interface, and react best to subtleties that
+mimic the real world.
+For example, when users fling a UI object, they should sense friction at the beginning that delays
+the motion, and then
+at the end sense momentum that carries the motion beyond the fling.</p>
+
+<p>This lesson demonstrates how to use features of the Android framework to add these real-world
+behaviors to your
+custom view.
+
+<h2 id="inputgesture">Handle Input Gestures</h2>
+
+<p>Like many other UI frameworks, Android supports an input event model. User actions are turned
+    into events that
+    trigger callbacks, and you can override the callbacks to customize how your application responds
+    to the user. The
+    most common input event in the Android system is <em>touch</em>, which triggers {@link
+    android.view.View#onTouchEvent(android.view.MotionEvent)}. Override this method to handle the
+    event:</p>
+
+<pre>
+   &#64Override
+   public boolean onTouchEvent(MotionEvent event) {
+    return super.onTouchEvent(event);
+   }
+</pre>
+
+<p>Touch events by themselves are not particularly useful. Modern touch UIs define interactions in
+    terms of gestures
+    such as tapping, pulling, pushing, flinging, and zooming. To convert raw touch events into
+    gestures, Android
+    provides {@link android.view.GestureDetector}.</p>
+
+<p>Construct a {@link android.view.GestureDetector} by passing in an instance of a class that
+    implements {@link
+    android.view.GestureDetector.OnGestureListener}. If you only want to process a few gestures, you
+    can extend {@link
+    android.view.GestureDetector.SimpleOnGestureListener} instead of implementing the {@link
+    android.view.GestureDetector.OnGestureListener}
+    interface. For instance, this code creates a class that extends {@link
+    android.view.GestureDetector.SimpleOnGestureListener} and overrides {@link
+    android.view.GestureDetector.SimpleOnGestureListener#onDown}.</p>
+
+<pre>
+class mListener extends GestureDetector.SimpleOnGestureListener {
+   &#64;Override
+   public boolean onDown(MotionEvent e) {
+       return true;
+   }
+}
+mDetector = new GestureDetector(PieChart.this.getContext(), new mListener());
+</pre>
+
+<p>Whether or not you use {@link
+    android.view.GestureDetector.SimpleOnGestureListener}, you must always implement an
+    {@link android.view.GestureDetector.OnGestureListener#onDown onDown()} method that
+    returns {@code true}. This step is necessary because all gestures begin with an
+    {@link android.view.GestureDetector.OnGestureListener#onDown onDown()} message. If
+    you return {@code
+    false} from {@link android.view.GestureDetector.OnGestureListener#onDown onDown()}, as
+    {@link android.view.GestureDetector.SimpleOnGestureListener} does, the system assumes that
+    you want to ignore the
+    rest of the gesture, and the other methods of
+    {@link android.view.GestureDetector.OnGestureListener} never get called. The
+    only time you should
+    return {@code false} from {@link android.view.GestureDetector.OnGestureListener#onDown onDown()}
+    is if you truly want to ignore an entire gesture.
+
+    Once you've implemented {@link android.view.GestureDetector.OnGestureListener}
+    and created an instance of {@link android.view.GestureDetector}, you can use
+    your {@link android.view.GestureDetector} to interpret the touch events you receive in {@link
+    android.view.GestureDetector#onTouchEvent onTouchEvent()}.</p>
+
+<pre>
+&#64;Override
+public boolean onTouchEvent(MotionEvent event) {
+   boolean result = mDetector.onTouchEvent(event);
+   if (!result) {
+       if (event.getAction() == MotionEvent.ACTION_UP) {
+           stopScrolling();
+           result = true;
+       }
+   }
+   return result;
+}
+</pre>
+
+<p>When you pass {@link android.view.GestureDetector#onTouchEvent onTouchEvent()} a touch event that
+    it doesn't
+    recognize as part of a gesture, it returns {@code false}. You can then run your own custom
+    gesture-detection
+    code.</p>
+
+<h2 id="motion">Create Physically Plausible Motion</h2>
+
+<p>Gestures are a powerful way to control touchscreen devices, but they can be counterintuitive and
+    difficult to
+    remember unless they produce physically plausible results. A good example of this is the <em>fling</em>
+    gesture, where the
+    user quickly moves a finger across the screen and then lifts it. This gesture makes sense if the UI
+    responds by moving
+    quickly in the direction of the fling, then slowing down, as if the user had pushed on a
+    flywheel and set it
+    spinning.</p>
+
+<p>However, simulating the feel of a flywheel isn't trivial. A lot of physics and math are required
+    to get a flywheel
+    model working correctly. Fortunately, Android provides helper classes to simulate this and other
+    behaviors. The
+    {@link android.widget.Scroller} class is the basis for handling flywheel-style <em>fling</em>
+    gestures.</p>
+
+<p>To start a fling, call {@link android.widget.Scroller#fling fling()} with the starting velocity
+    and the minimum and
+    maximum x and y values of the fling. For the velocity value, you can use the value computed for
+    you by {@link android.view.GestureDetector}.</p>
+
+<pre>
+&#64;Override
+public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
+   mScroller.fling(currentX, currentY, velocityX / SCALE, velocityY / SCALE, minX, minY, maxX, maxY);
+   postInvalidate();
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> Although the velocity calculated by
+    {@link android.view.GestureDetector} is physically accurate,
+    many developers feel
+    that using this value makes the fling animation too fast. It's common to divide the x and y
+    velocity by a factor of
+    4 to 8.</p>
+
+<p>The call to {@link android.widget.Scroller#fling fling()} sets up the physics model for the fling
+    gesture.
+    Afterwards, you need to update the {@link android.widget.Scroller Scroller} by calling {@link
+    android.widget.Scroller#computeScrollOffset Scroller.computeScrollOffset()} at regular
+    intervals. {@link
+    android.widget.Scroller#computeScrollOffset computeScrollOffset()} updates the {@link
+    android.widget.Scroller
+    Scroller} object's internal state by reading the current time and using the physics model to calculate
+    the x and y position
+    at that time. Call {@link android.widget.Scroller#getCurrX} and {@link
+    android.widget.Scroller#getCurrY} to
+    retrieve these values.</p>
+
+<p>Most views pass the {@link android.widget.Scroller Scroller} object's x and y position directly to
+    {@link
+    android.view.View#scrollTo scrollTo()}. The PieChart example is a little different: it
+    uses the current scroll
+    y position to set the rotational angle of the chart.</p>
+
+<pre>
+if (!mScroller.isFinished()) {
+    mScroller.computeScrollOffset();
+    setPieRotation(mScroller.getCurrY());
+}
+</pre>
+
+<p>The {@link android.widget.Scroller Scroller} class computes scroll positions for you, but it does
+    not automatically
+    apply those positions to your view. It's your responsibility to make sure you get and apply new
+    coordinates often
+    enough to make the scrolling animation look smooth. There are two ways to do this:</p>
+
+<ul>
+    <li>Call {@link android.view.View#postInvalidate() postInvalidate()} after calling
+        {@link android.widget.Scroller#fling(int, int, int, int, int, int, int, int) fling()},
+        in order to
+        force a redraw. This
+        technique requires that you compute scroll offsets in {@link android.view.View#onDraw onDraw()}
+        and call {@link android.view.View#postInvalidate() postInvalidate()} every
+        time the scroll offset changes.
+    </li>
+    <li>Set up a {@link android.animation.ValueAnimator} to animate for the duration of the fling,
+        and add a listener to process animation updates
+        by calling {@link android.animation.ValueAnimator#addUpdateListener addUpdateListener()}.
+    </li>
+</ul>
+
+<p>The PieChart example uses the second approach. This technique is slightly more complex to set up, but
+    it works more
+    closely with the animation system and doesn't require potentially unnecessary view
+    invalidation. The drawback is that {@link android.animation.ValueAnimator}
+    is not available prior to API level 11, so this technique cannot be used
+on devices running Android versions lower than 3.0.</p>
+
+<p class="note"><strong>Note:</strong> {@link android.animation.ValueAnimator} isn't available
+        prior to API level 11, but you can still use it in applications that
+target lower API levels. You just need to make sure to check the current API level
+at runtime, and omit the calls to the view animation system if the current level is less than 11.</p>
+
+<pre>
+       mScroller = new Scroller(getContext(), null, true);
+       mScrollAnimator = ValueAnimator.ofFloat(0,1);
+       mScrollAnimator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+           &#64;Override
+           public void onAnimationUpdate(ValueAnimator valueAnimator) {
+               if (!mScroller.isFinished()) {
+                   mScroller.computeScrollOffset();
+                   setPieRotation(mScroller.getCurrY());
+               } else {
+                   mScrollAnimator.cancel();
+                   onScrollFinished();
+               }
+           }
+       });
+</pre>
+
+<h2 id="makesmooth">Make Your Transitions Smooth</h2>
+
+<p>Users expect a modern UI to transition smoothly between states. UI elements fade in and out
+    instead of appearing and
+    disappearing. Motions begin and end smoothly instead of starting and stopping abruptly. The
+    Android <a
+            href="{@docRoot}guide/topics/graphics/prop-animation.html">property animation
+        framework</a>, introduced in
+    Android 3.0, makes smooth transitions easy.</p>
+
+<p>To use the animation system, whenever a property changes that will affect your view's appearance,
+    do not change the
+    property directly. Instead, use {@link android.animation.ValueAnimator} to make the change. In
+    the following
+    example, modifying the
+    currently selected pie slice in PieChart causes the entire chart to rotate so that the selection
+    pointer is centered
+    in the selected slice. {@link android.animation.ValueAnimator} changes the rotation over a
+    period of several
+    hundred milliseconds,
+    rather than immediately setting the new rotation value.</p>
+
+<pre>
+mAutoCenterAnimator = ObjectAnimator.ofInt(PieChart.this, "PieRotation", 0);
+mAutoCenterAnimator.setIntValues(targetAngle);
+mAutoCenterAnimator.setDuration(AUTOCENTER_ANIM_DURATION);
+mAutoCenterAnimator.start();
+</pre>
+
+<p>If the value you want to change is one of the base {@link android.view.View} properties, doing
+    the animation
+    is even easier,
+    because Views have a built-in {@link android.view.ViewPropertyAnimator} that is optimized for
+    simultaneous animation
+    of multiple properties. For example:</p>
+
+<pre>
+animate().rotation(targetAngle).setDuration(ANIM_DURATION).start();
+</pre>
diff --git a/docs/html/training/custom-views/optimizing-view.jd b/docs/html/training/custom-views/optimizing-view.jd
new file mode 100644
index 0000000..1f489dd
--- /dev/null
+++ b/docs/html/training/custom-views/optimizing-view.jd
@@ -0,0 +1,176 @@
+page.title=Optimizing the View
+parent.title=Creating Custom Views
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Making the View Interactive
+previous.link=making-interactive.html
+
+@jd:body
+
+<div id="tb-wrapper">
+    <div id="tb">
+
+        <h2>This lesson teaches you to</h2>
+        <ol>
+            <li><a href="#less">Do Less, Less Frequently</a></li>
+            <li><a href="#accelerate">Use Hardware Acceleration</a></li>
+        </ol>
+
+        <h2>You should also read</h2>
+        <ul>
+            <li><a href=”{@docRoot}guide/topics/graphics/hardware-accel.html”>
+                Hardware Acceleration
+            </a>
+        </li>
+    </ul>
+<h2>Try it out</h2>
+<div class="download-box">
+<a href="{@docRoot}shareables/training/CustomView.zip"
+class="button">Download the sample</a>
+<p class="filename">CustomView.zip</p>
+</div>
+</div>
+        </div>
+
+
+<p>Now that you have a well-designed view that responds to gestures and transitions between states,
+you need to ensure
+that the view runs fast. To avoid a UI that feels sluggish or stutters during playback, you must
+ensure that your
+animations consistently run at 60 frames per second.</p>
+
+<h2 id="less">Do Less, Less Frequently</h2>
+
+<p>To speed up your view, eliminate unnecessary code from routines that are called frequently. Start
+by working on
+{@link android.view.View#onDraw onDraw()}, which will give you the biggest payback. In particular
+you should eliminate
+allocations in {@link android.view.View#onDraw onDraw()}, because allocations may lead to a garbage
+collection that
+would cause a stutter. Allocate objects during initialization, or between animations. Never make an
+allocation while an
+animation is running.</p>
+
+<p>In addition to making {@link android.view.View#onDraw onDraw()} leaner, you should also make sure
+it's called as
+infrequently as possible. Most calls to {@link android.view.View#onDraw onDraw()} are the result of
+a call to {@link
+android.view.View#invalidate() invalidate()}, so eliminate unnecessary calls to {@link
+android.view.View#invalidate()
+invalidate()}. When possible, call the four-parameter variant of {@link
+android.view.View#invalidate() invalidate()}
+rather than the version that takes no parameters. The no-parameter variant invalidates the entire
+view, while the
+four-parameter variant invalidates only a specified portion of the view. This approach allows draw calls to
+be more efficient and
+can eliminate unnecessary invalidation of views that fall outside the invalid rectangle.</p>
+
+<p>Another very expensive operation is traversing layouts. Any time a view calls {@link
+android.view.View#requestLayout()
+requestLayout()}, the Android UI system needs to traverse the entire view hierarchy to find out how
+big each view needs
+to be. If it finds conflicting measurements, it may need to traverse the hierarchy multiple times.
+UI designers
+sometimes create deep hierarchies of nested {@link android.view.ViewGroup ViewGroup} objects in
+order to get the UI to
+behave properly. These deep view hierarchies cause performance problems. Make your view hierarchies
+as shallow as
+possible.</p>
+
+<p>If you have a complex UI, you should consider writing a custom {@link android.view.ViewGroup
+ViewGroup} to perform
+its layout. Unlike the built-in views, your custom view can make application-specific assumptions
+about the size and
+shape of its children, and thus avoid traversing its children to calculate measurements. The
+PieChart example shows how
+to extend {@link android.view.ViewGroup ViewGroup} as part of a custom view. PieChart has child
+views, but it never
+measures them. Instead, it sets their sizes directly according to its own custom layout
+algorithm.</p>
+
+<h2 id="accelerate">Use Hardware Acceleration</h2>
+
+<p>As of Android 3.0, the Android 2D graphics system can be accelerated by the GPU (Graphics
+Processing Unit) hardware
+found in most newer Android devices. GPU hardware acceleration can result in a tremendous
+performance increase for many
+applications, but it isn't the right choice for every application. The Android framework
+gives you the ability to finely control which parts of your application are or are not
+hardware accelerated.</p>
+
+<p>See <a href="{@docRoot}guide/topics/graphics/hardware-accel.html">Hardware Acceleration</a>
+        in the Android Developers Guide for directions on how to enable acceleration at the
+        application, activity, or window level. Notice  that in addition to the directions in
+        the developer guide, you must also set your application's target API to 11 or higher by
+        specifying {@code &lt;uses-sdk
+        android:targetSdkVersion="11"/&gt;} in your {@code AndroidManifest.xml} file.</p>
+
+<p>Once you've enabled hardware acceleration, you may or may not see a performance increase.
+Mobile GPUs are very good at certain tasks, such as scaling, rotating, and translating
+bitmapped images. They are not particularly good at other tasks, such as drawing lines or curves. To
+get the most out of GPU acceleration, you should maximize the number of operations that the GPU is
+good at, and minimize the number of operations that the GPU isn't good at.</p>
+
+<p>In the PieChart example, for instance, drawing the pie is relatively expensive. Redrawing the pie
+each time it's
+rotated causes the UI to feel sluggish. The solution is to place the pie chart into a child
+{@link android.view.View} and set that
+{@link android.view.View}'s
+<a href="{@docRoot}reference/android/view/View.html#setLayerType(int, android.graphics.Paint)">
+    layer type</a> to {@link android.view.View#LAYER_TYPE_HARDWARE}, so that the GPU can cache it as
+a static
+image. The sample
+defines the child view as an inner class of {@code PieChart}, which minimizes the amount of code
+changes that are needed
+to implement this solution.</p>
+
+<pre>
+   private class PieView extends View {
+
+       public PieView(Context context) {
+           super(context);
+           if (!isInEditMode()) {
+               setLayerType(View.LAYER_TYPE_HARDWARE, null);
+           }
+       }
+       
+       &#64;Override
+       protected void onDraw(Canvas canvas) {
+           super.onDraw(canvas);
+
+           for (Item it : mData) {
+               mPiePaint.setShader(it.mShader);
+               canvas.drawArc(mBounds,
+                       360 - it.mEndAngle,
+                       it.mEndAngle - it.mStartAngle,
+                       true, mPiePaint);
+           }
+       }
+
+       &#64;Override
+       protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+           mBounds = new RectF(0, 0, w, h);
+       }
+
+       RectF mBounds;
+   }
+</pre>
+
+<p>After this code change, {@code PieChart.PieView.onDraw()} is called only when the view is first
+shown. During the rest
+of the application's lifetime, the pie chart is cached as an image, and redrawn at different
+rotation angles by the GPU.
+GPU hardware is particularly good at this sort of thing, and the performance difference is
+immediately noticeable.</p>
+
+<p>There is a tradeoff, though. Caching images as hardware layers consumes video memory, which is a
+limited resource.
+For this reason, the final version of {@code PieChart.PieView} only sets its layer type to
+{@link android.view.View#LAYER_TYPE_HARDWARE}
+while the user is actively scrolling. At all other times, it sets its layer type to
+{@link android.view.View#LAYER_TYPE_NONE}, which
+allows the GPU to stop caching the image.</p>
+
+<p>Finally, don't forget to profile your code. Techniques that improve performance on one view
+might negatively affect performance on another.</p>
diff --git a/docs/html/training/design-navigation/ancestral-temporal.jd b/docs/html/training/design-navigation/ancestral-temporal.jd
index ab6a64d..33a75b2 100644
--- a/docs/html/training/design-navigation/ancestral-temporal.jd
+++ b/docs/html/training/design-navigation/ancestral-temporal.jd
@@ -22,7 +22,7 @@
 <h2>You should also read</h2>
 <ul>
   <li><a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a></li>
-  <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
+  <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
 </ul>
 
 </div>
@@ -58,7 +58,7 @@
 
 
 <p>Applications generally don't have to worry about managing the <em>Back</em> button themselves;
-the system handles <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">tasks and
+the system handles <a href="{@docRoot}guide/components/tasks-and-back-stack.html">tasks and
 the <em>back stack</em></a>, or the list of previous screens, automatically. The <em>Back</em>
 button by default simply traverses this list of screens, removing the current screen from the list
 upon being pressed.</p>
diff --git a/docs/html/training/design-navigation/wireframing.jd b/docs/html/training/design-navigation/wireframing.jd
index 6deceb1..42f892d 100644
--- a/docs/html/training/design-navigation/wireframing.jd
+++ b/docs/html/training/design-navigation/wireframing.jd
@@ -78,7 +78,7 @@
   <li>What's the learning curve? Professional vector illustration tools may have a steep learning curve, while tools designed for wireframing may offer a smaller set of features that are more relevant to the task.</li>
 </ul>
 
-<p>Lastly, the XML Layout Editor that comes with the <a href="{@docRoot}guide/developing/tools/adt.html">Android Development Tools (ADT)</a> plugin for Eclipse can often be used for prototyping. However, you should be careful to focus more on the high-level layout and less on visual design details at this point.</p>
+<p>Lastly, the XML Layout Editor that comes with the <a href="{@docRoot}tools/help/adt.html">Android Development Tools (ADT)</a> plugin for Eclipse can often be used for prototyping. However, you should be careful to focus more on the high-level layout and less on visual design details at this point.</p>
 
 
 <h2 id="wireframe-digital">Create Digital Wireframes</h2>
@@ -120,6 +120,6 @@
 <ul>
   <li><a href="{@docRoot}guide/topics/ui/index.html">Developer's Guide: User Interface</a>: learn how to implement your user interface designs using the Android SDK.</li>
   <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a>: implement tabs, up navigation, on-screen actions, etc.
-  <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>: implement re-usable, multi-pane layouts
-  <li><a href="{@docRoot}sdk/compatibility-library.html">Support Library</a>: implement horizontal paging (swipe views) using <code>ViewPager</code></li>
+  <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a>: implement re-usable, multi-pane layouts
+  <li><a href="{@docRoot}tools/extras/support-library.html">Support Library</a>: implement horizontal paging (swipe views) using <code>ViewPager</code></li>
 </ul>
diff --git a/docs/html/training/displaying-bitmaps/index.jd b/docs/html/training/displaying-bitmaps/index.jd
index 6755c24..78371ad 100644
--- a/docs/html/training/displaying-bitmaps/index.jd
+++ b/docs/html/training/displaying-bitmaps/index.jd
@@ -13,7 +13,7 @@
 <h2>Dependencies and prerequisites</h2>
 <ul>
   <li>Android 2.1 (API Level 7) or higher</li>
-  <li><a href="{@docRoot}sdk/compatibility-library.html">Support Library</a></li>
+  <li><a href="{@docRoot}tools/extras/support-library.html">Support Library</a></li>
 </ul>
 
 <h2>Try it out</h2>
diff --git a/docs/html/training/displaying-bitmaps/process-bitmap.jd b/docs/html/training/displaying-bitmaps/process-bitmap.jd
index c1450b4..d1e346c 100644
--- a/docs/html/training/displaying-bitmaps/process-bitmap.jd
+++ b/docs/html/training/displaying-bitmaps/process-bitmap.jd
@@ -21,7 +21,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/practices/design/responsiveness.html">Designing for Responsiveness</a></li>
+  <li><a href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a></li>
   <li><a
   href="http://android-developers.blogspot.com/2010/07/multithreading-for-performance.html">Multithreading
   for Performance</a></li>
@@ -45,7 +45,7 @@
 load is unpredictable and depends on a variety of factors (speed of reading from disk or network,
 size of image, power of CPU, etc.). If one of these tasks blocks the UI thread, the system flags
 your application as non-responsive and the user has the option of closing it (see <a
-href="{@docRoot}guide/practices/design/responsiveness.html">Designing for Responsiveness</a> for
+href="{@docRoot}guide/practices/responsiveness.html">Designing for Responsiveness</a> for
 more information).</p>
 
 <p>This lesson walks you through processing bitmaps in a background thread using
diff --git a/docs/html/training/efficient-downloads/efficient-network-access.jd b/docs/html/training/efficient-downloads/efficient-network-access.jd
index 0efad7d..1d3a8a5 100644
--- a/docs/html/training/efficient-downloads/efficient-network-access.jd
+++ b/docs/html/training/efficient-downloads/efficient-network-access.jd
@@ -142,7 +142,7 @@
 
 <h2 id="DDMSNetworkTraffic">Use the DDMS Network Traffic Tool to Identify Areas of Concern</h2>
 
-<p>The Android <a href="{@docRoot}guide/developing/debugging/ddms.html">DDMS (Dalvik Debug Monitor Server)</a> includes a Detailed Network Usage tab that makes it possible to track when your application is making network requests. Using this tool, you can monitor how and when your app transfers data and optimize the underlying code appropriately.</p>
+<p>The Android <a href="{@docRoot}tools/debugging/ddms.html">DDMS (Dalvik Debug Monitor Server)</a> includes a Detailed Network Usage tab that makes it possible to track when your application is making network requests. Using this tool, you can monitor how and when your app transfers data and optimize the underlying code appropriately.</p>
 
 <p>Figure 3 shows a pattern of transferring small amounts of data roughly 15 seconds apart, suggesting that efficiency could be dramatically improved by prefetching each request or bundling the uploads.</p>
 
diff --git a/docs/html/training/graphics/opengl/draw.jd b/docs/html/training/graphics/opengl/draw.jd
new file mode 100644
index 0000000..156ff70
--- /dev/null
+++ b/docs/html/training/graphics/opengl/draw.jd
@@ -0,0 +1,195 @@
+page.title=Drawing Shapes
+parent.title=Displaying Graphics with OpenGL ES
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Defining Shapes
+previous.link=environment.html
+next.title=Applying Projection and Camera Views
+next.link=projection.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#initialize">Initialize Shapes</a></li>
+  <li><a href="#draw">Draw a Shape</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>After you define shapes to be drawn with OpenGL, you probably want to draw them. Drawing shapes
+with the OpenGL ES 2.0 takes a bit more code than you might imagine, because the API provides a
+great deal of control over the graphics rendering pipeline.</p>
+
+<p>This lesson explains how to draw the shapes you defined in the previous lesson using the OpenGL
+ES 2.0 API.</p>
+
+
+<h2 id="initialize">Initialize Shapes</h2>
+
+<p>Before you do any drawing, you must initialize and load the shapes you plan to draw. Unless the
+structure (the original coordinates) of the shapes you use in your program change during the course
+of execution, you should initialize them in the {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceCreated onSurfaceCreated()} method of your renderer
+for memory and processing efficiency.</p>
+
+<pre>
+public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+    ...
+
+    // initialize a triangle
+    mTriangle = new Triangle();
+    // initialize a square
+    mSquare = new Square();
+}
+</pre>
+
+
+<h2 id="draw">Draw a Shape</h2>
+
+<p>Drawing a defined shape using OpenGL ES 2.0 requires a significant amount of code, because you
+must provide a lot of details to the graphics rendering pipeline. Specifically, you must define the
+following:</p>
+
+<ul>
+  <li><em>Vertex Shader</em> - OpenGL ES graphics code for rendering the vertices of a shape.</li>
+  <li><em>Fragment Shader</em> - OpenGL ES code for rendering the face of a shape with colors or
+textures.</li>
+  <li><em>Program</em> - An OpenGL ES object that contains the shaders you want to use for drawing
+one or more shapes.</li>
+</ul>
+
+<p>You need at least one vertex shader to draw a shape and one fragment shader to color that shape.
+These shaders must be complied and then added to an OpenGL ES program, which is then used to draw
+the shape. Here is an example of how to define basic shaders you can use to draw a shape:</p>
+
+<pre>
+private final String vertexShaderCode =
+    "attribute vec4 vPosition;" +
+    "void main() {" +
+    "  gl_Position = vPosition;" +
+    "}";
+
+private final String fragmentShaderCode =
+    "precision mediump float;" +
+    "uniform vec4 vColor;" +
+    "void main() {" +
+    "  gl_FragColor = vColor;" +
+    "}";
+</pre>
+
+<p>Shaders contain OpenGL Shading Language (GLSL) code that must be compiled prior to using it in
+the OpenGL ES environment. To compile this code, create a utility method in your renderer class:</p>
+
+<pre>
+public static int loadShader(int type, String shaderCode){
+
+    // create a vertex shader type (GLES20.GL_VERTEX_SHADER)
+    // or a fragment shader type (GLES20.GL_FRAGMENT_SHADER)
+    int shader = GLES20.glCreateShader(type);
+
+    // add the source code to the shader and compile it
+    GLES20.glShaderSource(shader, shaderCode);
+    GLES20.glCompileShader(shader);
+
+    return shader;
+}
+</pre>
+
+<p>In order to draw your shape, you must compile the shader code, add them to a OpenGL ES program
+object and then link the program. Do this in your drawn object’s constructor, so it is only done
+once.</p>
+
+<p class="note"><strong>Note:</strong> Compiling OpenGL ES shaders and linking programs is expensive
+in terms of CPU cycles and processing time, so you should avoid doing this more than once. If you do
+not know the content of your shaders at runtime, you should build your code such that they only
+get created once and then cached for later use.</p>
+
+<pre>
+public Triangle() {
+    ...
+
+    int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, vertexShaderCode);
+    int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, fragmentShaderCode);
+
+    mProgram = GLES20.glCreateProgram();             // create empty OpenGL ES Program
+    GLES20.glAttachShader(mProgram, vertexShader);   // add the vertex shader to program
+    GLES20.glAttachShader(mProgram, fragmentShader); // add the fragment shader to program
+    GLES20.glLinkProgram(mProgram);                  // creates OpenGL ES program executables
+}
+</pre>
+
+<p>At this point, you are ready to add the actual calls that draw your shape. Drawing shapes with
+OpenGL ES requires that you specify several parameters to tell the rendering pipeline what you want
+to draw and how to draw it. Since drawing options can vary by shape, it's a good idea to have your
+shape classes contain their own drawing logic.</p>
+
+<p>Create a {@code draw()} method for drawing the shape. This code sets the position and
+color values to the shape’s vertex shader and fragment shader, and then executes the drawing
+function.</p>
+
+<pre>
+public void draw() {
+    // Add program to OpenGL ES environment
+    GLES20.glUseProgram(mProgram);
+
+    // get handle to vertex shader's vPosition member
+    mPositionHandle = GLES20.glGetAttribLocation(mProgram, "vPosition");
+
+    // Enable a handle to the triangle vertices
+    GLES20.glEnableVertexAttribArray(mPositionHandle);
+
+    // Prepare the triangle coordinate data
+    GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX,
+                                 GLES20.GL_FLOAT, false,
+                                 vertexStride, vertexBuffer);
+
+    // get handle to fragment shader's vColor member
+    mColorHandle = GLES20.glGetUniformLocation(mProgram, "vColor");
+
+    // Set color for drawing the triangle
+    GLES20.glUniform4fv(mColorHandle, 1, color, 0);
+
+    // Draw the triangle
+    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
+
+    // Disable vertex array
+    GLES20.glDisableVertexAttribArray(mPositionHandle);
+}
+</pre>
+
+<p>Once you have all this code in place, drawing this object just requires a call to the
+{@code draw()} method from within your renderer’s {@link
+android.opengl.GLSurfaceView.Renderer#onDrawFrame onDrawFrame()} method. When you run the
+application, it should look something like this:</p>
+
+<img src="{@docRoot}images/opengl/ogl-triangle.png">
+<p class="img-caption">
+<strong>Figure 1.</strong> Triangle drawn without a projection or camera view.</p>
+
+<p>There are a few problems with this code example. First of all, it is not going to impress your
+friends. Secondly, the triangle is a bit squashed and changes shape when you change the screen
+orientation of the device. The reason the shape is skewed is due to the fact that the object’s
+vertices have not been corrected for the proportions of the screen area where the {@link
+android.opengl.GLSurfaceView} is displayed. You can fix that problem using a projection and camera
+view in the next lesson.</p>
+
+<p>Lastly, the triangle is stationary, which is a bit boring. In the <a href="motion.html">Adding
+Motion</a> lesson, you make this shape rotate and make more interesting use of the OpenGL ES
+graphics pipeline.</p>
\ No newline at end of file
diff --git a/docs/html/training/graphics/opengl/environment.jd b/docs/html/training/graphics/opengl/environment.jd
new file mode 100644
index 0000000..e1e2c8a
--- /dev/null
+++ b/docs/html/training/graphics/opengl/environment.jd
@@ -0,0 +1,223 @@
+page.title=Building an OpenGL ES Environment
+parent.title=Displaying Graphics with OpenGL ES
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Displaying Graphics with OpenGL ES
+previous.link=index.html
+next.title=Defining Shapes
+next.link=shapes.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#manifest">Declare OpenGL ES Use in the Manifest</a></li>
+  <li><a href="#activity">Create an Activity for OpenGL ES Graphics</a></li>
+  <li><a href="#glsurfaceview">Build a GLSurfaceView Object</a></li>
+  <li><a href="#renderer">Build a Renderer Class</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<h2>Try it out</h2>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+
+<p>In order to draw graphics with OpenGL ES in your Android application, you must create a
+view container for them. One of the more straight-forward ways to do this is to implement both a
+{@link android.opengl.GLSurfaceView} and a {@link android.opengl.GLSurfaceView.Renderer}. A {@link
+android.opengl.GLSurfaceView} is a view container for graphics drawn with OpenGL and {@link
+android.opengl.GLSurfaceView.Renderer} controls what is drawn within that view. For more information
+about these classes, see the <a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES</a>
+developer guide.</p>
+
+<p>{@link android.opengl.GLSurfaceView} is just one way to incorporate OpenGL ES graphics into your
+application. For a full-screen or near-full screen graphics view, it is a reasonable choice.
+Developers who want to incorporate OpenGL ES graphics in a small portion of their layouts should
+take a look at {@link android.view.TextureView}. For real, do-it-yourself developers, it is also
+possible to build up an OpenGL ES view using {@link android.view.SurfaceView}, but this requires
+writing quite a bit of additional code.</p>
+
+<p>This lesson explains how to complete a minimal implementation of {@link
+android.opengl.GLSurfaceView} and {@link android.opengl.GLSurfaceView.Renderer} in a simple
+application activity.</p>
+
+
+<h2 id="manifest">Declare OpenGL ES Use in the Manifest</h2>
+
+<p>In order for your application to use the OpenGL ES 2.0 API, you must add the following
+declaration to your manifest:</p>
+
+<pre>
+&lt;uses-feature android:glEsVersion="0x00020000" android:required="true" /&gt;
+</pre>
+
+<p>If your application uses texture compression, you must also declare which compression formats
+you support so that devices that do not support theses formats do not try to run your
+application:</p>
+
+<pre>
+&lt;supports-gl-texture android:name="GL_OES_compressed_ETC1_RGB8_texture" /&gt;
+&lt;supports-gl-texture android:name="GL_OES_compressed_paletted_texture" /&gt;
+</pre>
+
+<p>For more information about texture compression formats, see the
+<a href="{@docRoot}guide/topics/graphics/opengl.html#textures">OpenGL</a> developer guide.</p>
+
+
+<h2 id="activity">Create an Activity for OpenGL ES Graphics</h2>
+
+<p>Android applications that use OpenGL ES have activities just like any other application that has
+a user interface. The main difference from other applications is what you put in the layout for your
+activity. While in many applications you might use {@link android.widget.TextView}, {@link
+android.widget.Button} and {@link android.widget.ListView}, in an app that uses OpenGL ES, you can
+also add a {@link android.opengl.GLSurfaceView}.</p>
+
+<p>The following code example shows a minimal implementation of an activity that uses a
+{@link android.opengl.GLSurfaceView} as its primary view:</p>
+
+<pre>
+public class OpenGLES20 extends Activity {
+
+    private GLSurfaceView mGLView;
+
+    &#64;Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        // Create a GLSurfaceView instance and set it
+        // as the ContentView for this Activity.
+        mGLView = new MyGLSurfaceView(this);
+        setContentView(mGLView);
+    }
+}
+</pre>
+
+<p class="note"><strong>Note:</strong> OpenGL ES 2.0 requires Android 2.2 (API Level 8) or higher,
+so make sure your Android project targets that API or higher.</p>
+
+
+<h2 id="glsurfaceview">Build a GLSurfaceView Object</h2>
+
+<p>A {@link android.opengl.GLSurfaceView} is a specialized view where you can draw OpenGL ES
+graphics.
+It does not do much by itself. The actual drawing of objects is controlled in the {@link
+android.opengl.GLSurfaceView.Renderer} that you set on this view. In fact, the code for this object
+is so thin, you may be tempted to skip extending it and just create an unmodified {@link
+android.opengl.GLSurfaceView} instance, but don’t do that. You need to extend this class in
+order to capture touch events, which is covered in the <a href="#touch.html">Responding to Touch
+Events</a> lesson.</p>
+
+<p>The essential code for a {@link android.opengl.GLSurfaceView} is minimal, so for a quick
+implementation, it is common to
+just create an inner class in the activity that uses it:</p>
+
+<pre>
+class MyGLSurfaceView extends GLSurfaceView {
+
+    public MyGLSurfaceView(Context context){
+        super(context);
+
+        // Set the Renderer for drawing on the GLSurfaceView
+        setRenderer(new MyRenderer());
+    }
+}
+</pre>
+
+<p>When using OpenGL ES 2.0, you must add another call to your {@link android.opengl.GLSurfaceView}
+constructor, specifying that you want to use the 2.0 API:</p>
+
+<pre>
+// Create an OpenGL ES 2.0 context
+setEGLContextClientVersion(2);
+</pre>
+
+<p class="note"><strong>Note:</strong> If you are using the OpenGL ES 2.0 API, make sure you declare
+this in your application manifest. For more information, see <a href="#manifest">Declare OpenGL ES
+Use
+in the Manifest</a>.</p>
+
+<p>One other optional addition to your {@link android.opengl.GLSurfaceView} implementation is to set
+the render mode to only draw the view when there is a change to your drawing data using the
+{@link android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY GLSurfaceView.RENDERMODE_WHEN_DIRTY}
+setting:</p>
+
+<pre>
+// Render the view only when there is a change in the drawing data
+setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);
+</pre>
+
+<p>This setting prevents the {@link android.opengl.GLSurfaceView} frame from being redrawn until you
+call {@link android.opengl.GLSurfaceView#requestRender requestRender()}, which is more
+efficient for this sample app.</p>
+
+
+<h2 id="renderer">Build a Renderer Class</h2>
+
+<p>The implementation of the {@link android.opengl.GLSurfaceView.Renderer} class, or renderer,
+within an application that uses OpenGL ES is where things start to get interesting. This class
+controls
+what gets drawn on the {@link android.opengl.GLSurfaceView} with which it is associated. There are
+three methods in a renderer that are called by the Android system in order to figure out what and
+how to draw on a {@link android.opengl.GLSurfaceView}:</p>
+
+<ul>
+  <li>{@link android.opengl.GLSurfaceView.Renderer#onSurfaceCreated onSurfaceCreated()} -
+Called once to set up the view's OpenGL ES environment.</li>
+  <li>{@link android.opengl.GLSurfaceView.Renderer#onDrawFrame onDrawFrame()} - Called for each
+redraw of the view.</li>
+  <li>{@link android.opengl.GLSurfaceView.Renderer#onSurfaceChanged onSurfaceChanged()} - Called if
+the geometry of the view changes, for example when the device's screen orientation changes.
+  </li>
+</ul>
+
+<p>Here is a very basic implementation of an OpenGL ES renderer, that does nothing more than draw a
+gray background in the {@link android.opengl.GLSurfaceView}:</p>
+
+<pre>
+public class MyGL20Renderer implements GLSurfaceView.Renderer {
+
+    public void onSurfaceCreated(GL10 unused, EGLConfig config) {
+        // Set the background frame color
+        GLES20.glClearColor(0.5f, 0.5f, 0.5f, 1.0f);
+    }
+
+    public void onDrawFrame(GL10 unused) {
+        // Redraw background color
+        GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
+    }
+
+    public void onSurfaceChanged(GL10 unused, int width, int height) {
+        GLES20.glViewport(0, 0, width, height);
+    }
+}
+</pre>
+
+<p>That’s all there is to it! The code examples above create a simple Android application that
+displays a gray screen using OpenGL. While this code does not do anything very interesting, by
+creating these classes, you have laid the foundation you need to start drawing graphic elements with
+OpenGL.</p>
+
+<p class="note"><strong>Note:</strong> You may wonder why these methods have a {@link
+javax.microedition.khronos.opengles.GL10} parameter, when you are using the OpengGL ES 2.0 APIs.
+These method signatures are simply reused for the 2.0 APIs to keep the Android framework code
+simpler.</p>
+
+<p>If you are familiar with the OpenGL ES APIs, you should now be able to set up a OpenGL ES
+environment in your app and start drawing graphics. However, if you need a bit more help getting
+started with OpenGL, head on to the next lessons for a few more hints.</p>
diff --git a/docs/html/training/graphics/opengl/index.jd b/docs/html/training/graphics/opengl/index.jd
new file mode 100644
index 0000000..23a734a
--- /dev/null
+++ b/docs/html/training/graphics/opengl/index.jd
@@ -0,0 +1,75 @@
+page.title=Displaying Graphics with OpenGL ES
+trainingnavtop=true
+next.title=Building an OpenGL ES Environment
+next.link=environment.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>Dependencies and prerequisites</h2>
+<ul>
+  <li>Android 2.2 (API Level 8) or higher</li>
+  <li>Experience building an <a href="{@docRoot}training/basics/firstapp/index.html">Android
+app</a></li>
+</ul>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<h2>Try it out</h2>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>The Android framework provides plenty of standard tools for creating attractive, functional
+graphical user interfaces. However, if you want more control of what your application draws on
+screen, or are venturing into three dimensional graphics, you need to use a different tool. The
+OpenGL ES APIs provided by the Android framework offers a set of tools for displaying high-end,
+animated graphics that are limited only by your imagination and can also benefit from the
+acceleration of graphics processing units (GPUs) provided on many Android devices.</p>
+
+<p>This class walks you through the basics of developing applications that use OpenGL, including
+setup, drawing objects, moving drawn elements and responding to touch input.</p>
+
+<p>The example code in this class uses the OpenGL ES 2.0 APIs, which is the recommended API version
+to use with current Android devices. For more information about versions of OpenGL ES, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html#choosing-version">OpenGL</a>
+developer guide.</p>
+
+<p class="note"><strong>Note:</strong> Be careful not to mix OpenGL ES 1.x API calls with OpenGL
+ES 2.0 methods! The two APIs are not interchangeable and trying to use them together only results in
+frustration and sadness.</p>
+
+
+<h2>Lessons</h2>
+
+<dl>
+  <dt><b><a href="environment.html">Building an OpenGL ES Environment</a></b></dt>
+    <dd>Learn how to set up an Android application to be able to draw OpenGL graphics.</dd>
+
+  <dt><b><a href="shapes.html">Defining Shapes</a></b></dt>
+    <dd>Learn how to define shapes and why you need to know about faces and winding.</dd>
+
+  <dt><b><a href="draw.html">Drawing Shapes</a></b></dt>
+    <dd>Learn how to draw OpenGL shapes in your application.</dd>
+
+  <dt><b><a href="projection.html">Applying Projection and Camera Views</a></b></dt>
+    <dd>Learn how to use projection and camera views to get a new perspective on your drawn
+objects.</dd>
+
+  <dt><b><a href="motion.html">Adding Motion</a></b></dt>
+    <dd>Learn how to do basic movement and animation of drawn objects with OpenGL.</dd>
+
+  <dt><b><a href="touch.html">Responding to Touch Events</a></b></dt>
+    <dd>Learn how to do basic interaction with OpenGL graphics.</dd>
+</dl>
diff --git a/docs/html/training/graphics/opengl/motion.jd b/docs/html/training/graphics/opengl/motion.jd
new file mode 100644
index 0000000..6888235
--- /dev/null
+++ b/docs/html/training/graphics/opengl/motion.jd
@@ -0,0 +1,92 @@
+page.title=Adding Motion
+parent.title=Displaying Graphics with OpenGL ES
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Applying Projection and Camera Views
+previous.link=projection.html
+next.title=Responding to Touch Events
+next.link=touch.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#rotate-gl1">Rotate a Shape</a></li>
+  <li><a href="#cont-render">Enable Continuous Rendering</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>Drawing objects on screen is a pretty basic feature of OpenGL, but you can do this with other
+Android graphics framwork classes, including {@link android.graphics.Canvas} and
+{@link android.graphics.drawable.Drawable} objects. OpenGL ES provides additional capabilities for
+moving and transforming drawn objects in three dimensions or in other unique ways to create
+compelling user experiences.</p>
+
+<p>In this lesson, you take another step forward into using OpenGL ES by learning how to add motion
+to a shape with rotation.</p>
+
+
+<h2 id="rotate">Rotate a Shape</h2>
+
+<p>Rotating a drawing object with OpenGL ES 2.0 is relatively simple. You create another
+transformation matrix (a rotation matrix) and then combine it with your projection and
+camera view tranformation matrices:</p>
+
+<pre>
+private float[] mRotationMatrix = new float[16];
+public void onDrawFrame(GL10 gl) {
+    ...
+    // Create a rotation transformation for the triangle
+    long time = SystemClock.uptimeMillis() % 4000L;
+    float angle = 0.090f * ((int) time);
+    Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);
+
+    // Combine the rotation matrix with the projection and camera view
+    Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);
+
+    // Draw triangle
+    mTriangle.draw(mMVPMatrix);
+}
+</pre>
+
+<p>If your triangle does not rotate after making these changes, make sure you have commented out the
+{@link android.opengl.GLSurfaceView#RENDERMODE_WHEN_DIRTY GLSurfaceView.RENDERMODE_WHEN_DIRTY} 
+setting, as described in the next section.</p>
+
+
+<h2 id="cont-render">Enable Continuous Rendering</h2>
+
+<p>If you have diligently followed along with the example code in this class to this point, make
+sure you comment out the line that sets the render mode only draw when dirty, otherwise OpenGL
+rotates the shape only one increment and then waits for a call to {@link
+android.opengl.GLSurfaceView#requestRender requestRender()} from the {@link
+android.opengl.GLSurfaceView} container:</p>
+
+<pre>
+public MyGLSurfaceView(Context context) {
+    ...
+    // Render the view only when there is a change in the drawing data
+    //setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // comment out for auto-rotation
+}
+</pre>
+
+<p>Unless you have objects changing without any user interaction, it’s usually a good idea have this
+flag turned on. Be ready to uncomment this code, because the next lesson makes this call applicable
+once again.</p>
diff --git a/docs/html/training/graphics/opengl/projection.jd b/docs/html/training/graphics/opengl/projection.jd
new file mode 100644
index 0000000..2a91093
--- /dev/null
+++ b/docs/html/training/graphics/opengl/projection.jd
@@ -0,0 +1,152 @@
+page.title=Applying Projection and Camera Views
+parent.title=Displaying Graphics with OpenGL ES
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Drawing Shapes
+previous.link=draw.html
+next.title=Applying Projection and Camera Views
+next.link=projection.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#projection">Define a Projection</a></li>
+  <li><a href="#camera-view">Define a Camera View</a></li>
+  <li><a href="#transform">Apply Projection and Camera Transformations</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>In the OpenGL ES environment, projection and camera views allow you to display drawn objects in a
+way that more closely resembles how you see physical objects with your eyes. This simulation of
+physical viewing is done with mathematical transformations of drawn object coordinates:</p>
+
+<ul>
+  <li><em>Projection</em> - This transformation adjusts the coordinates of drawn objects based on
+the width and height of the {@link android.opengl.GLSurfaceView} where they are displayed. Without
+this calculation, objects drawn by OpenGL ES are skewed by the unequal proportions of the view
+window. A projection transformation typically only has to be calculated when the proportions of the
+OpenGL view are established or changed in the {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceChanged
+onSurfaceChanged()} method of your renderer. For more information about OpenGL ES projections and
+coordinate mapping, see <a
+href="{@docRoot}guide/topics/graphics/opengl.html#coordinate-mapping">Mapping Coordinates for Drawn
+Objects</a>.</li>
+  <li><em>Camera View</em> - This transformation adjusts the coordinates of drawn objects based on a
+virtual camera position. It’s important to note that OpenGL ES does not define an actual camera
+object, but instead provides utility methods that simulate a camera by transforming the display of
+drawn objects. A camera view transformation might be calculated only once when you establish your
+{@link android.opengl.GLSurfaceView}, or might change dynamically based on user actions or your
+application’s function.</li>
+</ul>
+
+<p>This lesson describes how to create a projection and camera view and apply it to shapes drawn in
+your {@link android.opengl.GLSurfaceView}.</p>
+
+
+<h2 id="projection">Define a Projection</h2>
+
+<p>The data for a projection transformation is calculated in the {@link
+android.opengl.GLSurfaceView.Renderer#onSurfaceChanged onSurfaceChanged()}
+method of your {@link android.opengl.GLSurfaceView.Renderer} class. The following example code
+takes the height and width of the {@link android.opengl.GLSurfaceView} and uses it to populate a
+projection transformation {@link android.opengl.Matrix} using the {@link
+android.opengl.Matrix#frustumM Matrix.frustumM()} method:</p>
+
+<pre>
+&#64;Override
+public void onSurfaceChanged(GL10 unused, int width, int height) {
+    GLES20.glViewport(0, 0, width, height);
+
+    float ratio = (float) width / height;
+
+    // this projection matrix is applied to object coordinates
+    // in the onDrawFrame() method
+    Matrix.frustumM(mProjMatrix, 0, -ratio, ratio, -1, 1, 3, 7);
+}
+</pre>
+
+<p>This code populates a projection matrix, {@code mProjMatrix} which you can then combine with a
+camera view transformation in the {@link android.opengl.GLSurfaceView.Renderer#onDrawFrame
+onDrawFrame()} method, which is shown in the next section.</p>
+
+<p class="note"><strong>Note:</strong> Just applying a projection transformation to your
+drawing objects typically results in a very empty display. In general, you must also apply a camera
+view transformation in order for anything to show up on screen.</p>
+
+
+<h2 id="camera-view">Define a Camera View</h2>
+
+<p>Complete the process of transforming your drawn objects by adding a camera view transformation as
+part of the drawing process. In the following example code, the camera view transformation is
+calculated using the {@link android.opengl.Matrix#setLookAtM Matrix.setLookAtM()} method and then
+combined with the previously calculated projection matrix. The combined transformation matrices
+are then passed to the drawn shape.</p>
+
+<pre>
+&#64;Override
+public void onDrawFrame(GL10 unused) {
+    ...
+
+    // Set the camera position (View matrix)
+    Matrix.setLookAtM(mVMatrix, 0, 0, 0, -3, 0f, 0f, 0f, 0f, 1.0f, 0.0f);
+
+    // Calculate the projection and view transformation
+    Matrix.multiplyMM(mMVPMatrix, 0, mProjMatrix, 0, mVMatrix, 0);
+
+    // Draw shape
+    mTriangle.draw(mMVPMatrix);
+}
+</pre>
+
+
+<h2 id="#transform">Apply Projection and Camera Transformations</h2>
+
+<p>In order to use the combined projection and camera view transformation matrix shown in the
+previews sections, modify the {@code draw()} method of your graphic objects to accept the combined
+transformation matrix and apply it to the shape:</p>
+
+<pre>
+public void draw(float[] mvpMatrix) { // pass in the calculated transformation matrix
+    ...
+
+    // get handle to shape's transformation matrix
+    mMVPMatrixHandle = GLES20.glGetUniformLocation(mProgram, "uMVPMatrix");
+
+    // Apply the projection and view transformation
+    GLES20.glUniformMatrix4fv(mMVPMatrixHandle, 1, false, mvpMatrix, 0);
+
+    // Draw the triangle
+    GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, vertexCount);
+    ...
+}
+</pre>
+
+<p>Once you have correctly calulated and applied the projection and camera view transformations,
+your graphic objects are drawn in correct proportions and should look like this:</p>
+
+
+<img src="{@docRoot}images/opengl/ogl-triangle-projected.png">
+<p class="img-caption">
+<strong>Figure 1.</strong> Triangle drawn with a projection and camera view applied.</p>
+
+
+<p>Now that you have an application that displays your shapes in correct proportions, it's time to
+add motion to your shapes.</p>
diff --git a/docs/html/training/graphics/opengl/shapes.jd b/docs/html/training/graphics/opengl/shapes.jd
new file mode 100644
index 0000000..98381cc
--- /dev/null
+++ b/docs/html/training/graphics/opengl/shapes.jd
@@ -0,0 +1,153 @@
+page.title=Defining Shapes
+parent.title=Displaying Graphics with OpenGL ES
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Building an OpenGL ES Environment
+previous.link=environment.html
+next.title=Drawing Shapes
+next.link=draw.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#triangle">Define a Triangle</a></li>
+  <li><a href="#square">Define a Square</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<div class="download-box">
+ <a href="{@docRoot}shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>Being able to define shapes to be drawn in the context of an OpenGL ES view is the first step in
+creating your high-end graphics masterpiece. Drawing with OpenGL ES can be a little tricky without
+knowing a few basic things about how OpenGL ES expects you to define graphic objects.</p>
+
+<p>This lesson explains the OpenGL ES coordinate system relative to an Android device screen, the
+basics of defining a shape, shape faces, as well as defining a triangle and a square.</p>
+
+
+<h2 id="triangle">Define a Triangle</h2>
+
+<p>OpenGL ES allows you to define drawn objects using coordinates in three-dimensional space. So,
+before you can draw a triangle, you must define its coordinates. In OpenGL, the typical way to do
+this is to define a vertex array of floating point numbers for the coordinates. For maximum
+efficiency, you write these coordinates into a {@link java.nio.ByteBuffer}, that is passed into the
+OpenGL ES graphics pipeline for processing.</p>
+
+<pre>
+class Triangle {
+
+    private FloatBuffer vertexBuffer;
+
+    // number of coordinates per vertex in this array
+    static final int COORDS_PER_VERTEX = 3;
+    static float triangleCoords[] = { // in counterclockwise order:
+         0.0f,  0.622008459f, 0.0f,   // top
+        -0.5f, -0.311004243f, 0.0f,   // bottom left
+         0.5f, -0.311004243f, 0.0f    // bottom right
+    };
+
+    // Set color with red, green, blue and alpha (opacity) values
+    float color[] = { 0.63671875f, 0.76953125f, 0.22265625f, 1.0f };
+
+    public Triangle() {
+        // initialize vertex byte buffer for shape coordinates
+        ByteBuffer bb = ByteBuffer.allocateDirect(
+                // (number of coordinate values * 4 bytes per float)
+                triangleCoords.length * 4);
+        // use the device hardware's native byte order
+        bb.order(ByteOrder.nativeOrder());
+
+        // create a floating point buffer from the ByteBuffer
+        vertexBuffer = bb.asFloatBuffer();
+        // add the coordinates to the FloatBuffer
+        vertexBuffer.put(triangleCoords);
+        // set the buffer to read the first coordinate
+        vertexBuffer.position(0);
+    }
+}
+</pre>
+
+<p>By default, OpenGL ES assumes a coordinate system where [0,0,0] (X,Y,Z) specifies the center of
+the {@link android.opengl.GLSurfaceView} frame, [1,1,0] is the top right corner of the frame and
+[-1,-1,0] is bottom left corner of the frame. For an illustration of this coordinate system, see the
+<a href="{@docRoot}guide/topics/graphics/opengl.html#coordinate-mapping">OpenGL ES</a> developer
+guide.</p>
+
+<p>Note that the coordinates of this shape are defined in a counterclockwise order. The drawing
+order is important because it defines which side is the front face of the shape, which you typically
+want to have drawn, and the back face, which you can choose to not draw using the OpenGL ES cull
+face feature. For more information about faces and culling, see the <a
+href="{@docRoot}guide/topics/graphics/opengl.html#faces-winding">OpenGL ES</a> developer guide.</p>
+
+
+<h2 id="square">Define a Square</h2>
+
+<p>Defining triangles is pretty easy in OpenGL, but what if you want to get a just a little more
+complex? Say, a square? There are a number of ways to do this, but a typical path to drawing such a
+shape in OpenGL ES is to use two triangles drawn together:</p>
+
+<img src="{@docRoot}images/opengl/ccw-square.png">
+<p class="img-caption">
+  <strong>Figure 1.</strong> Drawing a square using two triangles.</p>
+
+<p>Again, you should define the vertices in a counterclockwise order for both triangles that
+represent this shape, and put the values in a {@link java.nio.ByteBuffer}. In order to avoid
+defining the two coordinates shared by each triangle twice, use a drawing list to tell the
+OpenGL ES graphics pipeline how to draw these vertices. Here’s the code for this shape:</p>
+
+<pre>
+class Square {
+
+    private FloatBuffer vertexBuffer;
+    private ShortBuffer drawListBuffer;
+
+    // number of coordinates per vertex in this array
+    static final int COORDS_PER_VERTEX = 3;
+    static float squareCoords[] = { -0.5f,  0.5f, 0.0f,   // top left
+                                    -0.5f, -0.5f, 0.0f,   // bottom left
+                                     0.5f, -0.5f, 0.0f,   // bottom right
+                                     0.5f,  0.5f, 0.0f }; // top right
+
+    private short drawOrder[] = { 0, 1, 2, 0, 2, 3 }; // order to draw vertices
+
+    public Square() {
+        // initialize vertex byte buffer for shape coordinates
+        ByteBuffer bb = ByteBuffer.allocateDirect(
+        // (# of coordinate values * 4 bytes per float)
+                squareCoords.length * 4);
+        bb.order(ByteOrder.nativeOrder());
+        vertexBuffer = bb.asFloatBuffer();
+        vertexBuffer.put(squareCoords);
+        vertexBuffer.position(0);
+
+        // initialize byte buffer for the draw list
+        ByteBuffer dlb = ByteBuffer.allocateDirect(
+        // (# of coordinate values * 2 bytes per short)
+                drawOrder.length * 2);
+        dlb.order(ByteOrder.nativeOrder());
+        drawListBuffer = dlb.asShortBuffer();
+        drawListBuffer.put(drawOrder);
+        drawListBuffer.position(0);
+    }
+}
+</pre>
+
+<p>This example gives you a peek at what it takes to create more complex shapes with OpenGL. In
+general, you use collections of triangles to draw objects. In the next lesson, you learn how to draw
+these shapes on screen.</p>
diff --git a/docs/html/training/graphics/opengl/touch.jd b/docs/html/training/graphics/opengl/touch.jd
new file mode 100644
index 0000000..c058a59
--- /dev/null
+++ b/docs/html/training/graphics/opengl/touch.jd
@@ -0,0 +1,145 @@
+page.title= Responding to Touch Events
+parent.title=Displaying Graphics with OpenGL ES
+parent.link=index.html
+
+trainingnavtop=true
+previous.title=Adding Motion
+previous.link=motion.html
+
+@jd:body
+
+<div id="tb-wrapper">
+<div id="tb">
+
+<h2>This lesson teaches you to</h2>
+<ol>
+  <li><a href="#listener">Setup a Touch Listener</a></li>
+  <li><a href="#angle">Expose the Rotation Angle</a></li>
+  <li><a href="#rotate">Apply Rotation</a></li>
+</ol>
+
+<h2>You should also read</h2>
+<ul>
+  <li><a href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL</a></li>
+</ul>
+
+<div class="download-box">
+ <a href="http://developer.android.com/shareables/training/OpenGLES.zip"
+class="button">Download the sample</a>
+ <p class="filename">OpenGLES.zip</p>
+</div>
+
+</div>
+</div>
+
+<p>Making objects move according to a preset program like the rotating triangle is useful for
+getting some attention, but what if you want to have users interact with your OpenGL ES graphics?
+The key to making your OpenGL ES application touch interactive is expanding your implementation of
+{@link android.opengl.GLSurfaceView} to override the {@link
+android.opengl.GLSurfaceView#onTouchEvent onTouchEvent()} to listen for touch events.</p>
+
+<p>This lesson shows you how to listen for touch events to let users rotate an OpenGL ES object.</p>
+
+
+<h2 id="listener">Setup a Touch Listener</h2>
+
+<p>In order to make your OpenGL ES application respond to touch events, you must implement the
+{@link android.opengl.GLSurfaceView#onTouchEvent onTouchEvent()} method in your
+{@link android.opengl.GLSurfaceView} class. The example implementation below shows how to listen for
+{@link android.view.MotionEvent#ACTION_MOVE MotionEvent.ACTION_MOVE} events and translate them to
+an angle of rotation for a shape.</p>
+
+<pre>
+&#64;Override
+public boolean onTouchEvent(MotionEvent e) {
+    // MotionEvent reports input details from the touch screen
+    // and other input controls. In this case, you are only
+    // interested in events where the touch position changed.
+
+    float x = e.getX();
+    float y = e.getY();
+
+    switch (e.getAction()) {
+        case MotionEvent.ACTION_MOVE:
+
+            float dx = x - mPreviousX;
+            float dy = y - mPreviousY;
+
+            // reverse direction of rotation above the mid-line
+            if (y &gt; getHeight() / 2) {
+              dx = dx * -1 ;
+            }
+
+            // reverse direction of rotation to left of the mid-line
+            if (x &lt; getWidth() / 2) {
+              dy = dy * -1 ;
+            }
+
+            mRenderer.mAngle += (dx + dy) * TOUCH_SCALE_FACTOR;  // = 180.0f / 320
+            requestRender();
+    }
+
+    mPreviousX = x;
+    mPreviousY = y;
+    return true;
+}
+</pre>
+
+<p>Notice that after calculating the rotation angle, this method calls {@link
+android.opengl.GLSurfaceView#requestRender requestRender()} to tell the
+renderer that it is time to render the frame. This approach is the most efficient in this example
+because the frame does not need to be redrawn unless there is a change in the rotation. However, it
+does not have any impact on efficiency unless you also request that the renderer only redraw when
+the data changes using the {@link android.opengl.GLSurfaceView#setRenderMode setRenderMode()}
+method, so make sure this line is uncommented in the renderer:</p>
+
+<pre>
+public MyGLSurfaceView(Context context) {
+    ...
+    // Render the view only when there is a change in the drawing data
+    <strong>setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY);</strong>
+}
+</pre>
+
+<h2 id="angle">Expose the Rotation Angle</h2>
+
+<p>The example code above requires that you expose the rotation angle through your renderer by
+adding a public member. Since the renderer code is running on a separate thread from the main user
+interface thread of your application, you must declare this public variable as {@code volatile}.
+Here is the code to do that:</p>
+
+<pre>
+public class MyGLRenderer implements GLSurfaceView.Renderer {
+    ...
+    public volatile float mAngle;
+</pre>
+
+
+<h2 id="rotate">Apply Rotation</h2>
+
+<p>To apply the rotation generated by touch input, comment out the code that generates an angle and
+add {@code mAngle}, which contains the touch input generated angle:</p>
+
+<pre>
+public void onDrawFrame(GL10 gl) {
+    ...
+    // Create a rotation for the triangle
+    // long time = SystemClock.uptimeMillis() % 4000L;
+    // float angle = 0.090f * ((int) time);
+    <strong>Matrix.setRotateM(mRotationMatrix, 0, mAngle, 0, 0, -1.0f);</strong>
+
+    // Combine the rotation matrix with the projection and camera view
+    Matrix.multiplyMM(mMVPMatrix, 0, mRotationMatrix, 0, mMVPMatrix, 0);
+
+    // Draw triangle
+    mTriangle.draw(mMVPMatrix);
+}
+</pre>
+
+<p>When you have completed the steps described above, run the program and drag your finger over the
+screen to rotate the triangle:</p>
+
+<img src="{@docRoot}images/opengl/ogl-triangle-touch.png">
+<p class="img-caption">
+<strong>Figure 1.</strong> Triangle being rotated with touch input (circle shows touch
+location).</p>
diff --git a/docs/html/training/id-auth/index.jd b/docs/html/training/id-auth/index.jd
index 361e6cf..140545c 100644
--- a/docs/html/training/id-auth/index.jd
+++ b/docs/html/training/id-auth/index.jd
@@ -14,7 +14,7 @@
 <h2>Requirements and prerequisites</h2>
 <ul>
   <li>Android 2.0 (API level 5) or higher</li>
-  <li>Experience with <a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></li>
+  <li>Experience with <a href="{@docRoot}guide/components/services.html">Services</a></li>
   <li>Experience with <a href="http://oauth.net/2/">OAuth 2.0</a></li>
 </ul>  
 
diff --git a/docs/html/training/implementing-navigation/ancestral.jd b/docs/html/training/implementing-navigation/ancestral.jd
index 495b45d..ac35e64 100644
--- a/docs/html/training/implementing-navigation/ancestral.jd
+++ b/docs/html/training/implementing-navigation/ancestral.jd
@@ -22,7 +22,7 @@
 <h2>You should also read</h2>
 <ul>
   <li><a href="{@docRoot}training/design-navigation/ancestral-temporal.html">Providing Ancestral and Temporal Navigation</a></li>
-  <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
+  <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
   <li><a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a></li>
 </ul>
 
@@ -87,7 +87,7 @@
 
 <p>When the current activity belongs to a task from a different application&mdash;for example if it was reached via an intent from another application&mdash;pressing <em>Up</em> should create a new task for the application with a synthesized back stack. This approach is described in <a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a> and the {@link android.support.v4.app.TaskStackBuilder} class reference.</p>
 
-<p>The {@link android.support.v4.app.NavUtils} and {@link android.support.v4.app.TaskStackBuilder} classes in the <a href="{@docRoot}sdk/compatibility-library.html">Android Support Package</a> provide helpers for implementing this behavior correctly. An example usage of these two helper classes is below:</p>
+<p>The {@link android.support.v4.app.NavUtils} and {@link android.support.v4.app.TaskStackBuilder} classes in the <a href="{@docRoot}tools/extras/support-library.html">Android Support Package</a> provide helpers for implementing this behavior correctly. An example usage of these two helper classes is below:</p>
 
 <pre>
 {@literal @}Override
diff --git a/docs/html/training/implementing-navigation/index.jd b/docs/html/training/implementing-navigation/index.jd
index da61c81..ebb4995 100644
--- a/docs/html/training/implementing-navigation/index.jd
+++ b/docs/html/training/implementing-navigation/index.jd
@@ -15,7 +15,7 @@
 <ul>
   <li>API level 14</li>
   <li>Understanding of fragments and Android layouts</li>
-  <li><a href="{@docRoot}sdk/compatibility-library.html">The Android Support Package</a></li>
+  <li><a href="{@docRoot}tools/extras/support-library.html">The Android Support Package</a></li>
   <li><a href="{@docRoot}training/design-navigation/index.html">Designing Effective Navigation</a></li>
 </ul>
 
@@ -23,7 +23,7 @@
 
 <ul>
   <li><a href="{@docRoot}guide/topics/ui/actionbar.html">Action Bar</a></li>
-  <li><a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a></li>
+  <li><a href="{@docRoot}guide/components/fragments.html">Fragments</a></li>
   <li><a href="{@docRoot}training/multiscreen/index.html">Designing for Multiple Screens</a></li>
 </ul>
 
diff --git a/docs/html/training/implementing-navigation/lateral.jd b/docs/html/training/implementing-navigation/lateral.jd
index d9ba5c9..76acf03 100644
--- a/docs/html/training/implementing-navigation/lateral.jd
+++ b/docs/html/training/implementing-navigation/lateral.jd
@@ -119,7 +119,7 @@
 
 <h2 id="horizontal-paging">Implement Horizontal Paging (Swipe Views)</h2>
 
-<p>Horizontal paging, or swipe views, allow users to <a href="{@docRoot}design/patterns/swipe-views">swipe</a> horizontally on the current screen to navigate to adjacent screens. This pattern can be implemented using the {@link android.support.v4.view.ViewPager} widget, currently available as part of the <a href="{@docRoot}sdk/compatibility-library.html">Android Support Package</a>. For navigating between sibling screens representing a fixed number of sections, it's best to provide the {@link android.support.v4.view.ViewPager} with a {@link android.support.v4.app.FragmentPagerAdapter}. For horizontal paging across collections of objects, it's best to use a {@link android.support.v4.app.FragmentStatePagerAdapter}, which destroys fragments as the user navigates to other pages, minimizing memory usage.</p>
+<p>Horizontal paging, or swipe views, allow users to <a href="{@docRoot}design/patterns/swipe-views">swipe</a> horizontally on the current screen to navigate to adjacent screens. This pattern can be implemented using the {@link android.support.v4.view.ViewPager} widget, currently available as part of the <a href="{@docRoot}tools/extras/support-library.html">Android Support Package</a>. For navigating between sibling screens representing a fixed number of sections, it's best to provide the {@link android.support.v4.view.ViewPager} with a {@link android.support.v4.app.FragmentPagerAdapter}. For horizontal paging across collections of objects, it's best to use a {@link android.support.v4.app.FragmentStatePagerAdapter}, which destroys fragments as the user navigates to other pages, minimizing memory usage.</p>
 
 <p>Below is an example of using a {@link android.support.v4.view.ViewPager} to swipe across a collection of objects.</p>
 
diff --git a/docs/html/training/implementing-navigation/temporal.jd b/docs/html/training/implementing-navigation/temporal.jd
index f36991f..1c41732 100644
--- a/docs/html/training/implementing-navigation/temporal.jd
+++ b/docs/html/training/implementing-navigation/temporal.jd
@@ -22,7 +22,7 @@
 <h2>You should also read</h2>
 <ul>
   <li><a href="{@docRoot}training/design-navigation/ancestral-temporal.html">Providing Ancestral and Temporal Navigation</a></li>
-  <li><a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
+  <li><a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a></li>
   <li><a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a></li>
 </ul>
 
@@ -32,7 +32,7 @@
 
 <p><em>Temporal navigation</em> is navigation to previously visited screens. Users can visit previous screens by pressing the device <em>Back</em> button. This user interface pattern is described further in <a href="{@docRoot}training/design-navigation/ancestral-temporal.html">Providing Ancestral and Temporal Navigation</a> in <em>Designing Effective Navigation</em> and in <a href="{@docRoot}design/patterns/navigation.html">Android Design: Navigation</a>.</p>
 
-<p>Android handles basic <em>Back</em> navigation for you (see <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a> for details on this behavior). This lesson discusses a number of cases where applications should provide specialized logic for the <em>Back</em> button.</p>
+<p>Android handles basic <em>Back</em> navigation for you (see <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a> for details on this behavior). This lesson discusses a number of cases where applications should provide specialized logic for the <em>Back</em> button.</p>
 
 
 <h2 id="back-fragments">Implement <em>Back</em> Navigation with Fragments</h2>
diff --git a/docs/html/training/improving-layouts/optimizing-layout.jd b/docs/html/training/improving-layouts/optimizing-layout.jd
index 0eaf199..520ce56 100644
--- a/docs/html/training/improving-layouts/optimizing-layout.jd
+++ b/docs/html/training/improving-layouts/optimizing-layout.jd
@@ -44,8 +44,8 @@
 android.widget.GridView}.</p>
 
 <p>In this lesson you'll learn to use <a
-href="{@docRoot}guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a> and <a
-href="{@docRoot}guide/developing/tools/layoutopt.html">Layoutopt</a> to examine and optimize your
+href="{@docRoot}tools/help/hierarchy-viewer.html">Hierarchy Viewer</a> and <a
+href="{@docRoot}tools/help/layoutopt.html">Layoutopt</a> to examine and optimize your
 layout.</p>
 
 
@@ -53,7 +53,7 @@
 <h2 id="Inspect">Inspect Your Layout</h2>
 
 <p>The Android SDK tools include a tool called <a
-href="{@docRoot}guide/developing/tools/hierarchy-viewer.html">Hierarchy Viewer</a> that allows
+href="{@docRoot}tools/help/hierarchy-viewer.html">Hierarchy Viewer</a> that allows
 you to analyze your layout while your application is running. Using this tool helps you discover
 bottlenecks in the layout performance.</p>
 
diff --git a/docs/html/training/index.jd b/docs/html/training/index.jd
index 8bf32bb..3c67af9 100644
--- a/docs/html/training/index.jd
+++ b/docs/html/training/index.jd
@@ -1,18 +1,14 @@
-page.title=Orientation to Android Training
+page.title=Android Training
 page.metaDescription=Android Training provides a collection of classes that aim to help you build great apps for Android. Each class explains the steps required to solve a problem or implement a feature using code snippets and sample code for you to use in your apps.
 
 @jd:body
 
-<div class="figure" style="width:450px;margin-top:-30px">
-  <img src="{@docRoot}images/training/training-prof.png" alt="" />
-</div>
-
 <p>Welcome to Android Training. Here you'll find a collection of classes that aim to help you
 build great apps for Android, using best practices in a variety of framework topics.</p>
 
 <p>Each class explains the steps required to solve a problem or implement a feature using code
 snippets and sample code for you to use in your apps.</p>
 
-<p>What you see now is just the beginning. We plan to add many more classes, expand and refine
-existing classes, and build Training Courses that help you enhance your apps using
-objective-oriented collections of classes.</p>
+<p>This first section is focused on teaching you the bare essentials. If you're a new developer
+on Android, you should walk through each of these classes, beginning with 
+<a href="{@docRoot}training/basics/firstapp/index.html">Building Your First App</a>.</p></a>
diff --git a/docs/html/training/managing-audio/index.jd b/docs/html/training/managing-audio/index.jd
index 3aa2d88..0f7bbfd 100644
--- a/docs/html/training/managing-audio/index.jd
+++ b/docs/html/training/managing-audio/index.jd
@@ -19,7 +19,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a></li>
+  <li><a href="{@docRoot}guide/components/services.html">Services</a></li>
 </ul>
 
 </div> 
diff --git a/docs/html/training/monitoring-device-state/battery-monitoring.jd b/docs/html/training/monitoring-device-state/battery-monitoring.jd
index 6e25df8..c963a18 100644
--- a/docs/html/training/monitoring-device-state/battery-monitoring.jd
+++ b/docs/html/training/monitoring-device-state/battery-monitoring.jd
@@ -21,7 +21,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
 </ul>
 
 </div> 
diff --git a/docs/html/training/monitoring-device-state/connectivity-monitoring.jd b/docs/html/training/monitoring-device-state/connectivity-monitoring.jd
index 98ba63c..11a05e1 100644
--- a/docs/html/training/monitoring-device-state/connectivity-monitoring.jd
+++ b/docs/html/training/monitoring-device-state/connectivity-monitoring.jd
@@ -24,7 +24,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
 </ul>
 
 </div> 
diff --git a/docs/html/training/monitoring-device-state/docking-monitoring.jd b/docs/html/training/monitoring-device-state/docking-monitoring.jd
index 82d655e..3787a55 100644
--- a/docs/html/training/monitoring-device-state/docking-monitoring.jd
+++ b/docs/html/training/monitoring-device-state/docking-monitoring.jd
@@ -23,7 +23,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
 </ul>
 
 </div> 
diff --git a/docs/html/training/monitoring-device-state/index.jd b/docs/html/training/monitoring-device-state/index.jd
index 61f7176..585b669 100644
--- a/docs/html/training/monitoring-device-state/index.jd
+++ b/docs/html/training/monitoring-device-state/index.jd
@@ -13,12 +13,12 @@
 <h2>Dependencies and prerequisites</h2> 
 <ul>
   <li>Android 2.0 (API level 5) or higher</li>
-  <li>Experience with <a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a></li>
+  <li>Experience with <a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a></li>
 </ul>
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>
+  <li><a href="{@docRoot}guide/components/services.html">Services</a>
 </ul>
 
 </div> 
diff --git a/docs/html/training/monitoring-device-state/manifest-receivers.jd b/docs/html/training/monitoring-device-state/manifest-receivers.jd
index 0b79ce6..d4aeed3 100644
--- a/docs/html/training/monitoring-device-state/manifest-receivers.jd
+++ b/docs/html/training/monitoring-device-state/manifest-receivers.jd
@@ -21,7 +21,7 @@
 
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and Intent Filters</a>
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>
 </ul>
 
 </div> 
diff --git a/docs/html/training/multiple-apks/api.jd b/docs/html/training/multiple-apks/api.jd
index 3492245..1a2593a 100644
--- a/docs/html/training/multiple-apks/api.jd
+++ b/docs/html/training/multiple-apks/api.jd
@@ -33,7 +33,7 @@
 <!-- other docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="http://developer.android.com/guide/market/publishing/multiple-apks.html">Multiple APK
+  <li><a href="http://developer.android.com/guide/google/play/publishing/multiple-apks.html">Multiple APK
 Support</a></li>
   <li><a
 href="http://android-developers.blogspot.com/2010/07/how-to-have-your-cupcake-and-eat-it-too.html">
@@ -57,7 +57,7 @@
 platform, naturally you want your application to take advantage of new features on new devices,
 without sacrificing backwards compatibility.  It may seem at the outset as though multiple APK
 support is the best solution, but this often isn’t the case.  The <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#ApiLevelOptions">Using Single APK
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#ApiLevelOptions">Using Single APK
 Instead</a> section of the multiple APK developer guide includes some useful information on how to
 accomplish this with a single APK, including use of our support library. You can also learn how to
 write code that runs only at certain API levels in a single APK, without resorting to
@@ -85,7 +85,7 @@
 
 <p>Start off by creating a simple chart to quickly determine how many APKs you need, and what API
 range each APK covers.  For handy reference, the <a
-href="{@docRoot}resources/dashboard/platform-versions.html">Platform Versions</a> page of the
+href="{@docRoot}about/dashboards/index.html">Platform Versions</a> page of the
 Android Developer website provides data about the relative number of active devices running a given
 version of the Android platform.  Also, although it sounds easy at first, keeping track of which set
 of API levels each APK is going to target gets difficult rather quickly, especially if there’s going
@@ -153,10 +153,10 @@
 their creation at the following links:</p>
 <ul>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
 a library project (Eclipse)</a></li>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
 a library project (Command line)</a></li>
 </ul>
 
@@ -279,7 +279,7 @@
 
 <p>
 Now, let’s further assume that the Red APK has some requirement on it that the other two don’t.  
-<a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a> page of
+<a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a> page of
 the Android Developer guide has a whole list of possible culprits.  For the
 sake of example, let’s assume that red requires a front-facing camera.  In fact, the entire point of
 the red APK is to combine the front-facing camera with sweet new functionality that was added in API
@@ -296,7 +296,7 @@
 
 <p>  In order to keep all your APKs on separate "tracks", it’s important to have a good version code
 scheme.  The recommended one can be found on the <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#VersionCodes">Version Codes</a> area of
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#VersionCodes">Version Codes</a> area of
 our developer guide.  Since the example set of APKs is only dealing with one of 3 possible
 dimensions, it would be sufficient to separate each APK by 1000, set the first couple digits to the
 minSdkVersion for that particular APK, and increment from there.  This might look like:</p>
diff --git a/docs/html/training/multiple-apks/index.jd b/docs/html/training/multiple-apks/index.jd
index d92c106..1f2fee8 100644
--- a/docs/html/training/multiple-apks/index.jd
+++ b/docs/html/training/multiple-apks/index.jd
@@ -23,7 +23,7 @@
 <!-- related docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="http://developer.android.com/guide/market/publishing/multiple-apks.html">Multiple APK
+  <li><a href="http://developer.android.com/guide/google/play/publishing/multiple-apks.html">Multiple APK
 Support</a></li>
 </ul>
 
diff --git a/docs/html/training/multiple-apks/multiple.jd b/docs/html/training/multiple-apks/multiple.jd
index b30068f..25938da 100644
--- a/docs/html/training/multiple-apks/multiple.jd
+++ b/docs/html/training/multiple-apks/multiple.jd
@@ -33,7 +33,7 @@
 <!-- other docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="http://developer.android.com/guide/market/publishing/multiple-apks.html">Multiple APK
+  <li><a href="http://developer.android.com/guide/google/play/publishing/multiple-apks.html">Multiple APK
 Support</a></li>
 </ul>
 
@@ -54,7 +54,7 @@
 take advantage of the space of large screens but still work on small ones, to use new Android API
 features or visual textures available on cutting edge devices but not abandon older ones.  It may
 seem at the outset as though multiple APK support is the best solution, but this often isn’t the
-case.  The <a href="{@docRoot}guide/market/publishing/multiple-apks.html#ApiLevelOptions">Using
+case.  The <a href="{@docRoot}guide/google/play/publishing/multiple-apks.html#ApiLevelOptions">Using
 Single APK Instead</a> section of the multiple APK guide includes some useful information on how to
 accomplish all of this with a single APK, including use of our <a
 href="http://android-developers.blogspot.com/2011/03/fragments-for-all.html">support library</a>,
@@ -182,10 +182,10 @@
 their creation at the following links:</p>
 <ul>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
 a library project (Eclipse)</a></li>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
 a library project (Command line)</a></li>
 </ul>
 
@@ -329,7 +329,7 @@
 Purple &#8805; Red &#8805; Green &#8805; Blue
 </p><p>
 Why allow all the overlap?  Let’s pretend that the Purple APK has some requirement on it that the
-other two don’t.  The <a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a> page
+other two don’t.  The <a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a> page
 of the Android Developer guide has a whole list of possible culprits.  For the sake of example,
 let’s assume that Purple requires a front-facing camera.  In fact, the entire point of Purple is to
 use entertaining things with the front-facing camera!  But, it turns out, not all API 11+ devices
@@ -345,7 +345,7 @@
 
 <p>  In order to keep all your APKs on separate "tracks", it’s important to have a good version code
 scheme.  The recommended one can be found on the <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#VersionCodes">Version Codes</a> area of
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#VersionCodes">Version Codes</a> area of
 our developer guide.  It’s worth reading the whole section, but the basic gist is for this set of
 APKs, we’d use two digits to represent the minSDK, two to represent the min/max screen size, and 3
 to represent the build number.  That way, when the device upgraded to a new version of Android,
diff --git a/docs/html/training/multiple-apks/screensize.jd b/docs/html/training/multiple-apks/screensize.jd
index ac679a7..ea793db 100644
--- a/docs/html/training/multiple-apks/screensize.jd
+++ b/docs/html/training/multiple-apks/screensize.jd
@@ -34,7 +34,7 @@
 <!-- other docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="http://developer.android.com/guide/market/publishing/multiple-apks.html">Multiple APK
+  <li><a href="http://developer.android.com/guide/google/play/publishing/multiple-apks.html">Multiple APK
 Support</a></li>
   <li><a href="{@docRoot}guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
 </ul>
@@ -56,7 +56,7 @@
 naturally you want your application to take advantage of all the available space on larger devices,
 without sacrificing compatibility or usability on the smaller screens.  It may seem at the outset as
 though multiple APK support is the best solution, but this often isn’t the case.  The <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#ApiLevelOptions">Using Single APK
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#ApiLevelOptions">Using Single APK
 Instead</a> section of the multiple APK developer guide includes some useful information on how to
 accomplish this with a single APK, including use of our support library. You should also read the 
 guide to <a href="{@docRoot}guide/practices/screens_support.html">supporting multiple screens</a>,
@@ -130,10 +130,10 @@
 their creation at the following links:</p>
 <ul>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
 a library project (Eclipse)</a></li>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
 a library project (Command line)</a></li>
 </ul>
 
@@ -227,7 +227,7 @@
 </table>
 <p>
 Now, let’s further assume that the Red APK has some requirement on it that the other two don’t.  The
-<a href="{@docRoot}guide/appendix/market-filters.html">Filters on Google Play</a> page of the Android
+<a href="{@docRoot}guide/google/play/filters.html">Filters on Google Play</a> page of the Android
 Developer guide has a whole list of possible culprits.  For the sake of example, let’s assume that
 red requires a front-facing camera.  In fact, the entire point of the red APK is to use the extra
 available screen space to do entertaining things with that front-facing camera.  But, it turns out,
@@ -243,7 +243,7 @@
 
 <p>  In order to keep all your APKs on separate "tracks", it’s important to have a good version code
 scheme.  The recommended one can be found on the <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#VersionCodes">Version Codes</a> area of
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#VersionCodes">Version Codes</a> area of
 our developer guide.  Since the example set of APKs is only dealing with one of 3 possible
 dimensions, it would be sufficient to separate each APK by 1000 and increment from there.  This
 might look like:</p>
diff --git a/docs/html/training/multiple-apks/texture.jd b/docs/html/training/multiple-apks/texture.jd
index 497d6b8..70ad1e0 100644
--- a/docs/html/training/multiple-apks/texture.jd
+++ b/docs/html/training/multiple-apks/texture.jd
@@ -33,7 +33,7 @@
 <!-- other docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="http://developer.android.com/guide/market/publishing/multiple-apks.html">Multiple APK
+  <li><a href="http://developer.android.com/guide/google/play/publishing/multiple-apks.html">Multiple APK
 Support</a></li>
 </ul>
 
@@ -49,10 +49,10 @@
 devices, naturally you want your application look its best on each individual device, regardless of
 the fact they don’t all support the same set of GL textures.  It may seem at the outset as though
 multiple APK support is the best solution, but this often isn’t the case.  The <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#ApiLevelOptions">Using Single APK
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#ApiLevelOptions">Using Single APK
 Instead</a> section of the multiple APK developer guide includes some useful information on how to
 accomplish this with a single APK, including how to <a
-href="{@docRoot}guide/market/publishing/multiple-apks.html#TextureOptions">detect supported texture
+href="{@docRoot}guide/google/play/publishing/multiple-apks.html#TextureOptions">detect supported texture
 formats at runtime</a>.  Depending on your situation, it might be easier to bundle all formats with
 your application, and simply pick which one to use at runtime.</p>
 
@@ -113,10 +113,10 @@
 their creation at the following links:</p>
 <ul>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-eclipse.html#SettingUpLibraryProject">Setting up
 a library project (Eclipse)</a></li>
 <li><a
-href="{@docRoot}guide/developing/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
+href="{@docRoot}tools/projects/projects-cmdline.html#SettingUpLibraryProject">Setting up
 a library project (Command line)</a></li>
 </ul>
 
diff --git a/docs/html/training/multiscreen/index.jd b/docs/html/training/multiscreen/index.jd
index a986cef..23f6564 100644
--- a/docs/html/training/multiscreen/index.jd
+++ b/docs/html/training/multiscreen/index.jd
@@ -15,12 +15,12 @@
 <ul>
   <li>Android 1.6 or higher (2.1+ for the sample app)</li>
   <li>Basic knowledge of <a
-href="http://developer.android.com/guide/topics/fundamentals/activities.html">Activities</a> and
-<a href="http://developer.android.com/guide/topics/fundamentals/fragments.html">Fragments</a></li>
+href="http://developer.android.com/guide/components/activities.html">Activities</a> and
+<a href="http://developer.android.com/guide/components/fragments.html">Fragments</a></li>
   <li>Experience building an Android <a
 href="http://developer.android.com/guide/topics/ui/index.html"> User Interface</a></li>
   <li>Several features require the use of the <a
-href="{@docRoot}sdk/compatibility-library.html">support library</a></li>
+href="{@docRoot}tools/extras/support-library.html">support library</a></li>
 </ul>
 
 <h2>You should also read</h2>
@@ -59,7 +59,7 @@
 of reusable code for your own application.</p>
 
 <p class="note"><strong>Note:</strong> This class and the associated sample use the <a
-href="{@docRoot}sdk/compatibility-library.html">support library</a> in order to use the {@link
+href="{@docRoot}tools/extras/support-library.html">support library</a> in order to use the {@link
 android.app.Fragment} APIs on versions lower than Android 3.0. You must download and add the
 library to your application in order to use all APIs in this class.</p>
  
diff --git a/docs/html/training/multiscreen/screensizes.jd b/docs/html/training/multiscreen/screensizes.jd
index bf19b08..a34c3d5 100644
--- a/docs/html/training/multiscreen/screensizes.jd
+++ b/docs/html/training/multiscreen/screensizes.jd
@@ -348,7 +348,7 @@
 <p class="img-caption"><strong>Figure 4.</strong> <code>button.png</code></p>
 
 <p>And then run it through the <ode
-href="{@docRoot}guide/developing/tools/draw9patch.html"><code>draw9patch</code></a> utility of the
+href="{@docRoot}tools/help/draw9patch.html"><code>draw9patch</code></a> utility of the
 SDK (which is located in the <code>tools/</code> directory), in which you can mark the areas that
 should be stretched by drawing pixels along the left and top borders. You can also mark the area
 that should hold the content by drawing pixels along the right and bottom borders, resulting in
diff --git a/docs/html/training/sharing/index.jd b/docs/html/training/sharing/index.jd
index 9ee5e29..c2e8dbc 100644
--- a/docs/html/training/sharing/index.jd
+++ b/docs/html/training/sharing/index.jd
@@ -14,7 +14,7 @@
 <h2>Dependencies and prerequisites</h2>
 <ul>
   <li>Android 1.0 or higher (greater requirements where noted)</li>
-  <li>Experience with <a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
+  <li>Experience with <a href="{@docRoot}guide/components/intents-filters.html">Intents and
 Intent Filters</a></li>
 </ul>
 
diff --git a/docs/html/training/sharing/receive.jd b/docs/html/training/sharing/receive.jd
index 9c932b1..7ec3def 100644
--- a/docs/html/training/sharing/receive.jd
+++ b/docs/html/training/sharing/receive.jd
@@ -23,7 +23,7 @@
 <!-- other docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and
 Intent Filters</a></li>
 </ul>
 
@@ -48,7 +48,7 @@
 lesson, you create intent filters in order to be able to receive intents with this action. You 
 define an intent filter in your manifest, using the 
 <code><a
-href="{@docRoot}guide/topics/intents/intents-filters.html#ifs">&lt;intent-filter&gt;</a></code> 
+href="{@docRoot}guide/components/intents-filters.html#ifs">&lt;intent-filter&gt;</a></code> 
 element. For example, if your application handles receiving text content, a single image of any 
 type, or multiple images of any type, your manifest would look like:</p>
 
@@ -73,7 +73,7 @@
 </pre>
 
 <p class="note"><strong>Note:</strong> For more information on intent filters and intent resolution 
-please read <a href="{@docRoot}guide/topics/intents/intents-filters.html#ifs">Intents and Intent
+please read <a href="{@docRoot}guide/components/intents-filters.html#ifs">Intents and Intent
 Filters</a></p>
 
 <p>When another application tries to share any of these things by constructing an intent and passing
diff --git a/docs/html/training/sharing/send.jd b/docs/html/training/sharing/send.jd
index afb0e34..741c017 100644
--- a/docs/html/training/sharing/send.jd
+++ b/docs/html/training/sharing/send.jd
@@ -22,7 +22,7 @@
 <!-- other docs (NOT javadocs) -->
 <h2>You should also read</h2>
 <ul>
-  <li><a href="{@docRoot}guide/topics/intents/intents-filters.html">Intents and
+  <li><a href="{@docRoot}guide/components/intents-filters.html">Intents and
 Intent Filters</a></li>
 </ul>
 
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
new file mode 100644
index 0000000..77a6837
--- /dev/null
+++ b/docs/html/training/training_toc.cs
@@ -0,0 +1,685 @@
+<ul id="nav">
+
+
+  <li class="nav-section">
+    <div class="nav-section-header">
+      <a href="<?cs var:toroot ?>training/index.html">
+        <span class="en">Get Started</span>
+      </a>
+    </div>
+
+    <ul>
+      <li class="nav-section">
+        <div class="nav-section-header">
+          <a href="<?cs var:toroot ?>training/basics/firstapp/index.html">
+            <span class="en">Building Your First App</span>
+          </a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/firstapp/creating-project.html">
+            <span class="en">Creating an Android Project</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/firstapp/running-app.html">
+            <span class="en">Running Your Application</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/firstapp/building-ui.html">
+            <span class="en">Building a Simple User Interface</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/firstapp/starting-activity.html">
+            <span class="en">Starting Another Activity</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/index.html">
+            <span class="en">Managing the Activity Lifecycle</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/starting.html">
+            <span class="en">Starting an Activity</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/pausing.html">
+            <span class="en">Pausing and Resuming an Activity</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/stopping.html">
+            <span class="en">Stopping and Restarting an Activity</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/activity-lifecycle/recreating.html">
+            <span class="en">Recreating an Activity</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/supporting-devices/index.html">
+            <span class="en">Supporting Different Devices</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/languages.html">
+            <span class="en">Supporting Different Languages</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/screens.html">
+            <span class="en">Supporting Different Screens</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/supporting-devices/platforms.html">
+            <span class="en">Supporting Different Platform Versions</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/fragments/index.html">
+            <span class="en">Building a Dynamic UI with Fragments</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/fragments/support-lib.html">
+            <span class="en">Using the Support Library</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/fragments/creating.html">
+            <span class="en">Creating a Fragment</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/fragments/fragment-ui.html">
+            <span class="en">Building a Flexible UI</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/fragments/communicating.html">
+            <span class="en">Communicating with Other Fragments</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/intents/index.html">
+            <span class="en">Interacting with Other Apps</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/intents/sending.html">
+            <span class="en">Sending the User to Another App</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/intents/result.html">
+            <span class="en">Getting a Result from the Activity</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/intents/filters.html">
+            <span class="en">Allowing Other Apps to Start Your Activity</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      
+    </ul>
+  </li><!-- end basic training -->    
+  <li class="nav-section">
+    <div class="nav-section-header">
+      <a href="<?cs var:toroot ?>training/advanced.html">
+      <span class="en">Advanced Training</span>
+      </a>
+    </div>
+    <ul>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/location/index.html">
+            <span class="en">Making Your App Location Aware</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/location/locationmanager.html">
+            <span class="en">Using the Location Manager</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/location/currentlocation.html">
+            <span class="en">Obtaining the Current Location</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/location/geocoding.html">
+            <span class="en">Displaying a Location Address</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+       <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/basics/network-ops/index.html">
+            <span class="en">Performing Network Operations</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/basics/network-ops/connecting.html">
+            <span class="en">Connecting to the Network</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/network-ops/managing.html">
+            <span class="en">Managing Network Usage</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/basics/network-ops/xml.html">
+            <span class="en">Parsing XML Data</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/efficient-downloads/index.html">
+            <span class="en">Transferring Data Without Draining the Battery</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/efficient-downloads/efficient-network-access.html">
+            <span class="en">Optimizing Downloads for Efficient Network Access</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/efficient-downloads/regular_updates.html">
+            <span class="en">Minimizing the Effect of Regular Updates</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/efficient-downloads/redundant_redundant.html">
+            <span class="en">Redundant Downloads are Redundant</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/efficient-downloads/connectivity_patterns.html">
+            <span class="en">Modifying Patterns Based on the Connectivity Type</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/cloudsync/index.html">
+            <span class="en">Syncing to the Cloud</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/cloudsync/aesync.html">
+            <span class="en">Syncing with App Engine</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/cloudsync/backupapi.html">
+            <span class="en">Using the Backup API</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiscreen/index.html">
+            <span class="en">Designing for Multiple Screens</span>
+            <span class="es">Cómo diseñar aplicaciones para varias pantallas</span>
+            <span class="ja">複数画面のデザイン</span>
+            <span class="ko">Designing for Multiple Screens</span>
+            <span class="ru">Designing for Multiple Screens</span>
+            <span class="zh-CN">针对多种屏幕进行设计</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/multiscreen/screensizes.html">
+            <span class="en">Supporting Different Screen Sizes</span>
+            <span class="es">Cómo admitir varios tamaños de pantalla</span>
+            <span class="ja">さまざまな画面サイズのサポート</span>
+            <span class="ko">다양한 화면 크기 지원</span>
+            <span class="ru">Supporting Different Screen Sizes</span>
+            <span class="zh-CN">支持各种屏幕尺寸</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/multiscreen/screendensities.html">
+            <span class="en">Supporting Different Screen Densities</span>
+            <span class="es">Cómo admitir varias densidades de pantalla</span>
+            <span class="ja">さまざまな画面密度のサポート</span>
+            <span class="ko">Supporting Different Screen Densities</span>
+            <span class="ru">Supporting Different Screen Densities</span>
+            <span class="zh-CN">支持各种屏幕密度</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/multiscreen/adaptui.html">
+            <span class="en">Implementing Adaptive UI Flows</span>
+            <span class="es">Cómo implementar interfaces de usuario adaptables</span>
+            <span class="ja">順応性のある UI フローの実装</span>
+            <span class="ko">Implementing Adaptive UI Flows</span>
+            <span class="ru">Implementing Adaptive UI Flows</span>
+            <span class="zh-CN">实施自适应用户界面流程</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/improving-layouts/index.html">
+            <span class="en">Improving Layout Performance</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/improving-layouts/optimizing-layout.html">
+            <span class="en">Optimizing Layout Hierarchies</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/improving-layouts/reusing-layouts.html">
+            <span class="en">Re-using Layouts with &lt;include/&gt;</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/improving-layouts/loading-ondemand.html">
+            <span class="en">Loading Views On Demand</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/improving-layouts/smooth-scrolling.html">
+            <span class="en">Making ListView Scrolling Smooth</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/managing-audio/index.html">
+            <span class="en">Managing Audio Playback</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/managing-audio/volume-playback.html">
+            <span class="en">Controlling Your App?s Volume and Playback</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/managing-audio/audio-focus.html">
+            <span class="en">Managing Audio Focus</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/managing-audio/audio-output.html">
+            <span class="en">Dealing with Audio Output Hardware</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/monitoring-device-state/index.html">
+            <span class="en">Optimizing Battery Life</span>
+            <span class="es">Cómo optimizar la duración de la batería</span>
+            <span class="ja">電池消費量の最適化</span>
+            <span class="ko">Optimizing Battery Life</span>
+            <span class="ru">Optimizing Battery Life</span>
+            <span class="zh-CN">优化电池使用时间</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/battery-monitoring.html">
+            <span class="en">Monitoring the Battery Level and Charging State</span>
+            <span class="es">Cómo controlar el nivel de batería y el estado de carga</span>
+            <span class="ja">電池残量と充電状態の監視</span>
+            <span class="ko">Monitoring the Battery Level and Charging State</span>
+            <span class="ru">Monitoring the Battery Level and Charging State</span>
+            <span class="zh-CN">监控电池电量和充电状态</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/docking-monitoring.html">
+            <span class="en">Determining and Monitoring the Docking State and Type</span>
+            <span class="es">Cómo determinar y controlar el tipo de conector y el estado de la conexión</span>
+            <span class="ja">ホルダーの装着状態とタイプの特定と監視</span>
+            <span class="ko">Determining and Monitoring the Docking State and Type</span>
+            <span class="ru">Determining and Monitoring the Docking State and Type</span>
+            <span class="zh-CN">确定和监控基座对接状态和类型</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/connectivity-monitoring.html">
+            <span class="en">Determining and Monitoring the Connectivity Status</span>
+            <span class="es">Cómo determinar y controlar el estado de la conectividad</span>
+            <span class="ja">接続状態の特定と監視</span>
+            <span class="ko">Determining and Monitoring the Connectivity Status</span>
+            <span class="ru">Determining and Monitoring the Connectivity Status</span>
+            <span class="zh-CN">确定和监控网络连接状态</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/monitoring-device-state/manifest-receivers.html">
+            <span class="en">Manipulating Broadcast Receivers On Demand</span>
+            <span class="es">Cómo manipular los receptores de emisión bajo demanda</span>
+            <span class="ja">オンデマンドでのブロードキャスト レシーバ操作</span>
+            <span class="ko">Manipulating Broadcast Receivers On Demand</span>
+            <span class="ru">Manipulating Broadcast Receivers On Demand</span>
+            <span class="zh-CN">根据需要操作广播接收器</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/custom-views/index.html">
+            <span class="en">Creating Custom Views</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/custom-views/create-view.html">
+            <span class="en">Creating a Custom View Class</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/custom-views/custom-drawing.html">
+            <span class="en">Implementing Custom Drawing</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/custom-views/making-interactive.html">
+            <span class="en">Making the View Interactive</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/custom-views/optimizing-view.html">
+            <span class="en">Optimizing the View</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/search/index.html">
+            <span class="en">Adding Search Functionality</span>
+          </a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/search/setup.html">
+            <span class="en">Setting up the Search Interface</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/search/search.html">
+            <span class="en">Storing and Searching for Data</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/search/backward-compat.html">
+            <span class="en">Remaining Backward Compatible</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/id-auth/index.html">
+            <span class="en">Remembering Users</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/id-auth/identify.html">
+            <span class="en">Remembering Your User</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/id-auth/authenticate.html">
+            <span class="en">Authenticating to OAuth2 Services</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/id-auth/custom_auth.html">
+            <span class="en">Creating a Custom Account Type</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/sharing/index.html">
+            <span class="en">Sharing Content</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/sharing/send.html">
+            <span class="en">Sending Content to Other Apps</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/sharing/receive.html">
+            <span class="en">Receiving Content from Other Apps</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/sharing/shareaction.html">
+            <span class="en">Adding an Easy Share Action</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/camera/index.html">
+            <span class="en">Capturing Photos</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/camera/photobasics.html">
+            <span class="en">Taking Photos Simply</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/camera/videobasics.html">
+            <span class="en">Recording Videos Simply</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/camera/cameradirect.html">
+            <span class="en">Controlling the Camera</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/multiple-apks/index.html">
+            <span class="en">Maintaining Multiple APKs</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/multiple-apks/api.html">
+            <span class="en">Creating Multiple APKs for Different API Levels</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/multiple-apks/screensize.html">
+            <span class="en">Creating Multiple APKs for Different Screen Sizes</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/multiple-apks/texture.html">
+            <span class="en">Creating Multiple APKs for Different GL Textures</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/multiple-apks/multiple.html">
+            <span class="en">Creating Multiple APKs with 2+ Dimensions</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/backward-compatible-ui/index.html">
+            <span class="en">Creating Backward-Compatible UIs</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/abstracting.html">
+            <span class="en">Abstracting the New APIs</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/new-implementation.html">
+            <span class="en">Proxying to the New APIs</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/older-implementation.html">
+            <span class="en">Creating an Implementation with Older APIs</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/backward-compatible-ui/using-component.html">
+            <span class="en">Using the Version-Aware Component</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/enterprise/index.html">
+            <span class="en">Developing for Enterprise</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/enterprise/device-management-policy.html">
+            <span class="en">Enhancing Security with Device Management Policies</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/monetization/index.html">
+            <span class="en">Monetizing Your App</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/monetization/ads-and-ux.html">
+            <span class="en">Advertising without Compromising User Experience</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/design-navigation/index.html">
+            <span class="en">Designing Effective Navigation</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/design-navigation/screen-planning.html">
+            <span class="en">Planning Screens and Their Relationships</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/design-navigation/multiple-sizes.html">
+            <span class="en">Planning for Multiple Touchscreen Sizes</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/design-navigation/descendant-lateral.html">
+            <span class="en">Providing Descendant and Lateral Navigation</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/design-navigation/ancestral-temporal.html">
+            <span class="en">Providing Ancestral and Temporal Navigation</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/design-navigation/wireframing.html">
+            <span class="en">Putting it All Together: Wireframing the Example App</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/implementing-navigation/index.html">
+            <span class="en">Implementing Effective Navigation</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/implementing-navigation/lateral.html">
+            <span class="en">Implementing Lateral Navigation</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/implementing-navigation/ancestral.html">
+            <span class="en">Implementing Ancestral Navigation</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/implementing-navigation/temporal.html">
+            <span class="en">Implementing Temporal Navigation</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/implementing-navigation/descendant.html">
+            <span class="en">Implementing Descendant Navigation</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/tv/index.html">
+           <span class="en">Designing for TV</span>
+           </a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/tv/optimizing-layouts-tv.html">
+            <span class="en">Optimizing Layouts for TV</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/tv/optimizing-navigation-tv.html">
+            <span class="en">Optimizing Navigation for TV</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/tv/unsupported-features-tv.html">
+            <span class="en">Handling Features Not Supported on TV</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+      
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/displaying-bitmaps/index.html">
+            <span class="en">Displaying Bitmaps Efficiently</span>
+          </a>
+        </div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/load-bitmap.html">
+            <span class="en">Loading Large Bitmaps Efficiently</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/process-bitmap.html">
+            <span class="en">Processing Bitmaps Off the UI Thread</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/cache-bitmap.html">
+            <span class="en">Caching Bitmaps</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/displaying-bitmaps/display-bitmap.html">
+            <span class="en">Displaying Bitmaps in Your UI</span>
+          </a></li>
+        </ul>
+      </li>
+
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot ?>training/accessibility/index.html">
+            <span class="en">Implementing Accessibility</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/accessibility/accessible-app.html">
+            <span class="en">Developing Accessible Applications</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/accessibility/service.html">
+            <span class="en">Developing Accessibility Services</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+
+      <li class="nav-section">
+        <div class="nav-section-header"><a href="<?cs var:toroot
+?>training/graphics/opengl/index.html">
+            <span class="en">Displaying Graphics with OpenGL ES</span>
+          </a></div>
+        <ul>
+          <li><a href="<?cs var:toroot ?>training/graphics/opengl/environment.html">
+            <span class="en">Building an OpenGL ES Environment</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/graphics/opengl/shapes.html">
+            <span class="en">Defining Shapes</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/graphics/opengl/draw.html">
+            <span class="en">Drawing Shapes</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/graphics/opengl/projection.html">
+            <span class="en">Applying Projection and Camera Views</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/graphics/opengl/motion.html">
+            <span class="en">Adding Motion</span>
+          </a>
+          </li>
+          <li><a href="<?cs var:toroot ?>training/graphics/opengl/touch.html">
+            <span class="en">Responding to Touch Events</span>
+          </a>
+          </li>
+        </ul>
+      </li>
+
+
+    </ul>
+  </li>
+</ul><!-- nav -->
+
+<script type="text/javascript">
+<!--
+    buildToggleLists();
+    changeNavLang(getLangPref());
+//-->
+</script>
diff --git a/docs/html/training/tv/optimizing-layouts-tv.jd b/docs/html/training/tv/optimizing-layouts-tv.jd
index 49c278c..a6db052 100644
--- a/docs/html/training/tv/optimizing-layouts-tv.jd
+++ b/docs/html/training/tv/optimizing-layouts-tv.jd
@@ -50,7 +50,7 @@
 <ul>
   <li>Put on-screen navigational controls on the left or right side of the screen and save the 
   vertical space for content.</li>
-  <li>Create UIs that are divided into sections, by using <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> 
+  <li>Create UIs that are divided into sections, by using <a href="{@docRoot}guide/components/fragments.html">Fragments</a> 
   and use view groups like {@link android.widget.GridView} instead 
   of {@link android.widget.ListView} to make better use of the 
   horizontal screen space.</li>
@@ -157,7 +157,7 @@
 </p>
 
 <p>
-To get the best scaling results for images, provide them as <a href="{@docRoot}guide/developing/tools/draw9patch.html">
+To get the best scaling results for images, provide them as <a href="{@docRoot}tools/help/draw9patch.html">
 9-patch image</a> elements if possible.
 If you provide low quality or small images in your layouts, they will appear pixelated, fuzzy, or grainy. This 
 is not a good experience for the user. Instead, use high-quality images. 
diff --git a/docs/html/videos/index.jd b/docs/html/videos/index.jd
deleted file mode 100644
index 7f5df78..0000000
--- a/docs/html/videos/index.jd
+++ /dev/null
@@ -1,355 +0,0 @@
-videos=true
-page.title=Videos
-@jd:body
-
-<script src="http://swfobject.googlecode.com/svn/trunk/swfobject/swfobject.js" type="text/javascript"></script>
-<script src="{@docRoot}assets/jquery-history.js" type="text/javascript"></script>
-<script type="text/javascript">
-// for debugging in FF, so other browsers ignore the console commands.
-var console;
-if (!console) console = { 'log': function() {} };
-
-/* This 'playlist' object defines the playlist IDs for each tab.
- * Each name inside 'playlist' corresponds to class names for the tab that the playlists belong to (eg: "googleioTab" and "googleioBox" divs).
- * Each string in 'ids' is the ID of a YouTube playlist that belongs in the corresponding tab.
- */
-var playlists = {
-  'googleio' : {
-    'ids': ["734A052F802C96B9"]
-  },
-  'about' : {
-    'ids': ["D7C64411AF40DEA5","611F8C5DBF49CEC6"]
-  },
-  'developertips' : {
-    'ids': ["43E15866EF0033A2"]
-  },
-  'developersandbox' : {
-    'ids': ["77426907BBAD558E"]
-  }
-};
-
-/* Some playlists include the title in the description meta-data, so we need to account for this when building the thumbnail lists, so we don't show the title twice
- * This string is read via indexOf(), so multiple IDs need only be comma-separated in this string.
- */
-var playlistsWithTitleInDescription = "734A052F802C96B9";
-
-/* This 'featured' object defines the Feature Videos list.
- * Each playlist ID is paired with a custom video description.
- */
-var featured = {
-// Android Development Tools
-  'Oq05KqjXTvs' : "The team behind the Android Development Tools demonstrate several powerful features for app development, including new capabilities in the Eclipse layout editor.",
-// Android UIs for phones and tablets
-  'WGIU2JX1U5Y' : "This talk from the Android UI team explains several design patterns that the team recommends you use when designing your application for screens of all sizes.",
-// Android Protips
-  'twmuBbC_oB8' : "In this talk, you'll learn how to create a well polished app that abides by several key virtues, using advanced development techniques and some lesser known APIs."
-};
-
-/* When an event on the browser history occurs (back, forward, load),
- * load the video found in the URL hash
- */
-$(window).history(function(e, hash) {
-  if (location.href.indexOf("#v=") != -1) {
-    videoId = location.href.split("#v=");
-    clickVideo(videoId[1]); // click the link with a matching class
-  }
-});
-
-/* Load a video into the player box.
- * @param id        The YouTube video ID
- * @param title     The video title to display in the player box (character escaped)
- * @param autoplay  Whether to automatically play the video
- */
-function loadVideo(id, title, autoplay) {
-  if($("." + id).hasClass("noplay")) {
-  	//console.log("noplay");
-  	autoplay = false;
-  	$("." + id).removeClass("noplay");
-  }
-  swfobject.embedSWF('http://www.youtube.com/v/' + id + '&rel=1&border=0&fs=1&autoplay=' +
-      (autoplay?1:0), 'player', '500', '334', '9.0.0', false, false, {allowfullscreen: 'true'});
-  $("#videoPlayerTitle").html("<h2>" + unescape(title) + "</h2>");
-
-  $.history.add('v=' + id); // add the current video to the browser history
-  document.getElementById("doc-content").scrollTop = 0; // scroll the window to the top
-}
-
-/* Draw all videos from a playlist into a 'videoPreviews' list
- * @param data  The feed data returned from the youtube request
- */
-function renderPlaylist(data) {
-  var MAX_DESC_LENGTH = 390; // the length at which we will trim the description
-  var feed = data.feed;
-  var entries = feed.entry || [];
-  var playlistId = feed.yt$playlistId.$t;
-
-  var ul = $('<ul class="videoPreviews" />');
-
-  // Loop through each entry (each video) and add it to the 'videoPreviews' list
-  for (var i = 0; i < entries.length; i++) {
-    var entry = entries[i];
-
-    var title = entry.title.$t;
-    var id = entry.media$group.yt$videoid.$t;
-    var thumbUrl = entry.media$group.media$thumbnail[0].url;
-    var fullDescription = entry.media$group.media$description.$t;
-    var playerUrl = entry.media$group.media$content[0].url;
-
-    // Check whether this playlist includes the video title inside the description meta-data, so we can remove it
-    if (playlistsWithTitleInDescription.indexOf(playlistId) != -1) {
-      var lines = fullDescription.split("\n");
-      // If the first line includes the first 17 chars from the title, let's use the title from the description instead (because it's a more complete title)
-      // This accounts for, literally, "Google I/O 2009 -", which is (so far) the min AND max for properly identifying a title in the only playlist with titles in the description
-      if (lines[0].indexOf(title.slice(0,16)) != -1) {
-			h3Title = "<h3>" + lines[0] + "</h3>";
-      	if (lines[2].length < 30) lines = lines.slice(3);  // also, if the second line is very short (the speaker name), slice it out too
-      	else lines = lines.slice(1);  // otherwise, slice after the first line
-      }
-      fullDescription = lines.join("");
-    }
-
-    var shortDescription = fullDescription.substr(0, MAX_DESC_LENGTH);
-    shortDescription += shortDescription.length == MAX_DESC_LENGTH ? "..." : ""; // add ellipsis if we've chopped the description
-
-    var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>');
-    var a = $('<a class="' + id + '" href="#" onclick="loadVideo(\'' + id + '\',\'' + escape(title) + '\',true); return setSelected(this);" />');
-    var pShortDescription = $('<p class="short">' + shortDescription + '</p>');
-    var pFullDescription = $('<p class="full">' + fullDescription + '</p>');
-    var h3Title = "<h3>" + title + "</h3>";
-    var pToggle = "<p class='toggle'><a href='#' onclick='return toggleDescription(this)'><span class='more'>more</span><span class='less'>less</span></a></p>";
-    var li = $('<li/>');
-
-    li.append(a);
-    a.append(img).append(h3Title).append(pShortDescription);
-
-    // Add the full description and "more/less" toggle, if necessary
-    if (fullDescription.length > MAX_DESC_LENGTH) {
-    	a.append(pFullDescription);
-    	li.append(pToggle);
-    }
-
-    ul.append(li);
-  }
-
-  // Now add the 'videoPreviews' list to the page, and be sure we put it in the right tab
-  // This is the part that allows us to put multiple playlists in one tab
-  for (var x in playlists) {
-    var ids = playlists[x].ids;
-    for (var i in ids) {
-      if (ids[i] == playlistId) {
-        $("#"+x+"Box").append(ul);
-        break;
-      }
-    }
-  }
-}
-
-/* Draw a featured video into the existing 'videoPreviews' list
- * @param data  The video data returned from the youtube request
- */
-function renderFeatured(data) {
-  var MAX_TITLE_LENGTH = 48;
-  var entry = data.entry || [];
-  var id = entry.media$group.yt$videoid.$t;
-  var description = featured[id];
-  var title = entry.title.$t;
-  var thumbUrl = entry.media$group.media$thumbnail[0].url;
-  var playerUrl = entry.media$group.media$content[0].url;
-
-  var ellipsis = title.length > MAX_TITLE_LENGTH ? "..." : "";
-
-  var h3Title = "<h3>"+ title.substr(0,MAX_TITLE_LENGTH) + ellipsis + "</h3>";
-  var img = $('<img src="' + thumbUrl + '" width="120" height="90"/>');
-  var p = $('<p>' + description + '</p>');
-  var a = $('<a class="' + id + '" href="#" onclick="loadVideo(\'' + id + '\',\'' + title + '\',true); return setSelected(this);" />');
-  var li = $("<li/>");
-
-  a.append(h3Title).append(img).append(p);
-  li.append(a);
-
-  $("#mainBodyRight .videoPreviews").append(li);
-}
-
-/* Request the playlist feeds from YouTube */
-function showPlaylists() {
-  for (var x in playlists) {
-    var ids = playlists[x].ids;
-    for (var i in ids) {
-      var script = "<script type='text/javascript' src='http://gdata.youtube.com/feeds/api/playlists/"
-      				  + ids[i] +
-      				  "?v=2&alt=json-in-script&max-results=50&callback=renderPlaylist'><\/script>";
-    	$("body").append(script);
-    }
-  }
-}
-
-/* Request the featured videos from YouTube */
-function showFeatured() {
-  for (var id in featured) {
-    var script = "<script type='text/javascript' src='http://gdata.youtube.com/feeds/api/videos/"
-    					+ id +
-    					"?v=2&alt=json-in-script&callback=renderFeatured'><\/script>";
-    $("body").append(script);
-  }
-}
-
-/* Reveal a tab (playlist) box
- * @param name  The name of the tab
- */
-function showBox(name) {
-  $("#"+name+"Box").addClass("selected").siblings().removeClass("selected");
-  $("#"+name+"Tab").addClass("selected").siblings().removeClass("selected");
-  return false;
-}
-
-/* Highlight a video thumbnail, including all duplicates that there may be
- * @param link  The link <a> object that was clicked
- */
-function setSelected(link) {
-  var videoId = $(link).attr("class");
-  if (videoId.indexOf("selected") != -1) {  // this means this video is already selected and playing, so bail out
-    return false;
-  }
-  $(".videoPreviews .selected").removeClass("selected");
-  $("a." + videoId).addClass("selected").each( function (i) {
-  	 if ($(this).is(":hidden")) {
-  	   var boxName = $(this).parent().parent().parent().attr("id").split("Box");
-  	   $("#"+boxName[0]+"Tab a").click();
-  	 }
-  });
-  return false;
-}
-
-/* Reveal and hide the long/short descriptions for a video in the playlist
- * @param link  The link <a> object that was clicked
- */
-function toggleDescription(link) {
-	var aToggle = $(link);
-	$("span", aToggle).toggle();
-	var aDescription = $(">a", aToggle.parent().parent());
-	$("p.short", aDescription).toggle();
-	$("p.full", aDescription).toggle();
-	if ($("span.less", aToggle).is(":visible")) {
-		aDescription.css("height", "auto");
-	} else {
-		aDescription.css("height", "90px");
-	}
-	return false;
-}
-
-/* Add actions to the page onload event so that we load a video right away */
-addLoadEvent(function () {
-  // if there's a video url in the hash, click that video
-  if (location.href.indexOf("#v=") != -1) {
-    var videoId = location.href.split("#v=");
-    clickVideo(videoId[1]);
-  } else { // otherwise, click the default video
-    clickDefaultVideo();
-  }
-});
-
-
-var clickVideoAttempts = 0; // Used with clickVideo()
-
-/* Click a video in order to load it and select it
- * @param videoId  The ID of the video to click
- */
-function clickVideo(videoId) {
-  if (!isAlphaNumeric(videoId)) {
-    clickDefaultVideo();
-    return;
-  }
-  
-  if ($("." + videoId).length != 0) {  // if we find the video, click it and return
-    $("." + videoId).addClass("noplay"); // add class to indicate we should NOT autoplay (class removed by loadVideo)
-    $("." + videoId + ":first").click();
-    return;
-  } else { // if we don't find it, increment clickVideoAttempts
-    console.log("video NOT found: " + videoId);
-    clickVideoAttempts++;
-  }
-
-  // if we don't find it after 20 attempts (2 seconds), click the first feature video
-  if (clickVideoAttempts > 10) {
-    console.log("video never found, clicking default...");
-    clickVideoAttempts = 0;
-    clickDefaultVideo();
-  } else { // try again after 100 milliseconds
-    setTimeout('clickVideo("' + videoId + '")', 100);
-  }
-}
-
-/* returns true if the provided text is alphanumeric, false otherwise 
-   TODO: move this to the dev site js library */
-function isAlphaNumeric(text){
-  var regex=/^[0-9A-Za-z]+$/; //^[a-zA-z]+$/
-  if(regex.test(text)){
-    return true;
-  } else {
-    console.log("Bogus video ID");
-    return false;
-  }
-}
-
-/* Click the default video that should be loaded on page load (the first video in the featured list) */
-function clickDefaultVideo() {
-  if ($("#mainBodyRight .videoPreviews a:first").length != 0) {
-    var videoId = $("#mainBodyRight .videoPreviews a:first").attr("class");
-    $("." + videoId).addClass("noplay"); // add class to indicate we should NOT autoplay (class removed by loadVideo)
-    $("." + videoId + ":first").click();
-    return;
-  } else { // if we don't find it, increment clickVideoAttempts
-    console.log("default video NOT found");
-    clickVideoAttempts++;
-  }
-
-  // if we don't find it after 50 attempts (5 seconds), just fail
-  if (clickVideoAttempts > 50) {
-    console.log("default video never found...");
-  } else { // try again after 100 milliseconds
-    setTimeout('clickDefaultVideo()', 100);
-  }
-}
-</script>
-
-  <div id="mainBodyFixed">
-
-    <div id="mainBodyLeft" class="videoPlayer" >
-      <div id="videoPlayerBox">
-        <div id="videoBorder">
-          <div id="videoPlayerTitle"></div>
-          <div id="objectWrapper">
-            <object id="player"></object>
-          </div>
-        </div>
-      </div>
-    </div><!-- end mainBodyLeft -->
-
-    <div id="mainBodyRight" class="videoPlayer">
-      <h2>Featured Videos</h2>
-      <ul class="videoPreviews"></ul>
-    </div><!-- end mainBodyRight -->
-
-    <ul id="videoTabs">
-      <li id="aboutTab" class="selected"><a onclick="return showBox('about');" href="#">About the Platform</a></li>
-      <li id="developertipsTab"><a onclick="return showBox('developertips');" href="#">Developer Tips</a></li>
-      <li id="googleioTab"><a onclick="return showBox('googleio');" href="#">Google I/O Sessions</a></li>
-      <li id="developersandboxTab"><a onclick="return showBox('developersandbox');" href="#">Developer Sandbox</a></li>
-    </ul>
-
-    <div id="videos">
-      <div id="aboutBox" class="selected"></div>
-      <div id="developertipsBox"></div>
-      <div id="googleioBox"></div>
-      <div id="developersandboxBox"></div>
-    </div>
-
-  </div><!-- end mainBodyFixed -->
-
-<script type="text/javascript">
-// Initialization actions
-showFeatured();            // load featured videos
-showPlaylists();           // load playlists
-</script>
-
-
