Merge "Updates SkeletonWearableApp with latest GridViewPager API changes" into lmp-docs
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MediaNotification.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MediaNotification.java
index 7b8631a..4456fda 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MediaNotification.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MediaNotification.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
+ * 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.
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicPlayerActivity.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicPlayerActivity.java
index 648d268..394b01a 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicPlayerActivity.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicPlayerActivity.java
@@ -17,7 +17,6 @@
 
 import android.app.Activity;
 import android.media.browse.MediaBrowser;
-import android.media.session.MediaController;
 import android.os.Bundle;
 
 /**
@@ -28,9 +27,6 @@
 
     private static final String TAG = MusicPlayerActivity.class.getSimpleName();
 
-    private MediaBrowser mMediaBrowser;
-    private MediaController mMediaController;
-
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java
index 8e6e3f2..b482426 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/MusicService.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
+ * 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.
@@ -258,12 +258,11 @@
                 "; clientUid=" + clientUid + " ; rootHints=", rootHints);
         // To ensure you are not allowing any arbitrary app to browse your app's contents, you
         // need to check the origin:
-        if (!ANDROID_AUTO_PACKAGE_NAME.equals(clientPackageName) &&
-                !ANDROID_AUTO_SIMULATOR_PACKAGE_NAME.equals(clientPackageName) &&
-                !getApplication().getPackageName().equals(clientPackageName)) {
+        if (!PackageValidator.isCallerAllowed(this, clientPackageName, clientUid)) {
             // If the request comes from an untrusted package, return null. No further calls will
             // be made to other media browsing methods.
-            LogHelper.w(TAG, "OnGetRoot: IGNORING request from untrusted package " + clientPackageName);
+            LogHelper.w(TAG, "OnGetRoot: IGNORING request from untrusted package "
+                    + clientPackageName);
             return null;
         }
         if (ANDROID_AUTO_PACKAGE_NAME.equals(clientPackageName)) {
@@ -379,6 +378,11 @@
         @Override
         public void onSkipToQueueItem(long queueId) {
             LogHelper.d(TAG, "OnSkipToQueueItem:" + queueId);
+
+            if (mState == PlaybackState.STATE_PAUSED) {
+                mState = PlaybackState.STATE_STOPPED;
+            }
+
             if (mPlayingQueue != null && !mPlayingQueue.isEmpty()) {
 
                 // set the current index on queue from the music Id:
@@ -393,6 +397,10 @@
         public void onPlayFromMediaId(String mediaId, Bundle extras) {
             LogHelper.d(TAG, "playFromMediaId mediaId:", mediaId, "  extras=", extras);
 
+            if (mState == PlaybackState.STATE_PAUSED) {
+                mState = PlaybackState.STATE_STOPPED;
+            }
+
             // The mediaId used here is not the unique musicId. This one comes from the
             // MediaBrowser, and is actually a "hierarchy-aware mediaID": a concatenation of
             // the hierarchy in MediaBrowser and the actual unique musicID. This is necessary
@@ -406,6 +414,7 @@
 
             if (mPlayingQueue != null && !mPlayingQueue.isEmpty()) {
                 String uniqueMusicID = MediaIDHelper.extractMusicIDFromMediaID(mediaId);
+
                 // set the current index on queue from the music Id:
                 mCurrentIndexOnQueue = QueueHelper.getMusicIndexOnQueue(
                         mPlayingQueue, uniqueMusicID);
@@ -435,7 +444,7 @@
                 mCurrentIndexOnQueue = 0;
             }
             if (QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {
-                mState = PlaybackState.STATE_PLAYING;
+                mState = PlaybackState.STATE_STOPPED;
                 handlePlayRequest();
             } else {
                 LogHelper.e(TAG, "skipToNext: cannot skip to next. next Index=" +
@@ -448,7 +457,6 @@
         @Override
         public void onSkipToPrevious() {
             LogHelper.d(TAG, "skipToPrevious");
-
             mCurrentIndexOnQueue--;
             if (mPlayingQueue != null && mCurrentIndexOnQueue < 0) {
                 // This sample's behavior: skipping to previous when in first song restarts the
@@ -456,7 +464,7 @@
                 mCurrentIndexOnQueue = 0;
             }
             if (QueueHelper.isIndexPlayable(mCurrentIndexOnQueue, mPlayingQueue)) {
-                mState = PlaybackState.STATE_PLAYING;
+                mState = PlaybackState.STATE_STOPPED;
                 handlePlayRequest();
             } else {
                 LogHelper.e(TAG, "skipToPrevious: cannot skip to previous. previous Index=" +
@@ -486,12 +494,15 @@
         public void onPlayFromSearch(String query, Bundle extras) {
             LogHelper.d(TAG, "playFromSearch  query=", query);
 
+            if (mState == PlaybackState.STATE_PAUSED) {
+                mState = PlaybackState.STATE_STOPPED;
+            }
+
             mPlayingQueue = QueueHelper.getPlayingQueueFromSearch(query, mMusicProvider);
             LogHelper.d(TAG, "playFromSearch  playqueue.length=" + mPlayingQueue.size());
             mSession.setQueue(mPlayingQueue);
 
             if (mPlayingQueue != null && !mPlayingQueue.isEmpty()) {
-
                 // start playing from the beginning of the queue
                 mCurrentIndexOnQueue = 0;
 
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/PackageValidator.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/PackageValidator.java
new file mode 100644
index 0000000..fec360f
--- /dev/null
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/PackageValidator.java
@@ -0,0 +1,209 @@
+/*
+ * 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.mediabrowserservice;
+
+import java.io.UnsupportedEncodingException;
+import java.util.Arrays;
+
+import android.content.Context;
+import android.content.pm.PackageInfo;
+import android.content.pm.PackageManager;
+import android.os.Build;
+import android.os.Process;
+import android.util.Base64;
+import android.util.Log;
+
+/**
+ * Validates that the calling package is authorized to use this
+ * {@link android.service.media.MediaBrowserService}.
+ */
+public class PackageValidator {
+    public static final String TAG = "PackageValidator";
+
+    // Replace with your package whitelist
+    static final byte[][] VALID_PUBLIC_SIGNATURES = new byte[][]{
+        // Android Auto release public key
+        extractKey(
+        "\060\202\003\275\060\202\002\245\240\003\002\001\002\002\011\000\307\217\236\113" +
+        "\223\101\060\006\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060" +
+        "\165\061\013\060\011\006\003\125\004\006\023\002\125\123\061\023\060\021\006\003" +
+        "\125\004\010\014\012\103\141\154\151\146\157\162\156\151\141\061\026\060\024\006" +
+        "\003\125\004\007\014\015\115\157\165\156\164\141\151\156\040\126\151\145\167\061" +
+        "\024\060\022\006\003\125\004\012\014\013\107\157\157\147\154\145\040\111\156\143" +
+        "\056\061\020\060\016\006\003\125\004\013\014\007\101\156\144\162\157\151\144\061" +
+        "\021\060\017\006\003\125\004\003\014\010\147\145\141\162\150\145\141\144\060\036" +
+        "\027\015\061\064\060\065\062\067\062\063\060\065\063\064\132\027\015\064\061\061" +
+        "\060\061\062\062\063\060\065\063\064\132\060\165\061\013\060\011\006\003\125\004" +
+        "\006\023\002\125\123\061\023\060\021\006\003\125\004\010\014\012\103\141\154\151" +
+        "\146\157\162\156\151\141\061\026\060\024\006\003\125\004\007\014\015\115\157\165" +
+        "\156\164\141\151\156\040\126\151\145\167\061\024\060\022\006\003\125\004\012\014" +
+        "\013\107\157\157\147\154\145\040\111\156\143\056\061\020\060\016\006\003\125\004" +
+        "\013\014\007\101\156\144\162\157\151\144\061\021\060\017\006\003\125\004\003\014" +
+        "\010\147\145\141\162\150\145\141\144\060\202\001\042\060\015\006\011\052\206\110" +
+        "\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002\202\001" +
+        "\001\000\323\235\027\016\103\110\261\124\114\137\154\023\275\132\145\244\053\270" +
+        "\072\331\362\064\255\257\344\036\317\113\340\340\202\141\366\312\346\142\302\224" +
+        "\356\255\322\203\103\324\175\123\074\107\365\116\045\260\057\246\043\025\344\210" +
+        "\026\012\041\143\125\200\313\142\116\014\144\023\056\334\201\153\335\140\170\015" +
+        "\142\221\156\360\214\131\051\200\362\135\353\076\323\152\137\276\233\272\334\302" +
+        "\001\017\363\347\275\121\142\246\215\150\122\266\337\172\330\376\232\272\004\246" +
+        "\071\300\357\130\024\113\103\244\370\176\227\131\153\046\157\314\105\035\005\114" +
+        "\241\225\204\043\073\024\047\151\341\233\301\034\234\371\000\075\363\131\000\157" +
+        "\276\134\263\321\072\204\120\011\253\060\311\213\035\343\142\156\140\003\367\013" +
+        "\006\156\204\067\024\154\305\246\223\272\301\213\320\125\103\310\046\222\266\360" +
+        "\252\217\170\003\272\222\264\265\051\334\334\202\232\122\222\130\166\231\323\224" +
+        "\254\244\103\360\261\367\055\221\255\050\134\156\133\206\004\372\353\261\014\013" +
+        "\064\076\142\301\115\326\202\121\057\264\052\372\143\020\214\122\154\337\002\003" +
+        "\001\000\001\243\120\060\116\060\035\006\003\125\035\016\004\026\004\024\032\360" +
+        "\137\140\327\256\350\224\211\122\162\131\012\046\201\032\311\327\316\333\060\037" +
+        "\006\003\125\035\043\004\030\060\026\200\024\032\360\137\140\327\256\350\224\211" +
+        "\122\162\131\012\046\201\032\311\327\316\333\060\014\006\003\125\035\023\004\005" +
+        "\060\003\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000" +
+        "\003\202\001\001\000\224\153\003\143\101\017\273\163\101\110\176\144\352\054\077" +
+        "\300\230\175\173\174\114\301\055\173\022\262\206\226\034\226\242\014\111\063\062" +
+        "\343\000\336\240\321\240\217\037\020\170\320\204\002\373\312\200\227\344\113\355" +
+        "\124\061\352\214\155\265\375\046\337\134\224\031\003\334\065\206\355\330\054\101" +
+        "\114\040\053\363\316\150\054\256\155\331\060\042\346\324\063\205\336\231\021\210" +
+        "\241\131\045\026\121\337\327\360\024\021\242\354\133\242\313\075\101\260\100\376" +
+        "\042\061\320\352\103\153\030\200\162\256\302\157\256\323\205\345\331\017\021\256" +
+        "\103\307\346\035\206\313\307\316\051\022\371\267\015\003\201\374\262\014\222\112" +
+        "\120\111\361\002\325\377\250\077\134\301\336\352\317\123\367\122\274\100\377\054" +
+        "\050\016\166\272\161\147\227\142\355\054\022\312\347\276\126\257\323\145\014\267" +
+        "\342\323\362\200\114\303\331\337\041\026\130\177\311\370\126\220\310\263\071\342" +
+        "\027\161\254\225\001\007\115\237\234\351\006\113\232\313\133\044\030\350\320\103" +
+        "\231\023\154\067\003\316\050\016\331\035\253\252\176\207\011\337\145\345\235\026" +
+        "\041"),
+
+        // Android Auto debug public key
+        extractKey(
+        "\060\202\003\275\060\202\002\245\240\003\002\001\002\002\011\000\347\344\006\360" +
+        "\327\303\226\363\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000\060" +
+        "\165\061\013\060\011\006\003\125\004\006\023\002\125\123\061\023\060\021\006\003" +
+        "\125\004\010\014\012\103\141\154\151\146\157\162\156\151\141\061\026\060\024\006" +
+        "\003\125\004\007\014\015\115\157\165\156\164\141\151\156\040\126\151\145\167\061" +
+        "\024\060\022\006\003\125\004\012\014\013\107\157\157\147\154\145\040\111\156\143" +
+        "\056\061\020\060\016\006\003\125\004\013\014\007\101\156\144\162\157\151\144\061" +
+        "\021\060\017\006\003\125\004\003\014\010\147\145\141\162\150\145\141\144\060\036" +
+        "\027\015\061\064\060\065\062\067\062\063\060\062\065\061\132\027\015\064\061\061" +
+        "\060\061\062\062\063\060\062\065\061\132\060\165\061\013\060\011\006\003\125\004" +
+        "\006\023\002\125\123\061\023\060\021\006\003\125\004\010\014\012\103\141\154\151" +
+        "\146\157\162\156\151\141\061\026\060\024\006\003\125\004\007\014\015\115\157\165" +
+        "\156\164\141\151\156\040\126\151\145\167\061\024\060\022\006\003\125\004\012\014" +
+        "\013\107\157\157\147\154\145\040\111\156\143\056\061\020\060\016\006\003\125\004" +
+        "\013\014\007\101\156\144\162\157\151\144\061\021\060\017\006\003\125\004\003\014" +
+        "\010\147\145\141\162\150\145\141\144\060\202\001\042\060\015\006\011\052\206\110" +
+        "\206\367\015\001\001\001\005\000\003\202\001\017\000\060\202\001\012\002\202\001" +
+        "\001\000\242\356\360\300\022\205\313\071\352\245\032\336\264\235\304\126\236\171" +
+        "\375\212\364\343\320\040\347\011\106\276\260\247\214\203\374\016\263\053\123\353" +
+        "\044\174\247\265\016\154\051\260\263\155\236\030\142\064\177\211\323\115\013\242" +
+        "\115\341\163\310\335\130\247\212\072\212\163\050\140\315\274\277\307\276\164\273" +
+        "\321\234\244\333\250\043\366\073\114\060\174\375\331\246\135\246\154\003\353\261" +
+        "\115\231\071\106\330\121\021\257\344\360\060\076\132\201\243\347\260\124\166\316" +
+        "\126\272\272\005\057\034\154\363\353\226\003\306\220\231\261\017\323\243\014\203" +
+        "\056\174\140\061\250\057\206\364\276\071\354\167\312\035\205\067\272\111\177\004" +
+        "\264\334\247\106\166\105\217\154\272\237\364\127\246\323\333\071\216\067\231\133" +
+        "\363\267\106\011\312\241\023\310\047\204\013\053\275\036\176\060\031\250\234\201" +
+        "\031\300\331\311\003\060\072\317\274\034\211\047\255\247\374\371\304\131\044\074" +
+        "\352\073\036\353\266\331\174\063\162\206\007\141\005\226\064\351\353\361\162\304" +
+        "\222\347\002\216\220\225\171\373\032\266\032\225\062\064\310\265\075\165\002\003" +
+        "\001\000\001\243\120\060\116\060\035\006\003\125\035\016\004\026\004\024\365\003" +
+        "\311\347\022\104\014\017\014\015\003\053\217\110\146\333\360\066\005\031\060\037" +
+        "\006\003\125\035\043\004\030\060\026\200\024\365\003\311\347\022\104\014\017\014" +
+        "\015\003\053\217\110\146\333\360\066\005\031\060\014\006\003\125\035\023\004\005" +
+        "\060\003\001\001\377\060\015\006\011\052\206\110\206\367\015\001\001\005\005\000" +
+        "\003\202\001\001\000\015\312\371\207\121\121\360\212\146\067\210\122\261\100\075" +
+        "\112\160\220\127\045\332\324\144\041\316\224\040\105\261\176\236\231\040\072\175" +
+        "\214\171\272\174\155\335\274\126\227\340\242\200\366\070\023\120\134\045\034\146" +
+        "\111\373\245\150\376\372\353\175\036\023\233\035\126\225\344\123\140\322\227\103" +
+        "\250\271\332\365\006\175\143\212\022\371\232\342\214\256\364\135\237\304\216\126" +
+        "\024\036\370\156\322\222\043\144\006\303\360\051\202\026\132\060\111\036\171\250" +
+        "\044\243\063\230\222\337\262\331\007\175\222\062\275\101\006\046\053\064\013\347" +
+        "\160\250\330\101\122\274\162\324\321\316\032\115\101\003\301\201\160\100\367\305" +
+        "\345\371\335\103\077\055\064\045\144\056\027\113\054\232\022\234\046\353\337\164" +
+        "\111\305\027\261\357\153\034\377\200\044\075\237\066\253\100\215\302\044\037\035" +
+        "\071\165\160\027\311\234\310\064\101\317\202\121\371\200\351\136\216\201\017\347" +
+        "\306\267\136\150\277\354\346\250\057\061\151\077\117\327\362\140\240\065\342\062" +
+        "\034\277\352\274\040\166\057\126\304\367\374\231\276\323\234\020\276\012\113\027" +
+        "\320"),
+    };
+
+    /**
+     * Disallow instantiation of this helper class.
+     */
+    private PackageValidator() {}
+
+    /**
+     * Throws when the caller is not authorized to get data from this MediaBrowserService
+     */
+    public static void checkCallerAllowed(Context context, String callingPackage, int callingUid) {
+        if (!isCallerAllowed(context, callingPackage, callingUid)) {
+            throw new SecurityException("signature check failed.");
+        }
+    }
+
+    /**
+     * @return false if the caller is not authorized to get data from this MediaBrowserService
+     */
+    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)) {
+            return true;
+        }
+        PackageInfo packageInfo;
+        final PackageManager packageManager = context.getPackageManager();
+        try {
+            packageInfo = packageManager.getPackageInfo(
+                    callingPackage, PackageManager.GET_SIGNATURES);
+        } catch (PackageManager.NameNotFoundException ignored) {
+            if (Log.isLoggable(TAG, Log.DEBUG)) {
+                Log.d(TAG, "Package manager can't find package " + callingPackage
+                        + ", defaulting to false");
+            }
+            return false;
+        }
+        if (packageInfo == null) {
+            Log.w(TAG, "Package manager can't find package: " + callingPackage);
+            return false;
+        }
+
+        if (packageInfo.signatures.length != 1) {
+            Log.w(TAG, "Package has more than one signature.");
+            return false;
+        }
+        final byte[] signature = packageInfo.signatures[0].toByteArray();
+
+        for (int i = 0; i < VALID_PUBLIC_SIGNATURES.length; i++) {
+            byte[] validSignature = VALID_PUBLIC_SIGNATURES[i];
+            if (Arrays.equals(validSignature, signature)) {
+                return true;
+            }
+        }
+
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.v(TAG, "Signature not valid.  Found: \n" +
+                    Base64.encodeToString(signature, 0));
+        }
+        return false;
+    }
+
+    private static byte[] extractKey(String keyString) {
+        try {
+            return keyString.getBytes("ISO-8859-1");
+        } catch (UnsupportedEncodingException e) {
+            throw new AssertionError(e);
+        }
+    }
+}
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/model/MusicProvider.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/model/MusicProvider.java
index ae90fb0..d0e2e0b 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/model/MusicProvider.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/model/MusicProvider.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
+ * 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.
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/MediaIDHelper.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/MediaIDHelper.java
index 68e6db9..f66a010 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/MediaIDHelper.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/MediaIDHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
+ * 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.
diff --git a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/QueueHelper.java b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/QueueHelper.java
index abe3d34..980efaa 100644
--- a/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/QueueHelper.java
+++ b/media/MediaBrowserService/Application/src/main/java/com/example/android/mediabrowserservice/utils/QueueHelper.java
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2014 Google Inc. All Rights Reserved.
+ * 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.
diff --git a/media/MediaBrowserService/Application/src/main/res/drawable-night-xxhdpi/ic_star_off.png b/media/MediaBrowserService/Application/src/main/res/drawable-night-xxhdpi/ic_star_off.png
deleted file mode 100644
index e435d2a..0000000
--- a/media/MediaBrowserService/Application/src/main/res/drawable-night-xxhdpi/ic_star_off.png
+++ /dev/null
Binary files differ
diff --git a/media/MediaBrowserService/Application/src/main/res/drawable-night-xxhdpi/ic_star_on.png b/media/MediaBrowserService/Application/src/main/res/drawable-night-xxhdpi/ic_star_on.png
deleted file mode 100644
index 0c75bb6..0000000
--- a/media/MediaBrowserService/Application/src/main/res/drawable-night-xxhdpi/ic_star_on.png
+++ /dev/null
Binary files differ
diff --git a/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_off.png b/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_off.png
index 836085b..fb7afb0 100644
--- a/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_off.png
+++ b/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_off.png
Binary files differ
diff --git a/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_on.png b/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_on.png
index 7cd6cfc..6f7fc75 100644
--- a/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_on.png
+++ b/media/MediaBrowserService/Application/src/main/res/drawable-xxhdpi/ic_star_on.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml b/wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml
index be34231..aa8a14a 100644
--- a/wearable/wear/AgendaData/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/AgendaData/Application/src/main/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/wearable/wear/AgendaData/Shared/src/main/AndroidManifest.xml b/wearable/wear/AgendaData/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 5f1e6df..0000000
--- a/wearable/wear/AgendaData/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.agendadata.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml b/wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml
index f2576af..dcab622 100644
--- a/wearable/wear/AgendaData/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/AgendaData/Wearable/src/main/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/wearable/wear/AgendaData/settings.gradle b/wearable/wear/AgendaData/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/AgendaData/settings.gradle
+++ b/wearable/wear/AgendaData/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/AgendaData/template-params.xml b/wearable/wear/AgendaData/template-params.xml
index 65c43f4..e573d9d 100644
--- a/wearable/wear/AgendaData/template-params.xml
+++ b/wearable/wear/AgendaData/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/DataLayer/Application/src/main/AndroidManifest.xml b/wearable/wear/DataLayer/Application/src/main/AndroidManifest.xml
index 787e273..6f7e81e 100644
--- a/wearable/wear/DataLayer/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/DataLayer/Application/src/main/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/wearable/wear/DataLayer/Shared/src/main/AndroidManifest.xml b/wearable/wear/DataLayer/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index d05bfd5..0000000
--- a/wearable/wear/DataLayer/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.datalayer.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/DataLayer/Shared/src/main/res/values/strings.xml b/wearable/wear/DataLayer/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/DataLayer/Shared/src/main/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/wearable/wear/DataLayer/Wearable/src/main/AndroidManifest.xml b/wearable/wear/DataLayer/Wearable/src/main/AndroidManifest.xml
index 38c0798..4cc9034 100644
--- a/wearable/wear/DataLayer/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/DataLayer/Wearable/src/main/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/wearable/wear/DataLayer/settings.gradle b/wearable/wear/DataLayer/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/DataLayer/settings.gradle
+++ b/wearable/wear/DataLayer/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/DataLayer/template-params.xml b/wearable/wear/DataLayer/template-params.xml
index fbdc201..737e8c6 100644
--- a/wearable/wear/DataLayer/template-params.xml
+++ b/wearable/wear/DataLayer/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml b/wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml
index 3fa1f36..c9fdccb 100644
--- a/wearable/wear/DelayedConfirmation/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/DelayedConfirmation/Application/src/main/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/wearable/wear/DelayedConfirmation/Shared/.gitignore b/wearable/wear/DelayedConfirmation/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/DelayedConfirmation/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/DelayedConfirmation/Shared/src/main/AndroidManifest.xml b/wearable/wear/DelayedConfirmation/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 0dd8908..0000000
--- a/wearable/wear/DelayedConfirmation/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.delayedconfirmation.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/DelayedConfirmation/Shared/src/main/res/values/strings.xml b/wearable/wear/DelayedConfirmation/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/DelayedConfirmation/Shared/src/main/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/wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml b/wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml
index b73af62..845c070 100644
--- a/wearable/wear/DelayedConfirmation/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/DelayedConfirmation/Wearable/src/main/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/wearable/wear/DelayedConfirmation/settings.gradle b/wearable/wear/DelayedConfirmation/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/DelayedConfirmation/settings.gradle
+++ b/wearable/wear/DelayedConfirmation/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/DelayedConfirmation/template-params.xml b/wearable/wear/DelayedConfirmation/template-params.xml
index 886977b..302c610 100644
--- a/wearable/wear/DelayedConfirmation/template-params.xml
+++ b/wearable/wear/DelayedConfirmation/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml b/wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml
index 14e9823..8f35c56 100644
--- a/wearable/wear/ElizaChat/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/ElizaChat/Application/src/main/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/wearable/wear/ElizaChat/Shared/.gitignore b/wearable/wear/ElizaChat/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/ElizaChat/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/ElizaChat/Shared/src/main/AndroidManifest.xml b/wearable/wear/ElizaChat/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index dfbb092..0000000
--- a/wearable/wear/ElizaChat/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<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>
diff --git a/wearable/wear/ElizaChat/Shared/src/main/res/values/strings.xml b/wearable/wear/ElizaChat/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/ElizaChat/Shared/src/main/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/wearable/wear/ElizaChat/template-params.xml b/wearable/wear/ElizaChat/template-params.xml
index 159c13c..6b532a9 100644
--- a/wearable/wear/ElizaChat/template-params.xml
+++ b/wearable/wear/ElizaChat/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/EmbeddedApp/Shared/.gitignore b/wearable/wear/EmbeddedApp/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/EmbeddedApp/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/EmbeddedApp/Shared/src/main/AndroidManifest.xml b/wearable/wear/EmbeddedApp/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 4801715..0000000
--- a/wearable/wear/EmbeddedApp/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.embeddedapp.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/EmbeddedApp/Shared/src/main/res/values/strings.xml b/wearable/wear/EmbeddedApp/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/EmbeddedApp/Shared/src/main/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/wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml b/wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml
index 2c1d52c..4863d66 100644
--- a/wearable/wear/EmbeddedApp/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/EmbeddedApp/Wearable/src/main/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/wearable/wear/EmbeddedApp/settings.gradle b/wearable/wear/EmbeddedApp/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/EmbeddedApp/settings.gradle
+++ b/wearable/wear/EmbeddedApp/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/EmbeddedApp/template-params.xml b/wearable/wear/EmbeddedApp/template-params.xml
index 6636915..bb9bdc5 100644
--- a/wearable/wear/EmbeddedApp/template-params.xml
+++ b/wearable/wear/EmbeddedApp/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml b/wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml
index e88a046..8cb70d1 100644
--- a/wearable/wear/FindMyPhone/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/FindMyPhone/Application/src/main/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/wearable/wear/FindMyPhone/Shared/.gitignore b/wearable/wear/FindMyPhone/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/FindMyPhone/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/FindMyPhone/Shared/src/main/AndroidManifest.xml b/wearable/wear/FindMyPhone/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index b51d6f7..0000000
--- a/wearable/wear/FindMyPhone/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.findphone.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/FindMyPhone/Shared/src/main/res/values/strings.xml b/wearable/wear/FindMyPhone/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/FindMyPhone/Shared/src/main/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/wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml b/wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml
index fd6d274..18b5209 100644
--- a/wearable/wear/FindMyPhone/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/FindMyPhone/Wearable/src/main/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/wearable/wear/FindMyPhone/settings.gradle b/wearable/wear/FindMyPhone/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/FindMyPhone/settings.gradle
+++ b/wearable/wear/FindMyPhone/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/FindMyPhone/template-params.xml b/wearable/wear/FindMyPhone/template-params.xml
index d06e57b..640467a 100644
--- a/wearable/wear/FindMyPhone/template-params.xml
+++ b/wearable/wear/FindMyPhone/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/Flashlight/Application/src/main/AndroidManifest.xml b/wearable/wear/Flashlight/Application/src/main/AndroidManifest.xml
index 44cfdd3..3c50f59 100644
--- a/wearable/wear/Flashlight/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/Flashlight/Application/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
 <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:label="@string/app_name">
diff --git a/wearable/wear/Flashlight/Shared/.gitignore b/wearable/wear/Flashlight/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/Flashlight/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/Flashlight/Shared/src/main/AndroidManifest.xml b/wearable/wear/Flashlight/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index b3cd767..0000000
--- a/wearable/wear/Flashlight/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.flashlight.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/Flashlight/Shared/src/main/res/values/strings.xml b/wearable/wear/Flashlight/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/Flashlight/Shared/src/main/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/wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml b/wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml
index 1800e76..738ba9d 100644
--- a/wearable/wear/Flashlight/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/Flashlight/Wearable/src/main/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/wearable/wear/Flashlight/settings.gradle b/wearable/wear/Flashlight/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/Flashlight/settings.gradle
+++ b/wearable/wear/Flashlight/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/Flashlight/template-params.xml b/wearable/wear/Flashlight/template-params.xml
index b6c03ff..ca47208 100644
--- a/wearable/wear/Flashlight/template-params.xml
+++ b/wearable/wear/Flashlight/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml b/wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml
index ba97815..d07a265 100644
--- a/wearable/wear/Geofencing/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/Geofencing/Application/src/main/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/wearable/wear/Geofencing/Shared/.gitignore b/wearable/wear/Geofencing/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/Geofencing/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/Geofencing/Shared/src/main/AndroidManifest.xml b/wearable/wear/Geofencing/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 401afcb..0000000
--- a/wearable/wear/Geofencing/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.geofencing.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/Geofencing/Shared/src/main/res/values/strings.xml b/wearable/wear/Geofencing/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/Geofencing/Shared/src/main/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/wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml b/wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml
index 97ce90e..082f396 100644
--- a/wearable/wear/Geofencing/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/Geofencing/Wearable/src/main/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/wearable/wear/Geofencing/settings.gradle b/wearable/wear/Geofencing/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/Geofencing/settings.gradle
+++ b/wearable/wear/Geofencing/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/Geofencing/template-params.xml b/wearable/wear/Geofencing/template-params.xml
index 7e81ace..0f27127 100644
--- a/wearable/wear/Geofencing/template-params.xml
+++ b/wearable/wear/Geofencing/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/GridViewPager/Application/src/main/AndroidManifest.xml b/wearable/wear/GridViewPager/Application/src/main/AndroidManifest.xml
index 57241ce..8060bc8 100644
--- a/wearable/wear/GridViewPager/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/GridViewPager/Application/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
 <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:label="@string/app_name">
diff --git a/wearable/wear/GridViewPager/Shared/.gitignore b/wearable/wear/GridViewPager/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/GridViewPager/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/GridViewPager/Shared/src/main/AndroidManifest.xml b/wearable/wear/GridViewPager/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index f41bc23..0000000
--- a/wearable/wear/GridViewPager/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.gridviewpager.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/GridViewPager/Shared/src/main/res/values/strings.xml b/wearable/wear/GridViewPager/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/GridViewPager/Shared/src/main/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/wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml b/wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml
index 3f9c4b1..5c362dc 100644
--- a/wearable/wear/GridViewPager/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/GridViewPager/Wearable/src/main/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/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/CustomFragment.java b/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/CustomFragment.java
new file mode 100644
index 0000000..aff3665
--- /dev/null
+++ b/wearable/wear/GridViewPager/Wearable/src/main/java/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/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java b/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java
index 8f9bcf9..4d329c5 100644
--- a/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java
+++ b/wearable/wear/GridViewPager/Wearable/src/main/java/com/example/android/wearable/gridviewpager/SampleGridPagerAdapter.java
@@ -19,22 +19,104 @@
 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();
+        return CardFragment.create(res.getText(titleRes), res.getText(textRes));
     }
 
     static final int[] BG_IMAGES = new int[] {
@@ -45,90 +127,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/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png b/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png
new file mode 100644
index 0000000..7b393b2
--- /dev/null
+++ b/wearable/wear/GridViewPager/Wearable/src/main/res/drawable-nodpi/bugdroid_large.png
Binary files differ
diff --git a/wearable/wear/AgendaData/Shared/src/main/res/values/strings.xml b/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/gradient.xml
similarity index 69%
rename from wearable/wear/AgendaData/Shared/src/main/res/values/strings.xml
rename to wearable/wear/GridViewPager/Wearable/src/main/res/drawable/gradient.xml
index 0f2bb90..7077043 100644
--- a/wearable/wear/AgendaData/Shared/src/main/res/values/strings.xml
+++ b/wearable/wear/GridViewPager/Wearable/src/main/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/wearable/wear/AgendaData/Shared/src/main/res/values/strings.xml b/wearable/wear/GridViewPager/Wearable/src/main/res/drawable/shape.xml
similarity index 60%
copy from wearable/wear/AgendaData/Shared/src/main/res/values/strings.xml
copy to wearable/wear/GridViewPager/Wearable/src/main/res/drawable/shape.xml
index 0f2bb90..a6306c7 100644
--- a/wearable/wear/AgendaData/Shared/src/main/res/values/strings.xml
+++ b/wearable/wear/GridViewPager/Wearable/src/main/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/wearable/wear/GridViewPager/Wearable/src/main/res/layout/custom_fragment.xml b/wearable/wear/GridViewPager/Wearable/src/main/res/layout/custom_fragment.xml
new file mode 100644
index 0000000..13b02f2
--- /dev/null
+++ b/wearable/wear/GridViewPager/Wearable/src/main/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/wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml b/wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml
index 404119b..ab4e663 100644
--- a/wearable/wear/GridViewPager/Wearable/src/main/res/values/strings.xml
+++ b/wearable/wear/GridViewPager/Wearable/src/main/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/wearable/wear/GridViewPager/settings.gradle b/wearable/wear/GridViewPager/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/GridViewPager/settings.gradle
+++ b/wearable/wear/GridViewPager/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/GridViewPager/template-params.xml b/wearable/wear/GridViewPager/template-params.xml
index 919d640..0ac1ad3 100644
--- a/wearable/wear/GridViewPager/template-params.xml
+++ b/wearable/wear/GridViewPager/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/JumpingJack/Application/src/main/AndroidManifest.xml b/wearable/wear/JumpingJack/Application/src/main/AndroidManifest.xml
index 5e687cb..88e559a 100644
--- a/wearable/wear/JumpingJack/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/JumpingJack/Application/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
 <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"
diff --git a/wearable/wear/JumpingJack/Shared/.gitignore b/wearable/wear/JumpingJack/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/JumpingJack/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/JumpingJack/Shared/src/main/AndroidManifest.xml b/wearable/wear/JumpingJack/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index d2fa0aa..0000000
--- a/wearable/wear/JumpingJack/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.jumpingjack.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/JumpingJack/Shared/src/main/res/values/strings.xml b/wearable/wear/JumpingJack/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/JumpingJack/Shared/src/main/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/wearable/wear/JumpingJack/Wearable/src/main/AndroidManifest.xml b/wearable/wear/JumpingJack/Wearable/src/main/AndroidManifest.xml
index f123f77..02b7a4f 100644
--- a/wearable/wear/JumpingJack/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/JumpingJack/Wearable/src/main/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/wearable/wear/JumpingJack/settings.gradle b/wearable/wear/JumpingJack/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/JumpingJack/settings.gradle
+++ b/wearable/wear/JumpingJack/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/JumpingJack/template-params.xml b/wearable/wear/JumpingJack/template-params.xml
index a067ae5..7351c1d 100644
--- a/wearable/wear/JumpingJack/template-params.xml
+++ b/wearable/wear/JumpingJack/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/Notifications/Application/src/main/AndroidManifest.xml b/wearable/wear/Notifications/Application/src/main/AndroidManifest.xml
index a0ed729..3f1274d 100644
--- a/wearable/wear/Notifications/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/Notifications/Application/src/main/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/wearable/wear/Notifications/Application/src/main/res/values/colors.xml b/wearable/wear/Notifications/Application/src/main/res/values/colors.xml
index 9464085..fbcf956 100644
--- a/wearable/wear/Notifications/Application/src/main/res/values/colors.xml
+++ b/wearable/wear/Notifications/Application/src/main/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/wearable/wear/Notifications/Shared/.gitignore b/wearable/wear/Notifications/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/Notifications/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/Notifications/Shared/src/main/AndroidManifest.xml b/wearable/wear/Notifications/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index cfc7e7b..0000000
--- a/wearable/wear/Notifications/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.support.wearable.notifications.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/Notifications/Shared/src/main/res/values/strings.xml b/wearable/wear/Notifications/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/Notifications/Shared/src/main/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/wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml b/wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml
index 57cd7c4..34a29ff 100644
--- a/wearable/wear/Notifications/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/Notifications/Wearable/src/main/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/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java b/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java
index 773dfe4..4ec554c 100644
--- a/wearable/wear/Notifications/Wearable/src/main/java/com/example/android/support/wearable/notifications/WearableListItemLayout.java
+++ b/wearable/wear/Notifications/Wearable/src/main/java/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/wearable/wear/Notifications/settings.gradle b/wearable/wear/Notifications/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/Notifications/settings.gradle
+++ b/wearable/wear/Notifications/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/Notifications/template-params.xml b/wearable/wear/Notifications/template-params.xml
index 0fd98bf..3b9dda1 100644
--- a/wearable/wear/Notifications/template-params.xml
+++ b/wearable/wear/Notifications/template-params.xml
@@ -18,14 +18,14 @@
 
 
 <sample>
-    <name>Notifications</name>
+    <name>Wearable Notifications</name>
     <group>Wearable</group>
     <package>com.example.android.support.wearable.notifications</package>
 
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/Quiz/Application/src/main/AndroidManifest.xml b/wearable/wear/Quiz/Application/src/main/AndroidManifest.xml
index ce72135..55b666f 100644
--- a/wearable/wear/Quiz/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/Quiz/Application/src/main/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/wearable/wear/Quiz/Shared/.gitignore b/wearable/wear/Quiz/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/Quiz/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/Quiz/Shared/src/main/AndroidManifest.xml b/wearable/wear/Quiz/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 0427456..0000000
--- a/wearable/wear/Quiz/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.quiz.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/Quiz/Shared/src/main/res/values/strings.xml b/wearable/wear/Quiz/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/Quiz/Shared/src/main/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/wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml b/wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml
index fd20def..fbc7492 100644
--- a/wearable/wear/Quiz/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/Quiz/Wearable/src/main/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/wearable/wear/Quiz/settings.gradle b/wearable/wear/Quiz/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/Quiz/settings.gradle
+++ b/wearable/wear/Quiz/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/Quiz/template-params.xml b/wearable/wear/Quiz/template-params.xml
index db917d1..383a313 100644
--- a/wearable/wear/Quiz/template-params.xml
+++ b/wearable/wear/Quiz/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml b/wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml
index 3ddff20..1786d27 100644
--- a/wearable/wear/RecipeAssistant/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/RecipeAssistant/Application/src/main/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/wearable/wear/RecipeAssistant/Shared/.gitignore b/wearable/wear/RecipeAssistant/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/RecipeAssistant/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/RecipeAssistant/Shared/src/main/AndroidManifest.xml b/wearable/wear/RecipeAssistant/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 00c8693..0000000
--- a/wearable/wear/RecipeAssistant/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<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>
diff --git a/wearable/wear/RecipeAssistant/Shared/src/main/res/values/strings.xml b/wearable/wear/RecipeAssistant/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/RecipeAssistant/Shared/src/main/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/wearable/wear/RecipeAssistant/template-params.xml b/wearable/wear/RecipeAssistant/template-params.xml
index 1ab91e4..5fe7af7 100644
--- a/wearable/wear/RecipeAssistant/template-params.xml
+++ b/wearable/wear/RecipeAssistant/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/SkeletonWearableApp/Application/src/main/AndroidManifest.xml b/wearable/wear/SkeletonWearableApp/Application/src/main/AndroidManifest.xml
index 0cbc037..25ed258 100644
--- a/wearable/wear/SkeletonWearableApp/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/SkeletonWearableApp/Application/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
 <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:label="@string/app_name">
diff --git a/wearable/wear/SkeletonWearableApp/Shared/.gitignore b/wearable/wear/SkeletonWearableApp/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/SkeletonWearableApp/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/SkeletonWearableApp/Shared/src/main/AndroidManifest.xml b/wearable/wear/SkeletonWearableApp/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 34de8d3..0000000
--- a/wearable/wear/SkeletonWearableApp/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.google.wearable.app.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/SkeletonWearableApp/Shared/src/main/res/values/strings.xml b/wearable/wear/SkeletonWearableApp/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/SkeletonWearableApp/Shared/src/main/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/wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml b/wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml
index bf1c1a4..f99d785 100644
--- a/wearable/wear/SkeletonWearableApp/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/SkeletonWearableApp/Wearable/src/main/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/wearable/wear/SkeletonWearableApp/settings.gradle b/wearable/wear/SkeletonWearableApp/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/SkeletonWearableApp/settings.gradle
+++ b/wearable/wear/SkeletonWearableApp/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/SkeletonWearableApp/template-params.xml b/wearable/wear/SkeletonWearableApp/template-params.xml
index afa8cfc..2073e56 100644
--- a/wearable/wear/SkeletonWearableApp/template-params.xml
+++ b/wearable/wear/SkeletonWearableApp/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/AgendaData/Shared/.gitignore b/wearable/wear/SpeedTracker/Application/.gitignore
similarity index 100%
copy from wearable/wear/AgendaData/Shared/.gitignore
copy to wearable/wear/SpeedTracker/Application/.gitignore
diff --git a/wearable/wear/SpeedTracker/Application/src/main/AndroidManifest.xml b/wearable/wear/SpeedTracker/Application/src/main/AndroidManifest.xml
index 3fb57f7..44284d4 100644
--- a/wearable/wear/SpeedTracker/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/SpeedTracker/Application/src/main/AndroidManifest.xml
@@ -13,7 +13,7 @@
         android:glEsVersion="0x00020000" android:required="true"/>
     <uses-sdk
         android:minSdkVersion="18"
-        android:targetSdkVersion="19" />
+        android:targetSdkVersion="21" />
 
     <application
         android:name=".PhoneApplication"
diff --git a/wearable/wear/DataLayer/Shared/.gitignore b/wearable/wear/SpeedTracker/Shared/.gitignore
similarity index 100%
rename from wearable/wear/DataLayer/Shared/.gitignore
rename to wearable/wear/SpeedTracker/Shared/.gitignore
diff --git a/wearable/wear/AgendaData/Shared/.gitignore b/wearable/wear/SpeedTracker/Wearable/.gitignore
similarity index 100%
rename from wearable/wear/AgendaData/Shared/.gitignore
rename to wearable/wear/SpeedTracker/Wearable/.gitignore
diff --git a/wearable/wear/SpeedTracker/Wearable/src/main/AndroidManifest.xml b/wearable/wear/SpeedTracker/Wearable/src/main/AndroidManifest.xml
index 750f052..ab19d5e 100644
--- a/wearable/wear/SpeedTracker/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/SpeedTracker/Wearable/src/main/AndroidManifest.xml
@@ -24,7 +24,7 @@
 
     <uses-sdk
         android:minSdkVersion="20"
-        android:targetSdkVersion="20" />
+        android:targetSdkVersion="21" />
 
     <application
         android:allowBackup="true"
diff --git a/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java b/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java
index 9fd882d..5796c13 100644
--- a/wearable/wear/SpeedTracker/Wearable/src/main/java/com/example/android/wearable/speedtracker/ui/SpeedPickerLayout.java
+++ b/wearable/wear/SpeedTracker/Wearable/src/main/java/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/wearable/wear/SpeedTracker/template-params.xml b/wearable/wear/SpeedTracker/template-params.xml
index 2e9f454..f75da54 100644
--- a/wearable/wear/SpeedTracker/template-params.xml
+++ b/wearable/wear/SpeedTracker/template-params.xml
@@ -25,7 +25,7 @@
 `
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml b/wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml
index eb6a149..1737c7d 100644
--- a/wearable/wear/SynchronizedNotifications/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/SynchronizedNotifications/Application/src/main/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/wearable/wear/SynchronizedNotifications/Application/tests/AndroidManifest.xml b/wearable/wear/SynchronizedNotifications/Application/tests/AndroidManifest.xml
deleted file mode 100644
index 4c151ca..0000000
--- a/wearable/wear/SynchronizedNotifications/Application/tests/AndroidManifest.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-  Copyright (C) 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.
-  -->
-<!-- package name must be unique so suffix with "tests" so package loader doesn't ignore us -->
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-          package="com.example.android.wearable.synchronizednotifications.tests"
-          android:versionCode="1"
-          android:versionName="1.0">
-
-    <!-- Min/target SDK versions (<uses-sdk>) managed by build.gradle -->
-
-    <!-- We add an application tag here just so that we can indicate that
-         this package needs to link against the android.test library,
-         which is needed when building test cases. -->
-    <application>
-        <uses-library android:name="android.test.runner" />
-    </application>
-
-    <!--
-    Specifies the instrumentation test runner used to run the tests.
-    -->
-    <instrumentation
-            android:name="android.test.InstrumentationTestRunner"
-            android:targetPackage="com.example.android.wearable.synchronizednotifications"
-            android:label="Tests for com.example.android.wearable.synchronizednotifications" />
-
-</manifest>
diff --git a/wearable/wear/SynchronizedNotifications/Application/tests/src/com/example/android/com/example/android/wearable/synchronizednotifications/tests/SampleTests.java b/wearable/wear/SynchronizedNotifications/Application/tests/src/com/example/android/com/example/android/wearable/synchronizednotifications/tests/SampleTests.java
deleted file mode 100644
index 895b557..0000000
--- a/wearable/wear/SynchronizedNotifications/Application/tests/src/com/example/android/com/example/android/wearable/synchronizednotifications/tests/SampleTests.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-* Copyright (C) 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.
-*/
-package com.example.android.wearable.synchronizednotifications.tests;
-
-import com.example.android.wearable.synchronizednotifications.*;
-
-import android.test.ActivityInstrumentationTestCase2;
-
-/**
-* Tests for SynchronizedNotifications sample.
-*/
-public class SampleTests extends ActivityInstrumentationTestCase2<MainActivity> {
-
-    private MainActivity mTestActivity;
-    private SynchronizedNotificationsFragment mTestFragment;
-
-    public SampleTests() {
-        super(MainActivity.class);
-    }
-
-    @Override
-    protected void setUp() throws Exception {
-        super.setUp();
-
-        // Starts the activity under test using the default Intent with:
-        // action = {@link Intent#ACTION_MAIN}
-        // flags = {@link Intent#FLAG_ACTIVITY_NEW_TASK}
-        // All other fields are null or empty.
-        mTestActivity = getActivity();
-        mTestFragment = (SynchronizedNotificationsFragment)
-            mTestActivity.getSupportFragmentManager().getFragments().get(1);
-    }
-
-    /**
-    * Test if the test fixture has been set up correctly.
-    */
-    public void testPreconditions() {
-        //Try to add a message to add context to your assertions. These messages will be shown if
-        //a tests fails and make it easy to understand why a test failed
-        assertNotNull("mTestActivity is null", mTestActivity);
-        assertNotNull("mTestFragment is null", mTestFragment);
-    }
-
-}
diff --git a/wearable/wear/SynchronizedNotifications/CONTRIB.md b/wearable/wear/SynchronizedNotifications/CONTRIB.md
new file mode 100644
index 0000000..14a4fcf
--- /dev/null
+++ b/wearable/wear/SynchronizedNotifications/CONTRIB.md
@@ -0,0 +1,35 @@
+# How to become a contributor and submit your own code
+
+## Contributor License Agreements
+
+We'd love to accept your sample apps and patches! Before we can take them, we
+have to jump a couple of legal hurdles.
+
+Please fill out either the individual or corporate Contributor License Agreement (CLA).
+
+  * If you are an individual writing original source code and you're sure you
+    own the intellectual property, then you'll need to sign an [individual CLA]
+    (https://developers.google.com/open-source/cla/individual).
+  * If you work for a company that wants to allow you to contribute your work,
+    then you'll need to sign a [corporate CLA]
+    (https://developers.google.com/open-source/cla/corporate).
+
+Follow either of the two links above to access the appropriate CLA and
+instructions for how to sign and return it. Once we receive it, we'll be able to
+accept your pull requests.
+
+## Contributing A Patch
+
+1. Submit an issue describing your proposed change to the repo in question.
+1. The repo owner will respond to your issue promptly.
+1. If your proposed change is accepted, and you haven't already done so, sign a
+   Contributor License Agreement (see details above).
+1. Fork the desired repo, develop and test your code changes.
+1. Ensure that your code adheres to the existing style in the sample to which
+   you are contributing. Refer to the
+   [Android Code Style Guide]
+   (https://source.android.com/source/code-style.html) for the
+   recommended coding standards for this organization.
+1. Ensure that your code has an appropriate set of unit tests which all pass.
+1. Submit a pull request.
+
diff --git a/wearable/wear/SynchronizedNotifications/LICENSE b/wearable/wear/SynchronizedNotifications/LICENSE
new file mode 100644
index 0000000..1af981f
--- /dev/null
+++ b/wearable/wear/SynchronizedNotifications/LICENSE
@@ -0,0 +1,201 @@
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   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.
diff --git a/wearable/wear/SynchronizedNotifications/Shared/build.gradle b/wearable/wear/SynchronizedNotifications/Shared/build.gradle
deleted file mode 100644
index dda6f07..0000000
--- a/wearable/wear/SynchronizedNotifications/Shared/build.gradle
+++ /dev/null
@@ -1,38 +0,0 @@
-
-
-
-buildscript {
-    repositories {
-        mavenCentral()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:0.12.+'
-    }
-}
-
-apply plugin: 'android-library'
-
-// The sample build uses multiple directories to
-// keep boilerplate and common code separate from
-// the main sample code.
-List<String> dirs = [
-    'main',     // main sample code; look here for the interesting stuff.
-    'common',   // components that are reused by multiple samples
-    'template'] // boilerplate code that is generated by the sample template process
-
-android {
-    compileSdkVersion "android-L"
-
-    buildToolsVersion '20'
-
-    sourceSets {
-        main {
-            dirs.each { dir ->
-                java.srcDirs "src/${dir}/java"
-                res.srcDirs "src/${dir}/res"
-            }
-        }
-
-    }
-}
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/build.gradle b/wearable/wear/SynchronizedNotifications/Wearable/build.gradle
deleted file mode 100644
index 529a093..0000000
--- a/wearable/wear/SynchronizedNotifications/Wearable/build.gradle
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-buildscript {
-    repositories {
-        mavenCentral()
-    }
-
-    dependencies {
-        classpath 'com.android.tools.build:gradle:0.12.+'
-    }
-}
-
-apply plugin: 'com.android.application'
-
-
-
-dependencies {
-    compile 'com.google.android.gms:play-services:5.0.+@aar'
-    compile 'com.android.support:support-v13:20.0.+'
-    compile 'com.google.android.support:wearable:1.0.+'
-    compile project(':Shared')
-}
-
-// The sample build uses multiple directories to
-// keep boilerplate and common code separate from
-// the main sample code.
-List<String> dirs = [
-    'main',     // main sample code; look here for the interesting stuff.
-    'common',   // components that are reused by multiple samples
-    'template'] // boilerplate code that is generated by the sample template process
-
-android {
-    compileSdkVersion 'android-L'
-
-    buildToolsVersion '20'
-
-    buildTypes {
-        release {
-            runProguard false
-            proguardFiles getDefaultProguardFile('proguard-android.txt')
-        }
-    }
-    lintOptions {
-        abortOnError false
-    }
-    sourceSets {
-        main {
-            dirs.each { dir ->
-                java.srcDirs "src/${dir}/java"
-                res.srcDirs "src/${dir}/res"
-            }
-        }
-        androidTest.setRoot('tests')
-        androidTest.java.srcDirs = ['tests/src']
-
-    }
-}
-
-// BEGIN_EXCLUDE
-// Tasks below this line will be hidden from release output
-
-task preflight (dependsOn: parent.preflight) {
-    project.afterEvaluate {
-        // Inject a preflight task into each variant so we have a place to hook tasks
-        // that need to run before any of the android build tasks.
-        //
-        android.applicationVariants.each { variant ->
-            tasks.getByPath("prepare${variant.name.capitalize()}Dependencies").dependsOn preflight
-        }
-    }
-}
-
-// END_EXCLUDE
diff --git a/wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml b/wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml
index b8d5e85..f9b0d9c 100644
--- a/wearable/wear/SynchronizedNotifications/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/SynchronizedNotifications/Wearable/src/main/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/wearable/wear/SynchronizedNotifications/settings.gradle b/wearable/wear/SynchronizedNotifications/settings.gradle
index fc20be4..8522c57 100644
--- a/wearable/wear/SynchronizedNotifications/settings.gradle
+++ b/wearable/wear/SynchronizedNotifications/settings.gradle
@@ -1,4 +1 @@
-
-
-
 include ':Application', ':Wearable', ':Shared'
diff --git a/wearable/wear/SynchronizedNotifications/template-params.xml b/wearable/wear/SynchronizedNotifications/template-params.xml
index 6319fff..1da36eb 100644
--- a/wearable/wear/SynchronizedNotifications/template-params.xml
+++ b/wearable/wear/SynchronizedNotifications/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/Timer/Application/src/main/AndroidManifest.xml b/wearable/wear/Timer/Application/src/main/AndroidManifest.xml
index bd610eb..115e210 100644
--- a/wearable/wear/Timer/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/Timer/Application/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
 <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:label="@string/app_name">
diff --git a/wearable/wear/Timer/Shared/.gitignore b/wearable/wear/Timer/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/Timer/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/Timer/Shared/src/main/AndroidManifest.xml b/wearable/wear/Timer/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 6afc1b7..0000000
--- a/wearable/wear/Timer/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.wearable.timer.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/Timer/Shared/src/main/res/values/strings.xml b/wearable/wear/Timer/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/Timer/Shared/src/main/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/wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml b/wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml
index 9e27947..364fb5a 100644
--- a/wearable/wear/Timer/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/Timer/Wearable/src/main/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/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java b/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java
index 0bbc587..09591bf 100644
--- a/wearable/wear/Timer/Wearable/src/main/java/com/example/android/wearable/timer/WearableListItemLayout.java
+++ b/wearable/wear/Timer/Wearable/src/main/java/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/wearable/wear/Timer/settings.gradle b/wearable/wear/Timer/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/Timer/settings.gradle
+++ b/wearable/wear/Timer/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/Timer/template-params.xml b/wearable/wear/Timer/template-params.xml
index aacbfc1..43284b4 100644
--- a/wearable/wear/Timer/template-params.xml
+++ b/wearable/wear/Timer/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>
diff --git a/wearable/wear/WatchViewStub/Application/src/main/AndroidManifest.xml b/wearable/wear/WatchViewStub/Application/src/main/AndroidManifest.xml
index e98a62f..ce85081 100644
--- a/wearable/wear/WatchViewStub/Application/src/main/AndroidManifest.xml
+++ b/wearable/wear/WatchViewStub/Application/src/main/AndroidManifest.xml
@@ -18,8 +18,8 @@
 <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:label="@string/app_name">
diff --git a/wearable/wear/WatchViewStub/Shared/.gitignore b/wearable/wear/WatchViewStub/Shared/.gitignore
deleted file mode 100644
index 6eb878d..0000000
--- a/wearable/wear/WatchViewStub/Shared/.gitignore
+++ /dev/null
@@ -1,16 +0,0 @@
-# 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.
-src/template/
-src/common/
-build.gradle
diff --git a/wearable/wear/WatchViewStub/Shared/src/main/AndroidManifest.xml b/wearable/wear/WatchViewStub/Shared/src/main/AndroidManifest.xml
deleted file mode 100644
index 703d979..0000000
--- a/wearable/wear/WatchViewStub/Shared/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?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.
--->
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.example.android.google.wearable.watchviewstub.common">
-
-    <application android:allowBackup="true"
-        android:label="@string/app_name">
-    </application>
-
-</manifest>
diff --git a/wearable/wear/WatchViewStub/Shared/src/main/res/values/strings.xml b/wearable/wear/WatchViewStub/Shared/src/main/res/values/strings.xml
deleted file mode 100644
index 0f2bb90..0000000
--- a/wearable/wear/WatchViewStub/Shared/src/main/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/wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml b/wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml
index baa3f78..33a266d 100644
--- a/wearable/wear/WatchViewStub/Wearable/src/main/AndroidManifest.xml
+++ b/wearable/wear/WatchViewStub/Wearable/src/main/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" />
 
diff --git a/wearable/wear/WatchViewStub/settings.gradle b/wearable/wear/WatchViewStub/settings.gradle
index 8522c57..19d00ac 100644
--- a/wearable/wear/WatchViewStub/settings.gradle
+++ b/wearable/wear/WatchViewStub/settings.gradle
@@ -1 +1 @@
-include ':Application', ':Wearable', ':Shared'
+include ':Application', ':Wearable'
diff --git a/wearable/wear/WatchViewStub/template-params.xml b/wearable/wear/WatchViewStub/template-params.xml
index ab7d88e..a101cac 100644
--- a/wearable/wear/WatchViewStub/template-params.xml
+++ b/wearable/wear/WatchViewStub/template-params.xml
@@ -25,7 +25,7 @@
 
 
     <!-- change minSdk if needed-->
-    <minSdk>20</minSdk>
+    <minSdk>18</minSdk>
 
 
     <strings>