Docs: Sync browseable samples for lmp-docs

Synced to developers/samples/android commit
bc036ecdf44cd03163c206096172299f3940b057.

Change-Id: Ib68230d79ca300e7db906aff2ebfc2cb6c6968f7
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-Basic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-Basic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-Basic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-Basic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-Basic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-Basic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/template-styles.xml b/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ActionBarCompat-ListPopupMenu/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/template-styles.xml b/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ActionBarCompat-ShareActionProvider/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ActionBarCompat-ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/MainActivity.java b/samples/browseable/ActionBarCompat-ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/MainActivity.java
index b8cc900..545764c 100644
--- a/samples/browseable/ActionBarCompat-ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/MainActivity.java
+++ b/samples/browseable/ActionBarCompat-ShareActionProvider/src/com.example.android.actionbarcompat.shareactionprovider/MainActivity.java
@@ -83,6 +83,10 @@
         // Now get the ShareActionProvider from the item
         mShareActionProvider = (ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);
 
+        // Get the ViewPager's current item position and set its ShareIntent.
+        int currentViewPagerItem = ((ViewPager) findViewById(R.id.viewpager)).getCurrentItem();
+        setShareIntent(currentViewPagerItem);
+
         return super.onCreateOptionsMenu(menu);
     }
     // END_INCLUDE(get_sap)
@@ -151,6 +155,19 @@
         }
     };
 
+    private void setShareIntent(int position) {
+        // BEGIN_INCLUDE(update_sap)
+        if (mShareActionProvider != null) {
+            // Get the currently selected item, and retrieve it's share intent
+            ContentItem item = mItems.get(position);
+            Intent shareIntent = item.getShareIntent(MainActivity.this);
+
+            // Now update the ShareActionProvider with the new share intent
+            mShareActionProvider.setShareIntent(shareIntent);
+        }
+        // END_INCLUDE(update_sap)
+    }
+
     /**
      * A OnPageChangeListener used to update the ShareActionProvider's share intent when a new item
      * is selected in the ViewPager.
@@ -165,16 +182,7 @@
 
         @Override
         public void onPageSelected(int position) {
-            // BEGIN_INCLUDE(update_sap)
-            if (mShareActionProvider != null) {
-                // Get the currently selected item, and retrieve it's share intent
-                ContentItem item = mItems.get(position);
-                Intent shareIntent = item.getShareIntent(MainActivity.this);
-
-                // Now update the ShareActionProvider with the new share intent
-                mShareActionProvider.setShareIntent(shareIntent);
-            }
-            // END_INCLUDE(update_sap)
+            setShareIntent(position);
         }
 
         @Override
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-Styled/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-Styled/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-Styled/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActionBarCompat-Styled/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActionBarCompat-Styled/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActionBarCompat-Styled/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ActionBarCompat-Styled/res/values-v21/template-styles.xml b/samples/browseable/ActionBarCompat-Styled/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ActionBarCompat-Styled/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActivityInstrumentation/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActivityInstrumentation/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActivityInstrumentation/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActivityInstrumentation/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActivityInstrumentation/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActivityInstrumentation/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ActivityInstrumentation/res/values-v21/template-styles.xml b/samples/browseable/ActivityInstrumentation/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ActivityInstrumentation/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ActivitySceneTransitionBasic/_index.jd b/samples/browseable/ActivitySceneTransitionBasic/_index.jd
index 1053a7d..fd2e0c7 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/_index.jd
+++ b/samples/browseable/ActivitySceneTransitionBasic/_index.jd
@@ -5,8 +5,8 @@
 <p>
             
             Demonstrates how to the use Activity scene transitions when transitions
-            from one Activity to another. Uses a combination of moveImage and changeBounds
-            to nicely transition a grid of images to an Activity with a large image and detail
-            text.
+            from one Activity to another. Uses a combination of changeImageTransform and
+            changeBounds to nicely transition a grid of images to an Activity with a large image
+            and detail text.
             
         </p>
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/layout/details.xml b/samples/browseable/ActivitySceneTransitionBasic/res/layout/details.xml
index e61212e..8ca4634 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/res/layout/details.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/layout/details.xml
@@ -27,7 +27,7 @@
               android:layout_width="match_parent"
               android:layout_height="wrap_content">
 
-            <com.android.volley.toolbox.NetworkImageView
+            <ImageView
                   android:id="@+id/imageview_header"
                   android:layout_width="match_parent"
                   android:layout_height="match_parent"
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/layout/grid_item.xml b/samples/browseable/ActivitySceneTransitionBasic/res/layout/grid_item.xml
index 1d28dba..e79f0eb 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/res/layout/grid_item.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/layout/grid_item.xml
@@ -23,7 +23,7 @@
           android:layout_width="match_parent"
           android:layout_height="wrap_content">
 
-        <com.android.volley.toolbox.NetworkImageView
+        <ImageView
               android:id="@+id/imageview_item"
               android:layout_width="match_parent"
               android:layout_height="match_parent"
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/transition/grid_detail_transition.xml b/samples/browseable/ActivitySceneTransitionBasic/res/transition/grid_detail_transition.xml
index 40be3d4..3091cd2 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/res/transition/grid_detail_transition.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/transition/grid_detail_transition.xml
@@ -16,33 +16,15 @@
 
 <!--
     The transitions which us used for the entrance and exit of shared elements. Here we declare
-    two different transitions which are targeting to specific views.
+    two different transitions which are targeting specific views.
 -->
 <transitionSet xmlns:android="http://schemas.android.com/apk/res/android">
 
     <!-- changeBounds is used for the TextViews which are shared -->
-    <changeBounds>
-        <!--
-            Set this transitions target IDs to be those which point to the TextViews in both the
-            starting and result Activities
-        -->
-        <targets>
-            <target android:targetId="@id/textview_name" />
-            <target android:targetId="@id/textview_title" />
-        </targets>
-    </changeBounds>
+    <changeBounds />
 
-    <!-- moveImage is used for the ImageViews which are shared -->
-    <moveImage>
-        <!--
-            Set this transitions target IDs to be those which point to the ImageViews in both the
-            starting and result Activities
-        -->
-        <targets>
-            <target android:targetId="@id/imageview_header" />
-            <target android:targetId="@id/imageview_item" />
-        </targets>
-    </moveImage>
+    <!-- changeImageTransform is used for the ImageViews which are shared -->
+    <changeImageTransform />
 
 </transitionSet>
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActivitySceneTransitionBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ActivitySceneTransitionBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/styles.xml b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/styles.xml
index fd212b3..4fee48d 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/styles.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/styles.xml
@@ -17,9 +17,6 @@
 <resources>
 
     <style name="Theme.Sample" parent="Theme.Base">
-        <!-- Set the windowContentTransitions flag to enable Activity scene transitions -->
-        <item name="android:windowContentTransitions">true</item>
-
         <!-- Set the transitions which are used for the entrance and exit of shared elements -->
         <item name="android:windowSharedElementEnterTransition">
             @transition/grid_detail_transition
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/template-styles.xml b/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ActivitySceneTransitionBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/values/base-strings.xml b/samples/browseable/ActivitySceneTransitionBasic/res/values/base-strings.xml
index 989fe00..35860cb 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/res/values/base-strings.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/values/base-strings.xml
@@ -21,9 +21,9 @@
         
             
             Demonstrates how to the use Activity scene transitions when transitions
-            from one Activity to another. Uses a combination of moveImage and changeBounds
-            to nicely transition a grid of images to an Activity with a large image and detail
-            text.
+            from one Activity to another. Uses a combination of changeImageTransform and
+            changeBounds to nicely transition a grid of images to an Activity with a large image
+            and detail text.
             
         
         ]]>
diff --git a/samples/browseable/ActivitySceneTransitionBasic/res/values/strings.xml b/samples/browseable/ActivitySceneTransitionBasic/res/values/strings.xml
index 2aa0d3b..669c127 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/res/values/strings.xml
+++ b/samples/browseable/ActivitySceneTransitionBasic/res/values/strings.xml
@@ -1,4 +1,19 @@
 <?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
 <resources>
 
     <string name="bacon_ipsum">
diff --git a/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/DetailActivity.java b/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/DetailActivity.java
index 9589008..17d1b2a 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/DetailActivity.java
+++ b/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/DetailActivity.java
@@ -16,13 +16,14 @@
 
 package com.example.android.activityscenetransitionbasic;
 
-import com.android.volley.toolbox.ImageLoader;
-import com.android.volley.toolbox.NetworkImageView;
-import com.android.volley.toolbox.Volley;
+import com.squareup.picasso.Picasso;
 
 import android.app.Activity;
-import android.graphics.Bitmap;
+import android.os.Build;
 import android.os.Bundle;
+import android.support.v4.view.ViewCompat;
+import android.transition.Transition;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 /**
@@ -40,23 +41,20 @@
     // View name of the header title. Used for activity scene transitions
     public static final String VIEW_NAME_HEADER_TITLE = "detail:header:title";
 
-    private NetworkImageView mHeaderImageView;
+    private ImageView mHeaderImageView;
     private TextView mHeaderTitle;
 
-    private ImageLoader mImageLoader;
+    private Item mItem;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.details);
 
-        // Construct an ImageLoader instance so that we can load images from the network
-        mImageLoader = new ImageLoader(Volley.newRequestQueue(this), ImageMemoryCache.INSTANCE);
-
         // Retrieve the correct Item instance, using the ID provided in the Intent
-        Item item = Item.getItem(getIntent().getIntExtra(EXTRA_PARAM_ID, 0));
+        mItem = Item.getItem(getIntent().getIntExtra(EXTRA_PARAM_ID, 0));
 
-        mHeaderImageView = (NetworkImageView) findViewById(R.id.imageview_header);
+        mHeaderImageView = (ImageView) findViewById(R.id.imageview_header);
         mHeaderTitle = (TextView) findViewById(R.id.textview_title);
 
         // BEGIN_INCLUDE(detail_set_view_name)
@@ -65,31 +63,97 @@
          * This could be done in the layout XML, but exposing it via static variables allows easy
          * querying from other Activities
          */
-        mHeaderImageView.setTransitionName(VIEW_NAME_HEADER_IMAGE);
-        mHeaderTitle.setTransitionName(VIEW_NAME_HEADER_TITLE);
+        ViewCompat.setTransitionName(mHeaderImageView, VIEW_NAME_HEADER_IMAGE);
+        ViewCompat.setTransitionName(mHeaderTitle, VIEW_NAME_HEADER_TITLE);
         // END_INCLUDE(detail_set_view_name)
 
-        loadItem(item);
+        loadItem();
     }
 
-    private void loadItem(Item item) {
+    private void loadItem() {
         // Set the title TextView to the item's name and author
-        mHeaderTitle.setText(getString(R.string.image_header, item.getName(), item.getAuthor()));
+        mHeaderTitle.setText(getString(R.string.image_header, mItem.getName(), mItem.getAuthor()));
 
-        final ImageMemoryCache cache = ImageMemoryCache.INSTANCE;
-        Bitmap thumbnailImage = cache.getBitmapFromUrl(item.getThumbnailUrl());
+        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && addTransitionListener()) {
+            // If we're running on Lollipop and we have added a listener to the shared element
+            // transition, load the thumbnail. The listener will load the full-size image when
+            // the transition is complete.
+            loadThumbnail();
+        } else {
+            // If all other cases we should just load the full-size image now
+            loadFullSizeImage();
+        }
+    }
 
-        // Check to see if we already have the thumbnail sized image in the cache. If so, start
-        // loading the full size image and display the thumbnail as a placeholder.
-        if (thumbnailImage != null) {
-            mHeaderImageView.setImageUrl(item.getPhotoUrl(), mImageLoader);
-            mHeaderImageView.setImageBitmap(thumbnailImage);
-            return;
+    /**
+     * Load the item's thumbnail image into our {@link ImageView}.
+     */
+    private void loadThumbnail() {
+        Picasso.with(mHeaderImageView.getContext())
+                .load(mItem.getThumbnailUrl())
+                .noFade()
+                .into(mHeaderImageView);
+    }
+
+    /**
+     * Load the item's full-size image into our {@link ImageView}.
+     */
+    private void loadFullSizeImage() {
+        Picasso.with(mHeaderImageView.getContext())
+                .load(mItem.getPhotoUrl())
+                .noFade()
+                .noPlaceholder()
+                .into(mHeaderImageView);
+    }
+
+    /**
+     * Try and add a {@link Transition.TransitionListener} to the entering shared element
+     * {@link Transition}. We do this so that we can load the full-size image after the transition
+     * has completed.
+     *
+     * @return true if we were successful in adding a listener to the enter transition
+     */
+    private boolean addTransitionListener() {
+        final Transition transition = getWindow().getSharedElementEnterTransition();
+
+        if (transition != null) {
+            // There is an entering shared element transition so add a listener to it
+            transition.addListener(new Transition.TransitionListener() {
+                @Override
+                public void onTransitionEnd(Transition transition) {
+                    // As the transition has ended, we can now load the full-size image
+                    loadFullSizeImage();
+
+                    // Make sure we remove ourselves as a listener
+                    transition.removeListener(this);
+                }
+
+                @Override
+                public void onTransitionStart(Transition transition) {
+                    // No-op
+                }
+
+                @Override
+                public void onTransitionCancel(Transition transition) {
+                    // Make sure we remove ourselves as a listener
+                    transition.removeListener(this);
+                }
+
+                @Override
+                public void onTransitionPause(Transition transition) {
+                    // No-op
+                }
+
+                @Override
+                public void onTransitionResume(Transition transition) {
+                    // No-op
+                }
+            });
+            return true;
         }
 
-        // If we get here then we do not have either the full size or the thumbnail in the cache.
-        // Here we just load the full size and make do.
-        mHeaderImageView.setImageUrl(item.getPhotoUrl(), mImageLoader);
+        // If we reach here then we have not added a listener
+        return false;
     }
 
 }
diff --git a/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/ImageMemoryCache.java b/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/ImageMemoryCache.java
deleted file mode 100644
index 53d47ba..0000000
--- a/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/ImageMemoryCache.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2014 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.example.android.activityscenetransitionbasic;
-
-import com.android.volley.toolbox.ImageLoader;
-
-import android.graphics.Bitmap;
-import android.util.LruCache;
-
-import java.util.Map;
-
-/**
- * An image memory cache implementation for Volley which allows the retrieval of entires via a URL.
- * Volley internally inserts items with a key which is a combination of a the size of the image,
- * and the url.
- *
- * This class provide the method {@link #getBitmapFromUrl(String)} which allows the retrieval of
- * a bitmap solely on the URL.
- */
-public class ImageMemoryCache extends LruCache<String, Bitmap> implements ImageLoader.ImageCache {
-
-    /**
-     * Singleton instance which has it's maximum size set to be 1/8th of the allowed memory size.
-     */
-    public static final ImageMemoryCache INSTANCE = new ImageMemoryCache(
-            (int) (Runtime.getRuntime().maxMemory() / 8));
-
-    // Cache the last created snapshot
-    private Map<String, Bitmap> mLastSnapshot;
-
-    private ImageMemoryCache(int maxSize) {
-        super(maxSize);
-    }
-
-    public Bitmap getBitmapFromUrl(String url) {
-        // If we do not have a snapshot to use, generate one
-        if (mLastSnapshot == null) {
-            mLastSnapshot = snapshot();
-        }
-
-        // Iterate through the snapshot to find any entries which match our url
-        for (Map.Entry<String, Bitmap> entry : mLastSnapshot.entrySet()) {
-            if (url.equals(extractUrl(entry.getKey()))) {
-                // We've found an entry with the same url, return the bitmap
-                return entry.getValue();
-            }
-        }
-
-        // We didn't find an entry, so return null
-        return null;
-    }
-
-    @Override
-    public Bitmap getBitmap(String key) {
-        return get(key);
-    }
-
-    @Override
-    public void putBitmap(String key, Bitmap bitmap) {
-        put(key, bitmap);
-
-        // An entry has been added, so invalidate the snapshot
-        mLastSnapshot = null;
-    }
-
-    @Override
-    protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue) {
-        super.entryRemoved(evicted, key, oldValue, newValue);
-
-        // An entry has been removed, so invalidate the snapshot
-        mLastSnapshot = null;
-    }
-
-    private static String extractUrl(String key) {
-        return key.substring(key.indexOf("http"));
-    }
-
-    @Override
-    protected int sizeOf(String key, Bitmap value) {
-        return value.getAllocationByteCount();
-    }
-}
diff --git a/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/MainActivity.java b/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/MainActivity.java
index 9c51789..9eed44a 100644
--- a/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/MainActivity.java
+++ b/samples/browseable/ActivitySceneTransitionBasic/src/com.example.android.activityscenetransitionbasic/MainActivity.java
@@ -16,20 +16,20 @@
 
 package com.example.android.activityscenetransitionbasic;
 
-import com.android.volley.toolbox.ImageLoader;
-import com.android.volley.toolbox.NetworkImageView;
-import com.android.volley.toolbox.Volley;
+import com.squareup.picasso.Picasso;
 
 import android.app.Activity;
-import android.app.ActivityOptions;
 import android.content.Intent;
 import android.os.Bundle;
-import android.util.Pair;
+import android.support.v4.app.ActivityCompat;
+import android.support.v4.app.ActivityOptionsCompat;
+import android.support.v4.util.Pair;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
 import android.widget.GridView;
+import android.widget.ImageView;
 import android.widget.TextView;
 
 /**
@@ -42,16 +42,11 @@
     private GridView mGridView;
     private GridAdapter mAdapter;
 
-    private ImageLoader mImageLoader;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.grid);
 
-        // Retrieve the ImageLoader we are going to use for NetworkImageView
-        mImageLoader = new ImageLoader(Volley.newRequestQueue(this), ImageMemoryCache.INSTANCE);
-
         // Setup the GridView and set the adapter
         mGridView = (GridView) findViewById(R.id.grid);
         mGridView.setOnItemClickListener(this);
@@ -74,23 +69,21 @@
         // BEGIN_INCLUDE(start_activity)
         /**
          * Now create an {@link android.app.ActivityOptions} instance using the
-         * {@link android.app.ActivityOptions#makeSceneTransitionAnimation(android.app.Activity, android.util.Pair[])} factory method.
+         * {@link ActivityOptionsCompat#makeSceneTransitionAnimation(Activity, Pair[])} factory
+         * method.
          */
-        ActivityOptions activityOptions = ActivityOptions.makeSceneTransitionAnimation(
+        ActivityOptionsCompat activityOptions = ActivityOptionsCompat.makeSceneTransitionAnimation(
                 this,
 
                 // Now we provide a list of Pair items which contain the view we can transitioning
                 // from, and the name of the view it is transitioning to, in the launched activity
-                new Pair<View, String>(
-                        view.findViewById(R.id.imageview_item),
+                new Pair<View, String>(view.findViewById(R.id.imageview_item),
                         DetailActivity.VIEW_NAME_HEADER_IMAGE),
-                new Pair<View, String>(
-                        view.findViewById(R.id.textview_name),
-                        DetailActivity.VIEW_NAME_HEADER_TITLE)
-        );
+                new Pair<View, String>(view.findViewById(R.id.textview_name),
+                        DetailActivity.VIEW_NAME_HEADER_TITLE));
 
         // Now we can start the Activity, providing the activity options as a bundle
-        startActivity(intent, activityOptions.toBundle());
+        ActivityCompat.startActivity(this, intent, activityOptions.toBundle());
         // END_INCLUDE(start_activity)
     }
 
@@ -123,22 +116,13 @@
             final Item item = getItem(position);
 
             // Load the thumbnail image
-            NetworkImageView image = (NetworkImageView) view.findViewById(R.id.imageview_item);
-            image.setImageUrl(item.getThumbnailUrl(), mImageLoader);
+            ImageView image = (ImageView) view.findViewById(R.id.imageview_item);
+            Picasso.with(image.getContext()).load(item.getThumbnailUrl()).into(image);
 
             // Set the TextView's contents
             TextView name = (TextView) view.findViewById(R.id.textview_name);
             name.setText(item.getName());
 
-            // BEGIN_INCLUDE(grid_set_view_name)
-            /**
-             * As we're in an adapter we need to set each view's name dynamically, using the
-             * item's ID so that the names are unique.
-             */
-            image.setTransitionName("grid:image:" + item.getId());
-            name.setTransitionName("grid:name:" + item.getId());
-            // END_INCLUDE(grid_set_view_name)
-
             return view;
         }
     }
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AdapterTransition/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AdapterTransition/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AdapterTransition/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AdapterTransition/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AdapterTransition/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AdapterTransition/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/AdapterTransition/res/values-v21/template-styles.xml b/samples/browseable/AdapterTransition/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/AdapterTransition/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AdvancedImmersiveMode/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AdvancedImmersiveMode/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AdvancedImmersiveMode/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AdvancedImmersiveMode/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AdvancedImmersiveMode/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AdvancedImmersiveMode/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/AdvancedImmersiveMode/res/values-v21/template-styles.xml b/samples/browseable/AdvancedImmersiveMode/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/AdvancedImmersiveMode/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/AgendaData/Application/AndroidManifest.xml b/samples/browseable/AgendaData/Application/AndroidManifest.xml
index be34231..aa8a14a 100644
--- a/samples/browseable/AgendaData/Application/AndroidManifest.xml
+++ b/samples/browseable/AgendaData/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.example.android.wearable.agendadata">
 
-    <uses-sdk android:minSdkVersion="19"
-        android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+        android:targetSdkVersion="21" />
 
     <uses-permission android:name="android.permission.READ_CALENDAR" />
     <uses-permission android:name="android.permission.READ_CONTACTS" />
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AgendaData/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AgendaData/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AgendaData/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AgendaData/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AgendaData/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AgendaData/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/AgendaData/Application/res/values-v21/template-styles.xml b/samples/browseable/AgendaData/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/AgendaData/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/AgendaData/Wearable/AndroidManifest.xml b/samples/browseable/AgendaData/Wearable/AndroidManifest.xml
index f2576af..dcab622 100644
--- a/samples/browseable/AgendaData/Wearable/AndroidManifest.xml
+++ b/samples/browseable/AgendaData/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.wearable.agendadata" >
 
     <uses-sdk android:minSdkVersion="20"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AppRestrictionEnforcer/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AppRestrictionEnforcer/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AppRestrictionEnforcer/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AppRestrictionEnforcer/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AppRestrictionEnforcer/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AppRestrictionEnforcer/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/AppRestrictionEnforcer/res/values-v21/template-styles.xml b/samples/browseable/AppRestrictionEnforcer/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/AppRestrictionEnforcer/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AppRestrictionSchema/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AppRestrictionSchema/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AppRestrictionSchema/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AppRestrictionSchema/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AppRestrictionSchema/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AppRestrictionSchema/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/AppRestrictionSchema/res/values-v21/template-styles.xml b/samples/browseable/AppRestrictionSchema/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/AppRestrictionSchema/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AppRestrictions/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AppRestrictions/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AppRestrictions/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/AppRestrictions/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/AppRestrictions/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/AppRestrictions/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/AppRestrictions/res/values-v21/template-styles.xml b/samples/browseable/AppRestrictions/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/AppRestrictions/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BasicAccessibility/res/drawable-hdpi/ic_launcher.png b/samples/browseable/BasicAccessibility/res/drawable-hdpi/ic_launcher.png
index 6c0b5ee..c8342cb 100644
--- a/samples/browseable/BasicAccessibility/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/BasicAccessibility/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicAccessibility/res/drawable-mdpi/ic_launcher.png b/samples/browseable/BasicAccessibility/res/drawable-mdpi/ic_launcher.png
index 4ce0b82..0e883dd 100644
--- a/samples/browseable/BasicAccessibility/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/BasicAccessibility/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicAccessibility/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/BasicAccessibility/res/drawable-xhdpi/ic_launcher.png
index 6ded707..4096b65 100644
--- a/samples/browseable/BasicAccessibility/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/BasicAccessibility/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicAccessibility/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/BasicAccessibility/res/drawable-xxhdpi/ic_launcher.png
index 74ae891..b00fc9b 100644
--- a/samples/browseable/BasicAccessibility/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/BasicAccessibility/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicAccessibility/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicAccessibility/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicAccessibility/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicAccessibility/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicAccessibility/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicAccessibility/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicAccessibility/res/values-v21/template-styles.xml b/samples/browseable/BasicAccessibility/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicAccessibility/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BasicAndroidKeyStore/_index.jd b/samples/browseable/BasicAndroidKeyStore/_index.jd
index a3d5960..5eedee8 100644
--- a/samples/browseable/BasicAndroidKeyStore/_index.jd
+++ b/samples/browseable/BasicAndroidKeyStore/_index.jd
@@ -3,12 +3,13 @@
 @jd:body
 
 <p>
-            
-                Welcome to the <b>Basic Android Key Store</b> sample!\n\n
-                This sample demonstrates how to use the Android Key Store to safely create and store
-                encryption keys that only your application can access.  You can also sign data
-                using those keys.\n\n
-                To create a new KeyPair, click \"Create\".\n\n
-                To sign some data using a KeyPair, click \"Sign\".\n\n
-                To verify the data using the signature provided, click \"Verify\".\n\n            
+
+Welcome to the <b>Basic Android Key Store</b> sample!\n\n
+This sample demonstrates how to use the Android Key Store to safely create and store
+encryption keys that only your application can access.  You can also sign data
+using those keys.\n\n
+To create a new KeyPair, click \"Create\".\n\n
+To sign some data using a KeyPair, click \"Sign\".\n\n
+To verify the data using the signature provided, click \"Verify\".\n\n
+
         </p>
diff --git a/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp-land/activity_main.xml b/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp-land/activity_main.xml
index 653454b..8fed5f7 100644
--- a/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp-land/activity_main.xml
+++ b/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp-land/activity_main.xml
@@ -13,25 +13,30 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<LinearLayout
+<ScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="horizontal"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
         android:id="@+id/sample_main_layout">
-    <TextView android:id="@+id/sample_output"
-              style="@style/Widget.SampleMessage"
-              android:background="@android:color/white"
-              android:layout_weight="1"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:text="@string/intro_message"
-              android:layout_margin="16dp" />
-    <fragment
-            android:name="com.example.android.common.logger.LogFragment"
-            android:id="@+id/log_fragment"
-            android:layout_weight="1"
+    <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_margin="16dp" />
-</LinearLayout>
+            android:orientation="vertical">
+        <TextView android:id="@+id/sample_output"
+                  style="@style/Widget.SampleMessage"
+                  android:background="@android:color/white"
+                  android:layout_weight="1"
+                  android:layout_width="match_parent"
+                  android:layout_height="match_parent"
+                  android:text="@string/intro_message"
+                  android:layout_margin="16dp" />
+        <fragment
+                android:name="com.example.android.common.logger.LogFragment"
+                android:id="@+id/log_fragment"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="16dp" />
+    </LinearLayout>
+</ScrollView>
diff --git a/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp/activity_main.xml b/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp/activity_main.xml
index 11cd71b..f811ef7 100644
--- a/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp/activity_main.xml
+++ b/samples/browseable/BasicAndroidKeyStore/res/layout-sw600dp/activity_main.xml
@@ -13,24 +13,28 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<LinearLayout
+<ScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
         android:id="@+id/sample_main_layout">
-    <TextView android:id="@+id/sample_output"
-              style="@style/Widget.SampleMessage"
-              android:background="@android:color/white"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:text="@string/intro_message"
-              android:padding="16dp"
-              android:layout_margin="16dp"/>
-    <fragment
-            android:name="com.example.android.common.logger.LogFragment"
-            android:id="@+id/log_fragment"
+    <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_margin="16dp" />
-</LinearLayout>
+            android:orientation="vertical">
+        <TextView android:id="@+id/sample_output"
+                style="@style/Widget.SampleMessage"
+                android:background="@android:color/white"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:padding="16dp"
+                android:layout_margin="16dp"/>
+        <fragment
+                android:name="com.example.android.common.logger.LogFragment"
+                android:id="@+id/log_fragment"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="16dp" />
+    </LinearLayout>
+</ScrollView>
diff --git a/samples/browseable/BasicAndroidKeyStore/res/layout/activity_main.xml b/samples/browseable/BasicAndroidKeyStore/res/layout/activity_main.xml
index 6f41369..d170958 100644
--- a/samples/browseable/BasicAndroidKeyStore/res/layout/activity_main.xml
+++ b/samples/browseable/BasicAndroidKeyStore/res/layout/activity_main.xml
@@ -13,27 +13,31 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<LinearLayout
+<ScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
         android:id="@+id/sample_main_layout">
-    <TextView android:id="@+id/sample_output"
-              style="@style/Widget.SampleMessage"
-              android:layout_weight="1"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:text="@string/intro_message"
-              android:padding="16dp" />
-    <View
-            android:layout_width="fill_parent"
-            android:layout_height="1dp"
-            android:background="@android:color/darker_gray"/>
-    <fragment
-            android:name="com.example.android.common.logger.LogFragment"
-            android:id="@+id/log_fragment"
-            android:layout_weight="1"
+    <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-</LinearLayout>
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+        <TextView android:id="@+id/sample_output"
+                style="@style/Widget.SampleMessage"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:padding="16dp" />
+        <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+        <fragment
+                android:name="com.example.android.common.logger.LogFragment"
+                android:id="@+id/log_fragment"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+    </LinearLayout>
+</ScrollView>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicAndroidKeyStore/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicAndroidKeyStore/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicAndroidKeyStore/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicAndroidKeyStore/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicAndroidKeyStore/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicAndroidKeyStore/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicAndroidKeyStore/res/values-v21/template-styles.xml b/samples/browseable/BasicAndroidKeyStore/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicAndroidKeyStore/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BasicAndroidKeyStore/res/values/base-strings.xml b/samples/browseable/BasicAndroidKeyStore/res/values/base-strings.xml
index 484618c..7a83818 100644
--- a/samples/browseable/BasicAndroidKeyStore/res/values/base-strings.xml
+++ b/samples/browseable/BasicAndroidKeyStore/res/values/base-strings.xml
@@ -19,14 +19,15 @@
     <string name="intro_message">
         <![CDATA[
         
-            
-                Welcome to the <b>Basic Android Key Store</b> sample!\n\n
-                This sample demonstrates how to use the Android Key Store to safely create and store
-                encryption keys that only your application can access.  You can also sign data
-                using those keys.\n\n
-                To create a new KeyPair, click \"Create\".\n\n
-                To sign some data using a KeyPair, click \"Sign\".\n\n
-                To verify the data using the signature provided, click \"Verify\".\n\n            
+
+Welcome to the <b>Basic Android Key Store</b> sample!\n\n
+This sample demonstrates how to use the Android Key Store to safely create and store
+encryption keys that only your application can access.  You can also sign data
+using those keys.\n\n
+To create a new KeyPair, click \"Create\".\n\n
+To sign some data using a KeyPair, click \"Sign\".\n\n
+To verify the data using the signature provided, click \"Verify\".\n\n
+
         
         ]]>
     </string>
diff --git a/samples/browseable/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/MainActivity.java b/samples/browseable/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/MainActivity.java
index 7fd9466..f322af5 100644
--- a/samples/browseable/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/MainActivity.java
+++ b/samples/browseable/BasicAndroidKeyStore/src/com.example.android.basicandroidkeystore/MainActivity.java
@@ -19,6 +19,8 @@
 import android.graphics.Color;
 import android.os.Bundle;
 import android.support.v4.app.FragmentTransaction;
+import android.text.Html;
+import android.widget.TextView;
 import android.view.Menu;
 
 import com.example.android.common.activities.SampleActivityBase;
@@ -41,6 +43,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+        TextView sampleOutput = (TextView) findViewById(R.id.sample_output);
+        sampleOutput.setText(Html.fromHtml(getString(R.string.intro_message)));
 
         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
         BasicAndroidKeyStoreFragment fragment = new BasicAndroidKeyStoreFragment();
@@ -75,4 +79,4 @@
 
         Log.i(TAG, "Ready");
     }
-}
\ No newline at end of file
+}
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicContactables/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicContactables/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicContactables/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicContactables/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicContactables/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicContactables/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicContactables/res/values-v21/template-styles.xml b/samples/browseable/BasicContactables/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicContactables/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicGestureDetect/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicGestureDetect/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicGestureDetect/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicGestureDetect/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicGestureDetect/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicGestureDetect/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicGestureDetect/res/values-v21/template-styles.xml b/samples/browseable/BasicGestureDetect/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicGestureDetect/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicImmersiveMode/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicImmersiveMode/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicImmersiveMode/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicImmersiveMode/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicImmersiveMode/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicImmersiveMode/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicImmersiveMode/res/values-v21/template-styles.xml b/samples/browseable/BasicImmersiveMode/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicImmersiveMode/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicManagedProfile/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicManagedProfile/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicManagedProfile/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicManagedProfile/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicManagedProfile/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicManagedProfile/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicManagedProfile/res/values-v21/template-styles.xml b/samples/browseable/BasicManagedProfile/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicManagedProfile/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicMediaDecoder/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicMediaDecoder/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicMediaDecoder/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicMediaDecoder/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicMediaDecoder/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicMediaDecoder/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicMediaDecoder/res/values-v21/template-styles.xml b/samples/browseable/BasicMediaDecoder/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicMediaDecoder/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicMediaRouter/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicMediaRouter/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicMediaRouter/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicMediaRouter/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicMediaRouter/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicMediaRouter/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicMediaRouter/res/values-v21/template-styles.xml b/samples/browseable/BasicMediaRouter/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicMediaRouter/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicMultitouch/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicMultitouch/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicMultitouch/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicMultitouch/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicMultitouch/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicMultitouch/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicMultitouch/res/values-v21/template-styles.xml b/samples/browseable/BasicMultitouch/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicMultitouch/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BasicNetworking/_index.jd b/samples/browseable/BasicNetworking/_index.jd
index 3b7a39a..3d17e0a 100644
--- a/samples/browseable/BasicNetworking/_index.jd
+++ b/samples/browseable/BasicNetworking/_index.jd
@@ -4,9 +4,9 @@
 
 <p>
             
-                This sample demonstrates how to use the ConnectivityManager to determine if you have
-                a network connection, and if so, what type of connection it is.
-                \n\nA "NetworkInfo" object is retrieved from the ConnectivityManager, which contains information
-                on the active connection, and then the connection type is printed to an on-screen console.
+            This sample demonstrates how to use the ConnectivityManager to determine if you have
+            a network connection, and if so, what type of connection it is.
+            \n\nA "NetworkInfo" object is retrieved from the ConnectivityManager, which contains information
+            on the active connection, and then the connection type is printed to an on-screen console.
             
         </p>
diff --git a/samples/browseable/BasicNetworking/res/drawable-hdpi/ic_launcher.png b/samples/browseable/BasicNetworking/res/drawable-hdpi/ic_launcher.png
index 22ce606..fad6812 100755
--- a/samples/browseable/BasicNetworking/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/BasicNetworking/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicNetworking/res/drawable-mdpi/ic_launcher.png b/samples/browseable/BasicNetworking/res/drawable-mdpi/ic_launcher.png
index f21e17b..04cf115 100755
--- a/samples/browseable/BasicNetworking/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/BasicNetworking/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicNetworking/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/BasicNetworking/res/drawable-xhdpi/ic_launcher.png
index 64b8059..53736df 100755
--- a/samples/browseable/BasicNetworking/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/BasicNetworking/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicNetworking/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/BasicNetworking/res/drawable-xxhdpi/ic_launcher.png
index 6b4434a..6afbfca 100755
--- a/samples/browseable/BasicNetworking/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/BasicNetworking/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicNetworking/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicNetworking/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicNetworking/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicNetworking/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicNetworking/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicNetworking/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicNetworking/res/values-v21/template-styles.xml b/samples/browseable/BasicNetworking/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicNetworking/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BasicNetworking/res/values/base-strings.xml b/samples/browseable/BasicNetworking/res/values/base-strings.xml
index 9a86c89..ddd695f 100644
--- a/samples/browseable/BasicNetworking/res/values/base-strings.xml
+++ b/samples/browseable/BasicNetworking/res/values/base-strings.xml
@@ -20,10 +20,10 @@
         <![CDATA[
         
             
-                This sample demonstrates how to use the ConnectivityManager to determine if you have
-                a network connection, and if so, what type of connection it is.
-                \n\nA "NetworkInfo" object is retrieved from the ConnectivityManager, which contains information
-                on the active connection, and then the connection type is printed to an on-screen console.
+            This sample demonstrates how to use the ConnectivityManager to determine if you have
+            a network connection, and if so, what type of connection it is.
+            \n\nA "NetworkInfo" object is retrieved from the ConnectivityManager, which contains information
+            on the active connection, and then the connection type is printed to an on-screen console.
             
         
         ]]>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicNotifications/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicNotifications/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicNotifications/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicNotifications/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicNotifications/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicNotifications/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicNotifications/res/values-v21/template-styles.xml b/samples/browseable/BasicNotifications/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicNotifications/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicRenderScript/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicRenderScript/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicRenderScript/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicRenderScript/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicRenderScript/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicRenderScript/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicRenderScript/res/values-v21/template-styles.xml b/samples/browseable/BasicRenderScript/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicRenderScript/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.png b/samples/browseable/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.png
index a0f7005..7920c98 100644
--- a/samples/browseable/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/BasicSyncAdapter/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.png b/samples/browseable/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.png
index a085462..1de60fe 100644
--- a/samples/browseable/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/BasicSyncAdapter/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.png
index 4f78eb8..fc4bfeb 100644
--- a/samples/browseable/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/BasicSyncAdapter/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.png
index b198ee3..646ce94 100644
--- a/samples/browseable/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/BasicSyncAdapter/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicSyncAdapter/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicSyncAdapter/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicSyncAdapter/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicSyncAdapter/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicSyncAdapter/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicSyncAdapter/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicSyncAdapter/res/values-v21/template-styles.xml b/samples/browseable/BasicSyncAdapter/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicSyncAdapter/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicTransition/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicTransition/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicTransition/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BasicTransition/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BasicTransition/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BasicTransition/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BasicTransition/res/values-v21/template-styles.xml b/samples/browseable/BasicTransition/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BasicTransition/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BatchStepSensor/_index.jd b/samples/browseable/BatchStepSensor/_index.jd
index 23a41e7..9a4f0b0 100644
--- a/samples/browseable/BatchStepSensor/_index.jd
+++ b/samples/browseable/BatchStepSensor/_index.jd
@@ -4,15 +4,17 @@
 
 <p>
             
-            This sample demonstrates the use of the two step sensors (step detector and counter) and
-            sensor batching.\n\n It shows how to register a SensorEventListener with and without
-            batching and shows how these events are received.\n\nThe Step Detector sensor fires an
+            <p>This sample demonstrates the use of the two step sensors (step detector and counter) and
+            sensor batching.</p>
+            <p>It shows how to register a SensorEventListener with and without
+            batching and shows how these events are received.</p>
+            <p>The Step Detector sensor fires an
             event when a step is detected, while the step counter returns the total number of
             steps since a listener was first registered for this sensor.
             Both sensors only count steps while a listener is registered. This sample only covers the
             basic case, where a listener is only registered while the app is running. Likewise,
             batched sensors can be used in the background (when the CPU is suspended), which
             requires manually flushing the sensor event queue before it overflows, which is not
-            covered in this sample.
+            covered in this sample.</p>
             
         </p>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BatchStepSensor/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BatchStepSensor/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BatchStepSensor/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BatchStepSensor/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BatchStepSensor/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BatchStepSensor/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BatchStepSensor/res/values-v21/template-styles.xml b/samples/browseable/BatchStepSensor/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BatchStepSensor/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/BatchStepSensor/res/values/base-strings.xml b/samples/browseable/BatchStepSensor/res/values/base-strings.xml
index 6421966..3ff4b3d 100644
--- a/samples/browseable/BatchStepSensor/res/values/base-strings.xml
+++ b/samples/browseable/BatchStepSensor/res/values/base-strings.xml
@@ -20,16 +20,18 @@
         <![CDATA[
         
             
-            This sample demonstrates the use of the two step sensors (step detector and counter) and
-            sensor batching.\n\n It shows how to register a SensorEventListener with and without
-            batching and shows how these events are received.\n\nThe Step Detector sensor fires an
+            <p>This sample demonstrates the use of the two step sensors (step detector and counter) and
+            sensor batching.</p>
+            <p>It shows how to register a SensorEventListener with and without
+            batching and shows how these events are received.</p>
+            <p>The Step Detector sensor fires an
             event when a step is detected, while the step counter returns the total number of
             steps since a listener was first registered for this sensor.
             Both sensors only count steps while a listener is registered. This sample only covers the
             basic case, where a listener is only registered while the app is running. Likewise,
             batched sensors can be used in the background (when the CPU is suspended), which
             requires manually flushing the sensor event queue before it overflows, which is not
-            covered in this sample.
+            covered in this sample.</p>
             
         
         ]]>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BluetoothChat/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BluetoothChat/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BluetoothChat/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BluetoothChat/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BluetoothChat/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BluetoothChat/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BluetoothChat/res/values-v21/template-styles.xml b/samples/browseable/BluetoothChat/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BluetoothChat/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BluetoothLeGatt/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BluetoothLeGatt/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BluetoothLeGatt/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BluetoothLeGatt/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BluetoothLeGatt/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BluetoothLeGatt/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BluetoothLeGatt/res/values-v21/template-styles.xml b/samples/browseable/BluetoothLeGatt/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BluetoothLeGatt/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BorderlessButtons/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BorderlessButtons/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BorderlessButtons/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/BorderlessButtons/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/BorderlessButtons/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/BorderlessButtons/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/BorderlessButtons/res/values-v21/template-styles.xml b/samples/browseable/BorderlessButtons/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/BorderlessButtons/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Camera2Basic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Camera2Basic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Camera2Basic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Camera2Basic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Camera2Basic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Camera2Basic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Camera2Basic/res/values-v21/template-styles.xml b/samples/browseable/Camera2Basic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Camera2Basic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Camera2Basic/src/com.example.android.camera2basic/Camera2BasicFragment.java b/samples/browseable/Camera2Basic/src/com.example.android.camera2basic/Camera2BasicFragment.java
index f4bf220..4b55358 100644
--- a/samples/browseable/Camera2Basic/src/com.example.android.camera2basic/Camera2BasicFragment.java
+++ b/samples/browseable/Camera2Basic/src/com.example.android.camera2basic/Camera2BasicFragment.java
@@ -266,8 +266,10 @@
                     int afState = result.get(CaptureResult.CONTROL_AF_STATE);
                     if (CaptureResult.CONTROL_AF_STATE_FOCUSED_LOCKED == afState ||
                             CaptureResult.CONTROL_AF_STATE_NOT_FOCUSED_LOCKED == afState) {
-                        int aeState = result.get(CaptureResult.CONTROL_AE_STATE);
-                        if (aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
+                        // CONTROL_AE_STATE can be null on some devices
+                        Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
+                        if (aeState == null ||
+                                aeState == CaptureResult.CONTROL_AE_STATE_CONVERGED) {
                             mState = STATE_WAITING_NON_PRECAPTURE;
                             captureStillPicture();
                         } else {
@@ -277,17 +279,19 @@
                     break;
                 }
                 case STATE_WAITING_PRECAPTURE: {
-                    int aeState = result.get(CaptureResult.CONTROL_AE_STATE);
-                    if (CaptureResult.CONTROL_AE_STATE_PRECAPTURE == aeState) {
-                        mState = STATE_WAITING_NON_PRECAPTURE;
-                    } else if (CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED == aeState) {
+                    // CONTROL_AE_STATE can be null on some devices
+                    Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
+                    if (aeState == null ||
+                            aeState == CaptureResult.CONTROL_AE_STATE_PRECAPTURE ||
+                            aeState == CaptureRequest.CONTROL_AE_STATE_FLASH_REQUIRED) {
                         mState = STATE_WAITING_NON_PRECAPTURE;
                     }
                     break;
                 }
                 case STATE_WAITING_NON_PRECAPTURE: {
-                    int aeState = result.get(CaptureResult.CONTROL_AE_STATE);
-                    if (CaptureResult.CONTROL_AE_STATE_PRECAPTURE != aeState) {
+                    // CONTROL_AE_STATE can be null on some devices
+                    Integer aeState = result.get(CaptureResult.CONTROL_AE_STATE);
+                    if (aeState == null || aeState != CaptureResult.CONTROL_AE_STATE_PRECAPTURE) {
                         mState = STATE_PICTURE_TAKEN;
                         captureStillPicture();
                     }
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Camera2Video/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Camera2Video/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Camera2Video/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Camera2Video/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Camera2Video/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Camera2Video/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Camera2Video/res/values-v21/template-styles.xml b/samples/browseable/Camera2Video/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Camera2Video/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CardEmulation/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CardEmulation/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CardEmulation/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CardEmulation/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CardEmulation/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CardEmulation/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/CardEmulation/res/values-v21/template-styles.xml b/samples/browseable/CardEmulation/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/CardEmulation/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CardReader/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CardReader/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CardReader/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CardReader/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CardReader/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CardReader/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/CardReader/res/values-v21/template-styles.xml b/samples/browseable/CardReader/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/CardReader/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CardView/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CardView/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CardView/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CardView/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CardView/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CardView/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/CardView/res/values-v21/template-styles.xml b/samples/browseable/CardView/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/CardView/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ClippingBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ClippingBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ClippingBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ClippingBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ClippingBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ClippingBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ClippingBasic/res/values-v21/template-styles.xml b/samples/browseable/ClippingBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ClippingBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CustomChoiceList/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CustomChoiceList/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CustomChoiceList/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CustomChoiceList/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CustomChoiceList/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CustomChoiceList/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/CustomChoiceList/res/values-v21/template-styles.xml b/samples/browseable/CustomChoiceList/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/CustomChoiceList/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CustomNotifications/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CustomNotifications/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CustomNotifications/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CustomNotifications/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CustomNotifications/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CustomNotifications/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/CustomNotifications/res/values-v21/template-styles.xml b/samples/browseable/CustomNotifications/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/CustomNotifications/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CustomTransition/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CustomTransition/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CustomTransition/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/CustomTransition/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/CustomTransition/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/CustomTransition/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/CustomTransition/res/values-v21/template-styles.xml b/samples/browseable/CustomTransition/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/CustomTransition/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/DataLayer/Application/AndroidManifest.xml b/samples/browseable/DataLayer/Application/AndroidManifest.xml
index 787e273..6f7e81e 100644
--- a/samples/browseable/DataLayer/Application/AndroidManifest.xml
+++ b/samples/browseable/DataLayer/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.android.wearable.datalayer" >
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.camera" android:required="false" />
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DataLayer/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DataLayer/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DataLayer/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DataLayer/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DataLayer/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DataLayer/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DataLayer/Application/res/values-v21/template-styles.xml b/samples/browseable/DataLayer/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DataLayer/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/DataLayer/Application/res/values/base-strings.xml b/samples/browseable/DataLayer/Application/res/values/base-strings.xml
index b335734..856ec54 100644
--- a/samples/browseable/DataLayer/Application/res/values/base-strings.xml
+++ b/samples/browseable/DataLayer/Application/res/values/base-strings.xml
@@ -20,9 +20,9 @@
         <![CDATA[
         
             
-            You can cause the wearable to start an activity by pressing a button in the
-            companion app UI. You can also take a picture on the companion device, which will be transmitted as
-            an Asset for display on the wearable.
+            Sample demonstrating the usage of the GoogleApiClient in order to send data
+            from a handheld device to a wearable. The data transmitted is a picture taken by
+            the user of the sample.
             
         
         ]]>
diff --git a/samples/browseable/DataLayer/Wearable/AndroidManifest.xml b/samples/browseable/DataLayer/Wearable/AndroidManifest.xml
index 38c0798..4cc9034 100644
--- a/samples/browseable/DataLayer/Wearable/AndroidManifest.xml
+++ b/samples/browseable/DataLayer/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.wearable.datalayer" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/DataLayer/_index.jd b/samples/browseable/DataLayer/_index.jd
index bab98d6..844210f 100644
--- a/samples/browseable/DataLayer/_index.jd
+++ b/samples/browseable/DataLayer/_index.jd
@@ -4,8 +4,8 @@
 
 <p>
             
-            You can cause the wearable to start an activity by pressing a button in the
-            companion app UI. You can also take a picture on the companion device, which will be transmitted as
-            an Asset for display on the wearable.
+            Sample demonstrating the usage of the GoogleApiClient in order to send data
+            from a handheld device to a wearable. The data transmitted is a picture taken by
+            the user of the sample.
             
         </p>
diff --git a/samples/browseable/DelayedConfirmation/Application/AndroidManifest.xml b/samples/browseable/DelayedConfirmation/Application/AndroidManifest.xml
index 3fa1f36..c9fdccb 100644
--- a/samples/browseable/DelayedConfirmation/Application/AndroidManifest.xml
+++ b/samples/browseable/DelayedConfirmation/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.android.wearable.delayedconfirmation" >
 
-    <uses-sdk android:minSdkVersion="19"
-        android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+        android:targetSdkVersion="21" />
 
     <application
             android:allowBackup="true"
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DelayedConfirmation/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DelayedConfirmation/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DelayedConfirmation/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DelayedConfirmation/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DelayedConfirmation/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DelayedConfirmation/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DelayedConfirmation/Application/res/values-v21/template-styles.xml b/samples/browseable/DelayedConfirmation/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DelayedConfirmation/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/DelayedConfirmation/Wearable/AndroidManifest.xml b/samples/browseable/DelayedConfirmation/Wearable/AndroidManifest.xml
index b73af62..845c070 100644
--- a/samples/browseable/DelayedConfirmation/Wearable/AndroidManifest.xml
+++ b/samples/browseable/DelayedConfirmation/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.wearable.delayedconfirmation" >
 
     <uses-sdk android:minSdkVersion="20"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DisplayingBitmaps/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DisplayingBitmaps/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DisplayingBitmaps/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DisplayingBitmaps/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DisplayingBitmaps/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DisplayingBitmaps/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DisplayingBitmaps/res/values-v21/template-styles.xml b/samples/browseable/DisplayingBitmaps/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DisplayingBitmaps/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DocumentCentricApps/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DocumentCentricApps/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DocumentCentricApps/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DocumentCentricApps/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DocumentCentricApps/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DocumentCentricApps/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DocumentCentricApps/res/values-v21/template-styles.xml b/samples/browseable/DocumentCentricApps/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DocumentCentricApps/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/template-styles.xml b/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DocumentCentricRelinquishIdentity/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DoneBar/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DoneBar/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DoneBar/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DoneBar/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DoneBar/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DoneBar/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DoneBar/res/values-v21/template-styles.xml b/samples/browseable/DoneBar/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DoneBar/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DrawableTinting/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DrawableTinting/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DrawableTinting/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/DrawableTinting/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/DrawableTinting/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/DrawableTinting/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/DrawableTinting/res/values-v21/template-styles.xml b/samples/browseable/DrawableTinting/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/DrawableTinting/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ElevationBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ElevationBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ElevationBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ElevationBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ElevationBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ElevationBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElevationBasic/res/values-v21/template-styles.xml b/samples/browseable/ElevationBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ElevationBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ElevationDrag/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ElevationDrag/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ElevationDrag/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ElevationDrag/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ElevationDrag/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ElevationDrag/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElevationDrag/res/values-v21/template-styles.xml b/samples/browseable/ElevationDrag/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ElevationDrag/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Application/AndroidManifest.xml b/samples/browseable/ElizaChat/Application/AndroidManifest.xml
index 14e9823..8f35c56 100644
--- a/samples/browseable/ElizaChat/Application/AndroidManifest.xml
+++ b/samples/browseable/ElizaChat/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.wearable.elizachat" >
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application
         android:allowBackup="true"
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ElizaChat/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ElizaChat/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ElizaChat/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ElizaChat/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ElizaChat/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ElizaChat/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Application/res/values-v21/template-styles.xml b/samples/browseable/ElizaChat/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ElizaChat/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/EmbeddedApp/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/EmbeddedApp/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/EmbeddedApp/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/EmbeddedApp/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/EmbeddedApp/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/EmbeddedApp/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/EmbeddedApp/Application/res/values-v21/template-styles.xml b/samples/browseable/EmbeddedApp/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/EmbeddedApp/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/EmbeddedApp/Wearable/AndroidManifest.xml b/samples/browseable/EmbeddedApp/Wearable/AndroidManifest.xml
index 2c1d52c..4863d66 100644
--- a/samples/browseable/EmbeddedApp/Wearable/AndroidManifest.xml
+++ b/samples/browseable/EmbeddedApp/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.example.android.wearable.embeddedapp" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/FindMyPhone/Application/AndroidManifest.xml b/samples/browseable/FindMyPhone/Application/AndroidManifest.xml
index e88a046..8cb70d1 100644
--- a/samples/browseable/FindMyPhone/Application/AndroidManifest.xml
+++ b/samples/browseable/FindMyPhone/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.example.android.wearable.findphone">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <uses-permission android:name="android.permission.VIBRATE" />
     <application
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/FindMyPhone/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/FindMyPhone/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/FindMyPhone/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/FindMyPhone/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/FindMyPhone/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/FindMyPhone/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/FindMyPhone/Application/res/values-v21/template-styles.xml b/samples/browseable/FindMyPhone/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/FindMyPhone/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/FindMyPhone/Wearable/AndroidManifest.xml b/samples/browseable/FindMyPhone/Wearable/AndroidManifest.xml
index fd6d274..18b5209 100644
--- a/samples/browseable/FindMyPhone/Wearable/AndroidManifest.xml
+++ b/samples/browseable/FindMyPhone/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.example.android.wearable.findphone" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-permission android:name="android.permission.VIBRATE" />
     <uses-feature android:name="android.hardware.type.watch" />
diff --git a/samples/browseable/Flashlight/Application/AndroidManifest.xml b/samples/browseable/Flashlight/Application/AndroidManifest.xml
index 44cfdd3..925d11b 100644
--- a/samples/browseable/Flashlight/Application/AndroidManifest.xml
+++ b/samples/browseable/Flashlight/Application/AndroidManifest.xml
@@ -18,10 +18,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.wearable.flashlight">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
         android:label="@string/app_name">
     </application>
 
diff --git a/samples/browseable/Flashlight/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/Flashlight/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/Flashlight/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/Flashlight/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/Flashlight/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/Flashlight/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/Flashlight/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/Flashlight/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/Flashlight/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/Flashlight/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/Flashlight/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/Flashlight/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Flashlight/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Flashlight/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Flashlight/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Flashlight/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Flashlight/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Flashlight/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Flashlight/Application/res/values-v21/template-styles.xml b/samples/browseable/Flashlight/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Flashlight/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Flashlight/Wearable/AndroidManifest.xml b/samples/browseable/Flashlight/Wearable/AndroidManifest.xml
index 1800e76..738ba9d 100644
--- a/samples/browseable/Flashlight/Wearable/AndroidManifest.xml
+++ b/samples/browseable/Flashlight/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
           package="com.example.android.wearable.flashlight" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/FloatingActionButtonBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/FloatingActionButtonBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/FloatingActionButtonBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/FloatingActionButtonBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/FloatingActionButtonBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/FloatingActionButtonBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/FloatingActionButtonBasic/res/values-v21/template-styles.xml b/samples/browseable/FloatingActionButtonBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/FloatingActionButtonBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/FloatingActionButtonBasic/res/values/dimens.xml b/samples/browseable/FloatingActionButtonBasic/res/values/dimens.xml
index f063937..5a9d684 100644
--- a/samples/browseable/FloatingActionButtonBasic/res/values/dimens.xml
+++ b/samples/browseable/FloatingActionButtonBasic/res/values/dimens.xml
@@ -15,8 +15,8 @@
  limitations under the License.
 -->
 <resources>
-    <dimen name="fab_elevation">2dp</dimen>
-    <dimen name="fab_press_translation_z">2dp</dimen>
+    <dimen name="fab_elevation">8dp</dimen>
+    <dimen name="fab_press_translation_z">9dp</dimen>
     <dimen name="fab_size">56dp</dimen>
     <dimen name="fab_size_small">40dp</dimen>
     <dimen name="fab_icon_size">24dp</dimen>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/FragmentTransition/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/FragmentTransition/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/FragmentTransition/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/FragmentTransition/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/FragmentTransition/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/FragmentTransition/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/FragmentTransition/res/values-v21/template-styles.xml b/samples/browseable/FragmentTransition/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/FragmentTransition/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Geofencing/Application/AndroidManifest.xml b/samples/browseable/Geofencing/Application/AndroidManifest.xml
index ba97815..d07a265 100644
--- a/samples/browseable/Geofencing/Application/AndroidManifest.xml
+++ b/samples/browseable/Geofencing/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="com.example.android.wearable.geofencing">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Geofencing/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Geofencing/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Geofencing/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Geofencing/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Geofencing/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Geofencing/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Geofencing/Application/res/values-v21/template-styles.xml b/samples/browseable/Geofencing/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Geofencing/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Geofencing/Application/res/values/strings.xml b/samples/browseable/Geofencing/Application/res/values/strings.xml
index ad9717b..610661e 100644
--- a/samples/browseable/Geofencing/Application/res/values/strings.xml
+++ b/samples/browseable/Geofencing/Application/res/values/strings.xml
@@ -16,4 +16,6 @@
 
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="start_geofence_service">Starting geofence transition service</string>
+    <string name="entering_geofence">Entering the GeoFence zone</string>
+    <string name="exiting_geofence">Exiting the GeoFence zone</string>
 </resources>
diff --git a/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/GeofenceTransitionsIntentService.java b/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/GeofenceTransitionsIntentService.java
index 5d1ea48..8ae0cbc 100644
--- a/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/GeofenceTransitionsIntentService.java
+++ b/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/GeofenceTransitionsIntentService.java
@@ -26,11 +26,12 @@
 import android.content.Intent;
 import android.os.Bundle;
 import android.util.Log;
+import android.widget.Toast;
 
 import com.google.android.gms.common.ConnectionResult;
 import com.google.android.gms.common.api.GoogleApiClient;
 import com.google.android.gms.location.Geofence;
-import com.google.android.gms.location.LocationClient;
+import com.google.android.gms.location.GeofencingEvent;
 import com.google.android.gms.wearable.PutDataMapRequest;
 import com.google.android.gms.wearable.Wearable;
 
@@ -61,44 +62,46 @@
     /**
      * Handles incoming intents.
      * @param intent The Intent sent by Location Services. This Intent is provided to Location
-     *               Services (inside a PendingIntent) when addGeofences() is called.
+     * Services (inside a PendingIntent) when addGeofences() is called.
      */
     @Override
     protected void onHandleIntent(Intent intent) {
-        // First check for errors.
-        if (LocationClient.hasError(intent)) {
-            int errorCode = LocationClient.getErrorCode(intent);
+        GeofencingEvent geoFenceEvent = GeofencingEvent.fromIntent(intent);
+        if (geoFenceEvent.hasError()) {
+            int errorCode = geoFenceEvent.getErrorCode();
             Log.e(TAG, "Location Services error: " + errorCode);
         } else {
-            // Get the type of geofence transition (i.e. enter or exit in this sample).
-            int transitionType = LocationClient.getGeofenceTransition(intent);
-            // Create a DataItem when a user enters one of the geofences. The wearable app will
-            // receive this and create a notification to prompt him/her to check in.
+
+            int transitionType = geoFenceEvent.getGeofenceTransition();
             if (Geofence.GEOFENCE_TRANSITION_ENTER == transitionType) {
                 // Connect to the Google Api service in preparation for sending a DataItem.
                 mGoogleApiClient.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
                 // Get the geofence id triggered. Note that only one geofence can be triggered at a
                 // time in this example, but in some cases you might want to consider the full list
                 // of geofences triggered.
-                String triggeredGeofenceId = LocationClient.getTriggeringGeofences(intent).get(0)
+                String triggeredGeoFenceId = geoFenceEvent.getTriggeringGeofences().get(0)
                         .getRequestId();
                 // Create a DataItem with this geofence's id. The wearable can use this to create
                 // a notification.
                 final PutDataMapRequest putDataMapRequest =
                         PutDataMapRequest.create(GEOFENCE_DATA_ITEM_PATH);
-                putDataMapRequest.getDataMap().putString(KEY_GEOFENCE_ID, triggeredGeofenceId);
+                putDataMapRequest.getDataMap().putString(KEY_GEOFENCE_ID, triggeredGeoFenceId);
                 if (mGoogleApiClient.isConnected()) {
                     Wearable.DataApi.putDataItem(
-                        mGoogleApiClient, putDataMapRequest.asPutDataRequest()).await();
+                            mGoogleApiClient, putDataMapRequest.asPutDataRequest()).await();
                 } else {
                     Log.e(TAG, "Failed to send data item: " + putDataMapRequest
-                             + " - Client disconnected from Google Play Services");
+                            + " - Client disconnected from Google Play Services");
                 }
+                Toast.makeText(this, getString(R.string.entering_geofence),
+                        Toast.LENGTH_SHORT).show();
                 mGoogleApiClient.disconnect();
             } else if (Geofence.GEOFENCE_TRANSITION_EXIT == transitionType) {
                 // Delete the data item when leaving a geofence region.
                 mGoogleApiClient.blockingConnect(CONNECTION_TIME_OUT_MS, TimeUnit.MILLISECONDS);
                 Wearable.DataApi.deleteDataItems(mGoogleApiClient, GEOFENCE_DATA_ITEM_URI).await();
+                Toast.makeText(this, getString(R.string.exiting_geofence),
+                        Toast.LENGTH_SHORT).show();
                 mGoogleApiClient.disconnect();
             }
         }
diff --git a/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/MainActivity.java b/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/MainActivity.java
index baef217..350c9c5 100644
--- a/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/MainActivity.java
+++ b/samples/browseable/Geofencing/Application/src/com.example.android.wearable.geofencing/MainActivity.java
@@ -39,17 +39,16 @@
 import com.google.android.gms.common.ConnectionResult;
 import com.google.android.gms.common.GooglePlayServicesClient.ConnectionCallbacks;
 import com.google.android.gms.common.GooglePlayServicesUtil;
+import com.google.android.gms.common.api.GoogleApiClient;
 import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
 import com.google.android.gms.location.Geofence;
-import com.google.android.gms.location.LocationClient;
-import com.google.android.gms.location.LocationClient.OnAddGeofencesResultListener;
-import com.google.android.gms.location.LocationStatusCodes;
+import com.google.android.gms.location.LocationServices;
 
 import java.util.ArrayList;
 import java.util.List;
 
 public class MainActivity extends Activity implements ConnectionCallbacks,
-        OnConnectionFailedListener, OnAddGeofencesResultListener {
+        OnConnectionFailedListener, GoogleApiClient.ConnectionCallbacks {
 
     // Internal List of Geofence objects. In a real app, these might be provided by an API based on
     // locations within the user's proximity.
@@ -62,35 +61,39 @@
     // Persistent storage for geofences.
     private SimpleGeofenceStore mGeofenceStorage;
 
-    private LocationClient mLocationClient;
+    private LocationServices mLocationService;
     // Stores the PendingIntent used to request geofence monitoring.
     private PendingIntent mGeofenceRequestIntent;
+    private GoogleApiClient mApiClient;
 
     // Defines the allowable request types (in this example, we only add geofences).
     private enum REQUEST_TYPE {ADD}
     private REQUEST_TYPE mRequestType;
-    // Flag that indicates if a request is underway.
-    private boolean mInProgress;
-
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         // Rather than displayng this activity, simply display a toast indicating that the geofence
         // service is being created. This should happen in less than a second.
-        Toast.makeText(this, getString(R.string.start_geofence_service), Toast.LENGTH_SHORT).show();
+        if (!isGooglePlayServicesAvailable()) {
+            Log.e(TAG, "Google Play services unavailable.");
+            finish();
+            return;
+        }
+
+        mApiClient = new GoogleApiClient.Builder(this)
+                .addApi(LocationServices.API)
+                .addConnectionCallbacks(this)
+                .addOnConnectionFailedListener(this)
+                .build();
+
+        mApiClient.connect();
 
         // Instantiate a new geofence storage area.
         mGeofenceStorage = new SimpleGeofenceStore(this);
         // Instantiate the current List of geofences.
         mGeofenceList = new ArrayList<Geofence>();
-        // Start with the request flag set to false.
-        mInProgress = false;
-
         createGeofences();
-        addGeofences();
-
-        finish();
     }
 
     /**
@@ -123,37 +126,9 @@
         mGeofenceList.add(mYerbaBuenaGeofence.toGeofence());
     }
 
-    /**
-     * Start a request for geofence monitoring by calling LocationClient.connect().
-     */
-    public void addGeofences() {
-        // Start a request to add geofences.
-        mRequestType = REQUEST_TYPE.ADD;
-        // Test for Google Play services after setting the request type.
-        if (!isGooglePlayServicesAvailable()) {
-            Log.e(TAG, "Unable to add geofences - Google Play services unavailable.");
-            return;
-        }
-        // Create a new location client object. Since this activity class implements
-        // ConnectionCallbacks and OnConnectionFailedListener, it can be used as the listener for
-        // both parameters.
-        mLocationClient = new LocationClient(this, this, this);
-        // If a request is not already underway.
-        if (!mInProgress) {
-            // Indicate that a request is underway.
-            mInProgress = true;
-            // Request a connection from the client to Location Services.
-            mLocationClient.connect();
-        // A request is already underway, so disconnect the client and retry the request.
-        } else {
-            mLocationClient.disconnect();
-            mLocationClient.connect();
-        }
-    }
 
     @Override
     public void onConnectionFailed(ConnectionResult connectionResult) {
-        mInProgress = false;
         // If the error has a resolution, start a Google Play services activity to resolve it.
         if (connectionResult.hasResolution()) {
             try {
@@ -168,15 +143,8 @@
         }
     }
 
-    /**
-     * Called by Location Services if the location client disconnects.
-     */
     @Override
     public void onDisconnected() {
-        // Turn off the request flag.
-        mInProgress = false;
-        // Destroy the current location client.
-        mLocationClient = null;
     }
 
     /**
@@ -184,32 +152,22 @@
      */
     @Override
     public void onConnected(Bundle connectionHint) {
-        // Use mRequestType to determine what action to take. Only ADD is used in this sample.
-        if (REQUEST_TYPE.ADD == mRequestType) {
-            // Get the PendingIntent for the geofence monitoring request.
-            mGeofenceRequestIntent = getGeofenceTransitionPendingIntent();
-            // Send a request to add the current geofences.
-            mLocationClient.addGeofences(mGeofenceList, mGeofenceRequestIntent, this);
+        // Get the PendingIntent for the geofence monitoring request.
+        // Send a request to add the current geofences.
+        mGeofenceRequestIntent = getGeofenceTransitionPendingIntent();
+        LocationServices.GeofencingApi.addGeofences(mApiClient, mGeofenceList,
+                mGeofenceRequestIntent);
+        Toast.makeText(this, getString(R.string.start_geofence_service), Toast.LENGTH_SHORT).show();
+        finish();
+    }
+
+    @Override
+    public void onConnectionSuspended(int i) {
+        if (null != mGeofenceRequestIntent) {
+            LocationServices.GeofencingApi.removeGeofences(mApiClient, mGeofenceRequestIntent);
         }
     }
 
-    /**
-     * Called when request to add geofences is complete, with a result status code.
-     */
-    @Override
-    public void onAddGeofencesResult(int statusCode, String[] geofenceRequestIds) {
-        // Log if adding the geofences was successful.
-        if (LocationStatusCodes.SUCCESS == statusCode) {
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "Added geofences successfully.");
-            }
-        } else {
-            Log.e(TAG, "Failed to add geofences. Status code: " + statusCode);
-        }
-        // Turn off the in progress flag and disconnect the client.
-        mInProgress = false;
-        mLocationClient.disconnect();
-    }
 
     /**
      * Checks if Google Play services is available.
diff --git a/samples/browseable/Geofencing/Wearable/AndroidManifest.xml b/samples/browseable/Geofencing/Wearable/AndroidManifest.xml
index 97ce90e..082f396 100644
--- a/samples/browseable/Geofencing/Wearable/AndroidManifest.xml
+++ b/samples/browseable/Geofencing/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.wearable.geofencing" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/GridViewPager/Application/AndroidManifest.xml b/samples/browseable/GridViewPager/Application/AndroidManifest.xml
index 57241ce..b6092c5 100644
--- a/samples/browseable/GridViewPager/Application/AndroidManifest.xml
+++ b/samples/browseable/GridViewPager/Application/AndroidManifest.xml
@@ -18,10 +18,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.wearable.gridviewpager">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
         android:label="@string/app_name">
     </application>
 
diff --git a/samples/browseable/GridViewPager/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/GridViewPager/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/GridViewPager/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/GridViewPager/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/GridViewPager/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/GridViewPager/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/GridViewPager/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/GridViewPager/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/GridViewPager/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/GridViewPager/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/GridViewPager/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/GridViewPager/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/GridViewPager/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/GridViewPager/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/GridViewPager/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/GridViewPager/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/GridViewPager/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/GridViewPager/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/GridViewPager/Application/res/values-v21/template-styles.xml b/samples/browseable/GridViewPager/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/GridViewPager/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/GridViewPager/Wearable/AndroidManifest.xml b/samples/browseable/GridViewPager/Wearable/AndroidManifest.xml
index 3f9c4b1..5c362dc 100644
--- a/samples/browseable/GridViewPager/Wearable/AndroidManifest.xml
+++ b/samples/browseable/GridViewPager/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
     package="com.example.android.wearable.gridviewpager" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/GridViewPager/Wearable/res/drawable-nodpi/bugdroid_large.png b/samples/browseable/GridViewPager/Wearable/res/drawable-nodpi/bugdroid_large.png
new file mode 100644
index 0000000..7b393b2
--- /dev/null
+++ b/samples/browseable/GridViewPager/Wearable/res/drawable-nodpi/bugdroid_large.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/res/values/strings.xml b/samples/browseable/GridViewPager/Wearable/res/drawable/gradient.xml
similarity index 69%
rename from samples/browseable/ElizaChat/Shared/res/values/strings.xml
rename to samples/browseable/GridViewPager/Wearable/res/drawable/gradient.xml
index 0f2bb90..7077043 100644
--- a/samples/browseable/ElizaChat/Shared/res/values/strings.xml
+++ b/samples/browseable/GridViewPager/Wearable/res/drawable/gradient.xml
@@ -13,6 +13,15 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources>
-    <string name="app_name">Shared</string>
-</resources>
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle" >
+
+    <gradient
+        android:angle="45"
+        android:endColor="#87CEEB"
+        android:centerColor="#768087"
+        android:startColor="#000"
+        android:type="linear" />
+
+</shape>
diff --git a/samples/browseable/ElizaChat/Shared/res/values/strings.xml b/samples/browseable/GridViewPager/Wearable/res/drawable/shape.xml
similarity index 60%
copy from samples/browseable/ElizaChat/Shared/res/values/strings.xml
copy to samples/browseable/GridViewPager/Wearable/res/drawable/shape.xml
index 0f2bb90..a6306c7 100644
--- a/samples/browseable/ElizaChat/Shared/res/values/strings.xml
+++ b/samples/browseable/GridViewPager/Wearable/res/drawable/shape.xml
@@ -13,6 +13,22 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<resources>
-    <string name="app_name">Shared</string>
-</resources>
+
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle" >
+
+    <stroke
+        android:dashGap="4dp"
+        android:dashWidth="10dp"
+        android:width="6dp"
+        android:color="@color/black" />
+
+    <solid android:color="@color/white" />
+
+    <padding
+        android:bottom="20dp"
+        android:left="20dp"
+        android:right="20dp"
+        android:top="20dp" />
+
+</shape>
diff --git a/samples/browseable/GridViewPager/Wearable/res/layout/activity_main.xml b/samples/browseable/GridViewPager/Wearable/res/layout/activity_main.xml
index abc3b30..8c077ab 100644
--- a/samples/browseable/GridViewPager/Wearable/res/layout/activity_main.xml
+++ b/samples/browseable/GridViewPager/Wearable/res/layout/activity_main.xml
@@ -13,10 +13,21 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-
-<android.support.wearable.view.GridViewPager
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/pager"
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:keepScreenOn="true" />
+    android:layout_height="match_parent" >
+
+    <android.support.wearable.view.GridViewPager
+        android:id="@+id/pager"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:keepScreenOn="true" />
+
+    <android.support.wearable.view.DotsPageIndicator
+        android:id="@+id/page_indicator"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_horizontal|bottom">
+    </android.support.wearable.view.DotsPageIndicator>
+
+</FrameLayout>
\ No newline at end of file
diff --git a/samples/browseable/GridViewPager/Wearable/res/layout/custom_fragment.xml b/samples/browseable/GridViewPager/Wearable/res/layout/custom_fragment.xml
new file mode 100644
index 0000000..13b02f2
--- /dev/null
+++ b/samples/browseable/GridViewPager/Wearable/res/layout/custom_fragment.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@drawable/gradient" >
+
+    <TextView
+        android:id="@+id/text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center"
+        android:layout_margin="8dp"
+        android:background="@drawable/shape"
+        android:text="@string/custom_fragment_text" 
+        android:textColor="@color/primary_text_light"/>
+
+</FrameLayout>
diff --git a/samples/browseable/GridViewPager/Wearable/res/values/dimens.xml b/samples/browseable/GridViewPager/Wearable/res/values/dimens.xml
index 47ab217..dd6ad2d 100644
--- a/samples/browseable/GridViewPager/Wearable/res/values/dimens.xml
+++ b/samples/browseable/GridViewPager/Wearable/res/values/dimens.xml
@@ -18,4 +18,5 @@
     <dimen name="page_row_margin">100dp</dimen>
     <dimen name="page_column_margin">10dp</dimen>
     <dimen name="page_column_margin_round">50dp</dimen>
+    <dimen name="card_margin_bottom">3dp</dimen>
 </resources>
diff --git a/samples/browseable/GridViewPager/Wearable/res/values/strings.xml b/samples/browseable/GridViewPager/Wearable/res/values/strings.xml
index 404119b..ab4e663 100644
--- a/samples/browseable/GridViewPager/Wearable/res/values/strings.xml
+++ b/samples/browseable/GridViewPager/Wearable/res/values/strings.xml
@@ -18,39 +18,25 @@
 
     <string name="app_name">GridViewPager Sample</string>
     <string name="welcome_title">GridViewPager</string>
-    <string name="welcome_text">Welcome!</string>
+    <string name="welcome_text">Sample App</string>
 
     <string name="about_title">About</string>
-    <string name="about_text">Content is organized into multiple pages. Swipe
-        between cards to view other content.</string>
+    <string name="about_text">Content is organized into multiple pages. Swipe between cards to view other content.</string>
 
     <string name="cards_title">Cards</string>
-    <string name="cards_text">Each page is created using a CardFragment. A
-        layout is placed inside the card and the rest is handled
-        automatically.</string>
+    <string name="cards_text">Each page is created using a CardFragment. A layout is placed inside the card and the rest is handled automatically.</string>
 
     <string name="expansion_title">Expansion</string>
-    <string name="expansion_text">By default, each card will grow taller to
-        accommodate extra content. Tall cards can be scrolled through
-        like any scrollable view. The maximum height is controlled by
-        setExpansionFactor() with a default of 10 pages. After that
-        you\'ll notice a faded edge to indicate there is more. Expansion
-        can be disabled completely using setExpansionEnabled(false).
-        With this, the content will be clipped if it\'s taller than one
-        page.</string>
+    <string name="expansion_text">By default, each card will grow taller to accommodate extra content. Tall cards can be scrolled through like any scrollable view. The maximum height is controlled by setExpansionFactor() with a default of 10 pages. After that you\'ll notice a faded edge to indicate there is more. Expansion can be disabled completely using setExpansionEnabled(false). With this, the content will be clipped if it\'s taller than one page.</string>
 
     <string name="backgrounds_title">Backgrounds</string>
-    <string name="backgrounds_text">Backgrounds are supplied by the adapter\'s
-        getBackground method. Parallax and crossfade effects are applied
-        automatically.</string>
+    <string name="backgrounds_text">Backgrounds are supplied by the adapter\'s getBackground method. Parallax and crossfade effects are applied automatically.</string>
 
     <string name="columns_title">Columns</string>
-    <string name="columns_text">When moving between rows, the pager always
-        returns to column 0. This is adjustable in the adapter. See
-        method getCurrentColumnForRow().</string>
+    <string name="columns_text">When moving between rows, the pager always returns to column 0. This is adjustable in the adapter. See method getCurrentColumnForRow().</string>
 
     <string name="dismiss_title">Dismiss</string>
-    <string name="dismiss_text">To exit the application, swipe from left to
-        right.</string>
+    <string name="dismiss_text">To exit the application, swipe from left to right.</string>
+    <string name="custom_fragment_text">"GridViewPager will accept any fragment. This is an example of a custom fragment with it's own background."</string>
 
 </resources>
diff --git a/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/CustomFragment.java b/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/CustomFragment.java
new file mode 100644
index 0000000..aff3665
--- /dev/null
+++ b/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/CustomFragment.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.gridviewpager;
+
+import android.app.Fragment;
+import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class CustomFragment extends Fragment {
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+            Bundle savedInstanceState) {
+        return inflater.inflate(R.layout.custom_fragment, container, false);
+    }
+}
diff --git a/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/MainActivity.java b/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/MainActivity.java
index 20751a3..6abb58b 100644
--- a/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/MainActivity.java
+++ b/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/MainActivity.java
@@ -19,6 +19,7 @@
 import android.app.Activity;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.support.wearable.view.DotsPageIndicator;
 import android.support.wearable.view.GridViewPager;
 import android.view.View;
 import android.view.View.OnApplyWindowInsetsListener;
@@ -52,5 +53,7 @@
             }
         });
         pager.setAdapter(new SampleGridPagerAdapter(this, getFragmentManager()));
+        DotsPageIndicator dotsPageIndicator = (DotsPageIndicator) findViewById(R.id.page_indicator);
+        dotsPageIndicator.setPager(pager);
     }
 }
diff --git a/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/SampleGridPagerAdapter.java b/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/SampleGridPagerAdapter.java
index 8f9bcf9..b56cc6a 100644
--- a/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/SampleGridPagerAdapter.java
+++ b/samples/browseable/GridViewPager/Wearable/src/com.example.android.wearable.gridviewpager/SampleGridPagerAdapter.java
@@ -19,22 +19,109 @@
 import android.app.Fragment;
 import android.app.FragmentManager;
 import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.graphics.drawable.ColorDrawable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.TransitionDrawable;
+import android.os.AsyncTask;
+import android.support.v4.util.LruCache;
 import android.support.wearable.view.CardFragment;
 import android.support.wearable.view.FragmentGridPagerAdapter;
-import android.support.wearable.view.ImageReference;
-import android.view.Gravity;
+import android.support.wearable.view.GridPagerAdapter;
+import android.util.Log;
+
+import java.util.ArrayList;
+import java.util.List;
 
 /**
- * Constructs fragments as requested by the GridViewPager. For each row a
- * different background is provided.
+ * Constructs fragments as requested by the GridViewPager. For each row a different background is
+ * provided.
+ * <p>
+ * Always avoid loading resources from the main thread. In this sample, the background images are
+ * loaded from an background task and then updated using {@link #notifyRowBackgroundChanged(int)}
+ * and {@link #notifyPageBackgroundChanged(int, int)}.
  */
 public class SampleGridPagerAdapter extends FragmentGridPagerAdapter {
+    private static final int TRANSITION_DURATION_MILLIS = 100;
 
     private final Context mContext;
+    private List<Row> mRows;
+    private ColorDrawable mDefaultBg;
+
+    private ColorDrawable mClearBg;
 
     public SampleGridPagerAdapter(Context ctx, FragmentManager fm) {
         super(fm);
         mContext = ctx;
+
+        mRows = new ArrayList<SampleGridPagerAdapter.Row>();
+
+        mRows.add(new Row(cardFragment(R.string.welcome_title, R.string.welcome_text)));
+        mRows.add(new Row(cardFragment(R.string.about_title, R.string.about_text)));
+        mRows.add(new Row(
+                cardFragment(R.string.cards_title, R.string.cards_text),
+                cardFragment(R.string.expansion_title, R.string.expansion_text)));
+        mRows.add(new Row(
+                cardFragment(R.string.backgrounds_title, R.string.backgrounds_text),
+                cardFragment(R.string.columns_title, R.string.columns_text)));
+        mRows.add(new Row(new CustomFragment()));
+        mRows.add(new Row(cardFragment(R.string.dismiss_title, R.string.dismiss_text)));
+        mDefaultBg = new ColorDrawable(R.color.dark_grey);
+        mClearBg = new ColorDrawable(android.R.color.transparent);
+    }
+
+    LruCache<Integer, Drawable> mRowBackgrounds = new LruCache<Integer, Drawable>(3) {
+        @Override
+        protected Drawable create(final Integer row) {
+            int resid = BG_IMAGES[row % BG_IMAGES.length];
+            new DrawableLoadingTask(mContext) {
+                @Override
+                protected void onPostExecute(Drawable result) {
+                    TransitionDrawable background = new TransitionDrawable(new Drawable[] {
+                            mDefaultBg,
+                            result
+                    });
+                    mRowBackgrounds.put(row, background);
+                    notifyRowBackgroundChanged(row);
+                    background.startTransition(TRANSITION_DURATION_MILLIS);
+                }
+            }.execute(resid);
+            return mDefaultBg;
+        }
+    };
+
+    LruCache<Point, Drawable> mPageBackgrounds = new LruCache<Point, Drawable>(3) {
+        @Override
+        protected Drawable create(final Point page) {
+            // place bugdroid as the background at row 2, column 1
+            if (page.y == 2 && page.x == 1) {
+                int resid = R.drawable.bugdroid_large;
+                new DrawableLoadingTask(mContext) {
+                    @Override
+                    protected void onPostExecute(Drawable result) {
+                        TransitionDrawable background = new TransitionDrawable(new Drawable[] {
+                                mClearBg,
+                                result
+                        });
+                        mPageBackgrounds.put(page, background);
+                        notifyPageBackgroundChanged(page.y, page.x);
+                        background.startTransition(TRANSITION_DURATION_MILLIS);
+                    }
+                }.execute(resid);
+            }
+            return GridPagerAdapter.BACKGROUND_NONE;
+        }
+    };
+
+    private Fragment cardFragment(int titleRes, int textRes) {
+        Resources res = mContext.getResources();
+        CardFragment fragment =
+                CardFragment.create(res.getText(titleRes), res.getText(textRes));
+        // Add some extra bottom margin to leave room for the page indicator
+        fragment.setCardMarginBottom(
+                res.getDimensionPixelSize(R.dimen.card_margin_bottom));
+        return fragment;
     }
 
     static final int[] BG_IMAGES = new int[] {
@@ -45,90 +132,67 @@
             R.drawable.debug_background_5
     };
 
-    /** A simple container for static data in each page */
-    private static class Page {
-        int titleRes;
-        int textRes;
-        int iconRes;
-        int cardGravity = Gravity.BOTTOM;
-        boolean expansionEnabled = true;
-        float expansionFactor = 1.0f;
-        int expansionDirection = CardFragment.EXPAND_DOWN;
+    /** A convenient container for a row of fragments. */
+    private class Row {
+        final List<Fragment> columns = new ArrayList<Fragment>();
 
-        public Page(int titleRes, int textRes, boolean expansion) {
-            this(titleRes, textRes, 0);
-            this.expansionEnabled = expansion;
+        public Row(Fragment... fragments) {
+            for (Fragment f : fragments) {
+                add(f);
+            }
         }
 
-        public Page(int titleRes, int textRes, boolean expansion, float expansionFactor) {
-            this(titleRes, textRes, 0);
-            this.expansionEnabled = expansion;
-            this.expansionFactor = expansionFactor;
+        public void add(Fragment f) {
+            columns.add(f);
         }
 
-        public Page(int titleRes, int textRes, int iconRes) {
-            this.titleRes = titleRes;
-            this.textRes = textRes;
-            this.iconRes = iconRes;
+        Fragment getColumn(int i) {
+            return columns.get(i);
         }
 
-        public Page(int titleRes, int textRes, int iconRes, int gravity) {
-            this.titleRes = titleRes;
-            this.textRes = textRes;
-            this.iconRes = iconRes;
-            this.cardGravity = gravity;
+        public int getColumnCount() {
+            return columns.size();
         }
     }
 
-    private final Page[][] PAGES = {
-            {
-                    new Page(R.string.welcome_title, R.string.welcome_text, R.drawable.bugdroid,
-                            Gravity.CENTER_VERTICAL),
-            },
-            {
-                    new Page(R.string.about_title, R.string.about_text, false),
-            },
-            {
-                    new Page(R.string.cards_title, R.string.cards_text, true, 2),
-                    new Page(R.string.expansion_title, R.string.expansion_text, true, 10),
-            },
-            {
-                    new Page(R.string.backgrounds_title, R.string.backgrounds_text, true, 2),
-                    new Page(R.string.columns_title, R.string.columns_text, true, 2)
-            },
-            {
-                    new Page(R.string.dismiss_title, R.string.dismiss_text, R.drawable.bugdroid,
-                            Gravity.CENTER_VERTICAL),
-            },
-
-    };
-
     @Override
     public Fragment getFragment(int row, int col) {
-        Page page = PAGES[row][col];
-        String title = page.titleRes != 0 ? mContext.getString(page.titleRes) : null;
-        String text = page.textRes != 0 ? mContext.getString(page.textRes) : null;
-        CardFragment fragment = CardFragment.create(title, text, page.iconRes);
-        // Advanced settings
-        fragment.setCardGravity(page.cardGravity);
-        fragment.setExpansionEnabled(page.expansionEnabled);
-        fragment.setExpansionDirection(page.expansionDirection);
-        fragment.setExpansionFactor(page.expansionFactor);
-        return fragment;
+        Row adapterRow = mRows.get(row);
+        return adapterRow.getColumn(col);
     }
 
     @Override
-    public ImageReference getBackground(int row, int column) {
-        return ImageReference.forDrawable(BG_IMAGES[row % BG_IMAGES.length]);
+    public Drawable getBackgroundForRow(final int row) {
+        return mRowBackgrounds.get(row);
+    }
+
+    @Override
+    public Drawable getBackgroundForPage(final int row, final int column) {
+        return mPageBackgrounds.get(new Point(column, row));
     }
 
     @Override
     public int getRowCount() {
-        return PAGES.length;
+        return mRows.size();
     }
 
     @Override
     public int getColumnCount(int rowNum) {
-        return PAGES[rowNum].length;
+        return mRows.get(rowNum).getColumnCount();
+    }
+
+    class DrawableLoadingTask extends AsyncTask<Integer, Void, Drawable> {
+        private static final String TAG = "Loader";
+        private Context context;
+
+        DrawableLoadingTask(Context context) {
+            this.context = context;
+        }
+
+        @Override
+        protected Drawable doInBackground(Integer... params) {
+            Log.d(TAG, "Loading asset 0x" + Integer.toHexString(params[0]));
+            return context.getResources().getDrawable(params[0]);
+        }
     }
 }
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/HdrViewfinder/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/HdrViewfinder/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/HdrViewfinder/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/HdrViewfinder/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/HdrViewfinder/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/HdrViewfinder/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/HdrViewfinder/res/values-v21/template-styles.xml b/samples/browseable/HdrViewfinder/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/HdrViewfinder/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/HorizontalPaging/res/drawable-hdpi/ic_launcher.png b/samples/browseable/HorizontalPaging/res/drawable-hdpi/ic_launcher.png
old mode 100755
new mode 100644
index 96a442e..8004277
--- a/samples/browseable/HorizontalPaging/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/HorizontalPaging/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/HorizontalPaging/res/drawable-mdpi/ic_launcher.png b/samples/browseable/HorizontalPaging/res/drawable-mdpi/ic_launcher.png
old mode 100755
new mode 100644
index 359047d..eb49a86
--- a/samples/browseable/HorizontalPaging/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/HorizontalPaging/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/HorizontalPaging/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/HorizontalPaging/res/drawable-xhdpi/ic_launcher.png
old mode 100755
new mode 100644
index 71c6d76..1d159e9
--- a/samples/browseable/HorizontalPaging/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/HorizontalPaging/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/HorizontalPaging/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/HorizontalPaging/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..ba543fe
--- /dev/null
+++ b/samples/browseable/HorizontalPaging/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/HorizontalPaging/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/HorizontalPaging/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/HorizontalPaging/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/HorizontalPaging/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/HorizontalPaging/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/HorizontalPaging/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/HorizontalPaging/res/values-v21/template-styles.xml b/samples/browseable/HorizontalPaging/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/HorizontalPaging/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ImmersiveMode/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ImmersiveMode/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ImmersiveMode/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/ImmersiveMode/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/ImmersiveMode/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/ImmersiveMode/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ImmersiveMode/res/values-v21/template-styles.xml b/samples/browseable/ImmersiveMode/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/ImmersiveMode/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Interpolator/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Interpolator/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Interpolator/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Interpolator/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Interpolator/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Interpolator/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Interpolator/res/values-v21/template-styles.xml b/samples/browseable/Interpolator/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Interpolator/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/JobScheduler/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/JobScheduler/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/JobScheduler/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/JobScheduler/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/JobScheduler/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/JobScheduler/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/JobScheduler/res/values-v21/template-styles.xml b/samples/browseable/JobScheduler/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/JobScheduler/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/JumpingJack/Application/AndroidManifest.xml b/samples/browseable/JumpingJack/Application/AndroidManifest.xml
index e778437..8605fb0 100644
--- a/samples/browseable/JumpingJack/Application/AndroidManifest.xml
+++ b/samples/browseable/JumpingJack/Application/AndroidManifest.xml
@@ -18,10 +18,12 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.wearable.jumpingjack">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
+    <uses-permission android:name="android.permission.VIBRATE"/>
 
     <application android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
         android:label="@string/app_name">
     </application>
 
diff --git a/samples/browseable/JumpingJack/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/JumpingJack/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/JumpingJack/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/JumpingJack/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/JumpingJack/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/JumpingJack/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/JumpingJack/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/JumpingJack/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/JumpingJack/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/JumpingJack/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/JumpingJack/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/JumpingJack/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/JumpingJack/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/JumpingJack/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/JumpingJack/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/JumpingJack/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/JumpingJack/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/JumpingJack/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/JumpingJack/Application/res/values-v21/template-styles.xml b/samples/browseable/JumpingJack/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/JumpingJack/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/JumpingJack/Wearable/AndroidManifest.xml b/samples/browseable/JumpingJack/Wearable/AndroidManifest.xml
index f123f77..02b7a4f 100644
--- a/samples/browseable/JumpingJack/Wearable/AndroidManifest.xml
+++ b/samples/browseable/JumpingJack/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
           package="com.example.android.wearable.jumpingjack">
 
    <uses-sdk android:minSdkVersion="20"
-             android:targetSdkVersion="20" />
+             android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/MainActivity.java b/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/MainActivity.java
index cdaaf6e..f1589c7 100644
--- a/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/MainActivity.java
+++ b/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/MainActivity.java
@@ -99,7 +99,7 @@
         mSecondIndicator = (ImageView) findViewById(R.id.indicator_1);
         final PagerAdapter adapter = new PagerAdapter(getFragmentManager());
         mCounterPage = new CounterFragment();
-        mSettingPage = new SettingsFragment(this);
+        mSettingPage = new SettingsFragment();
         adapter.addFragment(mCounterPage);
         adapter.addFragment(mSettingPage);
         setIndicator(0);
diff --git a/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/fragments/SettingsFragment.java b/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/fragments/SettingsFragment.java
index fffe8fb..771abd3 100644
--- a/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/fragments/SettingsFragment.java
+++ b/samples/browseable/JumpingJack/Wearable/src/com.example.android.wearable.jumpingjack/fragments/SettingsFragment.java
@@ -31,22 +31,15 @@
  */
 public class SettingsFragment extends Fragment {
 
-    private Button mButton;
-    private MainActivity mMainActivity;
-
-    public SettingsFragment(MainActivity mainActivity) {
-        mMainActivity = mainActivity;
-    }
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
             Bundle savedInstanceState) {
         View view = inflater.inflate(R.layout.setting_layout, container, false);
-        mButton = (Button) view.findViewById(R.id.btn);
-        mButton.setOnClickListener(new View.OnClickListener() {
+        Button button = (Button) view.findViewById(R.id.btn);
+        button.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
-                mMainActivity.resetCounter();
+                ((MainActivity) getActivity()).resetCounter();
             }
         });
         return view;
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/LNotifications/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/LNotifications/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/LNotifications/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/LNotifications/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/LNotifications/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/LNotifications/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/LNotifications/res/values-v21/template-styles.xml b/samples/browseable/LNotifications/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/LNotifications/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/MediaBrowserService/_index.jd b/samples/browseable/MediaBrowserService/_index.jd
index ada73c4..f7454ec 100644
--- a/samples/browseable/MediaBrowserService/_index.jd
+++ b/samples/browseable/MediaBrowserService/_index.jd
@@ -4,8 +4,14 @@
 
 <p>
             
-          This sample shows how to implement an audio media app that provides
-          media library metadata and playback controls through a standard
-          service.
-            
-        </p>
+This sample shows how to implement an audio media app that provides
+media library metadata and playback controls through a standard
+service. It exposes a simple music library through the new
+MediaBrowserService and provides MediaSession callbacks. This allows
+it to be used in Android Auto, for example.
+When not connected to a car, the app has a very simple UI that browses
+the media library and provides simple playback controls. When
+connected to Android Auto, the same service provides data and callback
+to the Android Auto UI in the same manner as it provides them to the
+local UI.
+</p>
diff --git a/samples/browseable/MediaBrowserService/res/drawable-hdpi/ic_launcher.png b/samples/browseable/MediaBrowserService/res/drawable-hdpi/ic_launcher.png
index 47d6854..05ef6f6 100644
--- a/samples/browseable/MediaBrowserService/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/MediaBrowserService/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaBrowserService/res/drawable-mdpi/ic_launcher.png b/samples/browseable/MediaBrowserService/res/drawable-mdpi/ic_launcher.png
index 01b53fd..f894fb8 100644
--- a/samples/browseable/MediaBrowserService/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/MediaBrowserService/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaBrowserService/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/MediaBrowserService/res/drawable-xhdpi/ic_launcher.png
index af762f2..43ade5e 100644
--- a/samples/browseable/MediaBrowserService/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/MediaBrowserService/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaBrowserService/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/MediaBrowserService/res/drawable-xxhdpi/ic_launcher.png
index eef47aa..3058c27 100644
--- a/samples/browseable/MediaBrowserService/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/MediaBrowserService/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaBrowserService/res/drawable-xxxhdpi/ic_launcher.png b/samples/browseable/MediaBrowserService/res/drawable-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..6b4e4a2
--- /dev/null
+++ b/samples/browseable/MediaBrowserService/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/MediaNotification.java b/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/MediaNotification.java
index 4456fda..6872723 100644
--- a/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/MediaNotification.java
+++ b/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/MediaNotification.java
@@ -37,7 +37,6 @@
 import android.media.session.PlaybackState;
 import android.os.AsyncTask;
 import android.util.LruCache;
-import android.util.SparseArray;
 
 import com.example.android.mediabrowserservice.utils.BitmapHelper;
 import com.example.android.mediabrowserservice.utils.LogHelper;
@@ -65,7 +64,6 @@
     private MediaSession.Token mSessionToken;
     private MediaController mController;
     private MediaController.TransportControls mTransportControls;
-    private final SparseArray<PendingIntent> mIntents = new SparseArray<PendingIntent>();
     private final LruCache<String, Bitmap> mAlbumArtCache;
 
     private PlaybackState mPlaybackState;
@@ -75,6 +73,8 @@
     private NotificationManager mNotificationManager;
     private Notification.Action mPlayPauseAction;
 
+    private PendingIntent mPauseIntent, mPlayIntent, mPreviousIntent, mNextIntent;
+
     private String mCurrentAlbumArt;
     private int mNotificationColor;
 
@@ -99,14 +99,14 @@
                 .getSystemService(Context.NOTIFICATION_SERVICE);
 
         String pkg = mService.getPackageName();
-        mIntents.put(R.drawable.ic_pause_white_24dp, PendingIntent.getBroadcast(mService, 100,
-                new Intent(ACTION_PAUSE).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT));
-        mIntents.put(R.drawable.ic_play_arrow_white_24dp, PendingIntent.getBroadcast(mService, 100,
-                new Intent(ACTION_PLAY).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT));
-        mIntents.put(R.drawable.ic_skip_previous_white_24dp, PendingIntent.getBroadcast(mService, 100,
-                new Intent(ACTION_PREV).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT));
-        mIntents.put(R.drawable.ic_skip_next_white_24dp, PendingIntent.getBroadcast(mService, 100,
-                new Intent(ACTION_NEXT).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT));
+        mPauseIntent = PendingIntent.getBroadcast(mService, 100,
+                new Intent(ACTION_PAUSE).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT);
+        mPlayIntent = PendingIntent.getBroadcast(mService, 100,
+                new Intent(ACTION_PLAY).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT);
+        mPreviousIntent = PendingIntent.getBroadcast(mService, 100,
+                new Intent(ACTION_PREV).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT);
+        mNextIntent = PendingIntent.getBroadcast(mService, 100,
+                new Intent(ACTION_NEXT).setPackage(pkg), PendingIntent.FLAG_CANCEL_CURRENT);
     }
 
     protected int getNotificationColor() {
@@ -241,8 +241,7 @@
         if ((mPlaybackState.getActions() & PlaybackState.ACTION_SKIP_TO_PREVIOUS) != 0) {
             mNotificationBuilder
                     .addAction(R.drawable.ic_skip_previous_white_24dp,
-                            mService.getString(R.string.label_previous),
-                            mIntents.get(R.drawable.ic_skip_previous_white_24dp));
+                            mService.getString(R.string.label_previous), mPreviousIntent);
             playPauseActionIndex = 1;
         }
 
@@ -251,8 +250,7 @@
         // If skip to next action is enabled
         if ((mPlaybackState.getActions() & PlaybackState.ACTION_SKIP_TO_NEXT) != 0) {
             mNotificationBuilder.addAction(R.drawable.ic_skip_next_white_24dp,
-                    mService.getString(R.string.label_next),
-                    mIntents.get(R.drawable.ic_skip_next_white_24dp));
+                    mService.getString(R.string.label_next), mNextIntent);
         }
 
         MediaDescription description = mMetadata.getDescription();
@@ -294,22 +292,24 @@
 
     private void updatePlayPauseAction() {
         LogHelper.d(TAG, "updatePlayPauseAction");
-        String playPauseLabel = "";
-        int playPauseIcon;
+        String label;
+        int icon;
+        PendingIntent intent;
         if (mPlaybackState.getState() == PlaybackState.STATE_PLAYING) {
-            playPauseLabel = mService.getString(R.string.label_pause);
-            playPauseIcon = R.drawable.ic_pause_white_24dp;
+            label = mService.getString(R.string.label_pause);
+            icon = R.drawable.ic_pause_white_24dp;
+            intent = mPauseIntent;
         } else {
-            playPauseLabel = mService.getString(R.string.label_play);
-            playPauseIcon = R.drawable.ic_play_arrow_white_24dp;
+            label = mService.getString(R.string.label_play);
+            icon = R.drawable.ic_play_arrow_white_24dp;
+            intent = mPlayIntent;
         }
         if (mPlayPauseAction == null) {
-            mPlayPauseAction = new Notification.Action(playPauseIcon, playPauseLabel,
-                    mIntents.get(playPauseIcon));
+            mPlayPauseAction = new Notification.Action(icon, label, intent);
         } else {
-            mPlayPauseAction.icon = playPauseIcon;
-            mPlayPauseAction.title = playPauseLabel;
-            mPlayPauseAction.actionIntent = mIntents.get(playPauseIcon);
+            mPlayPauseAction.icon = icon;
+            mPlayPauseAction.title = label;
+            mPlayPauseAction.actionIntent = intent;
         }
     }
 
diff --git a/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/PackageValidator.java b/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/PackageValidator.java
index fec360f..090b6a4 100644
--- a/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/PackageValidator.java
+++ b/samples/browseable/MediaBrowserService/src/com.example.android.mediabrowserservice/PackageValidator.java
@@ -159,7 +159,14 @@
      */
     public static boolean isCallerAllowed(Context context, String callingPackage, int callingUid) {
         // Always allow calls from the framework or development environment.
-        if (Process.SYSTEM_UID == callingUid || !"user".equals(Build.TYPE)) {
+        if (Process.SYSTEM_UID == callingUid || Process.myUid() == callingUid) {
+            return true;
+        }
+        if (BuildConfig.DEBUG) {
+            // When your app is built in debug mode, any app is allowed to connect to it and browse
+            // its media library. If you want to test the behavior of your app when it gets
+            // released, either build a release version or remove this clause.
+            Log.i(TAG, "Allowing caller '"+callingPackage+" because app was built in debug mode.");
             return true;
         }
         PackageInfo packageInfo;
diff --git a/samples/browseable/MediaEffects/res/drawable-hdpi/ic_launcher.png b/samples/browseable/MediaEffects/res/drawable-hdpi/ic_launcher.png
index 960dc8e..950d67b 100644
--- a/samples/browseable/MediaEffects/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/MediaEffects/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaEffects/res/drawable-mdpi/ic_launcher.png b/samples/browseable/MediaEffects/res/drawable-mdpi/ic_launcher.png
index 9356f26..cf01e9a 100644
--- a/samples/browseable/MediaEffects/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/MediaEffects/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaEffects/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/MediaEffects/res/drawable-xhdpi/ic_launcher.png
index 230d558..b66c0fd 100644
--- a/samples/browseable/MediaEffects/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/MediaEffects/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaEffects/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/MediaEffects/res/drawable-xxhdpi/ic_launcher.png
index c825d4e..1e0344e 100644
--- a/samples/browseable/MediaEffects/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/MediaEffects/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/MediaEffects/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/MediaEffects/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/MediaEffects/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/MediaEffects/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/MediaEffects/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/MediaEffects/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/MediaEffects/res/values-v21/template-styles.xml b/samples/browseable/MediaEffects/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/MediaEffects/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/MediaRecorder/_index.jd b/samples/browseable/MediaRecorder/_index.jd
index 28c5590..54b37c8 100644
--- a/samples/browseable/MediaRecorder/_index.jd
+++ b/samples/browseable/MediaRecorder/_index.jd
@@ -3,9 +3,9 @@
 @jd:body
 
 <p>
-            
-            This sample uses the camera/camcorder as the A/V source for the MediaRecorder API.
-            A TextureView is used as the camera preview which limits the code to API 14+. This
-            can be easily replaced with a SurfaceView to run on older devices.
-            
+
+This sample uses the camera/camcorder as the A/V source for the MediaRecorder API.
+A TextureView is used as the camera preview which limits the code to API 14+. This
+can be easily replaced with a SurfaceView to run on older devices.
+
         </p>
diff --git a/samples/browseable/MediaRecorder/res/drawable-hdpi/ic_launcher.png b/samples/browseable/MediaRecorder/res/drawable-hdpi/ic_launcher.png
index 13cd1e8..bea32bc 100644
--- a/samples/browseable/MediaRecorder/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/MediaRecorder/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaRecorder/res/drawable-mdpi/ic_launcher.png b/samples/browseable/MediaRecorder/res/drawable-mdpi/ic_launcher.png
index 00b2bd9..2a3a490 100644
--- a/samples/browseable/MediaRecorder/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/MediaRecorder/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaRecorder/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/MediaRecorder/res/drawable-xhdpi/ic_launcher.png
index 953f1cc..9674428 100644
--- a/samples/browseable/MediaRecorder/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/MediaRecorder/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MediaRecorder/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/MediaRecorder/res/drawable-xxhdpi/ic_launcher.png
index f2ccb10..61e322c 100644
--- a/samples/browseable/MediaRecorder/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/MediaRecorder/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/MediaRecorder/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/MediaRecorder/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/MediaRecorder/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/MediaRecorder/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/MediaRecorder/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/MediaRecorder/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/MediaRecorder/res/values-v21/template-styles.xml b/samples/browseable/MediaRecorder/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/MediaRecorder/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/MediaRecorder/res/values/base-strings.xml b/samples/browseable/MediaRecorder/res/values/base-strings.xml
index 3e2b6ba..91a0b44 100644
--- a/samples/browseable/MediaRecorder/res/values/base-strings.xml
+++ b/samples/browseable/MediaRecorder/res/values/base-strings.xml
@@ -19,11 +19,11 @@
     <string name="intro_message">
         <![CDATA[
         
-            
-            This sample uses the camera/camcorder as the A/V source for the MediaRecorder API.
-            A TextureView is used as the camera preview which limits the code to API 14+. This
-            can be easily replaced with a SurfaceView to run on older devices.
-            
+
+This sample uses the camera/camcorder as the A/V source for the MediaRecorder API.
+A TextureView is used as the camera preview which limits the code to API 14+. This
+can be easily replaced with a SurfaceView to run on older devices.
+
         
         ]]>
     </string>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/MediaRouter/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/MediaRouter/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/MediaRouter/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/MediaRouter/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/MediaRouter/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/MediaRouter/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/MediaRouter/res/values-v21/template-styles.xml b/samples/browseable/MediaRouter/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/MediaRouter/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/MessagingService/res/drawable-hdpi/ic_launcher.png b/samples/browseable/MessagingService/res/drawable-hdpi/ic_launcher.png
index 06d85f1..506cbc5 100644
--- a/samples/browseable/MessagingService/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/MessagingService/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MessagingService/res/drawable-mdpi/ic_launcher.png b/samples/browseable/MessagingService/res/drawable-mdpi/ic_launcher.png
index 4e1cc86..6296a03 100644
--- a/samples/browseable/MessagingService/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/MessagingService/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MessagingService/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/MessagingService/res/drawable-xhdpi/ic_launcher.png
index 92f1e2d..52d3c5e 100644
--- a/samples/browseable/MessagingService/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/MessagingService/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/MessagingService/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/MessagingService/res/drawable-xxhdpi/ic_launcher.png
index 2476cbd..444fb39 100644
--- a/samples/browseable/MessagingService/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/MessagingService/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/NavigationDrawer/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/NavigationDrawer/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/NavigationDrawer/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/NavigationDrawer/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/NavigationDrawer/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/NavigationDrawer/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/NavigationDrawer/res/values-v21/template-styles.xml b/samples/browseable/NavigationDrawer/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/NavigationDrawer/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/NetworkConnect/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/NetworkConnect/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/NetworkConnect/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/NetworkConnect/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/NetworkConnect/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/NetworkConnect/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/NetworkConnect/res/values-v21/template-styles.xml b/samples/browseable/NetworkConnect/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/NetworkConnect/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Notifications/Application/AndroidManifest.xml b/samples/browseable/Notifications/Application/AndroidManifest.xml
index a0ed729..3f1274d 100644
--- a/samples/browseable/Notifications/Application/AndroidManifest.xml
+++ b/samples/browseable/Notifications/Application/AndroidManifest.xml
@@ -17,9 +17,10 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.android.support.wearable.notifications" >
 
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-permission android:name="android.permission.VIBRATE" />
 
     <application
             android:allowBackup="true"
diff --git a/samples/browseable/Notifications/Application/res/drawable-nodpi/qr_code.png b/samples/browseable/Notifications/Application/res/drawable-nodpi/qr_code.png
new file mode 100644
index 0000000..0dcd7b7
--- /dev/null
+++ b/samples/browseable/Notifications/Application/res/drawable-nodpi/qr_code.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Notifications/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Notifications/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Notifications/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Notifications/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Notifications/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Notifications/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Notifications/Application/res/values-v21/template-styles.xml b/samples/browseable/Notifications/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Notifications/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Notifications/Application/res/values/base-strings.xml b/samples/browseable/Notifications/Application/res/values/base-strings.xml
index 9abe486..55d83b0 100644
--- a/samples/browseable/Notifications/Application/res/values/base-strings.xml
+++ b/samples/browseable/Notifications/Application/res/values/base-strings.xml
@@ -15,7 +15,7 @@
  limitations under the License.
 -->
 <resources>
-    <string name="app_name">Notifications</string>
+    <string name="app_name">Wearable Notifications</string>
     <string name="intro_message">
         <![CDATA[
         
diff --git a/samples/browseable/Notifications/Application/res/values/colors.xml b/samples/browseable/Notifications/Application/res/values/colors.xml
index 9464085..fbcf956 100644
--- a/samples/browseable/Notifications/Application/res/values/colors.xml
+++ b/samples/browseable/Notifications/Application/res/values/colors.xml
@@ -15,5 +15,5 @@
 -->
 
 <resources>
-    <color name="divider_text">@android:color/holo_blue_bright</color>
+    <color name="divider_text">@android:color/holo_blue_dark</color>
 </resources>
diff --git a/samples/browseable/Notifications/Application/res/values/strings.xml b/samples/browseable/Notifications/Application/res/values/strings.xml
index 52f0f10..ffcb9f3 100644
--- a/samples/browseable/Notifications/Application/res/values/strings.xml
+++ b/samples/browseable/Notifications/Application/res/values/strings.xml
@@ -38,6 +38,7 @@
     <string name="content_icon_example">Content icon example</string>
     <string name="multiple_page_example">Multiple page example</string>
     <string name="bundle_example">Bundle example</string>
+    <string name="barcode_example">Barcode example</string>
 
     <string name="min_priority">Min priority</string>
     <string name="low_priority">Low priority</string>
@@ -161,6 +162,9 @@
     <string name="big_picture_style_example_title">Big picture style example title</string>
     <string name="big_picture_style_example_summary_text">Big picture style example summary</string>
 
+    <string name="barcode_content_title">Barcode example</string>
+    <string name="barcode_content_text">Swipe to view</string>
+
     <string name="second_page_content_title">Second page title</string>
     <string name="second_page_content_text">Second page text</string>
 
diff --git a/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/MainActivity.java b/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/MainActivity.java
index c2be395..4ade3ed 100644
--- a/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/MainActivity.java
+++ b/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/MainActivity.java
@@ -170,12 +170,12 @@
     }
 
     private void updateTextEditors(NotificationPreset preset) {
+        mTitleEditText.setText(getString(preset.titleResId));
+        mTextEditText.setText(getString(preset.textResId));
         if (preset == NotificationPresets.BASIC) {
             findViewById(R.id.title_edit_field).setVisibility(View.VISIBLE);
-            mTitleEditText.setText(getString(preset.titleResId));
             mTitleEditText.addTextChangedListener(mTextChangedListener);
             findViewById(R.id.text_edit_field).setVisibility(View.VISIBLE);
-            mTextEditText.setText(getString(preset.textResId));
             mTextEditText.addTextChangedListener(mTextChangedListener);
         } else {
             findViewById(R.id.title_edit_field).setVisibility(View.GONE);
diff --git a/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/NotificationPresets.java b/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/NotificationPresets.java
index e175d11..641b861 100644
--- a/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/NotificationPresets.java
+++ b/samples/browseable/Notifications/Application/src/com.example.android.support.wearable.notifications/NotificationPresets.java
@@ -50,6 +50,7 @@
     public static final NotificationPreset CONTENT_ICON = new ContentIconNotificationPreset();
     public static final NotificationPreset MULTIPLE_PAGE = new MultiplePageNotificationPreset();
     public static final NotificationPreset BUNDLE = new NotificationBundlePreset();
+    public static final NotificationPreset BARCODE = new NotificationBarcodePreset();
 
     public static final NotificationPreset[] PRESETS = new NotificationPreset[] {
             BASIC,
@@ -62,7 +63,8 @@
             CONTENT_ACTION,
             CONTENT_ICON,
             MULTIPLE_PAGE,
-            BUNDLE
+            BUNDLE,
+            BARCODE
     };
 
     private static NotificationCompat.Builder applyBasicOptions(Context context,
@@ -476,4 +478,33 @@
                     childBuilder2.build() };
         }
     }
+
+    private static class NotificationBarcodePreset extends NotificationPreset {
+        public NotificationBarcodePreset() {
+            super(R.string.barcode_example, R.string.barcode_content_title,
+                    R.string.barcode_content_text);
+        }
+
+        @Override
+        public Notification[] buildNotifications(Context context, BuildOptions options) {
+            NotificationCompat.Builder secondPageBuilder = new NotificationCompat.Builder(context)
+                    .extend(new NotificationCompat.WearableExtender()
+                            .setHintShowBackgroundOnly(true)
+                            .setBackground(BitmapFactory.decodeResource(context.getResources(),
+                                    R.drawable.qr_code))
+                            .setHintAvoidBackgroundClipping(true)
+                            .setHintScreenTimeout(
+                                    NotificationCompat.WearableExtender.SCREEN_TIMEOUT_LONG));
+
+            NotificationCompat.Builder firstPageBuilder = new NotificationCompat.Builder(context);
+            NotificationCompat.WearableExtender firstPageWearableOptions =
+                    new NotificationCompat.WearableExtender();
+            applyBasicOptions(context, firstPageBuilder, firstPageWearableOptions, options);
+
+            firstPageBuilder.extend(
+                    firstPageWearableOptions.addPage(secondPageBuilder.build()));
+
+            return new Notification[]{ firstPageBuilder.build() };
+        }
+    }
 }
diff --git a/samples/browseable/Notifications/Wearable/AndroidManifest.xml b/samples/browseable/Notifications/Wearable/AndroidManifest.xml
index 57cd7c4..34a29ff 100644
--- a/samples/browseable/Notifications/Wearable/AndroidManifest.xml
+++ b/samples/browseable/Notifications/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.support.wearable.notifications" >
 
     <uses-sdk android:minSdkVersion="20"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/Notifications/Wearable/src/com.example.android.support.wearable.notifications/WearableListItemLayout.java b/samples/browseable/Notifications/Wearable/src/com.example.android.support.wearable.notifications/WearableListItemLayout.java
index 773dfe4..4ec554c 100644
--- a/samples/browseable/Notifications/Wearable/src/com.example.android.support.wearable.notifications/WearableListItemLayout.java
+++ b/samples/browseable/Notifications/Wearable/src/com.example.android.support.wearable.notifications/WearableListItemLayout.java
@@ -24,7 +24,8 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-public class WearableListItemLayout extends LinearLayout implements WearableListView.Item {
+public class WearableListItemLayout extends LinearLayout
+        implements WearableListView.OnCenterProximityListener {
 
     private final float mFadedTextAlpha;
     private final int mFadedCircleColor;
@@ -56,35 +57,13 @@
     }
 
     @Override
-    public float getProximityMinValue() {
-        return 1f;
-    }
-
-    @Override
-    public float getProximityMaxValue() {
-        return 1.6f;
-    }
-
-    @Override
-    public float getCurrentProximityValue() {
-        return mScale;
-    }
-
-    @Override
-    public void setScalingAnimatorValue(float scale) {
-        mScale = scale;
-        mCircle.setScaleX(scale);
-        mCircle.setScaleY(scale);
-    }
-
-    @Override
-    public void onScaleUpStart() {
+    public void onCenterPosition(boolean animate) {
         mName.setAlpha(1f);
         ((GradientDrawable) mCircle.getDrawable()).setColor(mChosenCircleColor);
     }
 
     @Override
-    public void onScaleDownStart() {
+    public void onNonCenterPosition(boolean animate) {
         ((GradientDrawable) mCircle.getDrawable()).setColor(mFadedCircleColor);
         mName.setAlpha(mFadedTextAlpha);
     }
diff --git a/samples/browseable/Notifications/_index.jd b/samples/browseable/Notifications/_index.jd
index 7fa5d23..ba28233 100644
--- a/samples/browseable/Notifications/_index.jd
+++ b/samples/browseable/Notifications/_index.jd
@@ -1,4 +1,4 @@
-page.tags="Notifications"
+page.tags="Wearable Notifications"
 sample.group=Wearable
 @jd:body
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/PdfRendererBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/PdfRendererBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/PdfRendererBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/PdfRendererBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/PdfRendererBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/PdfRendererBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/PdfRendererBasic/res/values-v21/template-styles.xml b/samples/browseable/PdfRendererBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/PdfRendererBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Quiz/Application/AndroidManifest.xml b/samples/browseable/Quiz/Application/AndroidManifest.xml
index ce72135..55b666f 100644
--- a/samples/browseable/Quiz/Application/AndroidManifest.xml
+++ b/samples/browseable/Quiz/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
         package="com.example.android.wearable.quiz" >
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application
             android:allowBackup="true"
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Quiz/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Quiz/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Quiz/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Quiz/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Quiz/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Quiz/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Quiz/Application/res/values-v21/template-styles.xml b/samples/browseable/Quiz/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Quiz/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Quiz/Wearable/AndroidManifest.xml b/samples/browseable/Quiz/Wearable/AndroidManifest.xml
index fd20def..fbc7492 100644
--- a/samples/browseable/Quiz/Wearable/AndroidManifest.xml
+++ b/samples/browseable/Quiz/Wearable/AndroidManifest.xml
@@ -19,7 +19,7 @@
 
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/RecipeAssistant/Application/AndroidManifest.xml b/samples/browseable/RecipeAssistant/Application/AndroidManifest.xml
index 3ddff20..1786d27 100644
--- a/samples/browseable/RecipeAssistant/Application/AndroidManifest.xml
+++ b/samples/browseable/RecipeAssistant/Application/AndroidManifest.xml
@@ -17,8 +17,8 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.wearable.recipeassistant" >
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application
         android:allowBackup="true"
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RecipeAssistant/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RecipeAssistant/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RecipeAssistant/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RecipeAssistant/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RecipeAssistant/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RecipeAssistant/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/RecipeAssistant/Application/res/values-v21/template-styles.xml b/samples/browseable/RecipeAssistant/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/RecipeAssistant/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/RecipeAssistant/Shared/res/values/strings.xml b/samples/browseable/RecipeAssistant/Shared/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/samples/browseable/RecipeAssistant/Shared/res/values/strings.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-<resources>
-    <string name="app_name">Shared</string>
-</resources>
diff --git a/samples/browseable/RecyclerView/_index.jd b/samples/browseable/RecyclerView/_index.jd
index e4e2534..31b0fac 100644
--- a/samples/browseable/RecyclerView/_index.jd
+++ b/samples/browseable/RecyclerView/_index.jd
@@ -4,6 +4,8 @@
 
 <p>
             
-            Demonstration of using RecyclerView with a LayoutManager to create a vertical ListView.
+                Demonstration of using RecyclerView with a LinearLayoutManager and GridLayoutManager
+                to create a vertical list. Tap \"SHOW LOG\" to view elements as they are bound to
+                their ViewHolder. The log also displays elements that you tap.
             
         </p>
diff --git a/samples/browseable/RecyclerView/res/layout/recycler_view_frag.xml b/samples/browseable/RecyclerView/res/layout/recycler_view_frag.xml
index 6682468..dda99ce 100644
--- a/samples/browseable/RecyclerView/res/layout/recycler_view_frag.xml
+++ b/samples/browseable/RecyclerView/res/layout/recycler_view_frag.xml
@@ -15,14 +15,28 @@
  limitations under the License.
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:orientation="vertical">
+    <RadioGroup
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="center_horizontal"
+        android:orientation="horizontal"
+        android:checkedButton="@+id/linear_layout_rb">
+        <RadioButton android:id="@+id/linear_layout_rb"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/linear_layout_manager"/>
+        <RadioButton android:id="@+id/grid_layout_rb"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="@string/grid_layout_manager"/>
+    </RadioGroup>
 
     <android.support.v7.widget.RecyclerView
         android:id="@+id/recyclerView"
         android:layout_width="match_parent"
-        android:layout_height="match_parent" />
-
-</FrameLayout>
+        android:layout_height="match_parent"/>
+</LinearLayout>
diff --git a/samples/browseable/RecyclerView/res/layout/text_row_item.xml b/samples/browseable/RecyclerView/res/layout/text_row_item.xml
index d552e0e..9b94684 100644
--- a/samples/browseable/RecyclerView/res/layout/text_row_item.xml
+++ b/samples/browseable/RecyclerView/res/layout/text_row_item.xml
@@ -15,17 +15,16 @@
  limitations under the License.
 -->
 
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-              android:orientation="vertical"
-              android:layout_margin="@dimen/margin_small"
-              android:layout_width="wrap_content"
-              android:layout_height="wrap_content">
-
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="@dimen/list_item_height"
+    android:layout_marginLeft="@dimen/margin_medium"
+    android:layout_marginRight="@dimen/margin_medium"
+    android:gravity="center_vertical">
 
     <TextView
+        android:id="@+id/textView"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="@string/element_text"
-        android:id="@+id/textView"
-        android:layout_gravity="center_horizontal"/>
-</LinearLayout>
\ No newline at end of file
+        android:text="@string/element_text"/>
+</FrameLayout>
\ No newline at end of file
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RecyclerView/res/values-v21/base-colors.xml
similarity index 71%
rename from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
rename to samples/browseable/RecyclerView/res/values-v21/base-colors.xml
index dfbb092..16853b1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RecyclerView/res/values-v21/base-colors.xml
@@ -14,12 +14,9 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+        <color name="colorPrimary">#00BCD4</color>
+        <color name="colorPrimaryDark">#00838F</color>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/RecipeAssistant/Shared/AndroidManifest.xml b/samples/browseable/RecyclerView/res/values-v21/base-template-styles.xml
similarity index 68%
rename from samples/browseable/RecipeAssistant/Shared/AndroidManifest.xml
rename to samples/browseable/RecyclerView/res/values-v21/base-template-styles.xml
index 00c8693..c2b4c8e 100644
--- a/samples/browseable/RecipeAssistant/Shared/AndroidManifest.xml
+++ b/samples/browseable/RecyclerView/res/values-v21/base-template-styles.xml
@@ -14,12 +14,12 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.recipeassistant.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+            <item name="android:colorPrimary">@color/colorPrimary</item>
+            <item name="android:colorPrimaryDark">@color/colorPrimaryDark</item>
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/RecyclerView/res/values-v21/template-styles.xml b/samples/browseable/RecyclerView/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/RecyclerView/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/RecyclerView/res/values/base-strings.xml b/samples/browseable/RecyclerView/res/values/base-strings.xml
index b6efd8e..7580f12 100644
--- a/samples/browseable/RecyclerView/res/values/base-strings.xml
+++ b/samples/browseable/RecyclerView/res/values/base-strings.xml
@@ -20,7 +20,9 @@
         <![CDATA[
         
             
-            Demonstration of using RecyclerView with a LayoutManager to create a vertical ListView.
+                Demonstration of using RecyclerView with a LinearLayoutManager and GridLayoutManager
+                to create a vertical list. Tap \"SHOW LOG\" to view elements as they are bound to
+                their ViewHolder. The log also displays elements that you tap.
             
         
         ]]>
diff --git a/samples/browseable/RecipeAssistant/Shared/AndroidManifest.xml b/samples/browseable/RecyclerView/res/values/dimens.xml
similarity index 61%
copy from samples/browseable/RecipeAssistant/Shared/AndroidManifest.xml
copy to samples/browseable/RecyclerView/res/values/dimens.xml
index 00c8693..5af7e9e 100644
--- a/samples/browseable/RecipeAssistant/Shared/AndroidManifest.xml
+++ b/samples/browseable/RecyclerView/res/values/dimens.xml
@@ -1,6 +1,6 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!--
- Copyright 2013 The Android Open Source Project
+ Copyright 2014 The Android Open Source Project
 
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
@@ -15,11 +15,6 @@
  limitations under the License.
 -->
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.recipeassistant.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+<resources>
+    <dimen name="list_item_height">72dp</dimen>
+</resources>
\ No newline at end of file
diff --git a/samples/browseable/RecyclerView/res/values/strings.xml b/samples/browseable/RecyclerView/res/values/strings.xml
index 179529c..642e022 100644
--- a/samples/browseable/RecyclerView/res/values/strings.xml
+++ b/samples/browseable/RecyclerView/res/values/strings.xml
@@ -17,4 +17,6 @@
 
 <resources>
     <string name="element_text">Element</string>
+    <string name="grid_layout_manager">Grid Layout Manager</string>
+    <string name="linear_layout_manager">Linear Layout Manager</string>
 </resources>
\ No newline at end of file
diff --git a/samples/browseable/RecyclerView/src/com.example.android.recyclerview/CustomAdapter.java b/samples/browseable/RecyclerView/src/com.example.android.recyclerview/CustomAdapter.java
index f8e3bae..40f9375 100644
--- a/samples/browseable/RecyclerView/src/com.example.android.recyclerview/CustomAdapter.java
+++ b/samples/browseable/RecyclerView/src/com.example.android.recyclerview/CustomAdapter.java
@@ -34,21 +34,29 @@
 
     // BEGIN_INCLUDE(recyclerViewSampleViewHolder)
     /**
-     * Provide a reference to the type of views that you are using (custom viewholder)
+     * Provide a reference to the type of views that you are using (custom ViewHolder)
      */
     public static class ViewHolder extends RecyclerView.ViewHolder {
-        private final TextView mTextView;
+        private final TextView textView;
 
         public ViewHolder(View v) {
             super(v);
-            mTextView = (TextView) v.findViewById(R.id.textView);
+            // Define click listener for the ViewHolder's View.
+            v.setOnClickListener(new View.OnClickListener() {
+                @Override
+                public void onClick(View v) {
+                    Log.d(TAG, "Element " + getPosition() + " clicked.");
+                }
+            });
+            textView = (TextView) v.findViewById(R.id.textView);
         }
 
-        public TextView getmTextView() {
-            return mTextView;
+        public TextView getTextView() {
+            return textView;
         }
     }
     // END_INCLUDE(recyclerViewSampleViewHolder)
+
     /**
      * Initialize the dataset of the Adapter.
      *
@@ -61,25 +69,24 @@
     // BEGIN_INCLUDE(recyclerViewOnCreateViewHolder)
     // Create new views (invoked by the layout manager)
     @Override
-    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int position) {
+    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
         // Create a new view.
         View v = LayoutInflater.from(viewGroup.getContext())
                 .inflate(R.layout.text_row_item, viewGroup, false);
 
-        ViewHolder vh = new ViewHolder(v);
-        return vh;
+        return new ViewHolder(v);
     }
     // END_INCLUDE(recyclerViewOnCreateViewHolder)
 
     // BEGIN_INCLUDE(recyclerViewOnBindViewHolder)
     // Replace the contents of a view (invoked by the layout manager)
     @Override
-    public void onBindViewHolder(ViewHolder viewHolder, int position) {
+    public void onBindViewHolder(ViewHolder viewHolder, final int position) {
         Log.d(TAG, "Element " + position + " set.");
 
         // Get element from your dataset at this position and replace the contents of the view
         // with that element
-        viewHolder.getmTextView().setText(mDataSet[position]);
+        viewHolder.getTextView().setText(mDataSet[position]);
     }
     // END_INCLUDE(recyclerViewOnBindViewHolder)
 
diff --git a/samples/browseable/RecyclerView/src/com.example.android.recyclerview/RecyclerViewFragment.java b/samples/browseable/RecyclerView/src/com.example.android.recyclerview/RecyclerViewFragment.java
index 4f4a596..019657f 100644
--- a/samples/browseable/RecyclerView/src/com.example.android.recyclerview/RecyclerViewFragment.java
+++ b/samples/browseable/RecyclerView/src/com.example.android.recyclerview/RecyclerViewFragment.java
@@ -18,21 +18,37 @@
 
 import android.os.Bundle;
 import android.support.v4.app.Fragment;
+import android.support.v7.widget.GridLayoutManager;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.RadioButton;
 
 /**
- * Demonstrates the use of RecyclerView with a LinearLayoutManager.
+ * Demonstrates the use of {@link RecyclerView} with a {@link LinearLayoutManager} and a
+ * {@link GridLayoutManager}.
  */
 public class RecyclerViewFragment extends Fragment {
 
     private static final String TAG = "RecyclerViewFragment";
+    private static final String KEY_LAYOUT_MANAGER = "layoutManager";
+    private static final int SPAN_COUNT = 2;
+    private static final int DATASET_COUNT = 60;
+
+    private enum LayoutManagerType {
+        GRID_LAYOUT_MANAGER,
+        LINEAR_LAYOUT_MANAGER
+    }
+
+    protected LayoutManagerType mCurrentLayoutManagerType;
+
+    protected RadioButton mLinearLayoutRadioButton;
+    protected RadioButton mGridLayoutRadioButton;
 
     protected RecyclerView mRecyclerView;
-    protected RecyclerView.Adapter mAdapter;
+    protected CustomAdapter mAdapter;
     protected RecyclerView.LayoutManager mLayoutManager;
     protected String[] mDataset;
 
@@ -58,23 +74,86 @@
         // to the way ListView would layout elements. The RecyclerView.LayoutManager defines how
         // elements are laid out.
         mLayoutManager = new LinearLayoutManager(getActivity());
-        mRecyclerView.setLayoutManager(mLayoutManager);
+
+        mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
+
+        if (savedInstanceState != null) {
+            // Restore saved layout manager type.
+            mCurrentLayoutManagerType = (LayoutManagerType) savedInstanceState
+                    .getSerializable(LAYOUT_MANAGER_KEY);
+        }
+        setRecyclerViewLayoutManager(mCurrentLayoutManagerType);
 
         mAdapter = new CustomAdapter(mDataset);
         // Set CustomAdapter as the adapter for RecyclerView.
         mRecyclerView.setAdapter(mAdapter);
         // END_INCLUDE(initializeRecyclerView)
 
+        mLinearLayoutRadioButton = (RadioButton) rootView.findViewById(R.id.linear_layout_rb);
+        mLinearLayoutRadioButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                setRecyclerViewLayoutManager(LayoutManagerType.LINEAR_LAYOUT_MANAGER);
+            }
+        });
+
+        mGridLayoutRadioButton = (RadioButton) rootView.findViewById(R.id.grid_layout_rb);
+        mGridLayoutRadioButton.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                setRecyclerViewLayoutManager(LayoutManagerType.GRID_LAYOUT_MANAGER);
+            }
+        });
+
         return rootView;
     }
 
     /**
+     * Set RecyclerView's LayoutManager to the one given.
+     *
+     * @param layoutManagerType Type of layout manager to switch to.
+     */
+    public void setRecyclerViewLayoutManager(LayoutManagerType layoutManagerType) {
+        int scrollPosition = 0;
+
+        // If a layout manager has already been set, get current scroll position.
+        if (mRecyclerView.getLayoutManager() != null) {
+            scrollPosition = ((LinearLayoutManager) mRecyclerView.getLayoutManager())
+                    .findFirstCompletelyVisibleItemPosition();
+        }
+
+        switch (layoutManagerType) {
+            case GRID_LAYOUT_MANAGER:
+                mLayoutManager = new GridLayoutManager(getActivity(), SPAN_COUNT);
+                mCurrentLayoutManagerType = LayoutManagerType.GRID_LAYOUT_MANAGER;
+                break;
+            case LINEAR_LAYOUT_MANAGER:
+                mLayoutManager = new LinearLayoutManager(getActivity());
+                mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
+                break;
+            default:
+                mLayoutManager = new LinearLayoutManager(getActivity());
+                mCurrentLayoutManagerType = LayoutManagerType.LINEAR_LAYOUT_MANAGER;
+        }
+
+        mRecyclerView.setLayoutManager(mLayoutManager);
+        mRecyclerView.scrollToPosition(scrollPosition);
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle savedInstanceState) {
+        // Save currently selected layout manager.
+        savedInstanceState.putSerializable(LAYOUT_MANAGER_KEY, mCurrentLayoutManagerType);
+        super.onSaveInstanceState(savedInstanceState);
+    }
+
+    /**
      * Generates Strings for RecyclerView's adapter. This data would usually come
      * from a local content provider or remote server.
      */
     private void initDataset() {
-        mDataset = new String[60];
-        for (int i=0; i < 60; i++) {
+        mDataset = new String[DATASET_COUNT];
+        for (int i = 0; i < DATASET_COUNT; i++) {
             mDataset[i] = "This is element #" + i;
         }
     }
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RenderScriptIntrinsic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RenderScriptIntrinsic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RenderScriptIntrinsic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RenderScriptIntrinsic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RenderScriptIntrinsic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RenderScriptIntrinsic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/RenderScriptIntrinsic/res/values-v21/template-styles.xml b/samples/browseable/RenderScriptIntrinsic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/RenderScriptIntrinsic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RepeatingAlarm/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RepeatingAlarm/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RepeatingAlarm/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RepeatingAlarm/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RepeatingAlarm/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RepeatingAlarm/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/RepeatingAlarm/res/values-v21/template-styles.xml b/samples/browseable/RepeatingAlarm/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/RepeatingAlarm/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RevealEffectBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RevealEffectBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RevealEffectBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/RevealEffectBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/RevealEffectBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/RevealEffectBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/RevealEffectBasic/res/values-v21/template-styles.xml b/samples/browseable/RevealEffectBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/RevealEffectBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/SkeletonWearableApp/Application/AndroidManifest.xml b/samples/browseable/SkeletonWearableApp/Application/AndroidManifest.xml
index 0cbc037..23497ca 100644
--- a/samples/browseable/SkeletonWearableApp/Application/AndroidManifest.xml
+++ b/samples/browseable/SkeletonWearableApp/Application/AndroidManifest.xml
@@ -18,10 +18,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.google.wearable.app">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
         android:label="@string/app_name">
     </application>
 
diff --git a/samples/browseable/SkeletonWearableApp/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/SkeletonWearableApp/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/SkeletonWearableApp/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SkeletonWearableApp/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/SkeletonWearableApp/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/SkeletonWearableApp/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SkeletonWearableApp/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/SkeletonWearableApp/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/SkeletonWearableApp/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SkeletonWearableApp/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/SkeletonWearableApp/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/SkeletonWearableApp/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SkeletonWearableApp/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SkeletonWearableApp/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SkeletonWearableApp/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SkeletonWearableApp/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SkeletonWearableApp/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SkeletonWearableApp/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SkeletonWearableApp/Application/res/values-v21/template-styles.xml b/samples/browseable/SkeletonWearableApp/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SkeletonWearableApp/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/SkeletonWearableApp/Wearable/AndroidManifest.xml b/samples/browseable/SkeletonWearableApp/Wearable/AndroidManifest.xml
index bf1c1a4..f99d785 100644
--- a/samples/browseable/SkeletonWearableApp/Wearable/AndroidManifest.xml
+++ b/samples/browseable/SkeletonWearableApp/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.google.wearable.app" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/SkeletonWearableApp/Wearable/src/com.example.android.google.wearable.app/GridExampleActivity.java b/samples/browseable/SkeletonWearableApp/Wearable/src/com.example.android.google.wearable.app/GridExampleActivity.java
index 0a88c04..80af2a6 100644
--- a/samples/browseable/SkeletonWearableApp/Wearable/src/com.example.android.google.wearable.app/GridExampleActivity.java
+++ b/samples/browseable/SkeletonWearableApp/Wearable/src/com.example.android.google.wearable.app/GridExampleActivity.java
@@ -19,17 +19,21 @@
 import android.app.Activity;
 import android.app.Fragment;
 import android.app.FragmentManager;
+import android.content.Context;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
 import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.Point;
 import android.graphics.Typeface;
+import android.graphics.Paint.Align;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.support.wearable.view.CardFragment;
 import android.support.wearable.view.FragmentGridPagerAdapter;
 import android.support.wearable.view.GridViewPager;
-import android.support.wearable.view.ImageReference;
+
 import java.util.HashMap;
 import java.util.Map;
 
@@ -46,16 +50,18 @@
         super.onCreate(savedInstanceState);
         setContentView(R.layout.grid_activity);
         mPager = (GridViewPager) findViewById(R.id.fragment_container);
-        mAdapter = new MainAdapter(getFragmentManager());
+        mAdapter = new MainAdapter(this, getFragmentManager());
         mPager.setAdapter(mAdapter);
 
     }
 
     private static class MainAdapter extends FragmentGridPagerAdapter{
-        Map<Point, ImageReference> mBackgrounds = new HashMap<Point, ImageReference>();
+        Map<Point, Drawable> mBackgrounds = new HashMap<Point, Drawable>();
+        private Context mContext;
 
-        public MainAdapter(FragmentManager fm) {
+        public MainAdapter(Context ctx, FragmentManager fm) {
             super(fm);
+            mContext = ctx;
         }
 
         @Override
@@ -74,10 +80,10 @@
         }
 
         @Override
-        public ImageReference getBackground(int row, int column) {
+        public Drawable getBackgroundForPage(int row, int column) {
             Point pt = new Point(column, row);
-            ImageReference ref = mBackgrounds.get(pt);
-            if (ref == null) {
+            Drawable drawable = mBackgrounds.get(pt);
+            if (drawable == null) {
                 Bitmap bm = Bitmap.createBitmap(200, 200, Bitmap.Config.ARGB_8888);
                 Canvas c = new Canvas(bm);
                 Paint p = new Paint();
@@ -87,11 +93,12 @@
                 p.setTypeface(Typeface.DEFAULT);
                 p.setTextSize(64);
                 p.setColor(Color.LTGRAY);
-                c.drawText(column+ "-" + row, 20, 100, p);
-                ref = ImageReference.forBitmap(bm);
-                mBackgrounds.put(pt, ref);
+                p.setTextAlign(Align.CENTER);
+                c.drawText(column+ "-" + row, 100, 100, p);
+                drawable = new BitmapDrawable(mContext.getResources(), bm);
+                mBackgrounds.put(pt, drawable);
             }
-            return ref;
+            return drawable;
         }
     }
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SlidingTabsBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SlidingTabsBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SlidingTabsBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SlidingTabsBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SlidingTabsBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SlidingTabsBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SlidingTabsBasic/res/values-v21/template-styles.xml b/samples/browseable/SlidingTabsBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SlidingTabsBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SlidingTabsColors/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SlidingTabsColors/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SlidingTabsColors/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SlidingTabsColors/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SlidingTabsColors/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SlidingTabsColors/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SlidingTabsColors/res/values-v21/template-styles.xml b/samples/browseable/SlidingTabsColors/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SlidingTabsColors/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/SpeedTracker/Application/AndroidManifest.xml b/samples/browseable/SpeedTracker/Application/AndroidManifest.xml
index 97db732..44284d4 100644
--- a/samples/browseable/SpeedTracker/Application/AndroidManifest.xml
+++ b/samples/browseable/SpeedTracker/Application/AndroidManifest.xml
@@ -7,12 +7,13 @@
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-
+    
+    <uses-feature android:name="android.hardware.location.gps" android:required="true" />
     <uses-feature
         android:glEsVersion="0x00020000" android:required="true"/>
     <uses-sdk
         android:minSdkVersion="18"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <application
         android:name=".PhoneApplication"
diff --git a/samples/browseable/SpeedTracker/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Application/res/drawable-hdpi/ic_launcher.png
index 2275b45..2476b11 100644
--- a/samples/browseable/SpeedTracker/Application/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Application/res/drawable-mdpi/ic_launcher.png
index 25015af..a102b79 100644
--- a/samples/browseable/SpeedTracker/Application/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Application/res/drawable-xhdpi/ic_launcher.png
index 8aee870..8ad19e8 100644
--- a/samples/browseable/SpeedTracker/Application/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Application/res/drawable-xxhdpi/ic_launcher.png
index 7008a2f..9c5429f 100644
--- a/samples/browseable/SpeedTracker/Application/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Application/res/drawable-xxxhdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Application/res/drawable-xxxhdpi/ic_launcher.png
index c31ab73..b2a49f8 100644
--- a/samples/browseable/SpeedTracker/Application/res/drawable-xxxhdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Application/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SpeedTracker/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SpeedTracker/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SpeedTracker/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SpeedTracker/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SpeedTracker/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SpeedTracker/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SpeedTracker/Application/res/values/base-strings.xml b/samples/browseable/SpeedTracker/Application/res/values/base-strings.xml
index 55a45f3..0d22a87 100644
--- a/samples/browseable/SpeedTracker/Application/res/values/base-strings.xml
+++ b/samples/browseable/SpeedTracker/Application/res/values/base-strings.xml
@@ -20,14 +20,14 @@
         <![CDATA[
         
             
-This sample uses the FusedLocation APIs of GMS on those
-devices that have a hardware GPS built in. In those cases,
-this sample provides a simple screen that shows the current
-speed of the device on the watch. User can set a speed limit
-and if the speed approaches that limit, it changes the color
-to yellow and if it exceeds the limit, it turns red. User
-can also enable recording of coordinates and when it pairs
-back with the phone, this data will be synced with the phone
+This sample uses the FusedLocation APIs of Google Play Services
+on those devices that have a hardware GPS built in. In those
+cases, this sample provides a simple screen that shows the
+current speed of the device on the watch. User can set a speed
+limit and if the speed approaches that limit, it changes the
+color to yellow and if it exceeds the limit, it turns red. User
+can also enable recording of coordinates and when it pairs back
+with the phone, this data will be synced with the phone
 component of the app and user can see a track made of those
 coordinates on a map on the phone.
             
diff --git a/samples/browseable/SpeedTracker/Wearable/AndroidManifest.xml b/samples/browseable/SpeedTracker/Wearable/AndroidManifest.xml
index 750f052..ab19d5e 100644
--- a/samples/browseable/SpeedTracker/Wearable/AndroidManifest.xml
+++ b/samples/browseable/SpeedTracker/Wearable/AndroidManifest.xml
@@ -24,7 +24,7 @@
 
     <uses-sdk
         android:minSdkVersion="20"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <application
         android:allowBackup="true"
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-hdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-hdpi/ic_launcher.png
index 2275b45..2476b11 100644
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-mdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-mdpi/ic_launcher.png
index 25015af..a102b79 100644
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xhdpi/ic_launcher.png
index 8aee870..8ad19e8 100644
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_black_24dp.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_black_24dp.png
deleted file mode 100644
index 0ec94b2..0000000
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_black_24dp.png
+++ /dev/null
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_googblue_24dp.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_googblue_24dp.png
deleted file mode 100644
index 00b3e05..0000000
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_googblue_24dp.png
+++ /dev/null
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png
deleted file mode 100644
index c7e86f9..0000000
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_grey600_24dp.png
+++ /dev/null
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_white_24dp.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_white_24dp.png
deleted file mode 100644
index a57e72f..0000000
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_file_download_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_gps_not_saving_grey600_96dp.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_gps_not_saving_grey600_96dp.png
new file mode 100644
index 0000000..0eff434
--- /dev/null
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_gps_not_saving_grey600_96dp.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_gps_saving_grey600_96dp.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_gps_saving_grey600_96dp.png
new file mode 100644
index 0000000..7b3506b
--- /dev/null
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_gps_saving_grey600_96dp.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_launcher.png
index 7008a2f..9c5429f 100644
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxxhdpi/ic_launcher.png b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxxhdpi/ic_launcher.png
index c31ab73..b2a49f8 100644
--- a/samples/browseable/SpeedTracker/Wearable/res/drawable-xxxhdpi/ic_launcher.png
+++ b/samples/browseable/SpeedTracker/Wearable/res/drawable-xxxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/SpeedTracker/Wearable/res/layout/main_activity.xml b/samples/browseable/SpeedTracker/Wearable/res/layout/main_activity.xml
index 21f809e..a1b9081 100644
--- a/samples/browseable/SpeedTracker/Wearable/res/layout/main_activity.xml
+++ b/samples/browseable/SpeedTracker/Wearable/res/layout/main_activity.xml
@@ -83,7 +83,7 @@
     <ImageView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:src="@drawable/ic_file_download_grey600_24dp"
+        android:src="@drawable/ic_gps_not_saving_grey600_96dp"
         android:id="@+id/saving"
         android:layout_alignParentBottom="true"
         android:layout_alignParentLeft="true"
@@ -98,4 +98,4 @@
         android:layout_alignParentRight="true"
         android:layout_alignBottom="@+id/saving"
         android:layout_marginRight="60dp"/>
-</RelativeLayout>
\ No newline at end of file
+</RelativeLayout>
diff --git a/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/WearableMainActivity.java b/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/WearableMainActivity.java
index 9610f22..f3015bf 100644
--- a/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/WearableMainActivity.java
+++ b/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/WearableMainActivity.java
@@ -336,8 +336,8 @@
 
     private void updateRecordingIcon() {
         mSaveGpsLocation = LocationSettingActivity.getGpsRecordingStatusFromPreferences(this);
-        mSaveImageView.setImageResource(mSaveGpsLocation ? R.drawable.ic_file_download_googblue_24dp
-                : R.drawable.ic_file_download_grey600_24dp);
+        mSaveImageView.setImageResource(mSaveGpsLocation ? R.drawable.ic_gps_saving_grey600_96dp
+                : R.drawable.ic_gps_not_saving_grey600_96dp);
     }
 
     /**
diff --git a/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/ui/SpeedPickerLayout.java b/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/ui/SpeedPickerLayout.java
index 9fd882d..5796c13 100644
--- a/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/ui/SpeedPickerLayout.java
+++ b/samples/browseable/SpeedTracker/Wearable/src/com.example.android.wearable.speedtracker/ui/SpeedPickerLayout.java
@@ -30,13 +30,13 @@
  * A simple extension of the {@link android.widget.LinearLayout} to represent a single item in a
  * {@link android.support.wearable.view.WearableListView}.
  */
-public class SpeedPickerLayout extends LinearLayout implements WearableListView.Item {
+public class SpeedPickerLayout extends LinearLayout
+        implements WearableListView.OnCenterProximityListener {
 
     private final float mFadedTextAlpha;
     private final int mFadedCircleColor;
     private final int mChosenCircleColor;
     private ImageView mCircle;
-    private float mScale;
     private TextView mName;
 
     public SpeedPickerLayout(Context context) {
@@ -64,41 +64,16 @@
         mName = (TextView) findViewById(R.id.name);
     }
 
-    // Provide scaling values for WearableListView animations
     @Override
-    public float getProximityMinValue() {
-        return 1f;
-    }
-
-    @Override
-    public float getProximityMaxValue() {
-        return 1.6f;
-    }
-
-    @Override
-    public float getCurrentProximityValue() {
-        return mScale;
-    }
-
-    // Scale the icon for WearableListView animations
-    @Override
-    public void setScalingAnimatorValue(float scale) {
-        mScale = scale;
-        mCircle.setScaleX(scale);
-        mCircle.setScaleY(scale);
-    }
-
-    // Change color of the icon, remove fading from the text
-    @Override
-    public void onScaleUpStart() {
+    public void onCenterPosition(boolean animate) {
         mName.setAlpha(1f);
         ((GradientDrawable) mCircle.getDrawable()).setColor(mChosenCircleColor);
     }
 
-    // Change the color of the icon, fade the text
     @Override
-    public void onScaleDownStart() {
+    public void onNonCenterPosition(boolean animate) {
         ((GradientDrawable) mCircle.getDrawable()).setColor(mFadedCircleColor);
         mName.setAlpha(mFadedTextAlpha);
+
     }
 }
diff --git a/samples/browseable/SpeedTracker/_index.jd b/samples/browseable/SpeedTracker/_index.jd
index f16522b..298926f 100644
--- a/samples/browseable/SpeedTracker/_index.jd
+++ b/samples/browseable/SpeedTracker/_index.jd
@@ -4,14 +4,14 @@
 
 <p>
             
-This sample uses the FusedLocation APIs of GMS on those
-devices that have a hardware GPS built in. In those cases,
-this sample provides a simple screen that shows the current
-speed of the device on the watch. User can set a speed limit
-and if the speed approaches that limit, it changes the color
-to yellow and if it exceeds the limit, it turns red. User
-can also enable recording of coordinates and when it pairs
-back with the phone, this data will be synced with the phone
+This sample uses the FusedLocation APIs of Google Play Services
+on those devices that have a hardware GPS built in. In those
+cases, this sample provides a simple screen that shows the
+current speed of the device on the watch. User can set a speed
+limit and if the speed approaches that limit, it changes the
+color to yellow and if it exceeds the limit, it turns red. User
+can also enable recording of coordinates and when it pairs back
+with the phone, this data will be synced with the phone
 component of the app and user can see a track made of those
 coordinates on a map on the phone.
             
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/StorageClient/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/StorageClient/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/StorageClient/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/StorageClient/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/StorageClient/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/StorageClient/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/StorageClient/res/values-v21/template-styles.xml b/samples/browseable/StorageClient/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/StorageClient/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/StorageProvider/res/drawable-hdpi/ic_launcher.png b/samples/browseable/StorageProvider/res/drawable-hdpi/ic_launcher.png
old mode 100755
new mode 100644
index c5d6972..8ab9c3c
--- a/samples/browseable/StorageProvider/res/drawable-hdpi/ic_launcher.png
+++ b/samples/browseable/StorageProvider/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/StorageProvider/res/drawable-mdpi/ic_launcher.png b/samples/browseable/StorageProvider/res/drawable-mdpi/ic_launcher.png
old mode 100755
new mode 100644
index 59e6bd9..8a2df94
--- a/samples/browseable/StorageProvider/res/drawable-mdpi/ic_launcher.png
+++ b/samples/browseable/StorageProvider/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/StorageProvider/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/StorageProvider/res/drawable-xhdpi/ic_launcher.png
old mode 100755
new mode 100644
index 5b8b7be..9c196e1
--- a/samples/browseable/StorageProvider/res/drawable-xhdpi/ic_launcher.png
+++ b/samples/browseable/StorageProvider/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/StorageProvider/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/StorageProvider/res/drawable-xxhdpi/ic_launcher.png
old mode 100755
new mode 100644
index 474bbd2..558f901
--- a/samples/browseable/StorageProvider/res/drawable-xxhdpi/ic_launcher.png
+++ b/samples/browseable/StorageProvider/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/StorageProvider/res/ic_launcher.png b/samples/browseable/StorageProvider/res/ic_launcher.png
deleted file mode 100755
index c5d6972..0000000
--- a/samples/browseable/StorageProvider/res/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/StorageProvider/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/StorageProvider/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/StorageProvider/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/StorageProvider/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/StorageProvider/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/StorageProvider/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/StorageProvider/res/values-v21/template-styles.xml b/samples/browseable/StorageProvider/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/StorageProvider/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/template-styles.xml b/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SwipeRefreshLayoutBasic/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SwipeRefreshListFragment/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SwipeRefreshListFragment/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SwipeRefreshListFragment/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SwipeRefreshListFragment/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SwipeRefreshListFragment/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SwipeRefreshListFragment/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SwipeRefreshListFragment/res/values-v21/template-styles.xml b/samples/browseable/SwipeRefreshListFragment/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SwipeRefreshListFragment/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SwipeRefreshMultipleViews/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SwipeRefreshMultipleViews/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/template-styles.xml b/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SwipeRefreshMultipleViews/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/SynchronizedNotifications/Application/AndroidManifest.xml b/samples/browseable/SynchronizedNotifications/Application/AndroidManifest.xml
index eb6a149..1737c7d 100644
--- a/samples/browseable/SynchronizedNotifications/Application/AndroidManifest.xml
+++ b/samples/browseable/SynchronizedNotifications/Application/AndroidManifest.xml
@@ -22,8 +22,8 @@
     android:versionCode="1"
     android:versionName="1.0">
 
-    <uses-sdk android:minSdkVersion="19"
-        android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+        android:targetSdkVersion="21" />
 
     <application android:allowBackup="true"
         android:label="@string/app_name"
diff --git a/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp-land/activity_main.xml b/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp-land/activity_main.xml
index 653454b..8fed5f7 100644
--- a/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp-land/activity_main.xml
+++ b/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp-land/activity_main.xml
@@ -13,25 +13,30 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<LinearLayout
+<ScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="horizontal"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
         android:id="@+id/sample_main_layout">
-    <TextView android:id="@+id/sample_output"
-              style="@style/Widget.SampleMessage"
-              android:background="@android:color/white"
-              android:layout_weight="1"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:text="@string/intro_message"
-              android:layout_margin="16dp" />
-    <fragment
-            android:name="com.example.android.common.logger.LogFragment"
-            android:id="@+id/log_fragment"
-            android:layout_weight="1"
+    <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_margin="16dp" />
-</LinearLayout>
+            android:orientation="vertical">
+        <TextView android:id="@+id/sample_output"
+                  style="@style/Widget.SampleMessage"
+                  android:background="@android:color/white"
+                  android:layout_weight="1"
+                  android:layout_width="match_parent"
+                  android:layout_height="match_parent"
+                  android:text="@string/intro_message"
+                  android:layout_margin="16dp" />
+        <fragment
+                android:name="com.example.android.common.logger.LogFragment"
+                android:id="@+id/log_fragment"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="16dp" />
+    </LinearLayout>
+</ScrollView>
diff --git a/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp/activity_main.xml b/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp/activity_main.xml
index 11cd71b..f811ef7 100644
--- a/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp/activity_main.xml
+++ b/samples/browseable/SynchronizedNotifications/Application/res/layout-sw600dp/activity_main.xml
@@ -13,24 +13,28 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<LinearLayout
+<ScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
         android:id="@+id/sample_main_layout">
-    <TextView android:id="@+id/sample_output"
-              style="@style/Widget.SampleMessage"
-              android:background="@android:color/white"
-              android:layout_width="match_parent"
-              android:layout_height="wrap_content"
-              android:text="@string/intro_message"
-              android:padding="16dp"
-              android:layout_margin="16dp"/>
-    <fragment
-            android:name="com.example.android.common.logger.LogFragment"
-            android:id="@+id/log_fragment"
+    <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="match_parent"
-            android:layout_margin="16dp" />
-</LinearLayout>
+            android:orientation="vertical">
+        <TextView android:id="@+id/sample_output"
+                style="@style/Widget.SampleMessage"
+                android:background="@android:color/white"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content"
+                android:padding="16dp"
+                android:layout_margin="16dp"/>
+        <fragment
+                android:name="com.example.android.common.logger.LogFragment"
+                android:id="@+id/log_fragment"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:layout_margin="16dp" />
+    </LinearLayout>
+</ScrollView>
diff --git a/samples/browseable/SynchronizedNotifications/Application/res/layout/activity_main.xml b/samples/browseable/SynchronizedNotifications/Application/res/layout/activity_main.xml
index 6f41369..d170958 100644
--- a/samples/browseable/SynchronizedNotifications/Application/res/layout/activity_main.xml
+++ b/samples/browseable/SynchronizedNotifications/Application/res/layout/activity_main.xml
@@ -13,27 +13,31 @@
   See the License for the specific language governing permissions and
   limitations under the License.
   -->
-<LinearLayout
+<ScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:orientation="vertical"
-        android:layout_width="fill_parent"
-        android:layout_height="fill_parent"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:fillViewport="true"
         android:id="@+id/sample_main_layout">
-    <TextView android:id="@+id/sample_output"
-              style="@style/Widget.SampleMessage"
-              android:layout_weight="1"
-              android:layout_width="match_parent"
-              android:layout_height="match_parent"
-              android:text="@string/intro_message"
-              android:padding="16dp" />
-    <View
-            android:layout_width="fill_parent"
-            android:layout_height="1dp"
-            android:background="@android:color/darker_gray"/>
-    <fragment
-            android:name="com.example.android.common.logger.LogFragment"
-            android:id="@+id/log_fragment"
-            android:layout_weight="1"
+    <LinearLayout
             android:layout_width="match_parent"
-            android:layout_height="match_parent" />
-</LinearLayout>
+            android:layout_height="match_parent"
+            android:orientation="vertical">
+        <TextView android:id="@+id/sample_output"
+                style="@style/Widget.SampleMessage"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent"
+                android:padding="16dp" />
+        <View
+                android:layout_width="fill_parent"
+                android:layout_height="1dp"
+                android:background="@android:color/darker_gray"/>
+        <fragment
+                android:name="com.example.android.common.logger.LogFragment"
+                android:id="@+id/log_fragment"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" />
+    </LinearLayout>
+</ScrollView>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SynchronizedNotifications/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SynchronizedNotifications/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SynchronizedNotifications/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/SynchronizedNotifications/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/SynchronizedNotifications/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/SynchronizedNotifications/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/SynchronizedNotifications/Application/res/values-v21/template-styles.xml b/samples/browseable/SynchronizedNotifications/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/SynchronizedNotifications/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/SynchronizedNotifications/Application/src/com.example.android.wearable.synchronizednotifications/MainActivity.java b/samples/browseable/SynchronizedNotifications/Application/src/com.example.android.wearable.synchronizednotifications/MainActivity.java
index 9946430..ad1b372 100644
--- a/samples/browseable/SynchronizedNotifications/Application/src/com.example.android.wearable.synchronizednotifications/MainActivity.java
+++ b/samples/browseable/SynchronizedNotifications/Application/src/com.example.android.wearable.synchronizednotifications/MainActivity.java
@@ -19,6 +19,8 @@
 import android.graphics.Color;
 import android.os.Bundle;
 import android.support.v4.app.FragmentTransaction;
+import android.text.Html;
+import android.widget.TextView;
 import android.view.Menu;
 
 import com.example.android.common.activities.SampleActivityBase;
@@ -41,6 +43,8 @@
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
+        TextView sampleOutput = (TextView) findViewById(R.id.sample_output);
+        sampleOutput.setText(Html.fromHtml(getString(R.string.intro_message)));
 
         FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
         SynchronizedNotificationsFragment fragment = new SynchronizedNotificationsFragment();
@@ -75,4 +79,4 @@
 
         Log.i(TAG, "Ready");
     }
-}
\ No newline at end of file
+}
diff --git a/samples/browseable/SynchronizedNotifications/Wearable/AndroidManifest.xml b/samples/browseable/SynchronizedNotifications/Wearable/AndroidManifest.xml
index b8d5e85..f9b0d9c 100644
--- a/samples/browseable/SynchronizedNotifications/Wearable/AndroidManifest.xml
+++ b/samples/browseable/SynchronizedNotifications/Wearable/AndroidManifest.xml
@@ -20,7 +20,7 @@
     package="com.example.android.wearable.synchronizednotifications">
 
     <uses-sdk android:minSdkVersion="20"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/TextLinkify/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/TextLinkify/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/TextLinkify/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/TextLinkify/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/TextLinkify/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/TextLinkify/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/TextLinkify/res/values-v21/template-styles.xml b/samples/browseable/TextLinkify/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/TextLinkify/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/TextSwitcher/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/TextSwitcher/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/TextSwitcher/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/TextSwitcher/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/TextSwitcher/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/TextSwitcher/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/TextSwitcher/res/values-v21/template-styles.xml b/samples/browseable/TextSwitcher/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/TextSwitcher/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Timer/Application/AndroidManifest.xml b/samples/browseable/Timer/Application/AndroidManifest.xml
index bd610eb..2c60ab9 100644
--- a/samples/browseable/Timer/Application/AndroidManifest.xml
+++ b/samples/browseable/Timer/Application/AndroidManifest.xml
@@ -18,10 +18,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.wearable.timer">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
         android:label="@string/app_name">
     </application>
 
diff --git a/samples/browseable/Timer/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/Timer/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/Timer/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/Timer/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/Timer/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/Timer/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/Timer/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/Timer/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/Timer/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/Timer/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/Timer/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/Timer/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Timer/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Timer/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Timer/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/Timer/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/Timer/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/Timer/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/Timer/Application/res/values-v21/template-styles.xml b/samples/browseable/Timer/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/Timer/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/Timer/Wearable/AndroidManifest.xml b/samples/browseable/Timer/Wearable/AndroidManifest.xml
index 9e27947..364fb5a 100644
--- a/samples/browseable/Timer/Wearable/AndroidManifest.xml
+++ b/samples/browseable/Timer/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.wearable.timer" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />
 
diff --git a/samples/browseable/Timer/Wearable/src/com.example.android.wearable.timer/WearableListItemLayout.java b/samples/browseable/Timer/Wearable/src/com.example.android.wearable.timer/WearableListItemLayout.java
index 0bbc587..09591bf 100644
--- a/samples/browseable/Timer/Wearable/src/com.example.android.wearable.timer/WearableListItemLayout.java
+++ b/samples/browseable/Timer/Wearable/src/com.example.android.wearable.timer/WearableListItemLayout.java
@@ -24,12 +24,12 @@
 import android.widget.LinearLayout;
 import android.widget.TextView;
 
-public class WearableListItemLayout extends LinearLayout implements WearableListView.Item {
+public class WearableListItemLayout extends LinearLayout
+        implements WearableListView.OnCenterProximityListener {
     private final float mFadedTextAlpha;
     private final int mFadedCircleColor;
     private final int mChosenCircleColor;
     private ImageView mCircle;
-    private float mScale;
     private TextView mName;
 
     public WearableListItemLayout(Context context) {
@@ -55,35 +55,13 @@
     }
 
     @Override
-    public float getProximityMinValue() {
-        return 1f;
-    }
-
-    @Override
-    public float getProximityMaxValue() {
-        return 1.6f;
-    }
-
-    @Override
-    public float getCurrentProximityValue() {
-        return mScale;
-    }
-
-    @Override
-    public void setScalingAnimatorValue(float scale) {
-        mScale = scale;
-        mCircle.setScaleX(scale);
-        mCircle.setScaleY(scale);
-    }
-
-    @Override
-    public void onScaleUpStart() {
+    public void onCenterPosition(boolean animate) {
         mName.setAlpha(1f);
         ((GradientDrawable) mCircle.getDrawable()).setColor(mChosenCircleColor);
     }
 
     @Override
-    public void onScaleDownStart() {
+    public void onNonCenterPosition(boolean animate) {
         ((GradientDrawable) mCircle.getDrawable()).setColor(mFadedCircleColor);
         mName.setAlpha(mFadedTextAlpha);
     }
diff --git a/samples/browseable/WatchFace/Application/AndroidManifest.xml b/samples/browseable/WatchFace/Application/AndroidManifest.xml
new file mode 100644
index 0000000..732e306
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/AndroidManifest.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.example.android.wearable.watchface" >
+
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
+
+    <!-- Permissions required by the wearable app -->
+    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.READ_CALENDAR" />
+
+    <!-- All intent-filters for config actions must include the categories
+        com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION and
+        android.intent.category.DEFAULT. -->
+    <application
+            android:allowBackup="true"
+            android:icon="@drawable/ic_launcher"
+            android:label="@string/app_name"
+            android:theme="@style/AppTheme" >
+
+        <activity
+                android:name=".AnalogAndCardBoundsWatchFaceConfigActivity"
+                android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="com.example.android.wearable.watchface.CONFIG_ANALOG" />
+                <action android:name="com.example.android.wearable.watchface.CONFIG_CARD_BOUNDS" />
+                <category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity
+                android:name=".DigitalWatchFaceCompanionConfigActivity"
+                android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+                <category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <activity
+                android:name=".TiltWatchFaceConfigActivity"
+                android:label="@string/app_name">
+            <intent-filter>
+                <action android:name="com.example.android.wearable.watchface.CONFIG_TILT" />
+                <category android:name="com.google.android.wearable.watchface.category.COMPANION_CONFIGURATION" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <meta-data
+                android:name="com.google.android.gms.version"
+                android:value="@integer/google_play_services_version" />
+
+    </application>
+
+</manifest>
diff --git a/samples/browseable/WatchFace/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/WatchFace/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Application/res/drawable-hdpi/tile.9.png b/samples/browseable/WatchFace/Application/res/drawable-hdpi/tile.9.png
new file mode 100644
index 0000000..1358628
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/drawable-hdpi/tile.9.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/WatchFace/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/WatchFace/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/WatchFace/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Application/res/layout/activity_analog_watch_face_config.xml b/samples/browseable/WatchFace/Application/res/layout/activity_analog_watch_face_config.xml
new file mode 100644
index 0000000..ec816c2
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/layout/activity_analog_watch_face_config.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/label"
+        android:text="@string/analog_config_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+</FrameLayout>
diff --git a/samples/browseable/WatchFace/Application/res/layout/activity_digital_watch_face_config.xml b/samples/browseable/WatchFace/Application/res/layout/activity_digital_watch_face_config.xml
new file mode 100644
index 0000000..204d523
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/layout/activity_digital_watch_face_config.xml
@@ -0,0 +1,95 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <TextView
+        android:id="@+id/label"
+        android:text="@string/digital_config_text"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content" />
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <TextView
+            android:text="@string/digital_config_background"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1" />
+        <Spinner
+            android:id="@+id/background"
+            android:entries="@array/color_array"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <TextView
+            android:text="@string/digital_config_hours"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1" />
+        <Spinner
+            android:id="@+id/hours"
+            android:entries="@array/color_array"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <TextView
+            android:text="@string/digital_config_minutes"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1" />
+        <Spinner
+            android:id="@+id/minutes"
+            android:entries="@array/color_array"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+        <TextView
+            android:text="@string/digital_config_seconds"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1" />
+        <Spinner
+            android:id="@+id/seconds"
+            android:entries="@array/color_array"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="3" />
+    </LinearLayout>
+
+</LinearLayout>
diff --git a/samples/browseable/WatchFace/Application/res/layout/activity_main.xml b/samples/browseable/WatchFace/Application/res/layout/activity_main.xml
new file mode 100755
index 0000000..be1aa49
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/layout/activity_main.xml
@@ -0,0 +1,36 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical">
+
+    <LinearLayout style="@style/Widget.SampleMessageTile"
+                  android:layout_width="match_parent"
+                  android:layout_height="wrap_content"
+                  android:orientation="vertical">
+
+        <TextView style="@style/Widget.SampleMessage"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginLeft="@dimen/horizontal_page_margin"
+            android:layout_marginRight="@dimen/horizontal_page_margin"
+            android:layout_marginTop="@dimen/vertical_page_margin"
+            android:layout_marginBottom="@dimen/vertical_page_margin"
+            android:text="@string/intro_message" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/samples/browseable/WatchFace/Application/res/layout/activity_tilt_watch_face_config.xml b/samples/browseable/WatchFace/Application/res/layout/activity_tilt_watch_face_config.xml
new file mode 100644
index 0000000..bda2d68
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/layout/activity_tilt_watch_face_config.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent">
+
+    <TextView
+        android:id="@+id/label"
+        android:text="@string/tilt_config_text"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content" />
+
+</FrameLayout>
diff --git a/samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml b/samples/browseable/WatchFace/Application/res/values-sw600dp/template-dimens.xml
similarity index 72%
copy from samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml
copy to samples/browseable/WatchFace/Application/res/values-sw600dp/template-dimens.xml
index 134fcd9..22074a2 100644
--- a/samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml
+++ b/samples/browseable/WatchFace/Application/res/values-sw600dp/template-dimens.xml
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2014 The Android Open Source Project
+  Copyright 2013 The Android Open Source Project
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -16,7 +16,9 @@
 
 <resources>
 
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_huge</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
 
 </resources>
diff --git a/samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml b/samples/browseable/WatchFace/Application/res/values-sw600dp/template-styles.xml
similarity index 66%
copy from samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml
copy to samples/browseable/WatchFace/Application/res/values-sw600dp/template-styles.xml
index 134fcd9..03d1974 100644
--- a/samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml
+++ b/samples/browseable/WatchFace/Application/res/values-sw600dp/template-styles.xml
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2014 The Android Open Source Project
+  Copyright 2013 The Android Open Source Project
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -16,7 +16,10 @@
 
 <resources>
 
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceLarge</item>
+        <item name="android:lineSpacingMultiplier">1.2</item>
+        <item name="android:shadowDy">-6.5</item>
+    </style>
 
 </resources>
diff --git a/samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml b/samples/browseable/WatchFace/Application/res/values-v11/template-styles.xml
similarity index 83%
rename from samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml
rename to samples/browseable/WatchFace/Application/res/values-v11/template-styles.xml
index 134fcd9..8c1ea66 100644
--- a/samples/browseable/ActionBarCompat-Basic/res/values-v21/template-styles.xml
+++ b/samples/browseable/WatchFace/Application/res/values-v11/template-styles.xml
@@ -1,5 +1,5 @@
 <!--
-  Copyright 2014 The Android Open Source Project
+  Copyright 2013 The Android Open Source Project
 
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
@@ -17,6 +17,6 @@
 <resources>
 
     <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
+    <style name="Theme.Base" parent="android:Theme.Holo.Light" />
 
 </resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/WatchFace/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/WatchFace/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/WatchFace/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/WatchFace/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/WatchFace/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/WatchFace/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/WatchFace/Application/res/values/base-strings.xml b/samples/browseable/WatchFace/Application/res/values/base-strings.xml
new file mode 100644
index 0000000..5108f61
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/values/base-strings.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ Copyright 2013 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <string name="app_name">WatchFace</string>
+    <string name="intro_message">
+        <![CDATA[
+        
+            
+This sample demonstrates how to create watch faces for android wear and includes a phone app
+and a wearable app. The wearable app has a variety of watch faces including analog, digital,
+opengl, calendar, etc. It also includes a watch-side configuration example. The phone app
+includes a phone-side configuration example.
+            
+        
+        ]]>
+    </string>
+</resources>
diff --git a/samples/browseable/WatchFace/Application/res/values/strings.xml b/samples/browseable/WatchFace/Application/res/values/strings.xml
new file mode 100644
index 0000000..aacb108
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/values/strings.xml
@@ -0,0 +1,45 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <string name="analog_config_text">This is the config activity for the Analog and Card Bounds watch faces</string>
+    <string name="digital_config_text">Digital watch face configuration</string>
+    <string name="tilt_config_text">Tilt watch face configuration</string>
+    <string name="digital_config_background">Background</string>
+    <string name="digital_config_hours">Hours</string>
+    <string name="digital_config_minutes">Minutes</string>
+    <string name="digital_config_seconds">Seconds</string>
+
+    <string name="title_no_device_connected">No wearable device is currently connected.</string>
+    <string name="ok_no_device_connected">OK</string>
+
+    <string name="color_black">Black</string>
+    <string name="color_blue">Blue</string>
+    <string name="color_gray">Gray</string>
+    <string name="color_green">Green</string>
+    <string name="color_navy">Navy</string>
+    <string name="color_red">Red</string>
+    <string name="color_white">White</string>
+
+    <string-array name="color_array">
+        <item>@string/color_black</item>
+        <item>@string/color_blue</item>
+        <item>@string/color_gray</item>
+        <item>@string/color_green</item>
+        <item>@string/color_navy</item>
+        <item>@string/color_red</item>
+        <item>@string/color_white</item>
+    </string-array>
+</resources>
diff --git a/samples/browseable/WatchFace/Application/res/values/template-dimens.xml b/samples/browseable/WatchFace/Application/res/values/template-dimens.xml
new file mode 100644
index 0000000..39e710b
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/values/template-dimens.xml
@@ -0,0 +1,32 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Define standard dimensions to comply with Holo-style grids and rhythm. -->
+
+    <dimen name="margin_tiny">4dp</dimen>
+    <dimen name="margin_small">8dp</dimen>
+    <dimen name="margin_medium">16dp</dimen>
+    <dimen name="margin_large">32dp</dimen>
+    <dimen name="margin_huge">64dp</dimen>
+
+    <!-- Semantic definitions -->
+
+    <dimen name="horizontal_page_margin">@dimen/margin_medium</dimen>
+    <dimen name="vertical_page_margin">@dimen/margin_medium</dimen>
+
+</resources>
diff --git a/samples/browseable/WatchFace/Application/res/values/template-styles.xml b/samples/browseable/WatchFace/Application/res/values/template-styles.xml
new file mode 100644
index 0000000..6e7d593
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/res/values/template-styles.xml
@@ -0,0 +1,42 @@
+<!--
+  Copyright 2013 The Android Open Source Project
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+  -->
+
+<resources>
+
+    <!-- Activity themes -->
+
+    <style name="Theme.Base" parent="android:Theme.Light" />
+
+    <style name="Theme.Sample" parent="Theme.Base" />
+
+    <style name="AppTheme" parent="Theme.Sample" />
+    <!-- Widget styling -->
+
+    <style name="Widget" />
+
+    <style name="Widget.SampleMessage">
+        <item name="android:textAppearance">?android:textAppearanceMedium</item>
+        <item name="android:lineSpacingMultiplier">1.1</item>
+    </style>
+
+    <style name="Widget.SampleMessageTile">
+        <item name="android:background">@drawable/tile</item>
+        <item name="android:shadowColor">#7F000000</item>
+        <item name="android:shadowDy">-3.5</item>
+        <item name="android:shadowRadius">2</item>
+    </style>
+
+</resources>
diff --git a/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/AnalogAndCardBoundsWatchFaceConfigActivity.java b/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/AnalogAndCardBoundsWatchFaceConfigActivity.java
new file mode 100644
index 0000000..5943e6b
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/AnalogAndCardBoundsWatchFaceConfigActivity.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.os.Bundle;
+import android.support.wearable.companion.WatchFaceCompanion;
+import android.widget.TextView;
+
+public class AnalogAndCardBoundsWatchFaceConfigActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_analog_watch_face_config);
+
+        ComponentName name =
+                getIntent().getParcelableExtra(WatchFaceCompanion.EXTRA_WATCH_FACE_COMPONENT);
+        TextView label = (TextView) findViewById(R.id.label);
+        label.setText(label.getText() + " (" + name.getClassName() + ")");
+    }
+}
diff --git a/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/DigitalWatchFaceCompanionConfigActivity.java b/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/DigitalWatchFaceCompanionConfigActivity.java
new file mode 100644
index 0000000..b04f11e
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/DigitalWatchFaceCompanionConfigActivity.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.content.ComponentName;
+import android.content.DialogInterface;
+import android.graphics.Color;
+import android.net.Uri;
+import android.os.Bundle;
+import android.support.wearable.companion.WatchFaceCompanion;
+import android.util.Log;
+import android.view.View;
+import android.widget.AdapterView;
+import android.widget.Spinner;
+import android.widget.TextView;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.common.api.ResultCallback;
+import com.google.android.gms.wearable.DataApi;
+import com.google.android.gms.wearable.DataItem;
+import com.google.android.gms.wearable.DataMap;
+import com.google.android.gms.wearable.DataMapItem;
+import com.google.android.gms.wearable.Wearable;
+
+/**
+ * The phone-side config activity for {@code DigitalWatchFaceService}. Like the watch-side config
+ * activity ({@code DigitalWatchFaceWearableConfigActivity}), allows for setting the background
+ * color. Additionally, enables setting the color for hour, minute and second digits.
+ */
+public class DigitalWatchFaceCompanionConfigActivity extends Activity
+        implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener,
+                ResultCallback<DataApi.DataItemResult> {
+    private static final String TAG = "DigitalWatchFaceConfig";
+
+    // TODO: use the shared constants (needs covering all the samples with Gradle build model)
+    private static final String KEY_BACKGROUND_COLOR = "BACKGROUND_COLOR";
+    private static final String KEY_HOURS_COLOR = "HOURS_COLOR";
+    private static final String KEY_MINUTES_COLOR = "MINUTES_COLOR";
+    private static final String KEY_SECONDS_COLOR = "SECONDS_COLOR";
+    private static final String PATH_WITH_FEATURE = "/watch_face_config/Digital";
+
+    private GoogleApiClient mGoogleApiClient;
+    private String mPeerId;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_digital_watch_face_config);
+
+        mPeerId = getIntent().getStringExtra(WatchFaceCompanion.EXTRA_PEER_ID);
+        mGoogleApiClient = new GoogleApiClient.Builder(this)
+                .addConnectionCallbacks(this)
+                .addOnConnectionFailedListener(this)
+                .addApi(Wearable.API)
+                .build();
+
+        ComponentName name = getIntent().getParcelableExtra(
+                WatchFaceCompanion.EXTRA_WATCH_FACE_COMPONENT);
+        TextView label = (TextView)findViewById(R.id.label);
+        label.setText(label.getText() + " (" + name.getClassName() + ")");
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mGoogleApiClient.connect();
+    }
+
+    @Override
+    protected void onStop() {
+        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
+            mGoogleApiClient.disconnect();
+        }
+        super.onStop();
+    }
+
+    @Override // GoogleApiClient.ConnectionCallbacks
+    public void onConnected(Bundle connectionHint) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "onConnected: " + connectionHint);
+        }
+
+        if (mPeerId != null) {
+            Uri.Builder builder = new Uri.Builder();
+            Uri uri = builder.scheme("wear").path(PATH_WITH_FEATURE).authority(mPeerId).build();
+            Wearable.DataApi.getDataItem(mGoogleApiClient, uri).setResultCallback(this);
+        } else {
+            displayNoConnectedDeviceDialog();
+        }
+    }
+
+    @Override // ResultCallback<DataApi.DataItemResult>
+    public void onResult(DataApi.DataItemResult dataItemResult) {
+        if (dataItemResult.getStatus().isSuccess() && dataItemResult.getDataItem() != null) {
+            DataItem configDataItem = dataItemResult.getDataItem();
+            DataMapItem dataMapItem = DataMapItem.fromDataItem(configDataItem);
+            DataMap config = dataMapItem.getDataMap();
+            setUpAllPickers(config);
+        } else {
+            // If DataItem with the current config can't be retrieved, select the default items on
+            // each picker.
+            setUpAllPickers(null);
+        }
+    }
+
+    @Override // GoogleApiClient.ConnectionCallbacks
+    public void onConnectionSuspended(int cause) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "onConnectionSuspended: " + cause);
+        }
+    }
+
+    @Override // GoogleApiClient.OnConnectionFailedListener
+    public void onConnectionFailed(ConnectionResult result) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "onConnectionFailed: " + result);
+        }
+    }
+
+    private void displayNoConnectedDeviceDialog() {
+        AlertDialog.Builder builder = new AlertDialog.Builder(this);
+        String messageText = getResources().getString(R.string.title_no_device_connected);
+        String okText = getResources().getString(R.string.ok_no_device_connected);
+        builder.setMessage(messageText)
+                .setCancelable(false)
+                .setPositiveButton(okText, new DialogInterface.OnClickListener() {
+                    public void onClick(DialogInterface dialog, int id) { }
+                });
+        AlertDialog alert = builder.create();
+        alert.show();
+    }
+
+    /**
+     * Sets up selected items for all pickers according to given {@code config} and sets up their
+     * item selection listeners.
+     *
+     * @param config the {@code DigitalWatchFaceService} config {@link DataMap}. If null, the
+     *         default items are selected.
+     */
+    private void setUpAllPickers(DataMap config) {
+        setUpColorPickerSelection(R.id.background, KEY_BACKGROUND_COLOR, config,
+                R.string.color_black);
+        setUpColorPickerSelection(R.id.hours, KEY_HOURS_COLOR, config, R.string.color_white);
+        setUpColorPickerSelection(R.id.minutes, KEY_MINUTES_COLOR, config, R.string.color_white);
+        setUpColorPickerSelection(R.id.seconds, KEY_SECONDS_COLOR, config, R.string.color_gray);
+
+        setUpColorPickerListener(R.id.background, KEY_BACKGROUND_COLOR);
+        setUpColorPickerListener(R.id.hours, KEY_HOURS_COLOR);
+        setUpColorPickerListener(R.id.minutes, KEY_MINUTES_COLOR);
+        setUpColorPickerListener(R.id.seconds, KEY_SECONDS_COLOR);
+    }
+
+    private void setUpColorPickerSelection(int spinnerId, final String configKey, DataMap config,
+            int defaultColorNameResId) {
+        String defaultColorName = getString(defaultColorNameResId);
+        int defaultColor = Color.parseColor(defaultColorName);
+        int color;
+        if (config != null) {
+            color = config.getInt(configKey, defaultColor);
+        } else {
+            color = defaultColor;
+        }
+        Spinner spinner = (Spinner) findViewById(spinnerId);
+        String[] colorNames = getResources().getStringArray(R.array.color_array);
+        for (int i = 0; i < colorNames.length; i++) {
+            if (Color.parseColor(colorNames[i]) == color) {
+                spinner.setSelection(i);
+                break;
+            }
+        }
+    }
+
+    private void setUpColorPickerListener(int spinnerId, final String configKey) {
+        Spinner spinner = (Spinner) findViewById(spinnerId);
+        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
+            @Override
+            public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) {
+                final String colorName = (String) adapterView.getItemAtPosition(pos);
+                sendConfigUpdateMessage(configKey, Color.parseColor(colorName));
+            }
+
+            @Override
+            public void onNothingSelected(AdapterView<?> adapterView) { }
+        });
+    }
+
+    private void sendConfigUpdateMessage(String configKey, int color) {
+        if (mPeerId != null) {
+            DataMap config = new DataMap();
+            config.putInt(configKey, color);
+            byte[] rawData = config.toByteArray();
+            Wearable.MessageApi.sendMessage(mGoogleApiClient, mPeerId, PATH_WITH_FEATURE, rawData);
+
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Sent watch face config message: " + configKey + " -> "
+                        + Integer.toHexString(color));
+            }
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/TiltWatchFaceConfigActivity.java b/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/TiltWatchFaceConfigActivity.java
new file mode 100644
index 0000000..303e72e
--- /dev/null
+++ b/samples/browseable/WatchFace/Application/src/com.example.android.wearable.watchface/TiltWatchFaceConfigActivity.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.os.Bundle;
+import android.support.wearable.companion.WatchFaceCompanion;
+import android.widget.TextView;
+
+public class TiltWatchFaceConfigActivity extends Activity {
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_tilt_watch_face_config);
+
+        ComponentName name =
+                getIntent().getParcelableExtra(WatchFaceCompanion.EXTRA_WATCH_FACE_COMPONENT);
+        TextView label = (TextView)findViewById(R.id.label);
+        label.setText(label.getText() + " (" + name.getClassName() + ")");
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/AndroidManifest.xml b/samples/browseable/WatchFace/Wearable/AndroidManifest.xml
new file mode 100644
index 0000000..ee906b7
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/AndroidManifest.xml
@@ -0,0 +1,205 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+        package="com.example.android.wearable.watchface" >
+
+    <uses-sdk android:minSdkVersion="21"
+        android:targetSdkVersion="21" />
+
+    <uses-feature android:name="android.hardware.type.watch" />
+
+    <!-- Required to act as a custom watch face. -->
+    <uses-permission android:name="com.google.android.permission.PROVIDE_BACKGROUND" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+
+    <!-- Calendar permission used by CalendarWatchFaceService -->
+    <uses-permission android:name="android.permission.READ_CALENDAR" />
+
+    <application
+            android:allowBackup="true"
+            android:icon="@drawable/ic_launcher"
+            android:label="@string/app_name" >
+
+        <service
+                android:name=".AnalogWatchFaceService"
+                android:label="@string/analog_name"
+                android:allowEmbedded="true"
+                android:taskAffinity=""
+                android:permission="android.permission.BIND_WALLPAPER" >
+            <meta-data
+                    android:name="android.service.wallpaper"
+                    android:resource="@xml/watch_face" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.preview"
+                    android:resource="@drawable/preview_analog" />
+            <meta-data
+                    android:name="com.google.android.clockwork.home.preview_circular"
+                    android:resource="@drawable/preview_analog_circular" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.companionConfigurationAction"
+                    android:value="com.example.android.wearable.watchface.CONFIG_ANALOG" />
+            <intent-filter>
+                <action android:name="android.service.wallpaper.WallpaperService" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+            </intent-filter>
+        </service>
+
+        <service
+                android:name=".SweepWatchFaceService"
+                android:label="@string/sweep_name"
+                android:allowEmbedded="true"
+                android:taskAffinity=""
+                android:permission="android.permission.BIND_WALLPAPER" >
+            <meta-data
+                    android:name="android.service.wallpaper"
+                    android:resource="@xml/watch_face" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.preview"
+                    android:resource="@drawable/preview_analog" />
+            <meta-data
+                    android:name="com.google.android.clockwork.home.preview_circular"
+                    android:resource="@drawable/preview_analog_circular" />
+            <intent-filter>
+                <action android:name="android.service.wallpaper.WallpaperService" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+            </intent-filter>
+        </service>
+
+        <service
+                android:name=".TiltWatchFaceService"
+                android:label="@string/tilt_name"
+                android:allowEmbedded="true"
+                android:taskAffinity=""
+                android:permission="android.permission.BIND_WALLPAPER" >
+            <meta-data
+                    android:name="android.service.wallpaper"
+                    android:resource="@xml/watch_face" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.preview"
+                    android:resource="@drawable/preview_tilt" />
+            <meta-data
+                    android:name="com.google.android.clockwork.home.preview_circular"
+                    android:resource="@drawable/preview_tilt_circular" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.companionConfigurationAction"
+                    android:value="com.example.android.wearable.watchface.CONFIG_TILT" />
+
+            <intent-filter>
+                <action android:name="android.service.wallpaper.WallpaperService" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+            </intent-filter>
+        </service>
+
+        <service
+                android:name=".CardBoundsWatchFaceService"
+                android:label="@string/card_bounds_name"
+                android:allowEmbedded="true"
+                android:taskAffinity=""
+                android:permission="android.permission.BIND_WALLPAPER" >
+            <meta-data
+                    android:name="android.service.wallpaper"
+                    android:resource="@xml/watch_face" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.preview"
+                    android:resource="@drawable/preview_card_bounds" />
+            <meta-data
+                    android:name="com.google.android.clockwork.home.preview_circular"
+                    android:resource="@drawable/preview_card_bounds_circular" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.companionConfigurationAction"
+                    android:value="com.example.android.wearable.watchface.CONFIG_CARD_BOUNDS" />
+            <intent-filter>
+                <action android:name="android.service.wallpaper.WallpaperService" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+            </intent-filter>
+        </service>
+
+        <service
+                android:name=".DigitalWatchFaceService"
+                android:label="@string/digital_name"
+                android:allowEmbedded="true"
+                android:taskAffinity=""
+                android:permission="android.permission.BIND_WALLPAPER" >
+            <meta-data
+                    android:name="android.service.wallpaper"
+                    android:resource="@xml/watch_face" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.preview"
+                    android:resource="@drawable/preview_digital" />
+            <meta-data
+                    android:name="com.google.android.clockwork.home.preview_circular"
+                    android:resource="@drawable/preview_digital_circular" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.companionConfigurationAction"
+                    android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.wearableConfigurationAction"
+                    android:value="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+            <intent-filter>
+                <action android:name="android.service.wallpaper.WallpaperService" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+            </intent-filter>
+        </service>
+
+        <!-- All intent-filters for config actions must include the categories
+            com.google.android.wearable.watchface.category.WEARABLE_CONFIGURATION
+            and android.intent.category.DEFAULT. -->
+
+        <activity
+                android:name=".DigitalWatchFaceWearableConfigActivity"
+                android:label="@string/digital_config_name">
+            <intent-filter>
+                <action android:name="com.example.android.wearable.watchface.CONFIG_DIGITAL" />
+                <category android:name="com.google.android.wearable.watchface.category.WEARABLE_CONFIGURATION" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+        </activity>
+
+        <service
+                android:name=".CalendarWatchFaceService"
+                android:label="@string/calendar_name"
+                android:allowEmbedded="true"
+                android:taskAffinity=""
+                android:permission="android.permission.BIND_WALLPAPER" >
+            <meta-data
+                    android:name="android.service.wallpaper"
+                    android:resource="@xml/watch_face" />
+            <meta-data
+                    android:name="com.google.android.wearable.watchface.preview"
+                    android:resource="@drawable/preview_calendar" />
+            <meta-data
+                    android:name="com.google.android.clockwork.home.preview_circular"
+                    android:resource="@drawable/preview_calendar_circular" />
+            <intent-filter>
+                <action android:name="android.service.wallpaper.WallpaperService" />
+                <category android:name="com.google.android.wearable.watchface.category.WATCH_FACE" />
+            </intent-filter>
+        </service>
+
+        <service android:name=".DigitalWatchFaceConfigListenerService">
+            <intent-filter>
+                <action android:name="com.google.android.gms.wearable.BIND_LISTENER" />
+            </intent-filter>
+        </service>
+
+        <meta-data
+                android:name="com.google.android.gms.version"
+                android:value="@integer/google_play_services_version" />
+
+    </application>
+
+</manifest>
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/bg.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/bg.png
new file mode 100644
index 0000000..5199af2
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/bg.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/ic_launcher.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/ic_launcher.png
new file mode 100644
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_analog.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_analog.png
new file mode 100644
index 0000000..ed6960d
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_analog.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_analog_circular.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_analog_circular.png
new file mode 100644
index 0000000..a3affe2
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_analog_circular.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_calendar.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_calendar.png
new file mode 100644
index 0000000..928aa1f
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_calendar.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_calendar_circular.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_calendar_circular.png
new file mode 100644
index 0000000..cb1d27b
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_calendar_circular.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_card_bounds.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_card_bounds.png
new file mode 100644
index 0000000..f87b6c5
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_card_bounds.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_card_bounds_circular.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_card_bounds_circular.png
new file mode 100644
index 0000000..387f59e
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_card_bounds_circular.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_digital.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_digital.png
new file mode 100644
index 0000000..4853a64
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_digital.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_digital_circular.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_digital_circular.png
new file mode 100644
index 0000000..efeac34
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_digital_circular.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_tilt.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_tilt.png
new file mode 100644
index 0000000..aab5f18
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_tilt.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_tilt_circular.png b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_tilt_circular.png
new file mode 100644
index 0000000..31d3a1f
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-hdpi/preview_tilt_circular.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-mdpi/ic_launcher.png b/samples/browseable/WatchFace/Wearable/res/drawable-mdpi/ic_launcher.png
new file mode 100644
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/WatchFace/Wearable/res/drawable-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/WatchFace/Wearable/res/drawable-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchFace/Wearable/res/layout/activity_digital_config.xml b/samples/browseable/WatchFace/Wearable/res/layout/activity_digital_config.xml
new file mode 100644
index 0000000..a368390
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/layout/activity_digital_config.xml
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<android.support.wearable.view.BoxInsetLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:id="@+id/content"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:background="@color/config_activity_background">
+    <TextView
+        android:id="@+id/header"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_marginLeft="16dp"
+        android:layout_marginTop="14dp"
+        android:textSize="24sp"
+        android:textColor="@color/config_activity_header_text_color"
+        android:text="@string/digital_background_color"
+        android:fontFamily="sans-serif-condensed-light"
+        app:layout_box="left|top"/>
+    <android.support.wearable.view.WearableListView
+        android:id="@+id/color_picker"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@android:color/transparent"
+        app:layout_box="left|right"/>
+</android.support.wearable.view.BoxInsetLayout>
diff --git a/samples/browseable/WatchFace/Wearable/res/layout/color_picker_item.xml b/samples/browseable/WatchFace/Wearable/res/layout/color_picker_item.xml
new file mode 100644
index 0000000..9b07e2a
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/layout/color_picker_item.xml
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<merge
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <android.support.wearable.view.CircledImageView
+        android:id="@+id/color"
+        android:layout_width="52dp"
+        android:layout_height="52dp"
+        android:layout_gravity="center_vertical"
+        app:circle_border_color="@color/color_item_circle_border_color"
+        app:circle_radius="26dp"
+        app:circle_border_width="1dp"/>
+
+    <TextView
+        android:id="@+id/label"
+        android:fontFamily="sans-serif-condensed-light"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_gravity="center_vertical"
+        android:layout_marginLeft="10dp"
+        android:textColor="@color/color_item_label_color"
+        android:textSize="18sp"/>
+</merge>
\ No newline at end of file
diff --git a/samples/browseable/WatchFace/Wearable/res/values/color.xml b/samples/browseable/WatchFace/Wearable/res/values/color.xml
new file mode 100644
index 0000000..0da08ed
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/values/color.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <color name="digital_am_pm">#aaaaa0</color>
+    <color name="digital_colons">#aaaaa0</color>
+    <color name="config_activity_background">#ffffff</color>
+    <color name="config_activity_header_text_color">#959595</color>
+    <color name="color_item_label_color">#000000</color>
+    <color name="color_item_circle_border_color">#424242</color>
+</resources>
diff --git a/samples/browseable/WatchFace/Wearable/res/values/dimens.xml b/samples/browseable/WatchFace/Wearable/res/values/dimens.xml
new file mode 100644
index 0000000..8f04e56
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/values/dimens.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <dimen name="digital_text_size">40dp</dimen>
+    <dimen name="digital_text_size_round">45dp</dimen>
+    <dimen name="digital_am_pm_size">25dp</dimen>
+    <dimen name="digital_am_pm_size_round">30dp</dimen>
+    <dimen name="digital_x_offset">15dp</dimen>
+    <dimen name="digital_x_offset_round">25dp</dimen>
+    <dimen name="digital_y_offset">90dp</dimen>
+    <dimen name="digital_config_color_picker_item_margin">32dp</dimen>
+    <dimen name="content_padding_start">12dp</dimen>
+</resources>
diff --git a/samples/browseable/WatchFace/Wearable/res/values/strings.xml b/samples/browseable/WatchFace/Wearable/res/values/strings.xml
new file mode 100644
index 0000000..e54591f
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/values/strings.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<resources>
+    <string name="app_name">WatchFace</string>
+    <string name="tilt_name">Sample Tilt</string>
+    <string name="analog_name">Sample Analog</string>
+    <string name="sweep_name">Sample Sweep</string>
+    <string name="card_bounds_name">Sample Card Bounds</string>
+    <string name="digital_name">Sample Digital</string>
+    <string name="digital_background_color">Background color</string>
+    <string name="digital_config_name">Digital watch face configuration</string>
+    <string name="digital_am">AM</string>
+    <string name="digital_pm">PM</string>
+    <string name="calendar_name">Sample Calendar</string>
+    <plurals name="calendar_meetings">
+        <item quantity="one">&lt;br&gt;&lt;br&gt;&lt;br&gt;You have &lt;b&gt;%1$d&lt;/b&gt; meeting in the next 24 hours.</item>
+        <item quantity="other">&lt;br&gt;&lt;br&gt;&lt;br&gt;You have &lt;b&gt;%1$d&lt;/b&gt; meetings in the next 24 hours.</item>
+    </plurals>
+
+    <!-- TODO: this should be shared (needs covering all the samples with Gradle build model) -->
+    <string name="color_black">Black</string>
+    <string name="color_blue">Blue</string>
+    <string name="color_gray">Gray</string>
+    <string name="color_green">Green</string>
+    <string name="color_navy">Navy</string>
+    <string name="color_red">Red</string>
+    <string name="color_white">White</string>
+
+    <string-array name="color_array">
+        <item>@string/color_black</item>
+        <item>@string/color_blue</item>
+        <item>@string/color_gray</item>
+        <item>@string/color_green</item>
+        <item>@string/color_navy</item>
+        <item>@string/color_red</item>
+        <item>@string/color_white</item>
+    </string-array>
+</resources>
diff --git a/samples/browseable/WatchFace/Wearable/res/xml/watch_face.xml b/samples/browseable/WatchFace/Wearable/res/xml/watch_face.xml
new file mode 100644
index 0000000..aa2e343
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/res/xml/watch_face.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+      http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<wallpaper xmlns:android="http://schemas.android.com/apk/res/android" />
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/AnalogWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/AnalogWatchFaceService.java
new file mode 100644
index 0000000..f0fb4f5
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/AnalogWatchFaceService.java
@@ -0,0 +1,334 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.wearable.watchface.CanvasWatchFaceService;
+import android.support.wearable.watchface.WatchFaceService;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.text.format.Time;
+import android.util.Log;
+import android.view.SurfaceHolder;
+
+import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Sample analog watch face with a ticking second hand. In ambient mode, the second hand isn't
+ * shown. On devices with low-bit ambient mode, the hands are drawn without anti-aliasing in ambient
+ * mode. The watch face is drawn with less contrast in mute mode.
+ *
+ * {@link SweepWatchFaceService} is similar but has a sweep second hand.
+ */
+public class AnalogWatchFaceService extends CanvasWatchFaceService {
+    private static final String TAG = "AnalogWatchFaceService";
+
+    /**
+     * Update rate in milliseconds for interactive mode. We update once a second to advance the
+     * second hand.
+     */
+    private static final long INTERACTIVE_UPDATE_RATE_MS = TimeUnit.SECONDS.toMillis(1);
+
+    @Override
+    public Engine onCreateEngine() {
+        return new Engine();
+    }
+
+    private class Engine extends CanvasWatchFaceService.Engine {
+        static final int MSG_UPDATE_TIME = 0;
+
+        Paint mHourPaint;
+        Paint mMinutePaint;
+        Paint mSecondPaint;
+        Paint mTickPaint;
+        boolean mMute;
+        Time mTime;
+
+        /** Handler to update the time once a second in interactive mode. */
+        final Handler mUpdateTimeHandler = new Handler() {
+            @Override
+            public void handleMessage(Message message) {
+                switch (message.what) {
+                    case MSG_UPDATE_TIME:
+                        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                            Log.v(TAG, "updating time");
+                        }
+                        invalidate();
+                        if (shouldTimerBeRunning()) {
+                            long timeMs = System.currentTimeMillis();
+                            long delayMs = INTERACTIVE_UPDATE_RATE_MS
+                                    - (timeMs % INTERACTIVE_UPDATE_RATE_MS);
+                            mUpdateTimeHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIME, delayMs);
+                        }
+                        break;
+                }
+            }
+        };
+
+        final BroadcastReceiver mTimeZoneReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                mTime.clear(intent.getStringExtra("time-zone"));
+                mTime.setToNow();
+            }
+        };
+        boolean mRegisteredTimeZoneReceiver = false;
+
+        /**
+         * Whether the display supports fewer bits for each color in ambient mode. When true, we
+         * disable anti-aliasing in ambient mode.
+         */
+        boolean mLowBitAmbient;
+
+        Bitmap mBackgroundBitmap;
+        Bitmap mBackgroundScaledBitmap;
+
+        @Override
+        public void onCreate(SurfaceHolder holder) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onCreate");
+            }
+            super.onCreate(holder);
+
+            setWatchFaceStyle(new WatchFaceStyle.Builder(AnalogWatchFaceService.this)
+                    .setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
+                    .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
+                    .setShowSystemUiTime(false)
+                    .build());
+
+            Resources resources = AnalogWatchFaceService.this.getResources();
+            Drawable backgroundDrawable = resources.getDrawable(R.drawable.bg);
+            mBackgroundBitmap = ((BitmapDrawable) backgroundDrawable).getBitmap();
+
+            mHourPaint = new Paint();
+            mHourPaint.setARGB(255, 200, 200, 200);
+            mHourPaint.setStrokeWidth(5.f);
+            mHourPaint.setAntiAlias(true);
+            mHourPaint.setStrokeCap(Paint.Cap.ROUND);
+
+            mMinutePaint = new Paint();
+            mMinutePaint.setARGB(255, 200, 200, 200);
+            mMinutePaint.setStrokeWidth(3.f);
+            mMinutePaint.setAntiAlias(true);
+            mMinutePaint.setStrokeCap(Paint.Cap.ROUND);
+
+            mSecondPaint = new Paint();
+            mSecondPaint.setARGB(255, 255, 0, 0);
+            mSecondPaint.setStrokeWidth(2.f);
+            mSecondPaint.setAntiAlias(true);
+            mSecondPaint.setStrokeCap(Paint.Cap.ROUND);
+
+            mTickPaint = new Paint();
+            mTickPaint.setARGB(100, 255, 255, 255);
+            mTickPaint.setStrokeWidth(2.f);
+            mTickPaint.setAntiAlias(true);
+
+            mTime = new Time();
+        }
+
+        @Override
+        public void onDestroy() {
+            mUpdateTimeHandler.removeMessages(MSG_UPDATE_TIME);
+            super.onDestroy();
+        }
+
+        @Override
+        public void onPropertiesChanged(Bundle properties) {
+            super.onPropertiesChanged(properties);
+            mLowBitAmbient = properties.getBoolean(PROPERTY_LOW_BIT_AMBIENT, false);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onPropertiesChanged: low-bit ambient = " + mLowBitAmbient);
+            }
+        }
+
+        @Override
+        public void onTimeTick() {
+            super.onTimeTick();
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onTimeTick: ambient = " + isInAmbientMode());
+            }
+            invalidate();
+        }
+
+        @Override
+        public void onAmbientModeChanged(boolean inAmbientMode) {
+            super.onAmbientModeChanged(inAmbientMode);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAmbientModeChanged: " + inAmbientMode);
+            }
+            if (mLowBitAmbient) {
+                boolean antiAlias = !inAmbientMode;
+                mHourPaint.setAntiAlias(antiAlias);
+                mMinutePaint.setAntiAlias(antiAlias);
+                mSecondPaint.setAntiAlias(antiAlias);
+                mTickPaint.setAntiAlias(antiAlias);
+            }
+            invalidate();
+
+            // Whether the timer should be running depends on whether we're in ambient mode (as well
+            // as whether we're visible), so we may need to start or stop the timer.
+            updateTimer();
+        }
+
+        @Override
+        public void onInterruptionFilterChanged(int interruptionFilter) {
+            super.onInterruptionFilterChanged(interruptionFilter);
+            boolean inMuteMode = (interruptionFilter == WatchFaceService.INTERRUPTION_FILTER_NONE);
+            if (mMute != inMuteMode) {
+                mMute = inMuteMode;
+                mHourPaint.setAlpha(inMuteMode ? 100 : 255);
+                mMinutePaint.setAlpha(inMuteMode ? 100 : 255);
+                mSecondPaint.setAlpha(inMuteMode ? 80 : 255);
+                invalidate();
+            }
+        }
+
+        @Override
+        public void onDraw(Canvas canvas, Rect bounds) {
+            mTime.setToNow();
+
+            int width = bounds.width();
+            int height = bounds.height();
+
+            // Draw the background, scaled to fit.
+            if (mBackgroundScaledBitmap == null
+                    || mBackgroundScaledBitmap.getWidth() != width
+                    || mBackgroundScaledBitmap.getHeight() != height) {
+                mBackgroundScaledBitmap = Bitmap.createScaledBitmap(mBackgroundBitmap,
+                        width, height, true /* filter */);
+            }
+            canvas.drawBitmap(mBackgroundScaledBitmap, 0, 0, null);
+
+            // Find the center. Ignore the window insets so that, on round watches with a
+            // "chin", the watch face is centered on the entire screen, not just the usable
+            // portion.
+            float centerX = width / 2f;
+            float centerY = height / 2f;
+
+            // Draw the ticks.
+            float innerTickRadius = centerX - 10;
+            float outerTickRadius = centerX;
+            for (int tickIndex = 0; tickIndex < 12; tickIndex++) {
+                float tickRot = (float) (tickIndex * Math.PI * 2 / 12);
+                float innerX = (float) Math.sin(tickRot) * innerTickRadius;
+                float innerY = (float) -Math.cos(tickRot) * innerTickRadius;
+                float outerX = (float) Math.sin(tickRot) * outerTickRadius;
+                float outerY = (float) -Math.cos(tickRot) * outerTickRadius;
+                canvas.drawLine(centerX + innerX, centerY + innerY,
+                        centerX + outerX, centerY + outerY, mTickPaint);
+            }
+
+            float secRot = mTime.second / 30f * (float) Math.PI;
+            int minutes = mTime.minute;
+            float minRot = minutes / 30f * (float) Math.PI;
+            float hrRot = ((mTime.hour + (minutes / 60f)) / 6f ) * (float) Math.PI;
+
+            float secLength = centerX - 20;
+            float minLength = centerX - 40;
+            float hrLength = centerX - 80;
+
+            if (!isInAmbientMode()) {
+                float secX = (float) Math.sin(secRot) * secLength;
+                float secY = (float) -Math.cos(secRot) * secLength;
+                canvas.drawLine(centerX, centerY, centerX + secX, centerY + secY, mSecondPaint);
+            }
+
+            float minX = (float) Math.sin(minRot) * minLength;
+            float minY = (float) -Math.cos(minRot) * minLength;
+            canvas.drawLine(centerX, centerY, centerX + minX, centerY + minY, mMinutePaint);
+
+            float hrX = (float) Math.sin(hrRot) * hrLength;
+            float hrY = (float) -Math.cos(hrRot) * hrLength;
+            canvas.drawLine(centerX, centerY, centerX + hrX, centerY + hrY, mHourPaint);
+        }
+
+        @Override
+        public void onVisibilityChanged(boolean visible) {
+            super.onVisibilityChanged(visible);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onVisibilityChanged: " + visible);
+            }
+
+            if (visible) {
+                registerReceiver();
+
+                // Update time zone in case it changed while we weren't visible.
+                mTime.clear(TimeZone.getDefault().getID());
+                mTime.setToNow();
+            } else {
+                unregisterReceiver();
+            }
+
+            // Whether the timer should be running depends on whether we're visible (as well as
+            // whether we're in ambient mode), so we may need to start or stop the timer.
+            updateTimer();
+        }
+
+        private void registerReceiver() {
+            if (mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = true;
+            IntentFilter filter = new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED);
+            AnalogWatchFaceService.this.registerReceiver(mTimeZoneReceiver, filter);
+        }
+
+        private void unregisterReceiver() {
+            if (!mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = false;
+            AnalogWatchFaceService.this.unregisterReceiver(mTimeZoneReceiver);
+        }
+
+        /**
+         * Starts the {@link #mUpdateTimeHandler} timer if it should be running and isn't currently
+         * or stops it if it shouldn't be running but currently is.
+         */
+        private void updateTimer() {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "updateTimer");
+            }
+            mUpdateTimeHandler.removeMessages(MSG_UPDATE_TIME);
+            if (shouldTimerBeRunning()) {
+                mUpdateTimeHandler.sendEmptyMessage(MSG_UPDATE_TIME);
+            }
+        }
+
+        /**
+         * Returns whether the {@link #mUpdateTimeHandler} timer should be running. The timer should
+         * only run when we're visible and in interactive mode.
+         */
+        private boolean shouldTimerBeRunning() {
+            return isVisible() && !isInAmbientMode();
+        }
+
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/CalendarWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/CalendarWatchFaceService.java
new file mode 100644
index 0000000..a8ab955
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/CalendarWatchFaceService.java
@@ -0,0 +1,232 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.content.BroadcastReceiver;
+import android.content.ContentUris;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.database.Cursor;
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.AsyncTask;
+import android.os.Handler;
+import android.os.Message;
+import android.os.PowerManager;
+import android.support.wearable.provider.WearableCalendarContract;
+import android.support.wearable.watchface.CanvasWatchFaceService;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.text.DynamicLayout;
+import android.text.Editable;
+import android.text.Html;
+import android.text.Layout;
+import android.text.SpannableStringBuilder;
+import android.text.TextPaint;
+import android.text.format.DateUtils;
+import android.util.Log;
+import android.view.SurfaceHolder;
+
+/**
+ * Proof of concept sample watch face that demonstrates how a watch face can load calendar data.
+ */
+public class CalendarWatchFaceService extends CanvasWatchFaceService {
+    private static final String TAG = "CalendarWatchFace";
+
+    @Override
+    public Engine onCreateEngine() {
+        return new Engine();
+    }
+
+    private class Engine extends CanvasWatchFaceService.Engine {
+
+        static final int BACKGROUND_COLOR = Color.BLACK;
+        static final int FOREGROUND_COLOR = Color.WHITE;
+        static final int TEXT_SIZE = 25;
+        static final int MSG_LOAD_MEETINGS = 0;
+
+        /** Editable string containing the text to draw with the number of meetings in bold. */
+        final Editable mEditable = new SpannableStringBuilder();
+
+        /** Width specified when {@link #mLayout} was created. */
+        int mLayoutWidth;
+
+        /** Layout to wrap {@link #mEditable} onto multiple lines. */
+        DynamicLayout mLayout;
+
+        /** Paint used to draw text. */
+        final TextPaint mTextPaint = new TextPaint();
+
+        int mNumMeetings;
+
+        private AsyncTask<Void, Void, Integer> mLoadMeetingsTask;
+
+        /** Handler to load the meetings once a minute in interactive mode. */
+        final Handler mLoadMeetingsHandler = new Handler() {
+            @Override
+            public void handleMessage(Message message) {
+                switch (message.what) {
+                    case MSG_LOAD_MEETINGS:
+                        cancelLoadMeetingTask();
+                        mLoadMeetingsTask = new LoadMeetingsTask();
+                        mLoadMeetingsTask.execute();
+                        break;
+                }
+            }
+        };
+
+        private boolean mIsReceiverRegistered;
+
+        private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                if (Intent.ACTION_PROVIDER_CHANGED.equals(intent.getAction())
+                        && WearableCalendarContract.CONTENT_URI.equals(intent.getData())) {
+                    cancelLoadMeetingTask();
+                    mLoadMeetingsHandler.sendEmptyMessage(MSG_LOAD_MEETINGS);
+                }
+            }
+        };
+
+        @Override
+        public void onCreate(SurfaceHolder holder) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onCreate");
+            }
+            super.onCreate(holder);
+            setWatchFaceStyle(new WatchFaceStyle.Builder(CalendarWatchFaceService.this)
+                    .setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
+                    .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
+                    .setShowSystemUiTime(false)
+                    .build());
+
+            mTextPaint.setColor(FOREGROUND_COLOR);
+            mTextPaint.setTextSize(TEXT_SIZE);
+
+            mLoadMeetingsHandler.sendEmptyMessage(MSG_LOAD_MEETINGS);
+        }
+
+        @Override
+        public void onDestroy() {
+            mLoadMeetingsHandler.removeMessages(MSG_LOAD_MEETINGS);
+            cancelLoadMeetingTask();
+            super.onDestroy();
+        }
+
+        @Override
+        public void onDraw(Canvas canvas, Rect bounds) {
+            // Create or update mLayout if necessary.
+            if (mLayout == null || mLayoutWidth != bounds.width()) {
+                mLayoutWidth = bounds.width();
+                mLayout = new DynamicLayout(mEditable, mTextPaint, mLayoutWidth,
+                        Layout.Alignment.ALIGN_NORMAL, 1 /* spacingMult */, 0 /* spacingAdd */,
+                        false /* includePad */);
+            }
+
+            // Update the contents of mEditable.
+            mEditable.clear();
+            mEditable.append(Html.fromHtml(getResources().getQuantityString(
+                    R.plurals.calendar_meetings, mNumMeetings, mNumMeetings)));
+
+            // Draw the text on a solid background.
+            canvas.drawColor(BACKGROUND_COLOR);
+            mLayout.draw(canvas);
+        }
+
+        @Override
+        public void onVisibilityChanged(boolean visible) {
+            super.onVisibilityChanged(visible);
+            if (visible) {
+                IntentFilter filter = new IntentFilter(Intent.ACTION_PROVIDER_CHANGED);
+                filter.addDataScheme("content");
+                filter.addDataAuthority(WearableCalendarContract.AUTHORITY, null);
+                registerReceiver(mBroadcastReceiver, filter);
+                mIsReceiverRegistered = true;
+
+                mLoadMeetingsHandler.sendEmptyMessage(MSG_LOAD_MEETINGS);
+            } else {
+                if (mIsReceiverRegistered) {
+                    unregisterReceiver(mBroadcastReceiver);
+                    mIsReceiverRegistered = false;
+                }
+                mLoadMeetingsHandler.removeMessages(MSG_LOAD_MEETINGS);
+            }
+        }
+
+        private void onMeetingsLoaded(Integer result) {
+            if (result != null) {
+                mNumMeetings = result;
+                invalidate();
+            }
+        }
+
+        private void cancelLoadMeetingTask() {
+            if (mLoadMeetingsTask != null) {
+                mLoadMeetingsTask.cancel(true);
+            }
+        }
+
+        /**
+         * Asynchronous task to load the meetings from the content provider and report the number of
+         * meetings back via {@link #onMeetingsLoaded}.
+         */
+        private class LoadMeetingsTask extends AsyncTask<Void, Void, Integer> {
+            private PowerManager.WakeLock mWakeLock;
+
+            @Override
+            protected Integer doInBackground(Void... voids) {
+                PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
+                mWakeLock = powerManager.newWakeLock(
+                        PowerManager.PARTIAL_WAKE_LOCK, "CalendarWatchFaceWakeLock");
+                mWakeLock.acquire();
+
+                long begin = System.currentTimeMillis();
+                Uri.Builder builder =
+                        WearableCalendarContract.Instances.CONTENT_URI.buildUpon();
+                ContentUris.appendId(builder, begin);
+                ContentUris.appendId(builder, begin + DateUtils.DAY_IN_MILLIS);
+                final Cursor cursor = getContentResolver().query(builder.build(),
+                        null, null, null, null);
+                int numMeetings = cursor.getCount();
+                if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                    Log.v(TAG, "Num meetings: " + numMeetings);
+                }
+                return numMeetings;
+            }
+
+            @Override
+            protected void onPostExecute(Integer result) {
+                releaseWakeLock();
+                onMeetingsLoaded(result);
+            }
+
+            @Override
+            protected void onCancelled() {
+                releaseWakeLock();
+            }
+
+            private void releaseWakeLock() {
+                if (mWakeLock != null) {
+                    mWakeLock.release();
+                    mWakeLock = null;
+                }
+            }
+        }
+    }
+}
\ No newline at end of file
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/CardBoundsWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/CardBoundsWatchFaceService.java
new file mode 100644
index 0000000..359d7af
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/CardBoundsWatchFaceService.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.graphics.Canvas;
+import android.graphics.Color;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.support.wearable.watchface.CanvasWatchFaceService;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.util.Log;
+import android.view.SurfaceHolder;
+
+/**
+ * Proof of concept sample watch face that demonstrates how a watch face can detect where the peek
+ * card is. This watch face draws a border around the area where the peeking card is.
+ */
+public class CardBoundsWatchFaceService extends CanvasWatchFaceService {
+
+    private static final String TAG = "CardBoundsWatchFace";
+
+    @Override
+    public Engine onCreateEngine() {
+        return new Engine();
+    }
+
+    private class Engine extends CanvasWatchFaceService.Engine {
+
+        static final int BORDER_WIDTH_PX = 5;
+
+        final Rect mCardBounds = new Rect();
+        final Paint mPaint = new Paint();
+
+        @Override
+        public void onCreate(SurfaceHolder holder) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onCreate");
+            }
+            super.onCreate(holder);
+            setWatchFaceStyle(new WatchFaceStyle.Builder(CardBoundsWatchFaceService.this)
+                    .setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
+                    .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
+                    .setShowSystemUiTime(true)
+                    .setPeekOpacityMode(WatchFaceStyle.PEEK_OPACITY_MODE_TRANSLUCENT)
+                    .build());
+        }
+
+        @Override
+        public void onAmbientModeChanged(boolean inAmbientMode) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAmbientModeChanged: " + inAmbientMode);
+            }
+            super.onAmbientModeChanged(inAmbientMode);
+            invalidate();
+        }
+
+        @Override
+        public void onPeekCardPositionUpdate(Rect bounds) {
+            super.onPeekCardPositionUpdate(bounds);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onPeekCardPositionUpdate: " + bounds);
+            }
+            super.onPeekCardPositionUpdate(bounds);
+            if (!bounds.equals(mCardBounds)) {
+                mCardBounds.set(bounds);
+                invalidate();
+            }
+        }
+
+        @Override
+        public void onDraw(Canvas canvas, Rect bounds) {
+            // Clear screen.
+            canvas.drawColor(isInAmbientMode() ? Color.BLACK : Color.BLUE);
+
+            // Draw border around card in interactive mode.
+            if (!isInAmbientMode()) {
+                mPaint.setColor(Color.MAGENTA);
+                canvas.drawRect(mCardBounds.left - BORDER_WIDTH_PX,
+                        mCardBounds.top - BORDER_WIDTH_PX,
+                        mCardBounds.right + BORDER_WIDTH_PX,
+                        mCardBounds.bottom + BORDER_WIDTH_PX, mPaint);
+            }
+
+            // Fill area under card.
+            mPaint.setColor(isInAmbientMode() ? Color.RED : Color.GREEN);
+            canvas.drawRect(mCardBounds, mPaint);
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceConfigListenerService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceConfigListenerService.java
new file mode 100644
index 0000000..725c51a
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceConfigListenerService.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.os.Bundle;
+import android.util.Log;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.wearable.DataMap;
+import com.google.android.gms.wearable.MessageEvent;
+import com.google.android.gms.wearable.Wearable;
+import com.google.android.gms.wearable.WearableListenerService;
+
+import java.util.concurrent.TimeUnit;
+
+/**
+ * A {@link WearableListenerService} listening for {@link DigitalWatchFaceService} config messages
+ * and updating the config {@link com.google.android.gms.wearable.DataItem} accordingly.
+ */
+public class DigitalWatchFaceConfigListenerService extends WearableListenerService
+        implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
+    private static final String TAG = "DigitalListenerService";
+
+    private GoogleApiClient mGoogleApiClient;
+
+    @Override // WearableListenerService
+    public void onMessageReceived(MessageEvent messageEvent) {
+        if (!messageEvent.getPath().equals(DigitalWatchFaceUtil.PATH_WITH_FEATURE)) {
+            return;
+        }
+        byte[] rawData = messageEvent.getData();
+        // It's allowed that the message carries only some of the keys used in the config DataItem
+        // and skips the ones that we don't want to change.
+        DataMap configKeysToOverwrite = DataMap.fromByteArray(rawData);
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "Received watch face config message: " + configKeysToOverwrite);
+        }
+
+        if (mGoogleApiClient == null) {
+            mGoogleApiClient = new GoogleApiClient.Builder(this).addConnectionCallbacks(this)
+                    .addOnConnectionFailedListener(this).addApi(Wearable.API).build();
+        }
+        if (!mGoogleApiClient.isConnected()) {
+            ConnectionResult connectionResult =
+                    mGoogleApiClient.blockingConnect(30, TimeUnit.SECONDS);
+
+            if (!connectionResult.isSuccess()) {
+                Log.e(TAG, "Failed to connect to GoogleApiClient.");
+                return;
+            }
+        }
+
+        DigitalWatchFaceUtil.overwriteKeysInConfigDataMap(mGoogleApiClient, configKeysToOverwrite);
+    }
+
+    @Override // GoogleApiClient.ConnectionCallbacks
+    public void onConnected(Bundle connectionHint) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "onConnected: " + connectionHint);
+        }
+    }
+
+    @Override  // GoogleApiClient.ConnectionCallbacks
+    public void onConnectionSuspended(int cause) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "onConnectionSuspended: " + cause);
+        }
+    }
+
+    @Override  // GoogleApiClient.OnConnectionFailedListener
+    public void onConnectionFailed(ConnectionResult result) {
+        if (Log.isLoggable(TAG, Log.DEBUG)) {
+            Log.d(TAG, "onConnectionFailed: " + result);
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceService.java
new file mode 100644
index 0000000..b8b1314
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceService.java
@@ -0,0 +1,605 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.Typeface;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.Message;
+import android.support.wearable.watchface.CanvasWatchFaceService;
+import android.support.wearable.watchface.WatchFaceService;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.text.format.Time;
+import android.util.Log;
+import android.view.SurfaceHolder;
+import android.view.WindowInsets;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.wearable.DataApi;
+import com.google.android.gms.wearable.DataEvent;
+import com.google.android.gms.wearable.DataEventBuffer;
+import com.google.android.gms.wearable.DataItem;
+import com.google.android.gms.wearable.DataMap;
+import com.google.android.gms.wearable.DataMapItem;
+import com.google.android.gms.wearable.Wearable;
+
+import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Sample digital watch face with blinking colons and seconds. In ambient mode, the seconds are
+ * replaced with an AM/PM indicator and the colons don't blink. On devices with low-bit ambient
+ * mode, the text is drawn without anti-aliasing in ambient mode. On devices which require burn-in
+ * protection, the hours are drawn in normal rather than bold. The time is drawn with less contrast
+ * and without seconds in mute mode.
+ */
+public class DigitalWatchFaceService extends CanvasWatchFaceService {
+    private static final String TAG = "DigitalWatchFaceService";
+
+    private static final Typeface BOLD_TYPEFACE =
+            Typeface.create(Typeface.SANS_SERIF, Typeface.BOLD);
+    private static final Typeface NORMAL_TYPEFACE =
+            Typeface.create(Typeface.SANS_SERIF, Typeface.NORMAL);
+
+    /**
+     * Update rate in milliseconds for normal (not ambient and not mute) mode. We update twice
+     * a second to blink the colons.
+     */
+    private static final long NORMAL_UPDATE_RATE_MS = 500;
+
+    /**
+     * Update rate in milliseconds for mute mode. We update every minute, like in ambient mode.
+     */
+    private static final long MUTE_UPDATE_RATE_MS = TimeUnit.MINUTES.toMillis(1);
+
+    @Override
+    public Engine onCreateEngine() {
+        return new Engine();
+    }
+
+    private class Engine extends CanvasWatchFaceService.Engine implements DataApi.DataListener,
+            GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {
+        static final String COLON_STRING = ":";
+
+        /** Alpha value for drawing time when in mute mode. */
+        static final int MUTE_ALPHA = 100;
+
+        /** Alpha value for drawing time when not in mute mode. */
+        static final int NORMAL_ALPHA = 255;
+
+        static final int MSG_UPDATE_TIME = 0;
+
+        /** How often {@link #mUpdateTimeHandler} ticks in milliseconds. */
+        long mInteractiveUpdateRateMs = NORMAL_UPDATE_RATE_MS;
+
+        /** Handler to update the time periodically in interactive mode. */
+        final Handler mUpdateTimeHandler = new Handler() {
+            @Override
+            public void handleMessage(Message message) {
+                switch (message.what) {
+                    case MSG_UPDATE_TIME:
+                        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                            Log.v(TAG, "updating time");
+                        }
+                        invalidate();
+                        if (shouldTimerBeRunning()) {
+                            long timeMs = System.currentTimeMillis();
+                            long delayMs =
+                                    mInteractiveUpdateRateMs - (timeMs % mInteractiveUpdateRateMs);
+                            mUpdateTimeHandler.sendEmptyMessageDelayed(MSG_UPDATE_TIME, delayMs);
+                        }
+                        break;
+                }
+            }
+        };
+
+        GoogleApiClient mGoogleApiClient = new GoogleApiClient.Builder(DigitalWatchFaceService.this)
+                .addConnectionCallbacks(this)
+                .addOnConnectionFailedListener(this)
+                .addApi(Wearable.API)
+                .build();
+
+        final BroadcastReceiver mTimeZoneReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                mTime.clear(intent.getStringExtra("time-zone"));
+                mTime.setToNow();
+            }
+        };
+        boolean mRegisteredTimeZoneReceiver = false;
+
+        Paint mBackgroundPaint;
+        Paint mHourPaint;
+        Paint mMinutePaint;
+        Paint mSecondPaint;
+        Paint mAmPmPaint;
+        Paint mColonPaint;
+        float mColonWidth;
+        boolean mMute;
+        Time mTime;
+        boolean mShouldDrawColons;
+        float mXOffset;
+        float mYOffset;
+        String mAmString;
+        String mPmString;
+        int mInteractiveBackgroundColor =
+                DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_BACKGROUND;
+        int mInteractiveHourDigitsColor =
+                DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_HOUR_DIGITS;
+        int mInteractiveMinuteDigitsColor =
+                DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_MINUTE_DIGITS;
+        int mInteractiveSecondDigitsColor =
+                DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_SECOND_DIGITS;
+
+        /**
+         * Whether the display supports fewer bits for each color in ambient mode. When true, we
+         * disable anti-aliasing in ambient mode.
+         */
+        boolean mLowBitAmbient;
+
+        @Override
+        public void onCreate(SurfaceHolder holder) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onCreate");
+            }
+            super.onCreate(holder);
+
+            setWatchFaceStyle(new WatchFaceStyle.Builder(DigitalWatchFaceService.this)
+                    .setCardPeekMode(WatchFaceStyle.PEEK_MODE_VARIABLE)
+                    .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
+                    .setShowSystemUiTime(false)
+                    .build());
+            Resources resources = DigitalWatchFaceService.this.getResources();
+            mYOffset = resources.getDimension(R.dimen.digital_y_offset);
+            mAmString = resources.getString(R.string.digital_am);
+            mPmString = resources.getString(R.string.digital_pm);
+
+            mBackgroundPaint = new Paint();
+            mBackgroundPaint.setColor(mInteractiveBackgroundColor);
+            mHourPaint = createTextPaint(mInteractiveHourDigitsColor, BOLD_TYPEFACE);
+            mMinutePaint = createTextPaint(mInteractiveMinuteDigitsColor);
+            mSecondPaint = createTextPaint(mInteractiveSecondDigitsColor);
+            mAmPmPaint = createTextPaint(resources.getColor(R.color.digital_am_pm));
+            mColonPaint = createTextPaint(resources.getColor(R.color.digital_colons));
+
+            mTime = new Time();
+        }
+
+        @Override
+        public void onDestroy() {
+            mUpdateTimeHandler.removeMessages(MSG_UPDATE_TIME);
+            super.onDestroy();
+        }
+
+        private Paint createTextPaint(int defaultInteractiveColor) {
+            return createTextPaint(defaultInteractiveColor, NORMAL_TYPEFACE);
+        }
+
+        private Paint createTextPaint(int defaultInteractiveColor, Typeface typeface) {
+            Paint paint = new Paint();
+            paint.setColor(defaultInteractiveColor);
+            paint.setTypeface(typeface);
+            paint.setAntiAlias(true);
+            return paint;
+        }
+
+        @Override
+        public void onVisibilityChanged(boolean visible) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onVisibilityChanged: " + visible);
+            }
+            super.onVisibilityChanged(visible);
+
+            if (visible) {
+                mGoogleApiClient.connect();
+
+                registerReceiver();
+
+                // Update time zone in case it changed while we weren't visible.
+                mTime.clear(TimeZone.getDefault().getID());
+                mTime.setToNow();
+            } else {
+                unregisterReceiver();
+
+                if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
+                    Wearable.DataApi.removeListener(mGoogleApiClient, this);
+                    mGoogleApiClient.disconnect();
+                }
+            }
+
+            // Whether the timer should be running depends on whether we're visible (as well as
+            // whether we're in ambient mode), so we may need to start or stop the timer.
+            updateTimer();
+        }
+
+        private void registerReceiver() {
+            if (mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = true;
+            IntentFilter filter = new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED);
+            DigitalWatchFaceService.this.registerReceiver(mTimeZoneReceiver, filter);
+        }
+
+        private void unregisterReceiver() {
+            if (!mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = false;
+            DigitalWatchFaceService.this.unregisterReceiver(mTimeZoneReceiver);
+        }
+
+        @Override
+        public void onApplyWindowInsets(WindowInsets insets) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onApplyWindowInsets: " + (insets.isRound() ? "round" : "square"));
+            }
+            super.onApplyWindowInsets(insets);
+
+            // Load resources that have alternate values for round watches.
+            Resources resources = DigitalWatchFaceService.this.getResources();
+            boolean isRound = insets.isRound();
+            mXOffset = resources.getDimension(isRound
+                    ? R.dimen.digital_x_offset_round : R.dimen.digital_x_offset);
+            float textSize = resources.getDimension(isRound
+                    ? R.dimen.digital_text_size_round : R.dimen.digital_text_size);
+            float amPmSize = resources.getDimension(isRound
+                    ? R.dimen.digital_am_pm_size_round : R.dimen.digital_am_pm_size);
+
+            mHourPaint.setTextSize(textSize);
+            mMinutePaint.setTextSize(textSize);
+            mSecondPaint.setTextSize(textSize);
+            mAmPmPaint.setTextSize(amPmSize);
+            mColonPaint.setTextSize(textSize);
+
+            mColonWidth = mColonPaint.measureText(COLON_STRING);
+        }
+
+        @Override
+        public void onPropertiesChanged(Bundle properties) {
+            super.onPropertiesChanged(properties);
+
+            boolean burnInProtection = properties.getBoolean(PROPERTY_BURN_IN_PROTECTION, false);
+            mHourPaint.setTypeface(burnInProtection ? NORMAL_TYPEFACE : BOLD_TYPEFACE);
+
+            mLowBitAmbient = properties.getBoolean(PROPERTY_LOW_BIT_AMBIENT, false);
+
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onPropertiesChanged: burn-in protection = " + burnInProtection
+                        + ", low-bit ambient = " + mLowBitAmbient);
+            }
+        }
+
+        @Override
+        public void onTimeTick() {
+            super.onTimeTick();
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onTimeTick: ambient = " + isInAmbientMode());
+            }
+            invalidate();
+        }
+
+        @Override
+        public void onAmbientModeChanged(boolean inAmbientMode) {
+            super.onAmbientModeChanged(inAmbientMode);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAmbientModeChanged: " + inAmbientMode);
+            }
+            adjustPaintColorToCurrentMode(mBackgroundPaint, mInteractiveBackgroundColor,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_BACKGROUND);
+            adjustPaintColorToCurrentMode(mHourPaint, mInteractiveHourDigitsColor,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_HOUR_DIGITS);
+            adjustPaintColorToCurrentMode(mMinutePaint, mInteractiveMinuteDigitsColor,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_MINUTE_DIGITS);
+            // Actually, the seconds are not rendered in the ambient mode, so we could pass just any
+            // value as ambientColor here.
+            adjustPaintColorToCurrentMode(mSecondPaint, mInteractiveSecondDigitsColor,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_SECOND_DIGITS);
+
+            if (mLowBitAmbient) {
+                boolean antiAlias = !inAmbientMode;
+                mHourPaint.setAntiAlias(antiAlias);
+                mMinutePaint.setAntiAlias(antiAlias);
+                mSecondPaint.setAntiAlias(antiAlias);
+                mAmPmPaint.setAntiAlias(antiAlias);
+                mColonPaint.setAntiAlias(antiAlias);
+            }
+            invalidate();
+
+            // Whether the timer should be running depends on whether we're in ambient mode (as well
+            // as whether we're visible), so we may need to start or stop the timer.
+            updateTimer();
+        }
+
+        private void adjustPaintColorToCurrentMode(Paint paint, int interactiveColor,
+                int ambientColor) {
+            paint.setColor(isInAmbientMode() ? ambientColor : interactiveColor);
+        }
+
+        @Override
+        public void onInterruptionFilterChanged(int interruptionFilter) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onInterruptionFilterChanged: " + interruptionFilter);
+            }
+            super.onInterruptionFilterChanged(interruptionFilter);
+
+            boolean inMuteMode = interruptionFilter == WatchFaceService.INTERRUPTION_FILTER_NONE;
+            // We only need to update once a minute in mute mode.
+            setInteractiveUpdateRateMs(inMuteMode ? MUTE_UPDATE_RATE_MS : NORMAL_UPDATE_RATE_MS);
+
+            if (mMute != inMuteMode) {
+                mMute = inMuteMode;
+                int alpha = inMuteMode ? MUTE_ALPHA : NORMAL_ALPHA;
+                mHourPaint.setAlpha(alpha);
+                mMinutePaint.setAlpha(alpha);
+                mColonPaint.setAlpha(alpha);
+                mAmPmPaint.setAlpha(alpha);
+                invalidate();
+            }
+        }
+
+        public void setInteractiveUpdateRateMs(long updateRateMs) {
+            if (updateRateMs == mInteractiveUpdateRateMs) {
+                return;
+            }
+            mInteractiveUpdateRateMs = updateRateMs;
+
+            // Stop and restart the timer so the new update rate takes effect immediately.
+            if (shouldTimerBeRunning()) {
+                updateTimer();
+            }
+        }
+
+        private void updatePaintIfInteractive(Paint paint, int interactiveColor) {
+            if (!isInAmbientMode() && paint != null) {
+                paint.setColor(interactiveColor);
+            }
+        }
+
+        private void setInteractiveBackgroundColor(int color) {
+            mInteractiveBackgroundColor = color;
+            updatePaintIfInteractive(mBackgroundPaint, color);
+        }
+
+        private void setInteractiveHourDigitsColor(int color) {
+            mInteractiveHourDigitsColor = color;
+            updatePaintIfInteractive(mHourPaint, color);
+        }
+
+        private void setInteractiveMinuteDigitsColor(int color) {
+            mInteractiveMinuteDigitsColor = color;
+            updatePaintIfInteractive(mMinutePaint, color);
+        }
+
+        private void setInteractiveSecondDigitsColor(int color) {
+            mInteractiveSecondDigitsColor = color;
+            updatePaintIfInteractive(mSecondPaint, color);
+        }
+
+        private String formatTwoDigitNumber(int hour) {
+            return String.format("%02d", hour);
+        }
+
+        private int convertTo12Hour(int hour) {
+            int result = hour % 12;
+            return (result == 0) ? 12 : result;
+        }
+
+        private String getAmPmString(int hour) {
+            return (hour < 12) ? mAmString : mPmString;
+        }
+
+        @Override
+        public void onDraw(Canvas canvas, Rect bounds) {
+            mTime.setToNow();
+
+            // Show colons for the first half of each second so the colons blink on when the time
+            // updates.
+            mShouldDrawColons = (System.currentTimeMillis() % 1000) < 500;
+
+            // Draw the background.
+            canvas.drawRect(0, 0, bounds.width(), bounds.height(), mBackgroundPaint);
+
+            // Draw the hours.
+            float x = mXOffset;
+            String hourString = String.valueOf(convertTo12Hour(mTime.hour));
+            canvas.drawText(hourString, x, mYOffset, mHourPaint);
+            x += mHourPaint.measureText(hourString);
+
+            // In ambient and mute modes, always draw the first colon. Otherwise, draw the
+            // first colon for the first half of each second.
+            if (isInAmbientMode() || mMute || mShouldDrawColons) {
+                canvas.drawText(COLON_STRING, x, mYOffset, mColonPaint);
+            }
+            x += mColonWidth;
+
+            // Draw the minutes.
+            String minuteString = formatTwoDigitNumber(mTime.minute);
+            canvas.drawText(minuteString, x, mYOffset, mMinutePaint);
+            x += mMinutePaint.measureText(minuteString);
+
+            // In ambient and mute modes, draw AM/PM. Otherwise, draw a second blinking
+            // colon followed by the seconds.
+            if (isInAmbientMode() || mMute) {
+                x += mColonWidth;
+                canvas.drawText(getAmPmString(mTime.hour), x, mYOffset, mAmPmPaint);
+            } else {
+                if (mShouldDrawColons) {
+                    canvas.drawText(COLON_STRING, x, mYOffset, mColonPaint);
+                }
+                x += mColonWidth;
+                canvas.drawText(formatTwoDigitNumber(mTime.second), x, mYOffset,
+                        mSecondPaint);
+            }
+        }
+
+        /**
+         * Starts the {@link #mUpdateTimeHandler} timer if it should be running and isn't currently
+         * or stops it if it shouldn't be running but currently is.
+         */
+        private void updateTimer() {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "updateTimer");
+            }
+            mUpdateTimeHandler.removeMessages(MSG_UPDATE_TIME);
+            if (shouldTimerBeRunning()) {
+                mUpdateTimeHandler.sendEmptyMessage(MSG_UPDATE_TIME);
+            }
+        }
+
+        /**
+         * Returns whether the {@link #mUpdateTimeHandler} timer should be running. The timer should
+         * only run when we're visible and in interactive mode.
+         */
+        private boolean shouldTimerBeRunning() {
+            return isVisible() && !isInAmbientMode();
+        }
+
+        private void updateConfigDataItemAndUiOnStartup() {
+            DigitalWatchFaceUtil.fetchConfigDataMap(mGoogleApiClient,
+                    new DigitalWatchFaceUtil.FetchConfigDataMapCallback() {
+                        @Override
+                        public void onConfigDataMapFetched(DataMap startupConfig) {
+                            // If the DataItem hasn't been created yet or some keys are missing,
+                            // use the default values.
+                            setDefaultValuesForMissingConfigKeys(startupConfig);
+                            DigitalWatchFaceUtil.putConfigDataItem(mGoogleApiClient, startupConfig);
+
+                            updateUiForConfigDataMap(startupConfig);
+                        }
+                    }
+            );
+        }
+
+        private void setDefaultValuesForMissingConfigKeys(DataMap config) {
+            addIntKeyIfMissing(config, DigitalWatchFaceUtil.KEY_BACKGROUND_COLOR,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_BACKGROUND);
+            addIntKeyIfMissing(config, DigitalWatchFaceUtil.KEY_HOURS_COLOR,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_HOUR_DIGITS);
+            addIntKeyIfMissing(config, DigitalWatchFaceUtil.KEY_MINUTES_COLOR,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_MINUTE_DIGITS);
+            addIntKeyIfMissing(config, DigitalWatchFaceUtil.KEY_SECONDS_COLOR,
+                    DigitalWatchFaceUtil.COLOR_VALUE_DEFAULT_AND_AMBIENT_SECOND_DIGITS);
+        }
+
+        private void addIntKeyIfMissing(DataMap config, String key, int color) {
+            if (!config.containsKey(key)) {
+                config.putInt(key, color);
+            }
+        }
+
+        @Override // DataApi.DataListener
+        public void onDataChanged(DataEventBuffer dataEvents) {
+            try {
+                for (DataEvent dataEvent : dataEvents) {
+                    if (dataEvent.getType() != DataEvent.TYPE_CHANGED) {
+                        continue;
+                    }
+
+                    DataItem dataItem = dataEvent.getDataItem();
+                    if (!dataItem.getUri().getPath().equals(
+                            DigitalWatchFaceUtil.PATH_WITH_FEATURE)) {
+                        continue;
+                    }
+
+                    DataMapItem dataMapItem = DataMapItem.fromDataItem(dataItem);
+                    DataMap config = dataMapItem.getDataMap();
+                    if (Log.isLoggable(TAG, Log.DEBUG)) {
+                        Log.d(TAG, "Config DataItem updated:" + config);
+                    }
+                    updateUiForConfigDataMap(config);
+                }
+            } finally {
+                dataEvents.close();
+            }
+        }
+
+        private void updateUiForConfigDataMap(final DataMap config) {
+            boolean uiUpdated = false;
+            for (String configKey : config.keySet()) {
+                if (!config.containsKey(configKey)) {
+                    continue;
+                }
+                int color = config.getInt(configKey);
+                if (Log.isLoggable(TAG, Log.DEBUG)) {
+                    Log.d(TAG, "Found watch face config key: " + configKey + " -> "
+                            + Integer.toHexString(color));
+                }
+                if (updateUiForKey(configKey, color)) {
+                    uiUpdated = true;
+                }
+            }
+            if (uiUpdated) {
+                invalidate();
+            }
+        }
+
+        /**
+         * Updates the color of a UI item according to the given {@code configKey}. Does nothing if
+         * {@code configKey} isn't recognized.
+         *
+         * @return whether UI has been updated
+         */
+        private boolean updateUiForKey(String configKey, int color) {
+            if (configKey.equals(DigitalWatchFaceUtil.KEY_BACKGROUND_COLOR)) {
+                setInteractiveBackgroundColor(color);
+            } else if (configKey.equals(DigitalWatchFaceUtil.KEY_HOURS_COLOR)) {
+                setInteractiveHourDigitsColor(color);
+            } else if (configKey.equals(DigitalWatchFaceUtil.KEY_MINUTES_COLOR)) {
+                setInteractiveMinuteDigitsColor(color);
+            } else if (configKey.equals(DigitalWatchFaceUtil.KEY_SECONDS_COLOR)) {
+                setInteractiveSecondDigitsColor(color);
+            } else {
+                Log.w(TAG, "Ignoring unknown config key: " + configKey);
+                return false;
+            }
+            return true;
+        }
+
+        @Override  // GoogleApiClient.ConnectionCallbacks
+        public void onConnected(Bundle connectionHint) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onConnected: " + connectionHint);
+            }
+            Wearable.DataApi.addListener(mGoogleApiClient, Engine.this);
+            updateConfigDataItemAndUiOnStartup();
+        }
+
+        @Override  // GoogleApiClient.ConnectionCallbacks
+        public void onConnectionSuspended(int cause) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onConnectionSuspended: " + cause);
+            }
+        }
+
+        @Override  // GoogleApiClient.OnConnectionFailedListener
+        public void onConnectionFailed(ConnectionResult result) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onConnectionFailed: " + result);
+            }
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceUtil.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceUtil.java
new file mode 100644
index 0000000..1c4af70
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceUtil.java
@@ -0,0 +1,205 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.graphics.Color;
+import android.net.Uri;
+import android.util.Log;
+
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.common.api.ResultCallback;
+import com.google.android.gms.wearable.DataApi;
+import com.google.android.gms.wearable.DataItem;
+import com.google.android.gms.wearable.DataMap;
+import com.google.android.gms.wearable.DataMapItem;
+import com.google.android.gms.wearable.NodeApi;
+import com.google.android.gms.wearable.PutDataMapRequest;
+import com.google.android.gms.wearable.Wearable;
+
+public final class DigitalWatchFaceUtil {
+    private static final String TAG = "DigitalWatchFaceUtil";
+
+    /**
+     * The {@link DataMap} key for {@link DigitalWatchFaceService} background color name.
+     * The color name must be a {@link String} recognized by {@link Color#parseColor}.
+     */
+    public static final String KEY_BACKGROUND_COLOR = "BACKGROUND_COLOR";
+
+    /**
+     * The {@link DataMap} key for {@link DigitalWatchFaceService} hour digits color name.
+     * The color name must be a {@link String} recognized by {@link Color#parseColor}.
+     */
+    public static final String KEY_HOURS_COLOR = "HOURS_COLOR";
+
+    /**
+     * The {@link DataMap} key for {@link DigitalWatchFaceService} minute digits color name.
+     * The color name must be a {@link String} recognized by {@link Color#parseColor}.
+     */
+    public static final String KEY_MINUTES_COLOR = "MINUTES_COLOR";
+
+    /**
+     * The {@link DataMap} key for {@link DigitalWatchFaceService} second digits color name.
+     * The color name must be a {@link String} recognized by {@link Color#parseColor}.
+     */
+    public static final String KEY_SECONDS_COLOR = "SECONDS_COLOR";
+
+    /**
+     * The path for the {@link DataItem} containing {@link DigitalWatchFaceService} configuration.
+     */
+    public static final String PATH_WITH_FEATURE = "/watch_face_config/Digital";
+
+    /**
+     * Name of the default interactive mode background color and the ambient mode background color.
+     */
+    public static final String COLOR_NAME_DEFAULT_AND_AMBIENT_BACKGROUND = "Black";
+    public static final int COLOR_VALUE_DEFAULT_AND_AMBIENT_BACKGROUND =
+            parseColor(COLOR_NAME_DEFAULT_AND_AMBIENT_BACKGROUND);
+
+    /**
+     * Name of the default interactive mode hour digits color and the ambient mode hour digits
+     * color.
+     */
+    public static final String COLOR_NAME_DEFAULT_AND_AMBIENT_HOUR_DIGITS = "White";
+    public static final int COLOR_VALUE_DEFAULT_AND_AMBIENT_HOUR_DIGITS =
+            parseColor(COLOR_NAME_DEFAULT_AND_AMBIENT_HOUR_DIGITS);
+
+    /**
+     * Name of the default interactive mode minute digits color and the ambient mode minute digits
+     * color.
+     */
+    public static final String COLOR_NAME_DEFAULT_AND_AMBIENT_MINUTE_DIGITS = "White";
+    public static final int COLOR_VALUE_DEFAULT_AND_AMBIENT_MINUTE_DIGITS =
+            parseColor(COLOR_NAME_DEFAULT_AND_AMBIENT_MINUTE_DIGITS);
+
+    /**
+     * Name of the default interactive mode second digits color and the ambient mode second digits
+     * color.
+     */
+    public static final String COLOR_NAME_DEFAULT_AND_AMBIENT_SECOND_DIGITS = "Gray";
+    public static final int COLOR_VALUE_DEFAULT_AND_AMBIENT_SECOND_DIGITS =
+            parseColor(COLOR_NAME_DEFAULT_AND_AMBIENT_SECOND_DIGITS);
+
+    /**
+     * Callback interface to perform an action with the current config {@link DataMap} for
+     * {@link DigitalWatchFaceService}.
+     */
+    public interface FetchConfigDataMapCallback {
+        /**
+         * Callback invoked with the current config {@link DataMap} for
+         * {@link DigitalWatchFaceService}.
+         */
+        void onConfigDataMapFetched(DataMap config);
+    }
+
+    private static int parseColor(String colorName) {
+        return Color.parseColor(colorName.toLowerCase());
+    }
+
+    /**
+     * Asynchronously fetches the current config {@link DataMap} for {@link DigitalWatchFaceService}
+     * and passes it to the given callback.
+     * <p>
+     * If the current config {@link DataItem} doesn't exist, it isn't created and the callback
+     * receives an empty DataMap.
+     */
+    public static void fetchConfigDataMap(final GoogleApiClient client,
+            final FetchConfigDataMapCallback callback) {
+        Wearable.NodeApi.getLocalNode(client).setResultCallback(
+                new ResultCallback<NodeApi.GetLocalNodeResult>() {
+                    @Override
+                    public void onResult(NodeApi.GetLocalNodeResult getLocalNodeResult) {
+                        String localNode = getLocalNodeResult.getNode().getId();
+                        Uri uri = new Uri.Builder()
+                                .scheme("wear")
+                                .path(DigitalWatchFaceUtil.PATH_WITH_FEATURE)
+                                .authority(localNode)
+                                .build();
+                        Wearable.DataApi.getDataItem(client, uri)
+                                .setResultCallback(new DataItemResultCallback(callback));
+                    }
+                }
+        );
+    }
+
+    /**
+     * Overwrites (or sets, if not present) the keys in the current config {@link DataItem} with
+     * the ones appearing in the given {@link DataMap}. If the config DataItem doesn't exist,
+     * it's created.
+     * <p>
+     * It is allowed that only some of the keys used in the config DataItem appear in
+     * {@code configKeysToOverwrite}. The rest of the keys remains unmodified in this case.
+     */
+    public static void overwriteKeysInConfigDataMap(final GoogleApiClient googleApiClient,
+            final DataMap configKeysToOverwrite) {
+
+        DigitalWatchFaceUtil.fetchConfigDataMap(googleApiClient,
+                new FetchConfigDataMapCallback() {
+                    @Override
+                    public void onConfigDataMapFetched(DataMap currentConfig) {
+                        DataMap overwrittenConfig = new DataMap();
+                        overwrittenConfig.putAll(currentConfig);
+                        overwrittenConfig.putAll(configKeysToOverwrite);
+                        DigitalWatchFaceUtil.putConfigDataItem(googleApiClient, overwrittenConfig);
+                    }
+                }
+        );
+    }
+
+    /**
+     * Overwrites the current config {@link DataItem}'s {@link DataMap} with {@code newConfig}.
+     * If the config DataItem doesn't exist, it's created.
+     */
+    public static void putConfigDataItem(GoogleApiClient googleApiClient, DataMap newConfig) {
+        PutDataMapRequest putDataMapRequest = PutDataMapRequest.create(PATH_WITH_FEATURE);
+        DataMap configToPut = putDataMapRequest.getDataMap();
+        configToPut.putAll(newConfig);
+        Wearable.DataApi.putDataItem(googleApiClient, putDataMapRequest.asPutDataRequest())
+                .setResultCallback(new ResultCallback<DataApi.DataItemResult>() {
+                    @Override
+                    public void onResult(DataApi.DataItemResult dataItemResult) {
+                        if (Log.isLoggable(TAG, Log.DEBUG)) {
+                            Log.d(TAG, "putDataItem result status: " + dataItemResult.getStatus());
+                        }
+                    }
+                });
+    }
+
+    private static class DataItemResultCallback implements ResultCallback<DataApi.DataItemResult> {
+
+        private final FetchConfigDataMapCallback mCallback;
+
+        public DataItemResultCallback(FetchConfigDataMapCallback callback) {
+            mCallback = callback;
+        }
+
+        @Override
+        public void onResult(DataApi.DataItemResult dataItemResult) {
+            if (dataItemResult.getStatus().isSuccess()) {
+                if (dataItemResult.getDataItem() != null) {
+                    DataItem configDataItem = dataItemResult.getDataItem();
+                    DataMapItem dataMapItem = DataMapItem.fromDataItem(configDataItem);
+                    DataMap config = dataMapItem.getDataMap();
+                    mCallback.onConfigDataMapFetched(config);
+                } else {
+                    mCallback.onConfigDataMapFetched(new DataMap());
+                }
+            }
+        }
+    }
+
+    private DigitalWatchFaceUtil() { }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceWearableConfigActivity.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceWearableConfigActivity.java
new file mode 100644
index 0000000..4b309e6
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/DigitalWatchFaceWearableConfigActivity.java
@@ -0,0 +1,298 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.app.Activity;
+import android.content.Context;
+import android.graphics.Color;
+import android.os.Bundle;
+import android.support.v7.widget.LinearLayoutManager;
+import android.support.v7.widget.RecyclerView;
+import android.support.wearable.view.BoxInsetLayout;
+import android.support.wearable.view.CircledImageView;
+import android.support.wearable.view.WearableListView;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.WindowInsets;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+
+import com.google.android.gms.common.ConnectionResult;
+import com.google.android.gms.common.api.GoogleApiClient;
+import com.google.android.gms.wearable.DataMap;
+import com.google.android.gms.wearable.Wearable;
+
+/**
+ * The watch-side config activity for {@link DigitalWatchFaceService}, which allows for setting the
+ * background color.
+ */
+public class DigitalWatchFaceWearableConfigActivity extends Activity implements
+        WearableListView.ClickListener, WearableListView.OnScrollListener {
+    private static final String TAG = "DigitalWatchFaceConfig";
+
+    private GoogleApiClient mGoogleApiClient;
+    private TextView mHeader;
+
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_digital_config);
+
+        mHeader = (TextView) findViewById(R.id.header);
+        WearableListView listView = (WearableListView) findViewById(R.id.color_picker);
+        BoxInsetLayout content = (BoxInsetLayout) findViewById(R.id.content);
+        // BoxInsetLayout adds padding by default on round devices. Add some on square devices.
+        content.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
+            @Override
+            public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
+                if (!insets.isRound()) {
+                    v.setPaddingRelative(
+                            (int) getResources().getDimensionPixelSize(R.dimen.content_padding_start),
+                            v.getPaddingTop(),
+                            v.getPaddingEnd(),
+                            v.getPaddingBottom());
+                }
+                return v.onApplyWindowInsets(insets);
+            }
+        });
+
+        listView.setHasFixedSize(true);
+        listView.setClickListener(this);
+        listView.addOnScrollListener(this);
+
+        String[] colors = getResources().getStringArray(R.array.color_array);
+        listView.setAdapter(new ColorListAdapter(colors));
+
+        mGoogleApiClient = new GoogleApiClient.Builder(this)
+                .addConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
+                    @Override
+                    public void onConnected(Bundle connectionHint) {
+                        if (Log.isLoggable(TAG, Log.DEBUG)) {
+                            Log.d(TAG, "onConnected: " + connectionHint);
+                        }
+                    }
+
+                    @Override
+                    public void onConnectionSuspended(int cause) {
+                        if (Log.isLoggable(TAG, Log.DEBUG)) {
+                            Log.d(TAG, "onConnectionSuspended: " + cause);
+                        }
+                    }
+                })
+                .addOnConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
+                    @Override
+                    public void onConnectionFailed(ConnectionResult result) {
+                        if (Log.isLoggable(TAG, Log.DEBUG)) {
+                            Log.d(TAG, "onConnectionFailed: " + result);
+                        }
+                    }
+                })
+                .addApi(Wearable.API)
+                .build();
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mGoogleApiClient.connect();
+    }
+
+    @Override
+    protected void onStop() {
+        if (mGoogleApiClient != null && mGoogleApiClient.isConnected()) {
+            mGoogleApiClient.disconnect();
+        }
+        super.onStop();
+    }
+
+    @Override // WearableListView.ClickListener
+    public void onClick(WearableListView.ViewHolder viewHolder) {
+        ColorItemViewHolder colorItemViewHolder = (ColorItemViewHolder) viewHolder;
+        updateConfigDataItem(colorItemViewHolder.mColorItem.getColor());
+        finish();
+    }
+
+    @Override // WearableListView.ClickListener
+    public void onTopEmptyRegionClick() {}
+
+    @Override // WearableListView.OnScrollListener
+    public void onScroll(int scroll) {}
+
+    @Override // WearableListView.OnScrollListener
+    public void onAbsoluteScrollChange(int scroll) {
+        float newTranslation = Math.min(-scroll, 0);
+        mHeader.setTranslationY(newTranslation);
+    }
+
+    @Override // WearableListView.OnScrollListener
+    public void onScrollStateChanged(int scrollState) {}
+
+    @Override // WearableListView.OnScrollListener
+    public void onCentralPositionChanged(int centralPosition) {}
+
+    private void updateConfigDataItem(final int backgroundColor) {
+        DataMap configKeysToOverwrite = new DataMap();
+        configKeysToOverwrite.putInt(DigitalWatchFaceUtil.KEY_BACKGROUND_COLOR,
+                backgroundColor);
+        DigitalWatchFaceUtil.overwriteKeysInConfigDataMap(mGoogleApiClient, configKeysToOverwrite);
+    }
+
+    private class ColorListAdapter extends WearableListView.Adapter {
+        private final String[] mColors;
+
+        public ColorListAdapter(String[] colors) {
+            mColors = colors;
+        }
+
+        @Override
+        public ColorItemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+            return new ColorItemViewHolder(new ColorItem(parent.getContext()));
+        }
+
+        @Override
+        public void onBindViewHolder(WearableListView.ViewHolder holder, int position) {
+            ColorItemViewHolder colorItemViewHolder = (ColorItemViewHolder) holder;
+            String colorName = mColors[position];
+            colorItemViewHolder.mColorItem.setColor(colorName);
+
+            RecyclerView.LayoutParams layoutParams =
+                    new RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
+                            ViewGroup.LayoutParams.WRAP_CONTENT);
+            int colorPickerItemMargin = (int) getResources()
+                    .getDimension(R.dimen.digital_config_color_picker_item_margin);
+            // Add margins to first and last item to make it possible for user to tap on them.
+            if (position == 0) {
+                layoutParams.setMargins(0, colorPickerItemMargin, 0, 0);
+            } else if (position == mColors.length - 1) {
+                layoutParams.setMargins(0, 0, 0, colorPickerItemMargin);
+            } else {
+                layoutParams.setMargins(0, 0, 0, 0);
+            }
+            colorItemViewHolder.itemView.setLayoutParams(layoutParams);
+        }
+
+        @Override
+        public int getItemCount() {
+            return mColors.length;
+        }
+    }
+
+    /** The layout of a color item including image and label. */
+    private static class ColorItem extends LinearLayout implements
+            WearableListView.OnCenterProximityListener {
+        /** The duration of the expand/shrink animation. */
+        private static final int ANIMATION_DURATION_MS = 150;
+        /** The ratio for the size of a circle in shrink state. */
+        private static final float SHRINK_CIRCLE_RATIO = .75f;
+
+        private static final float SHRINK_LABEL_ALPHA = .5f;
+        private static final float EXPAND_LABEL_ALPHA = 1f;
+
+        private final TextView mLabel;
+        private final CircledImageView mColor;
+
+        private final float mExpandCircleRadius;
+        private final float mShrinkCircleRadius;
+
+        private final ObjectAnimator mExpandCircleAnimator;
+        private final ObjectAnimator mExpandLabelAnimator;
+        private final AnimatorSet mExpandAnimator;
+
+        private final ObjectAnimator mShrinkCircleAnimator;
+        private final ObjectAnimator mShrinkLabelAnimator;
+        private final AnimatorSet mShrinkAnimator;
+
+        public ColorItem(Context context) {
+            super(context);
+            View.inflate(context, R.layout.color_picker_item, this);
+
+            mLabel = (TextView) findViewById(R.id.label);
+            mColor = (CircledImageView) findViewById(R.id.color);
+
+            mExpandCircleRadius = mColor.getCircleRadius();
+            mShrinkCircleRadius = mExpandCircleRadius * SHRINK_CIRCLE_RATIO;
+
+            mShrinkCircleAnimator = ObjectAnimator.ofFloat(mColor, "circleRadius",
+                    mExpandCircleRadius, mShrinkCircleRadius);
+            mShrinkLabelAnimator = ObjectAnimator.ofFloat(mLabel, "alpha",
+                    EXPAND_LABEL_ALPHA, SHRINK_LABEL_ALPHA);
+            mShrinkAnimator = new AnimatorSet().setDuration(ANIMATION_DURATION_MS);
+            mShrinkAnimator.playTogether(mShrinkCircleAnimator, mShrinkLabelAnimator);
+
+            mExpandCircleAnimator = ObjectAnimator.ofFloat(mColor, "circleRadius",
+                    mShrinkCircleRadius, mExpandCircleRadius);
+            mExpandLabelAnimator = ObjectAnimator.ofFloat(mLabel, "alpha",
+                    SHRINK_LABEL_ALPHA, EXPAND_LABEL_ALPHA);
+            mExpandAnimator = new AnimatorSet().setDuration(ANIMATION_DURATION_MS);
+            mExpandAnimator.playTogether(mExpandCircleAnimator, mExpandLabelAnimator);
+        }
+
+        @Override
+        public void onCenterPosition(boolean animate) {
+            if (animate) {
+                mShrinkAnimator.cancel();
+                if (!mExpandAnimator.isRunning()) {
+                    mExpandCircleAnimator.setFloatValues(mColor.getCircleRadius(), mExpandCircleRadius);
+                    mExpandLabelAnimator.setFloatValues(mLabel.getAlpha(), EXPAND_LABEL_ALPHA);
+                    mExpandAnimator.start();
+                }
+            } else {
+                mExpandAnimator.cancel();
+                mColor.setCircleRadius(mExpandCircleRadius);
+                mLabel.setAlpha(EXPAND_LABEL_ALPHA);
+            }
+        }
+
+        @Override
+        public void onNonCenterPosition(boolean animate) {
+            if (animate) {
+                mExpandAnimator.cancel();
+                if (!mShrinkAnimator.isRunning()) {
+                    mShrinkCircleAnimator.setFloatValues(mColor.getCircleRadius(), mShrinkCircleRadius);
+                    mShrinkLabelAnimator.setFloatValues(mLabel.getAlpha(), SHRINK_LABEL_ALPHA);
+                    mShrinkAnimator.start();
+                }
+            } else {
+                mShrinkAnimator.cancel();
+                mColor.setCircleRadius(mShrinkCircleRadius);
+                mLabel.setAlpha(SHRINK_LABEL_ALPHA);
+            }
+        }
+
+        private void setColor(String colorName) {
+            mLabel.setText(colorName);
+            mColor.setCircleColor(Color.parseColor(colorName));
+        }
+
+        private int getColor() {
+            return mColor.getDefaultCircleColor();
+        }
+    }
+
+    private static class ColorItemViewHolder extends WearableListView.ViewHolder {
+        private final ColorItem mColorItem;
+
+        public ColorItemViewHolder(ColorItem colorItem) {
+            super(colorItem);
+            mColorItem = colorItem;
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/Gles2ColoredTriangleList.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/Gles2ColoredTriangleList.java
new file mode 100644
index 0000000..2441c65
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/Gles2ColoredTriangleList.java
@@ -0,0 +1,278 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import java.nio.ByteBuffer;
+import java.nio.ByteOrder;
+import java.nio.FloatBuffer;
+
+import android.opengl.GLES20;
+import android.opengl.GLU;
+import android.opengl.GLUtils;
+import android.util.Log;
+
+/**
+ * A list of triangles drawn in a single solid color using OpenGL ES 2.0.
+ */
+public class Gles2ColoredTriangleList {
+    private static final String TAG = "GlColoredTriangleList";
+
+    /** Whether to check for GL errors. This is slow, so not appropriate for production builds. */
+    private static final boolean CHECK_GL_ERRORS = false;
+
+    /** Number of coordinates per vertex in this array: one for each of x, y, and z. */
+    private static final int COORDS_PER_VERTEX = 3;
+
+    /** Number of bytes to store a float in GL. */
+    public static final int BYTES_PER_FLOAT = 4;
+
+    /** Number of bytes per vertex. */
+    private static final int VERTEX_STRIDE = COORDS_PER_VERTEX * BYTES_PER_FLOAT;
+
+    /** Triangles have three vertices. */
+    private static final int VERTICE_PER_TRIANGLE = 3;
+
+    /**
+     * Number of components in an OpenGL color. The components are:<ol>
+     * <li>red
+     * <li>green
+     * <li>blue
+     * <li>alpha
+     * </ol>
+     */
+    private static final int NUM_COLOR_COMPONENTS = 4;
+
+    /** Shaders to render this triangle list. */
+    private final Program mProgram;
+
+    /** The VBO containing the vertex coordinates. */
+    private final FloatBuffer mVertexBuffer;
+
+    /**
+     * Color of this triangle list represented as an array of floats in the range [0, 1] in RGBA
+     * order.
+     */
+    private final float mColor[];
+
+    /** Number of coordinates in this triangle list. */
+    private final int mNumCoords;
+
+    /**
+     * Creates a Gles2ColoredTriangleList to draw a triangle list with the given vertices and color.
+     *
+     * @param program program for drawing triangles
+     * @param triangleCoords flat array of 3D coordinates of triangle vertices in counterclockwise
+     *                       order
+     * @param color color in RGBA order, each in the range [0, 1]
+     */
+    public Gles2ColoredTriangleList(Program program, float[] triangleCoords, float[] color) {
+        if (triangleCoords.length % (VERTICE_PER_TRIANGLE * COORDS_PER_VERTEX) != 0) {
+            throw new IllegalArgumentException("must be multiple"
+                    + " of VERTICE_PER_TRIANGLE * COORDS_PER_VERTEX coordinates");
+        }
+        if (color.length != NUM_COLOR_COMPONENTS) {
+            throw new IllegalArgumentException("wrong number of color components");
+        }
+        mProgram = program;
+        mColor = color;
+
+        ByteBuffer bb = ByteBuffer.allocateDirect(triangleCoords.length * BYTES_PER_FLOAT);
+
+        // Use the device hardware's native byte order.
+        bb.order(ByteOrder.nativeOrder());
+
+        // Create a FloatBuffer that wraps the ByteBuffer.
+        mVertexBuffer = bb.asFloatBuffer();
+
+        // Add the coordinates to the FloatBuffer.
+        mVertexBuffer.put(triangleCoords);
+
+        // Go back to the start for reading.
+        mVertexBuffer.position(0);
+
+        mNumCoords = triangleCoords.length / COORDS_PER_VERTEX;
+    }
+
+    /**
+     * Draws this triangle list using OpenGL commands.
+     *
+     * @param mvpMatrix the Model View Project matrix to draw this triangle list
+     */
+    public void draw(float[] mvpMatrix) {
+        // Pass the MVP matrix, vertex data, and color to OpenGL.
+        mProgram.bind(mvpMatrix, mVertexBuffer, mColor);
+
+        // Draw the triangle list.
+        GLES20.glDrawArrays(GLES20.GL_TRIANGLES, 0, mNumCoords);
+        if (CHECK_GL_ERRORS) checkGlError("glDrawArrays");
+    }
+
+    /**
+     * Checks if any of the GL calls since the last time this method was called set an error
+     * condition. Call this method immediately after calling a GL method. Pass the name of the GL
+     * operation. For example:
+     *
+     * <pre>
+     * mColorHandle = GLES20.glGetUniformLocation(mProgram, "uColor");
+     * MyGLRenderer.checkGlError("glGetUniformLocation");</pre>
+     *
+     * If the operation is not successful, the check throws an exception.
+     *
+     * <p><em>Note</em> This is quite slow so it's best to use it sparingly in production builds.
+     *
+     * @param glOperation name of the OpenGL call to check
+     */
+    private static void checkGlError(String glOperation) {
+        int error = GLES20.glGetError();
+        if (error != GLES20.GL_NO_ERROR) {
+            String errorString = GLU.gluErrorString(error);
+            if (errorString == null) {
+                errorString = GLUtils.getEGLErrorString(error);
+            }
+            String message = glOperation + " caused GL error 0x" + Integer.toHexString(error) +
+                    ": " + errorString;
+            Log.e(TAG, message);
+            throw new RuntimeException(message);
+        }
+    }
+
+    /**
+     * Compiles an OpenGL shader.
+     *
+     * @param type {@link GLES20#GL_VERTEX_SHADER} or {@link GLES20#GL_FRAGMENT_SHADER}
+     * @param shaderCode string containing the shader source code
+     * @return ID for the shader
+     */
+    private static int loadShader(int type, String shaderCode){
+        // Create a vertex or fragment shader.
+        int shader = GLES20.glCreateShader(type);
+        if (CHECK_GL_ERRORS) checkGlError("glCreateShader");
+        if (shader == 0) {
+            throw new IllegalStateException("glCreateShader failed");
+        }
+
+        // Add the source code to the shader and compile it.
+        GLES20.glShaderSource(shader, shaderCode);
+        if (CHECK_GL_ERRORS) checkGlError("glShaderSource");
+        GLES20.glCompileShader(shader);
+        if (CHECK_GL_ERRORS) checkGlError("glCompileShader");
+
+        return shader;
+    }
+
+    /** OpenGL shaders for drawing solid colored triangle lists. */
+    public static class Program {
+        /** Trivial vertex shader that transforms the input vertex by the MVP matrix. */
+        private static final String VERTEX_SHADER_CODE = "" +
+                "uniform mat4 uMvpMatrix;\n" +
+                "attribute vec4 aPosition;\n" +
+                "void main() {\n" +
+                "    gl_Position = uMvpMatrix * aPosition;\n" +
+                "}\n";
+
+        /** Trivial fragment shader that draws with a fixed color. */
+        private static final String FRAGMENT_SHADER_CODE = "" +
+                "precision mediump float;\n" +
+                "uniform vec4 uColor;\n" +
+                "void main() {\n" +
+                "    gl_FragColor = uColor;\n" +
+                "}\n";
+
+        /** ID OpenGL uses to identify this program. */
+        private final int mProgramId;
+
+        /** Handle for uMvpMatrix uniform in vertex shader. */
+        private final int mMvpMatrixHandle;
+
+        /** Handle for aPosition attribute in vertex shader. */
+        private final int mPositionHandle;
+
+        /** Handle for uColor uniform in fragment shader. */
+        private final int mColorHandle;
+
+        /**
+         * Creates a program to draw triangle lists. For optimal drawing efficiency, one program
+         * should be used for all triangle lists being drawn.
+         */
+        public Program() {
+            // Prepare shaders.
+            int vertexShader = loadShader(GLES20.GL_VERTEX_SHADER, VERTEX_SHADER_CODE);
+            int fragmentShader = loadShader(GLES20.GL_FRAGMENT_SHADER, FRAGMENT_SHADER_CODE);
+
+            // Create empty OpenGL Program.
+            mProgramId = GLES20.glCreateProgram();
+            if (CHECK_GL_ERRORS) checkGlError("glCreateProgram");
+            if (mProgramId == 0) {
+                throw new IllegalStateException("glCreateProgram failed");
+            }
+
+            // Add the shaders to the program.
+            GLES20.glAttachShader(mProgramId, vertexShader);
+            if (CHECK_GL_ERRORS) checkGlError("glAttachShader");
+            GLES20.glAttachShader(mProgramId, fragmentShader);
+            if (CHECK_GL_ERRORS) checkGlError("glAttachShader");
+
+            // Link the program so it can be executed.
+            GLES20.glLinkProgram(mProgramId);
+            if (CHECK_GL_ERRORS) checkGlError("glLinkProgram");
+
+            // Get a handle to the uMvpMatrix uniform in the vertex shader.
+            mMvpMatrixHandle = GLES20.glGetUniformLocation(mProgramId, "uMvpMatrix");
+            if (CHECK_GL_ERRORS) checkGlError("glGetUniformLocation");
+
+            // Get a handle to the vertex shader's aPosition attribute.
+            mPositionHandle = GLES20.glGetAttribLocation(mProgramId, "aPosition");
+            if (CHECK_GL_ERRORS) checkGlError("glGetAttribLocation");
+
+            // Enable vertex array (VBO).
+            GLES20.glEnableVertexAttribArray(mPositionHandle);
+            if (CHECK_GL_ERRORS) checkGlError("glEnableVertexAttribArray");
+
+            // Get a handle to fragment shader's uColor uniform.
+            mColorHandle = GLES20.glGetUniformLocation(mProgramId, "uColor");
+            if (CHECK_GL_ERRORS) checkGlError("glGetUniformLocation");
+        }
+
+        /**
+         * Tells OpenGL to use this program. Call this method before drawing a sequence of
+         * triangle lists.
+         */
+        public void use() {
+            GLES20.glUseProgram(mProgramId);
+            if (CHECK_GL_ERRORS) checkGlError("glUseProgram");
+        }
+
+        /** Sends the given MVP matrix, vertex data, and color to OpenGL. */
+        public void bind(float[] mvpMatrix, FloatBuffer vertexBuffer, float[] color) {
+            // Pass the MVP matrix to OpenGL.
+            GLES20.glUniformMatrix4fv(mMvpMatrixHandle, 1 /* count */, false /* transpose */,
+                    mvpMatrix, 0 /* offset */);
+            if (CHECK_GL_ERRORS) checkGlError("glUniformMatrix4fv");
+
+            // Pass the VBO with the triangle list's vertices to OpenGL.
+            GLES20.glEnableVertexAttribArray(mPositionHandle);
+            if (CHECK_GL_ERRORS) checkGlError("glEnableVertexAttribArray");
+            GLES20.glVertexAttribPointer(mPositionHandle, COORDS_PER_VERTEX, GLES20.GL_FLOAT,
+                    false /* normalized */, VERTEX_STRIDE, vertexBuffer);
+            if (CHECK_GL_ERRORS) checkGlError("glVertexAttribPointer");
+
+            // Pass the triangle list's color to OpenGL.
+            GLES20.glUniform4fv(mColorHandle, 1 /* count */, color, 0 /* offset */);
+            if (CHECK_GL_ERRORS) checkGlError("glUniform4fv");
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/SweepWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/SweepWatchFaceService.java
new file mode 100644
index 0000000..44e9569
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/SweepWatchFaceService.java
@@ -0,0 +1,275 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.content.res.Resources;
+import android.graphics.Bitmap;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.graphics.Rect;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.os.Bundle;
+import android.support.wearable.watchface.CanvasWatchFaceService;
+import android.support.wearable.watchface.WatchFaceService;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.text.format.Time;
+import android.util.Log;
+import android.view.SurfaceHolder;
+
+import java.util.TimeZone;
+
+/**
+ * Sample analog watch face with a sweep second hand. In ambient mode, the second hand isn't shown.
+ * On devices with low-bit ambient mode, the hands are drawn without anti-aliasing in ambient mode.
+ * The watch face is drawn with less contrast in mute mode.
+ *
+ * {@link AnalogWatchFaceService} is similar but has a ticking second hand.
+ */
+public class SweepWatchFaceService extends CanvasWatchFaceService {
+    private static final String TAG = "SweepWatchFaceService";
+
+    @Override
+    public Engine onCreateEngine() {
+        return new Engine();
+    }
+
+    private class Engine extends CanvasWatchFaceService.Engine {
+        Paint mHourPaint;
+        Paint mMinutePaint;
+        Paint mSecondPaint;
+        Paint mTickPaint;
+        boolean mMute;
+        Time mTime;
+
+        final BroadcastReceiver mTimeZoneReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                mTime.clear(intent.getStringExtra("time-zone"));
+                mTime.setToNow();
+            }
+        };
+        boolean mRegisteredTimeZoneReceiver = false;
+
+        /**
+         * Whether the display supports fewer bits for each color in ambient mode. When true, we
+         * disable anti-aliasing in ambient mode.
+         */
+        boolean mLowBitAmbient;
+
+        Bitmap mBackgroundBitmap;
+        Bitmap mBackgroundScaledBitmap;
+
+        @Override
+        public void onCreate(SurfaceHolder holder) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onCreate");
+            }
+            super.onCreate(holder);
+
+            setWatchFaceStyle(new WatchFaceStyle.Builder(SweepWatchFaceService.this)
+                    .setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
+                    .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
+                    .setShowSystemUiTime(false)
+                    .build());
+
+            Resources resources = SweepWatchFaceService.this.getResources();
+            Drawable backgroundDrawable = resources.getDrawable(R.drawable.bg);
+            mBackgroundBitmap = ((BitmapDrawable) backgroundDrawable).getBitmap();
+
+            mHourPaint = new Paint();
+            mHourPaint.setARGB(255, 200, 200, 200);
+            mHourPaint.setStrokeWidth(5.f);
+            mHourPaint.setAntiAlias(true);
+            mHourPaint.setStrokeCap(Paint.Cap.ROUND);
+
+            mMinutePaint = new Paint();
+            mMinutePaint.setARGB(255, 200, 200, 200);
+            mMinutePaint.setStrokeWidth(3.f);
+            mMinutePaint.setAntiAlias(true);
+            mMinutePaint.setStrokeCap(Paint.Cap.ROUND);
+
+            mSecondPaint = new Paint();
+            mSecondPaint.setARGB(255, 255, 0, 0);
+            mSecondPaint.setStrokeWidth(2.f);
+            mSecondPaint.setAntiAlias(true);
+            mSecondPaint.setStrokeCap(Paint.Cap.ROUND);
+
+            mTickPaint = new Paint();
+            mTickPaint.setARGB(100, 255, 255, 255);
+            mTickPaint.setStrokeWidth(2.f);
+            mTickPaint.setAntiAlias(true);
+
+            mTime = new Time();
+        }
+
+        @Override
+        public void onPropertiesChanged(Bundle properties) {
+            super.onPropertiesChanged(properties);
+            mLowBitAmbient = properties.getBoolean(PROPERTY_LOW_BIT_AMBIENT, false);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onPropertiesChanged: low-bit ambient = " + mLowBitAmbient);
+            }
+        }
+
+        @Override
+        public void onTimeTick() {
+            super.onTimeTick();
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onTimeTick: ambient = " + isInAmbientMode());
+            }
+            invalidate();
+        }
+
+        @Override
+        public void onAmbientModeChanged(boolean inAmbientMode) {
+            super.onAmbientModeChanged(inAmbientMode);
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAmbientModeChanged: " + inAmbientMode);
+            }
+            if (mLowBitAmbient) {
+                boolean antiAlias = !inAmbientMode;
+                mHourPaint.setAntiAlias(antiAlias);
+                mMinutePaint.setAntiAlias(antiAlias);
+                mSecondPaint.setAntiAlias(antiAlias);
+                mTickPaint.setAntiAlias(antiAlias);
+            }
+            invalidate();
+        }
+
+        @Override
+        public void onInterruptionFilterChanged(int interruptionFilter) {
+            super.onInterruptionFilterChanged(interruptionFilter);
+            boolean inMuteMode = (interruptionFilter == WatchFaceService.INTERRUPTION_FILTER_NONE);
+            if (mMute != inMuteMode) {
+                mMute = inMuteMode;
+                mHourPaint.setAlpha(inMuteMode ? 100 : 255);
+                mMinutePaint.setAlpha(inMuteMode ? 100 : 255);
+                mSecondPaint.setAlpha(inMuteMode ? 80 : 255);
+                invalidate();
+            }
+        }
+
+        @Override
+        public void onDraw(Canvas canvas, Rect bounds) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "onDraw");
+            }
+            long now = System.currentTimeMillis();
+            mTime.set(now);
+            int milliseconds = (int) (now % 1000);
+
+            int width = bounds.width();
+            int height = bounds.height();
+
+            // Draw the background, scaled to fit.
+            if (mBackgroundScaledBitmap == null
+                    || mBackgroundScaledBitmap.getWidth() != width
+                    || mBackgroundScaledBitmap.getHeight() != height) {
+                mBackgroundScaledBitmap = Bitmap.createScaledBitmap(mBackgroundBitmap,
+                        width, height, true /* filter */);
+            }
+            canvas.drawBitmap(mBackgroundScaledBitmap, 0, 0, null);
+
+            // Find the center. Ignore the window insets so that, on round watches with a
+            // "chin", the watch face is centered on the entire screen, not just the usable
+            // portion.
+            float centerX = width / 2f;
+            float centerY = height / 2f;
+
+            // Draw the ticks.
+            float innerTickRadius = centerX - 10;
+            float outerTickRadius = centerX;
+            for (int tickIndex = 0; tickIndex < 12; tickIndex++) {
+                float tickRot = (float) (tickIndex * Math.PI * 2 / 12);
+                float innerX = (float) Math.sin(tickRot) * innerTickRadius;
+                float innerY = (float) -Math.cos(tickRot) * innerTickRadius;
+                float outerX = (float) Math.sin(tickRot) * outerTickRadius;
+                float outerY = (float) -Math.cos(tickRot) * outerTickRadius;
+                canvas.drawLine(centerX + innerX, centerY + innerY,
+                        centerX + outerX, centerY + outerY, mTickPaint);
+            }
+
+            float seconds = mTime.second + milliseconds / 1000f;
+            float secRot = seconds / 30f * (float) Math.PI;
+            int minutes = mTime.minute;
+            float minRot = minutes / 30f * (float) Math.PI;
+            float hrRot = ((mTime.hour + (minutes / 60f)) / 6f ) * (float) Math.PI;
+
+            float secLength = centerX - 20;
+            float minLength = centerX - 40;
+            float hrLength = centerX - 80;
+
+            if (!isInAmbientMode()) {
+                float secX = (float) Math.sin(secRot) * secLength;
+                float secY = (float) -Math.cos(secRot) * secLength;
+                canvas.drawLine(centerX, centerY, centerX + secX, centerY + secY, mSecondPaint);
+            }
+
+            float minX = (float) Math.sin(minRot) * minLength;
+            float minY = (float) -Math.cos(minRot) * minLength;
+            canvas.drawLine(centerX, centerY, centerX + minX, centerY + minY, mMinutePaint);
+
+            float hrX = (float) Math.sin(hrRot) * hrLength;
+            float hrY = (float) -Math.cos(hrRot) * hrLength;
+            canvas.drawLine(centerX, centerY, centerX + hrX, centerY + hrY, mHourPaint);
+
+            // Draw every frame as long as we're visible and in interactive mode.
+            if (isVisible() && !isInAmbientMode()) {
+                invalidate();
+            }
+        }
+
+        @Override
+        public void onVisibilityChanged(boolean visible) {
+            super.onVisibilityChanged(visible);
+
+            if (visible) {
+                registerReceiver();
+
+                // Update time zone in case it changed while we weren't visible.
+                mTime.clear(TimeZone.getDefault().getID());
+                mTime.setToNow();
+
+                invalidate();
+            } else {
+                unregisterReceiver();
+            }
+        }
+
+        private void registerReceiver() {
+            if (mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = true;
+            IntentFilter filter = new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED);
+            SweepWatchFaceService.this.registerReceiver(mTimeZoneReceiver, filter);
+        }
+
+        private void unregisterReceiver() {
+            if (!mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = false;
+            SweepWatchFaceService.this.unregisterReceiver(mTimeZoneReceiver);
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/TiltWatchFaceService.java b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/TiltWatchFaceService.java
new file mode 100644
index 0000000..6dd01b0
--- /dev/null
+++ b/samples/browseable/WatchFace/Wearable/src/com.example.android.wearable.watchface/TiltWatchFaceService.java
@@ -0,0 +1,478 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.example.android.wearable.watchface;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.opengl.GLES20;
+import android.opengl.Matrix;
+import android.support.wearable.watchface.Gles2WatchFaceService;
+import android.support.wearable.watchface.WatchFaceStyle;
+import android.text.format.Time;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.SurfaceHolder;
+
+import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Sample watch face using OpenGL. The watch face is rendered using
+ * {@link Gles2ColoredTriangleList}s. The camera moves around in interactive mode and stops moving
+ * when the watch enters ambient mode.
+ */
+public class TiltWatchFaceService extends Gles2WatchFaceService {
+
+    private static final String TAG = "TiltWatchFaceService";
+
+    /** Expected frame rate in interactive mode. */
+    private static final long FPS = 60;
+
+    /** How long each frame is displayed at expected frame rate. */
+    private static final long FRAME_PERIOD_MS = TimeUnit.SECONDS.toMillis(1) / FPS;
+
+    @Override
+    public Engine onCreateEngine() {
+        return new Engine();
+    }
+
+    private class Engine extends Gles2WatchFaceService.Engine {
+        /** Cycle time before the camera motion repeats. */
+        private static final long CYCLE_PERIOD_SECONDS = 5;
+
+        /** Number of camera angles to precompute. */
+        private final int mNumCameraAngles = (int) (CYCLE_PERIOD_SECONDS * FPS);
+
+        /** Projection transformation matrix. Converts from 3D to 2D. */
+        private final float[] mProjectionMatrix = new float[16];
+
+        /**
+         * View transformation matrices to use in interactive mode. Converts from world to camera-
+         * relative coordinates. One matrix per camera position.
+         */
+        private final float[][] mViewMatrices = new float[mNumCameraAngles][16];
+
+        /** The view transformation matrix to use in ambient mode */
+        private final float[] mAmbientViewMatrix = new float[16];
+
+        /**
+         * Model transformation matrices. Converts from model-relative coordinates to world
+         * coordinates. One matrix per degree of rotation.
+         */
+        private final float[][] mModelMatrices = new float[360][16];
+
+        /**
+         * Products of {@link #mViewMatrices} and {@link #mProjectionMatrix}. One matrix per camera
+         * position.
+         */
+        private final float[][] mVpMatrices = new float[mNumCameraAngles][16];
+
+        /** The product of {@link #mAmbientViewMatrix} and {@link #mProjectionMatrix} */
+        private final float[] mAmbientVpMatrix = new float[16];
+
+        /**
+         * Product of {@link #mModelMatrices}, {@link #mViewMatrices}, and
+         * {@link #mProjectionMatrix}.
+         */
+        private final float[] mMvpMatrix = new float[16];
+
+        /** Triangles for the 4 major ticks. These are grouped together to speed up rendering. */
+        private Gles2ColoredTriangleList mMajorTickTriangles;
+
+        /** Triangles for the 8 minor ticks. These are grouped together to speed up rendering. */
+        private Gles2ColoredTriangleList mMinorTickTriangles;
+
+        /** Triangle for the second hand. */
+        private Gles2ColoredTriangleList mSecondHandTriangle;
+
+        /** Triangle for the minute hand. */
+        private Gles2ColoredTriangleList mMinuteHandTriangle;
+
+        /** Triangle for the hour hand. */
+        private Gles2ColoredTriangleList mHourHandTriangle;
+
+        private Time mTime = new Time();
+
+        /** Whether we've registered {@link #mTimeZoneReceiver}. */
+        private boolean mRegisteredTimeZoneReceiver;
+
+        private final BroadcastReceiver mTimeZoneReceiver = new BroadcastReceiver() {
+            @Override
+            public void onReceive(Context context, Intent intent) {
+                mTime.clear(intent.getStringExtra("time-zone"));
+                mTime.setToNow();
+            }
+        };
+
+        @Override
+        public void onCreate(SurfaceHolder surfaceHolder) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onCreate");
+            }
+            super.onCreate(surfaceHolder);
+            setWatchFaceStyle(new WatchFaceStyle.Builder(TiltWatchFaceService.this)
+                    .setCardPeekMode(WatchFaceStyle.PEEK_MODE_SHORT)
+                    .setBackgroundVisibility(WatchFaceStyle.BACKGROUND_VISIBILITY_INTERRUPTIVE)
+                    .setStatusBarGravity(Gravity.RIGHT | Gravity.TOP)
+                    .setHotwordIndicatorGravity(Gravity.LEFT | Gravity.TOP)
+                    .setShowSystemUiTime(false)
+                    .build());
+        }
+
+        @Override
+        public void onGlContextCreated() {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onGlContextCreated");
+            }
+            super.onGlContextCreated();
+
+            // Create program for drawing triangles.
+            Gles2ColoredTriangleList.Program triangleProgram =
+                    new Gles2ColoredTriangleList.Program();
+
+            // We only draw triangles which all use the same program so we don't need to switch
+            // programs mid-frame. This means we can tell OpenGL to use this program only once
+            // rather than having to do so for each frame. This makes OpenGL draw faster.
+            triangleProgram.use();
+
+            // Create triangles for the ticks.
+            mMajorTickTriangles = createMajorTicks(triangleProgram);
+            mMinorTickTriangles = createMinorTicks(triangleProgram);
+
+            // Create triangles for the hands.
+            mSecondHandTriangle = createHand(
+                    triangleProgram,
+                    0.02f /* width */,
+                    1.0f /* height */,
+                    new float[]{
+                            1.0f /* red */,
+                            0.0f /* green */,
+                            0.0f /* blue */,
+                            1.0f /* alpha */
+                    }
+            );
+            mMinuteHandTriangle = createHand(
+                    triangleProgram,
+                    0.06f /* width */,
+                    0.8f /* height */,
+                    new float[]{
+                            0.7f /* red */,
+                            0.7f /* green */,
+                            0.7f /* blue */,
+                            1.0f /* alpha */
+                    }
+            );
+            mHourHandTriangle = createHand(
+                    triangleProgram,
+                    0.1f /* width */,
+                    0.5f /* height */,
+                    new float[]{
+                            0.9f /* red */,
+                            0.9f /* green */,
+                            0.9f /* blue */,
+                            1.0f /* alpha */
+                    }
+            );
+
+            // Precompute the clock angles.
+            for (int i = 0; i < mModelMatrices.length; ++i) {
+                Matrix.setRotateM(mModelMatrices[i], 0, i, 0, 0, 1);
+            }
+
+            // Precompute the camera angles.
+            for (int i = 0; i < mNumCameraAngles; ++i) {
+                // Set the camera position (View matrix). When active, move the eye around to show
+                // off that this is 3D.
+                final float cameraAngle = (float) (((float) i) / mNumCameraAngles * 2 * Math.PI);
+                final float eyeX = (float) Math.cos(cameraAngle);
+                final float eyeY = (float) Math.sin(cameraAngle);
+                Matrix.setLookAtM(mViewMatrices[i],
+                        0, // dest index
+                        eyeX, eyeY, -3, // eye
+                        0, 0, 0, // center
+                        0, 1, 0); // up vector
+            }
+
+            Matrix.setLookAtM(mAmbientViewMatrix,
+                    0, // dest index
+                    0, 0, -3, // eye
+                    0, 0, 0, // center
+                    0, 1, 0); // up vector
+        }
+
+        @Override
+        public void onGlSurfaceCreated(int width, int height) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onGlSurfaceCreated: " + width + " x " + height);
+            }
+            super.onGlSurfaceCreated(width, height);
+
+            // Update the projection matrix based on the new aspect ratio.
+            final float aspectRatio = (float) width / height;
+            Matrix.frustumM(mProjectionMatrix,
+                    0 /* offset */,
+                    -aspectRatio /* left */,
+                    aspectRatio /* right */,
+                    -1 /* bottom */,
+                    1 /* top */,
+                    2 /* near */,
+                    7 /* far */);
+
+            // Precompute the products of Projection and View matrices for each camera angle.
+            for (int i = 0; i < mNumCameraAngles; ++i) {
+                Matrix.multiplyMM(mVpMatrices[i], 0, mProjectionMatrix, 0, mViewMatrices[i], 0);
+            }
+
+            Matrix.multiplyMM(mAmbientVpMatrix, 0, mProjectionMatrix, 0, mAmbientViewMatrix, 0);
+        }
+
+        /**
+         * Creates a triangle for a hand on the watch face.
+         *
+         * @param program program for drawing triangles
+         * @param width width of base of triangle
+         * @param length length of triangle
+         * @param color color in RGBA order, each in the range [0, 1]
+         */
+        private Gles2ColoredTriangleList createHand(Gles2ColoredTriangleList.Program program,
+                float width, float length, float[] color) {
+            // Create the data for the VBO.
+            float[] triangleCoords = new float[]{
+                    // in counterclockwise order:
+                    0, length, 0,   // top
+                    -width / 2, 0, 0,   // bottom left
+                    width / 2, 0, 0    // bottom right
+            };
+            return new Gles2ColoredTriangleList(program, triangleCoords, color);
+        }
+
+        /**
+         * Creates a triangle list for the major ticks on the watch face.
+         *
+         * @param program program for drawing triangles
+         */
+        private Gles2ColoredTriangleList createMajorTicks(
+                Gles2ColoredTriangleList.Program program) {
+            // Create the data for the VBO.
+            float[] trianglesCoords = new float[9 * 4];
+            for (int i = 0; i < 4; i++) {
+                float[] triangleCoords = getMajorTickTriangleCoords(i);
+                System.arraycopy(triangleCoords, 0, trianglesCoords, i * 9, triangleCoords.length);
+            }
+
+            return new Gles2ColoredTriangleList(program, trianglesCoords,
+                    new float[]{
+                            1.0f /* red */,
+                            1.0f /* green */,
+                            1.0f /* blue */,
+                            1.0f /* alpha */
+                    }
+            );
+        }
+
+        /**
+         * Creates a triangle list for the minor ticks on the watch face.
+         *
+         * @param program program for drawing triangles
+         */
+        private Gles2ColoredTriangleList createMinorTicks(
+                Gles2ColoredTriangleList.Program program) {
+            // Create the data for the VBO.
+            float[] trianglesCoords = new float[9 * (12 - 4)];
+            int index = 0;
+            for (int i = 0; i < 12; i++) {
+                if (i % 3 == 0) {
+                    // This is where a major tick goes, so skip it.
+                    continue;
+                }
+                float[] triangleCoords = getMinorTickTriangleCoords(i);
+                System.arraycopy(triangleCoords, 0, trianglesCoords, index, triangleCoords.length);
+                index += 9;
+            }
+
+            return new Gles2ColoredTriangleList(program, trianglesCoords,
+                    new float[]{
+                            0.5f /* red */,
+                            0.5f /* green */,
+                            0.5f /* blue */,
+                            1.0f /* alpha */
+                    }
+            );
+        }
+
+        private float[] getMajorTickTriangleCoords(int index) {
+            return getTickTriangleCoords(0.03f /* width */, 0.09f /* length */,
+                    index * 360 / 4 /* angleDegrees */);
+        }
+
+        private float[] getMinorTickTriangleCoords(int index) {
+            return getTickTriangleCoords(0.02f /* width */, 0.06f /* length */,
+                    index * 360 / 12 /* angleDegrees */);
+        }
+
+        private float[] getTickTriangleCoords(float width, float length, int angleDegrees) {
+            // Create the data for the VBO.
+            float[] coords = new float[]{
+                    // in counterclockwise order:
+                    0, 1, 0,   // top
+                    width / 2, length + 1, 0,   // bottom left
+                    -width / 2, length + 1, 0    // bottom right
+            };
+
+            rotateCoords(coords, angleDegrees);
+            return coords;
+        }
+
+        /**
+         * Destructively rotates the given coordinates in the XY plane about the origin by the given
+         * angle.
+         *
+         * @param coords flattened 3D coordinates
+         * @param angleDegrees angle in degrees clockwise when viewed from negative infinity on the
+         *                     Z axis
+         */
+        private void rotateCoords(float[] coords, int angleDegrees) {
+            double angleRadians = Math.toRadians(angleDegrees);
+            double cos = Math.cos(angleRadians);
+            double sin = Math.sin(angleRadians);
+            for (int i = 0; i < coords.length; i += 3) {
+                float x = coords[i];
+                float y = coords[i + 1];
+                coords[i] = (float) (cos * x - sin * y);
+                coords[i + 1] = (float) (sin * x + cos * y);
+            }
+        }
+
+        @Override
+        public void onAmbientModeChanged(boolean inAmbientMode) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onAmbientModeChanged: " + inAmbientMode);
+            }
+            super.onAmbientModeChanged(inAmbientMode);
+            invalidate();
+        }
+
+        @Override
+        public void onVisibilityChanged(boolean visible) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onVisibilityChanged: " + visible);
+            }
+            super.onVisibilityChanged(visible);
+            if (visible) {
+                registerReceiver();
+
+                // Update time zone in case it changed while we were detached.
+                mTime.clear(TimeZone.getDefault().getID());
+                mTime.setToNow();
+
+                invalidate();
+            } else {
+                unregisterReceiver();
+            }
+        }
+
+        private void registerReceiver() {
+            if (mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = true;
+            IntentFilter filter = new IntentFilter(Intent.ACTION_TIMEZONE_CHANGED);
+            TiltWatchFaceService.this.registerReceiver(mTimeZoneReceiver, filter);
+        }
+
+        private void unregisterReceiver() {
+            if (!mRegisteredTimeZoneReceiver) {
+                return;
+            }
+            mRegisteredTimeZoneReceiver = false;
+            TiltWatchFaceService.this.unregisterReceiver(mTimeZoneReceiver);
+        }
+
+        @Override
+        public void onTimeTick() {
+            super.onTimeTick();
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "onTimeTick: ambient = " + isInAmbientMode());
+            }
+            invalidate();
+        }
+
+        @Override
+        public void onDraw() {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.v(TAG, "onDraw");
+            }
+            super.onDraw();
+            final float[] vpMatrix;
+
+            // Draw background color and select the appropriate view projection matrix. The
+            // background should always be black in ambient mode. The view projection matrix used is
+            // overhead in ambient. In interactive mode, it's tilted depending on the current time.
+            if (isInAmbientMode()) {
+                GLES20.glClearColor(0, 0, 0, 1);
+                vpMatrix = mAmbientVpMatrix;
+            } else {
+                GLES20.glClearColor(0.5f, 0.2f, 0.2f, 1);
+                final int cameraIndex =
+                        (int) ((System.currentTimeMillis() / FRAME_PERIOD_MS) % mNumCameraAngles);
+                vpMatrix = mVpMatrices[cameraIndex];
+            }
+            GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT);
+
+            // Compute angle indices for the three hands.
+            mTime.setToNow();
+            final int secIndex = mTime.second * 360 / 60;
+            final int minIndex = mTime.minute * 360 / 60;
+            final int hoursIndex = (mTime.hour % 12) * 360 / 12 + mTime.minute * 360 / 60 / 12;
+
+            // Draw triangles from back to front. Don't draw the second hand in ambient mode.
+            {
+                // Combine the model matrix with the projection and camera view.
+                Matrix.multiplyMM(mMvpMatrix, 0, vpMatrix, 0, mModelMatrices[hoursIndex], 0);
+
+                // Draw the triangle.
+                mHourHandTriangle.draw(mMvpMatrix);
+            }
+            {
+                // Combine the model matrix with the projection and camera view.
+                Matrix.multiplyMM(mMvpMatrix, 0, vpMatrix, 0, mModelMatrices[minIndex], 0);
+
+                // Draw the triangle.
+                mMinuteHandTriangle.draw(mMvpMatrix);
+            }
+            if (!isInAmbientMode()) {
+                // Combine the model matrix with the projection and camera view.
+                Matrix.multiplyMM(mMvpMatrix, 0, vpMatrix, 0, mModelMatrices[secIndex], 0);
+
+                // Draw the triangle.
+                mSecondHandTriangle.draw(mMvpMatrix);
+            }
+            {
+                // Draw the major and minor ticks.
+                mMajorTickTriangles.draw(vpMatrix);
+                mMinorTickTriangles.draw(vpMatrix);
+            }
+
+            // Draw every frame as long as we're visible and in interactive mode.
+            if (isVisible() && !isInAmbientMode()) {
+                invalidate();
+            }
+        }
+    }
+}
diff --git a/samples/browseable/WatchFace/_index.jd b/samples/browseable/WatchFace/_index.jd
new file mode 100644
index 0000000..fcba857
--- /dev/null
+++ b/samples/browseable/WatchFace/_index.jd
@@ -0,0 +1,12 @@
+page.tags="WatchFace"
+sample.group=Wearable
+@jd:body
+
+<p>
+            
+This sample demonstrates how to create watch faces for android wear and includes a phone app
+and a wearable app. The wearable app has a variety of watch faces including analog, digital,
+opengl, calendar, etc. It also includes a watch-side configuration example. The phone app
+includes a phone-side configuration example.
+            
+        </p>
diff --git a/samples/browseable/WatchViewStub/Application/AndroidManifest.xml b/samples/browseable/WatchViewStub/Application/AndroidManifest.xml
index e98a62f..b1b7103 100644
--- a/samples/browseable/WatchViewStub/Application/AndroidManifest.xml
+++ b/samples/browseable/WatchViewStub/Application/AndroidManifest.xml
@@ -18,10 +18,11 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="com.example.android.google.wearable.watchviewstub">
 
-    <uses-sdk android:minSdkVersion="19"
-              android:targetSdkVersion="19" />
+    <uses-sdk android:minSdkVersion="18"
+              android:targetSdkVersion="21" />
 
     <application android:allowBackup="true"
+        android:icon="@drawable/ic_launcher"
         android:label="@string/app_name">
     </application>
 
diff --git a/samples/browseable/WatchViewStub/Application/res/drawable-hdpi/ic_launcher.png b/samples/browseable/WatchViewStub/Application/res/drawable-hdpi/ic_launcher.png
new file mode 100755
index 0000000..589f229
--- /dev/null
+++ b/samples/browseable/WatchViewStub/Application/res/drawable-hdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchViewStub/Application/res/drawable-mdpi/ic_launcher.png b/samples/browseable/WatchViewStub/Application/res/drawable-mdpi/ic_launcher.png
new file mode 100755
index 0000000..77dd571
--- /dev/null
+++ b/samples/browseable/WatchViewStub/Application/res/drawable-mdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchViewStub/Application/res/drawable-xhdpi/ic_launcher.png b/samples/browseable/WatchViewStub/Application/res/drawable-xhdpi/ic_launcher.png
new file mode 100755
index 0000000..fe34ebe
--- /dev/null
+++ b/samples/browseable/WatchViewStub/Application/res/drawable-xhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/WatchViewStub/Application/res/drawable-xxhdpi/ic_launcher.png b/samples/browseable/WatchViewStub/Application/res/drawable-xxhdpi/ic_launcher.png
new file mode 100755
index 0000000..ab80bcd
--- /dev/null
+++ b/samples/browseable/WatchViewStub/Application/res/drawable-xxhdpi/ic_launcher.png
Binary files differ
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/WatchViewStub/Application/res/values-v21/base-colors.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/WatchViewStub/Application/res/values-v21/base-colors.xml
index dfbb092..34c9cd1 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/WatchViewStub/Application/res/values-v21/base-colors.xml
@@ -14,12 +14,7 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml b/samples/browseable/WatchViewStub/Application/res/values-v21/base-template-styles.xml
similarity index 71%
copy from samples/browseable/ElizaChat/Shared/AndroidManifest.xml
copy to samples/browseable/WatchViewStub/Application/res/values-v21/base-template-styles.xml
index dfbb092..0b2948f 100644
--- a/samples/browseable/ElizaChat/Shared/AndroidManifest.xml
+++ b/samples/browseable/WatchViewStub/Application/res/values-v21/base-template-styles.xml
@@ -14,12 +14,10 @@
  See the License for the specific language governing permissions and
  limitations under the License.
 -->
+<resources>
 
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.elizachat.common">
+    <!-- Activity themes -->
+    <style name="Theme.Base" parent="android:Theme.Material.Light">
+    </style>
 
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
+</resources>
diff --git a/samples/browseable/WatchViewStub/Application/res/values-v21/template-styles.xml b/samples/browseable/WatchViewStub/Application/res/values-v21/template-styles.xml
deleted file mode 100644
index 134fcd9..0000000
--- a/samples/browseable/WatchViewStub/Application/res/values-v21/template-styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
-  Copyright 2014 The Android Open Source Project
-
-  Licensed under the Apache License, Version 2.0 (the "License");
-  you may not use this file except in compliance with the License.
-  You may obtain a copy of the License at
-
-      http://www.apache.org/licenses/LICENSE-2.0
-
-  Unless required by applicable law or agreed to in writing, software
-  distributed under the License is distributed on an "AS IS" BASIS,
-  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-  See the License for the specific language governing permissions and
-  limitations under the License.
-  -->
-
-<resources>
-
-    <!-- Activity themes -->
-    <style name="Theme.Base" parent="android:Theme.Material.Light" />
-
-</resources>
diff --git a/samples/browseable/WatchViewStub/Wearable/AndroidManifest.xml b/samples/browseable/WatchViewStub/Wearable/AndroidManifest.xml
index baa3f78..33a266d 100644
--- a/samples/browseable/WatchViewStub/Wearable/AndroidManifest.xml
+++ b/samples/browseable/WatchViewStub/Wearable/AndroidManifest.xml
@@ -18,7 +18,7 @@
         package="com.example.android.google.wearable.watchviewstub" >
 
     <uses-sdk android:minSdkVersion="20"
-              android:targetSdkVersion="20" />
+              android:targetSdkVersion="21" />
 
     <uses-feature android:name="android.hardware.type.watch" />