Merge "Improve heuristics for detecting wireless chargers." into jb-mr1.1-dev
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 5dc9da2..e779746 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -2838,7 +2838,7 @@
      * item has been selected.
      * <p>
      * It is not safe to hold onto the context menu after this method returns.
-     * {@inheritDoc}
+     *
      */
     public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
     }
diff --git a/core/java/android/appwidget/AppWidgetManager.java b/core/java/android/appwidget/AppWidgetManager.java
index 9c19766..6b1c3e2 100644
--- a/core/java/android/appwidget/AppWidgetManager.java
+++ b/core/java/android/appwidget/AppWidgetManager.java
@@ -239,7 +239,7 @@
     public static final String EXTRA_CUSTOM_SORT = "customSort";
 
     /**
-     * A sentiel value that the AppWidget manager will never return as a appWidgetId.
+     * A sentinel value that the AppWidget manager will never return as a appWidgetId.
      */
     public static final int INVALID_APPWIDGET_ID = 0;
 
diff --git a/core/java/android/os/FileObserver.java b/core/java/android/os/FileObserver.java
index 667ce68..d633486 100644
--- a/core/java/android/os/FileObserver.java
+++ b/core/java/android/os/FileObserver.java
@@ -32,7 +32,7 @@
  *
  * <p>Each FileObserver instance monitors a single file or directory.
  * If a directory is monitored, events will be triggered for all files and
- * subdirectories (recursively) inside the monitored directory.</p>
+ * subdirectories inside the monitored directory.</p>
  *
  * <p>An event mask is used to specify which changes or actions to report.
  * Event type constants are used to describe the possible changes in the
diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java
index d7c7f46..001d020 100644
--- a/core/java/android/view/VolumePanel.java
+++ b/core/java/android/view/VolumePanel.java
@@ -302,6 +302,7 @@
         lp.type = LayoutParams.TYPE_VOLUME_OVERLAY;
         lp.width = LayoutParams.WRAP_CONTENT;
         lp.height = LayoutParams.WRAP_CONTENT;
+        lp.privateFlags |= LayoutParams.PRIVATE_FLAG_FORCE_SHOW_NAV_BAR;
         window.setAttributes(lp);
         window.addFlags(LayoutParams.FLAG_NOT_FOCUSABLE | LayoutParams.FLAG_NOT_TOUCH_MODAL
                 | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH);
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 3b31ff6..6a67d8b 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -946,6 +946,13 @@
         public static final int PRIVATE_FLAG_SHOW_FOR_ALL_USERS = 0x00000010;
 
         /**
+         * Special flag for the volume overlay: force the window manager out of "hide nav bar"
+         * mode while the window is on screen.
+         *
+         * {@hide} */
+        public static final int PRIVATE_FLAG_FORCE_SHOW_NAV_BAR = 0x00000020;
+
+        /**
          * Control flags that are private to the platform.
          * @hide
          */
diff --git a/core/java/android/webkit/package.html b/core/java/android/webkit/package.html
index 4ed08da..7182488 100644
--- a/core/java/android/webkit/package.html
+++ b/core/java/android/webkit/package.html
@@ -1,7 +1,7 @@
 <html>
 <body>
-Provides tools for browsing the web.
-<p>The only classes or interfaces in this package intended for use by SDK
-developers are WebView, BroswerCallbackAdapter, BrowserCallback, and CookieManager.
+<p>Provides tools for browsing the web.
+<p>For more information about building apps with web-based content, see the
+<a href="{@docRoot}guide/webapps/overview.html">Web Apps Overview</a>.
 </body>
 </html>
\ No newline at end of file
diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java
index 6fb459c..27ecd9a 100644
--- a/core/java/com/android/internal/widget/ActionBarView.java
+++ b/core/java/com/android/internal/widget/ActionBarView.java
@@ -1051,6 +1051,7 @@
                     (mDisplayOptions & ActionBar.DISPLAY_SHOW_TITLE) != 0;
             if (showTitle) {
                 x += positionChild(mTitleLayout, x, y, contentHeight, isLayoutRtl);
+                homeSlop = mTitleLayout.getWidth();
             }
 
             switch (mNavigationMode) {
diff --git a/docs/downloads/brand/af_generic_rgb_wo.ai b/docs/downloads/brand/af_generic_rgb_wo.ai
new file mode 100644
index 0000000..2cec2e97
--- /dev/null
+++ b/docs/downloads/brand/af_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ar_generic_rgb_wo.ai b/docs/downloads/brand/ar_generic_rgb_wo.ai
new file mode 100644
index 0000000..0eeb4f7
--- /dev/null
+++ b/docs/downloads/brand/ar_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/be_generic_rgb_wo.ai b/docs/downloads/brand/be_generic_rgb_wo.ai
new file mode 100644
index 0000000..3b82926
--- /dev/null
+++ b/docs/downloads/brand/be_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/bg_generic_rgb_wo.ai b/docs/downloads/brand/bg_generic_rgb_wo.ai
new file mode 100644
index 0000000..51e2a5d
--- /dev/null
+++ b/docs/downloads/brand/bg_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ca_generic_rgb_wo.ai b/docs/downloads/brand/ca_generic_rgb_wo.ai
new file mode 100644
index 0000000..07b7fc5
--- /dev/null
+++ b/docs/downloads/brand/ca_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/cs_generic_rgb_wo.ai b/docs/downloads/brand/cs_generic_rgb_wo.ai
new file mode 100644
index 0000000..a998cb6
--- /dev/null
+++ b/docs/downloads/brand/cs_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/da_generic_rgb_wo.ai b/docs/downloads/brand/da_generic_rgb_wo.ai
new file mode 100644
index 0000000..d1bdc08
--- /dev/null
+++ b/docs/downloads/brand/da_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/de_app_rgb_wo.ai b/docs/downloads/brand/de_app_rgb_wo.ai
new file mode 100644
index 0000000..c0e8da3
--- /dev/null
+++ b/docs/downloads/brand/de_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/de_generic_rgb_wo.ai b/docs/downloads/brand/de_generic_rgb_wo.ai
new file mode 100644
index 0000000..e1463ef
--- /dev/null
+++ b/docs/downloads/brand/de_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/el_generic_rgb_wo.ai b/docs/downloads/brand/el_generic_rgb_wo.ai
new file mode 100644
index 0000000..0f7581b
--- /dev/null
+++ b/docs/downloads/brand/el_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/en_app_rgb_wo.ai b/docs/downloads/brand/en_app_rgb_wo.ai
new file mode 100644
index 0000000..db27314
--- /dev/null
+++ b/docs/downloads/brand/en_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/en_generic_rgb_wo.ai b/docs/downloads/brand/en_generic_rgb_wo.ai
new file mode 100644
index 0000000..57c1e47
--- /dev/null
+++ b/docs/downloads/brand/en_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/es-419_app_rgb_wo.ai b/docs/downloads/brand/es-419_app_rgb_wo.ai
new file mode 100644
index 0000000..9285921
--- /dev/null
+++ b/docs/downloads/brand/es-419_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/es-419_generic_rgb_wo.ai b/docs/downloads/brand/es-419_generic_rgb_wo.ai
new file mode 100644
index 0000000..1629e3e
--- /dev/null
+++ b/docs/downloads/brand/es-419_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/es_app_rgb_wo.ai b/docs/downloads/brand/es_app_rgb_wo.ai
new file mode 100644
index 0000000..78a3e5a4
--- /dev/null
+++ b/docs/downloads/brand/es_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/es_generic_rgb_wo.ai b/docs/downloads/brand/es_generic_rgb_wo.ai
new file mode 100644
index 0000000..bc839bc
--- /dev/null
+++ b/docs/downloads/brand/es_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/et_generic_rgb_wo.ai b/docs/downloads/brand/et_generic_rgb_wo.ai
new file mode 100644
index 0000000..693a73e
--- /dev/null
+++ b/docs/downloads/brand/et_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/fa_generic_rgb_wo.ai b/docs/downloads/brand/fa_generic_rgb_wo.ai
new file mode 100644
index 0000000..d6a0a8b
--- /dev/null
+++ b/docs/downloads/brand/fa_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/fi_generic_rgb_wo.ai b/docs/downloads/brand/fi_generic_rgb_wo.ai
new file mode 100644
index 0000000..1b18681
--- /dev/null
+++ b/docs/downloads/brand/fi_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/fil_generic_rgb_wo.ai b/docs/downloads/brand/fil_generic_rgb_wo.ai
new file mode 100644
index 0000000..958568a
--- /dev/null
+++ b/docs/downloads/brand/fil_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/fr_app_rgb_wo.ai b/docs/downloads/brand/fr_app_rgb_wo.ai
new file mode 100644
index 0000000..288c6da
--- /dev/null
+++ b/docs/downloads/brand/fr_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/fr_generic_rgb_wo.ai b/docs/downloads/brand/fr_generic_rgb_wo.ai
new file mode 100644
index 0000000..a542afc
--- /dev/null
+++ b/docs/downloads/brand/fr_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/hr_generic_rgb_wo.ai b/docs/downloads/brand/hr_generic_rgb_wo.ai
new file mode 100644
index 0000000..266257e
--- /dev/null
+++ b/docs/downloads/brand/hr_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/hu_generic_rgb_wo.ai b/docs/downloads/brand/hu_generic_rgb_wo.ai
new file mode 100644
index 0000000..dd436b6
--- /dev/null
+++ b/docs/downloads/brand/hu_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/id-in_generic_rgb_wo.ai b/docs/downloads/brand/id-in_generic_rgb_wo.ai
new file mode 100644
index 0000000..62d0be1
--- /dev/null
+++ b/docs/downloads/brand/id-in_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/it_app_rgb_wo.ai b/docs/downloads/brand/it_app_rgb_wo.ai
new file mode 100644
index 0000000..32024e4
--- /dev/null
+++ b/docs/downloads/brand/it_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/it_generic_rgb_wo.ai b/docs/downloads/brand/it_generic_rgb_wo.ai
new file mode 100644
index 0000000..a483b36
--- /dev/null
+++ b/docs/downloads/brand/it_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/iw-he_generic_rgb_wo.ai b/docs/downloads/brand/iw-he_generic_rgb_wo.ai
new file mode 100644
index 0000000..52c9641
--- /dev/null
+++ b/docs/downloads/brand/iw-he_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ja_app_rgb_wo.ai b/docs/downloads/brand/ja_app_rgb_wo.ai
new file mode 100644
index 0000000..dacf38d
--- /dev/null
+++ b/docs/downloads/brand/ja_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ja_generic_rgb_wo.ai b/docs/downloads/brand/ja_generic_rgb_wo.ai
new file mode 100644
index 0000000..fdfb9545
--- /dev/null
+++ b/docs/downloads/brand/ja_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ko_app_rgb_wo.ai b/docs/downloads/brand/ko_app_rgb_wo.ai
new file mode 100644
index 0000000..4463149
--- /dev/null
+++ b/docs/downloads/brand/ko_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ko_generic_rgb_wo.ai b/docs/downloads/brand/ko_generic_rgb_wo.ai
new file mode 100644
index 0000000..0d2d8bd
--- /dev/null
+++ b/docs/downloads/brand/ko_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/lt_generic_rgb_wo.ai b/docs/downloads/brand/lt_generic_rgb_wo.ai
new file mode 100644
index 0000000..fc679c7
--- /dev/null
+++ b/docs/downloads/brand/lt_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/lv_generic_rgb_wo.ai b/docs/downloads/brand/lv_generic_rgb_wo.ai
new file mode 100644
index 0000000..b07b28b
--- /dev/null
+++ b/docs/downloads/brand/lv_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ms_generic_rgb_wo.ai b/docs/downloads/brand/ms_generic_rgb_wo.ai
new file mode 100644
index 0000000..c2f052e
--- /dev/null
+++ b/docs/downloads/brand/ms_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/nl_app_rgb_wo.ai b/docs/downloads/brand/nl_app_rgb_wo.ai
new file mode 100644
index 0000000..60d1ad8
--- /dev/null
+++ b/docs/downloads/brand/nl_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/nl_generic_rgb_wo.ai b/docs/downloads/brand/nl_generic_rgb_wo.ai
new file mode 100644
index 0000000..03eed23
--- /dev/null
+++ b/docs/downloads/brand/nl_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/no_generic_rgb_wo.ai b/docs/downloads/brand/no_generic_rgb_wo.ai
new file mode 100644
index 0000000..703e99a
--- /dev/null
+++ b/docs/downloads/brand/no_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/pl_generic_rgb_wo.ai b/docs/downloads/brand/pl_generic_rgb_wo.ai
new file mode 100644
index 0000000..fac15d2
--- /dev/null
+++ b/docs/downloads/brand/pl_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/pt-br_app_rgb_wo.ai b/docs/downloads/brand/pt-br_app_rgb_wo.ai
new file mode 100644
index 0000000..686455d
--- /dev/null
+++ b/docs/downloads/brand/pt-br_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/pt-br_generic_rgb_wo.ai b/docs/downloads/brand/pt-br_generic_rgb_wo.ai
new file mode 100644
index 0000000..00379cc
--- /dev/null
+++ b/docs/downloads/brand/pt-br_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/pt-pt_app_rgb_wo.ai b/docs/downloads/brand/pt-pt_app_rgb_wo.ai
new file mode 100644
index 0000000..bd19a28
--- /dev/null
+++ b/docs/downloads/brand/pt-pt_app_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/pt-pt_generic_rgb_wo.ai b/docs/downloads/brand/pt-pt_generic_rgb_wo.ai
new file mode 100644
index 0000000..29476cc
--- /dev/null
+++ b/docs/downloads/brand/pt-pt_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ro_generic_rgb_wo.ai b/docs/downloads/brand/ro_generic_rgb_wo.ai
new file mode 100644
index 0000000..6152a94
--- /dev/null
+++ b/docs/downloads/brand/ro_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/ru_generic_rgb_wo.ai b/docs/downloads/brand/ru_generic_rgb_wo.ai
new file mode 100644
index 0000000..1e73a61
--- /dev/null
+++ b/docs/downloads/brand/ru_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/sk_generic_rgb_wo.ai b/docs/downloads/brand/sk_generic_rgb_wo.ai
new file mode 100644
index 0000000..50735bd
--- /dev/null
+++ b/docs/downloads/brand/sk_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/sl_generic_rgb_wo.ai b/docs/downloads/brand/sl_generic_rgb_wo.ai
new file mode 100644
index 0000000..96f4708
--- /dev/null
+++ b/docs/downloads/brand/sl_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/sr_generic_rgb_wo.ai b/docs/downloads/brand/sr_generic_rgb_wo.ai
new file mode 100644
index 0000000..53dacd9
--- /dev/null
+++ b/docs/downloads/brand/sr_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/sv_generic_rgb_wo.ai b/docs/downloads/brand/sv_generic_rgb_wo.ai
new file mode 100644
index 0000000..f148dd3
--- /dev/null
+++ b/docs/downloads/brand/sv_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/sw_generic_rgb_wo.ai b/docs/downloads/brand/sw_generic_rgb_wo.ai
new file mode 100644
index 0000000..00d660c
--- /dev/null
+++ b/docs/downloads/brand/sw_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/th_generic_rgb_wo.ai b/docs/downloads/brand/th_generic_rgb_wo.ai
new file mode 100644
index 0000000..b24eff6
--- /dev/null
+++ b/docs/downloads/brand/th_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/tr_generic_rgb_wo.ai b/docs/downloads/brand/tr_generic_rgb_wo.ai
new file mode 100644
index 0000000..39db427
--- /dev/null
+++ b/docs/downloads/brand/tr_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/uk_generic_rgb_wo.ai b/docs/downloads/brand/uk_generic_rgb_wo.ai
new file mode 100644
index 0000000..81f510f
--- /dev/null
+++ b/docs/downloads/brand/uk_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/vi_generic_rgb_wo.ai b/docs/downloads/brand/vi_generic_rgb_wo.ai
new file mode 100644
index 0000000..5a0c796
--- /dev/null
+++ b/docs/downloads/brand/vi_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/zh-cn_generic_rgb_wo.ai b/docs/downloads/brand/zh-cn_generic_rgb_wo.ai
new file mode 100644
index 0000000..078b024
--- /dev/null
+++ b/docs/downloads/brand/zh-cn_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/zh-hk_generic_rgb_wo.ai b/docs/downloads/brand/zh-hk_generic_rgb_wo.ai
new file mode 100644
index 0000000..6d3bf0e
--- /dev/null
+++ b/docs/downloads/brand/zh-hk_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/zh-tw_generic_rgb_wo.ai b/docs/downloads/brand/zh-tw_generic_rgb_wo.ai
new file mode 100644
index 0000000..55d34ba
--- /dev/null
+++ b/docs/downloads/brand/zh-tw_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/brand/zu_generic_rgb_wo.ai b/docs/downloads/brand/zu_generic_rgb_wo.ai
new file mode 100644
index 0000000..cfc14d1
--- /dev/null
+++ b/docs/downloads/brand/zu_generic_rgb_wo.ai
Binary files differ
diff --git a/docs/downloads/training/BitmapFun.zip b/docs/downloads/training/BitmapFun.zip
index e48bfd3..c4ea7aa 100644
--- a/docs/downloads/training/BitmapFun.zip
+++ b/docs/downloads/training/BitmapFun.zip
Binary files differ
diff --git a/docs/html/design/patterns/notifications.jd b/docs/html/design/patterns/notifications.jd
index 1a15a64..0665774 100644
--- a/docs/html/design/patterns/notifications.jd
+++ b/docs/html/design/patterns/notifications.jd
@@ -153,8 +153,13 @@
 <p>To create an app that feels streamlined, pleasant, and respectful, it is important to design your notifications carefully. Notifications embody your app's voice, and contribute to your app's personality. Unwanted or unimportant notifications can annoy the user, so use them judiciously.</p>
 
 <h4>When to display a notification</h4>
-<p>To create an application that people love, it's important to recognize that the user's attention and focus is a resource that must be protected. While Android's notification system has been designed to minimize the impact of notifications on the users attention, it is nonetheless still important to be aware of the fact that notifications are potentially interrupting the users task flow. As you plan your notifications, ask yourself if they are important enough to warrant an interruption. If you are unsure, allow the user to opt into a notification using your apps notification settings or adjust the notifications priority flag.</p>
-<p>Time sensitive events are great opportunities for valuable notifications with high priority, especially if these synchronous events involve other people. For instance, an incoming chat is a real time and synchronous form of communication: there is another user actively waiting on you to respond. Calendar events are another good example of when to use a notification and grab the user's attention, because the event is imminent, and calendar events often involve other people.</p>
+<p>To create an application that people love, it's important to recognize that the user's attention and
+focus is a resource that must be protected. While Android's notification system has been designed
+to minimize the impact of notifications on the users attention, it is nonetheless still important
+to be aware of the fact that notifications are potentially interrupting the users task flow. As you
+plan your notifications, ask yourself if they are important enough to warrant an interruption. If
+you are unsure, allow the user to opt into a notification using your apps notification settings or
+adjust the notifications priority flag.</p>
 <p>While well behaved apps generally only speak when spoken to, there are some limited cases where an
 app actually should interrupt the user with an unprompted notification.</p>
 <p>Notifications should be used primarily for <strong>time sensitive events</strong>, and especially if these
diff --git a/docs/html/distribute/googleplay/promote/badge-files.jd b/docs/html/distribute/googleplay/promote/badge-files.jd
new file mode 100644
index 0000000..92001ed
--- /dev/null
+++ b/docs/html/distribute/googleplay/promote/badge-files.jd
@@ -0,0 +1,289 @@
+page.title=Google Play Badge Files
+@jd:body
+
+
+
+
+<style>
+table tr td {border:0}
+</style>
+
+<p>The following links provide the Adobe&reg; Illustrator&reg; (.ai) file for the
+two Google Play badges.</p>
+
+<hr>
+<img src="{@docRoot}images/brand/en_generic_rgb_wo_60.png" alt="Get It On Google Play">
+
+<div style="clear:left">&nbsp;</div>
+
+<div class="col-4" style="margin-left:0">
+
+       <a href="{@docRoot}downloads/brand/en_generic_rgb_wo.ai">English (English)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/af_generic_rgb_wo.ai">Afrikaans (Afrikaans)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ar_generic_rgb_wo.ai">العربية (Arabic)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/be_generic_rgb_wo.ai">Беларуская (Belarusian)</a><br/>
+       
+       <a href="{@docRoot}downloads/brand/bg_generic_rgb_wo.ai">български (Bulgarian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ca_generic_rgb_wo.ai">Català (Catalan)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zh-cn_generic_rgb_wo.ai">中文 (中国) (Chinese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zh-hk_generic_rgb_wo.ai">中文(香港) (Chinese Hong Kong)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zh-tw_generic_rgb_wo.ai">中文 (台灣) (Chinese Taiwan)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/hr_generic_rgb_wo.ai">Hrvatski (Croatian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/cs_generic_rgb_wo.ai">Česky (Czech)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/da_generic_rgb_wo.ai">Dansk (Danish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/nl_generic_rgb_wo.ai">Nederlands (Dutch)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/et_generic_rgb_wo.ai">Eesti keel (Estonian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/fa_generic_rgb_wo.ai">فارسی (Farsi Persian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/fil_generic_rgb_wo.ai">Tagalog (Filipino)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/fi_generic_rgb_wo.ai">Suomi (Finnish)</a><br/>
+
+</div>
+
+<div class="col-4">
+
+       <a href="{@docRoot}downloads/brand/fr_generic_rgb_wo.ai">Français (French)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/de_generic_rgb_wo.ai">Deutsch (German)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/el_generic_rgb_wo.ai">Ελληνικά (Greek)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/iw-he_generic_rgb_wo.ai">עברית (Hebrew)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/hu_generic_rgb_wo.ai">Magyar (Hungarian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/id-in_generic_rgb_wo.ai">Bahasa Indonesia (Indonesian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/it_generic_rgb_wo.ai">Italiano (Italian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ja_generic_rgb_wo.ai">日本語 (Japanese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ko_generic_rgb_wo.ai">한국어 (Korean)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/lv_generic_rgb_wo.ai">Latviski (Latvian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/lt_generic_rgb_wo.ai">Lietuviškai (Lithuanian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ms_generic_rgb_wo.ai">Bahasa Melayu (Malay)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/no_generic_rgb_wo.ai">Norsk (Norwegian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/pl_generic_rgb_wo.ai">Polski (Polish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/pt-pt_generic_rgb_wo.ai">Português (Portuguese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/pt-br_generic_rgb_wo.ai">Português Brasil (Portuguese Brazil)</a><br/>
+
+</div>
+
+<div class="col-4" style="margin-right:0">
+
+       <a href="{@docRoot}downloads/brand/ro_generic_rgb_wo.ai">Românã (Romanian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ru_generic_rgb_wo.ai">Pусский (Russian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sr_generic_rgb_wo.ai">Српски / srpski (Serbian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sk_generic_rgb_wo.ai">Slovenčina (Slovak)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sl_generic_rgb_wo.ai">Slovenščina (Slovenian)</a><br/>
+       
+       <a href="{@docRoot}downloads/brand/es_generic_rgb_wo.ai">Español (Spanish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/es-419_generic_rgb_wo.ai">Español Latinoamérica (Spanish Latin America)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sv_generic_rgb_wo.ai">Svenska (Swedish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sw_generic_rgb_wo.ai">Kiswahili (Swahili)</a><br/>
+       
+       <a href="{@docRoot}downloads/brand/th_generic_rgb_wo.ai">ภาษาไทย (Thai)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/tr_generic_rgb_wo.ai">Türkçe (Turkish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/uk_generic_rgb_wo.ai">Українська (Ukrainian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/vi_generic_rgb_wo.ai">Tiếng Việt (Vietnamese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zu_generic_rgb_wo.ai">isiZulu (Zulu)</a><br/>
+
+</div>
+<div style="clear:left">&nbsp;</div>
+
+
+
+
+
+
+<hr>
+<img src="{@docRoot}images/brand/en_app_rgb_wo_60.png" alt="Android App On Google Play">
+
+<div style="clear:left">&nbsp;</div>
+
+<div class="col-8" style="margin-left:0">
+
+       <a href="{@docRoot}downloads/brand/en_app_rgb_wo.ai">English (English)</a><br/>
+       
+<!--
+       <a href="{@docRoot}downloads/brand/af_app_rgb_wo.ai">Afrikaans (Afrikaans)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ar_app_rgb_wo.ai">العربية (Arabic)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/be_app_rgb_wo.ai">Беларуская (Belarusian)</a><br/>
+       
+       <a href="{@docRoot}downloads/brand/bg_app_rgb_wo.ai">български (Bulgarian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ca_app_rgb_wo.ai">Català (Catalan)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zh-cn_app_rgb_wo.ai">中文 (中国) (Chinese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zh-hk_app_rgb_wo.ai">中文(香港) (Chinese Hong Kong)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zh-tw_app_rgb_wo.ai">中文 (台灣) (Chinese Taiwan)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/hr_app_rgb_wo.ai">Hrvatski (Croatian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/cs_app_rgb_wo.ai">Česky (Czech)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/da_app_rgb_wo.ai">Dansk (Danish)</a><br/>
+-->
+
+       <a href="{@docRoot}downloads/brand/nl_app_rgb_wo.ai">Nederlands (Dutch)</a><br/>
+
+<!--
+       <a href="{@docRoot}downloads/brand/et_app_rgb_wo.ai">Eesti keel (Estonian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/fa_app_rgb_wo.ai">فارسی (Farsi Persian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/fil_app_rgb_wo.ai">Tagalog (Filipino)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/fi_app_rgb_wo.ai">Suomi (Finnish)</a><br/>
+
+</div>
+
+<div class="col-4">
+-->
+
+       <a href="{@docRoot}downloads/brand/fr_app_rgb_wo.ai">Français (French)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/de_app_rgb_wo.ai">Deutsch (German)</a><br/>
+
+<!--
+       <a href="{@docRoot}downloads/brand/el_app_rgb_wo.ai">Ελληνικά (Greek)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/iw-he_app_rgb_wo.ai">עברית (Hebrew)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/hu_app_rgb_wo.ai">Magyar (Hungarian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/id-in_app_rgb_wo.ai">Bahasa Indonesia (Indonesian)</a><br/>
+-->
+
+       <a href="{@docRoot}downloads/brand/it_app_rgb_wo.ai">Italiano (Italian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ja_app_rgb_wo.ai">日本語 (Japanese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ko_app_rgb_wo.ai">한국어 (Korean)</a><br/>
+
+<!--
+       <a href="{@docRoot}downloads/brand/lv_app_rgb_wo.ai">Latviski (Latvian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/lt_app_rgb_wo.ai">Lietuviškai (Lithuanian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ms_app_rgb_wo.ai">Bahasa Melayu (Malay)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/no_app_rgb_wo.ai">Norsk (Norwegian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/pl_app_rgb_wo.ai">Polski (Polish)</a><br/>
+-->
+
+       <a href="{@docRoot}downloads/brand/pt-pt_app_rgb_wo.ai">Português (Portuguese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/pt-br_app_rgb_wo.ai">Português Brasil (Portuguese Brazil)</a><br/>
+
+
+<!--
+</div>
+
+<div class="col-4" style="margin-right:0">
+       <a href="{@docRoot}downloads/brand/ro_app_rgb_wo.ai">Românã (Romanian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/ru_app_rgb_wo.ai">Pусский (Russian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sr_app_rgb_wo.ai">Српски / srpski (Serbian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sk_app_rgb_wo.ai">Slovenčina (Slovak)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sl_app_rgb_wo.ai">Slovenščina (Slovenian)</a><br/>
+-->
+
+       <a href="{@docRoot}downloads/brand/es_app_rgb_wo.ai">Español (Spanish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/es-419_app_rgb_wo.ai">Español Latinoamérica (Spanish Latin America)</a><br/>
+
+<!--
+       <a href="{@docRoot}downloads/brand/sv_app_rgb_wo.ai">Svenska (Swedish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/sw_app_rgb_wo.ai">Kiswahili (Swahili)</a><br/>
+       
+       <a href="{@docRoot}downloads/brand/th_app_rgb_wo.ai">ภาษาไทย (Thai)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/tr_app_rgb_wo.ai">Türkçe (Turkish)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/uk_app_rgb_wo.ai">Українська (Ukrainian)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/vi_app_rgb_wo.ai">Tiếng Việt (Vietnamese)</a><br/>
+
+       <a href="{@docRoot}downloads/brand/zu_app_rgb_wo.ai">isiZulu (Zulu)</a><br/>
+-->
+
+</div>
+<div style="clear:left">&nbsp;</div>
+
+
+
+
+
+  
+<h2>Guidelines</h2>
+
+  <ul>
+    <li>Do not modify the color, proportions, spacing or any other aspect of the badge image.
+    </li>
+    <li>When used alongside logos for other application marketplaces, the Google Play logo
+    should be of equal or greater size.</li>
+    <li>When used online, the badge should link to either:
+      <ul>
+        <li>A list of products published by you, for example:<br />
+        <span style="margin-left:1em;">http://play.google.com/store/search?q=<em>publisherName</em></span>
+        </li>
+        <li>A specific app product details page within Google Play, for example:<br />
+        <span style="margin-left:1em;">http://play.google.com/store/apps/details?id=<em>packageName</em></span>
+        </li>
+      </ul>
+    </li>
+  </ul>
+  
+<p>For more information, see the
+<a href="{@docRoot}distribute/googleplay/promote/brand.html#brand-google_play">Brand
+Guidelines</a>.
+
+
+<p>To quickly create a badge that links to your apps on Google Play,
+use the <a
+href="{@docRoot}distribute/googleplay/promote/badges.html">Googe Play badge generator</a>.</p>
+    
+    
+    
\ No newline at end of file
diff --git a/docs/html/distribute/googleplay/promote/badges.jd b/docs/html/distribute/googleplay/promote/badges.jd
index 90e8c0d..0027f59 100644
--- a/docs/html/distribute/googleplay/promote/badges.jd
+++ b/docs/html/distribute/googleplay/promote/badges.jd
@@ -13,7 +13,7 @@
 wraps your screenshots in real device artwork.</p>
 
 <p>For guidelines when using the Google Play badge and other brand assets,
-see the <a href="{@docRoot}distribute/googleplay/promote/brand.html">Brand
+see the <a href="{@docRoot}distribute/googleplay/promote/brand.html#brand-google_play">Brand
 Guidelines</a>.</p>
 
 <style type="text/css">
@@ -56,9 +56,12 @@
 
 <script type="text/javascript">
 
+// locales for which we have the 'app' badge
+var APP_LANGS = ['it','pt-br','pt-pt','nl','ko','ja','fr','es','es-419','en','de'];
+
 // variables for creating 'try it out' demo button
-var imagePath = "http://developer.android.com/images/brand/"
-var linkStart = "<a href=\"http://play.google.com/store/";
+var imagePath = "https://developer.android.com/images/brand/"
+var linkStart = "<a href=\"https://play.google.com/store/";
 var imageStart = "\">\n"
         + "  <img alt=\"";
   // leaves opening for the alt text value
@@ -67,7 +70,7 @@
 var imageEnd = ".png\" />\n</a>";
 
 // variables for creating code snippet
-var linkStartCode = "&lt;a href=\"http://play.google.com/store/";
+var linkStartCode = "&lt;a href=\"https://play.google.com/store/";
 var imageStartCode = "\"&gt;\n"
         + "  &lt;img alt=\"";
   // leaves opening for the alt text value
@@ -77,8 +80,9 @@
 
 /** 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";
+  var lang = $('#locale option:selected').val();
+  var selectedValue = lang + $('form input[type=radio]:checked').val();
+  var altText = selectedValue.indexOf("generic") != -1 ? "Get it on Google Play" : "Android app on Google Play";
 
   if (form["package"].value != "com.example.android") {
     $("#preview").show();
@@ -144,6 +148,33 @@
   return false;
 }
 
+/** Switch the badge urls for selected language */
+function changeBadgeLang() {
+  var lang = $('#locale option:selected').val();
+  
+  // check if we have the 'app' badge for this lang and show notice if not
+  $("div.button-row.error").remove();  // remove any existing instance of error message
+  if ($.inArray(lang,APP_LANGS) == -1) {
+    $("div.button-row.app").hide();
+    $("div.button-row.app").after('<div class="button-row error"><p class="note" style="margin:1em 0 -1em">'
+        + 'Sorry, we currently don\'t have the '
+        + '<em>Android app on Google Play</em> badge translated for '
+        + $("select#locale option[value="+lang+"]").attr("title")
+        + '.<br>Please check back later or instead use the <em>Get it on Google Play</em> badge below.'
+        + '</p></div>');
+  } else {
+    $("div.button-row.app").show(); // show the 'app' badge row
+  }
+  
+  $('.button-row img').each(function() {
+    var id = $(this).parent().attr('for');
+    var imgName = lang + $('input#'+id).attr('value') + '.png';
+    var lastSlash = $(this).attr('src').lastIndexOf('/');
+    var imgPath = $(this).attr('src').substring(0, lastSlash+1);
+    $(this).attr('src', imgPath + imgName);
+  });
+}
+
 /** 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) */
@@ -163,7 +194,106 @@
 </script>
 
 <form class="button-form">
-  <label class="block" for="package">Package name:</label>
+  <label class="block" for="locale">Language:</label>
+  <select id="locale" style="display:block;float:left;margin:0"
+          onchange="changeBadgeLang()">
+    <option title="Afrikaans"
+            value="af">Afrikaans</option>
+    <option title="Arabic"
+            value="ar">العربية</option>
+    <option title="Belarusian"
+            value="be">Беларуская</option>
+    <option title="Bulgarian"
+            value="bg">Български</option>
+    <option title="Catalan"
+            value="ca">Català</option>
+    <option title="Chinese (China)"
+            value="zh-cn">中文 (中国)</option>
+    <option title="Chinese (Hong Kong)"
+            value="zh-hk">中文(香港)</option>
+    <option title="Chinese (Taiwan)"
+            value="zh-tw">中文 (台灣)</option>
+    <option title="Croatian"
+            value="hr">Hrvatski</option>
+    <option title="Czech"
+            value="cs">Česky</option>
+    <option title="Danish"
+            value="da">Dansk</option>
+    <option title="Dutch"
+            value="nl">Nederlands</option>
+    <option title="Estonian"
+            value="et">Eesti</option>
+    <option title="Farsi - Persian"
+            value="fa">فارسی</option>
+    <option title="Filipino"
+            value="fil">Tagalog</option>
+    <option title="Finnish"
+            value="fi">Suomi</option>
+    <option title="French"
+            value="fr">Français</option>
+    <option title="German"
+            value="de">Deutsch</option>
+    <option title="Greek"
+            value="el">Ελληνικά</option>
+    <option title="English"
+            value="en" selected="true">English</option>
+    <option title="Hebrew"
+            value="iw-he">עברית</option>
+    <option title="Hungarian"
+            value="hu">Magyar</option>
+    <option title="Indonesian"
+            value="id-in">Bahasa Indonesia</option>
+    <option title="Italian"
+            value="it">Italiano</option>
+    <option title="Japanese"
+            value="ja">日本語</option>
+    <option title="Korean"
+            value="ko">한국어</option>
+    <option title="Latvian"
+            value="lv">Latviešu</option>
+    <option title="Lithuanian"
+            value="lt">Lietuviškai</option>
+    <option title="Malay"
+            value="ms">Bahasa Melayu</option>
+    <option title="Norwegian"
+            value="no">Norsk (bokmål)‎</option>
+    <option title="Polish"
+            value="pl">Polski</option>
+    <option title="Portuguese (Brazil)"
+            value="pt-br">Português (Brasil)</option>
+    <option title="Portuguese (Portugal)"
+            value="pt-pt">Português (Portugal)</option>
+    <option title="Romanian"
+            value="ro">Română</option>
+    <option title="Russian"
+            value="ru">Русский</option>
+    <option title="Serbian"
+            value="sr">Српски / srpski</option>
+    <option title="Slovak"
+            value="sk">Slovenčina</option>
+    <option title="Slovenian"
+            value="sl">Slovenščina</option>
+    <option title="Spanish (Spain)"
+            value="es">Español (España)</option>
+    <option title="Spanish (Latin America)"
+            value="es-419">Español (Latinoamérica)</option>
+    <option title="Swedish"
+            value="sv">Svenska</option>
+    <option title="Swahili"
+            value="sw">Kiswahili</option>
+    <option title="Thai"
+            value="th">ไทย</option>
+    <option title="Turkish"
+            value="tr">Türkçe</option>
+    <option title="Ukrainian"
+            value="uk">Українська</option>
+    <option title="Vietnamese"
+            value="vi">Tiếng Việt</option>
+    <option title="Zulu"
+            value="zu">isiZulu</option>
+  </select>
+  <p style="clear:both;margin:0">&nbsp;</p>
+  <label class="block" for="package" style="clear:left">Package name:</label>
   <input class="text" type="text" id="package" name="package"
          value="com.example.android"
          default="com.example.android"
@@ -185,27 +315,27 @@
          <br/><br/>
 
 
-<div class="button-row">
-  <input type="radio" name="buttonStyle" value="en_app_rgb_wo_45" id="ws" checked="checked" />
+<div class="button-row app">
+  <input type="radio" name="buttonStyle" value="_app_rgb_wo_45" id="ws" />
     <label for="ws"><img src="{@docRoot}images/brand/en_app_rgb_wo_45.png"
 alt="Android app on Google Play (small)" /></label>
     &nbsp;&nbsp;&nbsp;&nbsp;
-  <input type="radio" name="buttonStyle" value="en_app_rgb_wo_60" id="wm" />
+  <input type="radio" name="buttonStyle" value="_app_rgb_wo_60" id="wm" />
     <label for="wm"><img src="{@docRoot}images/brand/en_app_rgb_wo_60.png"
 alt="Android app on Google Play (large)" /></label>
 </div>
 
 <div class="button-row">
-  <input type="radio" name="buttonStyle" value="en_generic_rgb_wo_45" id="ns" />
+  <input type="radio" name="buttonStyle" value="_generic_rgb_wo_45" id="ns" checked="checked" />
     <label for="ns"><img src="{@docRoot}images/brand/en_generic_rgb_wo_45.png"
 alt="Get it on Google Play (small)" /></label>
     &nbsp;&nbsp;&nbsp;&nbsp;
-  <input type="radio" name="buttonStyle" value="en_generic_rgb_wo_60" id="nm" />
+  <input type="radio" name="buttonStyle" value="_generic_rgb_wo_60" id="nm" />
     <label for="nm"><img src="{@docRoot}images/brand/en_generic_rgb_wo_60.png"
 alt="Get it on Google Play (large)" /></label>
 </div>
 
-  <input onclick="return buildButton(this.parentNode);"
+  <input class="button" onclick="return buildButton(this.parentNode);"
     type="button" value="Build my badge" style="padding:10px" />
   <br/>
 </form>
diff --git a/docs/html/distribute/googleplay/promote/brand.jd b/docs/html/distribute/googleplay/promote/brand.jd
index 63b1f03..cea6d2c 100644
--- a/docs/html/distribute/googleplay/promote/brand.jd
+++ b/docs/html/distribute/googleplay/promote/brand.jd
@@ -118,8 +118,8 @@
 <p>You may use the Google Play Store icon, but you may not modify it.</p>
 
 <p>As mentioned above, when referring to the Google Play Store app in copy, use the full name:
-"Google Play Store." However, when labelling the Google Play Store icon directly, it's OK to use
-"Play Store" without "Google" (which is how the icon is labelled on a device).</p>
+"Google Play Store." However, when labeling the Google Play Store icon directly, it's OK to use
+"Play Store" alone to accurately reflect the icon label as it appears on a device.</p>
 
         
 <h4>Google Play badge</h4>
@@ -128,16 +128,14 @@
     <img src="{@docRoot}images/brand/en_app_rgb_wo_60.png" alt="">
     <p style="text-align:center">
        <a href="{@docRoot}images/brand/en_app_rgb_wo_45.png">129x45</a> |
-       <a href="{@docRoot}images/brand/en_app_rgb_wo_60.png">172x60</a><br>
-       <a href="{@docRoot}downloads/brand/en_app_rgb_wo.ai">Illustrator (.ai)</a></p>
+       <a href="{@docRoot}images/brand/en_app_rgb_wo_60.png">172x60</a></p>
   </div>
       
   <div style="float:right;clear:right;width:172px;margin-left:30px">
     <img src="{@docRoot}images/brand/en_generic_rgb_wo_60.png" alt="">
     <p style="text-align:center">
        <a href="{@docRoot}images/brand/en_generic_rgb_wo_45.png">129x45</a> |
-       <a href="{@docRoot}images/brand/en_generic_rgb_wo_60.png">172x60</a><br>
-       <a href="{@docRoot}downloads/brand/en_generic_rgb_wo.ai">Illustrator (.ai)</a></p>
+       <a href="{@docRoot}images/brand/en_generic_rgb_wo_60.png">172x60</a></p>
   </div>
          
   <p>The "Get it on Google Play" and "Android App on Google Play" logos are badges that you
@@ -160,14 +158,19 @@
       </ul>
     </li>
   </ul>
-
-  <p>For your convenience, you can use the 
-    <a href="{@docRoot}distribute/googleplay/promote/badges.html">Googe Play badge generator</a>
-    to create badges that link to your apps on Google Play.</p>
+  
+  <p>To quickly create a badge that links to your apps on Google Play,
+  use the <a
+  href="{@docRoot}distribute/googleplay/promote/badges.html">Googe Play badge generator</a>
+  (provides the badge in over 40 languages).</p>
+  
+  <p>To create your own size, download an Adobe&reg; Illustrator&reg; (.ai) file for the
+  <a href="{@docRoot}distribute/googleplay/promote/badge-files.html">Google Play
+  badge in over 40 languages</a>.</p>
     
   <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>If you are not sure you meet these criteria, <a href=
+<p>If you are not sure you meet these brand guidelines, <a href=
             "http://services.google.com/permissions/application">please contact us</a>. </p>
diff --git a/docs/html/google/play/billing/billing_integrate.jd b/docs/html/google/play/billing/billing_integrate.jd
index 554866d..3f6df927 100755
--- a/docs/html/google/play/billing/billing_integrate.jd
+++ b/docs/html/google/play/billing/billing_integrate.jd
@@ -111,24 +111,27 @@
 <pre>
 &#64;Override
 public void onCreate(Bundle savedInstanceState) {    
-   super.onCreate(savedInstanceState);
-   setContentView(R.layout.activity_main);        
-   bindService(new 
-      Intent("com.android.vending.billing.InAppBillingService.BIND"),
-          mServiceConn, Context.BIND_AUTO_CREATE);
+    super.onCreate(savedInstanceState);
+    setContentView(R.layout.activity_main);        
+    bindService(new 
+        Intent("com.android.vending.billing.InAppBillingService.BIND"),
+                mServiceConn, Context.BIND_AUTO_CREATE);
 </pre>
 <p>You can now use the mService reference to communicate with the Google Play service.</p>
 <p class="note"><strong>Important:</strong> Remember to unbind from the In-app Billing service when you are done with your {@link android.app.Activity}. If you don’t unbind, the open service connection could cause your device’s performance to degrade. This example shows how to perform the unbind operation on a service connection to In-app Billing called {@code mServiceConn} by overriding the activity’s {@link android.app.Activity#onDestroy onDestroy} method.</p>
 <pre>
 &#64;Override
 public void onDestroy() {
-   if (mServiceConn != null) {
-      unbindService(mServiceConn);
-   }	
+    super.onDestroy();
+    if (mServiceConn != null) {
+        unbindService(mServiceConn);
+    }	
 }
 </pre>
 
-<p>For a complete implementation of a service connection that binds to the {@code IInAppBillingService}, see the <a href="{@docRoot}/training/in-app-billing/preparing-iab-app.html#Connect">Selling In-app Products</a> training class.</p>
+<p>For a complete implementation of a service connection that binds to the {@code IInAppBillingService},
+see the <a href="{@docRoot}training/in-app-billing/preparing-iab-app.html">Selling In-app
+Products</a> training class and associated sample.</p>
 
 <h2 id="billing-requests">Making In-app Billing Requests</h2>
 <p>Once your application is connected to Google Play, you can initiate purchase requests for in-app products. Google Play provides a checkout interface for users to enter their payment method, so your application does not need to handle payment transactions directly. When an item is purchased, Google Play recognizes that the user has ownership of that item and prevents the user from purchasing another item with the same product ID until it is consumed. You can control how the item is consumed in your application, and notify Google Play to make the item available for purchase again. You can also query Google Play to quickly retrieve the list of purchases that were made by the user. This is useful, for example, when you want to restore the user's purchases when your user launches your app.
diff --git a/docs/html/guide/topics/connectivity/wifip2p.jd b/docs/html/guide/topics/connectivity/wifip2p.jd
index 82c9abd..bbf30fd 100644
--- a/docs/html/guide/topics/connectivity/wifip2p.jd
+++ b/docs/html/guide/topics/connectivity/wifip2p.jd
@@ -237,16 +237,16 @@
  */
 public class WiFiDirectBroadcastReceiver extends BroadcastReceiver {
 
-    private WifiP2pManager manager;
-    private Channel channel;
-    private MyWiFiActivity activity;
+    private WifiP2pManager mManager;
+    private Channel mChannel;
+    private MyWiFiActivity mActivity;
 
     public WiFiDirectBroadcastReceiver(WifiP2pManager manager, Channel channel,
             MyWifiActivity activity) {
         super();
-        this.manager = manager;
-        this.channel = channel;
-        this.activity = activity;
+        this.mManager = manager;
+        this.mChannel = channel;
+        this.mActivity = activity;
     }
 
     &#064;Override
@@ -333,7 +333,7 @@
     ...
     mManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
     mChannel = mManager.initialize(this, getMainLooper(), null);
-    mReceiver = new WiFiDirectBroadcastReceiver(manager, channel, this);
+    mReceiver = new WiFiDirectBroadcastReceiver(mManager, mChannel, this);
     ...
 }
 </pre>
@@ -397,7 +397,7 @@
   that the discovery process succeeded and does not provide any information about the actual peers
   that it discovered, if any:</p>
   <pre>
-manager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
+mManager.discoverPeers(channel, new WifiP2pManager.ActionListener() {
     &#064;Override
     public void onSuccess() {
         ...
@@ -425,8 +425,8 @@
     // request available peers from the wifi p2p manager. This is an
     // asynchronous call and the calling activity is notified with a
     // callback on PeerListListener.onPeersAvailable()
-    if (manager != null) {
-        manager.requestPeers(channel, myPeerListListener);
+    if (mManager != null) {
+        mManager.requestPeers(mChannel, myPeerListListener);
     }
 }
 </pre>
@@ -453,7 +453,7 @@
 WifiP2pDevice device;
 WifiP2pConfig config = new WifiP2pConfig();
 config.deviceAddress = device.deviceAddress;
-manager.connect(channel, config, new ActionListener() {
+mManager.connect(mChannel, config, new ActionListener() {
 
     &#064;Override
     public void onSuccess() {
diff --git a/docs/html/guide/topics/manifest/manifest-intro.jd b/docs/html/guide/topics/manifest/manifest-intro.jd
index a130f7d..d25a513 100644
--- a/docs/html/guide/topics/manifest/manifest-intro.jd
+++ b/docs/html/guide/topics/manifest/manifest-intro.jd
@@ -115,6 +115,7 @@
         <a href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;provider&gt;</a>
             <a href="{@docRoot}guide/topics/manifest/grant-uri-permission-element.html">&lt;grant-uri-permission /&gt;</a>
             <a href="{@docRoot}guide/topics/manifest/meta-data-element.html">&lt;meta-data /&gt;</a>
+            <a href="{@docRoot}guide/topics/manifest/path-permission-element.html">&lt;path-permission /&gt;</a>
         <a href="{@docRoot}guide/topics/manifest/provider-element.html">&lt;/provider&gt;</a>
 
         <a href="{@docRoot}guide/topics/manifest/uses-library-element.html">&lt;uses-library /&gt;</a>
diff --git a/docs/html/guide/topics/manifest/uses-feature-element.jd b/docs/html/guide/topics/manifest/uses-feature-element.jd
index c25dff8..3d6f18b 100644
--- a/docs/html/guide/topics/manifest/uses-feature-element.jd
+++ b/docs/html/guide/topics/manifest/uses-feature-element.jd
@@ -708,9 +708,9 @@
   <td>Television</td>
   <td><code>android.hardware.type.television</code></td>
   <td>The application is designed for a television user experience.</td>
-  <td>>This feature defines "television" to be a typical living room television experience: 
+  <td>This feature defines "television" to be a typical living room television experience: 
   displayed on a big screen, where the user is sitting far away and the dominant form of 
-  input is be something like a d-pad, and generally not through touch or a 
+  input is something like a d-pad, and generally not through touch or a 
   mouse/pointer-device.</td>
 </tr>
 
diff --git a/docs/html/guide/topics/ui/layout/gridview.jd b/docs/html/guide/topics/ui/layout/gridview.jd
index 67bdd0f0..84c3dab 100644
--- a/docs/html/guide/topics/ui/layout/gridview.jd
+++ b/docs/html/guide/topics/ui/layout/gridview.jd
@@ -170,7 +170,7 @@
 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
+padding will cause more cropping of the image if it does not match
 the dimensions given to the ImageView.)</li>
 </ul>
 
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index 77cce18..e70987b 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -921,7 +921,7 @@
 </p>
 <pre>
  // Sets an activity indicator for an operation of indeterminate length
-mBuilder.setProgress(0, 0, false);
+mBuilder.setProgress(0, 0, true);
 // Issues the notification
 mNotifyManager.notify(0, mBuilder.build());
 </pre>
diff --git a/docs/html/guide/webapps/webview.jd b/docs/html/guide/webapps/webview.jd
index ce7fe27..f8b2a1d 100644
--- a/docs/html/guide/webapps/webview.jd
+++ b/docs/html/guide/webapps/webview.jd
@@ -314,7 +314,7 @@
 &#64;Override
 public boolean {@link android.app.Activity#onKeyDown(int,KeyEvent) onKeyDown}(int keyCode, KeyEvent event) {
     // Check if the key event was the Back button and if there's history
-    if ((keyCode == KeyEvent.KEYCODE_BACK) &amp;&amp; myWebView.{@link android.webkit.WebView#canGoBack() canGoBack}() {
+    if ((keyCode == KeyEvent.KEYCODE_BACK) &amp;&amp; myWebView.{@link android.webkit.WebView#canGoBack() canGoBack}()) {
         myWebView.{@link android.webkit.WebView#goBack() goBack}();
         return true;
     }
diff --git a/docs/html/images/brand/af_generic_rgb_wo_45.png b/docs/html/images/brand/af_generic_rgb_wo_45.png
new file mode 100644
index 0000000..bf774ab
--- /dev/null
+++ b/docs/html/images/brand/af_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/af_generic_rgb_wo_60.png b/docs/html/images/brand/af_generic_rgb_wo_60.png
new file mode 100644
index 0000000..0487c7f
--- /dev/null
+++ b/docs/html/images/brand/af_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ar_generic_rgb_wo_45.png b/docs/html/images/brand/ar_generic_rgb_wo_45.png
new file mode 100644
index 0000000..bdb0ff6
--- /dev/null
+++ b/docs/html/images/brand/ar_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ar_generic_rgb_wo_60.png b/docs/html/images/brand/ar_generic_rgb_wo_60.png
new file mode 100644
index 0000000..ba9fc69
--- /dev/null
+++ b/docs/html/images/brand/ar_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/be_generic_rgb_wo_45.png b/docs/html/images/brand/be_generic_rgb_wo_45.png
new file mode 100644
index 0000000..bec6c7a
--- /dev/null
+++ b/docs/html/images/brand/be_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/be_generic_rgb_wo_60.png b/docs/html/images/brand/be_generic_rgb_wo_60.png
new file mode 100644
index 0000000..53ad2a11
--- /dev/null
+++ b/docs/html/images/brand/be_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/bg_generic_rgb_wo_45.png b/docs/html/images/brand/bg_generic_rgb_wo_45.png
new file mode 100644
index 0000000..9a27471
--- /dev/null
+++ b/docs/html/images/brand/bg_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/bg_generic_rgb_wo_60.png b/docs/html/images/brand/bg_generic_rgb_wo_60.png
new file mode 100644
index 0000000..5143a66
--- /dev/null
+++ b/docs/html/images/brand/bg_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ca_generic_rgb_wo_45.png b/docs/html/images/brand/ca_generic_rgb_wo_45.png
new file mode 100644
index 0000000..698a4cd
--- /dev/null
+++ b/docs/html/images/brand/ca_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ca_generic_rgb_wo_60.png b/docs/html/images/brand/ca_generic_rgb_wo_60.png
new file mode 100644
index 0000000..e943de1
--- /dev/null
+++ b/docs/html/images/brand/ca_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/cs_generic_rgb_wo_45.png b/docs/html/images/brand/cs_generic_rgb_wo_45.png
new file mode 100644
index 0000000..b97b805
--- /dev/null
+++ b/docs/html/images/brand/cs_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/cs_generic_rgb_wo_60.png b/docs/html/images/brand/cs_generic_rgb_wo_60.png
new file mode 100644
index 0000000..9656c2e
--- /dev/null
+++ b/docs/html/images/brand/cs_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/da_generic_rgb_wo_45.png b/docs/html/images/brand/da_generic_rgb_wo_45.png
new file mode 100644
index 0000000..541ba29
--- /dev/null
+++ b/docs/html/images/brand/da_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/da_generic_rgb_wo_60.png b/docs/html/images/brand/da_generic_rgb_wo_60.png
new file mode 100644
index 0000000..d974154
--- /dev/null
+++ b/docs/html/images/brand/da_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/de_app_rgb_wo_45.png b/docs/html/images/brand/de_app_rgb_wo_45.png
new file mode 100644
index 0000000..db48df2
--- /dev/null
+++ b/docs/html/images/brand/de_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/de_app_rgb_wo_60.png b/docs/html/images/brand/de_app_rgb_wo_60.png
new file mode 100644
index 0000000..9e0f757
--- /dev/null
+++ b/docs/html/images/brand/de_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/de_generic_rgb_wo_45.png b/docs/html/images/brand/de_generic_rgb_wo_45.png
new file mode 100644
index 0000000..1396f79
--- /dev/null
+++ b/docs/html/images/brand/de_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/de_generic_rgb_wo_60.png b/docs/html/images/brand/de_generic_rgb_wo_60.png
new file mode 100644
index 0000000..f2df4a4
--- /dev/null
+++ b/docs/html/images/brand/de_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/el_generic_rgb_wo_45.png b/docs/html/images/brand/el_generic_rgb_wo_45.png
new file mode 100644
index 0000000..adaea5f
--- /dev/null
+++ b/docs/html/images/brand/el_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/el_generic_rgb_wo_60.png b/docs/html/images/brand/el_generic_rgb_wo_60.png
new file mode 100644
index 0000000..37ae3bc
--- /dev/null
+++ b/docs/html/images/brand/el_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/es-419_app_rgb_wo_45.png b/docs/html/images/brand/es-419_app_rgb_wo_45.png
new file mode 100644
index 0000000..3fb9a3f
--- /dev/null
+++ b/docs/html/images/brand/es-419_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/es-419_app_rgb_wo_60.png b/docs/html/images/brand/es-419_app_rgb_wo_60.png
new file mode 100644
index 0000000..1dfb820
--- /dev/null
+++ b/docs/html/images/brand/es-419_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/es-419_generic_rgb_wo_45.png b/docs/html/images/brand/es-419_generic_rgb_wo_45.png
new file mode 100644
index 0000000..b89274d
--- /dev/null
+++ b/docs/html/images/brand/es-419_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/es-419_generic_rgb_wo_60.png b/docs/html/images/brand/es-419_generic_rgb_wo_60.png
new file mode 100644
index 0000000..23d7705
--- /dev/null
+++ b/docs/html/images/brand/es-419_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/es_app_rgb_wo_45.png b/docs/html/images/brand/es_app_rgb_wo_45.png
new file mode 100644
index 0000000..ad5e61a
--- /dev/null
+++ b/docs/html/images/brand/es_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/es_app_rgb_wo_60.png b/docs/html/images/brand/es_app_rgb_wo_60.png
new file mode 100644
index 0000000..6796ad3
--- /dev/null
+++ b/docs/html/images/brand/es_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/es_generic_rgb_wo_45.png b/docs/html/images/brand/es_generic_rgb_wo_45.png
new file mode 100644
index 0000000..b89274d
--- /dev/null
+++ b/docs/html/images/brand/es_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/es_generic_rgb_wo_60.png b/docs/html/images/brand/es_generic_rgb_wo_60.png
new file mode 100644
index 0000000..23d7705
--- /dev/null
+++ b/docs/html/images/brand/es_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/et_generic_rgb_wo_45.png b/docs/html/images/brand/et_generic_rgb_wo_45.png
new file mode 100644
index 0000000..0e267381
--- /dev/null
+++ b/docs/html/images/brand/et_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/et_generic_rgb_wo_60.png b/docs/html/images/brand/et_generic_rgb_wo_60.png
new file mode 100644
index 0000000..a99dee1
--- /dev/null
+++ b/docs/html/images/brand/et_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/fa_generic_rgb_wo_45.png b/docs/html/images/brand/fa_generic_rgb_wo_45.png
new file mode 100644
index 0000000..25827f6
--- /dev/null
+++ b/docs/html/images/brand/fa_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/fa_generic_rgb_wo_60.png b/docs/html/images/brand/fa_generic_rgb_wo_60.png
new file mode 100644
index 0000000..5118909
--- /dev/null
+++ b/docs/html/images/brand/fa_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/fi_generic_rgb_wo_45.png b/docs/html/images/brand/fi_generic_rgb_wo_45.png
new file mode 100644
index 0000000..93dc4fc
--- /dev/null
+++ b/docs/html/images/brand/fi_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/fi_generic_rgb_wo_60.png b/docs/html/images/brand/fi_generic_rgb_wo_60.png
new file mode 100644
index 0000000..95eff07
--- /dev/null
+++ b/docs/html/images/brand/fi_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/fil_generic_rgb_wo_45.png b/docs/html/images/brand/fil_generic_rgb_wo_45.png
new file mode 100644
index 0000000..7e74e62
--- /dev/null
+++ b/docs/html/images/brand/fil_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/fil_generic_rgb_wo_60.png b/docs/html/images/brand/fil_generic_rgb_wo_60.png
new file mode 100644
index 0000000..8f02743
--- /dev/null
+++ b/docs/html/images/brand/fil_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/fr_app_rgb_wo_45.png b/docs/html/images/brand/fr_app_rgb_wo_45.png
new file mode 100644
index 0000000..14219e3
--- /dev/null
+++ b/docs/html/images/brand/fr_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/fr_app_rgb_wo_60.png b/docs/html/images/brand/fr_app_rgb_wo_60.png
new file mode 100644
index 0000000..af58843
--- /dev/null
+++ b/docs/html/images/brand/fr_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/fr_generic_rgb_wo_45.png b/docs/html/images/brand/fr_generic_rgb_wo_45.png
new file mode 100644
index 0000000..3e1768f
--- /dev/null
+++ b/docs/html/images/brand/fr_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/fr_generic_rgb_wo_60.png b/docs/html/images/brand/fr_generic_rgb_wo_60.png
new file mode 100644
index 0000000..5c307f5
--- /dev/null
+++ b/docs/html/images/brand/fr_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/hr_generic_rgb_wo_45.png b/docs/html/images/brand/hr_generic_rgb_wo_45.png
new file mode 100644
index 0000000..b8acaac
--- /dev/null
+++ b/docs/html/images/brand/hr_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/hr_generic_rgb_wo_60.png b/docs/html/images/brand/hr_generic_rgb_wo_60.png
new file mode 100644
index 0000000..4fe6c7b
--- /dev/null
+++ b/docs/html/images/brand/hr_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/hu_generic_rgb_wo_45.png b/docs/html/images/brand/hu_generic_rgb_wo_45.png
new file mode 100644
index 0000000..3b2184d
--- /dev/null
+++ b/docs/html/images/brand/hu_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/hu_generic_rgb_wo_60.png b/docs/html/images/brand/hu_generic_rgb_wo_60.png
new file mode 100644
index 0000000..d6572be
--- /dev/null
+++ b/docs/html/images/brand/hu_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/id-in_generic_rgb_wo_45.png b/docs/html/images/brand/id-in_generic_rgb_wo_45.png
new file mode 100644
index 0000000..17ce069
--- /dev/null
+++ b/docs/html/images/brand/id-in_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/id-in_generic_rgb_wo_60.png b/docs/html/images/brand/id-in_generic_rgb_wo_60.png
new file mode 100644
index 0000000..ad067ce
--- /dev/null
+++ b/docs/html/images/brand/id-in_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/it_app_rgb_wo_45.png b/docs/html/images/brand/it_app_rgb_wo_45.png
new file mode 100644
index 0000000..16a137e
--- /dev/null
+++ b/docs/html/images/brand/it_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/it_app_rgb_wo_60.png b/docs/html/images/brand/it_app_rgb_wo_60.png
new file mode 100644
index 0000000..27123dc
--- /dev/null
+++ b/docs/html/images/brand/it_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/it_generic_rgb_wo_45.png b/docs/html/images/brand/it_generic_rgb_wo_45.png
new file mode 100644
index 0000000..ee5f85e
--- /dev/null
+++ b/docs/html/images/brand/it_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/it_generic_rgb_wo_60.png b/docs/html/images/brand/it_generic_rgb_wo_60.png
new file mode 100644
index 0000000..03ea5ba
--- /dev/null
+++ b/docs/html/images/brand/it_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/iw-he_generic_rgb_wo_45.png b/docs/html/images/brand/iw-he_generic_rgb_wo_45.png
new file mode 100644
index 0000000..1d03c77
--- /dev/null
+++ b/docs/html/images/brand/iw-he_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/iw-he_generic_rgb_wo_60.png b/docs/html/images/brand/iw-he_generic_rgb_wo_60.png
new file mode 100644
index 0000000..decfdae
--- /dev/null
+++ b/docs/html/images/brand/iw-he_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ja_app_rgb_wo_45.png b/docs/html/images/brand/ja_app_rgb_wo_45.png
new file mode 100644
index 0000000..6af7582
--- /dev/null
+++ b/docs/html/images/brand/ja_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ja_app_rgb_wo_60.png b/docs/html/images/brand/ja_app_rgb_wo_60.png
new file mode 100644
index 0000000..e197e12
--- /dev/null
+++ b/docs/html/images/brand/ja_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ja_generic_rgb_wo_45.png b/docs/html/images/brand/ja_generic_rgb_wo_45.png
new file mode 100644
index 0000000..5f5281a
--- /dev/null
+++ b/docs/html/images/brand/ja_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ja_generic_rgb_wo_60.png b/docs/html/images/brand/ja_generic_rgb_wo_60.png
new file mode 100644
index 0000000..fcb4c9c
--- /dev/null
+++ b/docs/html/images/brand/ja_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ko_app_rgb_wo_45.png b/docs/html/images/brand/ko_app_rgb_wo_45.png
new file mode 100644
index 0000000..f0b427e
--- /dev/null
+++ b/docs/html/images/brand/ko_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ko_app_rgb_wo_60.png b/docs/html/images/brand/ko_app_rgb_wo_60.png
new file mode 100644
index 0000000..6ccb673
--- /dev/null
+++ b/docs/html/images/brand/ko_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ko_generic_rgb_wo_45.png b/docs/html/images/brand/ko_generic_rgb_wo_45.png
new file mode 100644
index 0000000..61ae04a
--- /dev/null
+++ b/docs/html/images/brand/ko_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ko_generic_rgb_wo_60.png b/docs/html/images/brand/ko_generic_rgb_wo_60.png
new file mode 100644
index 0000000..9c14e36
--- /dev/null
+++ b/docs/html/images/brand/ko_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/lt_generic_rgb_wo_45.png b/docs/html/images/brand/lt_generic_rgb_wo_45.png
new file mode 100644
index 0000000..96564d5
--- /dev/null
+++ b/docs/html/images/brand/lt_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/lt_generic_rgb_wo_60.png b/docs/html/images/brand/lt_generic_rgb_wo_60.png
new file mode 100644
index 0000000..2c6c1bf
--- /dev/null
+++ b/docs/html/images/brand/lt_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/lv_generic_rgb_wo_45.png b/docs/html/images/brand/lv_generic_rgb_wo_45.png
new file mode 100644
index 0000000..8182ca5
--- /dev/null
+++ b/docs/html/images/brand/lv_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/lv_generic_rgb_wo_60.png b/docs/html/images/brand/lv_generic_rgb_wo_60.png
new file mode 100644
index 0000000..5c0b3d2
--- /dev/null
+++ b/docs/html/images/brand/lv_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ms_generic_rgb_wo_45.png b/docs/html/images/brand/ms_generic_rgb_wo_45.png
new file mode 100644
index 0000000..d6ccc6b
--- /dev/null
+++ b/docs/html/images/brand/ms_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ms_generic_rgb_wo_60.png b/docs/html/images/brand/ms_generic_rgb_wo_60.png
new file mode 100644
index 0000000..6e1c34d
--- /dev/null
+++ b/docs/html/images/brand/ms_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/nl_app_rgb_wo_45.png b/docs/html/images/brand/nl_app_rgb_wo_45.png
new file mode 100644
index 0000000..f06ed04
--- /dev/null
+++ b/docs/html/images/brand/nl_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/nl_app_rgb_wo_60.png b/docs/html/images/brand/nl_app_rgb_wo_60.png
new file mode 100644
index 0000000..f2c797d
--- /dev/null
+++ b/docs/html/images/brand/nl_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/nl_generic_rgb_wo_45.png b/docs/html/images/brand/nl_generic_rgb_wo_45.png
new file mode 100644
index 0000000..6b5826d
--- /dev/null
+++ b/docs/html/images/brand/nl_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/nl_generic_rgb_wo_60.png b/docs/html/images/brand/nl_generic_rgb_wo_60.png
new file mode 100644
index 0000000..cb11afda
--- /dev/null
+++ b/docs/html/images/brand/nl_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/no_generic_rgb_wo_45.png b/docs/html/images/brand/no_generic_rgb_wo_45.png
new file mode 100644
index 0000000..fb390d8
--- /dev/null
+++ b/docs/html/images/brand/no_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/no_generic_rgb_wo_60.png b/docs/html/images/brand/no_generic_rgb_wo_60.png
new file mode 100644
index 0000000..e83dce7
--- /dev/null
+++ b/docs/html/images/brand/no_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/pl_generic_rgb_wo_45.png b/docs/html/images/brand/pl_generic_rgb_wo_45.png
new file mode 100644
index 0000000..78caded
--- /dev/null
+++ b/docs/html/images/brand/pl_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/pl_generic_rgb_wo_60.png b/docs/html/images/brand/pl_generic_rgb_wo_60.png
new file mode 100644
index 0000000..2d956fb
--- /dev/null
+++ b/docs/html/images/brand/pl_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/pt-br_app_rgb_wo_45.png b/docs/html/images/brand/pt-br_app_rgb_wo_45.png
new file mode 100644
index 0000000..065998b
--- /dev/null
+++ b/docs/html/images/brand/pt-br_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/pt-br_app_rgb_wo_60.png b/docs/html/images/brand/pt-br_app_rgb_wo_60.png
new file mode 100644
index 0000000..1ce0a6c
--- /dev/null
+++ b/docs/html/images/brand/pt-br_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/pt-br_generic_rgb_wo_45.png b/docs/html/images/brand/pt-br_generic_rgb_wo_45.png
new file mode 100644
index 0000000..a661d44
--- /dev/null
+++ b/docs/html/images/brand/pt-br_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/pt-br_generic_rgb_wo_60.png b/docs/html/images/brand/pt-br_generic_rgb_wo_60.png
new file mode 100644
index 0000000..402af71
--- /dev/null
+++ b/docs/html/images/brand/pt-br_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/pt-pt_app_rgb_wo_45.png b/docs/html/images/brand/pt-pt_app_rgb_wo_45.png
new file mode 100644
index 0000000..0b50959
--- /dev/null
+++ b/docs/html/images/brand/pt-pt_app_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/pt-pt_app_rgb_wo_60.png b/docs/html/images/brand/pt-pt_app_rgb_wo_60.png
new file mode 100644
index 0000000..65dd887
--- /dev/null
+++ b/docs/html/images/brand/pt-pt_app_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/pt-pt_generic_rgb_wo_45.png b/docs/html/images/brand/pt-pt_generic_rgb_wo_45.png
new file mode 100644
index 0000000..a616cf1
--- /dev/null
+++ b/docs/html/images/brand/pt-pt_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/pt-pt_generic_rgb_wo_60.png b/docs/html/images/brand/pt-pt_generic_rgb_wo_60.png
new file mode 100644
index 0000000..36a7b83
--- /dev/null
+++ b/docs/html/images/brand/pt-pt_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ro_generic_rgb_wo_45.png b/docs/html/images/brand/ro_generic_rgb_wo_45.png
new file mode 100644
index 0000000..c18a548
--- /dev/null
+++ b/docs/html/images/brand/ro_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ro_generic_rgb_wo_60.png b/docs/html/images/brand/ro_generic_rgb_wo_60.png
new file mode 100644
index 0000000..b8f3433
--- /dev/null
+++ b/docs/html/images/brand/ro_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/ru_generic_rgb_wo_45.png b/docs/html/images/brand/ru_generic_rgb_wo_45.png
new file mode 100644
index 0000000..c049ddb
--- /dev/null
+++ b/docs/html/images/brand/ru_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/ru_generic_rgb_wo_60.png b/docs/html/images/brand/ru_generic_rgb_wo_60.png
new file mode 100644
index 0000000..e00c276
--- /dev/null
+++ b/docs/html/images/brand/ru_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/sk_generic_rgb_wo_45.png b/docs/html/images/brand/sk_generic_rgb_wo_45.png
new file mode 100644
index 0000000..27ce06a
--- /dev/null
+++ b/docs/html/images/brand/sk_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/sk_generic_rgb_wo_60.png b/docs/html/images/brand/sk_generic_rgb_wo_60.png
new file mode 100644
index 0000000..8591f2c
--- /dev/null
+++ b/docs/html/images/brand/sk_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/sl_generic_rgb_wo_45.png b/docs/html/images/brand/sl_generic_rgb_wo_45.png
new file mode 100644
index 0000000..115a99d
--- /dev/null
+++ b/docs/html/images/brand/sl_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/sl_generic_rgb_wo_60.png b/docs/html/images/brand/sl_generic_rgb_wo_60.png
new file mode 100644
index 0000000..37c2e52
--- /dev/null
+++ b/docs/html/images/brand/sl_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/sr_generic_rgb_wo_45.png b/docs/html/images/brand/sr_generic_rgb_wo_45.png
new file mode 100644
index 0000000..86dba47
--- /dev/null
+++ b/docs/html/images/brand/sr_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/sr_generic_rgb_wo_60.png b/docs/html/images/brand/sr_generic_rgb_wo_60.png
new file mode 100644
index 0000000..67806da
--- /dev/null
+++ b/docs/html/images/brand/sr_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/sv_generic_rgb_wo_45.png b/docs/html/images/brand/sv_generic_rgb_wo_45.png
new file mode 100644
index 0000000..fb390d8
--- /dev/null
+++ b/docs/html/images/brand/sv_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/sv_generic_rgb_wo_60.png b/docs/html/images/brand/sv_generic_rgb_wo_60.png
new file mode 100644
index 0000000..e83dce7
--- /dev/null
+++ b/docs/html/images/brand/sv_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/sw_generic_rgb_wo_45.png b/docs/html/images/brand/sw_generic_rgb_wo_45.png
new file mode 100644
index 0000000..c7deecc
--- /dev/null
+++ b/docs/html/images/brand/sw_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/sw_generic_rgb_wo_60.png b/docs/html/images/brand/sw_generic_rgb_wo_60.png
new file mode 100644
index 0000000..9c0d057
--- /dev/null
+++ b/docs/html/images/brand/sw_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/th_generic_rgb_wo_45.png b/docs/html/images/brand/th_generic_rgb_wo_45.png
new file mode 100644
index 0000000..803b6c5
--- /dev/null
+++ b/docs/html/images/brand/th_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/th_generic_rgb_wo_60.png b/docs/html/images/brand/th_generic_rgb_wo_60.png
new file mode 100644
index 0000000..6e36e02
--- /dev/null
+++ b/docs/html/images/brand/th_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/tr_generic_rgb_wo_45.png b/docs/html/images/brand/tr_generic_rgb_wo_45.png
new file mode 100644
index 0000000..baa8394
--- /dev/null
+++ b/docs/html/images/brand/tr_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/tr_generic_rgb_wo_60.png b/docs/html/images/brand/tr_generic_rgb_wo_60.png
new file mode 100644
index 0000000..63fa31f
--- /dev/null
+++ b/docs/html/images/brand/tr_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/uk_generic_rgb_wo_45.png b/docs/html/images/brand/uk_generic_rgb_wo_45.png
new file mode 100644
index 0000000..68c111f
--- /dev/null
+++ b/docs/html/images/brand/uk_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/uk_generic_rgb_wo_60.png b/docs/html/images/brand/uk_generic_rgb_wo_60.png
new file mode 100644
index 0000000..918d70a
--- /dev/null
+++ b/docs/html/images/brand/uk_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/vi_generic_rgb_wo_45.png b/docs/html/images/brand/vi_generic_rgb_wo_45.png
new file mode 100644
index 0000000..e39d00a
--- /dev/null
+++ b/docs/html/images/brand/vi_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/vi_generic_rgb_wo_60.png b/docs/html/images/brand/vi_generic_rgb_wo_60.png
new file mode 100644
index 0000000..ba1e9a0
--- /dev/null
+++ b/docs/html/images/brand/vi_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/zh-cn_generic_rgb_wo_45.png b/docs/html/images/brand/zh-cn_generic_rgb_wo_45.png
new file mode 100644
index 0000000..c7748de
--- /dev/null
+++ b/docs/html/images/brand/zh-cn_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/zh-cn_generic_rgb_wo_60.png b/docs/html/images/brand/zh-cn_generic_rgb_wo_60.png
new file mode 100644
index 0000000..0a0f91a
--- /dev/null
+++ b/docs/html/images/brand/zh-cn_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/zh-hk_generic_rgb_wo_45.png b/docs/html/images/brand/zh-hk_generic_rgb_wo_45.png
new file mode 100644
index 0000000..c3d064c
--- /dev/null
+++ b/docs/html/images/brand/zh-hk_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/zh-hk_generic_rgb_wo_60.png b/docs/html/images/brand/zh-hk_generic_rgb_wo_60.png
new file mode 100644
index 0000000..2b072de
--- /dev/null
+++ b/docs/html/images/brand/zh-hk_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/zh-tw_generic_rgb_wo_45.png b/docs/html/images/brand/zh-tw_generic_rgb_wo_45.png
new file mode 100644
index 0000000..7bb2b09
--- /dev/null
+++ b/docs/html/images/brand/zh-tw_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/zh-tw_generic_rgb_wo_60.png b/docs/html/images/brand/zh-tw_generic_rgb_wo_60.png
new file mode 100644
index 0000000..0797c84b
--- /dev/null
+++ b/docs/html/images/brand/zh-tw_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/images/brand/zu_generic_rgb_wo_45.png b/docs/html/images/brand/zu_generic_rgb_wo_45.png
new file mode 100644
index 0000000..1e9f7c7
--- /dev/null
+++ b/docs/html/images/brand/zu_generic_rgb_wo_45.png
Binary files differ
diff --git a/docs/html/images/brand/zu_generic_rgb_wo_60.png b/docs/html/images/brand/zu_generic_rgb_wo_60.png
new file mode 100644
index 0000000..09f521b
--- /dev/null
+++ b/docs/html/images/brand/zu_generic_rgb_wo_60.png
Binary files differ
diff --git a/docs/html/training/basics/activity-lifecycle/recreating.jd b/docs/html/training/basics/activity-lifecycle/recreating.jd
index 1b88e19..71fd5dd 100644
--- a/docs/html/training/basics/activity-lifecycle/recreating.jd
+++ b/docs/html/training/basics/activity-lifecycle/recreating.jd
@@ -39,7 +39,7 @@
 <p>When your activity is destroyed because the user presses <em>Back</em> or the activity finishes
 itself, the system's concept of that {@link android.app.Activity} instance is gone forever because
 the behavior indicates the activity is no longer needed. However, if the system destroys
-the activity due to system constraints (rather than normal app behavior), then althought the actual
+the activity due to system constraints (rather than normal app behavior), then although the actual
 {@link android.app.Activity} instance is gone, the system remembers that it existed such that if
 the user navigates back to it, the system creates a new instance of the activity using a set of
 saved data that describes the state of the activity when it was destroyed. The saved data that the
@@ -126,7 +126,7 @@
 state from the {@link android.os.Bundle} that the system
 passes your activity. Both the {@link android.app.Activity#onCreate onCreate()} and {@link
 android.app.Activity#onRestoreInstanceState onRestoreInstanceState()} callback methods receive
-the same {@link android.os.Bundle} that containes the instance state information.</p>
+the same {@link android.os.Bundle} that contains the instance state information.</p>
 
 <p>Because the {@link android.app.Activity#onCreate onCreate()} method is called whether the
 system is creating a new instance of your activity or recreating a previous one, you must check
diff --git a/docs/html/training/basics/activity-lifecycle/starting.jd b/docs/html/training/basics/activity-lifecycle/starting.jd
index dd17304..dce6e30 100644
--- a/docs/html/training/basics/activity-lifecycle/starting.jd
+++ b/docs/html/training/basics/activity-lifecycle/starting.jd
@@ -265,7 +265,7 @@
 with the activity and your activity should perform most cleanup during {@link
 android.app.Activity#onPause} and {@link android.app.Activity#onStop}. However, if your
 activity includes background threads that you created during {@link
-android.app.Activity#onCreate onCreate()} or other other long-running resources that could
+android.app.Activity#onCreate onCreate()} or other long-running resources that could
 potentially leak memory if not properly closed, you should kill them during  {@link
 android.app.Activity#onDestroy}.</p>
 
diff --git a/docs/html/training/basics/data-storage/shared-preferences.jd b/docs/html/training/basics/data-storage/shared-preferences.jd
index 67f45cb..099da67 100644
--- a/docs/html/training/basics/data-storage/shared-preferences.jd
+++ b/docs/html/training/basics/data-storage/shared-preferences.jd
@@ -115,7 +115,7 @@
 
 <pre>
 SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
-long default = getResources().getInteger(R.string.saved_high_score_default));
-long highScore = sharedPref.getInt(getString(R.string.saved_high_score), default);
+int defaultValue = getResources().getInteger(R.string.saved_high_score_default);
+long highScore = sharedPref.getInt(getString(R.string.saved_high_score), defaultValue);
 </pre>
 
diff --git a/docs/html/training/basics/network-ops/xml.jd b/docs/html/training/basics/network-ops/xml.jd
index b148257..0ea696d 100644
--- a/docs/html/training/basics/network-ops/xml.jd
+++ b/docs/html/training/basics/network-ops/xml.jd
@@ -551,5 +551,5 @@
     conn.setDoInput(true);
     // Starts the query
     conn.connect();
-    InputStream stream = conn.getInputStream();      
+    return conn.getInputStream();
 }</pre>
diff --git a/docs/html/training/basics/supporting-devices/screens.jd b/docs/html/training/basics/supporting-devices/screens.jd
index 8697cd5..1114f21 100644
--- a/docs/html/training/basics/supporting-devices/screens.jd
+++ b/docs/html/training/basics/supporting-devices/screens.jd
@@ -108,7 +108,7 @@
 
 <p>By default, the <code>layout/main.xml</code> file is used for portrait orientation.</p>
 
-<p>If you want a provide a special layout for landscape, including while on large screens, then
+<p>If you want to provide a special layout for landscape, including while on large screens, then
 you need to use both the <code>large</code> and <code>land</code> qualifier:</p>
 
 <pre class="classic no-pretty-print">
diff --git a/docs/html/training/custom-views/index.jd b/docs/html/training/custom-views/index.jd
index 0661c05..cec75b4 100644
--- a/docs/html/training/custom-views/index.jd
+++ b/docs/html/training/custom-views/index.jd
@@ -17,12 +17,12 @@
 
         <h2>You should also read</h2>
         <ul>
-            <li><a href="{@docRoot}/guide/topics/ui/custom-components.html">Custom Components</a>
+            <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
+            <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
+            <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>
diff --git a/docs/html/training/displaying-bitmaps/load-bitmap.jd b/docs/html/training/displaying-bitmaps/load-bitmap.jd
index c0a5709..283f272 100644
--- a/docs/html/training/displaying-bitmaps/load-bitmap.jd
+++ b/docs/html/training/displaying-bitmaps/load-bitmap.jd
@@ -110,12 +110,17 @@
     int inSampleSize = 1;
 
     if (height > reqHeight || width > reqWidth) {
-        if (width > height) {
-            inSampleSize = Math.round((float)height / (float)reqHeight);
-        } else {
-            inSampleSize = Math.round((float)width / (float)reqWidth);
-        }
+
+        // Calculate ratios of height and width to requested height and width
+        final int heightRatio = Math.round((float) height / (float) reqHeight);
+        final int widthRatio = Math.round((float) width / (float) reqWidth);
+
+        // Choose the smallest ratio as inSampleSize value, this will guarantee
+        // a final image with both dimensions larger than or equal to the
+        // requested height and width.
+        inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
     }
+
     return inSampleSize;
 }
 </pre>
diff --git a/docs/html/training/managing-audio/volume-playback.jd b/docs/html/training/managing-audio/volume-playback.jd
index 76abbb6..be0f583 100644
--- a/docs/html/training/managing-audio/volume-playback.jd
+++ b/docs/html/training/managing-audio/volume-playback.jd
@@ -153,4 +153,4 @@
 UI.</p>
 
 <p>A better approach is to register and unregister the media button event receiver when your
-application gains and losses the audio focus. This is covered in detail in the next lesson.</p>
+application gains and loses the audio focus. This is covered in detail in the next lesson.</p>
diff --git a/docs/html/training/multiple-apks/texture.jd b/docs/html/training/multiple-apks/texture.jd
index e4ea72b..c49cc95 100644
--- a/docs/html/training/multiple-apks/texture.jd
+++ b/docs/html/training/multiple-apks/texture.jd
@@ -90,8 +90,8 @@
   <tbody>
     <tr>
       <td class="blueCell">ETC1</td>
-      <td class="greenCell">ATI</td>
-      <td class="redCell">PowerVR</td>
+      <td class="redCell">ATI</td>
+      <td class="greenCell">PowerVR</td>
     </tr>
   </tbody>
 </table>
diff --git a/docs/html/training/sharing/send.jd b/docs/html/training/sharing/send.jd
index 741c017..9cb8eac 100644
--- a/docs/html/training/sharing/send.jd
+++ b/docs/html/training/sharing/send.jd
@@ -32,7 +32,7 @@
 <p>When you construct an intent, you must specify the action you want the intent to "trigger." 
 Android defines several actions, including {@link android.content.Intent#ACTION_SEND} which, as 
 you can probably guess, indicates that the intent is sending data from one activity to another, 
-even across process boundaries. To send data to another activity, all you need to do is speicify 
+even across process boundaries. To send data to another activity, all you need to do is specify 
 the data and its type, the system will identify compatible receiving activities and display them 
 to the user (if there are multiple options) or immediately start the activity (if there is only 
 one option). Similarly, you can advertise the data types that your activities support receiving 
@@ -95,7 +95,7 @@
 sendIntent.setAction(Intent.ACTION_SEND);
 sendIntent.putExtra(Intent.EXTRA_TEXT, &quot;This is my text to send.&quot;);
 sendIntent.setType(&quot;text/plain&quot;);
-startActivity(<strong>Intent.createChooser(sendIntent, getResources().getText(R.string.send_to)</strong>);
+startActivity(<strong>Intent.createChooser(sendIntent, getResources().getText(R.string.send_to))</strong>);
 </pre>
 
 <p>The resulting dialog is shown in figure 1.</p>
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
index 95e7b5e..5c74552 100755
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/MediaRecorderStressTestRunner.java
@@ -33,18 +33,16 @@
     // the test must be supported by the corresponding camera.
     public static int mCameraId = 0;
     public static int mProfileQuality = CamcorderProfile.QUALITY_HIGH;
-    public static CamcorderProfile profile =
-                        CamcorderProfile.get(mCameraId, mProfileQuality);
-
-    public static int mIterations = 100;
+    public static CamcorderProfile profile = CamcorderProfile.get(mCameraId, mProfileQuality);
+    public static int mIterations = 15;
     public static int mVideoEncoder = profile.videoCodec;
-    public static int mAudioEncdoer = profile.audioCodec;
+    public static int mAudioEncoder = profile.audioCodec;
     public static int mFrameRate = profile.videoFrameRate;
     public static int mVideoWidth = profile.videoFrameWidth;
     public static int mVideoHeight = profile.videoFrameHeight;
     public static int mBitRate = profile.videoBitRate;
     public static boolean mRemoveVideo = true;
-    public static int mDuration = 10 * 1000; // 10 seconds
+    public static int mDuration = 60 * 1000; // 60 seconds
     public static int mTimeLapseDuration = 180 * 1000; // 3 minutes
     public static double mCaptureRate = 0.5; // 2 sec timelapse interval
 
@@ -64,41 +62,41 @@
     public void onCreate(Bundle icicle) {
         super.onCreate(icicle);
         String iterations = (String) icicle.get("iterations");
-        String video_encoder = (String) icicle.get("video_encoder");
-        String audio_encoder = (String) icicle.get("audio_encoder");
-        String frame_rate = (String) icicle.get("frame_rate");
-        String video_width = (String) icicle.get("video_width");
-        String video_height = (String) icicle.get("video_height");
-        String bit_rate = (String) icicle.get("bit_rate");
-        String record_duration = (String) icicle.get("record_duration");
-        String remove_videos = (String) icicle.get("remove_videos");
+        String videoEncoder = (String) icicle.get("video_encoder");
+        String audioEncoder = (String) icicle.get("audio_encoder");
+        String frameRate = (String) icicle.get("frame_rate");
+        String videoWidth = (String) icicle.get("video_width");
+        String videoHeight = (String) icicle.get("video_height");
+        String bitRate = (String) icicle.get("bit_rate");
+        String recordDuration = (String) icicle.get("record_duration");
+        String removeVideos = (String) icicle.get("remove_videos");
 
         if (iterations != null ) {
             mIterations = Integer.parseInt(iterations);
         }
-        if ( video_encoder != null) {
-            mVideoEncoder = Integer.parseInt(video_encoder);
+        if (videoEncoder != null) {
+            mVideoEncoder = Integer.parseInt(videoEncoder);
         }
-        if ( audio_encoder != null) {
-            mAudioEncdoer = Integer.parseInt(audio_encoder);
+        if (audioEncoder != null) {
+            mAudioEncoder = Integer.parseInt(audioEncoder);
         }
-        if (frame_rate != null) {
-            mFrameRate = Integer.parseInt(frame_rate);
+        if (frameRate != null) {
+            mFrameRate = Integer.parseInt(frameRate);
         }
-        if (video_width != null) {
-            mVideoWidth = Integer.parseInt(video_width);
+        if (videoWidth != null) {
+            mVideoWidth = Integer.parseInt(videoWidth);
         }
-        if (video_height != null) {
-            mVideoHeight = Integer.parseInt(video_height);
+        if (videoHeight != null) {
+            mVideoHeight = Integer.parseInt(videoHeight);
         }
-        if (bit_rate != null) {
-            mBitRate = Integer.parseInt(bit_rate);
+        if (bitRate != null) {
+            mBitRate = Integer.parseInt(bitRate);
         }
-        if (record_duration != null) {
-            mDuration = Integer.parseInt(record_duration);
+        if (recordDuration != null) {
+            mDuration = Integer.parseInt(recordDuration);
         }
-        if (remove_videos != null) {
-            if (remove_videos.compareTo("true") == 0) {
+        if (removeVideos != null) {
+            if (removeVideos.compareTo("true") == 0) {
                 mRemoveVideo = true;
             } else {
                 mRemoveVideo = false;
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java
index ab9e36c3..ed1d8fc 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/CameraStressTest.java
@@ -28,6 +28,7 @@
 import java.io.Writer;
 import java.util.concurrent.Semaphore;
 import java.util.concurrent.TimeUnit;
+import java.util.List;
 
 import android.hardware.Camera;
 import android.hardware.Camera.PictureCallback;
@@ -44,7 +45,7 @@
 import junit.framework.Assert;
 
 /**
- * Junit / Instrumentation test case for the camera zoom api
+ * Junit / Instrumentation test case for the camera zoom and scene mode APIs
  *
  * adb shell am instrument
  *  -e class com.android.mediaframeworktest.stress.CameraStressTest
@@ -54,18 +55,22 @@
     private String TAG = "CameraStressTest";
     private Camera mCamera;
 
+    private static final int CAMERA_ID = 0;
     private static final int NUMBER_OF_ZOOM_LOOPS = 100;
+    private static final int NUMBER_OF_SCENE_MODE_LOOPS = 10;
     private static final long WAIT_GENERIC = 3 * 1000; // 3 seconds
     private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds
     private static final long WAIT_ZOOM_ANIMATION = 5 * 1000; // 5 seconds
-    private static final String CAMERA_STRESS_OUTPUT =
-            "/sdcard/cameraStressOutput.txt";
-    private static final int CAMERA_ID = 0;
+    private static final String CAMERA_STRESS_IMAGES_DIRECTORY = "cameraStressImages";
+    private static final String CAMERA_STRESS_IMAGES_PREFIX = "camera-stress-test";
+    private static final String CAMERA_STRESS_OUTPUT = "cameraStressOutput.txt";
     private final CameraErrorCallback mCameraErrorCallback = new CameraErrorCallback();
 
     private Thread mLooperThread;
     private Handler mHandler;
 
+    private Writer mOutput;
+
     public CameraStressTest() {
         super("com.android.mediaframeworktest", MediaFrameworkTest.class);
     }
@@ -89,6 +94,20 @@
         }
         getActivity();
         super.setUp();
+
+        File sdcard = Environment.getExternalStorageDirectory();
+
+        // Create the test images directory if it doesn't exist
+        File stressImagesDirectory = new File(String.format("%s/%s", sdcard,
+                CAMERA_STRESS_IMAGES_DIRECTORY));
+        if (!stressImagesDirectory.exists()) {
+            stressImagesDirectory.mkdir();
+        }
+
+        // Start writing output file
+        File stressOutFile = new File(String.format("%s/%s",sdcard, CAMERA_STRESS_OUTPUT));
+        mOutput = new BufferedWriter(new FileWriter(stressOutFile, true));
+        mOutput.write(this.getName() + ":\n");
     }
 
     @Override
@@ -105,6 +124,9 @@
             mLooperThread = null;
         }
 
+        mOutput.write("\n\n");
+        mOutput.close();
+
         super.tearDown();
     }
 
@@ -127,9 +149,7 @@
 
     private final class CameraErrorCallback implements android.hardware.Camera.ErrorCallback {
         public void onError(int error, android.hardware.Camera camera) {
-            if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
-                assertTrue("Camera test mediaserver died", false);
-            }
+            fail(String.format("Camera error, code: %d", error));
         }
     }
 
@@ -154,49 +174,76 @@
 
             try {
                 Log.v(TAG, "JPEG picture taken");
-                fos = new FileOutputStream(String.format("%s/zoom-test-%d.jpg",
-                        Environment.getExternalStorageDirectory(), System.currentTimeMillis()));
+                fos = new FileOutputStream(String.format("%s/%s/%s-%d.jpg",
+                        Environment.getExternalStorageDirectory(), CAMERA_STRESS_IMAGES_DIRECTORY,
+                        CAMERA_STRESS_IMAGES_PREFIX, System.currentTimeMillis()));
                 fos.write(data);
-            }
-            catch (FileNotFoundException e) {
-                Log.v(TAG, "File not found: " + e.toString());
-            }
-            catch (IOException e) {
-                Log.v(TAG, "Error accessing file: " + e.toString());
-            }
-            finally {
+            } catch (FileNotFoundException e) {
+                Log.e(TAG, "File not found: " + e.toString());
+            } catch (IOException e) {
+                Log.e(TAG, "Error accessing file: " + e.toString());
+            } finally {
                 try {
                     if (fos != null) {
                         fos.close();
                     }
-                }
-                catch (IOException e) {
-                    Log.v(TAG, "Error closing file: " + e.toString());
+                } catch (IOException e) {
+                    Log.e(TAG, "Error closing file: " + e.toString());
                 }
             }
         }
     };
 
     // Helper method for cleaning up pics taken during testStressCameraZoom
-    private void cleanupZoomImages() {
+    private void cleanupStressTestImages() {
         try {
-            File sdcard = Environment.getExternalStorageDirectory();
+            File stressImagesDirectory = new File(String.format("%s/%s",
+                    Environment.getExternalStorageDirectory(), CAMERA_STRESS_IMAGES_DIRECTORY));
             File[] zoomImages = null;
 
             FilenameFilter filter = new FilenameFilter() {
                 public boolean accept(File dir, String name) {
-                    return name.startsWith("zoom-test-");
+                    return name.startsWith(CAMERA_STRESS_IMAGES_PREFIX);
                 }
             };
 
-            zoomImages = sdcard.listFiles(filter);
+            zoomImages = stressImagesDirectory.listFiles(filter);
 
             for (File f : zoomImages) {
                 f.delete();
             }
+        } catch (SecurityException e) {
+            Log.e(TAG, "Security manager access violation: " + e.toString());
         }
-        catch (SecurityException e) {
-            Log.v(TAG, "Security manager access violation: " + e.toString());
+    }
+
+    // Helper method for starting up the camera preview
+    private void startCameraPreview(SurfaceHolder surfaceHolder) {
+        try {
+            mCamera.setErrorCallback(mCameraErrorCallback);
+            mCamera.setPreviewDisplay(surfaceHolder);
+            mCamera.startPreview();
+            Thread.sleep(WAIT_GENERIC);
+        } catch (IOException e) {
+            Log.e(TAG, "Error setting preview display: " + e.toString());
+        } catch (InterruptedException e) {
+            Log.e(TAG, "Error waiting for preview to come up: " + e.toString());
+        } catch (Exception e) {
+            Log.e(TAG, "Error starting up camera preview: " + e.toString());
+        }
+    }
+
+    // Helper method for taking a photo
+    private void capturePhoto() {
+        try {
+            mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
+            Thread.sleep(WAIT_GENERIC);
+            mCamera.stopPreview();
+            mCamera.release();
+        } catch (InterruptedException e) {
+            Log.e(TAG, "Error waiting for photo to be taken: " + e.toString());
+        } catch (Exception e) {
+            Log.e(TAG, "Error capturing photo: " + e.toString());
         }
     }
 
@@ -205,14 +252,11 @@
     public void testStressCameraZoom() throws Exception {
         SurfaceHolder mSurfaceHolder;
         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
-        File stressOutFile = new File(CAMERA_STRESS_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
-        output.write("Camera zoom stress:\n");
-        output.write("Total number of loops: " +  NUMBER_OF_ZOOM_LOOPS + "\n");
+        mOutput.write("Total number of loops: " + NUMBER_OF_ZOOM_LOOPS + "\n");
 
         try {
             Log.v(TAG, "Start preview");
-            output.write("No of loop: ");
+            mOutput.write("No of loop: ");
 
             mCamera = Camera.open(CAMERA_ID);
             Camera.Parameters params = mCamera.getParameters();
@@ -220,9 +264,8 @@
 
             if (!params.isSmoothZoomSupported() && !params.isZoomSupported()) {
                 Log.v(TAG, "Device camera does not support zoom");
-                assertTrue("Camera zoom stress test", false);
-            }
-            else {
+                fail("Camera zoom stress test failed");
+            } else {
                 Log.v(TAG, "Device camera does support zoom");
 
                 int nextZoomLevel = 0;
@@ -235,11 +278,7 @@
                         }
                     });
 
-                    mCamera.setErrorCallback(mCameraErrorCallback);
-                    mCamera.setPreviewDisplay(mSurfaceHolder);
-                    mCamera.startPreview();
-                    Thread.sleep(WAIT_GENERIC);
-
+                    startCameraPreview(mSurfaceHolder);
                     params = mCamera.getParameters();
                     int currentZoomLevel = params.getZoom();
 
@@ -250,8 +289,7 @@
 
                     if (params.isSmoothZoomSupported()) {
                         mCamera.startSmoothZoom(nextZoomLevel);
-                    }
-                    else {
+                    } else {
                         params.setZoom(nextZoomLevel);
                         mCamera.setParameters(params);
                     }
@@ -259,23 +297,66 @@
 
                     // sleep allows for zoom animation to finish
                     Thread.sleep(WAIT_ZOOM_ANIMATION);
+                    capturePhoto();
 
-                    // take picture
-                    mCamera.takePicture(shutterCallback, rawCallback, jpegCallback);
-                    Thread.sleep(WAIT_GENERIC);
-                    mCamera.stopPreview();
-                    mCamera.release();
-                    output.write(" ," + i);
+                    if (i == 0) {
+                        mOutput.write(Integer.toString(i));
+                    } else {
+                        mOutput.write(", " + i);
+                    }
                 }
             }
+            cleanupStressTestImages();
+        } catch (Exception e) {
+            Log.e(TAG, e.toString());
+            fail("Camera zoom stress test Exception");
+        }
+    }
 
-            cleanupZoomImages();
+    // Test case for stressing the camera scene mode feature
+    @LargeTest
+    public void testStressCameraSceneModes() throws Exception {
+        SurfaceHolder mSurfaceHolder;
+        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
+
+        try {
+            mCamera = Camera.open(CAMERA_ID);
+            Camera.Parameters params = mCamera.getParameters();
+            mCamera.release();
+            List<String> supportedSceneModes = params.getSupportedSceneModes();
+            assertNotNull("No scene modes supported", supportedSceneModes);
+
+            mOutput.write("Total number of loops: " +
+                    (NUMBER_OF_SCENE_MODE_LOOPS * supportedSceneModes.size()) + "\n");
+            Log.v(TAG, "Start preview");
+            mOutput.write("No of loop: ");
+
+            for (int i = 0; i < supportedSceneModes.size(); i++) {
+                for (int j = 0; j < NUMBER_OF_SCENE_MODE_LOOPS; j++) {
+                    runOnLooper(new Runnable() {
+                        @Override
+                        public void run() {
+                            mCamera = Camera.open(CAMERA_ID);
+                        }
+                    });
+
+                    startCameraPreview(mSurfaceHolder);
+                    Log.v(TAG, "Setting mode to " + supportedSceneModes.get(i));
+                    params.setSceneMode(supportedSceneModes.get(i));
+                    mCamera.setParameters(params);
+                    capturePhoto();
+
+                    if ((i == 0) && (j == 0)) {
+                        mOutput.write(Integer.toString(j + i * NUMBER_OF_SCENE_MODE_LOOPS));
+                    } else {
+                        mOutput.write(", " + (j + i * NUMBER_OF_SCENE_MODE_LOOPS));
+                    }
+                }
+            }
+            cleanupStressTestImages();
+        } catch (Exception e) {
+            Log.e(TAG, e.toString());
+            fail("Camera scene mode test Exception");
         }
-        catch (Exception e) {
-            assertTrue("Camera zoom stress test Exception", false);
-            Log.v(TAG, e.toString());
-        }
-        output.write("\n\n");
-        output.close();
     }
 }
diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
index 6995c60..6eb9891 100644
--- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
+++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/stress/MediaRecorderStressTest.java
@@ -31,6 +31,7 @@
 import android.media.CamcorderProfile;
 import android.media.MediaPlayer;
 import android.media.MediaRecorder;
+import android.os.Environment;
 import android.os.Handler;
 import android.os.Looper;
 import android.test.ActivityInstrumentationTestCase2;
@@ -48,26 +49,26 @@
     private MediaRecorder mRecorder;
     private Camera mCamera;
 
+    private static final int CAMERA_ID = 0;
     private static final int NUMBER_OF_CAMERA_STRESS_LOOPS = 100;
     private static final int NUMBER_OF_RECORDER_STRESS_LOOPS = 100;
     private static final int NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS = 50;
     private static final int NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER = 200;
     private static final int NUMBER_OF_TIME_LAPSE_LOOPS = 25;
     private static final int TIME_LAPSE_PLAYBACK_WAIT_TIME = 5* 1000; // 5 seconds
+    private static final int USE_TEST_RUNNER_PROFILE = -1;
+    private static final long WAIT_TIMEOUT = 10 * 1000; // 10 seconds
     private static final long WAIT_TIME_CAMERA_TEST = 3 * 1000; // 3 seconds
     private static final long WAIT_TIME_RECORDER_TEST = 6 * 1000; // 6 seconds
-    private static final String OUTPUT_FILE = "/sdcard/temp";
     private static final String OUTPUT_FILE_EXT = ".3gp";
-    private static final String MEDIA_STRESS_OUTPUT =
-        "/sdcard/mediaStressOutput.txt";
-    private static final int CAMERA_ID = 0;
+    private static final String MEDIA_STRESS_OUTPUT = "mediaStressOutput.txt";
 
     private final CameraErrorCallback mCameraErrorCallback = new CameraErrorCallback();
     private final RecorderErrorCallback mRecorderErrorCallback = new RecorderErrorCallback();
 
-    private final static int WAIT_TIMEOUT = 10 * 1000; // 10 seconds
-    private Thread mLooperThread;
     private Handler mHandler;
+    private Thread mLooperThread;
+    private Writer mOutput;
 
     public MediaRecorderStressTest() {
         super("com.android.mediaframeworktest", MediaFrameworkTest.class);
@@ -95,6 +96,11 @@
         Thread.sleep(2000);
         getActivity();
         super.setUp();
+
+        File stressOutFile = new File(String.format("%s/%s",
+                Environment.getExternalStorageDirectory(), MEDIA_STRESS_OUTPUT));
+        mOutput = new BufferedWriter(new FileWriter(stressOutFile, true));
+        mOutput.write(this.getName() + "\n");
     }
 
     @Override
@@ -110,7 +116,8 @@
             }
             mLooperThread = null;
         }
-
+        mOutput.write("\n\n");
+        mOutput.close();
         super.tearDown();
     }
 
@@ -133,16 +140,13 @@
 
     private final class CameraErrorCallback implements android.hardware.Camera.ErrorCallback {
         public void onError(int error, android.hardware.Camera camera) {
-            if (error == android.hardware.Camera.CAMERA_ERROR_SERVER_DIED) {
-                assertTrue("Camera test mediaserver died", false);
-            }
+            fail(String.format("Camera error, code: %d", error));
         }
     }
 
     private final class RecorderErrorCallback implements MediaRecorder.OnErrorListener {
         public void onError(MediaRecorder mr, int what, int extra) {
-            // fail the test case no matter what error come up
-            assertTrue("mediaRecorder error", false);
+            fail(String.format("Media recorder error, code: %d\textra: %d", what, extra));
         }
     }
 
@@ -151,14 +155,11 @@
     public void testStressCamera() throws Exception {
         SurfaceHolder mSurfaceHolder;
         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
-        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
-        output.write("Camera start preview stress:\n");
-        output.write("Total number of loops:" +
-                NUMBER_OF_CAMERA_STRESS_LOOPS + "\n");
+        Log.v(TAG, "Camera start preview stress test");
+        mOutput.write("Total number of loops:" + NUMBER_OF_CAMERA_STRESS_LOOPS + "\n");
         try {
             Log.v(TAG, "Start preview");
-            output.write("No of loop: ");
+            mOutput.write("No of loop: ");
 
             for (int i = 0; i< NUMBER_OF_CAMERA_STRESS_LOOPS; i++) {
                 runOnLooper(new Runnable() {
@@ -173,29 +174,27 @@
                 Thread.sleep(WAIT_TIME_CAMERA_TEST);
                 mCamera.stopPreview();
                 mCamera.release();
-                output.write(" ," + i);
+                if (i == 0) {
+                    mOutput.write(i + 1);
+                } else {
+                    mOutput.write(String.format(", %d", (i + 1)));
+                }
             }
         } catch (Exception e) {
-            assertTrue("CameraStressTest", false);
-            Log.v(TAG, e.toString());
+            Log.e(TAG, e.toString());
+            fail("Camera startup preview stress test");
         }
-        output.write("\n\n");
-        output.close();
     }
 
     //Test case for stressing the camera preview.
     @LargeTest
     public void testStressRecorder() throws Exception {
-        String filename;
         SurfaceHolder mSurfaceHolder;
         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
-        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
-        output.write("H263 video record- reset after prepare Stress test\n");
-        output.write("Total number of loops:" +
-                NUMBER_OF_RECORDER_STRESS_LOOPS + "\n");
+        Log.v(TAG, "H263 video record: reset after prepare Stress test");
+        mOutput.write("Total number of loops:" + NUMBER_OF_RECORDER_STRESS_LOOPS + "\n");
         try {
-            output.write("No of loop: ");
+            mOutput.write("No of loop: ");
             Log.v(TAG, "Start preview");
             for (int i = 0; i < NUMBER_OF_RECORDER_STRESS_LOOPS; i++) {
                 runOnLooper(new Runnable() {
@@ -205,12 +204,15 @@
                     }
                 });
                 Log.v(TAG, "counter = " + i);
-                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
-                Log.v(TAG, filename);
+                String fileName = String.format("%s/temp%d%s",
+                        Environment.getExternalStorageDirectory(),
+                        i, OUTPUT_FILE_EXT);
+
+                Log.v(TAG, fileName);
                 mRecorder.setOnErrorListener(mRecorderErrorCallback);
                 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
-                mRecorder.setOutputFile(filename);
+                mRecorder.setOutputFile(fileName);
                 mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate);
                 mRecorder.setVideoSize(176,144);
                 Log.v(TAG, "setEncoder");
@@ -224,30 +226,29 @@
                 Thread.sleep(WAIT_TIME_RECORDER_TEST);
                 mRecorder.reset();
                 mRecorder.release();
-                output.write(", " + i);
+                if (i == 0) {
+                    mOutput.write(i + 1);
+                } else {
+                    mOutput.write(String.format(", %d", (i + 1)));
+                }
             }
         } catch (Exception e) {
-            assertTrue("Recorder Stress test", false);
-            Log.v(TAG, e.toString());
+            Log.e(TAG, e.toString());
+            fail("H263 video recording stress test");
         }
-        output.write("\n\n");
-        output.close();
     }
 
     //Stress test case for switching camera and video recorder preview.
     @LargeTest
     public void testStressCameraSwitchRecorder() throws Exception {
-        String filename;
         SurfaceHolder mSurfaceHolder;
         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
-        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
-        output.write("Camera and video recorder preview switching\n");
-        output.write("Total number of loops:"
-                + NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n");
+        Log.v(TAG, "Camera and video recorder preview switching");
+        mOutput.write("Total number of loops: " +
+                NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER + "\n");
         try {
             Log.v(TAG, "Start preview");
-            output.write("No of loop: ");
+            mOutput.write("No of loop: ");
             for (int i = 0; i < NUMBER_OF_SWTICHING_LOOPS_BW_CAMERA_AND_RECORDER; i++) {
                 runOnLooper(new Runnable() {
                     @Override
@@ -263,8 +264,10 @@
                 mCamera.release();
                 mCamera = null;
                 Log.v(TAG, "release camera");
-                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
-                Log.v(TAG, filename);
+                String fileName = String.format("%s/temp%d%s",
+                        Environment.getExternalStorageDirectory(),
+                        i, OUTPUT_FILE_EXT);
+                Log.v(TAG, fileName);
                 runOnLooper(new Runnable() {
                     @Override
                     public void run() {
@@ -274,7 +277,7 @@
                 mRecorder.setOnErrorListener(mRecorderErrorCallback);
                 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
-                mRecorder.setOutputFile(filename);
+                mRecorder.setOutputFile(fileName);
                 mRecorder.setVideoFrameRate(MediaRecorderStressTestRunner.mFrameRate);
                 mRecorder.setVideoSize(176,144);
                 Log.v(TAG, "Media recorder setEncoder");
@@ -287,117 +290,167 @@
                 Thread.sleep(WAIT_TIME_CAMERA_TEST);
                 mRecorder.release();
                 Log.v(TAG, "release video recorder");
-                output.write(", " + i);
+                if (i == 0) {
+                    mOutput.write(i + 1);
+                } else {
+                    mOutput.write(String.format(", %d", (i + 1)));
+                }
             }
         } catch (Exception e) {
-            assertTrue("Camer and recorder switch mode", false);
-                Log.v(TAG, e.toString());
+            Log.e(TAG, e.toString());
+            fail("Camera and recorder switch mode");
         }
-        output.write("\n\n");
-        output.close();
     }
 
-    public void validateRecordedVideo(String recorded_file) {
+    public void validateRecordedVideo(String recordedFile) {
         try {
             MediaPlayer mp = new MediaPlayer();
-            mp.setDataSource(recorded_file);
+            mp.setDataSource(recordedFile);
             mp.prepare();
             int duration = mp.getDuration();
             if (duration <= 0){
-                assertTrue("stressRecordAndPlayback", false);
+                fail("stressRecordAndPlayback");
             }
             mp.release();
         } catch (Exception e) {
-            assertTrue("stressRecordAndPlayback", false);
+            fail("stressRecordAndPlayback");
         }
     }
 
-    public void removeRecordedVideo(String filename){
-        File video = new File(filename);
-        Log.v(TAG, "remove recorded video " + filename);
+    public void removeRecordedVideo(String fileName){
+        File video = new File(fileName);
+        Log.v(TAG, "remove recorded video " + fileName);
         video.delete();
     }
 
-    //Stress test case for record a video and play right away.
-    @LargeTest
-    public void testStressRecordVideoAndPlayback() throws Exception {
-        int iterations = MediaRecorderStressTestRunner.mIterations;
-        int video_encoder = MediaRecorderStressTestRunner.mVideoEncoder;
-        int audio_encoder = MediaRecorderStressTestRunner.mAudioEncdoer;
-        int frame_rate = MediaRecorderStressTestRunner.mFrameRate;
-        int video_width = MediaRecorderStressTestRunner.mVideoWidth;
-        int video_height = MediaRecorderStressTestRunner.mVideoHeight;
-        int bit_rate = MediaRecorderStressTestRunner.mBitRate;
-        boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo;
-        int record_duration = MediaRecorderStressTestRunner.mDuration;
+    // Helper method for record & playback testing with different camcorder profiles
+    private void recordVideoAndPlayback(int profile) throws Exception {
+        int iterations;
+        int recordDuration;
+        boolean removeVideo;
 
-        String filename;
-        SurfaceHolder mSurfaceHolder;
-        mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
-        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
-        Writer output = new BufferedWriter(
-                new FileWriter(stressOutFile, true));
-        output.write("Video record and play back stress test:\n");
-        output.write("Total number of loops:"
-                + NUMBER_OF_RECORDERANDPLAY_STRESS_LOOPS + "\n");
+        int videoEncoder;
+        int audioEncoder;
+        int frameRate;
+        int videoWidth;
+        int videoHeight;
+        int bitRate;
+
+        if (profile != USE_TEST_RUNNER_PROFILE) {
+            assertTrue(String.format("Camera doesn't support profile %d", profile),
+                    CamcorderProfile.hasProfile(CAMERA_ID, profile));
+            CamcorderProfile camcorderProfile = CamcorderProfile.get(CAMERA_ID, profile);
+            videoEncoder = camcorderProfile.videoCodec;
+            audioEncoder = camcorderProfile.audioCodec;
+            frameRate = camcorderProfile.videoFrameRate;
+            videoWidth = camcorderProfile.videoFrameWidth;
+            videoHeight = camcorderProfile.videoFrameHeight;
+            bitRate = camcorderProfile.videoBitRate;
+        } else {
+            videoEncoder = MediaRecorderStressTestRunner.mVideoEncoder;
+            audioEncoder = MediaRecorderStressTestRunner.mAudioEncoder;
+            frameRate = MediaRecorderStressTestRunner.mFrameRate;
+            videoWidth = MediaRecorderStressTestRunner.mVideoWidth;
+            videoHeight = MediaRecorderStressTestRunner.mVideoHeight;
+            bitRate = MediaRecorderStressTestRunner.mBitRate;
+        }
+        iterations = MediaRecorderStressTestRunner.mIterations;
+        recordDuration = MediaRecorderStressTestRunner.mDuration;
+        removeVideo = MediaRecorderStressTestRunner.mRemoveVideo;
+
+        SurfaceHolder surfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
+        mOutput.write("Total number of loops: " + iterations + "\n");
+
         try {
-            output.write("No of loop: ");
-            for (int i = 0; i < iterations; i++){
-                filename = OUTPUT_FILE + i + OUTPUT_FILE_EXT;
-                Log.v(TAG, filename);
+            mOutput.write("No of loop: ");
+            for (int i = 0; i < iterations; i++) {
+                String fileName = String.format("%s/temp%d%s",
+                        Environment.getExternalStorageDirectory(), i, OUTPUT_FILE_EXT);
+                Log.v(TAG, fileName);
+
                 runOnLooper(new Runnable() {
                     @Override
                     public void run() {
                         mRecorder = new MediaRecorder();
                     }
                 });
+
                 Log.v(TAG, "iterations : " + iterations);
-                Log.v(TAG, "video_encoder : " + video_encoder);
-                Log.v(TAG, "audio_encoder : " + audio_encoder);
-                Log.v(TAG, "frame_rate : " + frame_rate);
-                Log.v(TAG, "video_width : " + video_width);
-                Log.v(TAG, "video_height : " + video_height);
-                Log.v(TAG, "bit rate : " + bit_rate);
-                Log.v(TAG, "record_duration : " + record_duration);
+                Log.v(TAG, "video encoder : " + videoEncoder);
+                Log.v(TAG, "audio encoder : " + audioEncoder);
+                Log.v(TAG, "frame rate : " + frameRate);
+                Log.v(TAG, "video width : " + videoWidth);
+                Log.v(TAG, "video height : " + videoHeight);
+                Log.v(TAG, "bit rate : " + bitRate);
+                Log.v(TAG, "record duration : " + recordDuration);
 
                 mRecorder.setOnErrorListener(mRecorderErrorCallback);
                 mRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
                 mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
                 mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
-                mRecorder.setOutputFile(filename);
-                mRecorder.setVideoFrameRate(frame_rate);
-                mRecorder.setVideoSize(video_width, video_height);
-                mRecorder.setVideoEncoder(video_encoder);
-                mRecorder.setAudioEncoder(audio_encoder);
-                mRecorder.setVideoEncodingBitRate(bit_rate);
+                mRecorder.setOutputFile(fileName);
+                mRecorder.setVideoFrameRate(frameRate);
+                mRecorder.setVideoSize(videoWidth, videoHeight);
+                mRecorder.setVideoEncoder(videoEncoder);
+                mRecorder.setAudioEncoder(audioEncoder);
+                mRecorder.setVideoEncodingBitRate(bitRate);
+
                 Log.v(TAG, "mediaRecorder setPreview");
-                mRecorder.setPreviewDisplay(mSurfaceHolder.getSurface());
+                mRecorder.setPreviewDisplay(surfaceHolder.getSurface());
                 mRecorder.prepare();
                 mRecorder.start();
-                Thread.sleep(record_duration);
+                Thread.sleep(recordDuration);
                 Log.v(TAG, "Before stop");
                 mRecorder.stop();
                 mRecorder.release();
+
                 //start the playback
                 MediaPlayer mp = new MediaPlayer();
-                mp.setDataSource(filename);
+                mp.setDataSource(fileName);
                 mp.setDisplay(MediaFrameworkTest.mSurfaceView.getHolder());
                 mp.prepare();
                 mp.start();
-                Thread.sleep(record_duration);
+                Thread.sleep(recordDuration);
                 mp.release();
-                validateRecordedVideo(filename);
-                if (remove_video) {
-                    removeRecordedVideo(filename);
+                validateRecordedVideo(fileName);
+                if (removeVideo) {
+                    removeRecordedVideo(fileName);
                 }
-                output.write(", " + i);
+                if (i == 0) {
+                    mOutput.write(i + 1);
+                } else {
+                    mOutput.write(String.format(", %d", (i + 1)));
+                }
             }
         } catch (Exception e) {
-            Log.v(TAG, e.toString());
-            assertTrue("record and playback", false);
+            Log.e(TAG, e.toString());
+            fail("Record and playback");
         }
-        output.write("\n\n");
-        output.close();
+    }
+
+    // Record and playback stress test @ 1080P quality
+    @LargeTest
+    public void testStressRecordVideoAndPlayback1080P() throws Exception {
+        recordVideoAndPlayback(CamcorderProfile.QUALITY_1080P);
+    }
+
+    // Record and playback stress test @ 720P quality
+    @LargeTest
+    public void testStressRecordVideoAndPlayback720P() throws Exception {
+        recordVideoAndPlayback(CamcorderProfile.QUALITY_720P);
+    }
+
+    // Record and playback stress test @ 480P quality
+    @LargeTest
+    public void testStressRecordVideoAndPlayback480P() throws Exception {
+        recordVideoAndPlayback(CamcorderProfile.QUALITY_480P);
+    }
+
+    // This test method uses the codec info from the test runner. Use this
+    // for more granular control of video encoding.
+    @LargeTest
+    public void defaultStressRecordVideoAndPlayback() throws Exception {
+        recordVideoAndPlayback(USE_TEST_RUNNER_PROFILE);
     }
 
     // Test case for stressing time lapse
@@ -405,21 +458,19 @@
     public void testStressTimeLapse() throws Exception {
         SurfaceHolder mSurfaceHolder;
         mSurfaceHolder = MediaFrameworkTest.mSurfaceView.getHolder();
-        int record_duration = MediaRecorderStressTestRunner.mTimeLapseDuration;
-        boolean remove_video = MediaRecorderStressTestRunner.mRemoveVideo;
+        int recordDuration = MediaRecorderStressTestRunner.mTimeLapseDuration;
+        boolean removeVideo = MediaRecorderStressTestRunner.mRemoveVideo;
         double captureRate = MediaRecorderStressTestRunner.mCaptureRate;
-        String filename;
-        File stressOutFile = new File(MEDIA_STRESS_OUTPUT);
-        Writer output = new BufferedWriter(new FileWriter(stressOutFile, true));
-        output.write("Start camera time lapse stress:\n");
-        output.write("Total number of loops: " + NUMBER_OF_TIME_LAPSE_LOOPS + "\n");
+        Log.v(TAG, "Start camera time lapse stress:");
+        mOutput.write("Total number of loops: " + NUMBER_OF_TIME_LAPSE_LOOPS + "\n");
 
         try {
-            for (int j = 0, n = Camera.getNumberOfCameras(); j < n; j++) {
-                output.write("No of loop: camera " + j);
-                for (int i = 0; i < NUMBER_OF_TIME_LAPSE_LOOPS; i++) {
-                    filename = OUTPUT_FILE + j + "_" + i + OUTPUT_FILE_EXT;
-                    Log.v(TAG, filename);
+            for (int i = 0, n = Camera.getNumberOfCameras(); i < n; i++) {
+                mOutput.write("No of loop: camera " + i);
+                for (int j = 0; j < NUMBER_OF_TIME_LAPSE_LOOPS; j++) {
+                    String fileName = String.format("%s/temp%d_%d%s",
+                            Environment.getExternalStorageDirectory(), i, j, OUTPUT_FILE_EXT);
+                    Log.v(TAG, fileName);
                     runOnLooper(new Runnable() {
                         @Override
                         public void run() {
@@ -438,12 +489,12 @@
                         CamcorderProfile.get(j, CamcorderProfile.QUALITY_TIME_LAPSE_HIGH);
                     mRecorder.setProfile(profile);
 
-                    // Set the timelapse setting; 0.1 = 10 sec timelapse, 0.5 = 2 sec timelapse, etc.
+                    // Set the timelapse setting; 0.1 = 10 sec timelapse, 0.5 = 2 sec timelapse, etc
                     // http://developer.android.com/guide/topics/media/camera.html#time-lapse-video
                     mRecorder.setCaptureRate(captureRate);
 
                     // Set output file
-                    mRecorder.setOutputFile(filename);
+                    mRecorder.setOutputFile(fileName);
 
                     // Set the preview display
                     Log.v(TAG, "mediaRecorder setPreviewDisplay");
@@ -451,40 +502,40 @@
 
                     mRecorder.prepare();
                     mRecorder.start();
-                    Thread.sleep(record_duration);
+                    Thread.sleep(recordDuration);
                     Log.v(TAG, "Before stop");
                     mRecorder.stop();
                     mRecorder.release();
 
                     // Start the playback
                     MediaPlayer mp = new MediaPlayer();
-                    mp.setDataSource(filename);
+                    mp.setDataSource(fileName);
                     mp.setDisplay(mSurfaceHolder);
                     mp.prepare();
                     mp.start();
                     Thread.sleep(TIME_LAPSE_PLAYBACK_WAIT_TIME);
                     mp.release();
-                    validateRecordedVideo(filename);
-                    if (remove_video) {
-                        removeRecordedVideo(filename);
+                    validateRecordedVideo(fileName);
+                    if (removeVideo) {
+                        removeRecordedVideo(fileName);
                     }
-                    output.write(", " + i);
+
+                    if (j == 0) {
+                        mOutput.write(j + 1);
+                    } else {
+                        mOutput.write(String.format(", %d", (j + 1)));
+                    }
                 }
             }
+        } catch (IllegalStateException e) {
+            Log.e(TAG, e.toString());
+            fail("Camera time lapse stress test IllegalStateException");
+        } catch (IOException e) {
+            Log.e(TAG, e.toString());
+            fail("Camera time lapse stress test IOException");
+        } catch (Exception e) {
+            Log.e(TAG, e.toString());
+            fail("Camera time lapse stress test Exception");
         }
-        catch (IllegalStateException e) {
-            assertTrue("Camera time lapse stress test IllegalStateException", false);
-            Log.v(TAG, e.toString());
-        }
-        catch (IOException e) {
-            assertTrue("Camera time lapse stress test IOException", false);
-            Log.v(TAG, e.toString());
-        }
-        catch (Exception e) {
-            assertTrue("Camera time lapse stress test Exception", false);
-            Log.v(TAG, e.toString());
-        }
-        output.write("\n\n");
-        output.close();
     }
 }
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
index 242fb97..fb515ac 100755
--- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java
@@ -412,6 +412,8 @@
     boolean mForceStatusBar;
     boolean mForceStatusBarFromKeyguard;
     boolean mHideLockScreen;
+    boolean mForcingShowNavBar;
+    int mForcingShowNavBarLayer;
 
     // States of keyguard dismiss.
     private static final int DISMISS_KEYGUARD_NONE = 0; // Keyguard not being dismissed.
@@ -2936,6 +2938,8 @@
         mTopFullscreenOpaqueWindowState = null;
         mForceStatusBar = false;
         mForceStatusBarFromKeyguard = false;
+        mForcingShowNavBar = false;
+        mForcingShowNavBarLayer = -1;
         
         mHideLockScreen = false;
         mAllowLockscreenWhenOn = false;
@@ -2950,6 +2954,13 @@
                                 WindowManager.LayoutParams attrs) {
         if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw="
                 + win.isVisibleOrBehindKeyguardLw());
+        if (mTopFullscreenOpaqueWindowState == null && (win.getAttrs().privateFlags
+                &WindowManager.LayoutParams.PRIVATE_FLAG_FORCE_SHOW_NAV_BAR) != 0) {
+            if (mForcingShowNavBarLayer < 0) {
+                mForcingShowNavBar = true;
+                mForcingShowNavBarLayer = win.getSurfaceLayer();
+            }
+        }
         if (mTopFullscreenOpaqueWindowState == null &&
                 win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) {
             if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) {
@@ -4478,9 +4489,13 @@
             // will quickly lose focus once it correctly gets hidden.
             return 0;
         }
-        final int visibility = mFocusedWindow.getSystemUiVisibility()
+        int tmpVisibility = mFocusedWindow.getSystemUiVisibility()
                 & ~mResettingSystemUiFlags
                 & ~mForceClearedSystemUiFlags;
+        if (mForcingShowNavBar && mFocusedWindow.getSurfaceLayer() < mForcingShowNavBarLayer) {
+            tmpVisibility &= ~View.SYSTEM_UI_CLEARABLE_FLAGS;
+        }
+        final int visibility = tmpVisibility;
         int diff = visibility ^ mLastSystemUiFlags;
         final boolean needsMenu = mFocusedWindow.getNeedsMenuLw(mTopFullscreenOpaqueWindowState);
         if (diff == 0 && mLastFocusNeedsMenu == needsMenu
@@ -4667,6 +4682,11 @@
             pw.print(prefix); pw.print("mTopFullscreenOpaqueWindowState=");
                     pw.println(mTopFullscreenOpaqueWindowState);
         }
+        if (mForcingShowNavBar) {
+            pw.print(prefix); pw.print("mForcingShowNavBar=");
+                    pw.println(mForcingShowNavBar); pw.print( "mForcingShowNavBarLayer=");
+                    pw.println(mForcingShowNavBarLayer);
+        }
         pw.print(prefix); pw.print("mTopIsFullscreen="); pw.print(mTopIsFullscreen);
                 pw.print(" mHideLockScreen="); pw.println(mHideLockScreen);
         pw.print(prefix); pw.print("mForceStatusBar="); pw.print(mForceStatusBar);
diff --git a/services/java/com/android/server/am/ActivityManagerService.java b/services/java/com/android/server/am/ActivityManagerService.java
index 49dc220..1d08d31 100644
--- a/services/java/com/android/server/am/ActivityManagerService.java
+++ b/services/java/com/android/server/am/ActivityManagerService.java
@@ -3869,7 +3869,7 @@
         }
 
         boolean didSomething = killPackageProcessesLocked(name, appId, userId,
-                -100, callerWillRestart, false, doit, evenPersistent,
+                -100, callerWillRestart, true, doit, evenPersistent,
                 name == null ? ("force stop user " + userId) : ("force stop " + name));
         
         TaskRecord lastTask = null;